Deterministic, not vibes
No scoring, no LLM judge. chisel check . returns the same violations
every run, each with its fix. An agent can’t argue with it, and
neither can a flaky reviewer.
The agent writes. Chisel checks. Every violation points to the skill that teaches the pattern.
Deterministic, not vibes
No scoring, no LLM judge. chisel check . returns the same violations
every run, each with its fix. An agent can’t argue with it, and
neither can a flaky reviewer.
Skills read when they matter
You don’t have to hope the agent reads your docs up front. The check runs after the code is written, and every violation names the bundled skill that teaches the pattern it skipped.
One rulebook, both stacks
chisel for Python backends, chisel-js for TypeScript frontends.
Same rule shape, same JSON output, same architectural intent.
chisel
Python · FastAPI backends
pip install chiselchisel check .chisel-js
TypeScript · SvelteKit frontends
npm install -g chisel-jschisel-js check .Import boundaries
services never import sqlalchemy. ORM types stay in repositories.
Structural invariants
getattr/setattr banned, dataclasses use slots=True.
Component & colour rules
Raw HTML tags must use shadcn replacements, arbitrary Tailwind values banned.
Reactivity rules
$effect without cleanup flagged, onMount must touch a browser API.
Complexity limits
Route handler ≤ 20 LoC, page ≤ 100 LoC.
Testing discipline
One assert per test, mocking libraries banned.
~55 rules in total: Python rules · TypeScript rules
Get a passing check
Install a checker and go from violations to exit 0 in five minutes.
Understand the loop The checker, the skills, and the severities in one page.
Put it in your agent’s loop Install the skills and block violations before they land.