brainstorm-to-issues
Brainstorm to Issues
Turn a casual idea into structured, implementable GitHub issues through conversation.
Pre-flight
Before starting the brainstorm, verify the environment so the user doesn't lose work at the end:
gh auth status
If this fails, stop immediately: "GitHub CLI isn't authenticated. Run gh auth login first, then let's brainstorm."
Process
1. Capture the idea
Ask the user to describe their idea freely. Don't interrupt — let them get it all out. Then summarize what you heard back to them in 2-3 sentences to confirm understanding.
If the user references an existing PRD or issue (e.g., "I want to add more issues to #42" or "let's extend the auth PRD"), read it with gh issue view <number> and skip to step 4 — you're extending, not creating from scratch.
2. Explore the codebase
Before interviewing the user, proactively explore the codebase to understand the landscape. This makes your questions sharper and avoids asking things the code already answers:
- Project structure, frameworks, and patterns in use
- Existing modules related to the idea
- Database schemas, API routes, or config that would be affected
- Test infrastructure and conventions
- File ownership boundaries — which directories/files belong to which logical modules. This matters later when you need to split work into non-overlapping issues for parallel implementation.
This exploration informs both the interview and the eventual issue breakdown. Spend enough time here that you can have a technical conversation about the idea without constantly asking the user "where does X live?"
3. Grill the idea
Interview the user about every aspect. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer informed by what you found in the codebase.
If a question can be answered by exploring the codebase, explore it instead of asking.
Cover at minimum:
- Who is this for? What problem does it solve?
- What does "done" look like?
- What are the edge cases?
- What's explicitly out of scope?
- Are there technical constraints or preferences?
Keep going until there are no open questions.
4. Write the PRD
Create a PRD as a GitHub issue using gh issue create:
The problem from the user's perspective.
Solution
The solution from the user's perspective.
User Stories
Numbered list:
- As a , I want , so that
Be extensive — cover all aspects discussed.
Implementation Decisions
Key technical decisions made during brainstorming:
- Modules to build/modify (reference by component/module name — e.g., "auth middleware", "users API", "dashboard page")
- Architectural choices
- Schema changes
- API contracts
Include enough technical direction that the implementing agent knows which areas of the codebase to work in, but avoid hardcoding specific file paths or line numbers that will go stale.
Out of Scope
What was explicitly excluded.
Add the label prd to the issue.
5. Break into vertical slices
Break the PRD into tracer bullet issues. Each issue is a thin vertical slice through ALL layers end-to-end, NOT a horizontal layer slice.
Scope estimation: For each slice, estimate the rough size (small: <100 lines, medium: 100-300 lines, large: 300-500 lines). If any slice looks like it would exceed ~500 lines of changes, split it further — the downstream implementation skill has a ~500 line threshold and will reject issues that are too large.
Minimize file conflicts for parallel work
AI agents pick up unblocked ai-ready issues in parallel. If two parallel issues modify the same files, their PRs will conflict and one will need to be rebased or redone. This is wasteful, so the issue breakdown should minimize file overlap between issues that can run at the same time.
Keep every issue as a vertical slice. Do not split work into horizontal layers (e.g., "all schema changes" then "all renderer changes" then "all UI changes") just to avoid file conflicts. Each issue should still touch all the layers it needs end-to-end. The way to avoid conflicts is through dependency chains, not by breaking vertical slices apart.
After defining the slices, do a file-overlap analysis:
-
Map the file footprint of each slice — list the files or directories it will likely touch. Be specific (e.g., "src/api/routes/widgets.ts, src/db/migrations/, src/components/WidgetList.tsx") rather than vague ("the API layer"). Use what you learned in step 2 about the codebase structure.
-
Identify conflicts — two slices conflict if their file footprints overlap. Common conflict hotspots:
- Shared config files (routes index, DB schema, app entrypoint)
- Barrel/index files that re-export modules
- Shared types or interfaces files
- CSS/style files used across components
-
Resolve conflicts through dependency chains. When two vertical slices touch the same files, chain them with a dependency so they run sequentially instead of in parallel. Pick the natural ordering — the slice that establishes shared groundwork (e.g., adds the DB table, creates the base component) goes first, and the slice that builds on it depends on it. If there's no natural ordering, just pick one. The key rule: no two simultaneously-unblocked issues should share files. Add as many dependency links as needed to enforce this — a longer chain is better than a merge conflict.
-
Maximize parallel lanes. Arrange the dependency graph so the maximum number of issues are unblocked at any given time, while respecting the constraint above. Think of it as coloring a graph: issues in the same "color" (parallel group) must not conflict on files. Spread unrelated slices across separate lanes that can run simultaneously.
If a shared file is unavoidable across many slices (e.g., a routes index where every feature adds a line), front-load those changes into the first slice in the chain so later slices only append to what the first one established.
Present the breakdown
Present the breakdown to the user as a numbered list showing:
- Title: short descriptive name
- Type: HITL (needs human input) / AFK (fully autonomous)
- Priority: critical / high / normal (if everything is normal, skip this column)
- Blocked by: dependencies on other slices
- User stories covered: which stories from the PRD
- Estimated size: small / medium / large
- Files touched: key files/directories this slice will modify
After the list, show a parallel lanes view — which issues can run simultaneously without conflicts:
Lane 1: #1 Setup DB schema → #3 Widget CRUD API → #5 Widget permissions
Lane 2: #2 Dashboard layout → #4 Widget list component
This makes the conflict-avoidance strategy visible. Ask: Does the granularity feel right? Any slices to merge or split? Do the dependency chains make sense for avoiding conflicts?
Iterate until approved.
6. Create the issues
Before creating anything, save the full list of planned issues (titles, bodies, labels, dependencies) to a local file as a backup:
<project-root>/brainstorm-<short-name>.json
This ensures nothing is lost if issue creation fails partway through. If a gh issue create call fails, stop, report which issues were created and which remain, and offer to retry the remaining ones.
For each approved slice, create a GitHub issue with gh issue create. Create in dependency order so you can reference real issue numbers.
#
What to build
Concise description of this vertical slice. Describe end-to-end behavior, not layer-by-layer implementation.
Acceptance criteria
Specific, testable criteria that an implementing agent can verify. Each criterion should describe observable behavior, not vague quality:
-
POST /api/widgetsreturns 201 with the created widget JSON - Widget appears in the dashboard list without page refresh
- Creating a widget with a duplicate name returns 409
Avoid criteria like "works correctly" or "handles edge cases" — be precise about what "correct" means.
Blocked by
List of issue references this depends on, or omit this section entirely if unblocked.
- #
Type
AFK / HITL
Input Needed (HITL only)
What specific input the human must provide before this can be implemented. Be precise — not "design feedback" but "choose between tabbed layout or sidebar layout for the settings page and provide rough wireframe or description of which settings go where."
Labeling rules:
- AFK issues with no blockers → label
ai-ready(can be picked up immediately by the AI implementation loop) - AFK issues with blockers → label
ai-blocked(will be picked up automatically when blockers close) - HITL issues → label
ai-needs-input(waiting for human to provide input described in the "Input Needed" section). Once the human comments with their input and relabels toai-ready, the AI implementation loop picks it up.
If the user assigned priorities, also add the corresponding label:
priority:criticalorpriority:high(normal priority gets no label — it's the default)
7. Update the PRD with child links
After all issues are created, edit the PRD issue to add a tracking section at the bottom:
gh issue edit <prd-number> --body "$(current body)
## Implementation Issues
- [ ] #<issue-1> - <title>
- [ ] #<issue-2> - <title>
- [ ] #<issue-3> - <title>
"
This makes the PRD a single source of truth — you can see the full breakdown and track progress from one place.
8. Summary
Print a summary: PRD issue link, list of created issues with numbers and labels, dependency graph, and suggested starting order.
If any HITL issues were created, call them out explicitly:
Issues waiting for your input:
- #<number> "<title>" — needs: <what input is needed>
- #<number> "<title>" — needs: <what input is needed>
Comment on the issue with your input, then change the label from `ai-needs-input` to `ai-ready` to hand it off.
Clean up the local backup file if all issues were created successfully.
More from hifisaputra/skills
code-review
Thorough code review of a PR — checks correctness, security, performance, style consistency, test coverage, and verifies the PR addresses its linked issue. Use when user says "review this PR", "check this PR", "look at this diff", or any request to review code changes.
11process-issues
Autonomous loop that picks up ai-ready GitHub issues, handles PR feedback, and asks clarifying questions when blocked. Use when user says "work issues", "start working", "process backlog", or wants AI to autonomously implement GitHub issues.
9process-reviews
Autonomous loop that finds PRs needing AI review and delegates to the code-review skill. Use when user says "review PRs", "start reviewing", "check for PRs to review", "process reviews", or wants AI to continuously monitor and review PRs.
9code-implementation
Implements a code task using a structured plan-first approach with TDD when tests exist, or direct implementation for docs/config changes. Use when user says "implement this", "build this feature", "fix this bug", or any request to write code for a well-defined task.
9work-issues
Autonomous loop that implements ai-ready GitHub issues, handles PR feedback, and asks clarifying questions when blocked. Use when user says "work issues", "start working", "process backlog", or wants AI to autonomously implement GitHub issues.
5review-prs
Poll for open PRs ready for review and post AI code reviews. Use with /loop to continuously monitor repos. Use when user says "review PRs", "check for PRs", or "start reviewing".
4