Create a plan for review: idea branch, plan file, and draft PR. Part of the Plot workflow. Use on /plot-idea.
Create a plan for review: idea branch, plan file, and draft PR.
Input: $ARGUMENTS in the format <slug>: <title description>
Example: /plot-idea sse-backpressure: Handle SSE client disconnects gracefully
Add a ## Plot Config section to the adopting project's CLAUDE.md:
## Plot Config
<!-- Optional: uncomment if using a GitHub Projects board -->
<!-- - **Project board:** owner/number (e.g. eins78/5) -->
- **Branch prefixes:** idea/, feature/, bug/, docs/, infra/
- **Plan directory:** docs/plans/
- **Active index:** docs/plans/active/
- **Delivered index:** docs/plans/delivered/
| Steps |
|---|
| Min. Tier |
|---|
| Notes |
|---|
| 1. Parse Input | Small | String parsing |
| 2. Pre-flight Checks | Small (hard gate), Mid (soft warning) | Slug collision is mechanical; title similarity needs mid-tier |
| 3-7. Create Branch through Board Status | Small | Git/gh commands, templates, file ops |
| 8. Summary | Small | Template formatting |
The entire skill is small-model capable except the soft duplicate warning (title similarity in step 2).
User interaction: Use
AskUserQuestion(Claude Code) /ask_question(Cursor) for all questions, proposals, and confirmations.
If $ARGUMENTS is empty or missing:
<slug>: <title>. Shall I proceed?"/plot-idea <slug>: <title>"Extract slug and title from $ARGUMENTS:
: is the slug (trimmed): found, treat the entire input as the slug and ask for a title[a-z0-9-]+ (lowercase letters, digits, hyphens only). If it doesn't, ask the user to fix it rather than silently normalizingIf the user provides multiple slugs (comma-separated or as a list), or asks to create multiple plans "in batch" or "together":
<slug>: <title> pairidea/batch-<first-slug> (or a name the user provides)The plans are still independent after approval — /plot-approve processes each slug separately.
Detection: Multiple : entries in $ARGUMENTS, words like "batch"/"together"/"all at once" in conversation context, or an explicit list of slugs.
gh auth status has project scopeidea/<slug> does not already exist (if it does, ask whether to check it out or pick a new name)ls docs/plans/active/ 2>/dev/null + gh pr list --json headRefName --jq '.[].headRefName' | grep '^idea/' to find existing plans and idea branchesSmaller models: Skip the title similarity check. Enforce the hard gate (identical slug) only. Ask the user: "Could not check for similar plan titles. Please verify manually that this doesn't overlap with existing plans."
Create a new branch from origin/main — this is worktree-safe (does not check out main):
git fetch origin main
git checkout -b idea/<slug> origin/main
CREATE_DATE=$(date -u +%Y-%m-%d)
Write docs/plans/${CREATE_DATE}-<slug>.md using the template from skills/plot/templates/plan.md, substituting <title> and <slug>.
Ask the user what Type to use, presenting this reference:
| Type | Use when | Examples |
|---|---|---|
feature | New user-facing functionality | API endpoint, UI component, CLI command |
bug | Fixing a defect | Crash fix, data corruption, incorrect output |
docs | Documentation-only | README updates, API docs, guides |
infra | CI, build, tooling, release automation | GitHub Actions, Dockerfile, linter config, deps |
Always ask — don't infer from the title.
mkdir -p docs/plans/active docs/plans/delivered
ln -s ../${CREATE_DATE}-<slug>.md docs/plans/active/<slug>.md
git add docs/plans/${CREATE_DATE}-<slug>.md docs/plans/active/<slug>.md
git commit -m "plot: <title>"
git push -u origin idea/<slug>
Create a draft PR (plan is still being written/refined):
gh pr create \
--draft \
--title "Plan: <title>" \
--body "$(cat <<'EOF'
## Plan
See [`docs/plans/${CREATE_DATE}-<slug>.md`](../blob/idea/<slug>/docs/plans/${CREATE_DATE}-<slug>.md) on this branch.
Refine the plan, then mark ready for review with `gh pr ready`. Once reviewed, run `/plot-approve <slug>` to merge and start implementation.
---
*Created with `/plot-idea`*
EOF
)"
If ## Plot Config includes a project board (owner/number), update the plan PR status:
../plot/scripts/plot-update-board.sh <pr-url> "Planning" <owner> <number>
If no project board is configured, skip this step.
Print:
idea/<slug>docs/plans/<CREATE_DATE>-<slug>.mddocs/plans/active/<slug>.md (symlink)[x] Draft > [ ] Approved > [ ] Delivered > [ ] Releasedgh pr ready <number>/plot-approve <slug>/plot-sprint <sprint> then add [<slug>] as an item