About work-on-issues
A skill for processing GitHub or GitLab issues from triage through implementation and closure. It coordinates worktrees and sub-agents, tracks dependencies, and automates PR/MR submission and issue cleanup.
Key features
- 01GitHub and GitLab tracker detection
- 02Issue filtering and triage
- 03Dependency parsing and linking
- 04Sub-agent work in Git worktrees
- 05PR/MR merge and issue closure
Use cases
- 01Batch implementation of ready issues
- 02Processing a selected issue end to end
- 03Sequencing work around issue blockers
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ utarn/ engineer-skills --skill work-on-issuesAfter installing, type/work-on-issuesin Claude Code to confirm it loaded.
Bundled filesagents/openai.yaml
Details
From the project READMEWork on Issues
There are three phases to work on issues:
1. Tracker Setup
Detect host via git remote -v. Set $TRACKER to gh or glab.
Terminologies:
- GitHub:
pr/comment - GitLab:
mr/note
2. Phase 1: Fetch & Triage
- List open issues: Use
gh issue list --state open --json number,title,labelsorglab issue list -O json. - Filter: Keep only main issues (title starts with
PRD:orfeat:). Others are skipped for auto/batch runs (but allowed if explicitly picked). - Choice: User selects issue number or onwards mode.
- Pre-checks:
- Verify open (Skip if closed).
- Detect PRD/Epic by label
PRDor title prefixPRD:. Skip implementation, add to$PRD_TRACKERfor auto-close check.
- Read Details: Fetch full issue view and comments (
gh issue view --comments/glab issue view --comments). - Resolve Parent PRD: Find the PRD owning this issue — search open PRD issues (
PRD:prefix orPRDlabel) for a body referencing#<number>, or use tracker sub-issue/blocked-by links — and fetch its body and comments. This context is passed to the implementer in Phase 2. - Assign & Label: Mark
in-progress(by applyingin-progresslabel and removingready-for-agentandneeds-triage).
3. Dependencies & Linking
Parse ## Blocked by in issue body (matches #42 or full issue URL) to build DEPS[issue] = [blockers].
If possible, create native tracker links (e.g., GitLab API /links with is_blocked_by or GitHub sub-issues API with blocked_by=true). Fall back to text references.
4. Phase 2: Implement (One Main Issue at a Time)
Sub-agent only. Every issue is implemented by a dispatched sub-agent — in single-issue mode, batch mode, and onwards mode alike. The orchestrator fetches, triages, dispatches, and submits; it never edits files, writes code, or runs tests itself. If an issue looks too small to bother dispatching, that is exactly the case that still goes to a sub-agent.
- Create Worktree:
git worktree add .claude/worktrees/issue-<number> -b work-on-issue-<number> - Copy
.envfiles: Copy.envand.env.*files into worktree directory. - Dispatch Sub-Agent using haiku model (inside
.claude/worktrees/issue-<number>): The sub-agent starts with no context beyond this prompt — a constraint not inlined here does not exist for the implementer. Fill every slot below; an AC line like "follows PRD #3" carries no weight until the PRD's actual constraints are inlined. Prompt spec:Implement issue #<number>: <title>. Issue body (verbatim): <full issue description — summary, acceptance criteria, everything in the body> Issue comments (verbatim, in order, or "none"): <all comments, attributing each to its author> Parent PRD context (#<PRD number>: <PRD title>, or "none"): <full PRD body and its comments, or "no comments"> Branch/Worktree: work-on-issue-<number> in .claude/worktrees/issue-<number> API/best-practices: Search via `context7`, `/brightdata-plugin:search`, `/search`, or WebSearch before writing code if unsure. Stuck on errors: If 2+ consecutive failures, you MUST research via `context7`, `/brightdata-plugin:search`, `/search`, or WebSearch first (they are available) to find the correct API/approach, then retry. Only escalate after researching. Parallel subtasks: Decompose & dispatch sub-agents if tasks are independent (no shared files/dirs). Post-implementation: Check output, diff, and run tests and run `/find-mismatch` skill on modified files only. If the programming language is typescript or javascript, run `npx fallow audit` (Make sure to install `fallow` if not present). If errors, fix and re-run tests. Output: Summary, find-mismatch fixes, tests run, and commit hash. Commit format: `fix: resolve #<number> — <short description>` - Commit: Ensure changes are committed in worktree (
fix: resolve #<number> — <desc>).
5. Phase 3: Submit & Close
- Create PR/MR: Link to issue using "Closes #".
- Auto-Merge: Merge immediately (squash & delete branch).
- Comment: Post summary of implementation.
- Close: Remove triage/progress labels (like
in-progress), addclosed, and close issue. - Propagate
.envfiles: Copy modified env files back to main working directory before worktree removal:WT=.claude/worktrees/issue-<number> for wtf in "$WT"/.env "$WT"/.env.*; do [ -f "$wtf" ] || continue base=$(basename "$wtf") if [ ! -f "$base" ] || ! cmp -s "$base" "$wtf"; then cp "$wtf" "$base" && echo "Propagated $base back" fi done - Clean up:
git worktree remove .claude/worktrees/issue-<number> git branch -d work-on-issue-<number>
6. PRD Auto-Close
After closing a sub-issue, check all PRDs in PRD_TRACKER. Read PRD description/links. If all referenced sub-issues (#42 etc.) are closed, close the PRD and remove from PRD_TRACKER.
7. Subtask Parallelization
The dispatched sub-agent decomposes the issue into subtasks if:
- Touch non-overlapping files/folders.
- Independent outputs (no order dependency). Keep sequential if they share files, have strict flow dependencies, or need configuration first.
Subtask Prompt Spec:
Sub-agents are fresh contexts too — each subtask prompt inlines the context bearing on that subtask (same rule as the main dispatch).
Implement subtask for issue #<number>: <title>.
Subtask: <details>
Issue context (verbatim excerpts bearing on this subtask): <issue body / comments / parent-PRD constraints>
Working Directory: .claude/worktrees/issue-<number>
Scope: Modify <MAY_MODIFY>, DO NOT modify <MUST_NOT_MODIFY>.
Compile/Lint errors: If 2+ consecutive failures or any 3rd party dependency issues, research via `context7`, `/brightdata-plugin:search`, `/search`, or WebSearch first (they are available) to find the correct API/approach, then retry. Check Reference Directories (<RefDirs>) to align configurations.
Post-implementation: Run `/find-mismatch` skill on modified files, auto-fix.
Verification: Run relevant tests. Return summary, modified files, test results.
8. Execution Modes
Batch & Onwards Mode
- Fetch all open issues, filter to main issues (
PRD:,feat:). - Parse
DEPSmap from issue bodies, set formal links. - Show progress table:
| Issue | Title | Type | Blocked By | Agent | Status | PR/MR | - Loop:
- Select next issue with zero unresolved blockers. Skip closed or PRD issues.
- Dispatch sub-agent to worktree.
- Run verification -> PR/MR merge -> close -> env propagation -> clean up -> check PRDs.
- Re-evaluate dependencies. Repeat.
- Re-fetch all open issues after finishing (Outer loop) to pick up new main issues. Exit only if no open main issues remain or user interrupts.
Single Issue Mode
Execute only the selected issue, end to end, via the same Phase 2 sub-agent dispatch. Skip dependency graph processing.
9. Labels & Helpers
| Label | Meaning | Color |
|---|---|---|
PRD | Parent tracking issue | #0075CA |
in-progress | Active | #E4E669 |
ready-for-agent | Ready for agent | #0E8A16 |
closed | Closed by AI / Finished | #5319E7 |
To apply labels, try updating directly. If not found, create label first (e.g. color #E4E669 for in-progress) and retry.
10. Edge Cases
- No CLI: Use APIs directly or ask user to install
gh/glab. - No Fallow: Ask user to install
fallowfor JS/TS security audit. - Conflict/Cycle: Report circular dependencies, skip affected issues.
- External Blockers: Treat open external issues as unresolved blockers.
- API Link Failure: Fall back to text references.
- No Main Issues: Inform user, ask if they want to process non-main issues.
- Env files gitignored: Env files must be propagated back before worktree removal to persist across runs. Do not commit secrets.