agentleFS
ZunoSmartLabsZunoSmartLabs/zsl-superpowers/skills/engineering/to-issues/SKILL.md

to-issues

Skill2 starsChanged 52 days agoMITView on GitHub

Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. Use when user wants to convert a plan into issues, create implementation tickets, or break down work into issues.

130 other projects use a version of this, 105 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use modern-go, zoom-out and 7 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • jidechaoSkill

    modern-go

    Modernize Go code by applying version-appropriate idioms and APIs (gofix-style transformations). Scans go.mod for the Go version, then transforms Go source files to use modern patterns—from Go 1.0 through 1.26+. Use when the user says "现代化","现代Go语言", "地道的", "idiomatic", "modernize", "modern-go", "update Go code", "gofix", or wants to upgrade Go idioms.

    Also in 3 projects that use this

  • victorgarciaesgiSkill

    zoom-out

    Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture.

    Also in 49 projects that use this

  • jidechaoSkill

    loop-it

    Automated issue loop with checkpoint/resume: fetch open GitHub issues → dependency-aware topological sort → implement each issue end-to-end → review with /review-it → document with /note-it → ship with /ship-it → repeat. Persists state to .loop-state.json for crash recovery. Triggers on: loop-it, loop issues, auto implement, 批量实现, 循环实现, 实现所有issue, 恢复循环, resume loop.

    Also in 3 projects that use this

  • simo97Skill

    request-refactor-plan

    Use this skill when user wants to create a refactor plan.

    Also in 18 projects that use this

  • simo97Skill

    write-a-skill

    Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.

    Also in 43 projects that use this

  • kennethkeimSkill

    ubiquitous-language

    Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".

    Also in 17 projects that use this

  • +2 more from jidechao
  • +1 more from simo97

The file

We split this skill into the rules it gives an agent

8 rules. 3 are common, 2 are distinctive, and 3 are very specific to this project.

  • 3

    Common

    Most of the 123 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Common:

    If you have not already explored the codebase, do so to understand the current state of the code.

    line 22
  2. Common:

    Prefer many thin slices over few thick ones </vertical-slice-rules>

    line 33
  3. Very specific:

    Letter suffix: when a wave has more than one slice, assign a, b, c...

    line 42
  4. Common:

    Should any slices be merged or split further?

    line 67
  5. Very specific:

    Write None — enabling/infrastructure slice for a slice that delivers no user-facing story on its own.

    line 126
  6. Distinctive:

    If a parent issue exists and the tracker supports sub-issues, link each child to the parent so the parent auto-closes when all children …

    line 141
  7. Very specific:

    GitHub: use the addSubIssue GraphQL mutation.

    line 143
  8. Distinctive:

    Do NOT close the parent or modify its body.

    line 152

“Common” is measured: kept by at least 6 in 10 of the 123 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

To Issues

Break a plan into independently-grabbable issues using vertical slices (tracer bullets).

The issue tracker and triage label vocabulary should have been provided to you — run /setup-zsl-superpowers if not.

Process

1. Gather context

Work from whatever is already in the conversation context. If the user passes an issue reference (issue number, URL, or path) as an argument, fetch it from the issue tracker and read its full body and comments.

Guard against a pull-request reference (GitHub trackers only). Resolve the reference the way docs/agents/issue-tracker.md prescribes for this repo's tracker — don't assume GitHub. The collision this guards against is GitHub-specific: GitHub shares one number space across issues and PRs, so a bare number (or gh issue view <N>) can resolve to a PR — often a closed/merged one — not a plan. Apply the guard only when the configured tracker is GitHub: if the fetched object's URL contains /pull/ or its state is MERGED/CLOSED, stop and ask whether the user really meant that reference (a shipped release PR has nothing to break down). For a local-markdown tracker a number is a feature/issue path (no PR collision); for GitLab, issues and MRs have separate number spaces — neither needs this guard.

2. Explore the codebase (optional)

If you have not already explored the codebase, do so to understand the current state of the code. Issue titles and descriptions should use the project's domain glossary vocabulary, and respect ADRs in the area you're touching.

3. Draft vertical slices

Break the plan into tracer bullet issues. Each issue is a thin vertical slice that cuts through ALL integration layers end-to-end, NOT a horizontal slice of one layer.

Slices may be 'HITL' or 'AFK'. A HITL slice requires a manual action a coding agent physically cannot perform — clicking through a third-party console, rotating a real credential, obtaining external sign-off, running a one-off production migration by hand. It is not an architectural decision or a design review: those must be resolved upstream via /grill-with-docs and recorded as ADRs before slices are cut, so the work falls out maximally AFK. AFK slices can be implemented and merged without human interaction. Prefer AFK over HITL where possible — a [HITL] slice that's really a decision in disguise is a process leak, not a slice. HITL slices are cleared by /human-itl, not /tdd.

<vertical-slice-rules> - Each slice delivers a narrow but COMPLETE path through every layer (schema, API, UI, tests) - A completed slice is demoable or verifiable on its own - Prefer many thin slices over few thick ones </vertical-slice-rules>

Title format

Each slice gets a title in the form [<TYPE>] <wave>[<letter>] — <description>:

  • Type prefix: [AFK] or [HITL].
  • Wave number: dependency depth, starting at 1. Slices sharing a wave number are runnable in parallel (same fan-out batch that /tdd-parallel would pick up).
  • Letter suffix: when a wave has more than one slice, assign a, b, c... in the order slices were drafted. Single-slice waves stay unlettered.
  • Em dash separator: — between the wave token and the description.
  • Description: short and action-oriented.

Examples:

  • [HITL] 1 — Register the OAuth app in the provider console and capture client id/secret
  • [AFK] 2a — Add OAuth callback endpoint
  • [AFK] 2b — Render login button
  • [AFK] 3 — Wire callback to session store
  • [AFK] 4 — Show user profile after login

4. Quiz the user

Present the proposed breakdown as a numbered list. For each slice, show:

  • Title: as drafted in step 3 (with the [TYPE] wave[letter] — description format)
  • Type: HITL / AFK
  • Blocked by: which other slices (if any) must complete first
  • User stories covered: which user stories this addresses (if the source material has them). Whatever the user approves here is persisted verbatim into the issue body's ## User stories covered section in step 5 — it is not just a quiz aid; /verify-coverage reads it back as its Tier A oracle. Each covered story carries its parent PRD's AC<n>: acceptance criteria verbatim so the slice body is self-contained: the agent picking up the slice sees the story's testable contract without needing to re-fetch the PRD, and /verify-coverage Tier B has those acceptance criteria as its test-generation hint at slice-resolution time.

Ask the user:

  • Does the granularity feel right? (too coarse / too fine)
  • Are the dependency relationships correct?
  • Should any slices be merged or split further?
  • Are the correct slices marked as HITL and AFK? Is every [HITL] slice a genuine manual action, not a disguised decision (which belongs upstream in /grill-with-docs + an ADR)?

Iterate until the user approves the breakdown.

5. Publish the issues to the issue tracker

For each approved slice, publish a new issue to the issue tracker. Use the issue body template below. Apply both the needs-triage triage label (so each issue enters the normal triage flow) and the backlog label (so each issue shows up on the project board).

Publish issues in dependency order (blockers first) so you can reference real issue identifiers in the "Blocked by" field.

<issue-template> ## Parent

A reference to the parent issue on the issue tracker (if the source was an existing issue, otherwise omit this section).

What to build

A concise description of this vertical slice. Describe the end-to-end behavior, not layer-by-layer implementation.

Acceptance criteria

  • Criterion 1
  • Criterion 2
  • Criterion 3

User stories covered

The PRD user story numbers this slice addresses, each with its short text and the parent's AC<n>: acceptance criteria carried over verbatim. The persisted form of the quiz mapping from step 4.

This section is MANDATORY on every PRD-derived slice (the only omission is a freeform plan with no user stories — see below). It is load-bearing in two places that both read it back from the issue body, not from the quiz:

  • /verify-coverage consumes it as its Tier A story→slice map, and Tier B reads the AC<n>: acceptance criteria as the test-generation hint.
  • /tdd-parallel partial runs read it to tell a deferred story (covered only by a slice still gated behind an open [HITL]) apart from a real gap. A slicing run that silently drops this section breaks partial-run coverage scoping: deferred stories get misclassified as gaps and spuriously re-fanned-out. (Legacy slices that predate this section fall back to /verify-coverage's lower-confidence inference — don't rely on it for new slices.)

Example:

- 7 — User can reset password via email
  - AC1: POST /password-reset with a valid email enqueues a job that
    sends a single email containing a one-time link.
  - AC2: the link redeems exactly once and sets a new password; a
    second redemption of the same link returns 410.

Write None — enabling/infrastructure slice for a slice that delivers no user-facing story on its own. Omit this whole section only when the source had no user stories (a freeform plan), the same way ## Parent is omitted when there's no parent.

Blocked by

  • A reference to the blocking ticket (if any)

Or "None - can start immediately" if no blockers.

</issue-template>

6. Link each new issue as a sub-issue of the parent

If a parent issue exists and the tracker supports sub-issues, link each child to the parent so the parent auto-closes when all children close.

  • GitHub: use the addSubIssue GraphQL mutation. Fetch parent and child node IDs first, then link (replace OWNER, REPO, PARENT, CHILD):
    PARENT_ID=$(gh api graphql -f query='query{repository(owner:"OWNER",name:"REPO"){issue(number:PARENT){id}}}' -q .data.repository.issue.id)
    CHILD_ID=$(gh api graphql -f query='query{repository(owner:"OWNER",name:"REPO"){issue(number:CHILD){id}}}' -q .data.repository.issue.id)
    gh api graphql -f query='mutation($p:ID!,$c:ID!){addSubIssue(input:{issueId:$p,subIssueId:$c}){subIssue{number}}}' -f p="$PARENT_ID" -f c="$CHILD_ID"
  • Linear: set parentId on each child when creating it.
  • GitLab / local files / unsupported trackers: skip; the ## Parent text reference is the only link.

Do NOT close the parent or modify its body. The only allowed parent changes are adding sub-issue links and updating the state label as described in step 7.

7. Move the parent to tracking

If the source was an existing parent issue (i.e. the new issues were linked as sub-issues in step 6), update the parent's state label to tracking (use the configured label string from docs/agents/triage-labels.md). Remove any prior state label (needs-triage, ready-for-agent, etc.) — the parent is no longer a unit of work, it's a container.

GitHub will auto-close the parent when the last child closes. Do not close the parent yourself.

If docs/agents/project-board.md exists, also update the parent's project item Status to the option mapped to tracking (typically In progress). Use the same lookup-then-update procedure documented in triage/SKILL.md step 6: fetch the project item via gh api graphql filtered by the configured project node ID, then updateProjectV2ItemFieldValue with the mapped Status option ID. If the parent isn't on the configured project, log and continue. Best-effort — the label change is the source of truth.

Children created in step 5 are auto-added to the project (the user's existing "Auto-add to project" workflow handles that) and start in the project's default Status (Backlog); /triage will advance them to Ready later.

Skip this step if there's no parent issue (e.g. the source was a freeform plan in conversation).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.