一键导入
plan-or-spec-to-issues
Breaks down a plan or technical spec into dependency-ordered implementation issues — as local markdown files under docs/issues/, or as GitHub sub-issues of the parent spec issue with native blocking.
菜单
Breaks down a plan or technical spec into dependency-ordered implementation issues — as local markdown files under docs/issues/, or as GitHub sub-issues of the parent spec issue with native blocking.
React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.
Reviews code changes for correctness, quality, security, and rule compliance. Works on local files or a GitHub PR. Produces a structured report with severity levels and a pass/fail verdict.
Generates a technical specification document for a new feature or product.
Implements a feature based on a provided technical specification, ensuring build stability and strict adherence to the spec through a sub-agent code review. Creates a feature branch, commits changes, and raises a PR on completion.
QA skill for browser-based UI validation and functional test plan execution. Handles authentication and routes to the appropriate reference based on the task.
Sets up a Git worktree for a task or feature. Derives a branch name from the task description, creates an isolated worktree directory, copies env files, and installs dependencies. Use when starting work on a new feature or task in isolation.
| name | plan-or-spec-to-issues |
| description | Breaks down a plan or technical spec into dependency-ordered implementation issues — as local markdown files under docs/issues/, or as GitHub sub-issues of the parent spec issue with native blocking. |
You will be given one of:
/create-technical-spec skill/create-technical-spec skill in issue modeRead the source document thoroughly before doing anything else (fetch via gh issue view <num> --json title,body -q .body if it's an issue).
The skill has two modes:
docs/issues/<feature-slug>/. Best for specs that live locally and aren't tracked on GitHub.--online / --sub-issues force online mode; --local forces local mode. For online mode on a local file, the file must contain a <!-- github-issue: #N ... --> stamp identifying the parent issue, or the user must supply the parent issue reference.After decomposing the spec (Step 2 in either mode) and before writing any files or creating any GitHub issues, present the proposed decomposition to the user and wait for explicit approval.
The proposal must include, for each planned issue:
Also surface:
Wait for the user to say "approved", "go ahead", "looks good", "proceed", or to send revisions. If they request changes, update the decomposition and re-propose. Do not skip this step even if the decomposition seems obvious — creating issues or files prematurely is costly to undo (especially on GitHub).
Check whether an issues directory already exists for this feature:
docs/issues/<feature-slug>/ relative to the project rootAsk the user for the feature slug if it is not obvious from the plan or spec.
Break the plan or spec into discrete, independently implementable units of work. Each issue should:
Identify the dependency order across all issues before writing any files. Schema and data layer issues come before service issues; service issues come before controller and handler issues.
Gate: Only proceed once the user has approved the proposal (see Proposal & Approval).
The implementer will read the spec. Issue files exist to carve out a clear boundary — not to rewrite the source document. Keep every section as short as possible. If something is already explained in the spec, point to it; do not repeat it.
For each issue, create a file at:
docs/issues/<feature-slug>/NNN-<slug>.md
Where NNN is a zero-padded three-digit number starting from 001, ordered by dependency (earliest dependencies first).
Each file must follow this structure exactly:
# NNN — <Title>
## Plan reference
[<Plan or Spec title>](<relative path to source document>) — <relevant sections>
## Summary
<One sentence naming what this issue builds.>
## Blockers
- **Issue NNN** — <specific methods, schemas, or exports that must exist before this issue can start>
_(omit this section if there are no blockers)_
## Scope
<Concise breakdown of what to implement. Use short bullet points per file or component — name the method, field, or route and state what it does in one line. Do not reproduce content already in the spec; point to the relevant section instead. The implementer will read the spec. This section exists to draw a clear boundary around the issue, not rewrite the source document.>
## Files to create/modify
**New:**
- `<path>`
**Modified:**
- `<path>` — <what changes>
_(omit a category if empty)_
## Unblocks
- Issue NNN (<Title>) — <what this issue provides that unblocks it>
_(omit this section if this issue unblocks nothing)_
Before finishing, check across all issues:
Create docs/issues/<feature-slug>/README.md with the following sections in order.
| File | Title | Level |
|---|---|---|
NNN-<slug>.md | Title | 1 |
Level is the dependency depth: issues with no blockers are level 1, issues that only depend on level-1 issues are level 2, and so on.
Build a directed graph from the blocker/unblocks relationships across all issues:
```mermaid
graph TD
001["001 — Title"]
002["002 — Title"]
001 --> 002
```
Each node is NNN["NNN — Title"]. Each edge goes from blocker to dependent (blocker --> dependent). Issues with no edges still appear as isolated nodes.
Group issues by their level. For each level, write a natural-language note describing when to start and whether issues in that level can be worked in parallel:
| Level | Issues | Notes |
|---|---|---|
| 1 | 001, 002 | No dependencies. Both can be opened in separate worktrees and worked simultaneously. |
| 2 | 003 | Start after 001 and 002 are merged. |
| 3 | 004, 005 | Both unblocked by 003. Can be picked up in parallel worktrees once 003 is merged. |
## Picking up an issue
1. Verify all blockers for the issue are merged — do not start against unmerged dependency branches
2. Invoke the `/implement-spec` skill — this guides you through creating a worktree entry, implementing the feature or task, and raising a PR
List all issues created with their titles and a one-line description. Flag any scope items from the source plan that were deliberately excluded and why.
No local files are written. GitHub's native sub-issue and issue-dependency relationships replace the numbered files, README, and mermaid map — the parent issue page will render the hierarchy and blockers directly.
<!-- github-issue: #N https://github.com/<owner>/<repo>/issues/N --> stamp, use that as the parent.gh issue view <parent> --json body -q .body (or read from the local file).Same analysis as local mode Step 2. Identify discrete units of work and their dependency order before creating anything on GitHub. Do this work in memory — do not write scratch files.
Keep sub-issue bodies minimal — GitHub renders the parent link and blocking relationships natively, so duplicating them in the body is noise.
Each sub-issue body must follow this structure:
## Parent spec
#<parent-number>
## Summary
<One sentence naming what this issue builds.>
## Scope
<Concise bullet points per file or component — name the method, field, or route and state what it does in one line. Point to the relevant section of the parent spec rather than repeating it.>
## Files to create/modify
**New:**
- `<path>`
**Modified:**
- `<path>` — <what changes>
_(omit a category if empty)_
Do not include a "Blockers" or "Unblocks" section — GitHub's dependency graph on the parent and on each sub-issue shows this.
Gate: Only proceed once the user has approved the proposal (see Proposal & Approval). This is especially important in online mode — created GitHub issues can't be cleanly undone, only closed.
For each decomposed issue, in dependency order (earliest dependencies first):
/tmp/subissue-<slug>-<timestamp>.md. /tmp is self-cleaning on reboot.gh issue create --title "<Title>" --body-file /tmp/subissue-<slug>-<timestamp>.md
Capture the new issue's number and node ID. Get the ID via:
gh api "/repos/<owner>/<repo>/issues/<number>" --jq .id
gh api -X POST "/repos/<owner>/<repo>/issues/<parent>/sub_issues" -F sub_issue_id=<child_id>
gh api with the current dependencies endpoint (the agent should verify exact syntax against GitHub's docs at the time of execution; the relationship is "this issue is blocked by "). If the API call fails, fall back to adding a Blocked by #N line in the issue body so the relationship is at least human-readable.After all sub-issues are created:
gh api "/repos/<owner>/<repo>/issues/<parent>/sub_issues").Report back with:
Do not instruct the user to look at local files — there are none.