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. Siminisignest installé, il vérifie aussi la signature de la version ; - crée un lien
timeuno-agentdans/usr/local/bin(ou~/.local/bins’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=1au 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 statusindique, 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
| Commande | Ce qu’elle fait |
|---|---|
timeuno-agent pair | Connecte l’agent à votre compte. |
timeuno-agent status | Affiche 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 install | Ajoute le hook shell (l’installateur s’en charge pour vous). |
timeuno-agent shell-hook remove | Retire le hook shell. |
timeuno-agent update | Installe immédiatement la dernière version. |
timeuno-agent run | Lance l’agent au premier plan (le service s’en charge pour vous). |
timeuno-agent version | Affiche 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, lancezsystemctl --user restart timeuno-agent. - Pour désactiver les mises à jour automatiques, définissez
"auto_update": falsedans~/.config/timeuno/config.json, ouTIMEUNO_NO_AUTO_UPDATE=1dans 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.