Plan From Issue: turn a GitHub issue into a saved implementation plan
You have been handed a GitHub issue — and possibly a separate story ticket — and your
job is to produce a saved, executable implementation plan for it by chaining this
repo's context and planning skills. The failure mode this skill exists to prevent is
planning from prose: drafting a plan straight from ticket text without grounding
it in the actual code, which produces plausible-sounding phases that name files that
don't exist and miss the side effects that do. Every plan this skill saves must be
grounded in code that was actually read.
This is an orchestrator: it depends on the call-trace and plan-save skills
being installed, and it ends where they end — with a saved plan, not changed code.
When to use this skill
- Given a GitHub issue URL, or a repo + issue number, with a request to gather
context, build understanding, or start a plan for it.
- "Get this story/ticket ready to implement" — a story ticket description is
supplied alongside (or inside) the issue.
- Kicking off work on an issue when no saved plan exists yet.
When NOT to use this skill
- A saved plan for this work already exists — use
plan-next to execute it or
plan-review to critique it; don't generate a competing plan.
- The user wants the change made now, not planned — small, well-understood fixes
don't need a plan pipeline; just do the work.
- You only need the issue's contents — a quick
gh issue view answers that; this
skill is for producing a plan, not summarizing a ticket.
- No issue exists — if there's only a verbal idea, plan it directly (plan mode +
plan-save); this skill's job starts from a real issue.
Steps
Resolve the issue reference. Accept a full issue URL or a repo + number. If
given only a number, derive the repo from git remote get-url origin in the
current directory. If the issue's repo and the working directory's remote point at
different repos, or no repo can be derived, ask via AskUserQuestion and stop.
Verify the gh account. Run gh auth status. If multiple accounts are authed
and the active one is not the account used for this repo's owner, switch with
gh auth switch --user <account> and say that you switched. Never fetch under
the wrong account, and never switch silently.
Fetch the issue. gh issue view <n> --repo <owner/repo> --comments — read the
full body and comments, not just the title.
Gather the story ticket. It may live in the issue body itself, in a second
issue the user pointed at (fetch it the same way), or in a local file the user
named (Read it). If the issue body is thin and no story ticket was provided, ask
for one via AskUserQuestion rather than padding the gap with assumptions.
Synthesize the ask. Distill issue + story ticket into an explicit statement of
what is being requested and a plain-prose list of acceptance criteria. Strip
ticket-tracking tags and IDs — plain language only. If the ask is materially
ambiguous or self-contradictory, ask via AskUserQuestion before proceeding; never
plan around a guess.
Locate the target code. Map the ask onto the codebase with Grep/Glob/Read to
find the methods, classes, or routes the work centers on. Select at most 3
targets — the most load-bearing ones.
Trace each target. Invoke the call-trace skill on each selected target to
build deep bidirectional context. Do not skip this even when the ticket "seems
clear" — this step is what separates a grounded plan from prose.
Draft the plan. Write the implementation plan from the synthesized ask plus
the trace findings: ordered phases, the real file paths involved, and how each
acceptance criterion is met. Every phase must reference code that was actually
read in steps 6–7.
Save the plan. Invoke the plan-save skill to persist it (it will ask the
user where to save).
Stop. Report using the Output format below — the synthesized understanding,
what was traced, and where the plan lives. Suggest plan-review to critique it
and plan-next to start executing. Do not begin implementing.
Output format
Plan saved: <path> (<N> phases)
Understanding: <one short paragraph — what the issue + story ticket are asking for>
Acceptance criteria: <plain-prose list>
Traced: <the call-trace targets and the one-line takeaway from each>
Next: plan-review to critique, plan-next to execute phase 1.
Rules
What to do
- Verify the account before any gh call. Fetching under the wrong account is an
unrecoverable first step on machines with multiple identities.
- Read the whole issue, comments included. Decisions and scope changes live in
comment threads at least as often as in bodies.
- Hard cap: 3 call-trace targets. Pick the most load-bearing; more traces add
noise, not understanding.
- Ground every phase. Each plan phase must name files/methods that were actually
read during the trace — if a phase can't, trace more or cut the phase.
What NOT to do
- NEVER plan from prose alone. Skipping the codebase trace because the ticket
"explains it well" is the cardinal sin — that is exactly when invented file paths
slip in.
- Don't start implementing. The deliverable is the saved plan; execution belongs
to
plan-next in a later session.
- Don't paste raw ticket text into the plan. Synthesize; the plan's Context
section is for a future session, not an archive of the issue.
- Don't invent acceptance criteria. If the ticket doesn't state one you think is
implied, list it as an open question for the user — not as a requirement.
Format discipline
- Don't narrate each fetch and grep; speak up at the checkpoints — the synthesized
understanding (step 5) and the final report.
- Output-format block exactly as specified, plan location first. Then stop.
1---2name: plan-from-issue3description: Turn a GitHub issue (plus an optional story ticket) into a saved, phase-structured implementation plan: fetch the issue, synthesize the ask, ground it in the codebase via the call-trace skill, then persist the plan via plan-save. Use when given an issue URL or repo + issue number and asked to "gather context for this issue", "start/build a plan for this ticket", "get this story ready to implement", or "/plan-from-issue". Stops once the plan is saved — execution belongs to plan-next.4---56# Plan From Issue: turn a GitHub issue into a saved implementation plan78You have been handed a GitHub issue — and possibly a separate story ticket — and your9job is to produce a saved, executable implementation plan for it by chaining this10repo's context and planning skills. The failure mode this skill exists to prevent is11**planning from prose**: drafting a plan straight from ticket text without grounding12it in the actual code, which produces plausible-sounding phases that name files that13don't exist and miss the side effects that do. Every plan this skill saves must be14grounded in code that was actually read.1516This is an orchestrator: it depends on the **call-trace** and **plan-save** skills17being installed, and it ends where they end — with a saved plan, not changed code.1819## When to use this skill2021- Given a GitHub issue URL, or a repo + issue number, with a request to gather22 context, build understanding, or start a plan for it.23- "Get this story/ticket ready to implement" — a story ticket description is24 supplied alongside (or inside) the issue.25- Kicking off work on an issue when no saved plan exists yet.2627## When NOT to use this skill2829- **A saved plan for this work already exists** — use `plan-next` to execute it or30 `plan-review` to critique it; don't generate a competing plan.31- **The user wants the change made now**, not planned — small, well-understood fixes32 don't need a plan pipeline; just do the work.33- **You only need the issue's contents** — a quick `gh issue view` answers that; this34 skill is for producing a plan, not summarizing a ticket.35- **No issue exists** — if there's only a verbal idea, plan it directly (plan mode +36 `plan-save`); this skill's job starts from a real issue.3738## Steps39401. **Resolve the issue reference.** Accept a full issue URL or a repo + number. If41 given only a number, derive the repo from `git remote get-url origin` in the42 current directory. If the issue's repo and the working directory's remote point at43 different repos, or no repo can be derived, ask via AskUserQuestion and stop.44452. **Verify the gh account.** Run `gh auth status`. If multiple accounts are authed46 and the active one is not the account used for this repo's owner, switch with47 `gh auth switch --user <account>` and **say that you switched**. Never fetch under48 the wrong account, and never switch silently.49503. **Fetch the issue.** `gh issue view <n> --repo <owner/repo> --comments` — read the51 full body and comments, not just the title.52534. **Gather the story ticket.** It may live in the issue body itself, in a second54 issue the user pointed at (fetch it the same way), or in a local file the user55 named (Read it). If the issue body is thin and no story ticket was provided, ask56 for one via AskUserQuestion rather than padding the gap with assumptions.57585. **Synthesize the ask.** Distill issue + story ticket into an explicit statement of59 what is being requested and a plain-prose list of acceptance criteria. Strip60 ticket-tracking tags and IDs — plain language only. If the ask is materially61 ambiguous or self-contradictory, ask via AskUserQuestion before proceeding; never62 plan around a guess.63646. **Locate the target code.** Map the ask onto the codebase with Grep/Glob/Read to65 find the methods, classes, or routes the work centers on. Select at most **3**66 targets — the most load-bearing ones.67687. **Trace each target.** Invoke the **call-trace** skill on each selected target to69 build deep bidirectional context. Do not skip this even when the ticket "seems70 clear" — this step is what separates a grounded plan from prose.71728. **Draft the plan.** Write the implementation plan from the synthesized ask plus73 the trace findings: ordered phases, the real file paths involved, and how each74 acceptance criterion is met. Every phase must reference code that was actually75 read in steps 6–7.76779. **Save the plan.** Invoke the **plan-save** skill to persist it (it will ask the78 user where to save).798010. **Stop.** Report using the Output format below — the synthesized understanding,81 what was traced, and where the plan lives. Suggest `plan-review` to critique it82 and `plan-next` to start executing. Do **not** begin implementing.8384## Output format8586```87Plan saved: <path> (<N> phases)8889Understanding: <one short paragraph — what the issue + story ticket are asking for>90Acceptance criteria: <plain-prose list>91Traced: <the call-trace targets and the one-line takeaway from each>9293Next: plan-review to critique, plan-next to execute phase 1.94```9596## Rules9798### What to do99100- **Verify the account before any gh call.** Fetching under the wrong account is an101 unrecoverable first step on machines with multiple identities.102- **Read the whole issue, comments included.** Decisions and scope changes live in103 comment threads at least as often as in bodies.104- **Hard cap: 3 call-trace targets.** Pick the most load-bearing; more traces add105 noise, not understanding.106- **Ground every phase.** Each plan phase must name files/methods that were actually107 read during the trace — if a phase can't, trace more or cut the phase.108109### What NOT to do110111- **NEVER plan from prose alone.** Skipping the codebase trace because the ticket112 "explains it well" is the cardinal sin — that is exactly when invented file paths113 slip in.114- **Don't start implementing.** The deliverable is the saved plan; execution belongs115 to `plan-next` in a later session.116- **Don't paste raw ticket text into the plan.** Synthesize; the plan's Context117 section is for a future session, not an archive of the issue.118- **Don't invent acceptance criteria.** If the ticket doesn't state one you think is119 implied, list it as an open question for the user — not as a requirement.120121### Format discipline122123- Don't narrate each fetch and grep; speak up at the checkpoints — the synthesized124 understanding (step 5) and the final report.125- Output-format block exactly as specified, plan location first. Then stop.