tkt
Track tasks as markdown files in your git repo.
What It Does
One markdown file per task, with status and dependencies in the header. tkt tells you what's ready to work on next.
.tickets/
├── 01-auth-system.md # done
├── 02-api-endpoints.md # open, waiting on 01
└── 03-deploy-pipeline.md # open, waiting on 02
| When I'm... | I want to... | So I can... |
|---|---|---|
| Starting a work session | see what's unblocked | pick the right thing to work on |
| Grabbing a task | know nobody else took it | avoid duplicate effort |
| Finishing something | mark it done and unblock the next tasks | keep things moving |
| Working with others | create tasks without ID collisions | push tickets at the same time |
| Checking project health | find cycles or broken references | catch problems early |
Quick Start
You need: git installed, inside a git repo.
# Install
|
# Set up your tickets directory
&& &&
# Create your first task
# → ✓ created 01 auth-system (pushed)
# See what's ready
# → Ready (1):
# → 01 Implement authentication
# Claim it (marks in-progress, tells others it's taken)
# → ✓ claimed 01 auth-system (→ in_progress)
# Close it when done
# → ✓ closed 01 auth-system (Resolution written)
Install
Pre-built binaries (fastest):
# macOS / Linux
|
# Windows (PowerShell)
|
From crates.io:
# Or with cargo-binstall (downloads pre-built binary, no compile)
From source:
Single binary, no runtime dependencies beyond git.
Usage
See what's ready
Shows tasks that are open and have all their dependencies done, sorted by priority.
Create tasks
IDs are assigned automatically. In shared repos, tkt checks both local and remote files to avoid collisions.
Work on tasks
claim is optional — close works directly on open tasks. Use claim in shared repos so others know what you're working on.
Edit and maintain
Flags reference
| Flag | Used by | Effect |
|---|---|---|
-o json |
all | structured JSON output (errors to stderr, data to stdout) |
--dry-run |
new, claim, close, edit | preview what would happen without writing |
--json |
ready | machine-readable output (alias for -o json ready) |
--strict |
validate, sync-plan, doctor | treat warnings as errors |
--brief |
validate, sync-plan | short human output |
--blocked-by N,N |
new, batch, edit | set dependencies |
--priority P |
new, batch, edit | urgent, high, medium (default), low |
--note "..." |
close | explain what was done |
--ac N,N |
close, edit | check acceptance criteria boxes |
--check-all |
close | check all acceptance criteria at once |
--evidence "..." |
close | link proof to validation criteria |
--vc "..." |
new, edit | set validation criteria (repeatable) |
Task Format
---
id: "01"
title: "Implement authentication"
status: open # backlog | open | in_progress | done
blocked_by: # IDs that must be done first
priority: high # optional: urgent > high > medium > low
---
# Implement authentication
## What to build
JWT-based auth with refresh token rotation...
## Acceptance criteria
- JWT tokens issued on login
- Refresh token rotation works
Tasks are just files. Edit them by hand anytime — tkt reads whatever's there.
Configuration
Project config in .tickets/config.toml (committed with your repo):
[]
= true # false for local-only repos (no network calls)
[]
= false # require a --note when closing
= true # require all acceptance criteria checked (default: true)
= false # require validation_criteria field
= "warn" # "true" | "warn" | "false"
= true # false to disable --force escape hatch
[]
= false # treat warnings as errors
[]
= "" # filter tasks by environment
[]
= "medium"
Manage with tkt config --list or tkt config --set push.enabled=false.
User config (~/.config/tkt/config.toml) provides global defaults; project config overrides per-repo. See tkt config --show for resolved values with sources.
How It Works
- Tasks that depend on other tasks won't show up in
tkt readyuntil those dependencies are done - When you create or claim a task, tkt pushes immediately — if someone else pushed first, it retries with a new ID
- Edits only touch the specific field you changed, leaving everything else untouched
- All reads are local and fast (~50ms). Writes include a git push round-trip (~2s) — disable with
push.enabled = falsefor local-only workflows
AI Agent Integration
tkt works well with AI coding agents. Add to your AGENTS.md:
tkt ready # what to work on next
tkt claim <id> # mark as in-progress
tkt close <id> --check-all --resolution "..." # mark done
tkt validate --brief # check for problems
Solo workflow: tkt ready → pick one → tkt close <id> --check-all --resolution "...".
Multi-agent workflow: tkt ready → tkt claim <id> → work → tkt close <id>.
Development
If you've cloned this repo, you're a maintainer. Regular users install from crates.io or pre-built binaries.
# Build and deploy to PATH (run after pulling or making changes)
&& &&
# Verify
# Gate (run before every commit)
&& &&
Telemetry
Optional, local-only telemetry (disabled by default). Nothing leaves your machine. See TELEMETRY.md.
Contributing
Found a bug? File a report. Want a feature? Request it.
License
MIT