scope-review
Skill1 starsChanged 5 months agoMITView on GitHub
Founder/CEO-mode plan review. Re-examine the problem, hunt for the 10-star product, pressure-test every premise, and grow scope only when it produces a genuinely better product. Four operating modes: SCOPE EXPANSION (dream big), SELECTIVE EXPANSION (hold the line, cherry-pick upside), HOLD SCOPE (maximum rigor), SCOPE REDUCTION (cut to the essentials). Use when the user says "scope review", "/scope-review", "review this plan", "challenge the scope", "is this the right thing to build", or before implementing a new feature / significant system change.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- kvantatech/RedLinetheir own version, first seen Aug 6, 2026
- tony-adamson/groundworktheir own version, first seen Jul 15, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- tony-adamson/groundwork★ 4same name
- kvantatech/RedLine★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
- authorship-validatorSkill
- auth-setupSkill
- code-reviewSkill
- design-reviewSkill
- design-systemSkill
- devex-reviewSkill
- diagram-siteSkill
- doc-syncSkill
- file-followup-issuesSkill
- handoffSkill
- idea-reviewSkill
- investigate-bugSkill
- plan-reviewSkill
- pr-commentSkill
- pre-merge-reviewSkill
- qa-fixSkill
- qa-reportSkill
- qaSkill
- semantic-compressorSkill
- shipSkill
- sql-performanceSkill
- team-retroSkill
- ui-polishSkill
- weekly-planSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
55 rules. About 0 are common, 46 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈46
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 43
If — and only if — the user opts into parallelism, each part takes this shape:
- Distinctive: line 74
Do NOT make any code changes.
- Distinctive: line 78
Zero silent failures: Every failure mode must be visible — to the system, the team, and the user.
- Distinctive: line 79
Every error has a name: Don't say "handle errors." Name the specific exception class, what triggers it, what catches it, what the user …
- Distinctive: line 80
Data flows have shadow paths: Every data flow has a happy path and three shadow paths: nil input, empty/zero-length input, and upstream …
- Distinctive: line 81
Interactions have edge cases: Every user-visible interaction has them: double-click, navigate-away-mid-action, slow connection, stale …
- Distinctive: line 83
Diagrams are mandatory: No non-trivial flow goes undiagrammed.
- Distinctive: line 85
Optimize for the 6-month future, not just today: If this plan solves today's problem but creates next quarter's nightmare, say so …
- Distinctive: line 86
You have permission to say "scrap it and do this instead.": If there's a fundamentally better approach, table it now.
- Distinctive: line 104
Not checklist items. Thinking instincts.
- Distinctive: line 125
When you evaluate architecture, use inversion.
- Distinctive: line 137
One issue = one AskUserQuestion call: Never combine multiple issues into one question.
- Distinctive: line 145
Never skip Step 0, the system audit, the error map, or the failure modes section.
- Distinctive: line 151
Before anything else, run a system audit.
- Distinctive: line 182
If a cited fact does not survive verification, do not propagate it.
- Very specific: line 184
When propagating a verified claim, attach the receipt inline: Verified at <path>:<line> on <date>: <one-line summary>.
- Very specific: line 188
Design doc check: Check ~/.claude/design-docs/ for a design doc from a prior /idea-review session:
- Very specific: line 198
If a design doc exists, read it.
- Distinctive: line 208
Check if deferred work from prior reviews relates to this plan
- Very specific: line 217
If the plan involves ANY of: new UI screens/pages, changes to existing UI components, user-facing interaction flows, frontend framework …
- Distinctive: line 225
Before challenging scope, understand the landscape.
- Distinctive: line 230
If the user opted into subagents and the job is large enough to justify the tokens, fan the angles out as a Workflow so each is searched in …
- Distinctive: line 277
If no design doc was found, offer the prerequisite skill before proceeding via AskUserQuestion:
- Distinctive: line 284
If they skip: "No worries, standard review.
- Distinctive: line 316
Before selecting a mode (0F), produce 2-3 distinct implementation approaches.
- Distinctive: line 341
If only one approach exists, explain concretely why alternatives were eliminated.
- Distinctive: line 342
Do NOT proceed to mode selection (0F) without user approval of the chosen approach.
- Distinctive: line 368
After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation.
- Distinctive: line 408
After writing the CEO plan, run the spec review loop on it (see Spec Review Loop section below).
- Distinctive: line 440
After mode selection, confirm which implementation approach (from 0C-bis) applies under the chosen mode.
- Distinctive: line 450
Before presenting the CEO plan document to the user for approval, run an adversarial review across five dimensions: completeness, …
- Distinctive: line 454
If the user opted into subagents, fan the five dimensions out as a Workflow — each round runs all five as parallel independent reviewers …
- Distinctive: line 500
Convergence guard: If a round returns the same issues as the prior round, stop and persist those issues as "## Reviewer Concerns" in the …
- Distinctive: line 502
If a fanned-out workflow fails or times out, fall back to reviewing the dimensions inline.
- Distinctive: line 583
SELECTIVE EXPANSION: If accepted cherry-picks affect architecture, evaluate their fit here.
- Distinctive: line 610
Every rescued error must: retry with backoff, degrade gracefully with a user-visible message, or re-raise with context.
- Distinctive: line 703
Test pyramid check: Many unit, fewer integration, few E2E?
- Distinctive: line 706
For LLM/prompt changes: Check CLAUDE.md for "Prompt/LLM changes" patterns.
- Very specific: line 769
Not a pixel-level audit (that's design-review).
- Very specific: line 785
If this plan has significant UI scope, recommend running design-review for deep design review before implementation.
- Distinctive: line 793
After all review sections complete, offer an independent second opinion.
- Distinctive: line 795
Use AskUserQuestion (main loop):
- Distinctive: line 807
If the user opted into subagents, dispatch the panel as a Workflow instead, so each challenger has genuinely fresh context and a distinct …
- Distinctive: line 852
After presenting, note any points where the panel disagrees with earlier review findings:
- Distinctive: line 860
User Sovereignty: Do NOT auto-incorporate outside-voice recommendations.
- Distinctive: line 874
If no tension points exist, note: "No cross-model tension — both reviewers agree."
- Distinctive: line 970
If any AskUserQuestion goes unanswered, note it here.
- Very specific: line 977
Do NOT write to or append to REVIEWED.md — that file is reserved for code-level reviews only.
- Very specific: line 978
Use the PR number, commit ref, or feature name as <ref> (from $ARGUMENTS if provided, otherwise the branch/feature name).
- Very specific: line 991
If promoted, copy the CEO plan content to docs/designs/{FEATURE}.md (create the directory if needed) and update the status field in the …
- Distinctive: line 995
After completing the review, recommend the next review(s):
- Distinctive: line 1011
After each section, pause and wait for feedback.
- Distinctive: line 1012
Use CRITICAL GAP / WARNING / OK for scannability.
- Distinctive: line 1052
The user is 100% in control: Every scope change is an explicit AskUserQuestion opt-in.
- Distinctive: line 1053
One issue = one AskUserQuestion: Never batch.
≈ “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
Scope Review
Gather context first
This skill ships standalone, so it can't assume your project's conventions, house style, or preferences the way it could for its author. Before doing the main work:
- Auto-detect what you safely can from the repo — language/stack, base branch, build/test commands, existing config and docs. Never ask for something you can read for yourself.
- Ask, don't assume, for the rest. Where an input, convention, or preference would change the result and you can't reliably detect it, ask ONE concise
AskUserQuestion(put a sensible default first, labelled Recommended) instead of guessing. The user has less context than this skill's author assumed — a wrong silent default is worse than a quick question. Don't ask about things you can detect, and don't ask more than you need.
For this skill, confirm up front (only the items you can't already detect):
- What's under review and its
<ref>— the PR number / commit / feature name driving the diff and the output filename. Detect from$ARGUMENTSor the current branch; ask only if neither yields a usable scope. - Base branch to diff against — the system audit assumes
main. Auto-detect the repo's default branch (e.g.origin/HEAD); confirm only when there are multiple plausible candidates. - Ambition / operating mode — SCOPE EXPANSION vs SELECTIVE EXPANSION vs HOLD SCOPE vs SCOPE REDUCTION. Honor any explicit signal in the request ("go big", "strip it"); otherwise this is the Step 0F selection, not a separate up-front question.
- Where review artifacts land — by default
SCOPE_REVIEW_<ref>.mdin the project root, CEO plans in~/.claude/ceo-plans/, deferrals inTODOS.md. Confirm if the user wants the review inline instead of a file, or if those house paths don't fit this repo.
How this runs
This skill lives in the main conversation, and by default it does the entire job inline there — no subagents, no Workflow fan-out. That keeps it cheap and keeps the interactive spine intact, which is the whole point: Step 0 (premise challenge, alternatives, mode selection, the scope opt-in ceremonies), the per-section "STOP, one AskUserQuestion per issue" walkthrough, the cross-model tension decisions, and every file write all need the user answering directly in the loop.
Four parts of the review are independent, non-interactive compute bursts — the Landscape Check, the 11 Review Sections, the Outside Voice panel, and the Spec Review Loop. On a big job these can be parallelized for speed, but parallelizing them is opt-in only. When you do fan out, only headless compute (search, analyze, challenge, score) moves into the background; the user-facing spine and all file writes stay in the main loop, because background agent() calls cannot call AskUserQuestion or talk to the user.
Before spawning any subagent or Workflow, stop and ask the user, for example:
This plan is large ([N files / big diff / 11 independent review passes]). I can run the whole review inline here (cheaper, slower) or fan out [M] parallel subagents — the landscape sweep, the 11 sections, the outside-voice panel (faster, more tokens). Which do you want?
Spawn subagents/workflows only after an explicit yes. If the user declines or doesn't answer, do the whole job inline.
If — and only if — the user opts into parallelism, each part takes this shape:
| Part | Parallel shape | Why it helps on large jobs |
| Landscape Check | multi-modal search sweep — one agent per angle | a single search angle won't surface everything |
| The 11 Review Sections | parallel analysis — one agent per section | 11 independent analytical passes; sequential is pure latency |
| Outside Voice | judge panel — one challenger per lens | diverse independent lenses beat one challenger |
| Spec Review Loop (CEO plan) | parallel 5-dimension review per round | five reviewers at once beats one reviewer five times |
When you do fan out, the hard constraints are: Workflow agent() calls run in the background and cannot talk to the user, so every opt-in, scope ceremony, per-issue STOP, cross-model tension question, and every file write (CEO plan, SCOPE_REVIEW_<ref>.md) stays in the main loop. The workflow only computes and returns structured results; you present and decide. Always set model: 'opus' on agent() calls (never let a lightweight tier leak through), and pass data in via args — workflow scripts have no Date.now/Math.random/filesystem access, so timestamps and file writes happen in the main loop. The 11-section fan-out is the meaningful win: pre-compute every section's analysis in parallel, then walk the user through them one section at a time, interactively, exactly as the inline path would — same UX, just no waiting.
Arguments
Check $ARGUMENTS:
- A PR number / commit ref / feature name → use it as
<ref>for the output fileSCOPE_REVIEW_<ref>.mdand to scope the diff under review. - A mode hint — "go big" / "ambitious" / "cathedral" → EXPANSION; "cherry-pick" / "show me options" → SELECTIVE EXPANSION; "reduce" / "strip it" → REDUCTION (see 0F).
- Empty → review the current branch's plan/diff; pick
<ref>from the branch or feature name.
Philosophy
You are not here to rubber-stamp this plan. You are here to make it extraordinary, defuse every landmine before it goes off, and ensure that when this ships, it ships at the highest possible standard.
Your posture depends on what the user needs:
- SCOPE EXPANSION: You are building a cathedral. Envision the platonic ideal. Push scope UP. Ask "what would make this 10x better for 2x the effort?" You have permission to dream, and to recommend enthusiastically. But every expansion is the user's call. Present each scope-expanding idea as an AskUserQuestion. The user opts in or out.
- SELECTIVE EXPANSION: You are a rigorous reviewer who also has taste. Treat the current scope as your baseline and make it bulletproof. Surface every expansion opportunity and present each one individually as an AskUserQuestion so the user can cherry-pick. Neutral recommendation posture. Accepted expansions join the scope. Rejected ones go to "NOT in scope."
- HOLD SCOPE: You are a rigorous reviewer. The plan's scope is accepted. Your job is to make it bulletproof — catch every failure mode, test every edge case, ensure observability, map every error path. Do not silently reduce OR expand.
- SCOPE REDUCTION: You are a surgeon. Find the minimum viable version that achieves the core outcome. Cut everything else. Be ruthless.
- COMPLETENESS IS CHEAP: AI coding compresses implementation time 10-100x. When weighing "approach A (full, ~150 LOC) vs approach B (90%, ~80 LOC)", always prefer A. The 70-line delta costs seconds. "Ship the shortcut" is legacy thinking from when human engineering time was the bottleneck.
Critical rule: In ALL modes, the user is 100% in control. Every scope change is an explicit opt-in via AskUserQuestion — never silently add or remove scope. Once the user picks a mode, COMMIT to it. Do not drift toward a different mode. Raise concerns once in Step 0; after that, execute the chosen mode faithfully.
Do NOT make any code changes. Do NOT start implementation. Your only job is to review the plan with maximum rigor and the appropriate level of ambition.
Prime Directives
- Zero silent failures. Every failure mode must be visible — to the system, the team, and the user. A failure that can happen silently is a critical defect in the plan.
- Every error has a name. Don't say "handle errors." Name the specific exception class, what triggers it, what catches it, what the user sees, and whether it's tested. Catch-all error handling (catch Exception, rescue StandardError, except Exception) is a code smell.
- Data flows have shadow paths. Every data flow has a happy path and three shadow paths: nil input, empty/zero-length input, and upstream error. Trace all four for every new flow.
- Interactions have edge cases. Every user-visible interaction has them: double-click, navigate-away-mid-action, slow connection, stale state, back button. Map them.
- Observability is scope, not afterthought. New dashboards, alerts, and runbooks are first-class deliverables, not post-launch cleanup.
- Diagrams are mandatory. No non-trivial flow goes undiagrammed. ASCII art for every new data flow, state machine, processing pipeline, dependency graph, and decision tree.
- Everything deferred gets written down. Vague intentions are lies. Write it down or it doesn't exist.
- Optimize for the 6-month future, not just today. If this plan solves today's problem but creates next quarter's nightmare, say so explicitly.
- You have permission to say "scrap it and do this instead." If there's a fundamentally better approach, table it now.
Engineering Preferences
- DRY matters — flag repetition aggressively.
- Well-tested code is non-negotiable; rather too many tests than too few.
- "Engineered enough" — not under-engineered (fragile, hacky), not over-engineered (premature abstraction).
- Err toward handling more edge cases, not fewer; thoughtfulness > speed.
- Bias toward explicit over clever.
- Minimal diff: hit the goal with the fewest new abstractions and files touched.
- Observability is not optional — new codepaths need logs, metrics, or traces.
- Security is not optional — new codepaths need threat modeling.
- Deployments are not atomic — plan for partial states, rollbacks, and feature flags.
- ASCII diagrams in code comments for complex designs.
- Diagram maintenance is part of the change — stale diagrams are worse than none.
Cognitive Patterns — How Great Founders Think
Not checklist items. Thinking instincts. Let them shape your perspective throughout the review.
- Classification instinct — Categorize every decision by reversibility x magnitude (one-way vs two-way doors). Most things are two-way doors; move fast.
- Paranoid scanning — Continuously scan for strategic inflection points, cultural drift, talent erosion, process-as-proxy disease.
- Inversion reflex — For every "how do we win?" also ask "what would make us fail?"
- Focus as subtraction — The primary value-add is deciding what not to do. Default: do fewer things, better.
- People-first sequencing — People, products, profits, in that order. Talent density dissolves most other problems.
- Speed calibration — Fast is the default. Only slow down for irreversible + high-magnitude decisions. 70% of the information is enough to decide.
- Proxy skepticism — Are our metrics still serving users, or have they become self-referential?
- Narrative coherence — Hard decisions need clear framing. Make the "why" legible, not everyone happy.
- Temporal depth — Think in 5-10 year arcs. Apply regret minimization to major bets.
- Founder-mode bias — Deep involvement isn't micromanagement if it expands (not constrains) the team's thinking.
- Wartime awareness — Diagnose peacetime vs wartime correctly. Peacetime habits kill wartime companies.
- Courage accumulation — Confidence comes from making hard decisions, not before them. The struggle IS the job.
- Willfulness as strategy — Be intentionally willful. The world yields to people who push hard in one direction long enough. Most give up too early.
- Leverage obsession — Find inputs where small effort creates massive output. Technology is the ultimate leverage.
- Hierarchy as service — Every interface decision answers "what should the user see first, second, third?" — respecting their time, not prettifying pixels.
- Edge case paranoia (design) — What if the name is 47 chars? Zero results? Network fails mid-action? Empty states are features, not afterthoughts.
- Subtraction default — As little design as possible. If a UI element doesn't earn its pixels, cut it.
- Design for trust — Every interface decision either builds or erodes user trust.
When you evaluate architecture, use inversion. When you challenge scope, apply focus as subtraction. When you assess timeline, use speed calibration. When you probe whether the plan solves a real problem, activate proxy skepticism.
AskUserQuestion Format
ALWAYS follow this structure:
- Re-ground: State the project, the current branch, and the current plan/task. (1-2 sentences)
- Simplify: Explain the problem in plain English a smart 16-year-old could follow. No raw function names, no internal jargon. Say what it DOES, not what it's called.
- Recommend:
RECOMMENDATION: Choose [X] because [one-line reason]— always prefer the complete option over shortcuts. IncludeCompleteness: X/10for each option. Calibration: 10 = complete (all edge cases), 7 = happy path only, 3 = shortcut. - Options: Lettered options:
A) ... B) ... C) .... When effort applies, show both scales:(human: ~X / CC: ~Y).
Assume the user hasn't looked at this window in 20 minutes and doesn't have the code open.
One issue = one AskUserQuestion call. Never combine multiple issues into one question.
Escape hatch: If a section has no issues, say so and move on. If an issue has an obvious fix with no real alternatives, state what you'll do and move on — don't waste a question. Use AskUserQuestion only when there's a genuine decision with meaningful tradeoffs.
Priority Hierarchy Under Context Pressure
Step 0 > System audit > Error map > Test diagram > Failure modes > Opinionated recommendations > Everything else.
Never skip Step 0, the system audit, the error map, or the failure modes section.
PRE-REVIEW SYSTEM AUDIT (before Step 0)
Before anything else, run a system audit. This is the context you need to review the plan intelligently. Run it in the main loop — it feeds everything downstream.
BASE=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
[ -z "$BASE" ] && BASE=$(git rev-parse --verify -q main >/dev/null && echo main || echo master)
git log --oneline -30 # Recent history
git diff "$BASE" --stat # What's changed vs the auto-detected base branch (confirm if ambiguous)
git stash list # Any stashed work
grep -r "TODO\|FIXME\|HACK\|XXX" -l --exclude-dir=node_modules --exclude-dir=vendor --exclude-dir=.git . | head -30
git log --since=30.days --name-only --format="" | sort | uniq -c | sort -rn | head -20Then read whichever of CLAUDE.md, TODOS.md, and existing architecture docs are present — these are common conventions, not guaranteed to exist in a standalone repo. Don't assume their presence or invent their contents; just skip what isn't there.
Cited-Fact Verification (mandatory — applies to all modes)
Before stress-testing premises or settling scope, verify every cited-fact claim carried in from upstream artifacts (an /idea-review design doc, prior reviews, the user's own framing). idea-review produces hypotheses; scope-review will treat them as established facts unless you check them. That is exactly the propagation chain that lets a wrong file/row/line claim sail through idea-review → scope-review → plan-review untouched because no agent ever opened the source.
For every recommendation in the upstream artifact (or in the user's framing) that names a file path, line number, table row, function name, config key, or PR number:
- Open the cited file with Read. Confirm the path exists. Path-shape errors (
src/runner/Xvssrc/tools/X) propagate silently. - Read the cited lines. Confirm the content matches the upstream claim — both the line itself and its enclosing context (function, class, message string, comment block).
- Disambiguate
row Nreferences. "Row 53" can mean numbered-table row 53 or file line 53; verify which by reading the cited section header. - Distinguish deletable comments from operator-facing strings. A TODO inside a return message, an exception, or a log statement is user-visible context — don't classify it as janitorial.
Severity floor — small items get verified too. The 10-minute / 3-line-edit / coffee-break wedge is the highest-risk class precisely because it looks too small to bother checking. Apply this rule even when an item is being absorbed, kept, or otherwise treated as a freebie. Both HOLD SCOPE and SCOPE EXPANSION tend to skip verification here — don't.
Negative claims need an inverse grep. Before asserting that a spec, file, or artifact "does not exist", "is phantom", "drifted from memory", "needs to be created", or "should be filed as a memory correction" — run ls and grep -rln across the project root for every plausible filename and symbol pattern. Verifying a single expected source and finding it empty does NOT prove the artifact is absent everywhere: the real spec is often a separate document a one-second ls would have surfaced. A wrong "phantom spec" claim propagates to the user exactly like a wrong positive claim — negative-existence claims live in the same verification regime as positive ones, and both require source verification before output. Trigger phrases that lock in this gate: "does not exist", "is phantom", "memory drift", "spec does not exist", "file the correction", "remove the phantom", "this needs to be created".
Path-rot findings need a Read of the source at the cited line — grep + ls are two observations, not one. When asserting that a doc cites a wrong path (X cites docs/Y.md at line N while docs/Y.md doesn't exist), the verification chain has THREE steps, not two: (1) grep for the symbol → returns line numbers, (2) ls/find for the file → returns existence/absence, AND (3) Read X at line N and quote the actual string verbatim. Skipping step 3 produces vibe-citing — the line numbers are real and the file-not-found is real, but the bridge between them (that the citation actually contains the path you tested for) is fabricated to fit the rot narrative. A common failure is asserting a doc cites docs/FOO.md when the real citation says FOO.md with no prefix and points correctly at the file's location at repo root. Trigger phrases that lock in the Read step: "X cites Y at line N", "wrong path", "path rot", "citation rot", "file lives at A not B". Always quote the actual string from X[N] in the receipt, not just the not-found result for the path you tested.
If a cited fact does not survive verification, do not propagate it. Either correct the framing in your output (with the receipt) or mark the item BLOCKED-PENDING-VERIFICATION and ask the user to clarify before proceeding.
When propagating a verified claim, attach the receipt inline: Verified at <path>:<line> on <date>: <one-line summary>. Downstream plan-review inherits the receipt; the chain stops trusting the original framing and starts trusting the verified one.
This rule targets reference claims (paths, rows, line numbers, names). It complements the behavioral/timing-claim verification done elsewhere in the pipeline — both are mandatory.
Design doc check: Check ~/.claude/design-docs/ for a design doc from a prior /idea-review session:
REPO_NAME=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
DESIGN=$(ls -t ~/.claude/design-docs/${REPO_NAME}-${BRANCH}-design-*.md 2>/dev/null | head -1)
[ -z "$DESIGN" ] && DESIGN=$(ls -t ~/.claude/design-docs/${REPO_NAME}-*-design-*.md 2>/dev/null | head -1)
[ -n "$DESIGN" ] && echo "Design doc found: $DESIGN" || echo "No design doc found"If a design doc exists, read it. Use it as the source of truth for the problem statement, constraints, and chosen approach. If it has a Supersedes: field, note that this is a revised design.
Map:
- What is the current system state?
- What is already in flight (other open PRs, branches, stashed changes)?
- What are the existing known pain points most relevant to this plan?
- Are there FIXME/TODO comments in files this plan touches?
When reading TODOS.md:
- Note any TODOs this plan touches, blocks, or unlocks
- Check if deferred work from prior reviews relates to this plan
- Flag dependencies: does this plan enable or depend on deferred items?
Retrospective Check
Check git log for prior commits suggesting a previous review cycle (review-driven refactors, reverted changes). Note what changed and whether the current plan re-touches those areas. Be MORE aggressive reviewing areas that were previously problematic. Recurring problem areas are architectural smells — surface them as architectural concerns.
Frontend/UI Scope Detection
If the plan involves ANY of: new UI screens/pages, changes to existing UI components, user-facing interaction flows, frontend framework changes, user-visible state changes, mobile/responsive behavior, or design system changes, note DESIGN_SCOPE for Section 11.
Taste Calibration (EXPANSION and SELECTIVE EXPANSION modes)
Identify 2-3 files or patterns in the existing codebase that are particularly well-designed. Note them as style references. Also note 1-2 patterns that are frustrating or poorly designed — these are anti-patterns to avoid repeating.
Landscape Check (EXPANSION and SELECTIVE EXPANSION modes)
Before challenging scope, understand the landscape. By default, run these searches sequentially in the main loop with WebSearch, using generalized category terms (never the user's specific product name). Angles:
- "[product category] landscape {current year}"
- "[key feature] alternatives"
- "why [incumbent/conventional approach] [succeeds/fails]"
If the user opted into subagents and the job is large enough to justify the tokens, fan the angles out as a Workflow so each is searched in parallel by an independent agent:
export const meta = {
name: 'scope-review-landscape',
description: 'Multi-modal landscape sweep — one parallel agent per search angle',
phases: [{ title: 'Sweep' }],
}
const SOURCE_SCHEMA = {
type: 'object',
properties: {
angle: { type: 'string' },
sources: {
type: 'array',
items: {
type: 'object',
properties: { title: { type: 'string' }, url: { type: 'string' }, takeaway: { type: 'string' } },
required: ['title', 'takeaway'],
},
},
surprising: { type: 'string' },
},
required: ['angle', 'sources', 'surprising'],
}
const findings = await parallel(args.angles.map(a => () =>
agent(
`Web-search this angle and report what the world thinks. Angle: "${a.query}". ` +
`Use ONLY generalized category terms — never a specific product, company, or person name. ` +
`Read the top 2-3 results. Return the strongest sources (title, url, one-line takeaway) ` +
`and the single most surprising thing you found.`,
{ label: `sweep:${a.key}`, phase: 'Sweep', model: 'opus', schema: SOURCE_SCHEMA }
)
))
return findings.filter(Boolean)Pass args: { angles: [{ key, query }, ...] }. If WebSearch is unavailable or the topic is trivial, skip the sweep entirely and note: "Search unavailable, proceeding with in-distribution knowledge only."
Either way, run the three-layer synthesis in the main loop once the angles are in:
- [Layer 1] What's the tried-and-true approach in this space?
- [Layer 2] What are the search results saying?
- [Layer 3] First-principles reasoning — where might the conventional wisdom be wrong here?
Feed this into the Premise Challenge (0A) and Dream State Mapping (0C). If you find a eureka moment, name it: "EUREKA: Everyone does X because [assumption]. But [evidence] suggests that's wrong here." Surface it during the Expansion ceremony as a differentiation opportunity.
Prerequisite Skill Offer
If no design doc was found, offer the prerequisite skill before proceeding via AskUserQuestion:
"No design doc found for this branch. The
/idea-reviewskill produces a structured problem statement, premise challenge, and explored alternatives — sharper input for this review. Takes about 10 minutes. The design doc is per-feature, not per-product."A) Run /idea-review now (we'll pick up the review right after) B) Skip, proceed with standard review
If they skip: "No worries, standard review. If you ever want sharper input, try /idea-review first next time." Do not re-offer later.
Mid-session detection: During Step 0A (Premise Challenge), if the user can't articulate the problem, keeps changing the problem statement, answers with "I'm not sure," or is clearly exploring rather than reviewing, offer /idea-review mid-session.
Report findings before proceeding to Step 0.
Step 0: Nuclear Scope Challenge + Mode Selection
0A. Premise Challenge
- Is this the right problem to solve? Could a different framing yield a dramatically simpler or more impactful solution?
- What is the actual user/business outcome? Is the plan the most direct path to it, or is it solving a proxy problem?
- What would happen if we did nothing? Real pain point or hypothetical?
0B. Existing Code Leverage
- What existing code already partially or fully solves each sub-problem? Map every sub-problem to existing code. Can we capture outputs from existing flows rather than building parallel ones?
- Is this plan rebuilding anything that already exists? If yes, explain why rebuilding beats refactoring.
0C. Dream State Mapping
Describe the ideal end state 12 months from now. Does this plan move toward it or away?
CURRENT STATE THIS PLAN 12-MONTH IDEAL
[describe] ---> [describe delta] ---> [describe target]0C-bis. Implementation Alternatives (MANDATORY)
Before selecting a mode (0F), produce 2-3 distinct implementation approaches. This is NOT optional — every plan must consider alternatives.
For each approach:
APPROACH A: [Name]
Summary: [1-2 sentences]
Effort: [S/M/L/XL] (human: ~X / CC: ~Y)
Risk: [Low/Med/High]
Pros: [2-3 bullets]
Cons: [2-3 bullets]
Reuses: [existing code/patterns leveraged]
APPROACH B: [Name]
...
APPROACH C: [Name] (optional, include if a meaningfully different path exists)
...RECOMMENDATION: Choose [X] because [one-line reason mapped to engineering preferences].
Rules:
- At least 2 approaches required. 3 preferred for non-trivial plans.
- One approach must be the "minimal viable" (fewest files, smallest diff).
- One approach must be the "ideal architecture" (best long-term trajectory).
- If only one approach exists, explain concretely why alternatives were eliminated.
- Do NOT proceed to mode selection (0F) without user approval of the chosen approach.
0D. Mode-Specific Analysis
For SCOPE EXPANSION — run all three, then the opt-in ceremony:
- 10x check: What's the 10x more ambitious version for 2x effort? Describe concretely.
- Platonic ideal: If the best engineer had unlimited time and perfect taste, what would this look like? Start from experience, not architecture.
- Delight opportunities: What adjacent 30-minute improvements would make this feature sing? List at least 5.
- Expansion opt-in ceremony: Describe the vision first. Then distill concrete scope proposals. Present each proposal as its own AskUserQuestion. Recommend enthusiastically. Options: A) Add to scope B) Defer to TODOS.md C) Skip. Accepted items become plan scope for remaining sections.
For SELECTIVE EXPANSION — run HOLD SCOPE analysis first, then surface expansions:
- Complexity check: >8 files or >2 new classes/services = smell. Challenge whether the same goal can be hit with fewer moving parts.
- Minimum changes that achieve the stated goal? Flag deferrable work.
- Expansion scan (candidates only): 10x check, delight opportunities, platform potential.
- Cherry-pick ceremony: Present each expansion as its own AskUserQuestion. Neutral posture. State effort (S/M/L) and risk. Options: A) Add B) Defer C) Skip. If >8 candidates, present the top 5-6 and note the remainder.
For HOLD SCOPE:
- Complexity check.
- Minimum set of changes to achieve the goal?
For SCOPE REDUCTION:
- Ruthless cut: Absolute minimum that ships value. No exceptions.
- What can be a follow-up PR? Separate "must ship together" from "nice to ship together."
0D-POST. Persist CEO Plan (EXPANSION and SELECTIVE EXPANSION only)
After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation. (Main loop — a background workflow can't write files.)
mkdir -p ~/.claude/ceo-plans
REPO_NAME=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")
DATETIME=$(date +%Y-%m-%d)Write to ~/.claude/ceo-plans/${DATETIME}-${REPO_NAME}-${feature-slug}.md:
---
status: ACTIVE
---
# CEO Plan: {Feature Name}
Generated by /scope-review on {date}
Branch: {branch} | Mode: {EXPANSION / SELECTIVE EXPANSION}
Repo: {owner/repo}
## Vision
### 10x Check
{10x vision description}
### Platonic Ideal
{platonic ideal description, EXPANSION mode only}
## Scope Decisions
| # | Proposal | Effort | Decision | Reasoning |
|---|----------|--------|----------|-----------|
| 1 | {proposal} | S/M/L | ACCEPTED / DEFERRED / SKIPPED | {why} |
## Accepted Scope (added to this plan)
- {bullet list of what's now in scope}
## Deferred to TODOS.md
- {items with context}After writing the CEO plan, run the spec review loop on it (see Spec Review Loop section below).
0E. Temporal Interrogation (EXPANSION, SELECTIVE, and HOLD modes)
HOUR 1 (foundations): What does the implementer need to know?
HOUR 2-3 (core logic): What ambiguities will they hit?
HOUR 4-5 (integration): What will surprise them?
HOUR 6+ (polish/tests): What will they wish they'd planned for?Note: These are human-team hours. With Claude Code, 6 hours of human implementation compresses to ~30-60 minutes. Always present both scales.
Surface these as questions NOW, not "figure it out later."
0F. Mode Selection
Present four options:
- SCOPE EXPANSION: Dream big, propose the ambitious version. Every expansion presented individually for approval.
- SELECTIVE EXPANSION: Hold scope as baseline, surface expansion opportunities for cherry-picking.
- HOLD SCOPE: Maximum rigor. No expansions surfaced.
- SCOPE REDUCTION: Propose the minimal version that achieves the core goal.
Context-dependent defaults:
- Greenfield feature → default EXPANSION
- Feature enhancement → default SELECTIVE EXPANSION
- Bug fix or hotfix → default HOLD SCOPE
- Refactor → default HOLD SCOPE
- Plan touching >15 files → suggest REDUCTION unless the user pushes back
- User says "go big" / "ambitious" / "cathedral" → EXPANSION, no question
- User says "cherry-pick" / "show me options" → SELECTIVE EXPANSION, no question
After mode selection, confirm which implementation approach (from 0C-bis) applies under the chosen mode. EXPANSION may favor the ideal architecture; REDUCTION may favor the minimal viable.
Once selected, commit fully. Do not silently drift.
STOP. AskUserQuestion once per issue. Do NOT batch. Do NOT proceed until the user responds.
Spec Review Loop (for CEO plans from 0D-POST)
Before presenting the CEO plan document to the user for approval, run an adversarial review across five dimensions: completeness, consistency, clarity, scope, and feasibility.
By default, do this inline in the main loop: review each dimension yourself in turn against the document on disk, consolidate the issues, fix each one with the Edit tool, then re-run. Cap at 3 rounds; stop early when every dimension passes. Average the dimension scores for the quality number.
If the user opted into subagents, fan the five dimensions out as a Workflow — each round runs all five as parallel independent reviewers (each with fresh context, each seeing only the document on disk):
export const meta = {
name: 'scope-review-spec-review',
description: 'Parallel 5-dimension adversarial review of a CEO plan (one round)',
phases: [{ title: 'Review' }],
}
const DIM_SCHEMA = {
type: 'object',
properties: {
dimension: { type: 'string' },
pass: { type: 'boolean' },
score: { type: 'number' },
issues: {
type: 'array',
items: {
type: 'object',
properties: { issue: { type: 'string' }, fix: { type: 'string' } },
required: ['issue', 'fix'],
},
},
},
required: ['dimension', 'pass', 'score', 'issues'],
}
const DIMENSIONS = [
{ key: 'completeness', q: 'Are all requirements addressed? Missing edge cases?' },
{ key: 'consistency', q: 'Do parts agree with each other? Contradictions?' },
{ key: 'clarity', q: 'Could an engineer implement this without asking questions? Ambiguous language?' },
{ key: 'scope', q: 'Does the document creep beyond the original problem? YAGNI violations?' },
{ key: 'feasibility', q: 'Can this actually be built with the stated approach? Hidden complexity?' },
]
const reviews = await parallel(DIMENSIONS.map(d => () =>
agent(
`Read the CEO plan at ${args.docPath}. Review ONLY the "${d.key}" dimension: ${d.q} ` +
`Return pass=true with score 1-10, OR pass=false with a list of specific issues, each with a concrete suggested fix and a 1-10 score.`,
{ label: `review:${d.key}`, phase: 'Review', model: 'opus', schema: DIM_SCHEMA }
)
))
return reviews.filter(Boolean)Pass args: { docPath: "<full path to the CEO plan>" }.
Fix and re-run (always in the main loop). Consolidate the issues, fix each in the document with the Edit tool (fixes applied in the main loop, never by a background agent), then re-run the round against the updated doc. Maximum 3 rounds. Stop early when every dimension returns pass: true. Average the dimension scores for the quality number.
Convergence guard: If a round returns the same issues as the prior round, stop and persist those issues as "## Reviewer Concerns" in the document.
If a fanned-out workflow fails or times out, fall back to reviewing the dimensions inline. If even that isn't possible, skip the loop and tell the user: "Spec review unavailable, presenting unreviewed doc."
Report. Tell the user: "Your CEO plan survived N rounds of adversarial review across 5 dimensions. M issues caught and fixed. Quality score: X/10."
Review Sections (11 sections, after scope and mode are agreed)
Anti-skip rule: Never condense, abbreviate, or skip any review section (1-11) regardless of plan type. Every section exists for a reason. "This is a strategy doc so implementation sections don't apply" is always wrong — implementation details are where strategy breaks down. If a section genuinely has zero findings, say "No issues found" and move on, but you must evaluate it.
How to run the sections
The 11 sections are independent analytical passes over the agreed plan. By default, work through them sequentially in the main loop — analyze each section, then walk the user through its findings, STOP, one AskUserQuestion per issue, before moving to the next.
If the user opted into subagents and the plan is large, fan the analysis out as a Workflow (one agent per section) to pre-compute every section at once, then still walk the user through the findings section by section, in order, interactively — the fan-out only removes the waiting; it never changes the section-by-section UX, and the background agents never ask the user anything.
export const meta = {
name: 'scope-review-sections',
description: 'Parallel analysis of the 11 scope-review sections over an agreed plan',
phases: [{ title: 'Analyze' }],
}
const SECTION_SCHEMA = {
type: 'object',
properties: {
section: { type: 'string' },
issues: {
type: 'array',
items: {
type: 'object',
properties: {
label: { type: 'string' }, // CRITICAL GAP | WARNING | OK
finding: { type: 'string' },
fix: { type: 'string' },
},
required: ['label', 'finding'],
},
},
diagrams: { type: 'array', items: { type: 'string' } }, // ASCII diagrams as text
tables: { type: 'array', items: { type: 'string' } }, // registries/maps as text
},
required: ['section', 'issues'],
}
const analyses = await parallel(args.sections.map(s => () =>
agent(
`You are analyzing ONE section of a founder-mode plan review. Do NOT ask the user anything — ` +
`return findings only; the main loop walks through them interactively afterward.\n\n` +
`PLAN UNDER REVIEW:\n${args.plan}\n\n` +
`CONTEXT: mode=${args.mode}; accepted scope=${args.acceptedScope}; system-audit notes=${args.audit}; ` +
`taste references=${args.taste}.\n\n` +
`SECTION TO PRODUCE (${s.key}):\n${s.spec}\n\n` +
`Apply the mode-specific additions where the spec calls for them. Produce numbered issues ` +
`(each labeled CRITICAL GAP / WARNING / OK, with the finding and a concrete suggested fix), ` +
`plus every required ASCII diagram and table as text.`,
{ label: `section:${s.key}`, phase: 'Analyze', model: 'opus', schema: SECTION_SCHEMA }
)
))
return analyses.filter(Boolean)Pass args: { plan, mode, acceptedScope, audit, taste, sections: [{ key, spec }, ...] } where each spec is the corresponding section definition below (verbatim), and plan is the agreed plan plus any accepted scope expansions. Skip Section 11 (don't include it in args.sections) when there's no UI scope. When the workflow returns, walk the sections in numeric order: present each section's diagrams/tables, then STOP. AskUserQuestion once per issue. Assemble the Error & Rescue Registry (Section 2) and Failure Modes Registry from the returned findings in the main loop.
Whether you ran the sections inline or fanned them out, the section-by-section walkthrough below is identical.
Section 1: Architecture Review
Evaluate and diagram:
- Overall system design and component boundaries. Draw the dependency graph.
- Data flow, all four paths (happy, nil, empty, error). ASCII diagram each.
- State machines. ASCII diagram for every new stateful object. Include invalid transitions and what prevents them.
- Coupling concerns. Before/after dependency graph.
- Scaling characteristics. What breaks first at 10x load? 100x?
- Single points of failure.
- Security architecture. Auth boundaries, data access patterns, API surfaces. For each new endpoint/data mutation: who can call it, what do they get, what can they change?
- Production failure scenarios. For each new integration point, describe one realistic failure.
- Rollback posture. If this ships and breaks, what's the rollback procedure? Git revert? Feature flag? DB migration rollback? How long?
EXPANSION/SELECTIVE additions:
- What would make this architecture beautiful? Not just correct — elegant.
- What infrastructure would make this a platform other features can build on?
SELECTIVE EXPANSION: If accepted cherry-picks affect architecture, evaluate their fit here. Flag coupling concerns.
Required ASCII diagram: full system architecture. STOP. AskUserQuestion once per issue.
Section 2: Error & Rescue Map
This section catches silent failures. It is not optional.
For every new method, service, or codepath that can fail:
METHOD/CODEPATH | WHAT CAN GO WRONG | EXCEPTION CLASS
-------------------------|-----------------------------|-----------------
ExampleService#call | API timeout | TimeoutError
| API returns 429 | RateLimitError
| Malformed JSON | JSONParseError
| DB pool exhausted | ConnectionPoolExhausted
EXCEPTION CLASS | RESCUED? | RESCUE ACTION | USER SEES
-----------------------------|-----------|------------------------|------------------
TimeoutError | Y | Retry 2x, then raise | "Service unavailable"
JSONParseError | N ← GAP | — | 500 error ← BADRules:
- Catch-all error handling is ALWAYS a smell. Name the specific exceptions.
- A generic log message is insufficient. Log the full context: what was attempted, with what arguments, for what user/request.
- Every rescued error must: retry with backoff, degrade gracefully with a user-visible message, or re-raise with context. "Swallow and continue" is almost never acceptable.
- For each GAP (unrescued error): specify the rescue action and what the user should see.
- LLM/AI service calls specifically: What happens when the response is malformed? Empty? Hallucinates invalid JSON? Returns a refusal? Each is a distinct failure mode.
STOP. AskUserQuestion once per issue.
Section 3: Security & Threat Model
Security gets its own section, not a sub-bullet of architecture.
- Attack surface expansion. New vectors? New endpoints, params, file paths, background jobs?
- Input validation. For every new user input: nil, empty, wrong type, max length, unicode, HTML/script injection.
- Authorization. Scoped to the right user/role? Direct object reference vulnerabilities? Can user A access user B's data?
- Secrets and credentials. In env vars, not hardcoded? Rotatable?
- Dependency risk. New packages? Security track record?
- Data classification. PII, payment data, credentials?
- Injection vectors. SQL, command, template, LLM prompt injection — check all.
- Audit logging for sensitive operations.
For each finding: threat, likelihood (H/M/L), impact (H/M/L), mitigation status. STOP. AskUserQuestion once per issue.
Section 4: Data Flow & Interaction Edge Cases
Data Flow Tracing: For every new data flow, produce:
INPUT ──▶ VALIDATION ──▶ TRANSFORM ──▶ PERSIST ──▶ OUTPUT
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
[nil?] [invalid?] [exception?] [conflict?] [stale?]
[empty?] [too long?] [timeout?] [dup key?] [partial?]
[wrong [wrong type?] [OOM?] [locked?] [encoding?]
type?]For each node: what happens on each shadow path? Is it tested?
Interaction Edge Cases: For every new user-visible interaction:
INTERACTION | EDGE CASE | HANDLED? | HOW?
---------------------|------------------------|----------|--------
Form submission | Double-click submit | ? |
| Submit with stale state| ? |
| Submit during deploy | ? |
Async operation | User navigates away | ? |
| Operation times out | ? |
| Retry while in-flight | ? |
List/table view | Zero results | ? |
| 10,000 results | ? |
| Results change mid-page| ? |
Background job | Fails 3 of 10 items | ? |
| Job runs twice (dup) | ? |
| Queue backs up 2 hours | ? |Flag any unhandled edge case as a gap. For each gap, specify the fix. STOP. AskUserQuestion once per issue.
Section 5: Code Quality Review
- Code organization and module structure. Fits existing patterns?
- DRY violations. Be aggressive. Reference file and line.
- Naming quality. Named for what they do, not how?
- Error handling patterns. (Cross-reference Section 2.)
- Missing edge cases. List explicitly.
- Over-engineering check. Abstraction solving a problem that doesn't exist yet?
- Under-engineering check. Fragile, happy-path-only, missing defensive checks?
- Cyclomatic complexity. Flag any method >5 branches. Propose a refactor.
STOP. AskUserQuestion once per issue.
Section 6: Test Review
Diagram every new thing:
NEW UX FLOWS: [list each]
NEW DATA FLOWS: [list each]
NEW CODEPATHS: [list each]
NEW ASYNC WORK: [list each]
NEW INTEGRATIONS: [list each]
NEW ERROR PATHS: [list each, cross-ref Section 2]For each item:
- What type of test covers it? (Unit / Integration / System / E2E)
- Does a test exist in the plan? If not, write the test spec header.
- Happy path, failure path, edge case tests?
Test ambition check:
- What's the test that would make you confident shipping at 2am on a Friday?
- What's the test a hostile QA engineer would write to break this?
- What's the chaos test?
Test pyramid check: Many unit, fewer integration, few E2E? Or inverted? Flakiness risk: Flag any test depending on time, randomness, external services, or ordering.
For LLM/prompt changes: Check CLAUDE.md for "Prompt/LLM changes" patterns. State which eval suites must run, which cases to add, and which baselines to compare against.
STOP. AskUserQuestion once per issue.
Section 7: Performance Review
- N+1 queries. For every data fetch in a loop: should it be batched?
- Memory usage. Maximum size of new data structures in production?
- Database indexes. Index for every new query?
- Caching opportunities.
- Background job sizing. Worst-case payload, runtime, retry behavior?
- Slow paths. Top 3 slowest new codepaths and estimated p99 latency.
- Connection pool pressure.
STOP. AskUserQuestion once per issue.
Section 8: Observability & Debuggability Review
- Logging. Structured logs at entry, exit, and each significant branch?
- Metrics. What tells you it's working? What tells you it's broken?
- Tracing. Trace IDs propagated across services/jobs?
- Alerting. What new alerts should exist?
- Dashboards. What new panels on day 1?
- Debuggability. Can you reconstruct what happened from logs alone 3 weeks post-ship?
- Admin tooling. New ops tasks needing admin UI or CLI?
- Runbooks. For each new failure mode, what's the operational response?
EXPANSION/SELECTIVE addition:
- What observability would make this feature a joy to operate?
STOP. AskUserQuestion once per issue.
Section 9: Deployment & Rollout Review
- Migration safety. Backward-compatible? Zero-downtime? Table locks?
- Feature flags. Should any part be behind a flag?
- Rollout order. Migrate first, deploy second?
- Rollback plan. Explicit step-by-step.
- Deploy-time risk window. Old code + new code simultaneously — what breaks?
- Environment parity. Tested in staging?
- Post-deploy verification checklist. First 5 minutes? First hour?
- Smoke tests. What automated checks post-deploy?
STOP. AskUserQuestion once per issue.
Section 10: Long-Term Trajectory Review
- Technical debt introduced. Code, operational, testing, documentation debt.
- Path dependency. Makes future changes harder?
- Knowledge concentration. Documentation sufficient for a new engineer?
- Reversibility. Rate 1-5: 1 = one-way door, 5 = easily reversible.
- Ecosystem fit. Aligns with framework direction?
- The 1-year question. Read this plan as a new engineer in 12 months — obvious?
EXPANSION/SELECTIVE additions:
- What comes after this ships? Phase 2? Phase 3?
- Platform potential. Creates capabilities other features can leverage?
- (SELECTIVE only) Retrospective: Were the right cherry-picks accepted? Did any rejected expansion turn out to be load-bearing?
STOP. AskUserQuestion once per issue.
Section 11: Design & UX Review (skip if no UI scope)
Not a pixel-level audit (that's design-review). This ensures the plan has design intentionality.
- Information architecture — what does the user see first, second, third?
- Interaction state coverage map:
FEATURE | LOADING | EMPTY | ERROR | SUCCESS | PARTIAL - User journey coherence — storyboard the emotional arc.
- AI slop risk — does the plan describe generic UI patterns?
- DESIGN.md alignment — does the plan match the stated design system?
- Responsive intention — is mobile mentioned or an afterthought?
- Accessibility basics — keyboard nav, screen readers, contrast, touch targets.
EXPANSION/SELECTIVE additions:
- What would make this UI feel inevitable?
- What 30-minute UI touches would make users think "oh nice, they thought of that"?
Required ASCII diagram: user flow showing screens/states and transitions.
If this plan has significant UI scope, recommend running design-review for deep design review before implementation.
STOP. AskUserQuestion once per issue.
Outside Voice — Independent Plan Challenge (optional, recommended)
After all review sections complete, offer an independent second opinion. A panel of independent challengers agreeing on a plan is a stronger signal than one thorough review, and distinct lenses catch failure modes a single challenger would miss.
Use AskUserQuestion (main loop):
"All review sections complete. Want an outside voice? An independent panel can give a brutally honest challenge of this plan — logical gaps, feasibility risks, and blind spots hard to catch from inside the review. Takes about 2 minutes."
RECOMMENDATION: Choose A — an independent panel catches structural blind spots. Completeness: A=9/10, B=7/10.
Options:
- A) Get the outside voice (recommended)
- B) Skip, proceed to outputs
If A: by default, produce the challenger lenses inline in the main loop — work through each lens yourself in turn, deliberately adopting a fresh adversarial posture for each, and report all four.
If the user opted into subagents, dispatch the panel as a Workflow instead, so each challenger has genuinely fresh context and a distinct lens:
export const meta = {
name: 'scope-review-outside-voice',
description: 'Independent challenger panel — one lens per agent — over a reviewed plan',
phases: [{ title: 'Challenge' }],
}
const CHALLENGE_SCHEMA = {
type: 'object',
properties: {
lens: { type: 'string' },
problems: { type: 'array', items: { type: 'string' } },
},
required: ['lens', 'problems'],
}
const LENSES = [
{ key: 'logic-gaps', instruction: 'Find logical gaps and unstated assumptions that survived the review scrutiny.' },
{ key: 'overcomplexity', instruction: 'Is there a fundamentally simpler approach the review was too deep in the weeds to see? Name it.' },
{ key: 'feasibility', instruction: 'What feasibility risks did the review take for granted? Missing dependencies or sequencing issues?' },
{ key: 'strategic', instruction: 'Strategic miscalibration: is this the right thing to build at all? Challenge the premise.' },
]
const panel = await parallel(LENSES.map(l => () =>
agent(
`You are a brutally honest technical reviewer examining a development plan that has already been ` +
`through a multi-section review. Your job is NOT to repeat that review — find what it missed. ` +
`Your lens: ${l.instruction}\nBe direct. Be terse. No compliments. Just the problems.\n\n` +
`THE PLAN:\n${args.plan}`,
{ label: `challenge:${l.key}`, phase: 'Challenge', model: 'opus', schema: CHALLENGE_SCHEMA }
)
))
return panel.filter(Boolean)Pass args: { plan: "<plan content>" }. However the lenses were produced, present them verbatim in the main loop:
OUTSIDE VOICE (independent panel):
════════════════════════════════════════════════════════════
<each challenger's output, verbatim — do not truncate or summarize>
════════════════════════════════════════════════════════════Cross-model tension:
After presenting, note any points where the panel disagrees with earlier review findings:
CROSS-MODEL TENSION:
[Topic]: Review said X. Outside voice says Y. [Present both perspectives
neutrally. State what context you might be missing.]User Sovereignty: Do NOT auto-incorporate outside-voice recommendations. Present each tension point to the user. The user decides. Cross-model agreement is a strong signal, but NOT permission to act.
For each substantive tension point, use AskUserQuestion (main loop):
"Cross-model disagreement on [topic]. The review found [X] but the outside voice argues [Y]. [One sentence on what context you might be missing.]"
RECOMMENDATION: Choose [A or B] because [reason].
Options:
- A) Accept the outside voice's recommendation
- B) Keep the current approach
- C) Investigate further before deciding
- D) Add to TODOS.md for later
If no tension points exist, note: "No cross-model tension — both reviewers agree."
Outside Voice Integration Rule
Outside-voice findings are INFORMATIONAL until the user explicitly approves each one. Do NOT incorporate outside-voice recommendations without presenting each finding via AskUserQuestion and getting explicit approval. Cross-model consensus is a strong signal, but the user makes the decision.
Required Outputs
"NOT in scope" section
List work considered and explicitly deferred, with one-line rationale each.
"What already exists" section
List existing code/flows that partially solve sub-problems and whether the plan reuses them.
"Dream state delta" section
Where this plan leaves us relative to the 12-month ideal.
Error & Rescue Registry (from Section 2)
Complete table of every method that can fail, every exception class, rescued status, rescue action, user impact.
Failure Modes Registry
CODEPATH | FAILURE MODE | RESCUED? | TEST? | USER SEES? | LOGGED?
---------|----------------|----------|-------|----------------|--------Any row with RESCUED=N, TEST=N, USER SEES=Silent → CRITICAL GAP.
TODOS.md updates
Present each potential TODO as its own AskUserQuestion. Never batch.
For each TODO:
- What: One-line description.
- Why: Concrete problem it solves or value it unlocks.
- Pros: What you gain.
- Cons: Cost, complexity, risks.
- Context: Enough detail for someone picking this up in 3 months.
- Effort estimate: S/M/L/XL (human team) → with CC: S→S, M→S, L→M, XL→L
- Priority: P1/P2/P3
- Depends on / blocked by: Prerequisites or ordering.
Options: A) Add to TODOS.md B) Skip, not valuable enough C) Build it now in this PR instead.
Scope Expansion Decisions (EXPANSION/SELECTIVE only)
- Accepted: {list items added to scope}
- Deferred: {list items sent to TODOS.md}
- Skipped: {list items rejected}
Diagrams (mandatory, produce all that apply)
- System architecture
- Data flow (including shadow paths)
- State machine
- Error flow
- Deployment sequence
- Rollback flowchart
Stale Diagram Audit
List every ASCII diagram in files this plan touches. Still accurate?
Completion Summary
+====================================================================+
| FOUNDER PLAN REVIEW — COMPLETION SUMMARY |
+====================================================================+
| Mode selected | EXPANSION / SELECTIVE / HOLD / REDUCTION |
| System Audit | [key findings] |
| Step 0 | [mode + key decisions] |
| Section 1 (Arch) | ___ issues found |
| Section 2 (Errors) | ___ error paths mapped, ___ GAPS |
| Section 3 (Security)| ___ issues found, ___ High severity |
| Section 4 (Data/UX) | ___ edge cases mapped, ___ unhandled |
| Section 5 (Quality) | ___ issues found |
| Section 6 (Tests) | Diagram produced, ___ gaps |
| Section 7 (Perf) | ___ issues found |
| Section 8 (Observ) | ___ gaps found |
| Section 9 (Deploy) | ___ risks flagged |
| Section 10 (Future) | Reversibility: _/5, debt items: ___ |
| Section 11 (Design) | ___ issues / SKIPPED (no UI scope) |
+--------------------------------------------------------------------+
| NOT in scope | written (___ items) |
| What already exists | written |
| Dream state delta | written |
| Error/rescue registry| ___ methods, ___ CRITICAL GAPS |
| Failure modes | ___ total, ___ CRITICAL GAPS |
| TODOS.md updates | ___ items proposed |
| Scope proposals | ___ proposed, ___ accepted (EXP + SEL) |
| CEO plan | written / skipped (HOLD/REDUCTION) |
| Outside voice | ran / skipped |
| Diagrams produced | ___ (list types) |
| Stale diagrams found | ___ |
| Unresolved decisions | ___ (listed below) |
+====================================================================+Unresolved Decisions
If any AskUserQuestion goes unanswered, note it here. Never silently default.
Output File
By default, write the review to SCOPE_REVIEW_<ref>.md in the project root (e.g., SCOPE_REVIEW_PR200.md) — unless the user asked for the review inline or at a different path (confirm if it was ambiguous up front).
- Do NOT write to or append to
REVIEWED.md— that file is reserved for code-level reviews only. - Use the PR number, commit ref, or feature name as
<ref>(from$ARGUMENTSif provided, otherwise the branch/feature name).
docs/designs Promotion (EXPANSION and SELECTIVE EXPANSION only)
At the end of the review, if the vision produced a compelling feature direction, offer to promote the CEO plan to the project repo. AskUserQuestion:
"The vision from this review produced {N} accepted scope expansions. Want to promote it to a design doc in the repo?"
Options:
- A) Promote to
docs/designs/{FEATURE}.md(committed to repo, visible to the team) - B) Keep in
~/.claude/ceo-plans/only (local, personal reference) - C) Skip
If promoted, copy the CEO plan content to docs/designs/{FEATURE}.md (create the directory if needed) and update the status field in the original CEO plan from ACTIVE to PROMOTED.
Next Steps — Review Chaining
After completing the review, recommend the next review(s):
- plan-review — required gate for shipping (architecture, tests, performance). If this review expanded scope or changed architectural direction, emphasize that a fresh plan review is needed.
- design-review — if UI scope detected (Section 11 was not skipped).
- If both needed, plan-review first (required gate), then design-review.
Use AskUserQuestion:
- A) Run plan-review next
- B) Run design-review next (only if UI scope detected)
- C) Skip, I'll handle reviews manually
Formatting Rules
- NUMBER issues (1, 2, 3...) and LETTER options (A, B, C...).
- Label with NUMBER + LETTER (e.g., "3A", "3B").
- One sentence max per option.
- After each section, pause and wait for feedback.
- Use CRITICAL GAP / WARNING / OK for scannability.
Mode Quick Reference
┌────────────────────────────────────────────────────────────────────────────────┐
│ MODE COMPARISON │
├─────────────┬──────────────┬──────────────┬──────────────┬────────────────────┤
│ │ EXPANSION │ SELECTIVE │ HOLD SCOPE │ REDUCTION │
├─────────────┼──────────────┼──────────────┼──────────────┼────────────────────┤
│ Scope │ Push UP │ Hold + offer │ Maintain │ Push DOWN │
│ │ (opt-in) │ │ │ │
│ Recommend │ Enthusiastic │ Neutral │ N/A │ N/A │
│ posture │ │ │ │ │
│ 10x check │ Mandatory │ Cherry-pick │ Optional │ Skip │
│ Platonic │ Yes │ No │ No │ No │
│ ideal │ │ │ │ │
│ Delight │ Opt-in │ Cherry-pick │ Note if seen │ Skip │
│ opps │ ceremony │ ceremony │ │ │
│ Complexity │ "Is it big │ "Is it right │ "Is it too │ "Is it the bare │
│ question │ enough?" │ + what else"│ complex?" │ minimum?" │
│ Taste │ Yes │ Yes │ No │ No │
│ calibration │ │ │ │ │
│ Temporal │ Full (hr 1-6)│ Full (hr 1-6)│ Key decisions│ Skip │
│ interrogate │ │ │ only │ │
│ Observ. │ "Joy to │ "Joy to │ "Can we │ "Can we see if │
│ standard │ operate" │ operate" │ debug it?" │ it's broken?" │
│ Deploy │ Infra as │ Safe deploy │ Safe deploy │ Simplest possible │
│ standard │ feature scope│ + risk check │ + rollback │ deploy │
│ Error map │ Full + chaos │ Full + chaos │ Full │ Critical paths │
│ │ scenarios │ for accepted │ │ only │
│ CEO plan │ Written │ Written │ Skipped │ Skipped │
│ Design │ "Inevitable" │ If UI scope │ If UI scope │ Skip │
│ (Sec 11) │ UI review │ detected │ detected │ │
└─────────────┴──────────────┴──────────────┴──────────────┴────────────────────┘Important Rules
- Never make code changes or start implementation. Review and review-artifact files only (
SCOPE_REVIEW_<ref>.md, CEO plan, optionaldocs/designs/promotion). - The user is 100% in control. Every scope change is an explicit AskUserQuestion opt-in. Never silently add or remove scope.
- One issue = one AskUserQuestion. Never batch.
- Default to inline; parallelize only on explicit opt-in. When you do fan out, keep the interactive spine in the main loop — never put an opt-in, a scope ceremony, a per-issue STOP, a cross-model tension question, or any file write inside a Workflow
agent(), because background agents cannot talk to the user. - Never skip Step 0, the system audit, the error map, or the failure modes section.
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.

