The Problem
AI agents need long-term memory to coordinate work effectively. But existing solutions put up roadblocks:JIRA & Linear
API tokens, rate limits, constant browser context switching.
SQLite Files
Merge conflicts, zombie daemons, background processes to fight.
Complex CLIs
Verbose output burning through AI context windows.
No Git Integration
Issues live separately from code, making versioning difficult.
Learning from Beads
Steve Yegge’s Beads pioneered AI-native issue tracking. It got a lot right:Git-backed storage — issues versioned with code
Tight CLI — fast, focused commands
Core insight — AI agents need structured memory to coordinate work
The Friction Points
Beads proved the concept. Now we needed something more focused and portable.Discovering ticket
That’s when I stumbled on wedow/ticket — a single bash script that nailed it:
“Tickets are markdown files with YAML frontmatter in .tickets/. This allows AI agents to easily search them for relevant content without dumping ten thousand character JSONL lines into their context window.”
- ✅ No daemons
- ✅ No databases
- ✅ Just files
- ✅ Version controlled alongside your code
Why Rust?
Bash works great, but I wanted to floor it. Here’s what I wanted to add:1. Graph Analytics
Inspired by beads_viewer, I wanted powerful graph algorithms:- PageRank — Surface issues that unblock the most work
- Betweenness centrality — Identify bottleneck issues
- Critical path analysis — Understand project timelines
Learn More
See how graph analytics help you prioritize work
2. Native Python Bindings
Instead of subprocess overhead (runningtk via shell from Python), we can use Maturin to create native Python bindings:
3. Cross-Platform, Single Binary
Rust compiles to:- A single ~9MB executable
- Zero runtime dependencies
- Native performance on every platform
- Node.js requires a runtime installation
- Python requires interpreter + dependencies
- Bash has inconsistent behavior across platforms
4. Type Safety
Rust’s compiler catches bugs before they hit production:5. Sandboxed Environment Support
Because tk is a single binary with no dependencies, it works in restricted environments:- Claude Cowork/Claude Code web
- Docker containers (minimal base images)
- CI/CD runners (no setup required)
- Air-gapped systems (no external downloads)
The Result
ticket-rs combines the best of all these approaches:Design Decisions
Why Markdown + YAML?
Human-readable and machine-friendly. AI agents can grep, developers can diff, git can merge.- JSON blobs (verbose, not human-friendly)
- Binary databases (can’t grep or diff)
- External APIs (requires network, credentials, rate limits)
Why Local-First?
Your project’s issues should travel with your code. When yougit clone, you get:
- ✅ Source code
- ✅ Issue history
- ✅ Dependency graph
- ✅ Complete context
Why Zero Daemons?
Background processes create problems:- Zombie processes that need manual cleanup
- Port conflicts
- Resource consumption when idle
- Startup/shutdown complexity
Evolution Timeline
What’s Next?
ticket-rs is production-ready, but the journey continues:More Integrations
GitLab, Azure DevOps, Jira, Asana
Advanced Analytics
Velocity tracking, burndown charts, time estimates
Team Features
Assignees, mentions, notifications
AI Enhancements
Auto-triage, smart estimates, dependency suggestions