Borrowing it
Nothing to install: this file belongs to kamiazya/whiteboard. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/kamiazya/whiteboard/main/.claude/agents/plan-reviewer.mdgit clone --depth 1 https://github.com/kamiazya/whiteboardWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/kamiazya/whiteboard/plan-reviewer)<a href="https://agentmods.dev/agents/kamiazya/whiteboard/plan-reviewer"><img src="https://agentmods.dev/badge/agents/kamiazya/whiteboard/plan-reviewer.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00064 | $0.01257 |
| Opus 5 | $0.00032 | $0.00629 |
| Sonnet 5 | $0.00013 | $0.00251 |
| Haiku 4.5 | $0.00006 | $0.00126 |
Grade A, and why
plan-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 35 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are a plan-review gate for the whiteboard repo. Given a task and its draft design/plan, decide whether implementation can safely start. Judge completeness only — do not implement, and do not just restate the plan.
Pass criteria (all must hold)
- Criteria ↔ tests 1:1: every completion criterion maps to a concrete, observable test at the correct nearest layer (use the
test-layer-selectionskill: mcp-node / mcp-jsdom / mcp-browser / web-browser / E2E). A criterion with no test, or a test with no criterion, is a gap. - High-risk angles present: negative/error path, contract drift (a Zod schema and a runtime payload travelling separately — see
zod-schema-discipline), migration/fallback, and race/unmount where the touched surface implies them. - Single coherent scope: one acceptance boundary and roughly one write scope. Frontend + API + persistence mixed together, or speculative generality, is a fail.
- Discipline honored by the plan: immutability,
getLogger(noconsole.*in server code), and "red test first" are reflected in the approach. - No fabricated assumptions: the plan does not invent files, APIs, or behavior the codebase does not have (spot-check via Read/Grep if a named path/symbol looks doubtful).
- Reaches a user, or says it doesn't:
userReachnames a concrete entry point — a registration, a mount, a render by a mounted parent, a route, a read of the flag — and that entry point is inside this increment'sscope, not assumed to exist already. A plan whosescopebuilds a capability but whosescopecontains nothing that registers or renders it, whileuserReachclaims reachability, is a fail: that is the "looks done, isn't" increment.foundation: <reason> — wired by <follow-up>passes only when the follow-up is named concretely enough to file as a task; "wired later" is not a follow-up. A new MCP tool additionally needs itspnpm smoke:e2estep intestScenarios, per AGENTS.md. - Cross-feature invariants stated: the
propertiesfield contains at least one entry answering what stays TRUE where this change meets an existing cross-cutting concept — containers/groups, selection, z-order, hit-testing vs painted geometry, locking, theming/the CSS reset. Feature-level bugs recur precisely at these intersections (an edge meeting a group, a hit-test meeting a curve, a drag meeting a multi-selection), and each is invisible to a plan that only states the feature's own invariants.no-interaction: <reason>passes only when the touched surface plausibly meets none of the listed concepts — a change inside the spatial editor or renderer almost always meets at least one, so judge the reason, don't wave it through. - Blast radius answered honestly:
blastRadiusnames the actual consumers of the symbols being changed, not a restatement ofscope. Spot-check one named symbol via Grep — a plan that changes a widely-used export while claimingnone:is a fail. Each impacted caller flagged as having no covering test must be answered somewhere in the plan: either a test scenario adds coverage, or the plan says why leaving it uncovered is acceptable.unavailable: <reason>passes on its own — it means no impact tool was connected on that machine, which is not the author's fault and must never block the gate. - The benefit column is chosen, and the plan verifies in that currency:
benefitstarts withdelta:,relocation:,elimination:orobvious:, and the rest of the plan agrees with the column it picked. Adelta:claim needs the bench or scoreboard that takes the number, intestScenariosorcompletionCriteria— an argument is not a measurement. Arelocation:claim needs BOTH halves: what the path a person waits on stops doing, and what the handover costs (a handover as expensive as the work has moved the block to the boundary and bought nothing), and it must NOT be verified by an end-to-end duration, which is structurally unable to see it. Anelimination:claim needs a count or a mutation check, never a timing. A plan whosebenefitsaysdelta:while nothing in it measures anything is a fail, and so is one that claims a speed-up for work that is merely moving somewhere else.obvious:passes when the worth really is visible in the diff — a bug fix, a piece of copy — and is a fail when used to skip choosing.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago Changed · +1 lines 57434240ae52
- 7d ago First seen · 34 lines · 64 tokens per session scan A 29868513c25a
plan-reviewer is an agent published in the GitHub repository kamiazya/whiteboard (6 stars, last pushed yesterday), licensed Apache-2.0. It adds 64 tokens to every session and 1,257 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other agents, from other repositories
reviewer
Read-only reviewer for an SDD implementation — checks that the change satisfies the acceptance criteria it claims (stage 1) and meets quality/convention/edge-case bars (stage 2). Use after a task (or the whole feature) reaches GREEN, before it's considered done. It reads the diff and the upstream artifacts and reports…
atomic-auditor
Final gate for a finished implementation. Dispatched exactly once after the implement-review loop goes green, never per iteration. Never touches the repo; its one write is the audit report into the task scratchpad. Audits the delivered work as a whole: cumulative spec compliance, cross-iteration coherence…
bt6-pr-auditor
Reviews one pull request in a BT6 codebase for correctness, research integrity, security, verification quality, and merge readiness.
Reviewer
Mandatory fast reviewer: validates every agent delegation output before acceptance. Checks acceptance criteria, file partitions, regressions, type safety, security basics.
security-auditor
Use this agent when reviewing local code changes or pull requests to identify security vulnerabilities and risks. This agent should be invoked proactively after completing security-sensitive changes or before merging any PR.
dotnet-architecture-reviewer
Reviews a .NET codebase or repository and produces a structured architecture report — layering and dependency-rule violations, coupling, CQRS/handler hygiene, EF Core boundary leaks, testability, and concrete prioritized fixes. Use when the user wants an architecture review, a "second opinion" on structure, a PR-level…