schnaq Labs[app]

status: open-source

watson-tui — Time Tracking in the Terminal, No Detours

A lean terminal UI for Watson time tracking, in Go. Reads and writes Watson's data format directly — no Watson install needed, existing data keeps working as it is.

The question you open a time tracker with

If you track your time with Watson, you know the pattern: watson report, watson log, watson aggregate — every question its own command, every answer another wall of text. Yet the question is almost always the same: what does my week look like?

watson-tui answers exactly that on launch. The summary view shows one block per day, the projects worked on that day and, under each, its tags — days and projects with a bar measuring them against the strongest day of the week. A quiet day looks quiet, and a gap in the week is visible rather than merely absent: days without a recorded frame appear dimmed with – instead of silently disappearing.

The individual sessions are one key away: f switches to the frame list and back.

Everything by key

The controls follow vi conventions: j/k moves, / filters by project, tag or ID, ←/→ pages through periods, t/w/m/a switches between day, week, month and the entire history. Starting and stopping timers (s), creating, editing and deleting frames (n, enter, d) — all without leaving the TUI. The frame editor comes with tab completion for projects and tags.

The header always shows what you are looking at: the period, its total, a comparison against the previous period and the next larger one, the number of frames and projects, and any running timer. And it doesn't lie: its total always matches exactly what stands below it.

Report and billing

The report (r) sums the selected period per project, with tag totals below each one. The overview (o) is the billing view: totals per project across this week, last week, this month, last month and everything.

Because invoices come out of this, the attribution is precisely defined: a frame counts in full towards the period it starts in — exactly like Watson itself. A running timer counts up to now and is called out below the table. No duration is ever cut off.

A terminal UI that takes its medium seriously

The interface uses your terminal theme's ANSI colours and adapts to the window size in defined steps: as it gets narrow, tags shrink first, then project names — columns like the frame ID drop out entirely rather than by half. Watson resolves IDs by their prefix; a shortened ID would match several frames, or the wrong one. The same principle applies to the bar: below ten columns it can no longer tell a tenth from a half, so it disappears instead of showing wrong proportions.

Behind this sits one simple rule: a display that claims something false is worse than none.

Watson stays the database

As with Conan before it: no new data silo. watson-tui reads and writes Watson's data format directly — frames, state, config, same files, same JSON. It needs no Watson install and no Python. If you have the CLI, you share the data; if you don't, you lose nothing. The week start comes from Watson's config, and R reloads the data when another tool — Conan, say — writes alongside.

Stack and delivery

  • Go, one static binary, no runtime dependencies.
  • Homebrew cask from our own tap: brew tap schnaq/tap && brew install --cask watson-tui. Updates via brew upgrade.
  • Linux through the release archives (linux_amd64, linux_arm64) — put the binary on your PATH, done.
  • Release pipeline: push a v* tag and GitHub Actions builds with GoReleaser and updates the cask automatically.

Why we build this

Watson is our time-tracking backbone — Conan writes into it, invoices come out of it. What was missing was the fast answer to the daily question about the week, without typing commands and parsing output. watson-tui is that answer: a tool that shows the right thing on launch, keeps everything else one key away, and leaves the data where it belongs — in Watson's open format.

The code is public on GitHub, builds ship with the latest release — or straight via brew install --cask schnaq/tap/watson-tui.

// Status

status: open-source

// Stack

Go

// Live since

2026-07

// Head Maintainer

Talk about this project