Spec Review — Autonomous Multi-Discipline Hardening
Drive an engineering specification to convergence through repeated rounds of independent
multi-discipline review. Each round spawns several reviewer subagents — one per engineering
discipline — that critique the spec from their own expertise, in parallel, thinking
independently. The orchestrator (you) collects their findings, revises the spec to fix the
genuine ones, and loops automatically until no CRITICAL or MAJOR findings remain.
This runs fully autonomously: no user checkpoints between rounds. The user sees the converged
spec (and a round-by-round summary) at the end.
This is the final skill in a three-skill chain, but is fully usable standalone:
goal-formatter → goal-spec → spec-review
(THIS: autonomous
roundtable hardening
to convergence)
Heritage & independence. The roundtable mechanic — real independent subagents, each a
distinct expert voice, spawned in parallel — is inspired by multi-agent group-discussion
patterns. This skill is a clean-room fork with NO dependency on any other skill, external
config file, or agent manifest. Its personas are defined inline below. It can be shared and
run entirely on its own. The convergence discipline (severity classes, no-CRITICAL/MAJOR stop,
triage log) follows a standard iterative adversarial-hardening pattern but invokes no other
skill to do it.
When to use
Trigger phrases:
- "Review this spec" / "Harden this spec" / "Spec review"
- "Run the roundtable on this spec"
- "Battle-test this specification"
- "Get multiple engineering perspectives on this spec"
Input: a specification — ideally one using the 8-section engineering template
(Problem & Context, Scope, Requirements, Constraints, Design Approach, Success Criteria,
Risks & Mitigations, Open Questions). It works on any spec/design doc, but the disciplines map
most cleanly onto that structure. If the input isn't a spec, say so and suggest goal-spec first.
The reviewer personas (defined inline — no external manifest)
Each round spawns a subset of these as independent subagents. They are the "engineering
disciplines" whose concerns must be addressed — a fixed, spec-focused, self-contained roundtable.
| Persona |
Icon |
Lens — what they attack |
| Architect |
🏛️ |
Structural soundness: component boundaries, coupling, data flow, scalability, whether the Design Approach actually satisfies every requirement, missing interfaces, hidden complexity. |
| Security Reviewer |
🔒 |
Threat surface: auth/authz, input validation, data exposure, secrets, trust boundaries, abuse cases, compliance gaps. Assumes the system will be attacked. |
| Test/QA Engineer |
🧪 |
Verifiability: is each requirement testable? Are success criteria measurable & binary? Edge cases, failure modes, untestable claims, missing acceptance criteria. |
| Operations / SRE |
⚙️ |
Run-time reality: deployability, observability, failure recovery, rollback, performance budgets, maintenance burden, on-call impact, capacity. |
| Product / Scope Owner |
🎯 |
Intent & boundaries: does the spec solve the stated problem? Scope creep, gold-plating, missing user need, unstated assumptions, conflicting requirements, vague "Open Questions". |
Domain-adapt the personas to the spec (do this before Round 1). The five lenses are
universal, but their concrete focus shifts with the artifact. Re-map them to the domain rather
than reviewing a non-software spec through a software lens:
- Software/service: Security = threat surface/auth/data; Ops = deploy/observability/SRE.
- Physical product (e.g. hardware, a device): Security = product safety + data/privacy
(electrical, thermal, battery, biocompatibility, RF); Ops = manufacturability (DFM), supply
chain, line QA, field reliability/RMA, EOL.
- Data/ML: Security = privacy/PII/model-abuse; Ops = pipeline reliability, drift, retraining.
- Process/org spec: Security = compliance/risk; Ops = rollout, training, sustainment.
State the mapping you're using in one line at the start so the reviewers attack the right things.
(Lesson from live runs: a user shouldn't have to hand-map personas in the invocation — infer the
domain from the spec and adapt automatically.)
Persona selection per round:
- Default: spawn all five for Round 1 (full coverage of a fresh spec).
- Later rounds: spawn only the disciplines whose findings were unresolved last round, plus
any whose area the latest revision touched. (Don't re-run a clean discipline every round —
that inflates findings and cost.)
- Small/narrow spec: 3 personas may suffice — always include Architect + Test/QA, then the
most relevant third.
Severity classification (shared across all personas)
Every finding is one of:
- CRITICAL — a contradiction, impossibility, or gap that makes the spec un-implementable as
written, OR a security/data-loss flaw that would ship broken or unsafe. The spec cannot
converge while any CRITICAL stands.
- MAJOR — a missing definition, untestable requirement, undefined interface, or gap that
would cause a competent implementer to build the wrong thing or ship broken behaviour.
Ask: "Would a competent implementer get this wrong?" If yes → MAJOR.
- ADVISORY — clarity, minor inconsistency, nice-to-have, or a concern about a hypothetical
future case. Advisory-only rounds count as converged.
Cross-persona promotion: if 2+ personas independently raise the same finding, promote it one
level (ADVISORY → MAJOR, MAJOR → CRITICAL). Tag it with the personas that raised it.
Do not mandate findings. A persona that finds nothing genuine reports nothing — manufacturing
issues to look thorough is a failure, not a virtue.
The autonomous loop
Run this without stopping for the user. The user gets the result at the end.
Phase 0 — Setup (once)
- Read the spec fully. Hold the file path; you will edit this file in place each round.
- Pre-loop sanity check — fix these yourself before Round 1 (they're authoring defects, not
review findings):
- Every section of the template has real content (no empty headings).
- No placeholder artifacts (
TODO, [GAP], MISSING, truncated blocks).
- Every term used in a requirement is defined somewhere.
If any fail, patch the spec, then proceed.
- Create a triage log next to the spec:
<spec-name>-spec-review-log.md with header:| Round | Persona | Severity | Finding | Verdict | Action |
|-------|---------|----------|---------|---------|--------|
Update it after every round — it survives context compaction; in-context tables don't.
- Set
round = 1, max_rounds = 6 (hard cap — see Stop conditions).
Phase 1 — Review (each round)
Spawn the selected personas as independent subagents in parallel (all Agent tool calls in a
single message so they run concurrently). Give each subagent this prompt, filled in:
You are the {Persona} ({icon}) on an engineering spec-review roundtable. You think
independently — do NOT defer to the other reviewers; bring your own discipline's concerns.
## Your lens
{the persona's "what they attack" row, verbatim}
## The specification under review
{full spec text, or — if >400 lines — the normative sections verbatim + compressed prose}
## What changed since last round (omit in Round 1)
{one-line summary of the revisions made after the previous round}
## Your task
Review the spec ONLY through your discipline's lens. Find genuine problems that would cause this
spec to fail in your area. For each, classify severity:
- CRITICAL: makes the spec un-implementable as written, or unsafe/data-losing.
- MAJOR: would make a competent implementer build the wrong thing or ship broken behaviour.
- ADVISORY: clarity / minor / hypothetical-future only.
Do NOT manufacture findings. If your area is clean, say so and return an empty findings list.
## Output — return EXACTLY this JSON, nothing before it:
{
"persona": "{Persona}",
"critical": [{"loc": "section/line", "what": "<=30 words", "fix": "<=20 words"}],
"major": [{"loc": "...", "what": "...", "fix": "..."}],
"advisory": [{"loc": "...", "what": "...", "fix": "..."}],
"verdict": "ISSUES_FOUND" | "CLEAN"
}
Use verdict "ISSUES_FOUND" if you have any CRITICAL or MAJOR; otherwise "CLEAN".
Do NOT use any tools. Just return the JSON.
Model: default the reviewer subagents to a capable model (Sonnet is sufficient for
typical specs; use Opus for dense/safety-critical specs). The value is the multi-lens
independence, not raw model size.
Phase 2 — Triage & revise (each round, you do this — NOT a subagent)
- Collect all persona JSON payloads.
- Apply cross-persona promotion (same finding from 2+ personas → promote one level).
- Triage each finding: is it genuine?
- Genuine CRITICAL/MAJOR → fix it: edit the spec file in place. Keep fixes minimal and
targeted to the finding; don't rewrite wholesale.
- Not genuine / wrong (reviewer misread, out-of-scope, already handled) → record verdict
"rejected" + one-line rationale; do not edit.
- Genuine ADVISORY → apply if cheap and safe; otherwise log as deferred.
- Log every finding in the triage file with its verdict and the action taken.
4a. Consistency sweep after revising (DO NOT SKIP). Any fix that changes a value (a number,
a chosen part, a renamed term) almost always appears in more than one section — the requirement,
the design, the success criteria, the risks, an interface table. After editing, re-scan the
whole spec for the OLD value and for sections that depend on the changed one, and update every
occurrence. Stale duplicates left behind by an edit are the single most common defect this loop
catches in later rounds (and the easiest to prevent here). Treat the spec as having ONE source of
truth per fact.
- Resolve Open Questions: since this is autonomous, you MUST decide undecided items yourself
using the spec's own context and sensible engineering defaults, then record the decision in
the spec (move it from "Open Question" to the relevant section with a stated assumption).
Only leave an item open if deciding it would change external commitments the spec can't
assume — and flag those explicitly in the final summary.
Phase 3 — Convergence test (each round)
- Converged when, in a round, no persona returns any CRITICAL or MAJOR (all
CLEAN, or
advisory-only). → go to Exit.
- Not converged →
round += 1; if round <= max_rounds, go to Phase 1 (re-select personas
per the selection rule). If round > max_rounds, go to Exit with a non-converged flag.
Anti-inflation safeguard: if a round produces only ADVISORY findings that are reworded
versions of previously-rejected ones, treat the round as converged — don't loop forever chasing
taste-level churn.
Exit
When the loop ends, present to the user (this is the only mandatory user-facing output):
- Final spec (the hardened file) — note its path.
- Convergence status: "Converged in N rounds" OR "Hit max rounds (6) with M residual
findings" (list them).
- Round-by-round summary: per round — personas run, CRITICAL/MAJOR found, what was fixed.
Source it from the triage log.
- Decisions made autonomously on former Open Questions, with the assumption behind each.
- Residual / deferred items the user should know about.
- The ready-to-run
/goal prompt (see "MANDATORY exit artifact" below) — a copy-pasteable
command that hands the goal + hardened spec to an executor, including model-selection and
parallelisation guidance. This is the final thing the user sees so they can act immediately.
Stop conditions (so it never runs away)
- Convergence: no CRITICAL/MAJOR in a round → stop (success).
- Max rounds: hard cap of 6 rounds → stop and report residuals (don't loop indefinitely).
- No-progress: if two consecutive rounds fix nothing genuine (only rejected/advisory churn)
→ stop and report (treat as converged-with-advisories).
Why fully autonomous (and when that's wrong)
The user chose hands-off hardening: agents debate, you respond to feedback automatically, revise,
and loop until convergence with no human in the loop. This is right for hardening a spec the
user already broadly agrees with — it removes the round-by-round babysitting.
It is the WRONG mode if the spec's direction is still unsettled (the personas will keep
flagging the same foundational disagreement and you'll auto-decide things the user wanted a say
in). In that case, tell the user up front: "this spec has an unresolved directional question (X);
autonomous hardening will pick a default — confirm the direction first, or I'll assume Y." Then
proceed with the stated assumption rather than silently choosing.
Worked example (compressed)
Input: a spec for an API rate limiter (8-section template).
- Round 1 (all 5 personas, parallel):
- 🔒 Security (MAJOR): "no spec for limit-bypass via spoofed X-Forwarded-For" → fix: bind
limits to authenticated key, not client IP.
- 🧪 Test/QA (MAJOR): "Success criterion 'handles burst traffic' not measurable" → fix:
"rejects >100 req/s/key with 429; p95 added latency <5ms".
- 🏛️ Architect (ADVISORY): "token-bucket store could be Redis or in-proc — unspecified" →
decide: Redis (shared across instances); record assumption.
- ⚙️ Ops (CLEAN). 🎯 Product (CLEAN).
- Triage: fix both MAJORs, decide the architect's open question. Round not converged.
- Round 2 (Security + Test/QA + Architect — the touched disciplines):
- All return CLEAN. → Converged in 2 rounds.
- Exit: present hardened spec, "Converged in 2 rounds", the two fixes, and the Redis decision
as an autonomous call.
After convergence — execute the spec
This skill produces a hardened spec; it does not implement it. Authoring ends here;
execution is the next, separate phase — performed by whatever executor you choose, not by
this skill. The whole point of the chain is to reach a spec trustworthy enough to hand off
for implementation with confidence.
Once the spec has converged (no CRITICAL/MAJOR), hand the goal + hardened spec to an
execution agent. Good options:
- Claude Code
/goal — paste the goal; point it at the spec file as the detailed design.
- An autonomous loop (e.g. an autopilot / ralph-style runner) — feed it the spec as the
source of truth and let it implement to the spec's Success Criteria.
- An
executor subagent — dispatch with the spec inline; verify its output against the
spec's Success Criteria (§6) and Verification.
Whatever the executor, the spec's Success Criteria (§6) are the acceptance gate: execution
is done when every criterion is observably met. Tell the user this explicitly at exit so the
loop closes on a built outcome, not just a written one.
MANDATORY exit artifact — the ready-to-run /goal prompt
At the very end of the run, after the convergence report, you MUST print a copy-pasteable
/goal command the user can paste straight into Claude Code (or hand to any agent) to execute
the spec. Put it in its own fenced block so it's one-click to copy. Use this exact shape, filled
in from the converged spec:
/goal "Implement <one-line goal restated>. The authoritative design is the hardened spec at
<relative/path/to/spec.md> — build to it exactly. Acceptance gate: every Success Criterion
(SC1..SCn in §6) must be observably met; do not declare done until each passes its stated
verification.
WORK EFFICIENTLY:
- Use the best-suited model per task: a fast/cheap model (e.g. Haiku) for lookups, file scans,
and mechanical edits; a standard model (e.g. Sonnet) for implementation, tests, and review;
a deep model (e.g. Opus) only for architecture, tricky debugging, or security-sensitive work.
- Parallelise aggressively: decompose the spec's Design Approach (§5) into INDEPENDENT
components, then dispatch them as concurrent subagents in a single batch rather than building
sequentially. Only serialise where a real data dependency forces it. State the parallel groups
before starting.
- Keep a writer/verifier split: implement in one pass, then verify against §6 in a SEPARATE pass
(ideally a different subagent) — never self-approve the same context."
Fill the bracketed parts from the actual spec; pull the parallel groups from the Design
Approach's component decomposition (§5) when it already names what can run in parallel. Keep the
efficiency guidance verbatim — it is generic and applies to any executor. If the spec is for a
NON-software artifact (e.g. a physical product), reword "build/tests" to the artifact's
equivalent (e.g. "produce the costed BOM + prototype plan; verification = the SC bench tests"),
but keep the model-selection and parallelisation guidance.
Relationship to the other skills
- Upstream —
goal-spec: produces the 8-section spec this skill hardens. If the user hands
you a goal rather than a spec, point them to goal-spec first.
- No external-skill dependency: this skill defines its own personas inline and runs its own
loop. It shares the idea of an independent-subagent roundtable and the idea of a
converge-on-no-CRITICAL/MAJOR loop with other multi-agent and review skills, but invokes none
of them and needs no config/manifest files. It is safe to share standalone.
1---2name: spec-review3description: Autonomously harden an engineering specification through a roundtable of independent engineering-discipline reviewers (architecture, security, test/QA, operations, product). Each reviewer is a real subagent thinking independently; the orchestrator collects findings, revises the spec itself, and loops until convergence (no CRITICAL or MAJOR findings) with NO user checkpoints. Use when you say "review this spec", "harden this spec", "spec review", "run the roundtable on this spec", or want a spec battle-tested before implementation. Self-contained, with no dependency on any other skill.4---5<!--6Copyright (c) 2026 JG Systems Consulting Ltd.7MIT License (see LICENSE).8-->91011# Spec Review — Autonomous Multi-Discipline Hardening1213Drive an engineering specification to convergence through repeated rounds of **independent14multi-discipline review**. Each round spawns several reviewer subagents — one per engineering15discipline — that critique the spec from their own expertise, **in parallel, thinking16independently**. The orchestrator (you) collects their findings, revises the spec to fix the17genuine ones, and **loops automatically until no CRITICAL or MAJOR findings remain**.1819This runs **fully autonomously**: no user checkpoints between rounds. The user sees the converged20spec (and a round-by-round summary) at the end.2122This is the **final skill** in a three-skill chain, but is fully usable standalone:2324```25goal-formatter → goal-spec → spec-review26 (THIS: autonomous27 roundtable hardening28 to convergence)29```3031> **Heritage & independence.** The roundtable mechanic — real independent subagents, each a32> distinct expert voice, spawned in parallel — is inspired by multi-agent group-discussion33> patterns. This skill is a **clean-room fork with NO dependency on any other skill, external34> config file, or agent manifest.** Its personas are defined inline below. It can be shared and35> run entirely on its own. The convergence discipline (severity classes, no-CRITICAL/MAJOR stop,36> triage log) follows a standard iterative adversarial-hardening pattern but invokes no other37> skill to do it.3839## When to use4041**Trigger phrases:**42- "Review this spec" / "Harden this spec" / "Spec review"43- "Run the roundtable on this spec"44- "Battle-test this specification"45- "Get multiple engineering perspectives on this spec"4647**Input:** a specification — ideally one using the 8-section engineering template48(Problem & Context, Scope, Requirements, Constraints, Design Approach, Success Criteria,49Risks & Mitigations, Open Questions). It works on any spec/design doc, but the disciplines map50most cleanly onto that structure. If the input isn't a spec, say so and suggest `goal-spec` first.5152---5354## The reviewer personas (defined inline — no external manifest)5556Each round spawns a subset of these as **independent subagents**. They are the "engineering57disciplines" whose concerns must be addressed — a fixed, spec-focused, self-contained roundtable.5859| Persona | Icon | Lens — what they attack |60|---------|------|--------------------------|61| **Architect** | 🏛️ | Structural soundness: component boundaries, coupling, data flow, scalability, whether the Design Approach actually satisfies every requirement, missing interfaces, hidden complexity. |62| **Security Reviewer** | 🔒 | Threat surface: auth/authz, input validation, data exposure, secrets, trust boundaries, abuse cases, compliance gaps. Assumes the system will be attacked. |63| **Test/QA Engineer** | 🧪 | Verifiability: is each requirement testable? Are success criteria measurable & binary? Edge cases, failure modes, untestable claims, missing acceptance criteria. |64| **Operations / SRE** | ⚙️ | Run-time reality: deployability, observability, failure recovery, rollback, performance budgets, maintenance burden, on-call impact, capacity. |65| **Product / Scope Owner** | 🎯 | Intent & boundaries: does the spec solve the stated problem? Scope creep, gold-plating, missing user need, unstated assumptions, conflicting requirements, vague "Open Questions". |6667**Domain-adapt the personas to the spec (do this before Round 1).** The five lenses are68universal, but their *concrete focus* shifts with the artifact. Re-map them to the domain rather69than reviewing a non-software spec through a software lens:70- **Software/service:** Security = threat surface/auth/data; Ops = deploy/observability/SRE.71- **Physical product (e.g. hardware, a device):** Security = product *safety* + data/privacy72 (electrical, thermal, battery, biocompatibility, RF); Ops = *manufacturability* (DFM), supply73 chain, line QA, field reliability/RMA, EOL.74- **Data/ML:** Security = privacy/PII/model-abuse; Ops = pipeline reliability, drift, retraining.75- **Process/org spec:** Security = compliance/risk; Ops = rollout, training, sustainment.76State the mapping you're using in one line at the start so the reviewers attack the right things.77*(Lesson from live runs: a user shouldn't have to hand-map personas in the invocation — infer the78domain from the spec and adapt automatically.)*7980**Persona selection per round:**81- **Default:** spawn all five for Round 1 (full coverage of a fresh spec).82- **Later rounds:** spawn only the disciplines whose findings were unresolved last round, plus83 any whose area the latest revision touched. (Don't re-run a clean discipline every round —84 that inflates findings and cost.)85- **Small/narrow spec:** 3 personas may suffice — always include Architect + Test/QA, then the86 most relevant third.8788---8990## Severity classification (shared across all personas)9192Every finding is one of:9394- **CRITICAL** — a contradiction, impossibility, or gap that makes the spec un-implementable as95 written, OR a security/data-loss flaw that would ship broken or unsafe. The spec cannot96 converge while any CRITICAL stands.97- **MAJOR** — a missing definition, untestable requirement, undefined interface, or gap that98 would cause a competent implementer to **build the wrong thing or ship broken behaviour**.99 Ask: "Would a competent implementer get this wrong?" If yes → MAJOR.100- **ADVISORY** — clarity, minor inconsistency, nice-to-have, or a concern about a hypothetical101 future case. Advisory-only rounds **count as converged**.102103**Cross-persona promotion:** if 2+ personas independently raise the same finding, promote it one104level (ADVISORY → MAJOR, MAJOR → CRITICAL). Tag it with the personas that raised it.105106**Do not mandate findings.** A persona that finds nothing genuine reports nothing — manufacturing107issues to look thorough is a failure, not a virtue.108109---110111## The autonomous loop112113Run this without stopping for the user. The user gets the result at the end.114115### Phase 0 — Setup (once)1161171. **Read the spec fully.** Hold the file path; you will edit this file in place each round.1182. **Pre-loop sanity check** — fix these yourself before Round 1 (they're authoring defects, not119 review findings):120 - Every section of the template has real content (no empty headings).121 - No placeholder artifacts (`TODO`, `[GAP]`, `MISSING`, truncated blocks).122 - Every term used in a requirement is defined somewhere.123 If any fail, patch the spec, then proceed.1243. **Create a triage log** next to the spec: `<spec-name>-spec-review-log.md` with header:125 ```126 | Round | Persona | Severity | Finding | Verdict | Action |127 |-------|---------|----------|---------|---------|--------|128 ```129 Update it after every round — it survives context compaction; in-context tables don't.1304. Set `round = 1`, `max_rounds = 6` (hard cap — see Stop conditions).131132### Phase 1 — Review (each round)133134Spawn the selected personas as **independent subagents in parallel** (all Agent tool calls in a135single message so they run concurrently). Give each subagent this prompt, filled in:136137```138You are the {Persona} ({icon}) on an engineering spec-review roundtable. You think139independently — do NOT defer to the other reviewers; bring your own discipline's concerns.140141## Your lens142{the persona's "what they attack" row, verbatim}143144## The specification under review145{full spec text, or — if >400 lines — the normative sections verbatim + compressed prose}146147## What changed since last round (omit in Round 1)148{one-line summary of the revisions made after the previous round}149150## Your task151Review the spec ONLY through your discipline's lens. Find genuine problems that would cause this152spec to fail in your area. For each, classify severity:153- CRITICAL: makes the spec un-implementable as written, or unsafe/data-losing.154- MAJOR: would make a competent implementer build the wrong thing or ship broken behaviour.155- ADVISORY: clarity / minor / hypothetical-future only.156Do NOT manufacture findings. If your area is clean, say so and return an empty findings list.157158## Output — return EXACTLY this JSON, nothing before it:159{160 "persona": "{Persona}",161 "critical": [{"loc": "section/line", "what": "<=30 words", "fix": "<=20 words"}],162 "major": [{"loc": "...", "what": "...", "fix": "..."}],163 "advisory": [{"loc": "...", "what": "...", "fix": "..."}],164 "verdict": "ISSUES_FOUND" | "CLEAN"165}166Use verdict "ISSUES_FOUND" if you have any CRITICAL or MAJOR; otherwise "CLEAN".167Do NOT use any tools. Just return the JSON.168```169170**Model:** default the reviewer subagents to a capable model (Sonnet is sufficient for171typical specs; use Opus for dense/safety-critical specs). The value is the multi-lens172independence, not raw model size.173174### Phase 2 — Triage & revise (each round, you do this — NOT a subagent)1751761. Collect all persona JSON payloads.1772. Apply **cross-persona promotion** (same finding from 2+ personas → promote one level).1783. **Triage each finding:** is it genuine?179 - **Genuine CRITICAL/MAJOR** → fix it: edit the spec file in place. Keep fixes minimal and180 targeted to the finding; don't rewrite wholesale.181 - **Not genuine / wrong** (reviewer misread, out-of-scope, already handled) → record verdict182 "rejected" + one-line rationale; do not edit.183 - **Genuine ADVISORY** → apply if cheap and safe; otherwise log as deferred.1844. **Log every finding** in the triage file with its verdict and the action taken.1854a. **Consistency sweep after revising (DO NOT SKIP).** Any fix that changes a *value* (a number,186 a chosen part, a renamed term) almost always appears in more than one section — the requirement,187 the design, the success criteria, the risks, an interface table. After editing, **re-scan the188 whole spec for the OLD value and for sections that depend on the changed one**, and update every189 occurrence. Stale duplicates left behind by an edit are the single most common defect this loop190 catches in later rounds (and the easiest to prevent here). Treat the spec as having ONE source of191 truth per fact.1925. **Resolve Open Questions:** since this is autonomous, you MUST decide undecided items yourself193 using the spec's own context and sensible engineering defaults, then record the decision in194 the spec (move it from "Open Question" to the relevant section with a stated assumption).195 Only leave an item open if deciding it would change external commitments the spec can't196 assume — and flag those explicitly in the final summary.197198### Phase 3 — Convergence test (each round)199200- **Converged** when, in a round, **no persona returns any CRITICAL or MAJOR** (all `CLEAN`, or201 advisory-only). → go to Exit.202- **Not converged** → `round += 1`; if `round <= max_rounds`, go to Phase 1 (re-select personas203 per the selection rule). If `round > max_rounds`, go to Exit with a **non-converged** flag.204205**Anti-inflation safeguard:** if a round produces only ADVISORY findings that are reworded206versions of previously-rejected ones, treat the round as converged — don't loop forever chasing207taste-level churn.208209### Exit210211When the loop ends, present to the user (this is the only mandatory user-facing output):2122131. **Final spec** (the hardened file) — note its path.2142. **Convergence status:** "Converged in N rounds" OR "Hit max rounds (6) with M residual215 findings" (list them).2163. **Round-by-round summary:** per round — personas run, CRITICAL/MAJOR found, what was fixed.217 Source it from the triage log.2184. **Decisions made autonomously** on former Open Questions, with the assumption behind each.2195. **Residual / deferred items** the user should know about.2206. **The ready-to-run `/goal` prompt** (see "MANDATORY exit artifact" below) — a copy-pasteable221 command that hands the goal + hardened spec to an executor, including model-selection and222 parallelisation guidance. This is the final thing the user sees so they can act immediately.223224---225226## Stop conditions (so it never runs away)227228- **Convergence:** no CRITICAL/MAJOR in a round → stop (success).229- **Max rounds:** hard cap of **6 rounds** → stop and report residuals (don't loop indefinitely).230- **No-progress:** if two consecutive rounds fix nothing genuine (only rejected/advisory churn)231 → stop and report (treat as converged-with-advisories).232233---234235## Why fully autonomous (and when that's wrong)236237The user chose hands-off hardening: agents debate, you respond to feedback automatically, revise,238and loop until convergence with no human in the loop. This is right for **hardening a spec the239user already broadly agrees with** — it removes the round-by-round babysitting.240241It is the WRONG mode if the spec's *direction* is still unsettled (the personas will keep242flagging the same foundational disagreement and you'll auto-decide things the user wanted a say243in). In that case, tell the user up front: "this spec has an unresolved directional question (X);244autonomous hardening will pick a default — confirm the direction first, or I'll assume Y." Then245proceed with the stated assumption rather than silently choosing.246247---248249## Worked example (compressed)250251**Input:** a spec for an API rate limiter (8-section template).252253- **Round 1** (all 5 personas, parallel):254 - 🔒 Security (MAJOR): "no spec for limit-bypass via spoofed X-Forwarded-For" → fix: bind255 limits to authenticated key, not client IP.256 - 🧪 Test/QA (MAJOR): "Success criterion 'handles burst traffic' not measurable" → fix:257 "rejects >100 req/s/key with 429; p95 added latency <5ms".258 - 🏛️ Architect (ADVISORY): "token-bucket store could be Redis or in-proc — unspecified" →259 decide: Redis (shared across instances); record assumption.260 - ⚙️ Ops (CLEAN). 🎯 Product (CLEAN).261 - Triage: fix both MAJORs, decide the architect's open question. Round not converged.262- **Round 2** (Security + Test/QA + Architect — the touched disciplines):263 - All return CLEAN. → **Converged in 2 rounds.**264- **Exit:** present hardened spec, "Converged in 2 rounds", the two fixes, and the Redis decision265 as an autonomous call.266267---268269## After convergence — execute the spec270271**This skill produces a hardened spec; it does not implement it.** Authoring ends here;272execution is the next, separate phase — performed by whatever executor you choose, not by273this skill. The whole point of the chain is to reach a spec trustworthy enough to hand off274for implementation with confidence.275276Once the spec has converged (no CRITICAL/MAJOR), hand the **goal + hardened spec** to an277execution agent. Good options:278279- **Claude Code `/goal`** — paste the goal; point it at the spec file as the detailed design.280- **An autonomous loop** (e.g. an autopilot / ralph-style runner) — feed it the spec as the281 source of truth and let it implement to the spec's Success Criteria.282- **An `executor` subagent** — dispatch with the spec inline; verify its output against the283 spec's Success Criteria (§6) and Verification.284285Whatever the executor, the spec's **Success Criteria (§6)** are the acceptance gate: execution286is done when every criterion is observably met. Tell the user this explicitly at exit so the287loop closes on a *built* outcome, not just a *written* one.288289### MANDATORY exit artifact — the ready-to-run `/goal` prompt290291At the very end of the run, after the convergence report, you MUST print a **copy-pasteable292`/goal` command** the user can paste straight into Claude Code (or hand to any agent) to execute293the spec. Put it in its own fenced block so it's one-click to copy. Use this exact shape, filled294in from the converged spec:295296```297/goal "Implement <one-line goal restated>. The authoritative design is the hardened spec at298<relative/path/to/spec.md> — build to it exactly. Acceptance gate: every Success Criterion299(SC1..SCn in §6) must be observably met; do not declare done until each passes its stated300verification.301302WORK EFFICIENTLY:303- Use the best-suited model per task: a fast/cheap model (e.g. Haiku) for lookups, file scans,304 and mechanical edits; a standard model (e.g. Sonnet) for implementation, tests, and review;305 a deep model (e.g. Opus) only for architecture, tricky debugging, or security-sensitive work.306- Parallelise aggressively: decompose the spec's Design Approach (§5) into INDEPENDENT307 components, then dispatch them as concurrent subagents in a single batch rather than building308 sequentially. Only serialise where a real data dependency forces it. State the parallel groups309 before starting.310- Keep a writer/verifier split: implement in one pass, then verify against §6 in a SEPARATE pass311 (ideally a different subagent) — never self-approve the same context."312```313314Fill the bracketed parts from the actual spec; pull the parallel groups from the Design315Approach's component decomposition (§5) when it already names what can run in parallel. Keep the316efficiency guidance verbatim — it is generic and applies to any executor. If the spec is for a317NON-software artifact (e.g. a physical product), reword "build/tests" to the artifact's318equivalent (e.g. "produce the costed BOM + prototype plan; verification = the SC bench tests"),319but keep the model-selection and parallelisation guidance.320321---322323## Relationship to the other skills324325- **Upstream — `goal-spec`:** produces the 8-section spec this skill hardens. If the user hands326 you a goal rather than a spec, point them to `goal-spec` first.327- **No external-skill dependency:** this skill defines its own personas inline and runs its own328 loop. It shares the *idea* of an independent-subagent roundtable and the *idea* of a329 converge-on-no-CRITICAL/MAJOR loop with other multi-agent and review skills, but invokes none330 of them and needs no config/manifest files. It is safe to share standalone.