# CREATE-PLAN ## Purpose Create structured implementation plans with milestone and story tracking, and optionally review them iteratively with a second model/provider before finalizing. ## Requirements - Superpowers skills installed from: https://github.com/obra/superpowers - Required dependencies: - `superpowers:brainstorming` - `superpowers:writing-plans` - For Codex, native skill discovery must be configured: - `~/.agents/skills/superpowers -> ~/.codex/superpowers/skills` - For Cursor, skills must be installed under `.cursor/skills/` (repo-local) or `~/.cursor/skills/` (global) - Shared reviewer runtime must be installed beside agent skills when using reviewer CLIs: - Codex: `~/.codex/skills/reviewer-runtime/run-review.sh` - Claude Code: `~/.claude/skills/reviewer-runtime/run-review.sh` - OpenCode: `~/.config/opencode/skills/reviewer-runtime/run-review.sh` - Cursor: `.cursor/skills/reviewer-runtime/run-review.sh` or `~/.cursor/skills/reviewer-runtime/run-review.sh` - Telegram notification setup is documented in [TELEGRAM-NOTIFICATIONS.md](./TELEGRAM-NOTIFICATIONS.md) If dependencies are missing, stop and return: "Missing dependency: native Superpowers skills are required (`superpowers:brainstorming`, `superpowers:writing-plans`). Install from https://github.com/obra/superpowers, then retry." ### Reviewer CLI Requirements (Optional) To use the iterative plan review feature, one of these CLIs must be installed: | Reviewer CLI | Install | Verify | |---|---|---| | `codex` | `npm install -g @openai/codex` | `codex --version` | | `claude` | `npm install -g @anthropic-ai/claude-code` | `claude --version` | | `cursor` | `curl https://cursor.com/install -fsS \| bash` | `cursor-agent --version` (binary: `cursor-agent`; alias `cursor agent` also works) | The reviewer CLI is independent of which agent is running the planning — e.g., Claude Code can send plans to Codex for review, and vice versa. **Additional dependency for `cursor` reviewer:** `jq` is required to parse Cursor's JSON output. Install via `brew install jq` (macOS) or your package manager. Verify: `jq --version`. ## Install ### Codex ```bash mkdir -p ~/.codex/skills/create-plan cp -R skills/create-plan/codex/* ~/.codex/skills/create-plan/ mkdir -p ~/.codex/skills/reviewer-runtime cp -R skills/reviewer-runtime/* ~/.codex/skills/reviewer-runtime/ ``` ### Claude Code ```bash mkdir -p ~/.claude/skills/create-plan cp -R skills/create-plan/claude-code/* ~/.claude/skills/create-plan/ mkdir -p ~/.claude/skills/reviewer-runtime cp -R skills/reviewer-runtime/* ~/.claude/skills/reviewer-runtime/ ``` ### OpenCode ```bash mkdir -p ~/.config/opencode/skills/create-plan cp -R skills/create-plan/opencode/* ~/.config/opencode/skills/create-plan/ mkdir -p ~/.config/opencode/skills/reviewer-runtime cp -R skills/reviewer-runtime/* ~/.config/opencode/skills/reviewer-runtime/ ``` ### Cursor Copy into the repo-local `.cursor/skills/` directory (where the Cursor Agent CLI discovers skills): ```bash mkdir -p .cursor/skills/create-plan cp -R skills/create-plan/cursor/* .cursor/skills/create-plan/ mkdir -p .cursor/skills/reviewer-runtime cp -R skills/reviewer-runtime/* .cursor/skills/reviewer-runtime/ ``` Or install globally (loaded via `~/.cursor/skills/`): ```bash mkdir -p ~/.cursor/skills/create-plan cp -R skills/create-plan/cursor/* ~/.cursor/skills/create-plan/ mkdir -p ~/.cursor/skills/reviewer-runtime cp -R skills/reviewer-runtime/* ~/.cursor/skills/reviewer-runtime/ ``` ## Verify Installation ```bash test -f ~/.codex/skills/create-plan/SKILL.md || true test -f ~/.claude/skills/create-plan/SKILL.md || true test -f ~/.config/opencode/skills/create-plan/SKILL.md || true test -f .cursor/skills/create-plan/SKILL.md || test -f ~/.cursor/skills/create-plan/SKILL.md || true test -x ~/.codex/skills/reviewer-runtime/run-review.sh || true test -x ~/.claude/skills/reviewer-runtime/run-review.sh || true test -x ~/.config/opencode/skills/reviewer-runtime/run-review.sh || true test -x .cursor/skills/reviewer-runtime/run-review.sh || test -x ~/.cursor/skills/reviewer-runtime/run-review.sh || true ``` Verify Superpowers dependencies exist in your agent skills root: - Codex: `~/.agents/skills/superpowers/brainstorming/SKILL.md` - Codex: `~/.agents/skills/superpowers/writing-plans/SKILL.md` - Claude Code: `~/.claude/skills/superpowers/brainstorming/SKILL.md` - Claude Code: `~/.claude/skills/superpowers/writing-plans/SKILL.md` - OpenCode: `~/.config/opencode/skills/superpowers/brainstorming/SKILL.md` - OpenCode: `~/.config/opencode/skills/superpowers/writing-plans/SKILL.md` - Cursor: `.cursor/skills/superpowers/skills/brainstorming/SKILL.md` or `~/.cursor/skills/superpowers/skills/brainstorming/SKILL.md` - Cursor: `.cursor/skills/superpowers/skills/writing-plans/SKILL.md` or `~/.cursor/skills/superpowers/skills/writing-plans/SKILL.md` ## Key Behavior - Creates plans under `ai_plan/YYYY-MM-DD-/`. - Ensures `/ai_plan/` is in `.gitignore`. - Commits `.gitignore` update locally when added. - Asks which reviewer CLI, model, and max rounds to use (or accepts `skip` for no review). - Iteratively reviews the plan with the chosen reviewer (default max 10 rounds) before generating files. - Runs reviewer commands through `reviewer-runtime/run-review.sh` when available, with fallback to direct synchronous execution only if the helper is missing. - Waits as long as the reviewer runtime keeps emitting per-minute `In progress N` heartbeats. - Requires reviewer findings to be ordered `P0` through `P3`, with `P3` explicitly non-blocking. - Captures reviewer stderr and helper status logs for diagnostics and retains them on failed, empty-output, or operator-decision review rounds. - Sends completion notifications through Telegram only when the shared setup in [TELEGRAM-NOTIFICATIONS.md](./TELEGRAM-NOTIFICATIONS.md) is installed and configured. - Produces: - `original-plan.md` - `final-transcript.md` - `milestone-plan.md` — includes Planning Guardrails section - `story-tracker.md` — includes Tracking Guardrails section - `continuation-runbook.md` — includes Skill Workflow Guardrails section ## Iterative Plan Review After the plan is created (design + milestones + stories), the skill sends it to a second model for review: 1. **Configure** — user picks a reviewer CLI (`codex`, `claude`, `cursor`), a model, and optional max rounds (default 10), or skips 2. **Prepare** — plan payload and a bash reviewer command script are written to temp files 3. **Run** — the command script is executed through `reviewer-runtime/run-review.sh` when installed 4. **Feedback** — reviewer evaluates correctness, risks, missing steps, alternatives, security, and returns `## Summary`, `## Findings`, and `## Verdict` 5. **Prioritize** — findings are ordered `P0`, `P1`, `P2`, `P3` 6. **Revise** — the planning agent addresses findings in priority order and re-submits 7. **Repeat** — up to max rounds until the reviewer returns `VERDICT: APPROVED` 8. **Finalize** — approved plan is used to generate the plan file package ### Reviewer Output Contract - `P0` = total blocker - `P1` = major risk - `P2` = must-fix before approval - `P3` = cosmetic / nice to have - Each severity section should use `- None.` when empty - `VERDICT: APPROVED` is valid only when no `P0`, `P1`, or `P2` findings remain - `P3` findings are non-blocking, but the caller should still try to fix them when cheap and safe ### Runtime Artifacts The review flow may create these temp artifacts: - `/tmp/plan-.md` — plan payload - `/tmp/plan-review-.md` — normalized review text - `/tmp/plan-review-.json` — raw Cursor JSON output - `/tmp/plan-review-.stderr` — reviewer stderr - `/tmp/plan-review-.status` — helper heartbeat/status log - `/tmp/plan-review-.runner.out` — helper-managed stdout from the reviewer command process - `/tmp/plan-review-.sh` — reviewer command script Status log lines use this format: ```text ts= level= state= elapsed_s= pid= stdout_bytes= stderr_bytes= note="" ``` `in-progress` is the liveness heartbeat emitted roughly once per minute with `note="In progress N"`. `stall-warning` is a non-terminal status-log state only. It does not mean the caller should stop waiting if `in-progress` heartbeats continue. ### Failure Handling - `completed-empty-output` means the reviewer exited without producing review text; surface `.stderr` and `.status`, then retry only after diagnosing the cause. - `needs-operator-decision` means the helper reached hard-timeout escalation; surface `.status` and decide whether to extend the timeout, abort, or retry with different parameters. - Successful rounds clean up temp artifacts. Failed, empty-output, and operator-decision rounds should retain `.stderr`, `.status`, and `.runner.out` until diagnosed. - As long as fresh `in-progress` heartbeats continue to arrive roughly once per minute, the caller should keep waiting. ### Supported Reviewer CLIs | CLI | Command | Session Resume | Read-Only Mode | |---|---|---|---| | `codex` | `codex exec -m -s read-only` | Yes (`codex exec resume `) | `-s read-only` | | `claude` | `claude -p --model --strict-mcp-config --setting-sources user` | No (fresh call each round) | `--strict-mcp-config --setting-sources user` | | `cursor` | `cursor-agent -p --mode=ask --model --trust --output-format json` | Yes (`--resume `) | `--mode=ask` | For all three CLIs, the preferred execution path is: 1. write the reviewer command to a bash script 2. run that script through `reviewer-runtime/run-review.sh` 3. fall back to direct synchronous execution only if the helper is missing or not executable ## Notifications - Telegram is the only supported notification path. - Shared setup: [TELEGRAM-NOTIFICATIONS.md](./TELEGRAM-NOTIFICATIONS.md) - Notification failures are non-blocking, but they must be surfaced to the user. - Before stopping for any user interaction, approval, or manual decision, send a Telegram summary first if configured. ## Template Guardrails All plan templates now include guardrail sections that enforce: **Planning Guardrails** (`milestone-plan.md`): - Design validation before implementation planning - Native skill discovery (no deprecated CLI wrappers) - Milestone verification + local commits + explicit approval **Tracking Guardrails** (`story-tracker.md`): - Immediate status updates when work starts/completes - Explicit user approval at each milestone boundary - No pushes until all milestones approved - Synchronization between tracker and plan files **Skill Workflow Guardrails** (`continuation-runbook.md`): - Native skill invocation before action - Explicit skill announcements - Checklist tracking for driven skills - No deprecated CLI wrappers ## Variant Hardening Notes ### Claude Code - Must invoke explicit required sub-skills: - `superpowers:brainstorming` - `superpowers:writing-plans` - Must enforce plan-mode file-write guard: - if in plan mode, instruct user to exit plan mode before generating files - Must copy `original-plan.md` from `~/.claude/plans/` when available. ### Codex - Must use native skill discovery from `~/.agents/skills/` (no CLI wrappers). - Must verify Superpowers skills symlink: `~/.agents/skills/superpowers -> ~/.codex/superpowers/skills` - Must invoke required sub-skills with explicit announcements: - `superpowers:brainstorming` — for design exploration and approach validation - `superpowers:writing-plans` — for milestone and story breakdown - Must track checklist-driven skills with `update_plan` todos. - Deprecated CLI commands (`superpowers-codex bootstrap`, `use-skill`) must NOT be used. ### OpenCode - Must use OpenCode native skill tool (not Claude/Codex invocation syntax). - Must verify Superpowers skill discovery under: - `~/.config/opencode/skills/superpowers` - Must explicitly load: - `superpowers/brainstorming` - `superpowers/writing-plans` ### Cursor - Must use workspace discovery from `.cursor/skills/` (repo-local or `~/.cursor/skills/` global). - Must announce skill usage explicitly before invocation. - Must use `--mode=ask` (read-only) and `--trust` when running reviewer non-interactively. - Must not use `--force` or `--mode=agent` for review (reviewer should never write files). ## Execution Workflow Rules - Read runbook first. - Complete one milestone at a time. - Lint/typecheck/test (changed files first). - Commit (do not push), ask for feedback, apply feedback, commit again. - Move to next milestone only after approval. - Ask permission before final push.