Project Planner
Prerequisites
- git
- gh (GitHub CLI, authenticated via
gh auth login)
Triage user input into the right project artifact: a proposal (big idea with phases),
a feature issue (small enhancement), or a bug report (something's broken).
Repo Discovery
Before doing anything, discover the current repo's configuration:
- Run
git rev-parse --show-toplevel to find the repo root
- Check for
.project-planner.yml at the repo root — if it exists, read it and
use its values for all paths, labels, and conventions
- If no config file, fall back to auto-discovery:
- Proposal template: look for
docs/proposals/TEMPLATE.md
- Issue templates: look in
.github/ISSUE_TEMPLATE/
- Docs directory: look for
docs/, mkdocs.yml
- If nothing found, use the fallback formats bundled with the skill
- If the repo has
CLAUDE.md or CONTRIBUTING.md, read for conventions
- Run
gh repo view --json name,owner to confirm the repo for issue creation
Config File: .project-planner.yml
Optional config file at repo root. All fields are optional — auto-discovery fills gaps.
See project-planner.yml in the skill directory for a copy-paste starter.
project: MyProject # project name (for issue titles)
repo: owner/repo # GitHub repo (usually auto-detected)
proposals:
dir: docs/proposals # where proposal docs live
template: docs/proposals/TEMPLATE.md # proposal template to follow
index: docs/proposals/index.md # index file to update with new proposals
mkdocs_nav: true # update mkdocs.yml nav when creating proposals
issues:
labels:
feature: enhancement # label for feature issues
bug: bug # label for bug issues
# branch_prefix: feature/ # branch naming prefix
# conventions:
# docs: docs # where project docs live
Triage Rules
Determine the type by asking: does this need design work or multiple phases?
- Needs design decisions, multiple phases, or architectural thought → Proposal
- Single, obvious change — no design needed → Feature issue
- Something is broken or behaving wrong → Bug report
If unclear, ask the user: "Is this a quick fix or does it need a design doc?"
Workflow: Proposal
For big ideas that need phases and design.
- Discover proposal template (see Repo Discovery above)
- Research the codebase and any docs/ directory for relevant context
- Think through the design — motivation, approach, trade-offs
- Break into shippable phases (each phase delivers user value)
- Write acceptance criteria at both levels (overall + per-phase)
- Create the proposal doc at
docs/proposals/<name>.md
- If
mkdocs.yml exists, add the proposal to the nav under Proposals
- If
docs/proposals/index.md exists, add to the Active Proposals list
- Create a tracking issue (parent) using
gh issue create:
- Title:
<Proposal name> (no "Phase" prefix — this is the umbrella issue)
- Body: link to the proposal doc, overall acceptance criteria, summary of phases
- Label:
enhancement
- Save the issue node ID (
gh issue view <number> --json id -q .id)
- Create a GitHub issue for each phase using
gh issue create:
- Title:
<Proposal name>: Phase N — <phase name>
- Body: phase goal, acceptance criteria, tasks as checklist, link to proposal,
and a
## Tracking section with Parent: #<tracking-issue-number>
- Label:
enhancement
- Wire each phase issue as a native sub-issue of the tracking issue using GraphQL:
gh api graphql -f query='
mutation {
addSubIssue(input: {
issueId: "<tracking-issue-node-id>"
subIssueId: "<phase-issue-node-id>"
}) { issue { id } subIssue { id } }
}'
If the mutation fails (repo doesn't support sub-issues, permissions),
fall back to listing phase issues as linked references in the tracking issue body.
- Update the proposal doc with phase issue links and the tracking issue
link in the header (e.g.,
Tracking: #<number>)
- Commit to a new branch and push
Tracking Issue Convention
Every multi-phase proposal gets a tracking issue with native GitHub sub-issues
(not markdown checkbox task lists). This gives you:
- Progress badges — the issue list shows "2 of 5" sub-issue completion at a glance
- Bidirectional navigation — parent links to children, children link back to parent
- Automatic updates — when PRs close a phase issue, the tracking issue progress updates
Always use the addSubIssue GraphQL mutation to wire parent↔child relationships.
Markdown checkboxes (- [ ] #123) are just text — they don't update automatically and
GitHub doesn't treat them as real relationships. Native sub-issues are a first-class
GitHub feature with proper status tracking.
Proposal Quality Checklist
Before committing, verify:
Workflow: Feature Issue
For small, self-contained enhancements.
- Discover feature template (see Repo Discovery above)
- Create a GitHub issue using
gh issue create:
- Title: clear, action-oriented
- Body: summary, acceptance criteria as checklist, doc references if relevant
- Follow the repo's template format if one exists
- Label:
enhancement
- Report the issue number and URL to the user
Workflow: Bug Report
For problems and broken behavior.
- Discover bug template (see Repo Discovery above)
- Try to identify the relevant code by searching the codebase
- Create a GitHub issue using
gh issue create:
- Title:
Bug: <concise description>
- Body: description, steps to reproduce (if known), expected vs actual,
relevant code files/lines, related docs
- Follow the repo's template format if one exists
- Label:
bug
- Report the issue number and URL to the user
Important Rules
- Always use
gh issue create — it's repo-aware, handles auth
- Always link back — issues reference proposals, proposals reference issues
- Proposals stay forever — status changes, docs never move or get deleted
- One proposal per feature — don't cram multiple ideas into one doc
- Phases must be shippable — each delivers user value, not just "backend work"
- Every multi-phase proposal gets a tracking issue — created before phase issues
- Phase issues reference the tracking issue — via
## Tracking section in body
- Commit to a branch — never push directly to main
- Respect repo conventions — if the repo has CLAUDE.md or CONTRIBUTING.md, read
and follow its branch naming, commit message, and PR conventions
1---2name: project-planner3description: Triage ideas, problems, and feature requests into the right format: proposal doc, feature issue, or bug report. Repo-aware — discovers templates and docs structure from the current repository. Use when: (1) the user describes an idea, feature, or problem they want to track, (2) the user says "file a bug", "I have an idea", "let's plan this feature", or similar, (3) the user wants to break down a large feature into phases with GitHub issues. NOT for: actually implementing code (use coding-agent), reviewing PRs, or general questions about the codebase.4---56# Project Planner78## Prerequisites910- git11- gh (GitHub CLI, authenticated via `gh auth login`)1213Triage user input into the right project artifact: a **proposal** (big idea with phases),14a **feature issue** (small enhancement), or a **bug report** (something's broken).1516## Repo Discovery1718Before doing anything, discover the current repo's configuration:19201. Run `git rev-parse --show-toplevel` to find the repo root212. Check for `.project-planner.yml` at the repo root — if it exists, read it and22 use its values for all paths, labels, and conventions233. If no config file, fall back to auto-discovery:24 - Proposal template: look for `docs/proposals/TEMPLATE.md`25 - Issue templates: look in `.github/ISSUE_TEMPLATE/`26 - Docs directory: look for `docs/`, `mkdocs.yml`27 - If nothing found, use the fallback formats bundled with the skill284. If the repo has `CLAUDE.md` or `CONTRIBUTING.md`, read for conventions295. Run `gh repo view --json name,owner` to confirm the repo for issue creation3031### Config File: `.project-planner.yml`3233Optional config file at repo root. All fields are optional — auto-discovery fills gaps.34See `project-planner.yml` in the skill directory for a copy-paste starter.3536```yaml37project: MyProject # project name (for issue titles)38repo: owner/repo # GitHub repo (usually auto-detected)3940proposals:41 dir: docs/proposals # where proposal docs live42 template: docs/proposals/TEMPLATE.md # proposal template to follow43 index: docs/proposals/index.md # index file to update with new proposals44 mkdocs_nav: true # update mkdocs.yml nav when creating proposals4546issues:47 labels:48 feature: enhancement # label for feature issues49 bug: bug # label for bug issues50 # branch_prefix: feature/ # branch naming prefix5152# conventions:53# docs: docs # where project docs live54```5556## Triage Rules5758Determine the type by asking: **does this need design work or multiple phases?**5960- Needs design decisions, multiple phases, or architectural thought → **Proposal**61- Single, obvious change — no design needed → **Feature issue**62- Something is broken or behaving wrong → **Bug report**6364If unclear, ask the user: "Is this a quick fix or does it need a design doc?"6566## Workflow: Proposal6768For big ideas that need phases and design.69701. Discover proposal template (see Repo Discovery above)712. Research the codebase and any docs/ directory for relevant context723. Think through the design — motivation, approach, trade-offs734. Break into shippable phases (each phase delivers user value)745. Write acceptance criteria at both levels (overall + per-phase)756. Create the proposal doc at `docs/proposals/<name>.md`767. If `mkdocs.yml` exists, add the proposal to the nav under Proposals778. If `docs/proposals/index.md` exists, add to the Active Proposals list789. Create a tracking issue (parent) using `gh issue create`:79 - Title: `<Proposal name>` (no "Phase" prefix — this is the umbrella issue)80 - Body: link to the proposal doc, overall acceptance criteria, summary of phases81 - Label: `enhancement`82 - Save the issue node ID (`gh issue view <number> --json id -q .id`)8310. Create a GitHub issue for each phase using `gh issue create`:84 - Title: `<Proposal name>: Phase N — <phase name>`85 - Body: phase goal, acceptance criteria, tasks as checklist, link to proposal,86 and a `## Tracking` section with `Parent: #<tracking-issue-number>`87 - Label: `enhancement`8811. Wire each phase issue as a native sub-issue of the tracking issue using GraphQL:89 ```90 gh api graphql -f query='91 mutation {92 addSubIssue(input: {93 issueId: "<tracking-issue-node-id>"94 subIssueId: "<phase-issue-node-id>"95 }) { issue { id } subIssue { id } }96 }'97 ```98 If the mutation fails (repo doesn't support sub-issues, permissions),99 fall back to listing phase issues as linked references in the tracking issue body.10012. Update the proposal doc with phase issue links and the tracking issue101 link in the header (e.g., `Tracking: #<number>`)10213. Commit to a new branch and push103104### Tracking Issue Convention105106Every multi-phase proposal gets a **tracking issue** with **native GitHub sub-issues**107(not markdown checkbox task lists). This gives you:108109- **Progress badges** — the issue list shows "2 of 5" sub-issue completion at a glance110- **Bidirectional navigation** — parent links to children, children link back to parent111- **Automatic updates** — when PRs close a phase issue, the tracking issue progress updates112113Always use the `addSubIssue` GraphQL mutation to wire parent↔child relationships.114Markdown checkboxes (`- [ ] #123`) are just text — they don't update automatically and115GitHub doesn't treat them as real relationships. Native sub-issues are a first-class116GitHub feature with proper status tracking.117118### Proposal Quality Checklist119120Before committing, verify:121122- [ ] Summary is one clear paragraph123- [ ] Motivation explains why now124- [ ] Design covers user experience AND technical approach125- [ ] Every phase is independently shippable126- [ ] Acceptance criteria are testable (not vague)127- [ ] Open questions section exists (even if empty)128- [ ] Related section links to relevant docs, issues, or design docs129- [ ] Tracking issue exists with all phase issues wired as sub-issues (or, if unsupported, linked from the tracking issue body)130- [ ] Status is set to "Ready" (if issues created) or "Draft" (if not)131132## Workflow: Feature Issue133134For small, self-contained enhancements.1351361. Discover feature template (see Repo Discovery above)1372. Create a GitHub issue using `gh issue create`:138 - Title: clear, action-oriented139 - Body: summary, acceptance criteria as checklist, doc references if relevant140 - Follow the repo's template format if one exists141 - Label: `enhancement`1423. Report the issue number and URL to the user143144## Workflow: Bug Report145146For problems and broken behavior.1471481. Discover bug template (see Repo Discovery above)1492. Try to identify the relevant code by searching the codebase1503. Create a GitHub issue using `gh issue create`:151 - Title: `Bug: <concise description>`152 - Body: description, steps to reproduce (if known), expected vs actual,153 relevant code files/lines, related docs154 - Follow the repo's template format if one exists155 - Label: `bug`1564. Report the issue number and URL to the user157158## Important Rules159160- **Always use `gh issue create`** — it's repo-aware, handles auth161- **Always link back** — issues reference proposals, proposals reference issues162- **Proposals stay forever** — status changes, docs never move or get deleted163- **One proposal per feature** — don't cram multiple ideas into one doc164- **Phases must be shippable** — each delivers user value, not just "backend work"165- **Every multi-phase proposal gets a tracking issue** — created before phase issues166- **Phase issues reference the tracking issue** — via `## Tracking` section in body167- **Commit to a branch** — never push directly to main168- **Respect repo conventions** — if the repo has CLAUDE.md or CONTRIBUTING.md, read169 and follow its branch naming, commit message, and PR conventions