plan-to-issues
Maps markdown plans to GitHub issues while maintaining the plan as the primary source of truth.
Install
mkdir -p .claude/skills/plan-to-issues && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13050" && unzip -o skill.zip -d .claude/skills/plan-to-issues && rm skill.zipInstalls to .claude/skills/plan-to-issues
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Sync or materialize GitHub issues and optional project tracking from the current plan artifact. Use when the user asks to create or update issues from a plan, wants a dry-run issue breakdown, or wants to project workstreams into a GitHub Project without replacing planning authority.Key capabilities
- →Create an epic and child issues from one plan.
- →Preview a leaf-issue, workstream, or phase mapping.
- →Update existing issue bodies or labels.
- →Prepare GitHub Project tracking.
- →Audit existing target issues and Project rows for duplicates.
- →Run a post-sync audit after mutation.
How it works
The skill parses a plan artifact, resolves its lifecycle mode, and then uses a Python script to project the plan into GitHub tracking objects, either as a dry-run or by applying changes.
Inputs & outputs
When to use plan-to-issues
- →Convert plan to issues
- →Sync roadmap to GitHub
- →Preview issue breakdown
About this skill
Plan To Issues
Purpose
Project the current plan artifact into GitHub tracking objects without replacing the markdown plan as the authoring surface or the compiled registry as planning authority where registry-first is active.
Use this skill for:
- creating an epic and child issues from one plan
- previewing a leaf-issue, workstream, or phase mapping before any GitHub writes
- updating existing issue bodies or labels to match the current plan
- preparing GitHub Project tracking for approved or stabilizing plans
Hard Rules
- The markdown plan remains the authoring write surface. In
registry-first, the compiled registry remains the local planning SSOT. Issues are a downstream execution projection. - Operate on exactly one plan artifact per run.
- If the user referenced a plan via
@pathin the latest message, that plan wins. - Echo the selection in chat as
AuthoringArtifact = <path>before doing any plan-to-issues work. - Default to dry-run. Only mutate GitHub when the user explicitly asks to apply or sync.
- Do not close or delete issues unless the user explicitly asks for pruning.
- Do not silently choose a repo or project. If unclear, ask.
- GitHub Projects v2 is execution UI/signal only. Board membership or field state must not be treated as planning input or planning truth.
- Before any apply/sync mutation, audit existing target issues and Project rows for duplicate or conflicting
SourceId/ plan-source mappings. A passing dry-run is not enough. - After any apply/sync mutation, run a post-sync audit and fail hard on missing
Priority, duplicateSourceId,agent-ready/ready states on issues larger than one point, Project-only rows without an issue-body source, or ProjectSizethat disagrees with issue body/labels. - If issues are added to multiple projects, distinguish the designated execution project from any advisory memberships and report that distinction back to the user.
Inputs
Collect or infer these inputs before proceeding:
- plan path
- target GitHub repo for the issues
- optional GitHub Project name or identifier
- strategy:
workstreams,phases, orleaf-issues - mode:
dry-runorapply
If the user wants Project tracking but has no existing Project URL, use github-project first to create or verify one, then pass its output as --project-url.
If the plan is still unstable, prefer dry-run and keep tracking metadata in draft mode.
Recommended plan metadata for stable projection:
- frontmatter
tracking.epicRepo - per-workstream
Issue ready: true|false - per-workstream
Target repo: <repo>[, <repo>...] - per-workstream
Blocked by: <workstream / merge point / gate refs> - per-workstream
Highest tier: T0..T6 - per-workstream
Points: 1|2|3|5|8|13 - per-workstream
Deployed closeout only: true|false
Projection Model
Default mapping:
- one plan -> one epic
- one Automation Issue Manifest leaf issue -> one story/task/spike (preferred when present)
- one workstream -> one story (legacy/fallback)
- one unresolved decision or bounded research item -> one spike
- named gates stay inside issue acceptance criteria unless they are standalone work
Use the plan's existing identifiers wherever possible:
- workstreams like
WS4-A - decisions like
DR-001 - gates like
G-WS4-Contract
Execution Steps
- Resolve the selected markdown authoring artifact.
- Resolve lifecycle mode (
legacy-plan,migration-bridge,registry-first). - Read the plan frontmatter and
## Implementation Plan. - In
registry-first, prefer compiled registry metadata for stable ids, execution repo, and routing; use markdown only as the amendment record and narrative context. - Decide whether the issue strategy is
leaf-issues,workstreams, orphases. Preferleaf-issueswhen## Automation Issue Manifestexists. - Run the parser script in dry-run first:
python skills/plan-to-issues/scripts/plan_to_issues.py --plan "<path>" --repo "<owner/repo>" --strategy leaf-issues --dry-run- If the user provides a GitHub Project URL, prefer
--project-url "<https://github.com/orgs/<owner>/projects/<number>>"over manually splitting owner and number.
- Review the preview:
- epic title/body
- child issue titles
- labels
- points
- dependencies
- blockers, merge points, named gates, repo-boundary hints, and deployed/manual validation requirements
- Before apply/sync, audit the target repo and execution Project for idempotency hazards:
- no duplicate
SourceId, manifest leaf id, workstream id, ortrackingIssuemapping across open issues or Project rows - every existing issue that would be updated has an issue-body source marker matching the plan item
- no Project-only row is treated as proof that an issue exists or is safe to update
- any conflict stops the run until the mapping is corrected or the user explicitly chooses the source to trust
- no duplicate
- If the user explicitly approves apply mode and the pre-apply audit passes, run:
python skills/plan-to-issues/scripts/plan_to_issues.py --plan "<path>" --repo "<owner/repo>" --apply
- Immediately after apply/sync, run
project-queue-auditon the created/updated issues and execution Project. Treat these as hard failures, not warnings:
- missing
Priority - duplicate
SourceId agent-ready,agent:ready,IssueReady=true, orAutomationState=Readyon issues withPoints/Sizegreater than1- Project-only rows with no matching GitHub issue body source marker
- Project
Sizethat disagrees with issue bodyPointsorpoints:*labels
- For the local Codex automation lane, use the installed runtime, not the source template:
python scripts/runtime_control.py queue --plan "<path>" --repo "<owner/repo>" --max-queue 1 --yes- Set
ATLAS_RUNTIME_DIRor pass--runtime-dir "<runtime-path>"before the subcommand when the target runtime is not the default Atlas runtime. - Do not run
templates/local-automation-runtime/atlas-agent-*directly; those files are source material and direct execution writesjobs/,repos/, and local config into the template tree. - Add
--publishonly when eligible queued issues should immediately run local workers and publish draft PRs.
- If a project is provided, add the created issues to the project using
ghafter issue creation, then rerun the post-sync audit for the affected rows. - Report the created or updated issues back to the user, including pre-apply and post-sync audit results.
Parser Notes
- Workstream extraction prefers bullet workstreams under
### Workstreams + merge pointswhen that block defines at least one workstream; otherwise it falls back to### WS* ...headings. --strategy leaf-issuesconsumes the canonical### Automation Issue Manifestsection and projects its executable leaves instead of workstream or phase buckets.## Automation Issue Manifest->### Leaf issuesis also accepted as a compatibility alias.- Manifest leaves should be bullets shaped as
- LEAF-001: Short executable titlewith nested metadata forDispatch,Points,Target repo,Files in scope,Validation,Depends on,External blockers,Manual blockers, andRequired gates. - Manifest leaves may include sidecar metadata:
Spec path,Spec hash,Spec id,Spec source id,Depth contract,Package id,Package hash, andProjection schema. Dry-run JSON and issue bodies project these fields when present. - Apply-style modes fail closed when a declared
Spec pathis missing, whenSpec hashis present without a path, or when the sidecar hash does not matchsha256:<64 lowercase hex chars>over normalized markdown. - For unattended local automation, prefer one-point manifest leaves (
Points: 1). Larger leaves should stay tracking/manual until decomposed into one-point child issues. - Manifest leaf issues emit automation metadata in dry-run JSON and issue bodies: source metadata, spec links/hashes,
dispatch_mode,write_scope,validation_commands, dependencies, gates, repo/base-branch routing, and dispatch guardrails. - Generated executable issues must include runtime execution-state fields:
Open dependencies:andManual gates remaining:. These are the local automation dispatch contract;## Dependenciesand Project fields are human/operator context. - Generated executable issues must include a stable body source marker such as
SourceId/ manifest leaf id / workstream id. Project fields may mirror it, but they must not be the only place it exists. Dispatch: agent-readywithPointsgreater than1is not unattended-ready. Treat it as tracking/manual until decomposed, even if other metadata looks queueable.- Leaf dependencies may be GitHub issue refs or sibling manifest leaf ids. Opaque text, merge points, gate ids, decisions, assumptions, and risks are treated as guardrails and force
tracking-onlydispatch until converted into explicit issue refs or runnable leaf ids. - Cross-walk subsections whose titles contain
->(for example### WS2 -> WS3 -> WS4 Status Mapping) are not treated as workstreams even if they match a looseWS*prefix. WS3plans use localG-WS3-*/ws3_*validation messaging for children and epic closeout text; generic deployed workflow parity gates are not injected onto the WS3 epic solely because the plan key matches the epic scope.- Dry-run output includes a stability summary so you can see whether the plan is ready for issue creation or still needs draft-only tracking.
Idempotency
- Prefer stable plan identifiers over title matching.
- If the plan includes
tracking:metadata or per-item issue references, reuse them. - If there is no stable mapping yet, create once and then patch the plan or a sidecar mapping on explicit user approval.
Guardrails
- Use
ghfor GitHub mutations. - Never write to GitHub in ask-only situations.
- Never dispatch from Project v2 fields alone. The reconciler must make issue bod
Content truncated.
When not to use it
- →When replacing the markdown plan as the authoring surface.
- →When replacing the compiled registry as planning authority.
- →When the user does not explicitly ask to apply or sync changes to GitHub.
Limitations
- →It operates on exactly one plan artifact per run.
- →It defaults to dry-run and only mutates GitHub when explicitly asked.
- →It does not silently choose a repo or project.
How it compares
This skill automates the synchronization of plan artifacts with GitHub issues and project tracking, including dry-run previews and idempotency checks, which is more structured than manually creating or updating issues.
Compared to similar skills
plan-to-issues side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| plan-to-issues (this skill) | 0 | 2mo | Review | Intermediate |
| task-master | 22 | 6mo | Review | Intermediate |
| agile-product-owner | 10 | 7mo | Review | Beginner |
| writing-plans | 15 | 3mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Atlas-Memory-Framework
View all by Atlas-Memory-Framework →You might also like
task-master
sfc-gh-dflippo
AI-powered task management for structured, specification-driven development. Use this skill when you need to manage complex projects with PRDs, break down tasks into subtasks, track dependencies, and maintain organized development workflows across features and branches.
agile-product-owner
davila7
Agile product ownership toolkit for Senior Product Owner including INVEST-compliant user story generation, sprint planning, backlog management, and velocity tracking. Use for story writing, sprint planning, stakeholder communication, and agile ceremonies.
writing-plans
obra
Use when you have a spec or requirements for a multi-step task, before touching code
feature-design-assistant
davila7
Turn ideas into fully formed designs and specs through natural collaborative dialogue. Use when planning new features, designing architecture, or making significant changes to the codebase.
task-coordination-strategies
wshobson
Decompose complex tasks, design dependency graphs, and coordinate multi-agent work with proper task descriptions and workload balancing. Use this skill when breaking down work for agent teams, managing task dependencies, or monitoring team progress.
github-project-management
ruvnet
Comprehensive GitHub project management with swarm-coordinated issue tracking, project board automation, and sprint planning