Skip to content

Quick start

Get a deterministic architecture check running on a project in five minutes. Both CLIs work the same way; pick the one that matches your stack.

Terminal window
pip install chisel
chisel check ./your-backend

Both CLIs are standalone; install one or both depending on what you ship.

pip, pipx, or uv:

Terminal window
pip install chisel # or: pipx install chisel
chisel --version

Point the checker at your project root. Non-zero exit on any ERROR-level violation, perfect for gates.

Terminal window
chisel check ./your-backend
chisel check ./your-backend --strict # also enforce src-layout + build config

Coloured, grouped output by default. For scripts or agents, ask for JSON: repeated messages are deduplicated and each carries a message_ref / messageRef plus the skill_name / skillName that teaches the pattern.

Terminal window
chisel check . --json
# or: chisel-js check . --json

explain prints the rule description and the fix an agent should apply. Accepts a rule ID or a category prefix.

Terminal window
chisel explain structural:isinstance-banned
chisel explain structural # every rule in a category
chisel-js explain component-enforcement:raw-button

The checker pairs with bundled agent skills. Install them once per repo so your agent has the same patterns the checker enforces.

Terminal window
chisel setup --target codex # .agents/skills/ (Codex + OpenCode)
chisel setup --target claude # .claude/skills/ (Claude Code)
chisel setup --target opencode # .opencode/skills/

Run with no --target in an interactive terminal to pick the destination from a prompt. Chisel installs one target format per run to avoid duplicate skill discovery in tools like OpenCode.

Section titled “Wire a pre-commit hook (optional but recommended)”

Block violations before they land. The short version:

.pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: chisel
name: chisel
entry: chisel check . --strict
language: system
pass_filenames: false

See Block violations before commit for the full config, including the TypeScript hook.


Next: Understand the loop →