Issue tracking for agents. Non-interactive, git-native, machine-first.
A machine-first issue tracker optimized for agents, featuring a git-native data structure for conflict-free collaboration.
curl -fsSL https://evil-mind-evil-sword.github.io/releases/tissue/install.sh | shOther methods
Pre-built binaries: emes releases
From source (requires Zig 0.15.2+):
zig build -Doptimize=ReleaseFast
cp zig-out/bin/tissue /usr/local/bin/Most issue trackers are built for humans clicking through web UIs. That doesn't work for agents, which need to create issues, check status, and close tickets programmatically. They can't answer interactive prompts or parse HTML.
tissue is non-interactive by design. Every command returns JSON on stdout, errors on stderr, and meaningful exit codes. The underlying storage is an append-only JSONL log that merges cleanly in git—no conflicts when multiple agents create issues simultaneously. A SQLite cache with FTS5 makes queries fast, but you can delete it anytime; it rebuilds from the log.
# Initialize in current repo
tissue init
# Create an issue
id=$(tissue new "Fix flaky tests" -p 1 --quiet)
# Add context and close
tissue comment "$id" -m "Root cause: race condition"
tissue status "$id" closed
# Find unblocked work
tissue readyExample output:
$ tissue list --status open
ID STATUS PRI TITLE
tissue-a3f8e9 open 1 Fix flaky tests
tissue-b19c2d open 2 Add caching layer
| Command | Description |
|---|---|
init |
Create .tissue/ store |
new "title" |
Create issue (returns ID) |
list |
List issues (filter with --status, --tag, --search) |
show <id> |
View issue details |
edit <id> |
Update title, body, status, priority, tags |
status <id> <status> |
Change status (open, in_progress, closed, ...) |
comment <id> -m "text" |
Add comment |
tag add/rm <id> <tag> |
Add or remove tag |
dep add/rm <id> <kind> <target> |
Link issues (blocks, relates, parent) |
ready |
List open issues with no blockers |
clean |
Remove old closed issues |
migrate <source> |
Import issues from another store |
All commands support --json for machine output and --quiet for ID-only output.
- Non-interactive; safe for automation
- Success: exit 0, output on stdout
- Failure: exit 1, error on stderr
--json: minified JSON with trailing newline--quiet: returns only the ID (overrides--json)- Store discovery:
--storeflag →TISSUE_STOREenv → walk up to find.tissue/
.tissue/
├── issues.jsonl # Append-only log (source of truth, git-tracked)
├── issues.db # SQLite cache (derived, git-ignored)
└── .gitignore
The JSONL log is the source of truth. The SQLite cache is rebuilt automatically when stale—delete it anytime.
tissue was directly inspired by Beads, Steve Yegge's memory system for coding agents. Beads introduced the pattern of JSONL-backed issue tracking with SQLite caching, dependency graphs, and agent-friendly --json flags. tissue adopts the same architecture while focusing on simplicity and a less aggressive development model.
Agent-Focused CLI Tools. The 2024-2025 explosion of agentic coding tools—Claude Code, Aider, Codex CLI—created demand for agent-native infrastructure. These tools work best with explicit context files and non-interactive utilities that compose in scripts and pipelines.
Git-Native Trackers. git-bug stores issues as git objects with bridges to GitHub/GitLab. Fossil by D. Richard Hipp pioneered VCS-integrated issue tracking. driusan/bug uses plain text files that merge with your code.
tracking issues.