The command line

A tracker that speaks shell.

One tracker binary. Ordinary use is tracker init then tracker to open Home. The rest of the command surface covers tickets, boards, agents, gates, evidence, governance, and sync. Commands support --json and stable exit codes; only explicit interactive setup paths ask for input.

Shell, TUI, or Home. Your call.

The plain CLI is for scripts and agents. When a human wants to live in the tracker for a while, three interactive front ends share the exact same data and rules.

REPLtracker shell

Slash commands with no per-call startup cost: /board, /ticket create, /dispatch run, /approvals. Fastest way to grind through a grooming session.

/ticket move APP-1 in_review/inbox

Full screentracker tui

Board tab uses the same polished table as tracker board, with keyboard scrolling for long lists and optional Kanban cards. Queues, detail, search, review, and ops stay keyboard-first. Single keys claim, move, comment, approve, and complete tickets.

nmcpvd/

Browsertracker

Atlas Home on 127.0.0.1:7432: workspaces, projects, attention, backup health. Legacy tracker web serve --open is the single-workspace board. Loopback only, one essential session cookie, --read-only when you want a wallboard.

tracker--open--read-only

73 commands, nine neighborhoods.

Counted from the release source, not marketing. Run tracker help for the live list or read the full command reference for every flag.

4Setup

Initialize a workspace, tune config, and repair the index when something looks off.

initconfigdoctorreindex

10Tickets

Create, edit, link, label, classify, schedule, and search the work itself, one at a time or in bulk.

ticketprojecttemplatesclassifyschedulebulkrendersearchinspecttimeline

15Views

Read the same tickets from every useful angle, then save the angles you like.

boardbacklogblockednextqueuereview-queueowner-queuewhodashboardinboxapprovalsmentionsviewswatchunwatch

Personal queues include assigned backlog as pending work after ready and unblocked tickets. tracker next shows its readiness reason; it does not automatically promote or claim the ticket.

7Agents

Register agents, apply team presets, dispatch runs, and expose the MCP server.

agentteamdispatchrungoalintegrationsmcp

8Delivery

Tie tickets to branches, pull requests, checks, gates, evidence, and handoffs.

changechecksghgitgateevidencehandoffworktree

12Governance

Permission profiles, collaborators, trust, signing, audits, and redaction for teams that need proof.

governancepermissionspermission-profilecollaboratormembershiptrustauditkeysignverifyredactadmin

6Sync

Move workspaces between machines with bundles, remotes, and conflict tooling.

remotesyncbundleconflictimportexport

6Lifecycle

Back up, archive, compact, sweep, and automate the boring maintenance.

backuparchivecompactsweepnotifyautomation

5Interactive

The REPL shell, full-screen TUI, local web board, verified self-update, and version metadata.

shelltuiwebupdateversion

Pipe it anywhere. Parse it everywhere.

Add --json to any command and stdout becomes exactly one JSON document. Notifications, warnings, and errors go to stderr, so a pipeline never has to guess what it just read.

success: one envelope on stdout
$ tracker version --json
{
  "build_date": "2026-09-14T21:17:25Z",
  "commit": "3277570d8fef1a2b1b364e085f4b18091ab27671",
  "format_version": "v1",
  "go_version": "go1.26.6",
  "kind": "tracker_version",
  "platform": "darwin/arm64",
  "version": "v1.15.0"
}
failure: machine-readable error on stderr, stdout stays empty
{
  "format_version": "v1",
  "ok": false,
  "error": { "code": "not_found", "message": "ticket APP-99 not found", "exit": 3 }
}

Branch on error.code or the exit status, never on message text. And never parse the pretty tables: the JSON is the interface.

Eight codes, no surprises.

Exit codes are part of the public contract, so scripts and agents can branch without reading a single byte of output. Exit 4 on a status change is the workflow working, not a crash: only some status edges exist, and Atlas refuses the rest.

CodeMeaningWhat it usually is
0okIt worked.
1internalA real bug, or a missing required flag.
2invalid_inputBad status, type, priority, or actor. Malformed query.
3not_foundNo such ticket, project, agent, or view.
4conflictForbidden transition, ticket already claimed, already exists.
5permission_deniedPolicy, separation of duties, or the wrong reviewer.
6busyAnother writer holds the workspace lock.
7repair_neededIndex is unreadable, or doctor found it stale. Run tracker doctor --repair or tracker reindex.

Nothing ever prompts. A missing required flag fails immediately naming the flag instead of waiting on stdin, which is exactly what you want under automation.

Claim, work, prove, hand off.

This is the whole working rhythm, human or agent. Mutation commands resolve identity from --actor, then TRACKER_ACTOR, then actor.default; missing identity exits 2 before any write. Include --reason so the audit trail says why.

the loop
# what can I work on right now
tracker agent available builder-1 --json

# take it
tracker ticket claim APP-12 --actor agent:builder-1 --reason "start work"
tracker ticket move APP-12 in_progress --actor agent:builder-1 --reason "start work"

# leave a durable trace as you go
tracker ticket comment APP-12 --body "swapped the retry to exponential backoff" \
  --actor agent:builder-1 --reason "progress note"

# hand it over
tracker ticket request-review APP-12 --actor agent:builder-1 --reason "ready for review"

# and as the reviewer
tracker ticket approve APP-12 --actor agent:reviewer-1 --reason "review passed"

Statuses move through backlog, ready, in progress, in review, done, and canceled, with blocked as the exception lane. Review and done are reached through request-review, approve, or complete because those commands also run the completion policy and gates. Under review_gate, approval itself finishes the ticket; complete cannot skip review. The details live in tickets and workflow.

Give your agents the same CLI.

Everything on this page works for an AI agent too. The For agents page adds the MCP server, permission profiles, and the safety model on top.