openspec-artifact-review
Skill18 starsChanged 4 months agoMITView on GitHub
Review the artifacts of one OpenSpec change before implementation. Run it in a fresh session. The session acts as an orchestrator and starts four independent reviewer sub-agents (testability, security, hidden assumptions, design contract), merges their findings into review.md in the change folder, and summarizes all issues and recommended fixes. It walks the user through the findings and applies fixes only on request.
In this repository67 other files it gives its agents.
- agent-onboardingSkill
- android-backgroundSkill
- android-cliSkill
- android-compose-architectureSkill
- android-compose-componentsSkill
- android-data-layerSkill
- android-di-koinSkill
- android-error-handlingSkill
- android-integration-testingSkill
- android-jacoco-setupSkill
- android-jvm-test-coverageSkill
- android-module-structureSkill
- android-navigationSkill
- android-presentation-mviSkill
- android-preview-figma-verifySkill
- android-ui-screenshot-verifySkill
- android-ui-testingSkill
- android-ui-verifySkill
- android-unit-testingSkill
- android-version-catalogSkill
- architecture-decision-recordSkill
- careful-planningSkill
- compose-adaptive-layoutsSkill
- figma-to-android-vectorSkill
- finalizeSkill
- git-commitSkill
- handoffSkill
- kmp-compose-architectureSkill
- kmp-compose-componentsSkill
- kmp-data-layerSkill
- kmp-di-koinSkill
- kmp-error-handlingSkill
- kmp-integration-testingSkill
- kmp-migration-analyzerSkill
- kmp-module-structureSkill
- kmp-navigationSkill
- kmp-presentation-mviSkill
- kmp-ui-testingSkill
- kmp-unit-testingSkill
- kotlin-coroutinesSkill
- kotlin-flowsSkill
- kotlin-mutation-testingSkill
- openspec-artifact-review-lightSkill
- project-breakdownSkill
- react-data-layerSkill
- react-error-handlingSkill
- react-integration-testingSkill
- react-presentation-mviSkill
- react-project-structureSkill
- react-routingSkill
- react-screen-architectureSkill
- react-securitySkill
- react-server-stateSkill
- react-ui-componentsSkill
- react-unit-testingSkill
- speckit-parallelize-agent-teamsSkill
- speckit-parallelize-subagentsSkill
- spring-api-layerSkill
- spring-di-configurationSkill
- spring-integration-testingSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
26 rules. About 0 are common, 13 are distinctive, and 13 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Do not read the artifact contents until the reviewers have returned (step 5).
- Distinctive: line 25
If there is earlier history, use AskUserQuestion to say so and offer "Stop so I can start a fresh session" (recommended) and "Continue …
- Very specific: line 31
If no change name was given, run openspec list --json.
- Very specific: line 34
Run openspec status --change <name> --json for changeRoot, schemaName and artifactPaths.
- Very specific: line 36
If artifactPaths shows that the schema generates review.md, ask the user for a different report file name.
- Very specific: line 49
Non-standard artifacts: every other file in the change folder, including files the schema generates beyond the standard ones.
- Very specific: line 52
decisions.md: if present, this holds settled decisions. - Very specific: line 61
Start all four in one message so they run in parallel, each with subagent_type: general-purpose and no model override.
- Distinctive: line 94
If a reviewer fails or returns nothing usable, retry it once.
- Distinctive: line 105
Remove duplicates: When reviewers report the same defect, keep one finding, note both IDs, and use the higher severity.
- Distinctive: line 107
Flag conflicts: When reviewers propose incompatible fixes, keep both and mark them as a conflict for the user to decide.
- Very specific: line 112
Compare with the earlier run: If review.md exists, mark each finding new or recurring, and mark those the user rejected earlier as …
- Very specific: line 117
Do not add findings of your own.
- Very specific: line 123
Write <changeRoot>/review.md using references/report-template.md, overwriting any earlier report, with the verdict set by the rules in step …
- Distinctive: line 129
every other finding, blockers first, as one short entry: `<ID> (<severity>) <artifact> > <requirement or section>: <the problem>.
- Distinctive: line 141
Run this step only when the user asks for it.
- Very specific: line 147
Use preview to show current and proposed text.
- Distinctive: line 156
Must-specify assumptions are findings like any other.
- Distinctive: line 167
Non-standard artifacts: never edit without confirmation.
- Very specific: line 169
decisions.md: never edit. If an accepted fix or the user's own wording contradicts it, leave the file alone and report the contradiction. - Very specific: line 171
Referenced stores,
openspec/specs/and code: never edit. - Distinctive: line 172
Git: do not commit or push. The user reviews the diff.
- Very specific: line 179
After a walk-through or applied fixes, update review.md: the status of each finding, the files changed, stale non-standard artifacts the …
- Distinctive: line 185
Ready, with accepted risks: no blocker is open, but the user rejected one.
- Distinctive: line 187
Ready: no blocker is open and none was rejected.
- Distinctive: line 189
If any blocker or major was fixed, say that the new wording itself has not been reviewed and recommend a re-run in a fresh session.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OpenSpec Artifact Review
Change to review: $ARGUMENTS
You are the orchestrator. Four sub-agents do the reviewing; you prepare their input, merge their output, write the report and apply what the user accepts.
Do not read the artifact contents until the reviewers have returned (step 5). Your job is to judge their findings without having formed your own view first, and the session stays usable for the walk-through on large changes.
1. Check the session is fresh
This session should contain nothing but this skill invocation. Conversation history about the change, especially the one that wrote the specs, biases the merge and the triage.
If there is earlier history, use AskUserQuestion to say so and offer "Stop so I can start a fresh session" (recommended) and "Continue here". The reviewers start clean either way.
2. Resolve the change
- If no change name was given, run
openspec list --json. Use the only active change if there is exactly one. Otherwise ask with AskUserQuestion. - Review exactly one active change. Archived changes are out of scope.
- Run
openspec status --change <name> --jsonforchangeRoot,schemaNameandartifactPaths. - If
artifactPathsshows that the schema generatesreview.md, ask the user for a different report file name. Keep the report at the change root in any case: the schema can treat files underspecs/as artifacts, while other files at the root are ignored by validate, status and archive.
3. Build the review input
Collect these facts. Gaps do not stop the review and need no question: review what exists and note what is missing under "Coverage" in the report. Stop only if the change folder has no artifacts at all.
- Standard artifacts:
proposal.md,specs/**/*.md,design.md,tasks.md. - Non-standard artifacts: every other file in the change folder, including
files the schema generates beyond the standard ones. Include them in the
review without announcing them. Skip
review.mdand dotfiles. decisions.md: if present, this holds settled decisions. See step 4.- Repo kind:
specs-onlyif no application source exists outsideopenspec/and tooling folders such as.claude/and.github/(check withgit ls-files, orfindoutside a git repo). Otherwisecode. - Referenced stores: from
openspec context. Reviewers fetch specs withopenspec show <spec-id> --type spec --store <store>.
4. Start the reviewers
Start all four in one message so they run in parallel, each with
subagent_type: general-purpose and no model override. If repo kind is
specs-only, reviewer 4 still runs, in its specs-only mode.
| ID prefix | Reviewer | Brief |
| T | Testability and verifiability | references/testability.md |
| S | Security | references/security.md |
| A | Hidden assumptions | references/assumptions.md |
| D | Design contract | references/design-contract.md |
Give each reviewer the same prompt, with only the brief path and prefix changing. Use absolute paths, based on this skill's base directory:
You are one of four independent reviewers of an OpenSpec change.
Read <base>/references/reviewer-common.md, then <base>/references/<brief>.md,
and follow them.
Change: <name>
Change root: <changeRoot>
Schema: <schemaName>
Repo kind: <code | specs-only>
Standard artifacts: <paths>
Non-standard artifacts: <paths>
decisions.md: <path | none>
Referenced stores: <ids | none>
Finding ID prefix: <T | S | A | D>Pass no opinions, summaries or hypotheses about the change, so each reviewer reaches its own conclusions.
If a reviewer fails or returns nothing usable, retry it once. If it fails again, mark that part as not covered in the report. The verdict can then not be "Ready".
5. Merge the findings
Now read the artifacts and any existing review.md.
- Check citations. Confirm that each cited requirement, quote or file exists. Fix small citation errors. Drop a finding whose evidence does not exist, and count the drops under "Coverage".
- Remove duplicates. When reviewers report the same defect, keep one finding, note both IDs, and use the higher severity.
- Flag conflicts. When reviewers propose incompatible fixes, keep both and mark them as a conflict for the user to decide. Do not pick a side.
- Respect settled decisions. Drop any finding that challenges a choice
recorded in
decisions.md. Keep findings where an artifact disagrees with that file. - Compare with the earlier run. If
review.mdexists, mark each findingneworrecurring, and mark those the user rejected earlier aspreviously rejected. Reviewers never see the earlier report, so it cannot anchor them.
Do not add findings of your own. Keep the reviewers' severities unless a finding
clearly breaks the definitions in references/reviewer-common.md, and note any
change you make.
6. Write the report and summarize
Write <changeRoot>/review.md using references/report-template.md,
overwriting any earlier report, with the verdict set by the rules in step 9.
Then show in chat:
- the verdict, the counts per severity and reviewer, and the report path
- conflicts between reviewers, with the fixes each one proposes
- every other finding, blockers first, as one short entry:
**<ID> (<severity>)** <artifact> > <requirement or section>: <the problem>. **Recommended fix:** <the fix> - upstream findings, labelled as such, and the number of findings marked
previously rejected
Full wording and analysis stay in the file. Then stop. Do not ask questions or edit artifacts. Say in one line that the user can ask to be walked through the findings or name the fixes to apply.
7. Walk through the findings
Run this step only when the user asks for it. If the user instead names specific fixes to apply, skip to step 8 for those fixes.
Skip findings marked previously rejected and the "Upstream" section. Use
AskUserQuestion and make every question stand on its own: name the artifact and
requirement, quote the current text, give the failure scenario in one sentence.
Use preview to show current and proposed text.
- Conflicts first, one at a time, with each proposed fix as an option.
- Blockers, then majors, one at a time, with options "Apply" (recommended unless you doubt the finding), "Edit" and "Reject". On "Edit", ask for the wording, or take it from the user's "Other" text.
- Minors last, as one batch with
multiSelect, up to four per question. Selected findings are applied, unselected ones stay open.
Must-specify assumptions are findings like any other. Assumptions classified as safe to leave implicit are not part of the walk-through.
8. Apply accepted fixes
Apply each accepted fix to the artifact it targets, then carry it into the other standard artifacts that rely on the old wording, without asking again. Do not change the state of any task checkbox.
These limits apply to every edit:
- Non-standard artifacts: never edit without confirmation. At the end, list those that now look stale and what would change, and ask with AskUserQuestion.
decisions.md: never edit. If an accepted fix or the user's own wording contradicts it, leave the file alone and report the contradiction.- Referenced stores,
openspec/specs/and code: never edit. - Git: do not commit or push. The user reviews the diff.
Then run openspec validate <name> --strict. Fix anything your edits broke. If
it was already failing before your edits, report that instead.
9. Finish
After a walk-through or applied fixes, update review.md: the status of each finding, the files changed, stale
non-standard artifacts the user declined to update, and the final verdict.
Final verdict:
- Not ready: any blocker is open, or a reviewer did not complete.
- Ready, with accepted risks: no blocker is open, but the user rejected one. List each.
- Ready: no blocker is open and none was rejected.
If any blocker or major was fixed, say that the new wording itself has not been reviewed and recommend a re-run in a fresh session.
End with the verdict, the files changed and the report path.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

