Writing Rules
Last updated: March 12, 2026
Writing Rules
The protocol ships with no rules — you generate them for your stack. Claude
Code can write them for you.
Rule Types
| Type | Directory | Loaded when |
|---|---|---|
| Stack | _protocol_/.claude/rules/stack/ |
Brain declares the stack |
| Practice | _protocol_/.claude/rules/practices/ |
Brain declares the practice |
| Workflow | _protocol_/.claude/rules/workflow/ |
Brain declares the workflow |
| Core | _protocol_/.claude/rules/ |
Always — every brain |
Scoping Rules to File Patterns
By default a rule loads every session. Add paths: frontmatter to scope it so
Claude Code only loads it when a matching file is open in context:
---
paths:
- "**/*_test.go"
- "**/*.test.ts"
- "**/tests/**"
---
Write useful tests. Do not over-test...
Rules without paths: load in every session regardless of what files are open.
Rules with paths: load only when a matching file is active.
Use path-scoped rules for concerns tied to specific file types: testing rules for
test files, CI rules for workflow files, keybinding rules for keymap files.
Keep general practices (error handling, architecture, security) as always-loaded.
Generate with Claude
Open Claude Code inside cerveau.dev/ and use these prompts:
Stack rules
Create a Claude Code rule file for Go development.
Enforce: explicit error handling, table-driven tests, slog for logging,
no global mutable state, go fmt before every commit.
Keep under 80 lines. Rules only — no examples, no prose.
Create a Claude Code rule file for TypeScript with Deno.
Enforce: Zod for validation, explicit return types on exports,
no any, Deno.test for tests, deno fmt before commits.
Keep under 80 lines. Rules only — no examples, no prose.
Practice rules
Create a Claude Code rule file for code review practices.
Enforce: security-first review, error handling coverage, flag dead code,
require PR descriptions with test plans.
Keep under 80 lines. Rules only — no examples, no prose.
Create a Claude Code rule file for testing practices.
Enforce: unit tests for all exported functions, table-driven tests,
no test-only logic in production code, mocks over real dependencies in unit tests.
Keep under 80 lines. Rules only — no examples, no prose.
Workflow rules
Create a Claude Code rule file for git workflow.
Enforce: feature branches, conventional commits (feat/fix/chore/docs/test),
no force push to main, PR-based merges only.
Keep under 80 lines. Rules only — no examples, no prose.
Declare in brains.json
Add the rule name (filename without .md) to the brain’s array:
{
"name": "MyApp",
"path": "_brains_/myapp-brain",
"codebase": "_projects_/myapp",
"isCore": false,
"stacks": ["go"],
"practices": ["testing", "code-review"],
"workflows": ["git", "mdplanner-tasks", "local-dev"],
"agents": ["goal-planner"]
}
Then rebuild:
./_scripts_/rebuild-brain-rules.sh MyApp
Evolving Rules
As your project evolves, ask Claude to refine:
Read my codebase and create a stack rule that captures the patterns and
conventions we're using. Focus on what's unique to this project.
We keep making the same mistakes in PRs. Create a code-review practice rule
that catches [specific issues].
Best Practices
- Keep rules short — under 80 lines per file
- Rules only — no examples, no tutorials, no prose
- One file per concern — many small rules beats one large generic rule
- Language-agnostic practices — put language tips in stack rules
- Every line costs tokens — eliminate anything that doesn’t enforce a rule