/plan-to-issues
Batch-convert plan mode output into GitHub issues (--quick for fast mode)
$ npx -y skills add akaszubski/autonomous-dev --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/plan-to-issues
Context preview
What this command does when you run it.
Batch-convert plan mode output into GitHub issues (--quick for fast mode)
Command definition
plan-to-issues.mdname: plan-to-issues
description: "Batch-convert plan mode output into GitHub issues (--quick for fast mode)"
argument-hint: "[--quick] (e.g., '/plan-to-issues' or '/plan-to-issues --quick')"
allowed-tools: [Agent, Read, Bash, Grep, Glob]
disable-model-invocation: false
user-invocable: true
user_facing: true
Batch-Convert Plan into GitHub Issues
Convert plan mode output (or any discussed plan) into individual, trackable GitHub issues.
> **Note**: `/plan` automatically runs issue creation in quick mode after plan-critic PROCEED. Use `/plan-to-issues` directly for thorough mode (full section templates) or if auto-creation was skipped (`--no-issues`).
Modes
| Mode | Time | Description | |------|------|-------------| | **Default (thorough)** | 10-15 min | Full issue bodies with all sections | | **--quick** | 5-8 min | Summary, Implementation, Acceptance Criteria only |
Implementation
**CRITICAL**: Follow these steps in order. Each checkpoint validates before proceeding.
ARGUMENTS: {{ARGUMENTS}}
---
STEP 0: Parse Arguments
Parse the `{{ARGUMENTS}}` placeholder for flags:
--quick Fast mode (fewer sections per issue, no prompts)
If `--quick` is present, set quick_mode=true. Everything else is ignored (plan comes from context).
---
STEP 0.5: Detect Plan Files
Detect whether `.claude/plans/` directory exists and contains plan files:
ls -la .claude/plans/*.md 2>/dev/null
If plan files are found, offer them as the input source instead of conversation context:
Found plan files in .claude/plans/:
- feature-name.md (created 2h ago)
- other-feature.md (created 1d ago)
Use plan file as input? (recommended if you just ran /plan)
1. Use latest plan file
2. Use conversation context (default)
If the user selects a plan file, read its contents and use that as the plan source for Step 1.
---
STEP 1: Extract Plan Items
The plan is in the **current conversation context** (or from a `.claude/plans/` file selected in Step 0.5). Extract individual work items by scanning for structural markers:
**Patterns to match** (in order of specificity): 1. Numbered lists: `1. Item description`, `2. Another item` 2. Bold bullet items: `- **Phase 1: Name** -- description` 3. Section headers: `## Phase 1: Name` 4. Task items: `- [ ] Task description`, `- [x] Done task` 5. Unicode markers: `task description` 6. Phase/step labels: `Phase N:`, `Step N:`
**Each extracted item needs**:
- A short title (suitable for GitHub issue title, prefixed with `feat:`, `fix:`, `refactor:`, etc.)
- A description (the content/details associated with that item)
**Plan mode exit marker**: Detect `.claude/plan_mode_exit.json`. If it exists, note it as confirmation that plan mode was used. Read any `plan_content` field from the marker to supplement extraction.
**If no items can be extracted**: Prompt the user to describe the plan items explicitly. Do NOT proceed without items.
---
CHECKPOINT: Validate Extraction
Verify:
- At least 1 item was extracted
- Cap at 20 issues maximum (if more than 20, warn the user and ask them to prioritize)
- Display the extracted items in a numbered list:
Extracted N plan items:
1. feat: Project model system -- Core data model for projects
2. feat: Recipe YAML configs -- Configuration file format
3. refactor: CLI argument parser -- Modernize argument handling
...
Are these correct? Reply 'yes' to proceed, or describe corrections.
**REQUIRE** explicit user confirmation before proceeding. Do NOT auto-proceed.
---
STEP 2: Generate Issue Bodies
For each extracted item, invoke the **issue-creator** agent (subagent_type="issue-creator") with:
- The item title and description
- Mode flag (quick or default)
**In --quick mode**: Tell the agent to include ONLY: 1. Summary (1-2 sentences) 2. Implementation Approach 3. Acceptance Criteria
**In default mode**: Tell the agent to include the full template (Summary, What Does NOT Work, Scenarios, Implementation Approach, Test Scenarios, Acceptance Criteria).
**CRITICAL**: Run issue-creator calls SEQUENTIALLY (one at a time), not in parallel. Parallel calls would explode context size.
Collect the generated title and body for each item.
---
STEP 3: Preview Table
Display a dry-run table showing all issues that will be created:
Issues to create (N total):
# | Title | Sections
--|------------------------------------|---------
1 | feat: Project model system | 6
2 | feat: Recipe YAML configs | 6
3 | refactor: CLI argument parser | 3
...
Create these N issues? Reply 'yes' to proceed, 'no' to cancel.
**REQUIRE** explicit user confirmation. Do NOT proceed without it.
---
STEP 4: Create Issues
For each confirmed item, use the Bash tool:
1. Write the issue body to a temp file (include `**Plugin Version**: $(python3 -c "import sys,os;next((sys.path.insert(0,p) for p in ('.claude/lib','plugins/autonomous-dev/lib',os.path.expanduser('~/.claude/lib')) if os.path.isdir(p)),None);from version_reader import get_plugin_version;print(get_plugin_version())" 2>/dev/null || echo unknown)` at the end of the body):
cat > /tmp/plan_issue_N.md << 'ISSUE_EOF'
<issue body content>
ISSUE_EOF
2. Sanitize the title:
- Strip backticks, semicolons, pipes, dollar signs
- Limit to 256 characters
- Escape double quotes
3. Before the first issue, create the command context file to allow gh issue create (Issue #599). **MUST be its OWN STANDALONE Bash tool call**, run BEFORE any `gh issue create` invocation:
python3 -c "
import json; from datetime import datetime, timezone
with open('/tmp/autonomous_dev_cmd_context.json', 'w') as f:
json.dump({'command': 'plan-to-issues', 'timestamp': datetime.now(timezone.utc).isoformat()}, f)
"**Prior-call ordering contract (Issue #1203)**: the PreToolUse hook evaluates each Bash inv
Read more
name: plan-to-issues description: "Batch-convert plan mode output into GitHub issues (--quick for fast mode)" argument-hint: "[--quick] (e.g., '/plan-to-issues' or '/plan-to-issues --quick')" allowed-tools: [Agent, Read, Bash, Grep, Glob] disable-model-invocation: false user-invocable: true user_facing: true
Batch-Convert Plan into GitHub Issues
Convert plan mode output (or any discussed plan) into individual, trackable GitHub issues.
> **Note**: `/plan` automatically runs issue creation in quick mode after plan-critic PROCEED. Use `/plan-to-issues` directly for thorough mode (full section templates) or if auto-creation was skipped (`--no-issues`).
Modes
| Mode | Time | Description | |------|------|-------------| | **Default (thorough)** | 10-15 min | Full issue bodies with all sections | | **--quick** | 5-8 min | Summary, Implementation, Acceptance Criteria only |
Implementation
**CRITICAL**: Follow these steps in order. Each checkpoint validates before proceeding.
ARGUMENTS: {{ARGUMENTS}}
---
STEP 0: Parse Arguments
Parse the `{{ARGUMENTS}}` placeholder for flags:
--quick Fast mode (fewer sections per issue, no prompts)
If `--quick` is present, set quick_mode=true. Everything else is ignored (plan comes from context).
---
STEP 0.5: Detect Plan Files
Detect whether `.claude/plans/` directory exists and contains plan files:
ls -la .claude/plans/*.md 2>/dev/null
If plan files are found, offer them as the input source instead of conversation context:
Found plan files in .claude/plans/: - feature-name.md (created 2h ago) - other-feature.md (created 1d ago) Use plan file as input? (recommended if you just ran /plan) 1. Use latest plan file 2. Use conversation context (default)
If the user selects a plan file, read its contents and use that as the plan source for Step 1.
---
STEP 1: Extract Plan Items
The plan is in the **current conversation context** (or from a `.claude/plans/` file selected in Step 0.5). Extract individual work items by scanning for structural markers:
**Patterns to match** (in order of specificity): 1. Numbered lists: `1. Item description`, `2. Another item` 2. Bold bullet items: `- **Phase 1: Name** -- description` 3. Section headers: `## Phase 1: Name` 4. Task items: `- [ ] Task description`, `- [x] Done task` 5. Unicode markers: `task description` 6. Phase/step labels: `Phase N:`, `Step N:`
**Each extracted item needs**:
- A short title (suitable for GitHub issue title, prefixed with `feat:`, `fix:`, `refactor:`, etc.)
- A description (the content/details associated with that item)
**Plan mode exit marker**: Detect `.claude/plan_mode_exit.json`. If it exists, note it as confirmation that plan mode was used. Read any `plan_content` field from the marker to supplement extraction.
**If no items can be extracted**: Prompt the user to describe the plan items explicitly. Do NOT proceed without items.
---
CHECKPOINT: Validate Extraction
Verify:
- At least 1 item was extracted
- Cap at 20 issues maximum (if more than 20, warn the user and ask them to prioritize)
- Display the extracted items in a numbered list:
Extracted N plan items: 1. feat: Project model system -- Core data model for projects 2. feat: Recipe YAML configs -- Configuration file format 3. refactor: CLI argument parser -- Modernize argument handling ... Are these correct? Reply 'yes' to proceed, or describe corrections.
**REQUIRE** explicit user confirmation before proceeding. Do NOT auto-proceed.
---
STEP 2: Generate Issue Bodies
For each extracted item, invoke the **issue-creator** agent (subagent_type="issue-creator") with:
- The item title and description
- Mode flag (quick or default)
**In --quick mode**: Tell the agent to include ONLY: 1. Summary (1-2 sentences) 2. Implementation Approach 3. Acceptance Criteria
**In default mode**: Tell the agent to include the full template (Summary, What Does NOT Work, Scenarios, Implementation Approach, Test Scenarios, Acceptance Criteria).
**CRITICAL**: Run issue-creator calls SEQUENTIALLY (one at a time), not in parallel. Parallel calls would explode context size.
Collect the generated title and body for each item.
---
STEP 3: Preview Table
Display a dry-run table showing all issues that will be created:
Issues to create (N total): # | Title | Sections --|------------------------------------|--------- 1 | feat: Project model system | 6 2 | feat: Recipe YAML configs | 6 3 | refactor: CLI argument parser | 3 ... Create these N issues? Reply 'yes' to proceed, 'no' to cancel.
**REQUIRE** explicit user confirmation. Do NOT proceed without it.
---
STEP 4: Create Issues
For each confirmed item, use the Bash tool:
1. Write the issue body to a temp file (include `**Plugin Version**: $(python3 -c "import sys,os;next((sys.path.insert(0,p) for p in ('.claude/lib','plugins/autonomous-dev/lib',os.path.expanduser('~/.claude/lib')) if os.path.isdir(p)),None);from version_reader import get_plugin_version;print(get_plugin_version())" 2>/dev/null || echo unknown)` at the end of the body):
cat > /tmp/plan_issue_N.md << 'ISSUE_EOF' <issue body content> ISSUE_EOF
2. Sanitize the title:
- Strip backticks, semicolons, pipes, dollar signs
- Limit to 256 characters
- Escape double quotes
3. Before the first issue, create the command context file to allow gh issue create (Issue #599). **MUST be its OWN STANDALONE Bash tool call**, run BEFORE any `gh issue create` invocation:
python3 -c "
import json; from datetime import datetime, timezone
with open('/tmp/autonomous_dev_cmd_context.json', 'w') as f:
json.dump({'command': 'plan-to-issues', 'timestamp': datetime.now(timezone.utc).isoformat()}, f)
"**Prior-call ordering contract (Issue #1203)**: the PreToolUse hook evaluates each Bash inv
A harness that wraps Claude Code with enforcement, specialist agents, and alignment gates to deliver consistent, production-grade software engineering outcomes.
Repo: akaszubski/autonomous-dev
Other commands on autonomous-dev.
- /advise
Critical thinking analysis - validates alignment, challenges assumptions, identifies risks
Open command - /align
Unified alignment command (--project, --docs, --retrofit, --content)
Open command - /audit
Comprehensive quality audit - code quality, documentation, coverage, security
Open command - /autoresearch
Autonomous experiment loop — hypothesize, modify, benchmark, commit or revert
Open command - /create-issue
Create GitHub issue with automated research (--quick for fast mode)
Open command - /drain-queue
Autonomous queue drainer — picks the top /triage cluster, applies safety gates, drains via /implement --issues, pushes, deploys.
Open command

