Track is a local-first, CLI-first issue tracker.
- Local SQLite storage (
~/.track/track.db) - Issue lifecycle commands:
new,list,show,edit,setstatus add/list/remove(custom status management)label attach/detach(and backward-compatiblelabel add/rm)next,done,archive,reorder
- Import/Export:
export --format text|csv|json|jsonlimport --format text|csv|json|jsonl [--dry-run]
- Hooks:
hook add/list/rm/test- events:
issue.created,issue.updated,issue.status_changed,issue.completed,sync.completed
- GitHub integration (via
ghCLI):gh link,gh status,gh watch,gh auto-merge
- Optional local Web UI:
ui --port <port> [--open]
- Go 1.24+
- (
ghcommand only if you use GitHub watch/status features)
go build -o track ./cmd/trackFor local development checkout:
go install ./cmd/trackFor a published module:
go install github.com/myuon/track/cmd/track@latestFor stable usage, pin a version tag:
go install github.com/myuon/track/cmd/track@v0.1.0If track is not found after install, add Go bin to your PATH:
export PATH="$(go env GOPATH)/bin:$PATH"./track new "Add login page" --label ready --label backend --priority p1
./track list --status todo --sort priority
./track set TRK-1 --status in_progress
./track set TRK-1 --next-action "Implement UI + validation"
./track label attach TRK-1 blocked needs-refine
./track label detach TRK-1 blocked
./track status add blocked
./track next
./track done TRK-1This repository includes agent skills for operating track workflows:
skills/track-issue-flow- Purpose: help an agent resolve
trackCLI usage and move issues safely from discovery to status updates.
- Purpose: help an agent resolve
skills/track-dev-cycle- Purpose: run issue work end-to-end in plan/execution modes with tracker state updates.
Install from this repository:
npx skills add myuon/trackTypical flow with the skill:
- Run
track listand map a requested list position to an issue ID. - Run
track show <issue-id>to confirm scope and labels. - Apply updates with explicit ID-based commands such as:
track set <issue-id> --status in_progresstrack set <issue-id> --priority p2track set <issue-id> --next-action "<text>"track done <issue-id>
Example for a request like "5番を進めたい":
track list
track show TRK-5
track set TRK-5 --status in_progress
track set TRK-5 --next-action "Implement first slice"Track stores config at ~/.track/config.toml.
./track config get ui_port
./track config set ui_port 8787
./track config set open_browser trueFor testing or isolated runs, set TRACK_HOME:
export TRACK_HOME=$(mktemp -d)
./track version./track ui --port 8787 --open./track hook add issue.completed --run "/bin/sh -c 'echo done:$TRACK_ISSUE_ID'"Register repository hook:
./track hook add issue.created \
--run "./scripts/hooks/auto-organize-on-created.sh" \
--cwd "$(pwd)"Re-register safely (remove duplicates first):
./track hook list | awk -F'\t' '$2=="issue.created" && $3=="./scripts/hooks/auto-organize-on-created.sh" {print $1}' \
| xargs -r -n1 ./track hook rm
./track hook add issue.created --run "./scripts/hooks/auto-organize-on-created.sh" --cwd "$(pwd)"Isolated verification (TRACK_HOME=$(mktemp -d)):
export TRACK_HOME=$(mktemp -d)
./track hook add issue.created --run "./scripts/hooks/auto-organize-on-created.sh" --cwd "$(pwd)"
id=$(./track new "hook test")
./track show "$id"Expected behavior:
status != todo: no-op- missing
assignee: set toagent - missing
next_action: set toplanning: refine spec and decide ready/user - existing
assignee/next_action: kept as-is
go test ./...GitHub Actions runs tests automatically on:
pull_requestpushtomain
After opening a PR, you can link it to an issue and monitor with track gh:
track gh link TRK-15 --pr <PR number or URL> --repo <owner/name>
track gh status TRK-15
track gh watch --repo <owner/name>