acceptance-spec

acceptance-spec is a skill for Claude Code, Codex from XRenSiu/claude-code-forge. It costs 217 tokens per session (8,982 once invoked), scanned A, original, MIT.

A requirements-writing skill that turns a vague request into a precise, machine-checkable agreement about what must be built and when it is finished. EARS is a structured way to write requirements around events, conditions, and expected system behavior.

In plain words
What is it for?
Use it to create requirements, tasks, acceptance checks, and a completion contract from a natural-language request.
Why use it?
It helps teams expose unclear wording, missing edge cases, and undefined terms before implementation begins. The resulting files give later agents a shared definition of done.

Skill for Claude CodeCodex

Part of the done-when-pipeline plugin — 9 skills shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/xrensiu/claude-code-forge/acceptance-spec
Any agent
npx skills add XRenSiu/claude-code-forge --skill acceptance-spec
Clone the repo
git clone --depth 1 https://github.com/XRenSiu/claude-code-forge

Made for: Claude Code, Codex.

Or install done-when-pipeline, the plugin that ships this one along with the rest of its 9 skills.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for acceptance-spec

README.md
[![agentmods](https://agentmods.dev/badge/skills/xrensiu/claude-code-forge/acceptance-spec.svg)](https://agentmods.dev/skills/xrensiu/claude-code-forge/acceptance-spec)
Your own site
<a href="https://agentmods.dev/skills/xrensiu/claude-code-forge/acceptance-spec"><img src="https://agentmods.dev/badge/skills/xrensiu/claude-code-forge/acceptance-spec.svg" alt="Measured on agentmods" height="20"></a>
Per session 217 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 8,982 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00217 $0.08982
Opus 5 $0.00109 $0.04491
Sonnet 5 $0.00043 $0.01796
Haiku 4.5 $0.00022 $0.00898

Measured 3d ago against content hash b98881130ab3, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

acceptance-spec scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

The scan reads SKILL.md. This mod also ships 1 executable file (scripts/validate_done_when.py), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/done-when-pipeline/skills/acceptance-spec/SKILL.md · 382 lines

How it starts

The opening of the file, as written. The whole thing — 382 lines — stays where its author put it; the contents beside it link to each section on GitHub.

acceptance-spec — Natural language → EARS spec + done_when contract

You are invoked to turn the user's natural-language requirement ($ARGUMENTS or recent user message) into a five-file acceptance contract that downstream agents can mechanically consume.

Say once at the start, then start working:

"I'm using the acceptance-spec skill. I'll draft EARS requirements, run a short clarify loop (only 3 question types, 2-3 rounds), then a quick spec-self-adversarial pass, then write proposal.md / spec.md / tasks.md / done_when.yaml / spec-robustness.md."

Do not narrate further — just walk the phases.


Iron rules (re-read before every phase)

  1. Three question types only — applies from S1 onward. During clarify, the only legal questions are: (a) [ambiguity] — same wording supports >1 reasonable reading, (b) [missing edge] — exception/extreme/empty/concurrent case undefined, (c) [undefined term] — domain noun lacks a precise definition. Anything else (tech stack, library choice, framework preference, deployment) is out of scope for this skill — defer it to design/planning skills. You must tag every [?] you write at S1 with one of the three tags above (e.g. [?] [ambiguity] ...). The tagging is not a S2-only formality — at S1 it forces you to confirm the question is legal before surfacing it. If you cannot tag a [?], do not write it. See references/clarify-protocol.md for full taxonomy with examples; you must read that file before S1 alongside references/ears-syntax.md.
  2. Convergence budget. 3-5 questions per round, target convergence in 2-3 rounds, hard cap at 5 rounds. If round 5 still has open [?], stop and tell the user the requirement is too large and must be split into multiple features — do not keep asking.
  3. Every REQ has a stable ID. REQ-001, REQ-002, ... assigned at S1, never renumbered. If a clarify answer splits a REQ in two, the new one gets the next free ID. Use this same ID later in based_on: and in test based_on: tags so traceability is real.
  4. Every decision traces to one clarification answer. Each REQ in the final spec.md has a source: line citing the user message that fixed it (e.g. source: "user clarified at S2 round 1 Q3 that cancellation honors UTC boundary").
  5. Borrow OpenSpec's file format, not its CLI. Output the five files as documented below; do not shell out to openspec, do not depend on it.
  6. You do not write tests. Tests are Step 4 (test-suite-generator). Your job ends at done_when.yaml.
  7. Verifiable beats judgeable. Per HTML v2 §3 principle I (and the §3.5 corollary on fitness-check dissolution): in done_when.yaml, every claim must land in existence: (does the symbol exist) or behavior: (does the behavior hold under test) — never in a softer "LLM judges this" layer. The v0.x fitness: layer was retired in v1.0.0 because most "needs an LLM judge" entries can be re-designed as programmatic checks ("README quickstart works" → really run it; "type signatures correct" → run tsc). Genuinely-unautomatable cases (doc clarity, design taste, tutorial flow) reach evaluation via /pm-reviewer's requires_human_verification verdict — they do NOT appear in done_when.yaml. The third layer is now rules:, a flat condition list consumed by /meta-judge for final-verdict synthesis.
  8. REQs must be independently testable — no cross-REQ causal indirection. Each REQ is the unit a Step 4 test must derive from. Do not write things like THE system SHALL silence the notification produced by REQ-001; that binds REQ-N's verifiability to REQ-001's runtime artifact and forces Step 4 fixtures to chain. Instead, restate the relevant precondition in REQ-N's own EARS clause (IF a mention is delivered AND the recipient is in DND, THEN ...). REQs may reference each other for narrative context (e.g. "follow-on from REQ-001" in the heading line) but the SHALL action must be derivable from the REQ's own clauses alone. See references/ears-syntax.md "Cross-REQ causal indirection" row.
  9. Worker output ≠ internal decision process. Each phase's user-visible output is only the deliverable for that phase (S1: draft + open questions; S2: a single round's question batch; S3: the five files). Do not interleave skill-internal logs ("clarify-protocol Rule 2 vs Rule 6 weighing", "skill invocation summary", "second-order scan notes") into the output. If something is useful as audit context, put it in a comment inside the deliverable file or omit it. Process narration belongs in your reasoning, not in what the user reads.
  10. Output is single-language per primary surface. EARS sentence bodies, REQ headings, [?] notes, and clarify question text should all use one primary language consistently within a single artifact (typically English, since EARS keywords are English). Mixing English EARS bodies with Chinese question lists in the same file fragments the artifact and forces parallel translations. Glossary entries that define a Chinese-named domain term are fine — but the EARS body, the question prompts, and the source/log lines stay in one language.
  11. One SHALL clause = one independently-derivable action. A single EARS REQ's SHALL must commit to exactly one observable action. Do NOT bind two distinct actions together with an AND compound (e.g. THE system SHALL transition the subscription to status expired AND deny premium feature access on the next request). Even when the two actions are causally linked, packing them into the same SHALL fuses two independently-testable behaviors into one REQ — and when the second action overlaps the SHALL of another REQ (e.g. the same denial appears in another IF ... THEN ... clause), the contract develops cross-REQ duplication that confuses Step 4 test derivation and breaks one-to-one REQ ↔ test traceability. Split AND-compound SHALLs into separate REQs (each with its own ID, EARS type, and source:). Acceptable use of AND inside a SHALL is only when the two clauses describe one indivisible atomic effect of the same trigger (e.g. SHALL atomically (a) set status to cancelled AND (b) stop next-billing-cycle charge) and you also state atomicity is the testable contract. If you can derive a test for one half without the other half being involved, they are two REQs, not one. See references/ears-syntax.md "Common drafting mistakes" → AND-compound SHALL row.

Read the full file on GitHub · 382 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 382 lines · 217 tokens per session scan A b98881130ab3

Subscribe to this mod's changes

acceptance-spec is a skill published in the GitHub repository XRenSiu/claude-code-forge (2 stars, last pushed 1mo ago), licensed MIT. It adds 217 tokens to every session and 8,982 once invoked, about $0.0011 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

systematic-debugging

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.

obra/superpowers · 21 tokens

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.

obra/superpowers · 37 tokens

auto-perf-optimize

Run agent-driven VS Code performance or memory investigations. Use when asked to launch Code OSS, automate a VS Code scenario, run the Chat memory smoke runner, capture renderer heap snapshots, take workflow screenshots, compare run summaries, or drive a repeatable scenario before heap-snapshot analysis.

microsoft/vscode · 62 tokens

chat-perf

Run chat perf benchmarks and memory leak checks against the local dev build or any published VS Code version. Use when investigating chat rendering regressions, validating perf-sensitive changes to chat UI, or checking for memory leaks in the chat response pipeline.

microsoft/vscode · 51 tokens

chat-pet-sprite-creation

Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.

microsoft/vscode · 53 tokens

cpu-profile-analysis

Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…

microsoft/vscode · 71 tokens