Die Frage, mit der man einen Zeittracker öffnet
Wer seine Zeit mit Watson erfasst, kennt das Muster: watson report, watson log, watson aggregate — jede Frage ein eigener Befehl, jede Antwort eine neue Textwand. Dabei ist die Frage fast immer dieselbe: Wie sieht meine Woche aus?
watson-tui beantwortet genau sie beim Start. Die Summary-Ansicht zeigt einen Block pro Tag, darunter die Projekte des Tages und unter jedem Projekt seine Tags — Tage und Projekte mit einem Balken, der sie gegen den stärksten Tag der Woche misst. Ein ruhiger Tag sieht ruhig aus, eine Lücke in der Woche ist sichtbar statt bloß abwesend: Tage ohne Buchung stehen gedimmt mit – da, statt still zu verschwinden.
Die einzelnen Sessions sind eine Taste entfernt: f wechselt zur Frame-Liste und zurück.
Alles per Taste
Die Bedienung folgt vi-Konventionen: j/k bewegt, / filtert nach Projekt, Tag oder ID, ←/→ blättert durch die Perioden, t/w/m/a schaltet zwischen Tag, Woche, Monat und der gesamten Historie um. Timer starten und stoppen (s), Frames anlegen, bearbeiten und löschen (n, enter, d) — alles ohne das TUI zu verlassen. Der Frame-Editor bringt Tab-Completion für Projekte und Tags mit.
Der Header zeigt immer, worauf man gerade schaut: Periode, Gesamtzeit, Vergleich zur Vorperiode und zur nächstgrößeren Einheit, Anzahl Frames und Projekte, laufender Timer. Und er lügt nicht: Sein Total entspricht immer exakt dem, was darunter steht.
Report und Abrechnung
Der Report (r) summiert die gewählte Periode pro Projekt, mit Tag-Summen darunter. Die Overview (o) ist die Abrechnungssicht: Summen pro Projekt über diese Woche, letzte Woche, diesen Monat, letzten Monat und alles.
Weil daraus Rechnungen entstehen, ist die Zuordnung präzise definiert: Ein Frame zählt vollständig zur Periode, in der er startet — genau wie bei Watson selbst. Ein laufender Timer zählt bis jetzt und wird unter der Tabelle ausgewiesen. Keine Dauer wird jemals abgeschnitten.
Ein Terminal-UI, das sein Medium ernst nimmt
Das Interface nutzt die ANSI-Farben des Terminal-Themes und passt sich der Fenstergröße in definierten Stufen an: Wird es schmal, schrumpfen zuerst die Tags, dann die Projektnamen — Spalten wie die Frame-ID fallen ganz weg statt halb. Watson löst IDs über ihren Präfix auf; eine gekürzte ID würde mehrere Frames treffen, oder den falschen. Gleiches Prinzip beim Balken: Unter zehn Spalten kann er ein Zehntel nicht mehr von einer Hälfte unterscheiden, also verschwindet er, statt falsche Proportionen zu zeigen.
Dahinter steht eine einfache Regel: Eine Anzeige, die etwas Falsches behauptet, ist schlechter als keine.
Watson bleibt die Datenbank
Wie schon bei Conan gilt: kein neuer Datensilo. watson-tui liest und schreibt Watsons Datenformat direkt — frames, state, config, gleiche Dateien, gleiches JSON. Es braucht kein installiertes Watson und kein Python. Wer die CLI hat, teilt sich die Daten; wer sie nicht hat, verliert nichts. Der Wochenstart kommt aus Watsons config, ein R lädt die Daten neu, wenn ein anderes Tool — etwa Conan — parallel schreibt.
Stack und Auslieferung
- Go, ein statisches Binary, keine Laufzeit-Dependencies.
- Homebrew-Cask über den eigenen Tap:
brew tap schnaq/tap && brew install --cask watson-tui. Updates perbrew upgrade. - Linux über die Release-Archive (
linux_amd64,linux_arm64) — Binary in denPATH, fertig. - Release-Pipeline: Ein
v*-Tag genügt, GitHub Actions baut mit GoReleaser und aktualisiert den Cask automatisch.
Warum wir das bauen
Watson ist unser Zeiterfassungs-Backbone — Conan schreibt hinein, Rechnungen entstehen daraus. Was fehlte, war die schnelle Antwort auf die tägliche Frage nach der Woche, ohne Befehle zu tippen und Ausgaben zu parsen. watson-tui ist diese Antwort: ein Werkzeug, das beim Start das Richtige zeigt, alles Weitere eine Taste entfernt hält und die Daten dort lässt, wo sie hingehören — im offenen Watson-Format.
Der Code liegt offen auf GitHub, Builds gibt es im aktuellen Release — oder direkt per brew install --cask schnaq/tap/watson-tui.