Tracker
A command-line project management tool inspired by Pivotal Tracker, with an interactive TUI.
For the children. Thanks to all my friends and colleagues for the memories.
Features
- Story Management: Create, edit, and track features, bugs, and chores
- Workflow States: Prescriptive workflow (unscheduled → unstarted → started → finished → accepted)
- Velocity Tracking: Automatic calculation based on completed iterations
- Iteration Planning: Organize work into time-boxed iterations
- Interactive TUI: Full-featured terminal user interface with Bubble Tea
- Human-readable Data: YAML config and JSONL storage
Installation
go install github.com/cboone/tracker/cmd/tracker@latest
Or build from source:
git clone https://github.com/cboone/tracker
cd tracker
go build -o tracker ./cmd/tracker
Quick Start
# Initialize a new project
tracker init "My Project"
# Add stories
tracker add "User authentication" -t feature -p 3 -l auth -l mvp
tracker add "Fix login crash" -t bug -l urgent
tracker add "Setup CI" -t chore
# Move to backlog and start working
tracker move 1 backlog
tracker start 1
# Complete the workflow
tracker finish 1
tracker accept 1
# Check status
tracker status
# Open interactive TUI
tracker
Commands
Project Management
| Command |
Description |
tracker init [name] |
Initialize a new project |
tracker status |
Show project summary |
Story CRUD
| Command |
Description |
tracker add <title> [flags] |
Create a new story |
tracker list [panel] |
List stories |
tracker show <id> |
Show story details |
tracker edit <id> [flags] |
Edit a story |
Add Flags
-t, --type: Story type (feature, bug, chore)
-p, --points: Story points (0, 1, 2, 3, 5, 8)
-l, --label: Labels (repeatable)
-d, --description: Description
--panel: Initial panel (icebox, backlog)
Workflow
| Command |
Description |
tracker start <id> |
Start working on a story |
tracker finish <id> |
Mark story as finished |
tracker accept <id> |
Accept a finished story |
tracker reject <id> |
Reject back to started |
tracker move <id> <panel> |
Move to another panel |
tracker reorder <id> <pos> |
Change position in panel |
Iterations
| Command |
Description |
tracker iteration |
Show current iteration |
tracker iteration next |
Start next iteration |
tracker iteration history |
Show past iterations |
Interactive TUI
Run tracker without arguments to open the interactive interface.
Keyboard Shortcuts
| Key |
Action |
h/← |
Move to left panel |
l/→ |
Move to right panel |
j/↓ |
Move down |
k/↑ |
Move up |
Enter |
View story details |
n |
New story |
e |
Edit story |
s |
Start story |
f |
Finish story |
a |
Accept story |
r |
Reject story |
m |
Move to next panel |
? |
Show help |
q |
Quit |
Story Types
| Type |
Description |
Has Points |
| Feature |
New functionality |
Yes |
| Bug |
Something broken |
No |
| Chore |
Technical task |
No |
Workflow States
┌─────────────┐ ┌─────────────┐ ┌──────────┐ ┌─────────────┐ ┌──────────┐
│ unscheduled │──▶│ unstarted │──▶│ started │──▶│ finished │──▶│ accepted │
│ (icebox) │ │ (backlog) │ │ │ │ │ │ (done) │
└─────────────┘ └─────────────┘ └──────────┘ └─────────────┘ └──────────┘
│
│ reject
▼
┌─────────────┐
│ rejected │
└─────────────┘
Note: Chores skip the finished state and go directly from started to accepted.
Panels
| Panel |
Description |
| Icebox |
Unprioritized stories |
| Backlog |
Prioritized stories (current iteration at top, with iteration dividers) |
| Done |
Accepted stories |
Data Storage
All data is stored in the .tracker/ directory:
config.yaml: Project configuration
stories.jsonl: Story data in JSON Lines format
Example Config
name: "My Project"
velocity: 8
iteration_length: 1
point_scale: [0, 1, 2, 3, 5, 8]
iteration_start: "2024-01-13"
Example Story
{"id":1,"type":"feature","title":"User login","state":"started","points":3,"labels":["auth"],"panel":"backlog","position":1,"created_at":"...","updated_at":"..."}
Velocity
Velocity is automatically calculated as the average points completed over the last 3 iterations.
Development
Prerequisites
Building
go build -o tracker ./cmd/tracker
Testing
This project uses Go's built-in testing for unit tests and scrut for end-to-end CLI tests.
# Run Go unit tests
go test ./...
# Run Go unit tests with verbose output
go test -v ./...
# Run Go unit tests with coverage
go test -cover ./...
# Generate coverage report
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
# Run Scrut end-to-end tests
scrut test tests/e2e/
Linting
go vet ./...
Project Structure
cmd/tracker/ # Application entry point
internal/
cli/ # Command-line interface (Cobra commands)
config/ # Configuration handling
domain/ # Core domain types (Story, Iteration, Velocity)
storage/ # Data persistence (JSONL)
tui/ # Terminal UI (Bubble Tea)
License
MIT