Core

The local web board

tracker opens Atlas Home on 127.0.0.1:7432. The single-workspace board below is still supported. No hosted server, no second database, no login system. It is a local view over the Markdown snapshots, the event log, and the query index.

tracker web serve 127.0.0.1 · local only
Atlas Tasker v1.16 in dark mode, showing example tickets and agent assignments across the Kanban columns
The board with a ticket drawer open: Overview, Notes & activity, Policy/Gates, and Evidence in one place.

Serving

start it
tracker                                       # Atlas Home on 127.0.0.1:7432
tracker web serve --open                      # single-workspace board
tracker web serve --project APP --actor human:owner --open
tracker web serve --read-only --no-browser    # wallboard mode
tracker web status                            # where is it running
tracker web open                              # reopen the last server
  • Home binds 127.0.0.1:7432 and fails if another app owns that port. Legacy web serve picks a random free port. There is no non-loopback option.
  • Home clears a one-time URL fragment and exchanges it at POST /session/claim for an HttpOnly cookie. Legacy serve still prints ?token=. Home keeps pending claims in private local state until consumed or expired. That cookie is essential to the local app; this marketing site sets none.
  • --read-only serves the board without any mutation controls: handy for a shared screen.
  • Runtime status lands, without secrets, under .tracker/runtime/web/server.json, which is how web open and web status find the running server.

What you can do on it

  • The board shows Backlog, Ready, In Progress, In Review, Blocked, and Done; a disclosure opens Canceled. Done and Canceled stay separate because canceled work neither satisfies dependencies nor counts as completed. Drag cards between legal states: dropping a card on its own column is a no-op, and every move runs the same status-edge rules as the CLI. On a phone the board shows one column at a time and a strip above it switches between them.
  • The board uses the available width until you select a card. The ticket drawer then opens over the board, with a full-width layout on phones. Close it with the visible Close link or Escape. Four tabs group the details: Overview (description, acceptance criteria, schedule, and editing, including saved notes), Notes & activity (comments and history), Policy/Gates, and Evidence. Saving keeps you in the same project. If another session changes the ticket, Atlas shows a conflict and preserves your typed form values for review.
  • Each card shows its assignee on its face. Hover for a couple of seconds and a preview adds reviewer, priority, labels, and the blocker, gate, and comment counts without changing the drawer.
  • Create and edit tickets, assign, claim, release, comment, move through workflow states, and run request-review, approve, or complete where policy allows. For review_gate, reviewer approval is the transition to Done; it is not followed by a separate completion. Delete ticket uses tracker ticket delete (ticket archive is an alias): confirm names the ticket, history stays, there is no restore. Cancel is a status move, not archive. Show archived work with ?archived=1.
  • Filter by project, assignee, reviewer, label, priority, and type; search; and load saved views. The state lives in the URL, so a filtered board is a shareable local link.
  • Keyboard: n for a new ticket, / for search. Every drag action also exists as a button for non-drag users.

If a dependency, reviewer gate, owner gate, or read-only mode blocks an action, the page shows the service error instead of bypassing policy and keeps typed values. Stale edits conflict. The board mirrors the tracker; it never gets its own rules.

The other pages

The board lives at /board; the same server renders three more pages:

  • / is a welcome dashboard: per-project status rollups, blockers, a recent-activity feed, links into each project's board, and project creation when the server is not read-only.
  • /schedule is a week-view workspace for one-time scheduled tickets. New or replacement times must be strictly in the future; an existing schedule can become overdue normally. Pick a runner and a time, browse the week, and "Run due now" triggers everything that is due: human runners get a reminder, agent runners get an Atlas wakeup. Same data as tracker schedule on the CLI.
  • /settings is read-only. It shows the workspace, host, actor, owner name, language, and agent colors the server is running with; changing them still happens through tracker config.

Languages

The UI ships in six languages: English, Spanish, Indonesian, Chinese, Japanese, and Korean. A switcher in the page footer changes it per request; without it the server falls back to the web.lang config key, then the browser's Accept-Language. Two honest gaps for now: tracker config set web.lang only accepts en, es, and id, so reach the other three through the switcher or browser preference, and the schedule page is English-only.

The board is for humans

There is no API key and no headless mode, on purpose. Agents should not scrape or drive the board; they get the JSON CLI and MCP, which are faster and structured. Browser mutations record surface: "web" in the event log, so you can always tell how a change arrived.

Under the hood

The board uses the same canonical services as the CLI and TUI. Descriptions and comments render as escaped text; raw Markdown HTML is not injected into the page. It is a viewer over your repository state, not a separate application with its own storage.