KI-CLI-Tools auf Remote-Servern erfassen

Wenn du Claude Code, Cursor CLI oder ein anderes KI-Kommandozeilentool auf einem entfernten Linux-Server nutzt, kann die Desktop-App auf deinem eigenen Computer diese Sitzungen nicht sehen. Installiere dafür den Headless-Agent auf dem Server. Er erfasst dieselben Kommandozeilentools wie die Desktop-App (Claude Code, Cursor CLI, Codex CLI, Gemini CLI, OpenCode, Aider und Ollama), jede laufende Sitzung einzeln, mit ihrem Projekt und ob sie gerade arbeitet oder auf dich wartet.

Installieren

curl -fsSL https://app.timeuno.io/install-agent.sh | bash

Das Skript:

  • lädt das Binary für deine CPU (x86_64 oder arm64) nach ~/.local/share/timeuno/bin/ herunter und prüft seine Prüfsumme. Ist minisign installiert, prüft es zusätzlich die Signatur des Releases;
  • verlinkt es als timeuno-agent in /usr/local/bin (oder ~/.local/bin, falls es dort nicht schreiben darf);
  • richtet für bash, zsh und fish einen Shell-Hook ein, der den Namen jedes Befehls festhält, den du ausführst (mehr dazu unten);
  • richtet einen systemd-Benutzerdienst ein und aktiviert Lingering, damit der Agent weiterläuft, nachdem du dich abgemeldet hast.

Setze TIMEUNO_NO_SERVICE=1, um den systemd-Dienst auszulassen, und TIMEUNO_NO_SHELL_HOOK=1, um den Shell-Hook auszulassen. Setze TIMEUNO_REF auf ein Release-Tag (etwa agent-v0.2.0), um eine bestimmte Version zu installieren.

Verbinden

timeuno-agent pair

Der Befehl gibt einen Link aus. Öffne ihn im Browser auf deinem eigenen Computer, nicht auf dem Server, und bestätige die Verbindung. Siehe Gerät verbinden. Danach:

systemctl --user start timeuno-agent

Was dein Gerät verlässt

Der Agent sendet dieselben Daten wie die Desktop-App: wann jede KI-Sitzung beginnt und endet, ob sie arbeitet oder wartet, das Modell, Token-Anzahl und Kosten sowie den Projektordner. Deine Prompts verlassen nie dein Gerät, hier also den Server. Dasselbe gilt für die Antworten der KI, die Ausgaben von Befehlen und deinen Code.

Damit deine Stundenzettel-Zeilen sagen, woran du gearbeitet hast, sendet er außerdem diese Aufgabendetails:

  • den Titel, den das KI-Tool selbst der Sitzung gegeben hat;
  • die Betreffzeilen der Commits, die die KI erstellt hat;
  • die Pfade der Dateien, die die KI bearbeitet hat, relativ zum Projektordner;
  • die Art der Aufgabe (Fehlerbehebung, Entwicklung, Tests, Doku…) und den betroffenen Bereich (Abrechnung, Login…), auf deinem Gerät aus einer festen Liste gewählt, nie in deinen Worten;
  • über den Shell-Hook den Namen jedes Befehls, den du ausführst, bei einigen Tools wie git, npm, make oder docker auch sein erstes Wort (git push, docker compose), nie den Rest der Zeile, und den Ordner, in dem du ihn ausführst, wobei dein Home-Ordner als ~ erscheint.

Alles in einem Titel oder einer Commit-Betreffzeile, das wie ein Schlüssel oder Token aussieht, wird vorher durch [redacted] ersetzt. Mehr dazu unter KI-Tools.

Um keine Aufgabendetails mehr zu senden, schalte Einstellungen → Deine Daten → Aufgabendetails teilen aus. Die bereits gespeicherten Details werden gelöscht. Bei seiner nächsten Rückmeldung hört der Agent auf, sie zu senden, und leert die Datei des Shell-Hooks mit den Befehlen, die er noch nicht gesendet hat. Die Zeiterfassung läuft weiter.

Shell-Hook

Für jede Shell, die auf dem Server vorhanden ist (bash, zsh, fish), richtet der Installer den Hook ein: eine Zeile am Ende von ~/.bashrc bzw. ~/.zshrc, die auf # timeuno-shell-hook endet, und für fish eine Datei in ~/.config/fish/conf.d/. Vor jedem Befehl schreibt der Hook dessen Namen und Ordner in eine Datei, die der Agent sendet. Nur der Name des Befehls bleibt, bei einigen Tools wie git, npm, make oder docker auch sein erstes Wort, nie der Rest der Zeile: Aus git commit -m "Login reparieren" wird git commit, aus vim notizen.txt wird vim. Er hält nur Namen fest, hinter denen ein echter Befehl steht, eine vertippte Zeile oder ein eingefügtes Geheimnis bleibt also nicht hängen. Solange der Agent nicht verbunden ist oder dein Konto keine Aufgabendetails teilt, schreibt der Hook nichts.

  • Um ihn bei der Installation auszulassen, setze TIMEUNO_NO_SHELL_HOOK=1.
  • Um ihn später einzurichten, führe timeuno-agent shell-hook install aus.
  • Um ihn zu entfernen, führe timeuno-agent shell-hook remove aus. Dabei werden auch die Befehle gelöscht, die er noch nicht gesendet hat.
  • timeuno-agent status zeigt für bash, zsh und fish, ob der Hook installiert ist, wann er zuletzt einen Befehl festgehalten hat und wie groß seine Datei ist.

Befehle

BefehlWas er tut
timeuno-agent pairVerbindet den Agent mit deinem Konto.
timeuno-agent statusZeigt die Version, ob Updates automatisch laufen, welche KI-Tools er gefunden hat und den Zustand des Shell-Hooks je Shell.
timeuno-agent shell-hook installRichtet den Shell-Hook ein (das übernimmt sonst der Installer).
timeuno-agent shell-hook removeEntfernt den Shell-Hook.
timeuno-agent updateInstalliert sofort die neueste Version.
timeuno-agent runFührt den Agent im Vordergrund aus (das übernimmt sonst der Dienst).
timeuno-agent versionGibt die Version aus.

Updates

Läuft der Agent als systemd-Dienst, sucht er ein paar Minuten nach dem Start und danach alle 6 Stunden nach einer neuen Version. Er prüft die Signatur, tauscht sich selbst aus und startet neu.

  • Führe nach timeuno-agent update den Befehl systemctl --user restart timeuno-agent aus.
  • Um automatische Updates abzuschalten, setze "auto_update": false in ~/.config/timeuno/config.json oder TIMEUNO_NO_AUTO_UPDATE=1 in der Umgebung des Dienstes.

Agents, die mit Version 0.1.0 installiert wurden, können sich nicht selbst aktualisieren. Führe den Installationsbefehl einmal erneut aus.

Wenn systemctl fehlschlägt

Meldet systemctl --user den Fehler Failed to connect to bus: Permission denied, setze in dieser Shell XDG_RUNTIME_DIR=/run/user/$(id -u) und versuche es erneut.