brains.json Schema
Last updated: March 12, 2026
brains.json Schema
Located at _configs_/brains.json. Registers all brains and declares what
each one loads.
Full Example
{
"brains": [
{
"name": "MyApp",
"path": "_brains_/myapp-brain",
"codebase": "_projects_/myapp",
"isCore": false,
"stacks": ["go", "docker"],
"practices": ["testing", "code-review"],
"workflows": ["git", "local-dev", "mdplanner-tasks"],
"agents": ["goal-planner"]
}
]
}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Brain name. Used by Makefile (NAME=) and rebuild script. Case-sensitive. |
path |
string | yes | Relative path to the brain directory from the monorepo root. |
codebase |
string | no | Relative path to the code repo. Added by make onboard automatically. |
isCore |
boolean | no | Reserved for the protocol’s own brain. Set false for all project brains. |
stacks |
array | yes | Stack rule filenames (without .md) to symlink from _protocol_/.claude/rules/stack/. |
practices |
array | yes | Practice rule filenames to symlink from _protocol_/.claude/rules/practices/. |
workflows |
array | yes | Workflow rule filenames to symlink from _protocol_/.claude/rules/workflow/. |
agents |
array | yes | Agent filenames (without .md) to symlink from _protocol_/.claude/agents/. |
Selective Loading Rules
Array values must exactly match filenames in the protocol directories
(without .md):
_protocol_/.claude/rules/stack/go.md → "stacks": ["go"]
_protocol_/.claude/rules/stack/go.md → "stacks": ["go", "docker"]
↑
also needs docker.md to exist
If a declared rule filename doesn’t exist in the protocol, the rebuild script
skips it with a warning.
After Editing
Always run the rebuild script after modifying brains.json:
./_scripts_/rebuild-brain-rules.sh MyApp