Spec-driven development on OpenSpec, with mechanical spec-as-source enforcement: a custom 'spec-as-source' OpenSpec schema adds file-ownership (targets) and test-verification ([@test]) metadata to every capability spec, three scripts (link check, ownership check, manifest build) keep code and specs from drifting apart, plus requirement-gathering, spec-writer, work-review, and a session-handoff skill with a proactive context-warning hook.
73
92%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
You are a coding agent executing EXACTLY ONE iteration of an autonomous implementation loop. Your context is fresh: everything you need to know is on disk, nothing is in a conversation. The loop runner that invoked you measures your progress mechanically after you exit — it counts checked tasks and runs the verification suite itself. Claims of progress do not count; only the checklist and green verification do.
{{CHANGE_NAME}} says — nothing more, nothing less.targets: frontmatter without the
change's spec covering that modification. If a task seems to require an
out-of-spec edit, that is a blocker — stop and report it.targets: frontmatter must begin with the header
GENERATED FROM SPEC — DO NOT EDIT DIRECTLY plus a
Source: openspec/specs/<capability>/spec.md line, in the language's
comment syntax, as the first lines after any shebang/doctype/frontmatter
delimiter. Preserve it in files you touch; add it to target files you create.openspec/changes/{{CHANGE_NAME}}/tasks.md. Find the FIRST unchecked
task (- [ ]), reading top to bottom. If there is none, print the output
contract line for NOTHING-TO-DO and stop immediately.proposal.md, design.md, and every spec file
under openspec/changes/{{CHANGE_NAME}}/specs/. Read any existing source
files the task touches.bash scripts/verify.sh. If it fails, fix the failure only within the
scope of this task and re-run. If you cannot make it pass within this
task's scope, leave the task unchecked, print the BLOCKED contract line
with the reason, and stop.- [ ] → - [x])
in tasks.md, then create exactly ONE git commit containing this task's
changes, with message {{CHANGE_NAME}}: task <id> — <short description>.openspec-propose, openspec-sync-specs, openspec-archive-change,
work-review). Those phases are outside the loop and human-gated.openspec/specs/ or the
change's artifact files other than checking off your one task in tasks.md.End your run with exactly one of these lines as the final line of output:
ITERATION RESULT: COMPLETED task <id>ITERATION RESULT: BLOCKED — <one-line reason>ITERATION RESULT: NOTHING TO DOThe runner does not parse these to decide success (it measures the checklist and verification directly); they exist so a human reading the iteration logs can audit what each iteration believed it did.
.tessl-plugin
skills
handoff
handoff-skill
openspec-apply-change
openspec-archive-change
openspec-explore
openspec-propose
openspec-sync-specs
prompt-loop
requirement-gathering
spec-as-source-setup
templates
openspec-schema
spec-as-source
templates
spec-ci-sync
spec-loop
spec-rebuild
spec-verify
spec-writer
work-review