two-axis-review
Review a set of code changes against two separate axes, Standards (does it follow this repo's documented rules?) and Spec (does it do what the issue/PRD…
Skill by ChidiOkoene
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/chidiokoene-two-axis-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: testing, 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 and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/two-axis-review
What's inside
- Skill name
two-axis-review- Description
- Review a set of code changes against two separate axes, Standards (does it follow this repo's documented rules?) and Spec (does it do what the issue/PRD asked?), plus correctness, security, and test checks. Produces severity-ranked findings in conventional-comments style and a PASS/FAIL verdict usable as an agent-loop verification gate. Use when the user wants to review a branch, PR, diff, or work-in-progress, asks "review since X", "is this ready to merge", "check my changes against the issue", or when /implement, agent-loop, or /until-done needs a review gate before stopping.
- License
- MIT
- Instructions
- 136 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (11)
- CHECKS.md
- FINDINGS-FORMAT.md
- README.md
- REFERENCES.md
- SKILL.md
- README.md · examples/
- search.ts · examples/after/src/
- search.test.ts · examples/after/test/
- change.diff · examples/
- expected-review.md · examples/
- spec.md · examples/
SKILL.md (first lines)
# Two-Axis Review
Inspired by Matt Pocock's draft `review` skill in [mattpocock/skills](https://github.com/mattpocock/skills).
**Two axes, kept apart. Every finding labelled, ranked, and evidenced. One verdict.**
A change can follow every rule and build the wrong thing, or build exactly the right thing and break the rules. Reviewing both in one pass lets one axis hide the other, so this skill runs them separately and never reranks across them.
## Inputs
- **Base**: a commit, branch, tag, or `HEAD~N`. If the user gave none, use the merge-base with the default branch and say so. In a loop, the base is the commit the loop started from.
- **Spec** (optional): issue, PRD, or path. Issue tracker workflow: read `.agent/context/issue-tracker.md` first (fallback: `docs/agents/issue-tracker.md`).
- **Mode**: `interactive` (default, human reading) or `gate` (called from `/implement`, `agent-loop`, `/until-done`; verdict drives the loop).
## Process
Copy this checklist and tick it as you go:
```
- [ ] 1 Pin the diff
- [ ] 2 Find spec + standards
- [ ] 3 Run the axes (parallel if possible)
- [ ] 4 Run the cross-cutting checks
- [ ] 5 Rank, verdict, report
- [ ] 6 (optional) Log to vault
```
### 1. Pin the diff
- `git rev-parse <base>` must resolve, and `git diff <base>...HEAD` (three-dot: against the merge-base) must be non-empty. Include uncommitted work with `git diff <base>` when the user is reviewing WIP. Fail here, not inside subagents.
- Record `git log <base>..HEAD --oneline` and `git diff --stat`.
- **Size check.** Defect detection drops sharply above ~400 changed lines (see [REFERENCES.md](REFERENCES.md)). Over that, split the review by area (one pass per directory or commit group) and say so in the report. Generated files, lockfiles, and vendored code get a skim, not a line-by-line read.
### 2. Find the spec and the standards
**Spec**, first match wins: issue refs in commit messages or branch name (`#123`, `Closes #45`) → path the user passed → PRD/spec under `docs/`, `specs/`, `.scratch/`, `.agent/context/` matching the feature → ask. If there is genuinely none, the Spec axis reports `no spec` and the verdict cannot be PASS on spec grounds alone; say so.
**Standards**: anything that documents how code here should be written: `CODING_STANDARDS.md`, `CONTRIBUTING.md`, `CLAUDE.md`/`AGENTS.md` rules, `CONTEXT.md` vocabulary, ADRs in `docs/adr/`, lint/format config (only to know what tooling already enforces, so you can skip it).
### 3. Run the two axes
If your harness has subagents, send both in **one message** so they run in parallel with clean contexts. Otherwise run them sequentially and clear your head between them: finish and write down Standards before reading the spec.
**Standards brief:**
> Diff: `<command>`. Commits: `<list>`. Standards sources: `<files>`. Report every place the diff breaks a documented rule. Cite the rule (file + quote). Mark each as `rule` (written down) or `judgement` (consistency with surrounding code, not written). Skip anything a linter/formatter enforces. Use the comment format in FINDINGS-FORMAT.md. Under 400 words.
**Spec brief:**
> Diff: `<command>`. Spec: `<contents or path>`. Build a requirement checklist from the spec first, then check the diff against it. Report (a) requirements missing or partial, (b) requirements implemented incorrectly, (c) behaviour nobody asked for (scope creep). Quote the spec line for each. Use the comment format in FINDINGS-FORMAT.md. Under 400 words.
### 4. Cross-cutting checks
Do these yourself (or as a third parallel subagent on big diffs), using [CHECKS.md](CHECKS.md): **correctness**, **security**, **tests**, **design and complexity**. These are not a third axis to merge into the others; report them under their own heading.
If verifiers are configured (`.agent/context/loops.md`, fallback `docs/agents/loops.md`), run the fast verifier once and record the result. A red verifier is an automatic `blocker`.
### 5. Rank, decide, report
Label and rank every finding using [FINDINGS-FORMAT.md](FINDINGS-FORMAT.md). Severity order: `blocker` > `major` > `minor` > `nit`. Every finding needs a location (`file:line` in the post-change file) and evidence (a quote of the rule, the spec line, or the code). No evidence, no finding: downgrade it to a `question`.
**Verify every location before citing it.** Open the post-change file and confirm the quoted code is on that line (`grep -n '<snippet>' <file>`, or read the file at that line). Use the working tree or `git show HEAD:<file>`. If you only have a `.diff`, apply it to a temp copy first (`git apply` or `patch -p1`) and look up the line there. Never cite a line's position inside the diff text. If you can't verify a line, cite the hunk (`file @@ +start,len`) and write `line unverified`. Don't guess.
**Verdict:**
- **FAIL** if any `blocker`, or any `major` on Spec or Security.
- **PASS WITH NOTES** if only `major` (Standards/Design), `minor`, or `nit`.
- **PASS** if nothing above `nit`.
**Every finding must use this exact layout. No bullet or prose findings.** Copy it as is:
```
<label> (<severity>[, <axis-tag>]): <subject> — `path/to/file.ts:42`
<evidence: quoted rule, spec line, or code>
<why it matters, one or two sentences>
<suggested fix>
```
`<label>` is `issue`, `suggestion`, `question`, `nitpick`, or `praise` (see [FINDINGS-FORMAT.md](FINDINGS-FORMAT.md)). `<severity>` is `blocker`, `major`, `minor`, or `nit`. Leave one blank line between findings.
Report skeleton (fixed, so loops can parse it):
```markdown
## Verdict: FAIL | PASS WITH NOTES | PASS
Base: <ref> (<sha>) · <N> files, +A/-D · Spec: <source or "none">
## Standards
<findings in the template above, worst first, or "None.">
## Spec
Requirements: <met>/<total>
<findings in the template above, worst first, or "None.">
## Checks (correctness · security · tests · design)
<findings in the template above, worst first, or "None.">
## Praise
<at least one sincere, specific thing done well; omit if there honestly is none>
## Summary
Standards: <n> (worst: …) · Spec: <n> (worst: …) · Checks: <n> (worst: …)
Next: <the one change that would flip the verdict, if FAIL>
```
Keep the axes separate in the summary: worst finding per axis, never a single overall winner.
### 6. Self-check, then output
Before you output the report, check every finding:
- **Layout:** it matches the template exactly (label line, then evidence). Rewrite any bullet or prose finding.
- **Location:** its `file:line` was verified in step 5, or it is marked `line unverified`.
- **Severity:** the severity is justified by concrete evidence: a quoted spec line or standard, or code that shows actual harm. A finding that rests on an assumption ("only correct if…", "might be…") has no evidence of harm. Downgrade it to `question` (`minor`), or drop it.
- **Verdict:** the verdict follows the rules in step 5 from the severities that remain.
### 7. Gate mode (inside loops)
When called from `/implement`, `agent-loop`, or `/until-done`:
- Treat `FAIL` like a failing verifier: feed the `blocker`/`major` findings into the next **Act** step as the fix list. Do not fix `minor`/`nit` inside the loop unless trivial; list them in the stop brief.
- Re-review only the delta since the last review plus the fixed findings, not the whole diff, and count each re-review as a loop iteration.
- Stop rules from `agent-loop`'s STOP-RULES still apply. The same `blocker` surviving 2 fix attempts counts as no progress: stop and brief the human.From ChidiOkoene/optimal-brain, MIT.
More from ChidiOkoene/optimal-brain
- 0.604score
optimal-brain-full
ChidiOkoene
Router for the full optimal-brain pack (36 agent skills for engineering, planning, review, agent loops, and an Obsidian knowledge vault).
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
optimal-brain-vault-pack
ChidiOkoene
Router for the optimal-brain vault pack, which gives your coding agent a long-term memory in an Obsidian vault.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
agent-loop
ChidiOkoene
Agentic loop discipline.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
ask-brain
ChidiOkoene
Router for the whole optimal-brain pack: given a task, picks the single best skill or an ordered chain of skills, says why, and says what to skip.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
system-architect
ChidiOkoene
Orchestrate solution and system architecture across competence roles (discovery, as-is review, target design, or migration) into a session hub, ADRs, and…
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
setup-optimal-brain
ChidiOkoene
Configure this repo for the engineering skills: issue tracker, triage label vocabulary, and domain doc layout, written to .agent/context/.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
setup-agent-loops
ChidiOkoene
Configure this repo for agent loops (verification commands, stop rules, scope, starter recipes), or design a custom recurring workflow spec.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
prototype
ChidiOkoene
Build a throwaway prototype to flesh out a design: a runnable terminal app for state/business-logic questions, or several radically different UI variations…
SkillAFreshness: A★ 3Claude Code +9 - 0.599score
implement
ChidiOkoene
Implements a PRD or issue set end to end: plans, writes code test-first, runs the repo's verification commands, and gates on /two-axis-review before committing.
SkillAFreshness: A★ 3Claude Code +9 - 0.584score
diagnosing-bugs
ChidiOkoene
Diagnosis loop for hard bugs and performance regressions.
SkillAFreshness: A★ 3Claude Code +9 - 0.579score
domain-modeling
ChidiOkoene
Build and sharpen a project's domain model.
SkillAFreshness: A★ 3Claude Code +9 - 0.579score
triage
ChidiOkoene
Move issues and external PRs through a state machine of triage roles: categorise, verify, grill if needed, and write agent-ready briefs.
SkillAFreshness: A★ 3Claude Code +9
Signals
- Stars
- 3
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 14, 2026 (14 days ago)
- Last release
- Oct 13, 2026 (15 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ChidiOkoene/optimal-brain
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ChidiOkoene
- 0.604score
optimal-brain-full
ChidiOkoene
Router for the full optimal-brain pack (36 agent skills for engineering, planning, review, agent loops, and an Obsidian knowledge vault).
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
prototype
ChidiOkoene
Build a throwaway prototype to flesh out a design: a runnable terminal app for state/business-logic questions, or several radically different UI variations…
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
ask-brain
ChidiOkoene
Router for the whole optimal-brain pack: given a task, picks the single best skill or an ordered chain of skills, says why, and says what to skip.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
optimal-brain-vault-pack
ChidiOkoene
Router for the optimal-brain vault pack, which gives your coding agent a long-term memory in an Obsidian vault.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
agent-loop
ChidiOkoene
Agentic loop discipline.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
setup-agent-loops
ChidiOkoene
Configure this repo for agent loops (verification commands, stop rules, scope, starter recipes), or design a custom recurring workflow spec.
SkillAFreshness: A★ 3Claude Code +9
Cite this page
two-axis-review skill. Agent Mart. https://agentmart.dev/skills/chidiokoene-two-axis-review (last updated 2026-10-24)