원클릭으로
vs-to-issues
Use when asked to turn a plan, spec, RFC, or brief into vertical-slice GitHub issues with handoff-ready bodies.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when asked to turn a plan, spec, RFC, or brief into vertical-slice GitHub issues with handoff-ready bodies.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | vs-to-issues |
| description | Use when asked to turn a plan, spec, RFC, or brief into vertical-slice GitHub issues with handoff-ready bodies. |
| disable-model-invocation | true |
Take a plan, spec, RFC, or brief and turn it into a set of GitHub issues that an agent (or human) can pick up and ship independently. Each issue is a vertical slice with its own acceptance criteria, labeled for human-in-the-loop or AFK execution, and wired into a blocking dependency graph.
This skill exists because most plans die at the "now what?" moment. The plan is solid but the jump from prose to concrete, bounded, assignable work is too high. /vs-to-issues makes that jump mechanical.
When running in Codex, use
../vs-internal-shared/references/codex-goal.md
for standalone-goal rules.
To-issues normally contributes handoff material to a larger planning workflow. If invoked as the whole task, it may own a goal to turn the source plan into durable GitHub issues or draft issue files. Complete that goal only after the draft set is approved and created, or after draft files/index are written when GitHub issue creation is unavailable or not approved. Do not treat the later implementation of those issues as part of the to-issues goal.
~/.vs/$PROJECT_ID/specs/, in a doc, or verbally) and the user wants to file it as ticketsIf the plan is still fuzzy on terminology or framing, route to /vs-shape-it first. If the plan hasn't been stress-tested, route to /vs-pushback first.
Before slicing:
gh label list), and any AGENTS.md / CLAUDE.md / CONTRIBUTING.md conventions.docs/agents/issue-tracker.md exists, follow it. Otherwise, check AGENTS.md for an Agent skills / issue workflow section. If neither exists:
~/.vs/$PROJECT_ID/issues/ and do not call gh issue create.gh issue list --search "<relevant keyword>". If GraphQL quota blocks gh issue list, parse REPO from git config --get remote.origin.url and use REST search:
REPO=$(git config --get remote.origin.url | sed -E 's#\.git$##; s#.*[:/]([^/]+/[^/]+)$#\1#')
gh api "search/issues?q=repo:$REPO+is:issue+state:open+<keyword>"
Do not create duplicates; extend or link instead.Resolve $PROJECT_ID per ../vs-internal-shared/SKILL.md so the index file ends up in the right place.
Map canonical roles to the repo's actual labels before drafting issues. Use existing labels when they clearly match; create only missing defaults.
| Role | Default label | Meaning |
|---|---|---|
| State: needs review | needs-review | Draft or stub, not ready for execution |
| State: ready for agent | ready-for-agent | Self-contained enough for agent work |
| State: ready for human | ready-for-human | Needs human judgment before or during execution |
| Category: bug | bug | Defect / regression work |
| Category: enhancement | enhancement | New or changed behavior |
| AFK eligibility | afk-safe | Safe for unattended agent runs |
| Human-in-loop note | hitl | A specific human decision point remains |
Every created issue gets exactly one state label and at most one category label. Use afk-safe and hitl as optional tags, not as replacements for the state label. If a local convention maps these roles to different labels, use the local names consistently.
A good issue is a vertical slice: a small end-to-end change that, when merged, moves the product forward visibly. Horizontal slicing (DB layer issue, then API layer issue, then UI layer issue) is the failure mode — each horizontal slice is un-shippable alone and the integration issue becomes a mega-issue.
Rules for slicing:
blocked by dependency, don't merge themTypical slice count for a medium plan: 3–8 issues. Fewer than 3 and you don't need this skill. More than 12 and the plan is too big to decompose in one pass — push back and ask the user to pick a Phase 1.
Every issue gets one of three execution tags:
| Role | Default label | Use when |
|---|---|---|
| State: ready for human | ready-for-human + optional hitl | Design decisions, UX calls, ambiguous specs, risky migrations |
| State: ready for agent | ready-for-agent + optional afk-safe | Clear acceptance criteria, stable interface, no surprises expected |
| State: needs review | needs-review | Use for drafts or stubs that need a second pass |
Default to ready-for-human unless the issue is genuinely afk-safe. If in doubt, the issue is not afk-safe. AFK issues that stall on a design question waste the agent's budget and the human's trust.
AFK-safe checklist (all must be true):
Every issue body follows the AGENT-BRIEF shape from ./references/agent-brief.md. Summary:
implements the design, no code reviewed. Phrase as When <input>, then <observable output>.Blocked by #<n>. GitHub renders these as a task graph.Durability rules (the whole reason this format exists):
CONTEXT.md.If the plan has details that are procedural or file-specific, they belong in a comment on the issue or in ~/.vs/$PROJECT_ID/issues/<issue-number>-notes.md, not in the body.
After drafting issue bodies, build the dependency graph:
Blocked by #<n> convention in the body — most GitHub UIs render this as a graphA healthy graph has a shallow root (one or two foundational slices) branching into parallelizable leaves.
First show the full draft set: every title, body, label set, dependency edge, and planned creation order. Get one explicit approval for the full set before creating anything. Do not create issues one-by-one while the user is still reviewing later drafts.
Use gh issue create for each approved GitHub issue. If GraphQL quota blocks create paths, use REST after deriving REPO from git config --get remote.origin.url:
gh api -X POST "repos/$REPO/issues" \
-f title="<one-sentence slice title>" \
-f body=@/tmp/issue-body.md \
-F labels='["ready-for-agent","enhancement","afk-safe"]'
Suggested flow:
gh issue create \
--title "<one-sentence slice title>" \
--body "$(cat <<'EOF'
## Context
...
## Behavioral outcome
...
## Acceptance criteria
- When <input>, then <observable output>
- ...
## Out of scope
- ...
## Dependencies
- Blocked by #<n>
EOF
)" \
--label "<state-label>,<category-label>,<optional-tags>"
Rules:
~/.vs/$PROJECT_ID/issues/<date>-plan-name.md and wait for approvalAfter all issues are created, write an index file to ~/.vs/$PROJECT_ID/issues/<date>-<plan-slug>.md:
# <Plan title> — issues
Source: <link to plan/spec/RFC>
Created: <YYYY-MM-DD>
## Issues
- [ ] #<n> <title> — <human-in-the-loop|afk> — blocks: #<m>,#<o>
- [ ] ...
## Graph
<ascii or mermaid graph of dependencies if the plan warrants it>
## Notes
<anything the agent needs that didn't fit an issue body>
This index is the single place the user can see the whole plan's state. It's not the source of truth — GitHub is — but it's the human-scale overview.
Emit a handoff block:
## To-Issues Handoff
- Plan source: <path or link>
- Issues created: <count> (<n> human-in-the-loop, <m> afk)
- Index: ~/.vs/$PROJECT_ID/issues/<file>.md
- Codex Goal: completed / left active because ... / unavailable
- Dependency depth: <max blocked-by chain length>
- Recommended next step:
- AFK: run `/vs-build-it` or dispatch agents against the afk-labeled issues
- HITL: pick up the first unblocked human-in-the-loop issue yourself
references/agent-brief.md../vs-internal-shared/SKILL.mdDirect: emit Next only. Composed: return to caller.
Prev: /vs-shape-it | /vs-pushback
Next: /vs-build-it
Relevant: /vs-improve | /vs-setup-adr
Analyze Codex, Claude Code, or Cursor threads, transcripts, and transcriptions. Use for thread analysis, transcript review, conversation audits, agent-performance diagnosis, comparing sessions, finding loops or corrections, and extracting decisions, outcomes, evidence, and actionable improvements.
Internal reference for vs shared conventions: artifact paths, project ID resolution, storage preference, and skill taxonomy.
Use when asked to scan a named external repo for ideas worth porting. Produces a cited, ranked steals report.
Use when asked to QA, test this site or app, find bugs, or test and fix a user-facing interface. Runs harness-aware browser or computer-use QA, fixes issues, and re-verifies.
Use when the user wants to create/open a pull request, submit changes for review, send changes to dev, or otherwise ship local Git changes. Also use for explicit commit and push or push to main/master or the current branch requests. Requires affirmative publish intent; do not use for review/readiness-only requests. Creates and verifies a GitHub PR by default; honors explicit direct pushes and babysits only when requested.
Use when asked to watch a PR, fix CI, address review comments, or keep a branch merge-ready in a loop.