Skip to main content

issues-from-plan

Break a plan into independently-grabbable GitHub issues. Use when the user says "create issues from this plan", "break this into tickets", "file issues", or wants to distribute plan steps across a team.

Source facts

Repository
bdfinst/agentic-dev-team
Last source activity
August 4, 2026 at 18:58
Detected SKILL.md language
English
Stars
295
Forks
36

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
issues-from-plan
description
Break a plan into independently-grabbable GitHub issues. Use when the user says "create issues from this plan", "break this into tickets", "file issues", or wants to distribute plan steps across a team.
argument-hint
[plan file path]
user-invocable
true
allowed-tools
Read, Glob, Grep, Bash, Write
# Issues from Plan Role: orchestrator. Break an implementation plan into GitHub issues that can be worked independently. ## Orchestrator constraints 1. Decompose the plan into issues; do not implement. 2. Preserve plan ordering and dependencies as issue links. 3. **Be concise.** Report created issue numbers, no narration. ## Process ### 1. Find the Plan If a path is provided in arguments, read that file. Otherwise, look for the most recent plan in: - Active plan in conversation context - `.claude/memory/` directory (phase progress files) - `plans/` directory Arguments: $ARGUMENTS If no plan is found, ask the user to point you to one. ### 2. Analyze the Plan Read the plan and identify each **slice** (`### Slice <id>:`), its acceptance criteria, and the shared architectural decisions. Derive the dependency links from the **DAG, not file order** — do not hand-infer them: ```bash python3 "${CLAUDE_PLUGIN_ROOT}/scripts/issue_deps.py" <plan-file> ``` This returns `{ "<slice>": ["<dep slice>", ...] }` — each slice's direct predecessors. A slice listed earlier in the file carries **no** dependency on a later one unless the DAG says so. Then locate the plan's **spec** (the linked spec artifact or `docs/specs/<...>.md`); it becomes the **parent** issue. **If the plan has no associated spec, report that and create no parent issue** (and no children) — stop here. ### 3. Draft Issues For each unit of work, draft an issue with: - **Title**: a Conventional Commit — `<type>: <short, action-oriented summary>` (e.g., `feat: add user authentication endpoint`), matching `commitlint.config.js`'s ruleset. These titles seed branch names, PR titles, and release versions once the sub-issue's PR merges, and `.github/workflows/issue-title-lint.yml` labels `needs-conventional-title` on anything that doesn't conform — check proactively instead of relying on that backstop: `printf '%s' "<title>" | npx commitlint --verbose`. If it exits non-zero, fix the title before creating the issue. - **Body**: - What to build (behavior description, not implementation details) - Acceptance criteria as checkboxes - Dependencies on other issues (by title reference) - Relevant architectural decisions from the plan - Testing approach - **Labels**: suggest appropriate labels if the repo uses them ### 4. Review with User Present the issue list as a numbered summary: ``` 1. [Title] — [one-line description] (depends on: none) 2. [Title] — [one-line description] (depends on: #1) 3. [Title] — [one-line description] (depends on: #1) ... ``` Ask: "Does this breakdown look right? Should any issues be merged or split?" Wait for approval before creating. ### 5. Create Issues (parent spec, then slice children) Create the **parent** issue from the spec first, then one **child** issue per slice linked to it, then backfill the sibling `depends on #N` links from the `scripts/issue_deps.py` map: 1. **Parent (spec):** `gh issue create` from the spec (intent + acceptance summary); capture its number as `$PARENT`. If step 2 found no spec, skip everything — no parent, no children. 2. **Children (slices):** for each slice, `gh issue create` with `Part of #$PARENT` in the body. Record the **slice-id → issue-number** mapping as you go. 3. **DAG links:** for each slice, look up its predecessors from the `scripts/issue_deps.py` map, translate them to the child issue numbers, and set the child's `## Depends On` to `depends on #N` for each (a slice with no predecessors says "none"). Links come from the DAG map, never from file order. 4. **Partial-failure safety:** if any `gh` call fails partway, do **not** abort silently — report which issues were created (with numbers) and which were not, then let the plan flow continue. Never leave a half-created state unreported. ```bash gh issue create --title "Issue title" --body "$(cat <<'EOF' ## What to Build [Behavior description — what this slice delivers end-to-end] Part of #<parent> ## Depends On - #<number>: [brief reason] <!-- from scripts/issue_deps.py; "none" if no predecessors --> ## Acceptance Criteria - [ ] Criterion 1 - [ ] Criterion 2 - [ ] All tests pass ## Architectural Context [Relevant decisions from the plan that apply to this issue] ## Testing Approach [What to test and how — behavior-level, not implementation-level] EOF )" ``` ### 6. Present Results List all created issue URLs with their titles. Note the dependency graph.
View on GitHub