Suivre les outils CLI d'IA sur un serveur

Si vous utilisez Claude Code, Cursor CLI ou un autre outil d’IA en ligne de commande sur un serveur Linux distant, l’application de bureau de votre ordinateur ne voit pas ces sessions. Installez l’agent headless sur le serveur. Il suit les mêmes outils en ligne de commande que l’application de bureau (Claude Code, Cursor CLI, Codex CLI, Gemini CLI, OpenCode, Aider et Ollama), chaque session séparément, avec son projet et son état : en train de travailler ou en attente de vous.

Installation

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

Le script :

  • télécharge le binaire adapté à votre processeur (x86_64 ou arm64) dans ~/.local/share/timeuno/bin/ et vérifie sa somme de contrôle. Si minisign est installé, il vérifie aussi la signature de la version ;
  • crée un lien timeuno-agent dans /usr/local/bin (ou ~/.local/bin s’il ne peut pas y écrire) ;
  • ajoute un hook shell pour bash, zsh et fish qui note le nom de chaque commande que vous lancez (détails plus bas) ;
  • configure un service utilisateur systemd et active le lingering, pour que l’agent continue de tourner après votre déconnexion.

Définissez TIMEUNO_NO_SERVICE=1 pour ne pas installer le service systemd, et TIMEUNO_NO_SHELL_HOOK=1 pour ne pas installer le hook shell. Définissez TIMEUNO_REF sur un tag de version (comme agent-v0.2.0) pour installer une version précise.

Connexion

timeuno-agent pair

Cette commande affiche un lien. Ouvrez-le dans le navigateur de votre propre ordinateur, pas sur le serveur, et approuvez la connexion. Consultez Connecter un appareil. Ensuite :

systemctl --user start timeuno-agent

Ce qui quitte votre appareil

L’agent envoie les mêmes données que l’application de bureau : le début et la fin de chaque session d’IA, si elle travaille ou attend, le modèle, le nombre de tokens et le coût, et le dossier du projet. Vos prompts ne quittent jamais votre appareil, ici le serveur. Les réponses de l’IA, la sortie des commandes et votre code non plus.

Pour que les lignes de votre feuille de temps disent sur quoi vous avez travaillé, il envoie aussi ce détail des tâches :

  • le titre que l’outil d’IA a lui-même donné à la session ;
  • les sujets des commits faits par l’IA ;
  • les chemins des fichiers modifiés par l’IA, relatifs au dossier du projet ;
  • le type de tâche (correction, développement, tests, documentation…) et le domaine concerné (facturation, connexion…), choisis sur votre appareil dans une liste fixe, jamais avec vos mots ;
  • via le hook shell, le nom de chaque commande que vous lancez, plus son premier mot pour quelques outils comme git, npm, make ou docker (git push, docker compose), jamais le reste de la ligne, et le dossier où vous la lancez, votre dossier personnel apparaissant sous la forme ~.

Tout ce qui, dans un titre ou un sujet de commit, ressemble à une clé ou à un token est d’abord remplacé par [redacted]. Pour en savoir plus, consultez Outils d’IA.

Pour ne plus envoyer le détail des tâches, désactivez Paramètres → Vos données → Partager le détail des tâches. Les détails déjà enregistrés sont supprimés. À sa prochaine connexion, l’agent cesse de les envoyer et vide le fichier du hook shell des commandes qu’il n’avait pas encore envoyées. Le suivi du temps continue.

Hook shell

Pour chaque shell présent sur le serveur (bash, zsh, fish), l’installateur ajoute le hook : une ligne à la fin de ~/.bashrc ou ~/.zshrc qui se termine par # timeuno-shell-hook, et pour fish un fichier dans ~/.config/fish/conf.d/. Avant chaque commande, le hook écrit son nom et son dossier dans un fichier que l’agent envoie. Seul le nom de la commande est conservé, plus son premier mot pour quelques outils comme git, npm, make ou docker, jamais le reste de la ligne : git commit -m "corriger la connexion" devient git commit, et vim notes.txt devient vim. Il ne note que les noms qui correspondent à une vraie commande : une ligne mal tapée ou un secret collé n’est donc pas conservé. Tant que l’agent n’est pas connecté ou que votre compte ne partage pas le détail des tâches, le hook n’écrit rien.

  • Pour ne pas l’installer, définissez TIMEUNO_NO_SHELL_HOOK=1 au moment de l’installation.
  • Pour l’ajouter plus tard, lancez timeuno-agent shell-hook install.
  • Pour le retirer, lancez timeuno-agent shell-hook remove. Les commandes qu’il n’avait pas encore envoyées sont supprimées aussi.
  • timeuno-agent status indique, pour bash, zsh et fish, si le hook est installé, quand il a noté sa dernière commande et la taille de son fichier.

Commandes

CommandeCe qu’elle fait
timeuno-agent pairConnecte l’agent à votre compte.
timeuno-agent statusAffiche la version, si les mises à jour sont automatiques, les outils d’IA détectés et l’état du hook shell pour chaque shell.
timeuno-agent shell-hook installAjoute le hook shell (l’installateur s’en charge pour vous).
timeuno-agent shell-hook removeRetire le hook shell.
timeuno-agent updateInstalle immédiatement la dernière version.
timeuno-agent runLance l’agent au premier plan (le service s’en charge pour vous).
timeuno-agent versionAffiche la version.

Mises à jour

Lorsqu’il tourne en tant que service systemd, l’agent recherche une nouvelle version quelques minutes après son démarrage, puis toutes les 6 heures. Il vérifie la signature, se remplace et redémarre.

  • Après timeuno-agent update, lancez systemctl --user restart timeuno-agent.
  • Pour désactiver les mises à jour automatiques, définissez "auto_update": false dans ~/.config/timeuno/config.json, ou TIMEUNO_NO_AUTO_UPDATE=1 dans l’environnement du service.

Les agents installés en version 0.1.0 ne peuvent pas se mettre à jour eux-mêmes. Relancez la commande d’installation une fois.

Si systemctl échoue

Si systemctl --user affiche Failed to connect to bus: Permission denied, définissez XDG_RUNTIME_DIR=/run/user/$(id -u) dans ce shell et réessayez.