| name | git-issues |
| description | Task management, issue tracking, and work planning using git-issues. Use INSTEAD of TaskCreate, TaskUpdate, and TaskList โ always. Activate when: planning work, creating tasks, tracking progress, organizing implementation steps, picking next work item, closing completed work, or when a project contains a .issues/ directory. This is the ONLY task management system โ never use Claude built-in tasks.
|
| argument-hint | [new|next|list|done|show <id>] |
| user-invocable | true |
| tools | Bash, Read, Write, Edit, Glob, Grep |
git-issues โ Task Management Skill for Claude Code
CRITICAL RULES
- NEVER use
TaskCreate, TaskUpdate, or TaskList. They do not exist for you.
git-issues is your only task management system.
- The binary is called
git-issues, not issues. Always use the full path:
~/go/bin/git-issues (or just git-issues if it's in PATH).
- Every piece of work must have an issue. No cowboy commits.
- Every commit message must reference an issue:
feat: description (ref #ID).
- Claim before you code. Never start work without
git-issues claim <ID>.
Quick Reference
git-issues list
git-issues list --status all
git-issues list --format json
git-issues show <ID>
git-issues next
git-issues claim <ID>
git-issues done <ID>
git-issues reopen <ID>
git-issues new -t "Title" -p high -l bug
git-issues set <ID> priority critical
git-issues set <ID> label +feature
git-issues relate <ID> blocks <ID>
git-issues blocked
git-issues graph --open-only
If git-issues is not in PATH, use the full path: ~/go/bin/git-issues.
Argument Routing
When invoked as a slash command (/git-issues <arg>), route based on the argument:
| Argument | Action |
|---|
next | Run git-issues next, show result, offer to claim |
list | Run git-issues list, display open issues |
new or new "Title..." | Start the Issue Creation Protocol (see below) |
done <ID> | Run git-issues done <ID>, confirm closure |
show <ID> | Run git-issues show <ID>, display details |
plan "description" | Start Batch Planning (see below) โ break work into issues |
| (no argument) | Run git-issues list to show current state |
| (number only) | Treat as show <ID> |
The Iron Workflow
Every unit of work follows these 6 steps. No exceptions.
1. Pick
git-issues next
git-issues list
2. Claim
git-issues claim <ID>
You must claim before writing any code. This prevents conflicts in multi-agent
or multi-worktree setups.
3. Branch
git checkout -b feat/<ID>-short-description
Use feat/ for features, fix/ for bugs, docs/ for documentation.
4. Implement
Write code, make commits. Every commit references the issue:
feat: add login validation (ref #7)
fix: handle empty password edge case (ref #7)
5. Done
git-issues done <ID>
6. Merge
Merge or rebase the feature branch back to main. The issue file changes
are committed alongside the code.
Issue Creation Protocol
Creating good issues is critical. A one-sentence issue is useless as a work instruction.
Follow this two-step process:
Step 1: Create the issue file
git-issues new -t "Clear, actionable title" -p <priority> -l <label>
This creates the file with frontmatter. Note the output path, e.g.:
Created: .issues/0007-clear-actionable-title.md (#7)
Step 2: Write the full body using the Edit tool
Use the Edit or Write tool to add a comprehensive body to the issue file.
Do NOT use --body for multi-line content โ shell escaping breaks on complex markdown.
Read the file: .issues/0007-clear-actionable-title.md
Then use Edit to append the full body after the closing --- of the frontmatter.
Why two steps?
The --body flag works for single-line descriptions, but real issue bodies contain
markdown with headers, code blocks, and lists. Shell escaping these is fragile.
The Edit tool handles multi-line content reliably.
Issue Body Template
Every issue body must contain these sections. Copy this structure:
## Context
Why does this issue exist? What problem does it solve?
Link to related issues, prior discussions, or external references.
## Success Criteria
- [ ] Concrete, verifiable outcome 1
- [ ] Concrete, verifiable outcome 2
- [ ] Tests pass / no regressions
## Implementation
Step-by-step plan for how to implement this.
1. First, ...
2. Then, ...
3. Finally, ...
Include relevant code paths, function names, or architectural notes.
## Affected Files
- `path/to/file1.py` โ what changes here
- `path/to/file2.py` โ what changes here
## Verification
How to verify this issue is done:
- Run `command` and expect `result`
- Check that `behavior` works as expected
Minimum quality bar: An engineer (or agent) reading only the issue should be able to
implement it without asking clarifying questions.
Quality Gate
Before considering an issue "ready", verify these 5 points:
-
Title is actionable โ starts with a verb or clearly describes the deliverable
- Good: "Add rate limiting to /api/login endpoint"
- Bad: "Login stuff"
-
Context explains WHY โ not just what, but why this matters now
-
Success criteria are checkable โ each one can be answered with yes/no
- Good: "API returns 429 after 5 requests per minute"
- Bad: "Rate limiting works"
-
Implementation is specific โ mentions actual files, functions, or patterns
- Good: "Add middleware in
server/middleware/ratelimit.go, use token bucket"
- Bad: "Implement rate limiting somewhere"
-
Affected files are listed โ every file that will be created or modified
TaskCreate โ git-issues Mapping
If you instinctively want to use Claude's built-in task tools, translate:
| Instead of... | Use... |
|---|
TaskCreate(subject, description) | git-issues new -t "subject" + Edit body |
TaskUpdate(id, status: "in_progress") | git-issues claim <ID> |
TaskUpdate(id, status: "completed") | git-issues done <ID> |
TaskList() | git-issues list |
TaskGet(id) | git-issues show <ID> |
| Setting task dependencies | git-issues relate <ID> depends-on <ID> |
The mapping is 1:1. There is no task management feature that git-issues cannot handle.
Batch Planning
When given a large task, PRD, or feature description, decompose it into issues:
Process
- Analyze the requirement and identify discrete work units
- Create issues in dependency order (independent issues first)
- Set up relations:
git-issues relate <ID> depends-on <ID>
- Add labels for categorization:
-l feature, -l bug, -l docs, -l refactor
- Set priorities:
-p critical for blockers, -p high for core work, -p medium for follow-ups
Rules for decomposition
- Each issue should be completable in a single focused session
- Each issue should be independently verifiable
- Avoid issues that are just "part 1 of X" โ each should deliver value
- Use
depends-on relations to encode ordering, not issue numbering
Example
For "Add user authentication":
git-issues new -t "Add password hashing utility" -p high -l feature -l auth
git-issues new -t "Implement login endpoint" -p high -l feature -l auth
git-issues new -t "Add auth middleware" -p high -l feature -l auth
git-issues relate 12 depends-on 11
git-issues relate 13 depends-on 12
Recovery Patterns
Forgot to claim before starting work
git-issues claim <ID>
Issue body is too thin
git-issues show <ID>
Created an issue but need to change priority/labels
git-issues set <ID> priority high
git-issues set <ID> label +security
git-issues set <ID> label -feature
Need to abandon work on an issue
git-issues set <ID> status open
git-issues close <ID> --wontfix --reason "Superseded by #15"
Issue numbering conflict (parallel branches)
Only create new issues on main. Update existing issues from any branch.
After merging, run git-issues check --fix to repair any inconsistencies.
No .issues/ directory in the project
git-issues init