Use when asked to review, audit or quality-check a plan in .context/plans/. Runs 3 independent subagent reviewers (Technical, Strategic, Risk) on the same plan brief and consolidates their findings. Reads reviewer models from .claude/plan-review.json when present, otherwise asks the user first. Not for plans outside .context/plans/, one-off notes, or external documents.
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Review .context/plans/ files through 3 independent lenses: Technical,
Strategic, and Risk. Each reviewer is a separate subagent with a unique
prompt and perspective. The main agent collates results into a consolidated report.
.context/plans/*.md file exists to review (or a glob selecting multiple)title, type, status, date, tags)general-purpose and Explore subagents (the Agent tool).context/plans/*.md file needs an independent multi-perspective review before implementationREADYsession-reflection instead.context/plans/ -- the prompts assume .context/ frontmatter conventionsThe user specifies a plan path, or you suggest one from .context/plans/.
Read the plan in full. Note its frontmatter (status, date, related),
goal, steps, open questions, and risks.
From the plan file, create a structured brief that all 3 reviewers will receive. The brief must be self-contained -- each reviewer should not need to read the original plan file. Include:
related: frontmatterEvery .context/ plan should follow a three-part standard: a YAML template
defining required fields, a JSON schema for machine validation, and a validation
script. Check the plan against all three.
| Component | Location | What it defines |
|---|---|---|
| YAML template | create-context-file SKILL.md (frontmatter section) | Required fields: title, type, status, date, tags |
| JSON schema | create-context-file/assets/schemas/context-frontmatter.schema.json | Field types, allowed values (enum), patterns, required list |
| Validation script | context-index/scripts/validate-context-frontmatter.sh | CLI script that checks one or more files (its enums mirror the schema) |
Run the validation script on the plan file, with sh. Find it in the context-index skill with
find -L <skills dir> -name validate-context-frontmatter.sh (-L: installed skills are symlinks):
sh <path>/validate-context-frontmatter.sh .context/plans/<plan-file>.mdThis checks:
---title, type, status, date, tags)type is one of the lowercase values finding, plan, guide, follow-up,
merge-request, ticket, decision, note, researchstatus is draft, active or donedate matches YYYY-MM-DD patterntags key exists (tags: [] when empty). The schema forbids other fields, but the
script does not check that, so note any extra field as a Structural Issue yourselfInclude **Structure: Valid** in the plan brief. Proceed to step 4 (model config).
Capture each validation error and include it in the plan brief under a
## Structural Issues section so all 3 reviewers can reference them. Sample:
## Structural Issues
- Missing required field: 'status'
- 'date' does not match pattern YYYY-MM-DD, got '01-07-2026'Beyond frontmatter, check the plan's body sections (## headings) against what
other plans in this repo actually use. Do NOT hardcode a template -- scan the
existing plans and infer what's conventional. See
Structural Inference Reference for the
frequency-table method, the core/common/rare classification, and why this is
inferred rather than hardcoded.
Include in the plan brief under ## Structural Issues:
### Body Structure (inferred from <N> existing plans)
Core sections (≥40% of plans):
- Goal: present/missing
- Steps/Phases: present/missing
- Open Questions/Decisions: present/missing
Common sections (20-39%):
- Scope/Out of scope: present/missing
- Related findings: present/missing
- Verification: present/missing
- Risks/sequencing: present/missing
Note: Sections like Background, File-by-file change list, Academic References,
and Critical Review appear in <20% of plans and are optional.Missing core sections are advisory warnings; missing common sections are neutral observations; rare/unique sections may indicate scope creep -- note them as "unusual sections" but do not flag them as problems. See the reference above for the full rationale.
A well-structured plan divides the work into Phases (sequential stages), Tasks (independently assignable units within a phase), and Waves (groups of tasks within a phase that can run in parallel). Check for missing phase dependencies/exit criteria, oversized or flat (ungrouped) phases, vague task descriptions, and unidentified parallelisation opportunities -- see Structural Inference Reference for the full bad-pattern list and check criteria.
Include in the plan brief under ## Structural Issues:
### Implementation Architecture
Phases: <N> phases identified -- <list phase names>
- Phase dependencies: explicit/implicit/missing
- Phase exit criteria: present for <N>/<N> phases
Task granularity: good / too vague / too large
- <count> of <total> tasks have actionable descriptions
Parallelisation:
- Waves identified: yes/no
- Tasks flagged as parallel: <N> of <N>
- Parallelism opportunity: <N> tasks could run concurrently but aren't groupedBefore asking the user anything, look for a saved choice: .claude/plan-review.json in the
git root (the working directory outside a git repo), then ~/.claude/plan-review.json (keys
technicalStrategic and risk, see the Model Routing Reference).
Check a file with bash <this skill's directory>/scripts/validate-plan-review-config.sh <path>,
from any working directory: exit 0 is valid, any other exit is invalid. A valid choice names the
models: pass them as each reviewer's model, skip steps 5 and 6, and state the models in the
final report. Both keys may name the same model, noting limited diversity. The first file found
decides: if it is invalid, say what the validator printed (and that a valid file further down
was skipped), go to step 5, never fall through to the next file and never guess. If nothing is
configured, go to step 5 and advise the user.
Reached only when step 4 found no valid saved choice. Do NOT proceed without asking.
Present the pricing/pairing table via the question box -- see the
Model Routing Reference for the tables, the question
structure and the default "not sure" pairing. The goal is always to assign one model to
Technical + Strategic (general-purpose subagent type) and a different model to Risk
(Explore subagent type) -- different models mean different blind spots. If the user
picks "Custom", ask them for each reviewer individually and suggest sensible defaults.
Offer to save the chosen models to .claude/plan-review.json (template:
assets/templates/plan-review.json) so the question is not asked again. If step 4 found an
invalid file, offer to replace it, naming the file, and never overwrite it unasked. If they decline or
cannot choose, run all 3 but note in the output that model diversity was limited -- the
reviewer prompts alone provide the perspective separation.
Spawn all 3 subagents at once with the Agent tool. Each receives the same plan brief
prefixed with their role-specific instructions. Set each call's model from step 4 or 5
(technicalStrategic for Technical and Strategic, risk for Risk); omit it only when the
user declined to choose.
| Reviewer | subagent_type | model | Lens |
|---|---|---|---|
| Technical | general-purpose | technicalStrategic | Feasibility, implementation gaps, technical soundness |
| Strategic | general-purpose | technicalStrategic | Goal alignment, scope correctness, priority, sequencing |
| Risk | Explore | risk | Blind spots, edge cases, failure modes, dependencies |
The three prompt templates (Technical, Strategic, Risk), each a ready Agent call with a
<PASTE PLAN BRIEF HERE> slot, are in Reviewer Prompts.
Fill the same brief into all three.
Each subagent returns a structured review. Collect all 3 and compile a
Consolidated Review Report following the structure defined in
assets/templates/review-report.yaml.
The template is validated against assets/schemas/review-report.schema.json
-- run scripts/validate-review-report.sh on the generated report to confirm
schema compliance.
Required sections: Model Configuration, Structural Validation, Implementation Architecture, Scores, Critical Issues, Moderate Concerns, Strengths, Next Actions.
Then save the report under .context/reviews/ and link it from the plan's reviewed-by.
Take the plan's SHA-256 in step 2. See Saving the Report.
Present the consolidated report with a preamble that includes the models used:
"I ran this plan through 3 independent reviewers using
model A(Technical/Strategic) andmodel B(Risk). Here's the consolidated report:"
If the user wants to dig deeper on any finding, offer to spawn a follow-up investigation subagent with the relevant context.
Step 9's presentation is a progress update, not sign-off. Before the review counts as
finished, sort every item in critical_issues and moderate_concerns into one of two
buckets:
For decision-classified items, NEVER leave them sitting in ## Open Questions for the
user to notice later -- run a short interview immediately: one question at a time, each
with concrete mutually-exclusive options plus room for free text, matching
guided-interview's pattern. End with a one-message recap of every answer and get
explicit confirmation before writing anything into the plan.
Fold both outcomes back into the plan file, not just into chat:
## Decisions section, each with the chosen option and why the
alternative didn't win. If a decision carries a review-later condition (e.g. "flip to
hard-fail after N clean runs"), state it as a concrete, checkable revisit trigger --
never "revisit later" -- the same rule design-debate enforces on its own verdicts.## Decisions heading is an ADR trigger. Check whether an existing ADR already covers
the plan's topic; if not, run the adr-creator skill before treating the amendment as
done.If the review surfaced something beyond this one plan -- a pattern likely to recur in
future reviews, a gap in a related skill -- capture it as a finding via the create-context-file skill,
separate from the decisions already folded into the plan in Step 10.
NEVER -- Skip the plan brief and just pass the file path
WHY: Subagents cannot read files unless they have the general-purpose type with file access. The plan brief ensures every reviewer works from the same complete information regardless of subagent capability -- skipping it produces shallow, inconsistent, self-contradicting reviews.
BAD: Sending "review .context/plans/foo.md" as the prompt. GOOD: Extracting the plan content into a self-contained brief first.
NEVER -- Spawn reviewers sequentially
WHY: They are fully independent -- sequential spawning wastes 3x the time and lets context build up between calls. Always use parallel tool calls.
BAD: Spawn Technical, wait for result, spawn Strategic, wait, spawn Risk.
GOOD: Spawn all 3 in one message with 3 parallel Agent tool calls.
NEVER -- Proceed without asking about models first, unless a valid .claude/plan-review.json or ~/.claude/plan-review.json already names them
WHY: Model diversity is the main lever for catching different blind spots. Asking first gives the user control over cost vs. depth; skipping it silently defaults to one model for all reviewers, and the user loses trust when they discover routing was available but unused. A saved config is the user having answered already, so asking again is the opposite failure.
BAD: "Reviewing the plan now with 3 reviewers..." GOOD: (no saved config) "Before I start, which models should I use for the reviewers?"
NEVER -- Present raw subagent output without attribution
WHY: The user needs to know which perspective each finding comes from -- raw, unlabelled output mixes actionable findings with noise and loses the multi-reviewer value entirely.
BAD: Paste three blocks of text with no headers. GOOD: Organise by reviewer with clear headings and attribution.
NEVER -- Modify the plan brief differently per reviewer
WHY: The whole point is that different reviewers reach different conclusions from the same information. A different brief per reviewer turns real disagreement into an artefact of different input, hiding true consensus and wasting time on false conflicts.
BAD: Giving the Strategic reviewer extra context about project history. GOOD: Identical brief to all 3; the differences in output come from their lenses.
NEVER -- Use the same subagent type for all 3 reviewers
WHY: Model diversity is the main lever for catching different blind spots. Using the same subagent type for all 3 loses the independent-perspective benefit -- they converge on similar blind spots, so the review costs 3x but delivers the value of one pass.
BAD: All 3 use general-purpose.
GOOD: Mix general-purpose and Explore.
NEVER -- Leave a decision-type finding sitting in Open Questions after the review
WHY: A report is a snapshot, not a commitment. Presenting findings (Step 9) and resolving them (Step 10) are different steps -- skipping from one to "the review is done" ships the plan with a real tradeoff unresolved, against whichever reading happened to be top of mind rather than a decision anyone actually made.
BAD: Present the consolidated report, thank the user, stop. GOOD: Present the report, then interview the user on every decision-type finding before treating the plan as amended (Step 10).
After presenting the consolidated review report, run these checks before signing off:
Schema compliance -- run the validation script to verify the report output:
scripts/validate-review-report.sh <path-to-report>This checks the report conforms to the required structure and all sections are present. Re-run if validation fails.
Model attribution check -- confirm the report states which models were used for Technical/Strategic and for Risk, and whether routing was pre-configured or user-selected.
Structural validation captured -- confirm the plan's frontmatter validation results and body structure inference are included in the report. The structural validation must pass before the review is considered complete.
Actionability review -- verify the report ends with specific Recommended Next Actions that reference specific reviewer findings. Each action must be concrete and directly address a finding.
Investigation offered -- ask the user if they want to dig deeper on any finding. If they accept, run the investigation before concluding.
Every critical/moderate finding is classified and resolved -- confirm each item
from critical_issues and moderate_concerns is either applied as an editorial fix
in the plan file, or answered through the Step 10 interview and recorded in a
## Decisions section. Run grep -c '^- ' <finding-list> against the plan's diff if
unsure whether anything was dropped.
If any of these checks fail, correct the issue before presenting the report as final.
| Situation | Response |
|---|---|
| Report validation fails | Check the report against assets/schemas/review-report.schema.json for missing or malformed sections; otherwise regenerate |
| A reviewer does not return results | Re-spawn that reviewer individually with the same brief; if a reviewer fails twice, fall back to the other two |
| User has no preference on models | Recommend the Claude Code default pair from the Model Routing Reference; stop if they confirm |
| Plan is trivially small | Skip if fewer than 2 H2 sections -- do a single pass instead |
| Review reveals a critical issue | Stop if critical and present immediately; ask if the user wants to fix before continuing |
If a subagent reviewer returns an error or times out, do not block the entire review. Spawn a replacement using the same subagent type and brief. If the replacement also fails, omit that perspective and proceed with the remaining reviews. Note the failure in the final report so the user knows a perspective is missing.
This skill follows the repository convention of YAML template + JSON Schema + validation script for all structured artifacts. See the project rules for the convention.
| Artifact | Template | Schema | Validation Script |
|---|---|---|---|
| Consolidated Review Report | assets/templates/review-report.yaml | assets/schemas/review-report.schema.json | scripts/validate-review-report.sh |
| Model Selection Question | assets/templates/model-selection.yaml | assets/schemas/model-selection.schema.json | scripts/validate-model-selection.sh |
Saved reviewer models (.claude/plan-review.json) | assets/templates/plan-review.json | assets/schemas/plan-review-config.schema.json | scripts/validate-plan-review-config.sh |
| Topic | Reference | When to Use |
|---|---|---|
| Saved model config and pairings for model diversity | Model Routing Reference | Step 4/5, configuring or advising on per-reviewer model routing |
| Saving the report and linking it from the plan | Saving the Report | Step 8, after compiling the report |
| The three reviewer prompt templates | Reviewer Prompts | Step 7, building each reviewer's Agent call |
Persisting review findings, and writing a plan's ## Decisions section | create-context-file skill | Step 10/11, folding decisions or standalone findings back into durable files |
| The one-question-at-a-time interview pattern | guided-interview skill | Step 10, resolving a Decision-classified finding with the user |
| Naming a concrete, checkable revisit trigger for a time-boxed decision | design-debate skill | Step 10, whenever a decision carries a "review later" condition |
| Single-agent session-end reflection | session-reflection skill | Complementary use, not a substitute for a 3-reviewer plan audit |
Capturing a ## Decisions section as an ADR | adr-creator skill | Step 10, immediately after any plan gains a ## Decisions heading |
pantheon-org/tekhne
c8416e9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.