The config steers every artifact agents write later. Its main job is keeping a change's artifacts at the outcome level. Artifacts that prescribe implementation detail go stale as soon as the implementation drifts, and agents then spend effort resyncing them. The template's context states that principle, with contracts as the one exception.
Workflow
- Create a task per step below, phrased with its completion criterion, then work them to completion.
- If
openspec/is missing, runopenspec init --tools <the agents this repo uses>. Done whenopenspec/config.yamlexists. - Read the README, CLAUDE.md/AGENTS.md, the build entrypoint (Makefile or similar) and any planning or decision docs. Done when you can name what the project is, its hard constraints and where decisions live.
- Copy
assets/schemas/lean/from this skill's directory to the project asopenspec/schemas/lean/. It isspec-driventrimmed to outcome-level sections, with each fact held in one artifact. Done whenopenspec schema validate leanpasses. - Copy
assets/config.yamlfrom this skill's directory to the project asopenspec/config.yaml, then fill it in.
- Keep it short. Include only what agents must take into account when working with OpenSpec in this project.
- Add a repo-specific rule only when the repo's docs show it needs one.
- If a config with real content already exists, merge into it instead: keep its repo-specific facts and replace rules that prescribe internal code.
- Delete any placeholder line you can't fill and note it for step 8.
- Done when
rg -n '<[^>]+>' openspec/config.yamlfinds nothing.
- Check every rule you wrote against the template's
contextand theleanschema's instructions. Remove any rule that tells future agents to prescribe implementation detail, restates a schema instruction, or adds a section to every change. - Confirm the YAML parses:
python3 -c 'import yaml,sys; yaml.safe_load(open(sys.argv[1]))' openspec/config.yaml. - Report the deleted placeholders to the user as questions rather than guessing values.
Gotchas
- Rules are appended to the schema's artifact instructions (
openspec/schemas/lean/schema.yaml). Those already cover spec scope, user decisions, per-task verification, per-group tests and size targets. Write rules only for what the repo needs beyond them. A rule that contradicts the schema gets half-followed; edit the project's schema copy instead. - Every rule tends to add a section to every change. Prefer limits ("only when ...") to requests ("include ...").
- Size targets in lines don't bind: agents write long lines. Use words.
leanis a fork of OpenSpec 1.15.0'sspec-driven. After an OpenSpec upgrade, compare it withopenspec schema fork spec-drivenoutput and carry over upstream fixes.leankeeps prose unwrapped while upstream wraps it, so compare withgit diff --no-index --word-diff.contextshould point to files (CLAUDE.md, decision docs) rather than copying their commands or facts, which then drift.operationssupports onlyapplyandarchive. OpenSpec only warns about other keys at instruction time, so a YAML parse misses them.- Explore reads only
contextandrules. Behaviour wanted outside a single artifact or apply/archive goes incontext. - Archive blocks on unchecked task boxes, so the template's Human checks rule uses plain bullets. Keep that wording when merging into an existing config.
- Sub-agents never read the config. Rules they must follow go in
applyguidance as something the main agent puts in each brief. - Changes already in flight keep their current artifacts. The new rules apply to new changes.