AI-CLI-tools registreren op een server

Gebruik je Claude Code, Cursor CLI of een andere AI-commandlinetool op een externe Linux-server, dan kan de desktop-app op je eigen computer die sessies niet zien. Installeer daarvoor de headless agent op de server. Die registreert dezelfde commandlinetools als de desktop-app (Claude Code, Cursor CLI, Codex CLI, Gemini CLI, OpenCode, Aider en Ollama), elke lopende sessie apart, met het project en of de tool aan het werk is of op je wacht.

Installeren

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

Het script:

  • downloadt het programma voor je processor (x86_64 of arm64) naar ~/.local/share/timeuno/bin/ en controleert de checksum. Als minisign geïnstalleerd is, controleert het ook de handtekening van de release;
  • maakt een link timeuno-agent in /usr/local/bin (of in ~/.local/bin als het daar niet kan schrijven);
  • voegt een shell-hook toe voor bash, zsh en fish die de naam noteert van elke opdracht die je uitvoert (meer daarover hieronder);
  • richt een systemd-gebruikersservice in en zet lingering aan, zodat de agent blijft draaien nadat je uitlogt.

Zet TIMEUNO_NO_SERVICE=1 om de systemd-service over te slaan, en TIMEUNO_NO_SHELL_HOOK=1 om de shell-hook over te slaan. Zet TIMEUNO_REF op een releasetag (zoals agent-v0.2.0) om een specifieke versie te installeren.

Koppelen

timeuno-agent pair

Dit toont een link. Open die in de browser op je eigen computer, niet op de server, en keur de koppeling goed. Zie Een apparaat koppelen. Daarna:

systemctl --user start timeuno-agent

Wat je apparaat verlaat

De agent verstuurt dezelfde gegevens als de desktop-app: wanneer elke AI-sessie begint en eindigt, of de AI aan het werk is of wacht, het model, het aantal tokens en de kosten, en de projectmap. Je prompts verlaten nooit je apparaat, in dit geval de server. Dat geldt ook voor de antwoorden van de AI, de uitvoer van opdrachten en je code.

Zodat de regels op je urenstaat zeggen waaraan je werkte, verstuurt hij ook deze taakdetails:

  • de titel die de AI-tool zelf aan de sessie gaf;
  • de onderwerpen van de commits die de AI maakte;
  • de paden van de bestanden die de AI bewerkte, relatief aan de projectmap;
  • het soort taak (fix, bouwen, testen, documentatie…) en het gebied waar het om ging (facturatie, inloggen…), op je apparaat gekozen uit een vaste lijst, nooit in jouw woorden;
  • via de shell-hook de naam van elke opdracht die je uitvoert, bij een paar tools zoals git, npm, make of docker ook het eerste woord erna (git push, docker compose), nooit de rest van de regel, en de map waarin je die uitvoert, met je thuismap als ~.

Alles in een titel of commitonderwerp dat op een sleutel of token lijkt, wordt eerst vervangen door [redacted]. Meer daarover in AI-tools.

Wil je geen taakdetails meer versturen, zet dan Instellingen → Jouw gegevens → Taakdetails delen uit. De al opgeslagen details worden verwijderd. Bij zijn volgende check-in stopt de agent met versturen en maakt hij het bestand van de shell-hook leeg, met de opdrachten die hij nog niet had verstuurd. De tijdregistratie loopt gewoon door.

Shell-hook

Voor elke shell die op de server staat (bash, zsh, fish) voegt het installatiescript de hook toe: één regel aan het eind van ~/.bashrc of ~/.zshrc die eindigt op # timeuno-shell-hook, en voor fish een bestand in ~/.config/fish/conf.d/. Vóór elke opdracht schrijft de hook de naam en map ervan naar een bestand dat de agent verstuurt. Alleen de naam van de opdracht blijft over, bij een paar tools zoals git, npm, make of docker ook het eerste woord erna, nooit de rest van de regel: git commit -m "login repareren" wordt git commit, en vim notities.txt wordt vim. Hij noteert alleen namen die bij een echte opdracht horen, dus een verkeerd getypte regel of een geplakt geheim blijft niet bewaard. Zolang de agent niet gekoppeld is of je account geen taakdetails deelt, schrijft de hook niets.

  • Wil je hem bij de installatie overslaan, zet dan TIMEUNO_NO_SHELL_HOOK=1.
  • Wil je hem later toevoegen, voer dan timeuno-agent shell-hook install uit.
  • Wil je hem verwijderen, voer dan timeuno-agent shell-hook remove uit. Dat verwijdert ook de opdrachten die hij nog niet had verstuurd.
  • timeuno-agent status toont voor bash, zsh en fish of de hook geïnstalleerd is, wanneer hij voor het laatst een opdracht noteerde en hoe groot zijn bestand is.

Commando’s

CommandoWat het doet
timeuno-agent pairKoppelt de agent aan je account.
timeuno-agent statusToont de versie, of updates automatisch gaan, welke AI-tools de agent heeft gevonden en de staat van de shell-hook per shell.
timeuno-agent shell-hook installVoegt de shell-hook toe (het installatiescript doet dit voor je).
timeuno-agent shell-hook removeVerwijdert de shell-hook.
timeuno-agent updateInstalleert nu meteen de nieuwste versie.
timeuno-agent runDraait de agent op de voorgrond (de service doet dit voor je).
timeuno-agent versionToont de versie.

Updates

Als de agent als systemd-service draait, zoekt hij een paar minuten na het opstarten naar een nieuwe versie en daarna elke 6 uur. Hij controleert de handtekening, vervangt zichzelf en herstart.

  • Voer na timeuno-agent update het commando systemctl --user restart timeuno-agent uit.
  • Automatische updates zet je uit met "auto_update": false in ~/.config/timeuno/config.json, of door TIMEUNO_NO_AUTO_UPDATE=1 in de omgeving van de service te zetten.

Agents die met versie 0.1.0 zijn geïnstalleerd, kunnen zichzelf niet bijwerken. Voer het installatiecommando dan één keer opnieuw uit.

Als systemctl mislukt

Zegt systemctl --user Failed to connect to bus: Permission denied, zet dan XDG_RUNTIME_DIR=/run/user/$(id -u) in die shell en probeer het opnieuw.