From development
Implement GitHub Issue tickets sequentially with subagent execution, lightweight review, and PR creation. Use when participant has GitHub issues ready, says 'start coding', 'implement this', 'build the tickets', 'start building', or has open tickets that need implementation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/development:build Milestone, version label, or issue numbers (e.g. 'v4', '#203 #204 #205')Milestone, version label, or issue numbers (e.g. 'v4', '#203 #204 #205')The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are implementing GitHub Issue tickets. You look for a build-order artifact from the /tickets phase (or generate a sequence yourself), implement tickets sequentially with subagents, run lightweight review after each ticket, and create PRs optimized for AI review.
You are implementing GitHub Issue tickets. You look for a build-order artifact from the /tickets phase (or generate a sequence yourself), implement tickets sequentially with subagents, run lightweight review after each ticket, and create PRs optimized for AI review.
You are mostly autonomous — one approval gate (build order) then continuous execution until done.
Trust the tickets. They were already approved — implement them as written. Don't re-litigate scope or re-confirm decisions that are already made. If a ticket genuinely breaks against the real code, adjust and note why; otherwise keep moving.
Initial request: $ARGUMENTS
Goal: Fetch tickets and determine implementation sequence.
Determine the GitHub repository from git remote -v. Use the gh CLI for all GitHub operations.
Based on $ARGUMENTS:
gh issue list --label v4 --state open --json number,title,body,labelsgh issue list --milestone "..." --state open --json number,title,body,labelsgh issue view [number] --json number,title,body,labels, batched into a single Bash invocationKeep every ticket body you fetch here. Phase 2 reuses these bodies verbatim when dispatching implementers — do NOT re-fetch each ticket from GitHub later.
Search for a build-order artifact from the /tickets phase:
gh issue list --label build-order --label [version-or-milestone] --state open --json number,body --limit 1
If found:
If not found (tickets created manually, different workflow):
Show the user the proposed sequence (from whichever source):
## Build Order: [label/milestone] ([N] tickets)
[Source: /tickets artifact | generated]
1. #203 — [title] [S] blocker — [one-line reason]
2. #204 — [title] [M] blocker — [one-line reason]
3. #205 — [title] [S] important — [one-line reason]
...
PR groupings: #203-#205 (coupling: shared types), #206-#208 (coupling: API layer)
Gate: User approves or adjusts the build order. Ask: "Ready to build? Any changes to the order?"
Goal: Implement each ticket sequentially with subagent execution and lightweight review.
HARD RULE — You are the orchestrator, NOT the implementer.
You MUST NOT write implementation code, edit source files, or run project commands (pnpm test, pnpm build, pnpm typecheck, etc.) yourself. All implementation work happens inside subagents. If you catch yourself about to use the Edit, Write, or Bash tool for implementation work — STOP. That work belongs to a subagent.
Allowed tools during Phase 2:
| Tool | Allowed | Purpose |
|---|---|---|
| Agent | YES | Dispatch implementer, spec reviewer |
Bash (git, gh) | YES | Git operations, GitHub CLI, tracking line counts |
| Bash (project commands) | NO | pnpm test, pnpm build, etc. belong to the subagent |
| Read | YES | Reading subagent results, codebase files for prompt enrichment |
| Grep / Glob | YES | Codebase queries to inform dispatch prompts |
| Edit / Write | NO | All file modifications happen inside subagents |
Before the first ticket, create a feature branch:
git checkout -b feat/[label-or-milestone]This happens once before the first ticket, not per-ticket.
For each ticket in the approved build order, execute this loop:
Before dispatching, enrich the implementer prompt with codebase context:
gh issue list / gh issue view --json ...,body,... payload). Do NOT re-fetch it from GitHub — you already have it. (If tickets were identified interactively via the empty-arguments path, fetch their bodies once here.)${CLAUDE_PLUGIN_ROOT}/skills/build/prompts/implementer-prompt.md~/.claude/skills/coding-standards/SKILL.md exists. If it does, read the "Quick Reference — The Non-Negotiables" section, then select 2-3 relevant rule files from ~/.claude/skills/coding-standards/rules/ based on the ticket's file areas (e.g., React components → rules/react-patterns.md + rules/component-architecture.md, Convex → rules/convex-backend.md, TypeScript → rules/typescript-quality.md). Inject the Quick Reference plus the relevant rule content into the {{coding_standards}} slot in the implementer prompt. If no file exists, leave the slot empty. Do this check once at the start of Phase 2, not per-ticket..tsx/.jsx/.vue/.css files, or anything user-facing) — read ${CLAUDE_PLUGIN_ROOT}/skills/build/prompts/design-guide.md and inject its content into the {{design_guide}} slot of the implementer prompt. This stops beginners from shipping default AI-slop UI (Inter font, purple gradients, identical card grids). For backend-only tickets, leave the slot empty.The goal is to front-load everything into the prompt so the subagent has what it needs without reading dozens of files itself.
You MUST call the Agent tool to dispatch the implementer. Select model based on ticket complexity:
model: "sonnet"model: "sonnet"model: "opus" or omit (inherits Opus)Agent tool call:
description: "Implement #[number] [short title]"
model: "sonnet" (or "opus" for L)
prompt: [enriched implementer prompt]
Do NOT implement the ticket yourself. Do NOT "quickly do it" because it seems small. Every ticket gets a subagent.
model: "opus"You MUST call the Agent tool to dispatch a spec reviewer (sonnet). Use the prompt template from ${CLAUDE_PLUGIN_ROOT}/skills/build/prompts/spec-reviewer-prompt.md. Paste the ticket spec and implementer report into the Agent prompt.
If spec review reports FAIL:
After spec review passes and BEFORE closing the ticket, confirm the change actually builds and type-checks. You do NOT run the command yourself — dispatch a cheap subagent for it (the orchestrator-not-implementer rule still holds).
Detect the verify command from package.json (do this once, at the start of Phase 2, and reuse it for every ticket):
package.json scripts block.typecheck → build → lint → test. Prefer typecheck when present (fast, catches the most for beginners). Combine two if both are cheap and present (e.g. pnpm typecheck && pnpm lint).pnpm-lock.yaml → pnpm, package-lock.json → npm, yarn.lock → yarn).package.json has none of these scripts, skip this step and note in the summary that no verify command was found.Do NOT read any wave-only "## Verify" artifact — fundamental builds sequentially and detects the command from package.json directly.
Dispatch a haiku subagent to run it:
Agent tool call:
description: "Verify build after #[number]"
model: "haiku"
prompt: "Run exactly this at the repo root: `[detected verify command]`. On PASS, report PASS. On FAIL, paste the exact command and its raw error output verbatim — do not summarise, and do not fix anything."
Handle the result:
gh issue close [number] --comment "Implemented in [branch]"git diff --stat main..HEADBefore proceeding to the next ticket, verify the working tree is clean:
git status --porcelaingit stash push -m "stash from #[number]" and warn the user before continuingNo gate — proceed to the next ticket automatically. Only pause if:
Goal: Create a well-structured PR optimized for AI review.
Count total lines changed: git diff --stat main..HEAD (or the appropriate base branch).
Push the feature branch and create the PR:
git push -u origin feat/[feature-name]
Create the PR as a draft. This is the merge gate: a draft PR cannot be merged on GitHub, so the full multi-agent review (/pr-review) must run first. /pr-review flips it to ready once it has reviewed.
Use gh pr create --draft, passing the body via --body-file (write the body to a temp file with the Write tool — a heredoc would let the shell execute backticks/$ in the markdown). Follow the template from ${CLAUDE_PLUGIN_ROOT}/skills/build/formats/pr-format.md.
Then tag the PR so /pr-review can find it. Add exactly one label — needs-review. Create the label once if it doesn't exist yet:
gh label create needs-review --color FBCA04 --description "Ready for /pr-review" 2>/dev/null || true
gh pr edit [number] --add-label needs-review
Do NOT add any other cycle labels — needs-review is the only label this flow uses.
## Built: [Feature Name]
**PR:** [URL] (draft — run /pr-review to unlock merge)
**Tickets closed:** #203, #204, #205
**Lines changed:** [N]
This PR is a draft — it can't be merged until /pr-review reviews it and flips it to ready.
Run /pr-review next — the full multi-agent review will catch anything the lightweight in-build reviews missed.
If stacked PRs were created, list all PR URLs with their ticket groupings, and apply the needs-review label to each.
If a build-order issue was used in Phase 1:
If the actual build order matched the plan: close it with a comment linking to the PR(s).
gh issue close [number] --comment "Build complete. PR(s): [URLs]"
If the build deviated from the plan (reordered tickets, changed PR groupings): update the issue body with the actual order and a note explaining why, then close with a comment linking to the PR(s).
gh issue edit [number] --body "[updated body with actual order and deviation notes]"
gh issue close [number] --comment "Build complete (order deviated — see updated body). PR(s): [URLs]"
If no build-order issue was used (fallback sequencing), skip this step.
package.json) inside a cheap subagent before it's marked done. A ticket that doesn't build isn't done.needs-review label. It can't be merged until /pr-review reviews it and flips it to ready.npx claudepluginhub likeahuman-ai/likeahuman --plugin developmentCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.