From flow
Decomposes large projects into GitHub issues with sub-issue relationships, blocked-by dependencies, milestones, and phase labels for autonomous execution.
npx claudepluginhub benkruger/flowThis skill uses the workspace's default tool permissions.
Decompose a large project into many GitHub issues with native sub-issue
Decomposes user requests into requirements and TODOs, clarifies ambiguities via questions, then bulk-creates GitHub Issues per task in dependency order with structured bodies, priorities, estimates, and labels.
Manages GitHub Issues workflows with parent-child hierarchies, sub-issues, closing keywords, branch creation via gh issue develop, and cross-repo coordination for issue tracking strategies.
Creates pre-planned GitHub issues from brainstormed conversation solutions, including Implementation Plan sections (Context, Exploration, Risks, Approach, Tasks) for fast Plan phase execution.
Share bugs, ideas, or general feedback.
Decompose a large project into many GitHub issues with native sub-issue
relationships, blocked-by dependencies, milestones, and phase labels.
Produces a fully linked issue graph ready for autonomous execution via
/flow:flow-start or /flow:flow-orchestrate.
/flow:flow-decompose-project <project description>
/flow:flow-decompose-project --step 2 --id <id>
/flow:flow-decompose-project --step 3 --id <id>
/flow:flow-decompose-project --step 4 --id <id>
/flow:flow-decompose-project --step 5 --id <id>
/flow:flow-decompose-project --step 6 --id <id>
/flow:flow-decompose-project <project description> — start from Step 1/flow:flow-decompose-project --step N --id <id> — self-invocation: resume at Step N"Project description required. Usage:
/flow:flow-decompose-project <project description>"
No interactive prompt. The user re-runs the command with arguments.
This skill creates shared GitHub state (issues, milestones, labels,
sub-issue relationships, dependencies). Session state is tracked in
.flow-states/decompose-project-<id>.json with a unique ID per session
to prevent concurrent collisions. Issue creation is idempotent by title.
If --step N --id <id> was passed, this is a self-invocation from a
previous step. The --id flag carries the session-scoped identifier
generated in Step 1. Skip the Announce banner and jump directly to the
Resume Check, using the provided <id> for all file paths.
If no --step flag was passed, proceed to Announce and then Step 1.
At the very start, output the following banner in your response (not via Bash) inside a fenced code block:
```text
──────────────────────────────────────────────────
FLOW v1.1.0 — flow:flow-decompose-project — STARTING
──────────────────────────────────────────────────
```
Use the Read tool to read .flow-states/decompose-project-<id>.json, where
<id> is the session identifier from the --id flag. If no --id flag
was passed (first run), there is no file to read — proceed to Step 1.
Dispatch based on decompose_step:
0 or absent — proceed to Step 11 — skip to Step 22 — skip to Step 33 — skip to Step 44 — skip to Step 55 — skip to Step 6Output in your response (not via Bash) inside a fenced code block:
```text
── Step 1 of 6: Describe and Decompose ──
```
Take the user's project description and invoke the decompose:decompose
plugin via the Skill tool. The decomposition must include deep codebase
exploration using Glob, Grep, and Read to ground every finding.
Present the full DAG synthesis to the user.
Ask the user to review the decomposition using AskUserQuestion:
${CLAUDE_PLUGIN_ROOT}/bin/flow generate-id via the Bash tool.
Write {"decompose_step": 1} to
.flow-states/decompose-project-<id>.json using the Write tool.
Save the full decompose output to
.flow-states/decompose-project-<id>-dag.md using the Write tool.
Then invoke flow:flow-decompose-project --step 2 --id <id> using
the Skill tool as your final action.decompose:decompose with feedback, present
the updated synthesis, and ask again.Do not proceed to Step 2 without explicit user approval. Do not propose direct edits, commit changes, or take any action outside this skill.
Output in your response (not via Bash) inside a fenced code block:
```text
── Step 2 of 6: Review Issue List ──
```
Use the Read tool to read the DAG output from
.flow-states/decompose-project-<id>-dag.md.
From the DAG synthesis, build a complete issue list:
For each child issue, draft:
decomposed plus the auto-derived phase labelPresent the full issue list as a table:
| # | Title | Phase | Depends On |
|---|---|---|---|
| 1 | Epic: <project_name> | — | — |
| 2 | Phase 1: API | — | |
| 3 | Phase 1: API | 2 |
Below the table, show each issue's full body text so the user can review every detail.
Ask the user for the milestone due date and approval using AskUserQuestion:
"Review the issue list above. What is the milestone due date (YYYY-MM-DD)? Enter a date to proceed, or 'revise' to make changes."
{"decompose_step": 2, "due_date": "<date>"} to
.flow-states/decompose-project-<id>.json using the Write tool.
Save the approved issue list to
.flow-states/decompose-project-<id>-issues.json using the Write
tool (array of {title, body, labels, depends_on_indices} objects).
Then invoke flow:flow-decompose-project --step 3 --id <id> using
the Skill tool as your final action.Do not proceed to Step 3 without explicit user approval. Do not propose direct edits, commit changes, or take any action outside this skill.
Output in your response (not via Bash) inside a fenced code block:
```text
── Step 3 of 6: Create Epic and Milestone ──
```
Use the Read tool to read the session state from
.flow-states/decompose-project-<id>.json to get the due_date.
Use the Read tool to read the approved issue list from
.flow-states/decompose-project-<id>-issues.json.
Detect the repo:
git remote get-url origin
Parse owner/repo from the remote URL.
Create the milestone:
${CLAUDE_PLUGIN_ROOT}/bin/flow create-milestone --repo <repo> --title "<project_name>" --due-date <due_date>
Parse the JSON output. Record the milestone number.
Create the parent epic issue. The --milestone flag accepts the milestone
title (not the numeric ID) — use the same <project_name> that was passed
to create-milestone --title. Write the epic body to
.flow-states/decompose-project-<id>-epic-body using the Write tool, then:
${CLAUDE_PLUGIN_ROOT}/bin/flow issue --repo <repo> --title "Epic: <project_name>" --body-file .flow-states/decompose-project-<id>-epic-body --milestone "<project_name>"
Parse the JSON output. Record the epic issue number and database ID.
Update the session state with milestone and epic info. Write the updated
state to .flow-states/decompose-project-<id>.json using the Write tool,
adding milestone_number, epic_number, and epic_id fields.
Set decompose_step to 3.
Then invoke flow:flow-decompose-project --step 4 --id <id> using the
Skill tool as your final action.
Output in your response (not via Bash) inside a fenced code block:
```text
── Step 4 of 6: Create Child Issues ──
```
Use the Read tool to read the session state and approved issue list.
Create each child issue in topological order (leaves first). For each:
Write the issue body to .flow-states/decompose-project-<id>-issue-body
using the Write tool, then create the issue:
${CLAUDE_PLUGIN_ROOT}/bin/flow issue --repo <repo> --title "<title>" --body-file .flow-states/decompose-project-<id>-issue-body --label decomposed --milestone "<project_name>"
Parse the JSON output and record {title, number, id} in the mapping.
Record the issue (no-op if no FLOW feature is active):
${CLAUDE_PLUGIN_ROOT}/bin/flow add-issue --label decomposed --title "<title>" --url "<issue_url>" --phase flow-decompose-project
After all issues are created, write the complete mapping to the session
state file (issues array with {title, number, id} objects).
Set decompose_step to 4.
Then invoke flow:flow-decompose-project --step 5 --id <id> using the
Skill tool as your final action.
Output in your response (not via Bash) inside a fenced code block:
```text
── Step 5 of 6: Link Relationships ──
```
Use the Read tool to read the session state to get epic_number and
the issues mapping.
For each child issue, link it as a sub-issue of the epic:
${CLAUDE_PLUGIN_ROOT}/bin/flow create-sub-issue --repo <repo> --parent-number <epic_number> --child-number <child_number>
Best-effort — log failures but continue.
For each child issue that has dependencies, create the blocked-by link:
${CLAUDE_PLUGIN_ROOT}/bin/flow link-blocked-by --repo <repo> --blocked-number <child_number> --blocking-number <dep_number>
Best-effort — log failures but continue.
Set decompose_step to 5 in the session state.
Then invoke flow:flow-decompose-project --step 6 --id <id> using the
Skill tool as your final action.
Output in your response (not via Bash) inside a fenced code block:
```text
── Step 6 of 6: Report ──
```
Use the Read tool to read the session state.
Present a summary table:
| # | Title | Issue | Phase | Dependencies |
|---|---|---|---|---|
| — | Epic: | #N | — | — |
| 1 | #N | Phase 1 | — | |
| 2 | #N | Phase 1 | #N |
Include:
Clean up the session files:
rm .flow-states/decompose-project-<id>.json .flow-states/decompose-project-<id>-dag.md .flow-states/decompose-project-<id>-issues.json
Output the COMPLETE banner:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ FLOW v1.1.0 — flow:flow-decompose-project — COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
bin/flow issue script handles cleanupbin/flow calls use ${CLAUDE_PLUGIN_ROOT}/bin/flow<id> prefix to prevent concurrent collisions