spec-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited spec-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- Copyright (c) 2026 JG Systems Consulting Ltd. MIT License — see LICENSE. -->
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.
Trigger phrases:
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.
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:
(electrical, thermal, battery, biocompatibility, RF); Ops = manufacturability (DFM), supply chain, line QA, field reliability/RMA, EOL.
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:
any whose area the latest revision touched. (Don't re-run a clean discipline every round — that inflates findings and cost.)
most relevant third.
Every finding is one of:
written, OR a security/data-loss flaw that would ship broken or unsafe. The spec cannot converge while any CRITICAL stands.
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.
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.
Run this without stopping for the user. The user gets the result at the end.
review findings):
TODO, [GAP], MISSING, truncated blocks).If any fail, patch the spec, then proceed.
<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.
round = 1, max_rounds = 6 (hard cap — see Stop conditions).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.
targeted to the finding; don't rewrite wholesale.
"rejected" + one-line rationale; do not edit.
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.
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.
CLEAN, oradvisory-only). → go to Exit.
round += 1; if round <= max_rounds, go to Phase 1 (re-select personasper 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.
When the loop ends, present to the user (this is the only mandatory user-facing output):
findings" (list them).
Source it from the triage log.
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 and report (treat as converged-with-advisories).
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.
Input: a spec for an API rate limiter (8-section template).
limits to authenticated key, not client IP.
"rejects >100 req/s/key with 429; p95 added latency <5ms".
decide: Redis (shared across instances); record assumption.
as an autonomous call.
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:
source of truth and let it implement to the spec's Success Criteria.
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.
/goal promptAt 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.
you a goal rather than a spec, point them to goal-spec first.
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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.