Store uploads on disk under DataDir and expose them in the web ticket view so .xlsx files can be previewed and saved as cell values without YouTrack or TUI sync. Co-authored-by: Cursor <cursoragent@cursor.com>
task-master
Offline-first Terminal-Taskmanager (tm) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit Bubble Tea.
Demo wird aus
demo.tapeerzeugt (make demo). Ohne GIF lokal: siehe Demo aufnehmen.
Features
- Projekte & Tickets lokal als JSON (kein Server) — Binary
tm - Web-Server
tm_servermit eingebettetem Svelte-UI, SQLite, Auth und Rechte pro Projekt - Board-Filter: All / Backlog / In Progress / Done
- Tickets in
$EDITORbearbeiten (Markdown + Checklisten) - Timer, manuelle Zeitbuchungen, Zeiteinträge verwalten
- Report mit Group-by (Ticket / Tag)
- Undo / Redo über eine Command-History (TUI)
- Vim-Style Keybindings (TUI)
- YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt)
- Server: Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen
Install
Voraussetzung: Go (siehe go.mod). Für tm_server zusätzlich Node.js (Frontend-Build).
git clone git@git.aloxdrim.de:skruecken/task-master.git
cd task-master
make install # → $(go env GOPATH)/bin/tm
# oder nur bauen:
make build # → ./bin/tm
make build-server # Frontend + → ./bin/tm_server
Nutzung
tm # TUI starten
tm sync pull # Issues von YouTrack holen
tm sync push # lokale Änderungen nach YouTrack
tm sync pull -p inbox # anderes Projekt
tm version # Build-Version (Git-Hash)
tm help
Web-Server (tm_server)
# Dev/Test gegen lokales tm_server (kein YouTrack): seedet Projekte + verdrahtet TUI
make run-server-dev # :8080, Data unter ./.dev-home, Login admin/admin
make run-dev # TUI: Projekte „Test“ + „Website Relaunch“ schon mit Token connected
# Produktion / manuell:
export TM_ADMIN_USER=admin
export TM_ADMIN_PASSWORD='change-me'
export TASK_MASTER_SECRET='long-random-secret' # verschlüsselt Remote-Tokens
./bin/tm_server -listen :8080
# JSON-Daten der TUI einmalig importieren:
./bin/tm_server import-json -owner admin
UI: http://localhost:8080 — Dashboard, Board, Report, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History.
Das Test-Environment (run-server-dev) spricht nur mit diesem Backend; YouTrack ist dort nicht verdrahtet.
Beim Seed werden für Test und Website Relaunch Write-Tokens erzeugt und unter .dev-home als lokale TUI-Projekte (backend=taskmaster) hinterlegt — danach make run-dev und Sync (Y → Pull).
Dev-Frontend (Vite, API-Proxy): cd web && npm run dev parallel zu tm_server.
Sandbox ohne echte Config/Daten:
make run-dev # nutzt ./.dev-home
# oder:
TASK_MASTER_HOME=/tmp/tm-sandbox tm
Daten landen standardmäßig unter ~/.local/share/task-master, Config unter ~/.config/task-master.
| Variable | Wirkung |
|---|---|
TASK_MASTER_HOME |
Basis für Config + Daten (Dev/Demo) |
TASK_MASTER_DATA_DIR |
Nur Datenverzeichnis überschreiben |
Keybindings (Auszug)
| Taste | Aktion |
|---|---|
j/k |
Navigieren |
n |
Neues Ticket/Projekt |
e |
Ticket im Editor |
s |
Status ändern |
l |
Board-Filter |
/ |
Suche |
p/P |
Projekt / Ticket verschieben |
e |
Ticket bzw. Projekt editieren (in Projektliste: YouTrack) |
Y |
YouTrack-Menü: Pull / Push |
t/T |
Timer / Zeit buchen |
m |
Zeiteinträge |
r |
Report |
x/X |
Löschen / Force-Delete |
u/U |
Undo / Redo |
q |
Beenden |
Checklisten im Preview: J/K + Space.
YouTrack
p→ Projekt wählen →e- Remote-URL, Permanent Token und Project-Key setzen (gespeichert in
projects/<id>/meta.json, Mode0600) - Lokal arbeiten (Anlegen/Edit/Status bleiben lokal)
Y→ Pull (Issues + Work Items) oder Push (Tickets + Zeiteinträge)
CLI:tm sync pull/tm sync push
Zeit: lokale Einträge ohne externalId werden als YouTrack-Work-Items gepusht; remote Work Items landen lokal beim Pull.
Status-Mapping Richtung YouTrack: OPEN→Open, WIP→In Progress, DONE→Fixed (Workflow-Namen können projektspezifisch abweichen).
Entwicklung
make test
make build
make version
Demo aufnehmen
Die Walkthrough-Aufnahme steckt in demo.tape (VHS):
# einmalig: vhs + ttyd/ffmpeg (siehe VHS-Docs)
make demo # schreibt demo.gif (+ demo.mp4)
Die Pipeline erzeugt das GIF ebenfalls und lädt es als Artifact hoch.
Lizenz
Privat / eigener Use — siehe Repository-Einstellungen auf Gitea.
