openspec-implementation-review
Reviews a shipped OpenSpec change's implementation against its own proposal/design/tasks/spec, producing a dated, two-pass openspec/changes/<id>/review.md…
Skill by ianshank
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ianshank-openspec-implementation-review
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, security, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/openspec-implementation-review
What's inside
- Skill name
openspec-implementation-review- Description
- Reviews a shipped OpenSpec change's implementation against its own proposal/design/tasks/spec, producing a dated, two-pass openspec/changes/<id>/review.md (mechanical fact-check, then adversarial attack, verdict-first) — dispatching claude-foundation's spec-guardian then peer-reviewer charters when that plugin is actually loaded, degrading to a general-purpose subagent with the same method inlined when it is not (the common case in this repo today, per ADR 0028). Use this whenever the user asks to review, audit, or sanity-check a change's actual implementation after landing, wants a dogfooded review.md for a merged OpenSpec change, or asks whether shipped work still matches what it claimed to do. Complements openspec-peer-review (which reviews a plan before implementation starts) rather than duplicating it.
- License
- Apache-2.0
- Compatibility
- python>=3.10
- Instructions
- 169 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (34)
- .gitignore
- SKILL.md
- evals.json · evals/
- body1.md · evals/fixtures/compose-append/
- body2.md · evals/fixtures/compose-append/
- proposal.md · evals/fixtures/compose-append/repo/openspec/changes/demo-change/
- tasks.md · evals/fixtures/compose-append/repo/openspec/changes/demo-change/
- setup.py · evals/fixtures/compose-append/
- proposal.md · evals/fixtures/locate-happy-path/repo/openspec/changes/demo-change/
- tasks.md · evals/fixtures/locate-happy-path/repo/openspec/changes/demo-change/
- proposal.md · evals/fixtures/locate-incomplete/repo/openspec/changes/wip-change/
- tasks.md · evals/fixtures/locate-incomplete/repo/openspec/changes/wip-change/
- proposal.md · evals/fixtures/no-such-change/repo/openspec/changes/real-change/
- tasks.md · evals/fixtures/no-such-change/repo/openspec/changes/real-change/
- review.md · evals/fixtures/validate-hand-written-review/
- dispatch-detection.md · references/
- ruff.toml
- __init__.py · scripts/implreview/
- cli.py · scripts/implreview/
- compose.py · scripts/implreview/
- detect.py · scripts/implreview/
- locate.py · scripts/implreview/
- prompts.py · scripts/implreview/
- validate.py · scripts/implreview/
- quality-gate.sh · scripts/
- run.py · scripts/
- validate_skill.py · scripts/
- conftest.py · tests/
- test_cli.py · tests/
- test_compose.py · tests/
- test_detect.py · tests/
- test_locate.py · tests/
- test_prompts.py · tests/
- test_validate.py · tests/
SKILL.md (first lines)
# openspec-implementation-review — dogfooded post-implementation review Reviews the *shipped implementation* of an OpenSpec change against its own proposal/design/ tasks/spec, in the two-pass shape this repo's own reviews already use by hand (`openspec/changes/archive/test-skill-validator-library/review.md`, `openspec/changes/archive/harden-quality-gate-integrity/review.md` — the two real, already-merged reviews `implreview.validate`'s required shape is actually calibrated against). This is **advisory, opt-in tooling** — a contributor or agent invokes it on demand. It is not wired into `CONTRIBUTING.md`, `GOVERNANCE.md`, protected paths, or any CI gate as mandatory. **Not a duplicate of `openspec-peer-review`.** That skill reviews a *plan* package before implementation starts and rewrites it to meet quality standards. This skill runs *after* a change has landed, never rewrites anything, and produces a persistent `review.md` artifact instead of a plan revision. If the target hasn't been implemented yet, use `openspec-peer-review` instead. ## 1. Preconditions (input contract) - An OpenSpec change id is given (`--change <id>`), or is inferable from the current git branch name or recent commit subjects — `openspec/changes/<id>/` must actually exist either way. `scripts/run.py locate` reports which happened. - The change's `tasks.md` looks complete: every `- [ ]`/`- [x]` checkbox is checked. This is confirmed by `locate` before proceeding — reviewing a change mid-flight is sometimes deliberate, so pass `--allow-incomplete` to do it anyway rather than treating this as a hard, unconditional block. - Python 3.10+, stdlib only. `locate`/`detect`/`compose`/`validate` do no network I/O and no third-party imports; `locate`'s branch/commit inference shells out to `git` and degrades gracefully (empty/`None`) when that fails or isn't available. - **The calling agent — not this skill's scripts — performs the actual subagent dispatch.** Nothing under `scripts/implreview/` can invoke `spec-guardian`, `peer-reviewer`, or a `general-purpose` subagent; those tools belong to the agent harness, not to a Python subprocess. This skill locates the change, detects which dispatch path looks available, composes the exact prompt(s) to send, and assembles the result — the dispatch step itself is something *you*, the agent following this skill, do with your own tools. ## 2. Procedure (the E2E steps) 1. **Locate.** `python scripts/run.py locate --change <id>` (or omit `--change` to infer it from the branch/recent commits). Confirms the change exists and its `tasks.md` looks done. Stop here and report what's missing if it doesn't — do not improvise around a missing change or fabricate a review for one that isn't ready. 2. **Detect the dispatch path, then corroborate it yourself.** `python scripts/run.py detect`. This checks a real, filesystem-observable signal and recommends `plugin` or `degraded` — but the signal is **necessary, not sufficient** (full explanation, including exactly what is and isn't checkable from a script: `references/dispatch-detection.md`). Before trusting a `plugin` recommendation and dispatching `spec-guardian`/`peer-reviewer` by name, independently confirm they actually appear among *your own* dispatchable subagent types — `claude-foundation` being present in this repo's tree proves it is *staged* (ADR 0028), never that it is *loaded into your session*. 3. **Compose the dispatch prompt(s).** `python scripts/run.py plan --change <id> [--force-path plugin|degraded] [--out-dir DIR]`. Prints (or writes) the exact prompt(s) for the path detected or forced: `spec-guardian` then `peer-reviewer` for `plugin`, or one self-contained `general-purpose` prompt with the whole two-pass method inlined for `degraded` — the path this repo's own sessions actually exercise today (see `references/dispatch-detection.md`). 4. **Dispatch, for real, with your own tools.** Send each prompt from step 3 to the named subagent type, in order. For the plugin path, feed `spec-guardian`'s findings into the `peer-reviewer` prompt as context (both prompts already say so). Capture each dispatched agent's full text output. 5. **Compose `review.md`.** `python scripts/run.py compose --change <id> --body-file <dispatched-output.md> --dispatch-path plugin|degraded [--tree-sha <sha>]`. Assembles `openspec/changes/<id>/review.md` — creating it fresh, or appending a dated follow-up section if one already exists (see §4). Never trust the dispatched text blindly: `compose` re-derives the title from `--change` and immediately re-validates the result structurally. 6. **Confirm.** `python scripts/run.py validate --change <id>` (or let step 5's own output speak — `compose` already prints the same check). A non-zero exit here means the dispatched reviewer's output didn't actually produce the required shape; fix the input and re-run `compose`, don't hand-edit around a failed check. ## 3. Output contract (postconditions — what "done" means) `openspec/changes/<id>/review.md` exists and, checked by `python scripts/run.py validate` (`implreview.validate.validate_review_structure`): - Opens with `# Review: <id>`. - Has a `## Verdict` heading whose opening paragraph states exactly one of the three canonical verdict tokens, bolded: **APPROVE**, **APPROVE WITH FOLLOW-UPS**, or **BLOCK** — reported **verdict-first**, before the detailed passes (this repo's actual convention, per both `spec-guardian`'s and `peer-reviewer`'s own charters' Rule 5/6 — not verdict-last). - Has a `## Pass 1 — ... (<YYYY-MM-DD>)` heading (mechanical fact-check) before a `## Pass 2 — ... (<YYYY-MM-DD>)` heading (adversarial) — each carrying its own date, which need not differ from the other's (both real precedent reviews in this repo date same-day passes this way; "separately dated" means separately *labeled*, not calendar-distinct). - Pass 1 gives every falsifiable claim exactly one verdict — CONFIRMED / CORRECTED / REFUTED — with evidence. Pass 2 is adversarial and **keeps refuted attacks in the output, marked refuted, rather than deleting them.** Neither of these is mechanically checkable (they are judgment calls about a specific change's substance) — `validate` checks *shape*, never *quality*; see §5. - Idempotent structure: re-running `compose` against the same change never produces a structurally invalid document, whether it creates, appends, or (with `--overwrite`) replaces. ## 4. Failure handling - **Target change doesn't exist.** `locate`/`plan`/`compose`/`validate --change` all exit `2` with `no such change: '<id>' ... known changes: <list>` on stderr. Nothing is written. - **`tasks.md` isn't fully checked off.** `locate` exits `1` by default, naming the unchecked items, unless `--allow-incomplete` is passed — reviewing a deliberately in-flight change is a real use case, not an error, but it is never the silent default. - **`review.md` already exists — decided, not ambiguous.** `compose` **never silently overwrites.** It appends a new, separately dated `## Follow-up review — <date>` section after every existing byte, with the new pass's own headings demoted one level so the document stays one coherent hierarchy — the same pattern this repo's own `add-panel-judge/review.md` already uses for its own separately dated second pass. `--overwrite` exists for the rare, deliberate case of redoing a bad file; it is never the default, and using it should be a conscious choice, not a habit. - **Dispatched output doesn't come out in the required shape.** `compose` still writes it (it never silently drops output) and reports every structural error on stderr with a non-zero exit, so the caller can see exactly what's missing and re-dispatch or hand-fix the body before trying again — it does not fabricate a passing shape around bad content. - **Leave clean state, always.** Every write (`compose`, `plan --out-dir`) either succeeds completely or leaves prior state untouched; nothing is left half-written. ## 5. Validation gate (before declaring success) You are **not done** until this exits 0: ```bash python scripts/validate_skill.py --skill . --tier structural,behavioral
From ianshank/Agents, Apache-2.0.
More from ianshank/Agents
- 0.552score
eval-corpus-forge
ianshank
Build, validate, and package reusable evaluation datasets for agent and LLM systems from prompts, traces, tool-call logs, metadata, and expected outcomes.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
model-bench
ianshank
Benchmark and A/B-test multiple LLMs or systems-under-test on one evaluation dataset.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
architecture-drift-guard
ianshank
Detect and block architecture drift in CI by comparing a codebase's actual Python import graph against a declared C4 component model.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
dataset-lint
ianshank
Validate an existing evaluation dataset (JSONL/JSON/CSV) for structural correctness, duplicate IDs, missing required fields, and encoding issues — without…
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
hierarchical-recursive-brainstorm
ianshank
Decomposes a topic into a controlled hierarchy, recursively expands leaves, prunes the bottom quartile, and synthesizes upward into a self-explanatory…
SkillBFreshness: B★ 1Claude Code +9 - 0.549score
openspec-quality-plan
ianshank
Generates a complete OpenSpec change package containing proposal, design, and task specs.
SkillBFreshness: B★ 1Claude Code +9 - 0.549score
openspec-peer-review
ianshank
Emits an objective Peer Review Findings section and rewrites an OpenSpec package to satisfy quality standards.
SkillBFreshness: B★ 1Claude Code +9 - 0.549score
openai-judge
ianshank
LLM-as-a-judge evaluations over OpenAI-compatible APIs (including NVIDIA Nemotron & LM Studio).
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
deploy
ianshank
Generate a safety-railed deployment shell script (scripts/deploy.sh) with bash strict mode, a --dry-run mode, a confirmation gate before irreversible steps…
SkillBFreshness: B★ 1Claude Code +9 - 0.545score
corpus-guardian
ianshank
Manage, verify, and synchronize the four frozen synthetic evaluation corpora (RCA, Requirements, TestGen, Answer Quality).
SkillBFreshness: B★ 1Claude Code +9 - 0.545score
e2e-matrix-sentinel
ianshank
Validate cross-platform end-to-end matrix coverage, verify POSIX and Windows driver parity, and enforce offline fixture restamping invariants.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
merge-gate-auditor
ianshank
Sample unlabelled PR records from merge-gate-data, prepare structured Audit Verdict Cards, and stage human verdicts.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 113
- Last commit (this folder)
- Sep 7, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/ianshank/Agents
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ianshank
- 0.552score
hierarchical-recursive-brainstorm
ianshank
Decomposes a topic into a controlled hierarchy, recursively expands leaves, prunes the bottom quartile, and synthesizes upward into a self-explanatory…
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
model-bench
ianshank
Benchmark and A/B-test multiple LLMs or systems-under-test on one evaluation dataset.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
dataset-lint
ianshank
Validate an existing evaluation dataset (JSONL/JSON/CSV) for structural correctness, duplicate IDs, missing required fields, and encoding issues — without…
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
eval-corpus-forge
ianshank
Build, validate, and package reusable evaluation datasets for agent and LLM systems from prompts, traces, tool-call logs, metadata, and expected outcomes.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
architecture-drift-guard
ianshank
Detect and block architecture drift in CI by comparing a codebase's actual Python import graph against a declared C4 component model.
SkillBFreshness: B★ 1Claude Code +9 - 0.549score
openai-judge
ianshank
LLM-as-a-judge evaluations over OpenAI-compatible APIs (including NVIDIA Nemotron & LM Studio).
SkillBFreshness: B★ 1Claude Code +9
Cite this page
openspec-implementation-review skill. Agent Mart. https://agentmart.dev/skills/ianshank-openspec-implementation-review (last updated 2026-10-24)