Implement Issues
Turn a set of GitHub issues into open PRs via parallel, worktree-isolated lanes.
One lane per issue: its own worktree, its own branch, its own PR. This skill
orchestrates and composes branch, commit, and pr — it never merges.
Hand-off to babysit-pr / babysit-pr --merge for shepherding and merge.
Invocation
/implement-issues #12 #14 #17 — implement exactly these issues.
/implement-issues (bare) — triage the backlog (gh issue list), prefer
self-contained, file-disjoint issues, propose a set and confirm before
spawning any lane.
--sequential — run one lane at a time (still one worktree/branch/PR each).
Inputs & readiness
- Load repo context first. At start, from the target repo checkout root,
read
AGENTS.md and/or CLAUDE.md if present. Precedence: AGENTS.md
is authoritative when both exist — do not also apply conflicting CLAUDE.md
instructions; if only one exists, use that file; if both conflict in a
blocking way, stop and ask. Record which filename is authoritative (e.g.
AGENTS.md or CLAUDE.md) and treat its house standards, operating
agreement, and standing constraints as binding for every lane. Pass that
chosen filename into each lane prompt so lanes do not re-pick. See the
stand-general skill's Per-repo agent context section for the expected
file shape. Missing the file is fine — fall back to chat instructions and
stand-* skills.
- Take issues from the args, or select from
gh issue list favouring
self-contained and file-disjoint work.
- Every issue must carry an AI Implementation Prompt comment (per the
issue
skill). Missing it means the issue is not fan-out-ready — write one first,
or run that issue as a single lane yourself. Do not hand a bare issue to a
sub-agent.
- Reproduce against current
main before implementing — specs can be stale.
If the reported problem no longer exists, report back rather than fabricating a
change.
Conflict grouping
- Build a file-overlap matrix from each issue's declared file targets.
- Disjoint file sets → run in parallel lanes.
- Overlapping file sets → sequence them, or bundle into a single lane
only when the issues genuinely must share files.
- Cap at ~10 lanes — beyond that, batch across sessions.
Lane claiming
Before spawning, claim each lane — assign the issue to yourself and/or add a
working label. This prevents a second session from opening a duplicate PR for the
same issue (a race that has bitten this workflow before).
Per lane
- Orchestrator creates the worktree per the
branch -w convention: a
sibling directory, branch type/NN-slug cut from a freshly fetched
origin/main. Never place a worktree under .claude/ — lint configs
commonly exclude that path and will silently scan nothing.
- Sub-agent prompt is pointers, not content. Instruct the lane to:
- Work only inside the lane worktree path the orchestrator created.
- Read issue #N and its AI Implementation Prompt comment.
- From the lane worktree root (absolute path), read the authoritative
context file the parent already chose (
AGENTS.md or CLAUDE.md) when
present. Do not resolve context from the parent checkout or any other
directory; do not re-pick between the two files. Treat its
standards/constraints/contract as binding; follow applicable stand-*
skills.
- Run the full lint and full test suite before every commit —
never a subset.
- Use the
commit skill, then the pr skill with Closes #N.
- Never merge. Report the PR URL on completion.
- Orchestrator verifies each PR exists once the lane reports done.
Guardrails
- Signing pre-flight before spawning. Confirm commit signing works now — a
locked signing key must be surfaced to the user before you go AFK, not
discovered mid-run.
- A lane that cannot stay green STOPS and reports. Never weaken or delete
tests, never open a knowingly broken PR.
- Final report lists every PR URL and every blocked lane with the reason.
Hand-off
Shepherding and merging are not this skill. Once PRs are open, hand off to
babysit-pr (drive to merge-ready) or babysit-pr --merge.
See also backlog: the interactive routing entry point that composes this
skill with babysit-pr. It does not auto-invoke either.
Harness mechanics (Claude Code)
- Run lanes as background sub-agents so the main thread stays free.
- Model per lane by risk:
- docs / config / mechanical →
sonnet
- logic / refactor / security / auth / CI-touching →
opus
- never
haiku for code.
- An explicit user instruction overrides these defaults.
- Elsewhere (harnesses without sub-agent spawning): run the lanes
sequentially using the same worktree-per-lane layout.
1---2name: implement-issues3description: Implement a set of GitHub issues in parallel - triage or take an explicit issue list, group by file-conflict, create a worktree per lane, delegate to sub-agents, open a PR per lane; never merges. Use when asked to implement issues, work the backlog, or pick up multiple issues in parallel.4---56# Implement Issues78Turn a set of GitHub issues into open PRs via parallel, worktree-isolated lanes.9One lane per issue: its own worktree, its own branch, its own PR. This skill10orchestrates and composes `branch`, `commit`, and `pr` — it **never merges**.11Hand-off to `babysit-pr` / `babysit-pr --merge` for shepherding and merge.1213## Invocation1415- `/implement-issues #12 #14 #17` — implement exactly these issues.16- `/implement-issues` (bare) — triage the backlog (`gh issue list`), prefer17 self-contained, file-disjoint issues, **propose a set and confirm before18 spawning** any lane.19- `--sequential` — run one lane at a time (still one worktree/branch/PR each).2021## Inputs & readiness2223- **Load repo context first.** At start, from the target repo checkout root,24 read `AGENTS.md` and/or `CLAUDE.md` if present. **Precedence:** `AGENTS.md`25 is authoritative when both exist — do not also apply conflicting `CLAUDE.md`26 instructions; if only one exists, use that file; if both conflict in a27 blocking way, stop and ask. Record which filename is authoritative (e.g.28 `AGENTS.md` or `CLAUDE.md`) and treat its house standards, operating29 agreement, and standing constraints as **binding** for every lane. Pass that30 chosen filename into each lane prompt so lanes do not re-pick. See the31 `stand-general` skill's **Per-repo agent context** section for the expected32 file shape. Missing the file is fine — fall back to chat instructions and33 `stand-*` skills.34- Take issues from the args, or select from `gh issue list` favouring35 self-contained and file-disjoint work.36- Every issue **must** carry an AI Implementation Prompt comment (per the `issue`37 skill). Missing it means the issue is **not fan-out-ready** — write one first,38 or run that issue as a single lane yourself. Do not hand a bare issue to a39 sub-agent.40- **Reproduce against current `main` before implementing** — specs can be stale.41 If the reported problem no longer exists, report back rather than fabricating a42 change.4344## Conflict grouping4546- Build a file-overlap matrix from each issue's declared file targets.47- **Disjoint** file sets → run in **parallel** lanes.48- **Overlapping** file sets → **sequence** them, or bundle into a single lane49 only when the issues genuinely must share files.50- Cap at **~10 lanes** — beyond that, batch across sessions.5152## Lane claiming5354Before spawning, **claim each lane** — assign the issue to yourself and/or add a55working label. This prevents a second session from opening a duplicate PR for the56same issue (a race that has bitten this workflow before).5758## Per lane59601. **Orchestrator** creates the worktree per the `branch -w` convention: a61 sibling directory, branch `type/NN-slug` cut from a **freshly fetched62 `origin/main`**. **Never** place a worktree under `.claude/` — lint configs63 commonly exclude that path and will silently scan nothing.642. **Sub-agent prompt is pointers, not content.** Instruct the lane to:65 - Work only inside the lane worktree path the orchestrator created.66 - Read issue #N and its AI Implementation Prompt comment.67 - From the **lane worktree root** (absolute path), read the authoritative68 context file the parent already chose (`AGENTS.md` or `CLAUDE.md`) when69 present. Do not resolve context from the parent checkout or any other70 directory; do not re-pick between the two files. Treat its71 standards/constraints/contract as binding; follow applicable `stand-*`72 skills.73 - Run the **full** lint and **full** test suite before **every** commit —74 never a subset.75 - Use the `commit` skill, then the `pr` skill with `Closes #N`.76 - **Never merge.** Report the PR URL on completion.773. **Orchestrator verifies** each PR exists once the lane reports done.7879## Guardrails8081- **Signing pre-flight before spawning.** Confirm commit signing works now — a82 locked signing key must be surfaced to the user *before* you go AFK, not83 discovered mid-run.84- A lane that **cannot stay green STOPS and reports.** Never weaken or delete85 tests, never open a knowingly broken PR.86- Final report lists **every PR URL** and **every blocked lane** with the reason.8788## Hand-off8990Shepherding and merging are **not** this skill. Once PRs are open, hand off to91`babysit-pr` (drive to merge-ready) or `babysit-pr --merge`.9293See also `backlog`: the interactive routing entry point that composes this94skill with `babysit-pr`. It does not auto-invoke either.9596## Harness mechanics (Claude Code)9798- Run lanes as **background sub-agents** so the main thread stays free.99- **Model per lane** by risk:100 - docs / config / mechanical → `sonnet`101 - logic / refactor / security / auth / CI-touching → `opus`102 - **never `haiku` for code.**103 - An explicit user instruction overrides these defaults.104- **Elsewhere** (harnesses without sub-agent spawning): run the lanes105 **sequentially** using the same worktree-per-lane layout.