review-plan

$npx mdskill add tobihagemann/turbo/review-plan

Reviews planning artifacts by running internal and peer reviews in parallel.

  • Solves the need for structured feedback on plans, shells, or specs.
  • Depends on internal review logic and the /peer-review tool.
  • Determines artifact type from user input, context, or file detection.
  • Returns combined structured findings from both reviews.

SKILL.md

.github/skills/review-planView on GitHub ↗
---
name: review-plan
description: "Review a planning artifact (plan, shells, or spec) by running internal and peer reviews in parallel and returning combined findings. Use when the user asks to \"review my plan\", \"review my shells\", \"review my spec\", \"check my plan\", \"check my shells\", \"check my spec\", \"critique my plan\", \"critique my shells\", \"critique my spec\", or wants feedback on a planning artifact."
---

# Review Plan

Review a planning artifact against type-specific criteria. Runs internal review and `/peer-review` in parallel by default. Returns combined structured findings.

## Step 1: Determine Artifact Type and Resolve

### Determine Artifact Type

1. **Explicit argument** — If the user specified a type (e.g., "review shells", "review spec"), use it. No argument defaults to **plan**.
2. **Conversation context** — If artifact text or a path is already in context, infer the type.
3. **Auto-detect** — Check `.turbo/` for existing artifacts. If multiple types exist, pick the one with the most recently modified file.

### Resolve the Artifact

#### Plan (default)

1. **Plan text in conversation** — use it
2. **Explicit path** — read it
3. **Explicit slug** — resolve to `.turbo/plans/<slug>.md`
4. **Single file** — Glob `.turbo/plans/*.md`. If exactly one file exists, use it
5. **Most recent** — most recently modified file
6. **Legacy fallback** — `.turbo/plan.md` if `.turbo/plans/` does not exist
7. **Nothing found** — stop and state that no artifact was found to review

#### Shells

1. **Shell text in conversation** — use it
2. **Explicit spec slug** — Glob `.turbo/shells/<slug>-*.md`
3. **Explicit spec path** — derive slug from filename, glob as above
4. **Single spec** — Glob `.turbo/specs/*.md`. If exactly one, derive slug and glob for shells
5. **Most recent spec** — most recently modified spec, derive slug and glob
6. **Nothing found** — stop and state that no artifact was found to review

For shells, read each shell file and parse its YAML frontmatter (`spec`, `depends_on`). Read the source spec from the `spec` field.

#### Spec

1. **Spec text in conversation** — use it
2. **Explicit path** — read it
3. **Explicit slug** — resolve to `.turbo/specs/<slug>.md`
4. **Single file** — Glob `.turbo/specs/*.md`. If exactly one, use it
5. **Most recent** — most recently modified
6. **Legacy fallback** — `.turbo/spec.md` if `.turbo/specs/` does not exist
7. **Nothing found** — stop and state that no artifact was found to review

If multiple candidates exist, pick the most recently modified.

## Step 2: Run Reviews in Parallel

Read the reference file for the resolved type:

- **Plan** — [references/plan-review.md](references/plan-review.md)
- **Shells** — [references/shells-review.md](references/shells-review.md)
- **Spec** — [references/spec-review.md](references/spec-review.md)

Skip peer review when the caller asked (e.g., "without peer review", "no peer", "internal only"). For shells, the internal review focuses on structural wiring and skips the project context read.

Use the Agent tool to launch all agents below in a single assistant message so they run concurrently. Run them in the foreground so all their results return in this turn. Each Agent call uses `model: "opus"`. That is two Agent tool calls when peer review is active (one internal + one peer), or one Agent tool call when peer review is skipped. Every agent's prompt must direct it to treat the shared working tree and its git index as read-only and to assess findings by reading and reasoning. For a check that genuinely requires mutating code (such as testing whether a finding holds), the agent works in an isolated `git worktree` it discards afterward.

- **Internal Agent:** Pass the artifact text and the reference file's content; the subagent reads project context (CLAUDE.md, relevant codebase files) before applying criteria, then returns findings in the output format below.
- **Peer review Agent (unless skipping):** Launch an Agent tool call whose prompt instructs the subagent to invoke `/peer-review` via the Skill tool with a request describing: (a) the artifact under review; (b) the criteria live in `~/.claude/skills/review-plan/references/<type>-review.md` for the resolved type from Step 1 — the reviewer should read that file directly and use its priority scale; (c) the Overall Verdict should use the `Readiness: <ready | needs revision>` label. The prompt must also state explicitly that the subagent's final assistant message must contain the verbatim findings text `/peer-review` produced.

Aggregate findings with attribution (reviewer: "internal" or "peer"). Present them in the output format below.

Then use the TaskList tool and proceed to any remaining task.

## Output Format

Format each finding as:

```
### [P<N>] <title (imperative, ≤80 chars)>

**Section:** <plan section, shell number(s), or spec section>
**Reviewer:** <internal | peer>

<one paragraph explaining the issue and its impact>
```

After all findings, add:

```
## Overall Verdict

**Readiness:** <ready | needs revision>

<1-3 sentence assessment>
```

If there are no qualifying findings, state so and explain briefly.

## Rules

- Present findings grouped by priority.

More from tobihagemann/turbo

SkillDescription
answer-reviewer-questionsFor each reviewer question on a PR, recall implementation reasoning and compose a raw answer. Use when the user asks to \"answer reviewer questions\", \"draft answers to PR questions\", or \"explain reviewer questions\".
apply-findingsApply findings by making the suggested code changes. Applies accepted verdicts, escalates ambiguous findings to the user, and offers to note genuine improvements for later. Use when the user asks to \"apply findings\", \"apply fixes\", \"apply suggestions\", \"apply accepted findings\", \"fix the findings\", or \"apply the review results\".
assess-technical-debtAssess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, and architecture rot. Ranks findings by impact and refactor effort into a report at .turbo/technical-debt.md. Use when the user asks to \"assess technical debt\", \"find technical debt\", \"review technical debt\", \"what should we refactor\", \"find refactoring candidates\", \"where is the code rot\", or \"what's our worst code\". Analysis-only — does not modify code.
changelog-rulesShared changelog conventions and formatting rules referenced by /create-changelog and /update-changelog. Not typically invoked directly.
claude-printRun a non-interactive Claude Code print-mode call from Codex. Use when the user asks to \"claude print\", \"ask claude\", \"run claude\", \"consult claude\", or when a Codex Turbo skill needs Claude as an independent peer reviewer.
code-styleEnforce mirror, reuse, and symmetry principles to keep new code consistent with surrounding code. Use when writing new code in an existing codebase, adding new features, refactoring, or making any code changes.
codex-execRun autonomous task execution using the codex CLI. Use when the user asks to \"codex exec\", \"run codex exec\", \"execute a task with codex\", or \"delegate to codex\".
commit-rulesShared commit message rules and technical constraints referenced by /stage-commit and /commit-staged. Not typically invoked directly.
commit-staged-pushCommit already-staged changes and push in one step. Use when the user asks to \"commit and push staged changes\", \"commit and push what's staged\", or \"commit staged and push\".
consult-claudeConsult Claude Code for second opinions, brainstorming, or difficult debugging from Codex. Use when the user asks to \"consult claude\", \"ask claude\", \"get claude's opinion\", \"brainstorm with claude\", or \"discuss with claude\".