README
¶
git-issues
A git-native issue tracker. Issues are stored as Markdown files with YAML frontmatter inside your repository under .issues/, version-controlled alongside your code.
No database. No server. No accounts. Just files and git.
Install
# With Go (recommended)
go install github.com/steviee/git-issues@latest
# From source
git clone git@github.com:steviee/git-issues.git
cd git-issues
make install # builds and copies to /usr/local/bin/issues
Requires Go 1.22+. The go install command places the binary in $GOPATH/bin (or $HOME/go/bin). Make sure this directory is in your $PATH.
Setup (for AI agents)
# 1. Install
go install github.com/steviee/git-issues@latest
# 2. Initialize in your project
cd /path/to/your/project
issues init
# 3. Read the agent context
cat .issues/.agent.md
# 4. Start working
issues next # find next actionable issue
issues claim <id> # mark as in-progress
# ... do the work ...
issues done <id> # close when finished
The .issues/.agent.md file contains the full schema, all commands, and the recommended workflow.
Quick Start
# Initialize in any git repo
issues init
# Create issues
issues new --title "Fix login bug" --priority high --label bug
issues new --title "Add dark mode" --label feature
# List open issues
issues list
# Work on the next actionable issue
issues next
issues claim 1
# ... do the work ...
issues done 1
All changes are auto-staged for your next git commit.
How It Works
Each issue is a Markdown file in .issues/:
---
id: 1
title: "Fix login bug"
status: open
priority: high
labels: [bug, auth]
relations:
blocks: [3]
created: 2026-03-04
updated: 2026-03-04
---
Description and notes go here as free-form Markdown.
Filename format: 0001-fix-login-bug.md (zero-padded ID + slug, never changes).
Command Reference
Core Commands
| Command | Description |
|---|---|
issues init |
Initialize .issues/ in current directory |
issues new --title "..." [--priority P] [--label L] [--body "..."] |
Create a new issue |
issues list [--status S] [--priority P] [--label L] [--format F] |
List issues (formats: table, json, ids) |
issues show <id> [--format F] |
Show issue details (formats: text, json) |
issues edit <id> |
Edit issue in $EDITOR |
issues close <id> [--wontfix] [--reason "..."] |
Close an issue |
issues reopen <id> |
Reopen a closed issue |
issues set <id> <field> <value> |
Set priority, status, title, or label |
Relations
| Command | Description |
|---|---|
issues relate <id> <relation> <target-id> |
Add relation (blocks, depends-on, related-to, duplicates) |
issues unrelate <id> <relation> <target-id> |
Remove relation |
issues graph [--open-only] [--root <id>] |
Show dependency graph |
Relations are always bidirectional: issues relate 1 blocks 2 also writes depends-on: [1] to issue #2.
Agent-Optimized Commands
Designed for AI agent workflows with machine-readable output:
| Command | Description |
|---|---|
issues next [--format json] |
Next unblocked, highest-priority issue |
issues claim <id> |
Set status to in-progress |
issues done <id> |
Close the issue |
issues blocked [id] |
List blocked issues or show blockers for one issue |
issues check [--fix] |
Verify database consistency, optionally auto-fix |
Bulk Operations
| Command | Description |
|---|---|
issues batch close [--label L] [--status S] |
Close all matching issues |
issues batch set <field> <value> [--label L] [--status S] |
Set field on all matching issues |
Other
| Command | Description |
|---|---|
issues labels [--sort count|alpha] |
List all labels with frequency |
Filtering & Sorting
# Filter by status (default: open)
issues list --status all
issues list --status closed
# Filter by priority
issues list --priority critical
# Filter by label (OR logic)
issues list --label bug --label auth
# Sort (default: priority desc, then ID asc)
issues list --sort updated
issues list --sort created
# Output formats
issues list --format table # human-readable (default)
issues list --format json # machine-readable
issues list --format ids # space-separated IDs for scripting
Relations & Dependencies
# Issue 1 blocks issue 2
issues relate 1 blocks 2
# Show dependency graph
issues graph --open-only
# Output:
# #1 Fix auth [open, critical]
# └── blocks:
# #2 Login bug [open, high]
Relation types: blocks, depends-on, related-to, duplicates.
issues close warns if an issue has open blockers.
AI Agent Integration
git-issues is designed to work as the task management layer for AI coding agents. The .issues/.agent.md file (generated by issues init) provides agents with the schema and recommended workflow.
Recommended agent workflow:
issues next # find next actionable issue
issues claim <id> # mark as in-progress
# ... agent does the work ...
issues done <id> # close when finished
All commands support --format json for machine-readable output.
Import from GitHub
Migrate existing GitHub issues using the gh CLI:
issues init
gh issue list --state open --json number,title,body,labels --limit 500 | \
jq -c '.[]' | while read -r issue; do
title=$(echo "$issue" | jq -r '.title')
body=$(echo "$issue" | jq -r '.body // ""')
labels=$(echo "$issue" | jq -r '[.labels[].name] | join(",")')
if [ -n "$labels" ]; then
issues new --title "$title" --body "$body" --label "$labels"
else
issues new --title "$title" --body "$body"
fi
done
Working with Git Worktrees
git-issues works in multi-worktree setups. One rule to remember:
New issues: only on
main. Updating existing issues (claim, done, set): any branch.
This prevents ID collisions from parallel issues new. Additional tips:
- Claim before working —
issues claim <id>prevents two worktrees from modifying the same issue - Only modify your claimed issue from a feature branch
- Run
issues check --fixafter merging — repairs any broken relations
Configuration
.issues/.config.yml:
default_priority: medium
auto_stage: true
labels:
- bug
- feature
- auth
- security
- docs
default_priority: Used when creating issues without--priorityauto_stage: Automaticallygit addissue files on every changelabels: Predefined label list (informational, not enforced)
Claude Code Integration
git-issues ships with a Claude Code skill that teaches the agent to use git-issues as its sole task management system — replacing Claude's built-in TaskCreate/TaskUpdate tools entirely.
What the skill does
- Makes
/git-issuesavailable as a slash command in Claude Code - Auto-activates when Claude detects task-management context (planning, creating tasks, tracking progress)
- Enforces the Iron Workflow: pick → claim → branch → implement → done → merge
- Requires comprehensive issue bodies with context, success criteria, and implementation details
- Maps every
TaskCreate/TaskUpdateinstinct to the equivalentgit-issuescommand
Install the skill
# Option 1: Plugin (recommended — auto-updates)
/plugin marketplace add steviee/git-issues
/plugin install git-issues
# Option 2: Install script (manual)
./claude-skill/install.sh
# Option 3: Manual copy
mkdir -p ~/.claude/skills/git-issues
cp skills/git-issues/SKILL.md ~/.claude/skills/git-issues/SKILL.md
The plugin method is recommended because it pulls updates automatically when the skill is improved.
How it works with .agent.md
The skill is complementary to the .agent.md file generated by git-issues init:
| File | Purpose |
|---|---|
.issues/.agent.md |
Command reference — schema, commands, basic workflow (auto-generated, project-local) |
Skill (/git-issues) |
Behavioral rules — quality standards, creation protocol, recovery patterns (installed via plugin or ~/.claude/skills/) |
.agent.md tells the agent what commands exist. The skill tells the agent how to use them well.
Development
make build # build binary
make test # run tests
make lint # run go vet
make install # install to /usr/local/bin
License
MIT
Documentation
¶
There is no documentation for this package.