From mk
Negotiates a file-based sprint contract between generator and evaluator agents, translating product specs into testable acceptance criteria with rubric tie-ins. Triggered by /mk:sprint-contract or sprint scope negotiation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mk:sprint-contract [propose | review | amend | sign | validate | sprint-goal] [task-slug | sprint-goal-text] [--sprint N]When to use
Use when negotiating a file-based sprint contract between generator (developer) and evaluator before code is written. NOT for plan generation (see mk:plan-creator).
[propose | review | amend | sign | validate | sprint-goal] [task-slug | sprint-goal-text] [--sprint N]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Negotiation protocol between generator and evaluator. Produces a signed contract file at `tasks/contracts/{date}-{slug}-sprint-{N}.md` BEFORE the generator writes any source code. Enforced by `gate-enforcement.sh` (Phase 4 extension).
Negotiation protocol between generator and evaluator. Produces a signed contract file at tasks/contracts/{date}-{slug}-sprint-{N}.md BEFORE the generator writes any source code. Enforced by gate-enforcement.sh (Phase 4 extension).
For single-task plan validation (cook flow), use
mk:validate-planinstead.mk:sprint-contractis for product-level specs feeding intomk:autobuildonly.
Activate when:
/mk:sprint-contract <action> [task-slug]Skip when:
MEOWKIT_AUTOBUILD_MODE=LEAN (adaptive density bypass for COMPLEX/Opus 4.6 tier)--fast mode (overhead exceeds value)/mk:fix simple (Gate 1 already bypassed; contract bypass too)| Subcommand | Owner | Effect |
|---|---|---|
propose | generator (developer agent) | Drafts a contract from the product spec + rubric preset; status: draft → negotiating |
review | evaluator | Critiques the proposed contract for testability + scope clarity; produces clarification requests |
amend | generator | Iterates on the contract per evaluator feedback; status stays negotiating; rounds += 1 |
sign | both | Both agents commit to the contract via git commit messages; status: negotiating → signed |
validate | anyone | Runs validate-contract.sh to check schema conformance |
sprint-goal | user | Writes/reads/aligns sprint-LEVEL goal in tasks/contracts/sprint-state-{date}-sprint-{N}.md (Agile mode) |
propose (generator)tasks/plans/*/plan.mdmk:rubric/scripts/load-rubric.sh --preset {preset}N: max of existing tasks/contracts/*-{slug}-sprint-*.md + 1, default 1assets/contract-template.md → tasks/contracts/{YYMMDD-HHMM}-{slug}-sprint-{N}.mdstatus: negotiating, rounds: 0, created: {YYMMDD-HHMM}validate-contract.sh; fix and re-validate until clean"Contract proposed at {path}. Awaiting evaluator review."review (evaluator)negotiating contract for the active taskRound {N+1} (reviewer): AC-{NN} {clarification} to Negotiation LogRound {N+1} (reviewer): accepted and proceed to signrounds and signal generator to amendamend (generator)Round {N+1} (proposer): {summary of changes} to the logvalidate-contract.shreview againsign (both agents in sequence)The signature workflow uses two commits per agent to avoid the chicken-and-egg of "the SHA must be inside the file but the file's commit hasn't happened yet."
git add tasks/contracts/{path}.md && git commit -m "contract: generator commits sprint {N} for {slug}". The contract file is committed with generator_signed: pending.gen_sha=$(git rev-parse HEAD). Edit the frontmatter: generator_signed: $gen_sha. Then git add + git commit -m "contract: generator signs sprint {N} for {slug} (sha=$gen_sha)". The captured SHA references the COMMIT THAT EXISTED WHEN THE GENERATOR APPROVED — its own first commit.git add + git commit -m "contract: evaluator commits sprint {N} for {slug}".eval_sha=$(git rev-parse HEAD). Edit the frontmatter: evaluator_signed: $eval_sha, status: signed. Then git add + git commit -m "contract: evaluator signs sprint {N} for {slug} (sha=$eval_sha)".git log --oneline tasks/contracts/{path}.md.gate-enforcement.sh allows source edits for this sprint.Validator enforcement: check-contract-signed.sh rejects placeholder values (null, pending, todo, empty, quoted variants of these). Only a real git rev-parse HEAD SHA passes.
validate.claude/skills/sprint-contract/scripts/validate-contract.sh tasks/contracts/{path}.md
sprint-goal (Agile mode — gated by agile-sprint-commitment.md 1)Sprint-LEVEL goal management. Writes to tasks/contracts/sprint-state-{date}-sprint-{N}.md — distinct from per-story sprint-CONTRACT files.
| Action | Form | Effect |
|---|---|---|
set | mk:sprint-contract sprint-goal set "<text>" --sprint N | Writes sprint_goal: (≤120 chars) to tasks/contracts/sprint-state-{YYMMDD}-sprint-{N}.md. Creates the file from assets/sprint-state-template.md if absent |
show | mk:sprint-contract sprint-goal show --sprint N | Prints current sprint_goal: from the newest sprint-state file matching --sprint N |
align | mk:sprint-contract sprint-goal align --plan <path> | Renders alignment between plan goal (frontmatter goal: or first H1) and sprint goal. Advisory — never blocks |
Concurrent-write safety: sprint-goal set MUST acquire flock on the sprint-state file before any read-modify-write. YAML frontmatter append is non-atomic across shells; lock is the only mitigation. Release on completion or error.
Validator scope: the existing validate-contract.sh is for sprint-CONTRACT files only. Sprint-STATE files have NO validator; YAML is parsed inline by consuming skills (this skill, mk:agent-detector Step 0b, mk:jira-agile).
Why this lives here: tasks/contracts/ already belongs to this skill; co-locating sprint-goal avoids creating a sibling skill that duplicates path discipline.
The amendment flow MUST null both signature fields BEFORE adding the amendment block. Otherwise stale SHAs from the prior signing round would falsely pass check-contract-signed.sh.
status: amended, generator_signed: null, evaluator_signed: null### Amendment N — {YYMMDD-HHMM} under ## Amendments describing the changegit commit -m "contract: amendment N for sprint {N} ({slug})"sign action above. New SHAs replace the nulled fields.gate-enforcement.sh enforcement: between step 1 and step 2 (sigs are null but status is amended), source edits are BLOCKED. The check-contract-signed.sh script rejects amended-status contracts that have null/placeholder sigs. This is the intended discipline — you can't push source code while an amendment is in-flight.Original signed criteria stay visible — amendments are append-only history.
When MEOWKIT_AUTOBUILD_MODE=LEAN:
gate-enforcement.sh honors the env var and allows source edits without contract verification.claude/memory/lean-bypass.log for auditgate-enforcement.sh will block; the developer agent's "Contract Discipline" section codifies this behavioral requirement toogenerator_signed and evaluator_signed fields hold real SHAs, not "yes" placeholders| File | Purpose |
|---|---|
assets/contract-template.md | Canonical per-story sprint-contract schema with placeholder ACs |
assets/sprint-state-template.md | Sprint-LEVEL state contract template (used by sprint-goal set; tracks goal + committed_tickets + amendments + closure summary) |
scripts/validate-contract.sh | Schema + AC-form validator (POSIX-aware Bash 3.2+) |
scripts/check-contract-signed.sh | Gate helper called by gate-enforcement.sh to block source edits before sign |
references/bdd-to-ac-mapping.md | How Gherkin scenarios map to acceptance criteria |
../../hooks/gate-enforcement.sh | Hook that enforces the contract gate on Edit/Write of source files |
../../agents/developer.md | Generator agent — owns propose and amend actions |
../../agents/evaluator.md | Evaluator agent — owns review action; also Phase 3 active-verification consumer |
../mk:rubric/ | Rubric library — provides composed presets the contract binds to |
../mk:evaluate/ | Evaluator skill — reads signed contract via step-01-load-rubrics.md |
.claude/rules/gate-rules.md — Gate 1 contract-signing requirement this skill enforces before source edits are allowedFor interactive use, run /mk:sprint-contract propose <task-slug> to begin negotiation.
For harness-driven use (Phase 5), the harness skill invokes propose → review → amend → sign automatically as a substep between Phase 2 (test red) and Phase 3 (build green).
npx claudepluginhub ngocsangyem/meowkit --plugin mkProvides VCSDD sprint contract templates with 5 review dimensions, grading criteria patterns, weight guidelines, and binary pass threshold formulations for strict mode.
Turns a rough idea into a precise goalkeeper contract with objective, DoD, validator command, and non-goals via interactive Q&A.
Transforms requirements.md into an executable plan (plan.json + contracts.md) using contract-first planning. Sits between /specify and /execute for greenfield or bugfix work.