Per-Project Override Patterns
This guide shows when to use per-project config, how to scaffold it, and the common patterns for tailoring one project without changing your machine-wide defaults.
When To Use Per-Project Config
Reach for a project config when one project needs a different effective view than your machine defaults. Examples:
- a project should disable a globally curated skill
- a project should add its own local MCP server
- a project should enable Parallel, Beads, or MarkItDown without enabling them globally
- a project should disable a downstream target (e.g. no Cursor)
If every project should get the change, prefer machine defaults
(drwn library defaults add ...) instead.
Scaffold
cd /path/to/project
drwn init
This creates:
<project>/.agents/drwn/config.json
Use --non-interactive or --minimal for scripts. --force overwrites an
existing config.
What Project Config Can Do
A project config can:
- toggle existing MCP servers on or off for one project
- add project-local MCP server definitions
- enable extensions (Parallel, Beads, MarkItDown) for one project
- include or exclude skills during write
- enable or disable downstream targets for one project
Discovery
Discovery walks upward from the current working directory and stops at the
first matching config. Commands outside a configured project fall back to the
machine-wide harness view. Discovery affects drwn write, drwn mcp list,
drwn mcp write, drwn status, drwn doctor, and all drwn extensions
subcommands.
Full Extension Example
{
"version": 1,
"extensions": {
"parallel": {
"enabled": true,
"skills": true,
"mcp": false
},
"beads": {
"enabled": true,
"targets": ["codex", "claude"],
"includeSkill": true
},
"markitdown": {
"enabled": true,
"skills": true
}
}
}
Include vs Exclude Precedence
skills.include adds repo-native and package-backed skills into the project
write. skills.exclude removes matching skills from project write.
If an extension derives a skill and skills.exclude names the same skill,
skills.exclude wins. Unknown skill names in skills.include fail
drwn write before mutation and are also reported by drwn doctor.
Machine Defaults Are Suppressed When Project Config Is Present
When a project config exists, machine-only defaults from
~/.agents/drwn/machine.json do not apply. The project takes full ownership of
its effective view, layered as:
built-in defaults -> user library -> cards in declared order -> project overlay
This keeps project behavior reproducible across machines.
Recommended Workflow
cd /path/to/project
drwn init
$EDITOR .agents/drwn/config.json
drwn status
drwn write --dry-run
drwn doctor
drwn write