Review plan
Use to send a plan document to Codex for review via MCP. Defaults to the most recently modified PLAN.md under .planning/, or accept an explicit path argument. Codex's review is written to .volley/PLAN-REVIEW.md and surfaced inline. Fast - completes in seconds.From its SKILL.md
npx -y skills add Ryan-M-Frank/volley --skill review-planAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.7 KB, as published. Nobody here has run it
/volley:review-plan
Hand a plan to Codex. Get back a review. Write it to disk, show it inline.
Steps for Claude
-
Verify .volley/ is initialized and the lock allows Claude to act.
[ -d .volley ] || { echo "ERROR: .volley/ not found. Run /volley:setup first." >&2; exit 1; } [ -f .volley/STATE ] || { echo "ERROR: .volley/STATE not found. Run /volley:setup first." >&2; exit 1; } . "${CLAUDE_PLUGIN_ROOT}/scripts/lib.sh" volley_state_assert_active .volley/STATE claude || exit 1If the assert fails, the helper already printed a refusal message. Stop.
-
Resolve the plan path.
- If user passed a path argument, use it.
- Otherwise:
ls -t .planning/**/PLAN.md 2>/dev/null | head -1(or use Glob tool with pattern.planning/**/PLAN.mdand take the most recent by mtime). - If no plan found, tell user "No PLAN.md found under .planning/. Pass an explicit path, or check that you've run /gsd:plan-phase to create one." and stop.
-
Read the plan and HANDOFF.
- Read the plan file's full content.
- Read
.volley/HANDOFF.mdfor acceptance criteria.
-
Build the review prompt for Codex.
The prompt to send via
mcp__codex__codex(the only Codex session-start tool the MCP server exposes; older docs may saymcp__codex__reviewormcp__codex__exec- those names are wrong):You are reviewing an implementation plan. Be specific and concrete. ACCEPTANCE CRITERIA (from HANDOFF.md): <paste HANDOFF.md content> PLAN TO REVIEW: <paste plan content> Provide your review in this format: ## Verdict APPROVE | CONCERNS | REJECT ## Strengths - (specific things the plan gets right) ## Concerns - (specific issues, with file/line refs from the plan if applicable) ## Suggested changes - (concrete edits, not vague advice) Keep it under 500 words. Skip filler. -
Resolve the review role's model/effort/context from config. Read
.volley/config.json(parse it yourself; absent = defaults). Takecodex.review.model,codex.review.reasoningEffort, and apply any.volley/local.jsonmodelOverrides.review. Checkcontext.requiredfiles all exist - if any is missing, stop with a clear error naming the file (fail early). Note whichcontext.optionalfiles exist; missing optional files are reported and skipped. -
Invoke Codex via MCP. Call
mcp__codex__codexwith the review prompt and:sandbox: "read-only"(reviews are non-mutating) andapproval-policy: "never"(no interactive prompts) - preserve these exactly.cwd: <canonical git root>(fromgit rev-parse --show-toplevel) so Codex reads this project, not the MCP server's incidental cwd.model: "<resolved>"only if notinherit; andconfig: { "model_reasoning_effort": "<effort>" }if an effort is set.- Continuity: capture the returned
threadIdand save it to.volley/local.jsonunderroles.planReview(withupdatedAtUtc). Within this exchange, follow-ups usemcp__codex__codex-replywith thatthreadId(verified to retain context). Across a Claude restart do not try to reuse it over MCP - the session-start tool has no resume input; instead start a fresh session, rehydrate from the context files +.volley/CHECKPOINT.md, and tell the user continuity fell back to file-based context (with the reason). - If an error indicates the MCP server isn't reachable, tell the user to restart Claude Code and re-run
/volley:setup. If Codex reports an unavailable model or bad reasoning level, surface it verbatim and stop - never silently substitute.
-
Write the review to
.volley/PLAN-REVIEW.md. Prepend a small header with the plan path and timestamp, then Codex's response:# Codex Plan Review **Plan:** <plan path> **Reviewed:** <ISO timestamp> --- <Codex's response verbatim> -
Surface the review inline. Print the file content (or a clean summary if it's long) so the user reads it without opening another editor.
-
Print the next-step block. Decide based on Codex's verdict:
- If
APPROVE:volley_next_step "/volley:implement" "Plan approved by Codex. Open Codex in a new terminal tab to build." - If
CONCERNS:volley_next_step_options "Option A|/volley:implement|Accept review and proceed anyway" "Option B|edit PLAN.md|Address concerns then re-run /volley:review-plan" - If
REJECT:volley_next_step "edit PLAN.md" "Address Codex's concerns and re-run /volley:review-plan."
- If