Minimal task tracker. Simple, fast, git-friendly.
- Plain JSON files in
.tasks/ - No daemons, no merge conflicts, no viruses
- Single binary, no runtime dependency
brew install nijaru/tap/tkgo install github.com/nijaru/tk@latestnpm install -g @nijaru/tkgit clone https://github.com/nijaru/tk
cd tk
go build -o tk .$ cd myapp
$ tk init # project auto-derived from directory
Initialized: .tasks
$ tk add Implement auth -p 1
Created task myapp-a7b3: Implement auth
$ tk add Write tests -p 2
Created task myapp-x9k2: Write tests
$ tk block x9k2 a7b3 # tests blocked by auth
Blocked myapp-x9k2 by myapp-a7b3
$ tk ready # what can I work on?
ID | PRIO | STATUS | TITLE
-----------------------------------------------------------------
myapp-a7b3 | p1 | open | Implement auth
$ tk start a7b3 # or tk active a7b3
Started myapp-a7b3: Implement auth
$ tk log a7b3 Using JWT approach
Logged to myapp-a7b3: Using JWT approach
$ tk done a7b3
Completed myapp-a7b3: Implement auth
$ tk ready # tests now unblocked
ID | PRIO | STATUS | TITLE
-----------------------------------------------------------------
myapp-x9k2 | p2 | open | Write tests| Command | Description |
|---|---|
tk init |
Initialize (project name from directory) |
tk add <title> |
Create task |
tk list / tk ls |
List tasks (hides done/closed by default) |
tk ls <query> |
Search tasks by title or description |
tk ready / tk rdy |
List active/open + unblocked tasks |
tk show <id> |
Show task details |
tk start <id> / active |
Start working (open → active) |
tk open <id> |
Reset task status to open |
tk defer <id> |
Defer task |
tk done <id> |
Complete task |
tk close <id> |
Close/cancel task |
tk edit <id> |
Edit task |
tk log <id> <msg> |
Add log entry |
tk block <id> <blocker> |
Add dependency (id blocked by blocker) |
tk unblock <id> <blocker> |
Remove dependency |
tk remove / tk rm <id> |
Delete task (prompts for confirmation) |
tk mv <id> <project> |
Move task or rename entire project |
tk clean |
Remove old terminal tasks (default: 14d) |
tk check |
Check task integrity |
tk config |
Show/set configuration |
tk completions <shell> |
Output shell completions (bash, zsh, fish) |
tk add Title -p 2 # Priority (0-4)
tk add Title -P api # Project prefix
tk add Title -d "Description" # Description
tk add Title -l bug,urgent # Labels (CSV)
tk add Title -A nick,alice # Assignees (CSV, @me for git user)
tk add Title --parent a7b3 # Parent task
tk add Title --estimate 3 # Estimate (user-defined units)
tk add Title --due 2026-01-15 # Due date (YYYY-MM-DD)
tk add Title --due +7d # Relative due date (+Nh/+Nd/+Nw/+Nm)tk list # List active/open/deferred tasks (limit 20)
tk list database # Search tasks for 'database'
tk list -a # Show all (including done/closed)
tk list -s done # Filter by status
tk list -p 1 # Filter by priority
tk list -P api # Filter by project
tk list -l bug # Filter by label
tk list --assignee nick # Filter by assignee
tk list --parent a7b3 # Filter by parent
tk list --roots # Top-level tasks only
tk list --overdue # Overdue tasks only
tk list -n 10 # Limit resultstk edit a7b3 -t "New title" # Update title
tk edit a7b3 -p 1 # Update priority
tk edit a7b3 -l +urgent # Add label
tk edit a7b3 -l -bug # Remove label (use --labels=-bug)
tk edit a7b3 --due - # Clear due date
tk edit a7b3 --parent - # Clear parenttk config # Show all config
tk config project # Show default project
tk config project set api # Set default project
tk config project rename old new # Rename project and all its tasks
tk config alias # List aliases
tk config alias web src/web # Add alias
tk config alias web --rm # Remove alias# Fish
tk completions fish > ~/.config/fish/completions/tk.fish
# Bash
tk completions bash >> ~/.bashrc
# Zsh
tk completions zsh > "${fpath[1]}/_tk"| Value | Name | Description |
|---|---|---|
| 0 | none | No priority set |
| 1 | urgent | Drop everything |
| 2 | high | Important |
| 3 | medium | Normal (default) |
| 4 | low | Nice to have |
-C <dir>— Run in different directory-j, --json— Output as JSON-V, --version— Show version-h, --help— Show help
NO_COLOR— Disable colored output
Plain JSON files in .tasks/ — one file per task, one config file.