From reaper
Use when working with GitHub Issues or GitHub Projects. TRIGGER when a GitHub issue is referenced (e.g., "#42", "issue 42", "GH-42"); creating, editing, closing, or listing issues; linking sub-issues; updating GitHub Projects v2 fields; resolving labels or assignees on a repo. Returns the correct command shape, parent/child linking pattern, and field-update workflow on the first try. SKIP for pull request operations, repo/release/auth tasks, or work targeting Jira, Linear, Beads, or markdown plan files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/reaper:issue-tracker-githubThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maps abstract task operations to `gh` CLI commands. See `gh issue --help` and `gh project --help` for full flag details.
Maps abstract task operations to gh CLI commands. See gh issue --help and gh project --help for full flag details.
Available labels: !gh label list --json name -q '[.[].name] | join(", ")' 2>/dev/null || echo "none"
GitHub Projects: !${CLAUDE_PLUGIN_ROOT}/skills/issue-tracker-github/scripts/gh-repo-projects.sh
Never create a pull request without explicit user confirmation. PR creation is a high-impact action that affects shared repository state and triggers notifications for the entire team. Always present the proposed PR title, body, base branch, and head branch to the user and wait for approval before running gh pr create.
Scripts are in ${CLAUDE_PLUGIN_ROOT}/skills/issue-tracker-github/scripts/:
| Script | Purpose |
|---|---|
gh-link-sub-issues.sh | Link 1+ issues as sub-issues of a parent (bulk-capable) |
gh-list-sub-issues.sh | List sub-issues of a parent via GraphQL |
gh-project-set-status.sh | Update a GitHub Projects v2 item status (or custom single-select field) |
| Operation | Command Pattern |
|---|---|
| FETCH_ISSUE | gh issue view <number> --json title,body,state,labels,assignees |
| LIST_CHILDREN | gh-list-sub-issues.sh <parent> or parse tracking issue body |
| CREATE_ISSUE | gh issue create --title "..." --body "..." --label "..." |
| UPDATE_ISSUE | gh issue edit <number> --add-label/--title/--body/--assignee |
| ADD_DEPENDENCY | Add cross-references to issue bodies (see Dependency Pattern) |
| QUERY_DEPENDENCY_TREE | Recursively parse cross-references from issue bodies |
| CLOSE_ISSUE | gh issue close <number> |
Check the GitHub Projects line in Repo Context above. If projects are configured, use them for workflow tracking:
# Add issue to project
gh project item-add <project-number> --owner @me --url "$(gh issue view <number> --json url -q .url)"
# Update status via custom field
gh project item-edit --id <item-id> --project-id <project-id> --field-id <status-field-id> --single-select-option-id <option-id>
Projects provide sprint/kanban views. Use project fields for status tracking instead of labels.
Use tracking issues as parent issue replacements. A tracking issue contains a task list in its body that references child issues:
## Tasks
- [ ] #101 Set up database schema
- [ ] #102 Implement API endpoints
- [x] #100 Write design doc
GitHub renders task list progress automatically. Use labels for grouping (e.g., feature:auth, phase:1).
Single-issue rule: Plans with only a single issue do not require a parent issue. Only create a parent when there are multiple child work items to organize.
GitHub supports sub-issues via its GraphQL API (beta). Use this as the primary approach. Fall back to tracking issues for repos where sub-issues are not enabled.
A parent issue groups multiple child work items. Create one only when the plan has multiple child issues to organize.
# Create the parent issue (no sub-issue linking needed at this step)
gh issue create --title "Authentication overhaul" --body "Parent issue tracking auth work items." --label "feature:auth"
# Note the returned issue number (e.g., 42) -- use it when linking children below
CREATE_ISSUE with parent:
Create child issues first (batch all creates before linking):
gh issue create --title "Set up database schema" --body "..." --label "feature:auth"
gh issue create --title "Implement API endpoints" --body "..." --label "feature:auth"
gh issue create --title "Write tests" --body "..." --label "feature:auth"
Bulk-link all children to the parent in one call:
${CLAUDE_PLUGIN_ROOT}/skills/issue-tracker-github/scripts/gh-link-sub-issues.sh <parent-number> <child-1> <child-2> <child-3>
The script resolves node IDs internally and links each child as a sub-issue. It handles errors per-child (skips failures, reports at the end). If the script fails (sub-issues not enabled on this repo), fall back to the Tracking Issues pattern below.
LIST_CHILDREN:
${CLAUDE_PLUGIN_ROOT}/skills/issue-tracker-github/scripts/gh-list-sub-issues.sh <parent-number>
Returns JSON array of {number, title, state} objects.
When creating a parent issue with many children (e.g., flight-plan creating 5+ work units):
gh issue create (no linking yet)${CLAUDE_PLUGIN_ROOT}/skills/issue-tracker-github/scripts/gh-link-sub-issues.sh 42 43 44 45 46 47
This is more efficient than interleaving creates and links — the script resolves the parent node ID once and reuses it for all children.
For repos where sub-issues are not enabled, use a tracking issue (parent issue) with a task list in its body:
## Tasks
- [ ] #101 Set up database schema
- [ ] #102 Implement API endpoints
- [x] #100 Write design doc
GitHub renders task list progress automatically. Use labels for grouping (e.g., feature:auth, phase:1).
CREATE_ISSUE with parent (tracking issue fallback):
gh issue create --title "Implement login" --body "Details..." --label "feature:auth"
gh issue edit <parent-number> --body "$(gh issue view <parent-number> --json body -q .body)
- [ ] #<new-number> Implement login"
LIST_CHILDREN (tracking issue fallback):
Parse the tracking issue body for task list items:
gh issue view <parent-number> --json body -q .body | grep -oE '#[0-9]+'
Then fetch each child: gh issue view <number> --json number,title,state.
GitHub has no native dependency links. Use structured cross-references in issue bodies.
Format:
blocks type: Add **Blocked by:** #X, #Y to the dependent issue's bodyrelated type: Add **Related to:** #Z to both issues' bodiesADD_DEPENDENCY (blocks):
gh issue edit <dependent> --body "**Blocked by:** #<blocker>
$(gh issue view <dependent> --json body -q .body)"
ADD_DEPENDENCY (related):
Add **Related to:** #<other> to both issues' bodies.
Idempotency: Before appending a dependency line, read the current body and check if the reference already exists. This prevents duplicate entries on retry.
QUERY_DEPENDENCY_TREE:
**Blocked by:** and **Related to:** referencesRun gh issue --help and gh project --help for the full flag reference. This skill documents recommended patterns for Reaper's abstract operations, not the complete CLI surface. Agents may discover and use additional flags beyond what is documented here.
npx claudepluginhub spicelabshq/claude-marketplace --plugin reaperCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.