Appearance
to-issues
to-issues
towriteshands-off
Use this when: a plan needs breaking into typed, grabbable issues
Problem it solves — A plan in your head isn't grabbable work. This breaks a plan, spec, or PRD into typed, independently-shippable tracer-bullet issues on the board, then hands off to triage and organise.
Used in workflows: Idea → shipped
To issues
Break a plan into independently-grabbable, typed issues — tracer-bullet vertical slices — and put them on the board, classified and placed.
Task class: create (issue authoring). Tools: gh (issues + native Issue Types + Projects v2), Read/codegraph for context. Runs in-thread.Artifact: filed issues typed Epic/Sprint/Task, sub-issue-linked, with native blocked-by deps — classified by triage, placed by organise, default backlog (no milestone).
Process
- Gather context. Work from the plan/spec already in the conversation; if a reference (issue number / URL / path) is passed, fetch and read it fully.
- Explore the code via codegraph — titles use the domain glossary, respect ADRs.
- Draft vertical slices — tracer bullets. Each slice cuts a thin but COMPLETE path through every layer (schema → API → UI → tests), demoable on its own; prefer many thin over few thick. Mark each HITL (needs a human — design call, manual testing) or AFK (an agent can finish it); prefer AFK.
- Atomicity check: a slice whose title needs an "and" is two slices — split it. Use file-touch as a sizing smell (XS 1–2, S–M 3–5, L 5–8 files); an XL slice isn't a slice yet — break it down further before it goes on the board.
This is the skill — quiz before you file
Present the breakdown as a numbered list — Title · Issue Type (Epic/Sprint/Task) · HITL/AFK · Blocked by · Area. Ask: granularity right? deps right? split/merge any? types right? Iterate until approved — the cut is the value; a wrong slice ships wrong work hands-off.
Publish (on approval, in dependency order)
- Create each issue with its native Issue Type (
gh api -X PATCH repos/{o}/{r}/issues/{n} -f type=Epic|Sprint|Task), default no milestone → backlog. Write each issue body perdocs/agents/pr-writing.md— plain lead, a> [!IMPORTANT]decision alert when the slice carries a decision, emoji-anchored##headings, and footnote attribution (never an inline line). - Link the tree (Epic ⊃ Sprint ⊃ Task) via
sub_issues; set native blocked-by deps (…/dependencies/blocked_by) in dependency order so real numbers resolve. - Call
triage(set Status + the Area label — App/Harness) andorganise(parent / milestone / board order). Surface-then-confirm — you approve before any write. (Until the Projects board exists, these degrade gracefully — seetriage.) - Don't close or modify a parent issue.
Issue body template
markdown
## What to build
End-to-end behaviour of this slice (not layer-by-layer). No file paths/line numbers.
## Acceptance criteria
- [ ] … and the gate is green (`composer ci:check` / `harness:check`)
## Blocked by
- #NN (or "None — can start immediately")An AFK slice headed for hands-off execution gets a fuller agent brief at triage — the durable contract the executor works from. Match that shape:
docs/agents/agent-brief.md.
Where it sits
find-untracked-work / brainstorm feed it → to-issues creates → triage classifies → organise places → build-sprint/build-epic execute. NOT organise (places) / triage (classifies one) / the build-* executors.