Aller au contenu
ColliePWA

04/Documentation

Terminaux

Pointer Collie vers Herdr, tmux, zellij, tuios ou Tern, ce que chacun peut renvoyer, et balises d'agent. Expérimental pour tmux, zellij, tuios et Tern ; rapports de bug bienvenus

Voici les terminaux depuis lesquels Collie lit sessions : Herdr, tmux, zellij, tuios et Tern. Collie pilote un terminal par installation, et Herdr est le choix par défaut. Cette page explique comment orienter Collie vers l'un d'eux, ce que chacun peut renvoyer, et les balises utilisées par Collie pour détecter un agent dans un volet. Un agent durable sans écran n'est pas un terminal ; Agents durables traite ce cas.

tmux et zellij nomment session leur propre groupe de premier niveau. Collie l'affiche sous la forme d'un espace.

Pointer Collie vers un multiplexeur

Indiquez le backend dans COLLIE_MUX, pointez-le vers un endpoint, redémarrez et installez les hooks de balise.

Expérimental. tmux et zellij (depuis 1.0) ont été testés sur tmux 3.6b et zellij 0.44.2, sur un seul hôte. tuios (depuis 1.15.0) a été testé sur tuios 0.8.4. Tern a été testé par son contributeur sur tern 0.4.5, une bêta fermée que les mainteneurs ne peuvent pas exécuter. Herdr est la valeur par défaut et le principal backend pris en charge. Testeurs recherchés : ouvrez un ticket sur AltanS/collie intitulé tmux: …, zellij: …, tuios: … ou tern: …, avec votre multiplexeur, version, OS, et ce que vous avez observé.

Indiquez le multiplexeur en ligne de commande :

COLLIE_MUX=herdr collie start
COLLIE_MUX=tmux collie start
COLLIE_MUX=zellij collie start
COLLIE_MUX=tuios collie start
COLLIE_MUX=tern collie start

Définissez l'endpoint lorsque la cible par défaut n'est pas celle souhaitée :

# in your .env: ~/.config/collie/.env, or Herdr's plugin config dir on a Herdr
# install. See Configure for the full precedence.
COLLIE_MUX=tmux
COLLIE_MUX_ENDPOINT_TMUX=/run/user/1000/collie-tmux.sock
COLLIE_MUX_ENDPOINT_ZELLIJ=collie-zellij

# only if the binary sits somewhere unusual
# COLLIE_TMUX_BIN=/usr/bin/tmux
# COLLIE_ZELLIJ_BIN=/home/you/.local/bin/zellij
variablevaleurce que cela signifie
COLLIE_MUXherdr, tern, tmux, zellij ou tuiosquel terminal cette installation pilote
COLLIE_MUX_ENDPOINT_TMUX/run/user/1000/collie-tmux.sockun PATH de socket (tmux -S), car il contient un /
COLLIE_MUX_ENDPOINT_TMUXworkun NOM de socket (tmux -L work), pas de /
COLLIE_MUX_ENDPOINT_TMUXvidele serveur par défaut de tmux lui-même
COLLIE_MUX_ENDPOINT_ZELLIJcollie-zellijun NOM de session, pas un chemin
COLLIE_MUX_ENDPOINT_ZELLIJvidel'unique session en cours d'exécution
COLLIE_MUX_ENDPOINT_TUIOS/run/user/1000/tuios/tuios.sockle PATH du socket du démon tuios
COLLIE_MUX_ENDPOINT_TUIOSvide$XDG_RUNTIME_DIR/tuios/tuios.sock, sinon /tmp/tuios-<uid>/tuios.sock
COLLIE_MUX_ENDPOINT_TERN/run/user/1000/tern/daemon.sockle PATH du socket du démon Tern
COLLIE_MUX_ENDPOINT_TERNvide$XDG_RUNTIME_DIR/tern/daemon.sock, sinon /tmp/tern-<uid>/daemon.sock
COLLIE_TERN_BIN/home/you/.local/opt/tern/ternseulement si tern se trouve à un emplacement inhabituel
COLLIE_TMUX_BIN/usr/bin/tmuxuniquement si tmux se trouve à un emplacement inhabituel
COLLIE_ZELLIJ_BIN/home/you/.local/bin/zellijuniquement si zellij se trouve à un emplacement inhabituel

Herdr n'a pas de variable d'endpoint ici : son socket est HERDR_SOCKET_PATH, pas un nom de COLLIE_MUX_ENDPOINT_.

Ce socket est le socket local et aucun autre. Une machine enregistrée dans Herdr n'est pas un membre de la crew, et seule une crew Collie transmet les volets d'une autre machine au téléphone. La nature de chaque liste, et la raison pour laquelle elles diffèrent, sont détaillées dans Machines Herdr et le crew.

Ensuite, redémarrez, installez les hooks de balise et démarrez un agent là où le téléphone peut le voir :

collie restart                 # after every .env edit
collie hooks install claude    # once per host; tmux, zellij and tern need it, Herdr gets hook edges

# open a window or a tab for the agent
tmux -S /run/user/1000/collie-tmux.sock new-window -n claude
zellij --session collie-zellij action new-tab --name claude

claude                         # in that window or tab

Ce que ces commandes ont fait

COLLIE_MUX sur la ligne de commande définit le choix pour cette exécution et pour chaque exécution ultérieure. start écrit le nom dans .env, de sorte que l'exécution ultérieure de collie start pilote le même multiplexeur.

Si COLLIE_MUX n'est pas défini, start recherche Herdr, tmux et zellij, demande de choisir un backend et écrit la réponse dans .env. Pour la référence complète de configuration, consultez MUX_CONTRACT.md → Pointer un collie vers un multiplexeur.

collie hooks install claude installe les hooks beacon de Collie, nécessaires pour tmux, zellij et tern. Ils exposent les panneaux comme des shells génériques, donc sans hooks, chaque panneau apparaît comme bash.

La commande met à jour ~/.claude/settings.json et laisse les configurations de projet intactes (détails ci-dessous). Claude Code 2.1.301 recharge ses hooks pendant son exécution. Redémarrez une version antérieure de Claude.

Remarque. Herdr n'est pas requis dans ce mode. Avec COLLIE_MUX=tmux ou COLLIE_MUX=zellij, le bridge charge uniquement l'adaptateur sélectionné et ignore le socket de Herdr. La découverte de plusieurs sessions Herdr à travers différentes racines de configuration Herdr est désactivée (bridge/index.ts). Il n'est pas nécessaire que Herdr soit installé ou en cours d'exécution, et .env se trouve dans ~/.config/collie/ au lieu du répertoire de configuration du plugin.

notes sur tmux

COLLIE_TMUX_BIN est généralement laissé non défini. Collie vérifie une liste de chemins standards et ne lit pas PATH, que les services d'arrière-plan et les actions Herdr ne partagent pas avec les shells de connexion.

Remarque. Utilisez des chemins de socket courts. Les sockets de domaine Unix de plus de 100 caractères environ ne parviennent pas à se connecter, et tmux renvoie error connecting to … (File name too long). Utilisez /run/user/<uid>/ ou /tmp plutôt qu'une arborescence de répertoires profonde.

Sur les versions de tmux antérieures à 3.7 avec window-size défini sur manual, créer une fenêtre fait planter le serveur. Collie bloque la création de fenêtres dans cet état et vous invite à exécuter tmux set -g window-size latest ; Prérequis liste les versions testées.

Avec automatic-rename activé, tmux renomme une fenêtre d'après le programme qui s'y exécute ; Collie affiche à la place le dernier dossier du panneau actif de cette fenêtre, car un écran entier d'onglets nommés bash n'apporte rien. Une fenêtre que vous avez nommée vous-même conserve ce nom.

notes sur zellij

Si votre distribution ne propose pas de paquets pour zellij, téléchargez un binaire depuis releases GitHub de zellij et placez-le dans votre PATH.

Laisser le endpoint vide cible par défaut l'unique session active. Si aucune ou plusieurs sessions existent, Collie s'arrête avec une erreur au lieu d'en sélectionner une. Si une session nommée se termine, Collie la signale par son nom au lieu de basculer vers une session active.

Zellij nécessite XDG_RUNTIME_DIR pour localiser les sessions. Si Collie indique que toutes les sessions sont terminées, vérifiez que le service systemd inclut cette variable d'environnement (contract).

Les sessions zellij persistent indépendamment de leur terminal initial. Créez une session avec zellij -s collie-zellij et détachez-vous avec Ctrl o d. Sur les hôtes sans interface graphique, zellij attach --create-background collie-zellij démarre directement une session détachée (vérifié sur zellij 0.44.2).

Remarque. Collie gère les sessions actives, mais ne les crée pas et ne les redémarre pas.

Zellij 0.44 et versions ultérieures indiquent le dossier de chaque panneau ; les panneaux zellij reçoivent donc le bouton Fichiers et affichent leur branche. Une version plus ancienne de zellij n'indique aucun dossier, et ses panneaux n'ont ni l'un ni l'autre.

notes sur tern

Faire pointer Collie vers Tern :

COLLIE_MUX=tern collie start
collie hooks install claude   # beacon hooks for agent detection

Collie lit les sessions Tern comme des espaces, les onglets comme des onglets, et les blocs comme des panneaux. Le point de terminaison est le socket du démon Tern, avec pour valeur par défaut $XDG_RUNTIME_DIR/tern/daemon.sock (ou /tmp/tern-<uid>/daemon.sock). À l'intérieur d'un panneau Tern, $TERN_PANE identifie le bloc et $TERN_PANE_SOCKET pointe vers le socket du démon.

Tern signale les événements de cycle de vie via tern events, ce qui permet des notifications immédiates de changement de topologie.

"Afficher dans le terminal" déplace votre fenêtre Tern vers la session et l'onglet Tern du volet, puis active son bloc. Un onglet ou une session Tern créés par Collie s'ouvrent en arrière-plan et ne déplacent pas votre fenêtre.

Collie ne détecte pas Tern de lui-même, tout comme il ne détecte pas tuios : indiquez-le avec COLLIE_MUX=tern. Le texte saisi de plus de 128 Kio est refusé, car il transite sous la forme d'un seul argument de ligne de commande.

remarques sur durable

Un agent durable que vous rattachez n'est pas un terminal, et il n'a pas d'écran. Agents durables explique comment en rattacher un avec collie durable attach, l'ancienne méthode qui pilote un agent durable seul avec COLLIE_MUX=durable, les deux manières de joindre un agent durable, ce qu'il peut faire sur le téléphone, et les points à vérifier lorsqu'il apparaît comme injoignable.

remarques sur tuios

tuios signale les agents lui-même, il n'a donc pas besoin de hooks de balise :

COLLIE_MUX=tuios collie start
tuios integration install claude-code   # once, so tuios hears the agent's hooks

Collie lit l'agent, son état et sa conversation depuis le démon tuios. Un panneau qui vous attend apparaît comme bloqué, et l'historique d'un panneau s'ouvre lorsque l'agent a transmis sa conversation. Un agent pour lequel Collie ne dispose d'aucun harnais apparaît comme un shell.

Collie affiche chaque session tuios comme un espace, chaque espace de travail comme un onglet, et chaque fenêtre comme un panneau. Un espace de travail s'affiche sous forme d'onglet tant qu'il contient un panneau. Un panneau qui s'exécute sur une autre machine n'est pas affiché. Faites pointer une instance de Collie sur cette machine vers son propre tuios.

Le point de terminaison est le socket du démon. Laissez-le vide pour utiliser le socket qu'utilise tuios lui-même. Collie lit XDG_RUNTIME_DIR pour le trouver, assurez-vous donc que le service dispose de cette variable. À l'intérieur d'un panneau tuios, echo $TUIOS_SOCKET affiche le chemin.

Collie nécessite tuios 0.8.3 ou supérieur : le démon doit annoncer l'événement workspace-renamed, ce que 0.8.2 ne fait pas. Avec un démon plus ancien, Collie affiche le pont comme déconnecté et le journal indique quoi mettre à jour.

Certaines choses fonctionnent différemment sur tuios :

  • Un nouvel onglet s'ouvre sur le premier espace de travail vide. Une session tuios dispose de neuf espaces de travail par défaut, Collie refuse donc un dixième onglet.
  • Afficher dans le terminal déplace chaque terminal qui affiche la session tuios du volet, y compris un onglet tuios-web. tuios ne peut pas déplacer un terminal vers une autre session tuios. Si aucun terminal n'affiche la session tuios du volet, Collie refuse et indique le nom de la session tuios affichée par le terminal.
  • Le commutateur Nouveau worktree sur la page New reste désactivé et indique qu'il requiert Herdr.

Est-ce que cela a fonctionné ?

collie doctor   # the `mux` check names the multiplexer, its endpoint,
                # and whether it answered (durable: the six `durable-*` checks)

# `[bridge] mux: tmux · socket /run/user/1000/collie-tmux.sock`, printed at
# startup; a multiplexer it cannot reach is one warning line more
collie logs

# the herd, as the phone is given it; reads need the pairing token
curl -s -H "Authorization: Bearer $COLLIE_TOKEN" http://127.0.0.1:8787/api/snapshot | head -c 400

Chaque lecture nécessite le jeton d'un appareil associé, cet appel curl en envoie donc un. Sans lui, le pont répond 403 device not paired. Pour obtenir un jeton pour un script, consultez Mise à niveau vers la version 1.18.0. collie doctor ne nécessite aucun jeton sur l'hôte. COLLIE_DEVICE_HEADER restreint toujours uniquement les écritures et la vue Fichiers (Associer un appareil).

Consultez l'interface mobile : le tableau de bord doit afficher vos fenêtres tmux ou onglets zellij, et le volet Claude doit être identifié comme un agent au lieu de bash. Si les volets s'affichent toujours comme des shells standards, vérifiez l'installation des hooks beacon ci-dessous.

Collie écrit les hooks dans les paramètres de Claude

$ collie hooks install claude
$ collie hooks status
would install: /home/you/collie/bin/collie beacon emit  (this checkout)
/home/you/.claude/settings.json: installed (v1)

Comme tmux, zellij et tern exposent les volets sous forme de shells génériques, les agents doivent se signaler eux-mêmes. Cela nécessite d'installer les hooks beacon de Collie dans la configuration de Claude Code. Sur Herdr, ces mêmes hooks fournissent uniquement hook edges.

La sortie référence le chemin bin/collie de ce dépôt. Les installations par paquet utilisent le chemin du binaire installé (~/.local/bin/collie ou ~/.local/share/collie/current/bin/collie) plutôt que des répertoires versionnés, garantissant ainsi la validité des liens après les mises à jour.

Détails du comportement lors des modifications de la configuration de Claude :

  • Modifie le ~/.claude/settings.json global et tout CLAUDE_CONFIG_DIR actif. Les fichiers .claude/settings.json au niveau du projet ne sont pas modifiés.
  • Injecte cinq hooks étiquetés # collie-beacon v1 avec des délais d'expiration de 10 secondes. Les hooks existants sont préservés. hooks uninstall claude supprime uniquement les entrées Collie.
  • Ne modifie pas votre statusLine sauf demande explicite. Sans option, l'installation ne modifie pas statusLine. Vous conservez le point de contexte à côté du modèle au-dessus de la ceinture : les hooks lisent la transcription de la session, et la taille de la fenêtre depuis le début de la session.
  • Les fenêtres de 5 heures et de 7 jours s'affichent d'elles-mêmes. Ils ne nécessitent aucun hook ni aucune statusLine. Tant qu'un volet Claude est ouvert, le pont lit vos identifiants Claude sur cette machine (~/.claude/.credentials.json, ou $CLAUDE_CONFIG_DIR/.credentials.json ; le trousseau d'accès sur un Mac sans fichier) et interroge api.anthropic.com/api/oauth/usage, le même appel qu'effectue /usage de Claude Code. Il l'interroge lorsque le volet apparaît, après la fin d'un tour (au plus une fois par minute) et toutes les cinq minutes. Il ne stocke rien des identifiants, ne les actualise jamais et ne les transmet nulle part ailleurs. Il ignore un fichier d'identifiants lisible par d'autres (toute permission plus permissive que 0600) et un identifiant expiré, que Claude Code actualise lors de son prochain appel. Une session avec clé d'API, Bedrock ou Vertex n'a aucune fenêtre à afficher. Les volets Codex obtiennent les leurs de la même façon, selon le même calendrier, depuis ses propres fichiers de session sans lecture des identifiants. OpenCode Go et Grok sont désactivés tant que vous ne les avez pas spécifiés, avec COLLIE_ACCOUNT_WINDOWS=all ou une liste (voir Fenêtres d'utilisation). COLLIE_ACCOUNT_WINDOWS=0 (ou [bridge] account_windows = false) désactive tout, et collie doctor indique les éléments concernés dans sa ligne account-windows.
  • Envelopper votre statusLine constitue la seconde option. Avec collie hooks install claude --statusline, Collie enveloppe également votre propre statusLine, et les fenêtres proviennent de ce que Claude Code lui transmet. Choisissez cette option si vous la préférez à la lecture des identifiants, avec COLLIE_ACCOUNT_WINDOWS=0. Sa commande devient collie beacon statusline …, et votre script continue de s'exécuter et d'afficher ses sorties comme auparavant. Collie n'ajoute jamais de statusLine, et hooks uninstall claude restaure votre commande à l'identique. Une installation sans l'option conserve l'enveloppe existante et la fait pointer vers le binaire actuel. Pour supprimer une enveloppe devenue inutile, exécutez collie hooks uninstall claude puis collie hooks install claude sans --statusline. Non disponible sur Windows.
  • Pour modifier une statusLine enveloppée, retirez d'abord l'enveloppe. Exécutez collie hooks uninstall claude, modifiez statusLine.command, puis exécutez à nouveau collie hooks install claude --statusline. La commande enveloppée fait référence au binaire collie par son chemin ; si ce binaire est déplacé, la statusLine n'affiche rien jusqu'à ce que vous relanciez l'installation. collie update vous avertit lorsqu'une statusLine enveloppée pointe vers un binaire plus ancien. Pour tester le wrapper manuellement, exécutez-le en dehors du multiplexeur (env -u HERDR_PANE_ID -u TMUX_PANE -u ZELLIJ_PANE_ID …), sinon il enregistre une mesure dans chaque pont en cours d'exécution.
  • Claude Code recharge ses hooks pendant son exécution. Ceci s'applique à la version 2.1.301. Redémarrez une version antérieure de Claude si aucun hook edge n'arrive.
  • Linux uniquement. La vérification de disponibilité de l'agent dépend de /proc. Les autres systèmes d'exploitation n'émettent pas de balises.
  • Les balises sont propres au multiplexeur. Elles enregistrent les identifiants de panneau et de session pour le backend actif. Changer de COLLIE_MUX invalide les balises existantes. Les anciennes balises restent sur le disque jusqu'à leur suppression, visibles dans le décompte beacons de collie doctor.
  • Si vous utilisez COLLIE_STATE_DIR, exportez-le dans l'environnement de shell de l'agent. collie beacon emit lit cette variable directement ; sinon, les balises s'écrivent dans le répertoire d'état par défaut où le pont ne les trouvera pas.

collie doctor inclut une vérification de diagnostic beacon-hooks-claude qui signale les hooks manquants ou les chemins cassés vers les dépôts déplacés. Pour les détails d'exécution, voir Balises d'agent.

Ce qui change par rapport à Herdr

Le tableau ci-dessous résume les principales différences. Consultez MUX_CONTRACT.md pour la spécification exacte.

Herdrtmuxzellij
un espace estun espace de travailune sessionla session, exactement une, afin que le téléphone supprime la bande d'espace
un onglet estun ongletune fenêtreun onglet
un volet estun voletun voletun panneau de terminal
qui indique qu'un panneau contient un agentHerdr lui-mêmeun beacon, ou rienun beacon, ou rien
délai avant qu'un changement non annoncé soit visiblepoussépoussécompté selon un calendrier, plafond de 12 s
« Afficher dans le terminal »ouiouinon, zellij accepte la requête et ne déplace rien
ouvrir / renommer / fermer un ongletouioui (l'ouverture est refusée dans le cas de plantage de tmux ci-dessus)oui
ouvrir un espaceouiouinon, une session qu'il aurait créée lui serait invisible
historique du voletdepuis le registre de volets propre à Herdrdepuis la clé de session de la balisedepuis la clé de session de la balise

Sans balises actives, tmux, zellij et tern présentent les panneaux comme des shells bruts, et l'historique du panneau est marqué comme indisponible plutôt que de renvoyer un contenu vide.

Deux éléments qui changent sur téléphone

  • « synchronisé il y a Ns » : Cet indicateur s'affiche dans l'en-tête du tableau de bord pour indiquer l'âge des données. Il s'affiche uniquement quand le backend repose sur une scrutation planifiée, par exemple zellij (intervalle de scrutation jusqu'à 12 s). Herdr et tmux transmettent les changements d'état immédiatement, le badge d'actualisation est donc omis.
  • « Afficher dans le terminal » : Cette action de volet place le focus sur le volet sélectionné dans votre terminal hôte actif. Elle est désactivé sur zellij car la commande de focus de zellij accepte l'instruction sans changer l'état d'affichage.
Remarque. L'interface mobile ne modifie jamais le focus du terminal hôte de manière automatique. Seule l'action explicite « Afficher dans le terminal » met à jour l'affichage. Naviguer dans le tableau de bord ou ouvrir des volets n'affecte pas le curseur actif de l'hôte (ADR 0031).

astuces pour tmux, récupérer vos fenêtres après un redémarrage

claude --resume      # reconnects the conversation, not the window

Collie ne stocke pas l'état du multiplexeur. Redémarrer un serveur tmux détruit ses fenêtres, laissant le tableau de bord vide. Des plugins tmux standards restaurent les dispositions de fenêtres et les répertoires de travail : tpm pour la gestion des plugins, tmux-resurrect pour sauvegarder les arbres de sessions et tmux-continuum pour les instantanés automatiques.

Remarque. Les processus d'agents en cours d'exécution ne sont pas conservés. Redémarrez Claude Code manuellement après la récupération.

astuces pour zellij, après un redémarrage il n'y a rien à restaurer

zellij -s collie-zellij                                  # start the session
zellij attach --create-background collie-zellij          # headless: start it detached
claude --resume                                           # reconnects the agent

Zellij ne fournit pas d'équivalent à tmux-resurrect. Les sessions conservées après détachement du terminal s'affichent sous l'état (EXITED - attach to resurrect), et s'y rattacher relance les commandes de la session. Un redémarrage implique donc de recréer la session avec l'une des commandes ci-dessus et d'y lancer des agents, en reconnectant chacun avec claude --resume ou claude --continue.

Remarque. Comme le fait de s'attacher produit des effets secondaires, Collie ne s'attache pas aux sessions et ne les ressuscite pas. Les sessions terminées apparaissent comme inaccessible, et l'UI affiche une bannière de déconnexion au lieu d'une liste de sessions vide.

Balises d'agent (facultatif, Linux)

Une beacon est la façon dont un agent s'identifie auprès de Collie, sur tmux, zellij et tern, où un panneau apparaît autrement comme un shell générique.

$ collie hooks install claude
$ collie hooks status
would install: /home/you/collie/bin/collie beacon emit  (this checkout)
/home/you/.claude/settings.json: installed (v1)

Un hook dans les paramètres de Claude Code exécute collie beacon emit, qui écrit un fichier contenant le nom du harness, la session et le panneau cible. Herdr suit cela nativement. Les détails de configuration se trouvent dans Pointer Collie vers un multiplexeur ; cette section explique le mécanisme.

Le chemin ci-dessus fait référence à bin/collie depuis le clone local. Une installation binaire pointe vers ~/.local/bin/collie, ou vers ~/.local/share/collie/current/bin/collie lorsque ce nom n'est pas lié, comme décrit ci-dessus. La commande status n'effectue aucune écriture.

Exécuter hooks uninstall claude supprime uniquement les entrées ajoutées par Collie. Cela modifie votre configuration Claude global, pas les fichiers au niveau du projet. Ceci concerne uniquement Linux : la vérification de disponibilité inspecte /proc, et Collie n'écrit aucune balise sur les autres systèmes d'exploitation.

Claude devient visible dès le démarrage. Comme le hook se déclenche sur SessionStart, un panneau ouvert en attente d'une saisie s'affiche comme un agent inactif au lieu d'un shell.

La visibilité prend fin lorsque le processus se termine. Collie vérifie le PID émetteur à chaque contrôle, donc dès que l'agent s'arrête, le panneau est immédiatement signalé comme un shell standard au lieu de rester dans un état inconnu.

Collie ne supprime pas le fichier de balise pour faire cela : le fichier reste sur le disque, collie doctor le signale sous beacons comme expiré, et la prochaine exécution du hook l'écrase.

Cela permet au tableau de bord d'étiqueter les panneaux par le nom de l'agent plutôt que par bash. Cela permet de trier les panneaux selon l'état bloqué avec "a besoin de vous", et fournit l'état requis pour les alertes. L'historique du panneau s'appuie également sur la balise pour fournir la clé de session utilisée par le journal.

Hook edges

Les mêmes hooks écrivent également un hook edge pour chaque événement. Un hook edge est une courte note concernant un volet. Par exemple : "un prompt a été saisi", "le tour a pris fin" et "une boîte de dialogue de permission est affichée". Collie utilise les hook edges sur chaque multiplexeur, y compris Herdr. Herdr nomme ses agents de manière autonome. Sur Herdr, les hooks écrivent donc uniquement des hook edges, et aucune balise.

Une arête de hook ne détermine jamais à elle seule qu'un volet est libre. Après chaque arête, Collie relit l'écran environ 0,7 seconde plus tard. Seul l'écran peut indiquer que la zone de saisie est vide et qu'aucune boîte de dialogue n'est ouverte. Une arête peut indiquer qu'un tour est en cours ou qu'une boîte de dialogue est affichée. Collie considère alors le volet comme occupé jusqu'à l'arrivée de l'arête de fermeture. Trois lectures d'écran libres sur une durée de dix secondes mettent également fin à cet état retenu. Une arête d'outil provenant d'un sous-agent ne concerne pas le volet ; elle ne modifie donc jamais ce que Collie y lit.

Un envoi depuis le téléphone peut afficher Confirmé. Cela se produit lorsqu'un edge de type prompt transmet le même texte peu après l'envoi. La fenêtre est de 30 secondes, ou de dix minutes pour un envoi mis en file d'attente derrière un tour. L'edge transporte un hash salé du prompt, jamais le texte lui-même.

Claude Code et Codex acceptent un message ou une commande pendant un tour. Collie le saisit immédiatement, et le harness l'exécute après le tour. Un harness qui ne peut pas accepter d'envoi pendant son tour reçoit un envoi retenu à la place. Il en va de même pour un message qui trouve la zone de saisie occupée, par exemple sous une popup, ou sur un écran qui change entre deux lectures de Collie, ou un caractère de test ayant échoué et qu'un seul Retour arrière a retiré d'une zone que Collie a relue propre. Un tel message part après cinq vérifications libres en l'espace de dix secondes, ou après un tour détecté par Collie. Une commande y est toujours refusée, tout comme un envoi sur un écran confirmé avec Taper ici. Un envoi sur un volet sans profil n'est jamais retenu. Collie conserve le texte et affiche une carte flottant au bas de la vue terminal : « Mis en attente. Envoi à la fin du tour. » Pour un agent dont Collie n'a pas pu lire la version, la carte l'indique et renvoie vers collie doctor : Collie ne saisit dans un tour en cours que sur une version signalée par l'agent. La carte affiche le texte et un bouton Annuler. Collie l'envoie une fois le tour terminé, dès que le volet apparaît libre sur deux vérifications consécutives, par ordre d'ancienneté. Chaque envoi retenu ultérieur attend le tour démarré par l'envoi précédent. Si aucun tour n'apparaît, il part après cinq vérifications libres en l'espace de dix secondes. Une commande retenue sur pi, OMP ou Codex envoie Entrée, et là, Entrée pilote un tour. Une telle commande attend la fin du tour, tout comme n'importe quelle commande retenue sur un agent dont Collie n'a pas pu lire la version : deux vérifications libres espacées d'au moins deux secondes, ou cinq sur dix secondes si Collie n'a vu aucun tour du tout. OMP exécute /goal immédiatement pendant un tour, Collie envoie donc /goal, /goal pause ou /goal resume sans attendre avec Entrée. Il ne les retient jamais, et ils ne patientent pas derrière d'autres envois retenus. Un message ultérieur sur ce volet attend derrière les messages retenus. Un texte retenu dure 30 minutes, une commande retenue 10 minutes. Passé ce délai, la ligne indique que le message n'a pas été envoyé et propose Renvoyer. Un message talkie-walkie est également retenu au-dessus d'un brouillon, sans jamais y être saisi, et sa rétention dure 60 minutes (Walky-talky). Votre propre envoi au-dessus d'un brouillon reste refusé, avec Ajouter et Remplacer. Avant de refuser, de compléter ou d'effacer un brouillon, Collie saisit un caractère de test et le supprime, pour vérifier que la zone accepte les touches ; lorsque la zone à l'écran n'accepte pas les touches, l'envoi est refusé et rien n'est supprimé. Donnez le focus à ce volet sur le bureau ou redimensionnez-le pour que l'agent redessine son écran, puis réessayez l'envoi. Certaines commandes n'attendent jamais, et Collie les refuse pendant un tour. Sur Claude Code, il s'agit de /clear, /exit, /quit, /logout, /resume, /branch et chaque ligne !. Sur Codex, il s'agit de /quit, /exit, /new, /resume, /logout et chaque ligne !. Sur Hermes, il s'agit de /exit, /quit, /clear, /new, /resume et chaque ligne !. Un envoi retenu survit à un redémarrage de Collie. L'annulation fonctionne jusqu'au début du départ de l'envoi, et uniquement sur les volets de cette machine. Avec deux envois retenus ou plus, la carte affiche un décompte et le premier texte, et Tout afficher liste chaque envoi avec son propre bouton Annuler. Collie conserve le texte retenu sur le disque sous forme brute, dans un fichier lisible uniquement par votre utilisateur (mode 0600). Il supprime le texte au départ de l'envoi, et au plus tard une heure après la fin de la rétention.

Collie place chaque edge sur un panneau. L'edge nomme le processus de l'agent et son panneau (HERDR_PANE_ID, TMUX_PANE ou ZELLIJ_PANE_ID). Collie ignore un edge qui ne nomme aucun panneau, deux panneaux, ou un processus disparu. Le log du bridge affiche alors une ligne surface.edge.dropped. Il affiche au plus une ligne par motif et par processus chaque minute. Un edge datant de plus de 30 secondes, ou un fichier qui n'est pas un edge, est comptabilisé mais jamais consigné dans le log.

Quels bridges reçoivent les edges

Chaque bridge qui accepte des edges de hook s'enregistre dans ~/.local/state/collie/hook-targets/ au démarrage. Si XDG_STATE_HOME est défini, le dossier est $XDG_STATE_HOME/collie/hook-targets/. Un bridge supprime son fichier lorsqu'il s'arrête proprement. Un bridge en cours d'exécution réécrit son fichier dans les deux secondes s'il vient à disparaître. Le hook écrit chaque edge dans chaque bridge listé dont le processus tourne encore. Il supprime le fichier d'un bridge disparu. Si aucun bridge n'est listé, le hook écrit dans le dossier d'état par défaut. Une variable COLLIE_STATE_DIR présente dans l'environnement même de l'agent reçoit toujours aussi les edges.

Les informations du panneau

Les informations du panneau sur le téléphone indiquent si un panneau envoie des edges de hook :

  • Hooks : actifs signifie que l'agent de ce panneau envoie des edges de hook.
  • Hooks : actifs, retiennent les autorisations signifie que les hooks de l'agent retiennent aussi les autorisations pour le téléphone. Voir Autorisations retenues pour le téléphone.
  • Hooks : aucun signifie que Collie ne reçoit aucun edge de hook depuis ce panneau. Les hooks ne sont pas installés, ou l'agent n'a envoyé aucun événement depuis l'installation. Claude Code 2.1.301 prend en compte les nouveaux hooks pendant son exécution. Redémarrez un Claude plus ancien.

Un bridge conserve les panneaux actifs lors de son propre redémarrage. La ligne reste « actif » après le redémarrage d'un bridge.

Une installation issue d'une version antérieure de Collie n'envoie aucun edge pour une boîte de dialogue d'autorisation. collie hooks status l'affiche comme partielle. Exécutez à nouveau collie hooks install claude pour la mettre à jour sur place.

Autorisations retenues pour le téléphone

$ collie hooks install claude --hold-permissions

Ceci ajoute un hook supplémentaire, sur le PermissionRequest de Claude. Lorsque Claude demande une autorisation, le hook retient la requête et attend votre appui. Le téléphone affiche la requête sous forme de carte. Un appui sur Oui ou Non est transmis à Claude via le hook. Collie n'envoie aucune frappe de touche au panneau pour cela. L'installation nécessite Claude Code 2.0.45 ou ultérieur, la première version disposant de ce hook. Elle refuse une version plus ancienne.

  • Le hook trouve chaque bridge en cours d'exécution de la même manière que pour les edges de hook. Il lit hook-targets/ et maintient l'attente avec chaque bridge actif. La première réponse l'emporte. Les autres téléphones affichent alors « Un autre Collie a répondu ».
  • Le poste fixe fonctionne toujours. Répondez au dialogue dans le terminal, et la carte sur le téléphone affiche « Le poste fixe a répondu en premier ». Collie n'utilise plus aucun appui après cela.
  • Seuls Oui et Non passent par le hook. Une option telle que « ne plus demander » reste une réponse à donner à l'écran. Collie refuse cet appui sur une carte retenue.
  • Une requête retenue est limitée à 290 secondes. Après cela, la boîte de dialogue reste à l'écran et devient une carte ordinaire avec un nouvel identifiant. Un ancien appui ne se transforme jamais en frappes de touches.
  • Aucun bridge, aucune retenue. Si aucun bridge n'est à l'écoute, ou en cas d'erreur, le hook n'affiche rien. Claude affiche alors son propre dialogue comme auparavant. Le hook ne répond jamais de lui-même.
  • La carte affiche l'entrée indiquée. Il s'agit de la commande, du chemin de fichier ou d'une autre saisie clé. Cela inclut les options risquées de Bash, ainsi que la totalité du texte qu'une écriture insère dans un fichier. Collie supprime les caractères qui masquent ou modifient le sens du texte. L'entrée affichée est limitée à 1000 caractères, texte écrit inclus. Collie ne retient jamais une requête plus longue : la carte ne peut pas tout afficher, la réponse se fait donc via la boîte de dialogue à l'écran. Lorsque l'entrée comporte plus de lignes que la zone n'en affiche, la carte le signale.
  • Une requête retenue ne possède que la boîte de dialogue affichant cette même requête. L'en-tête de la boîte de dialogue doit nommer l'outil de la requête. Il doit indiquer « de l'agent ... » exactement lorsqu'un sous-agent formule la demande, et nommer le même type de sous-agent. Chaque ligne de l'entrée doit apparaître sur la boîte de dialogue, dans l'ordre. Lorsque deux requêtes retenues correspondent à une même boîte de dialogue, aucune ne se l'approprie. Toute autre boîte de dialogue conserve sa propre carte sur le téléphone. La requête attend alors sur sa carte retenue, et seul un appui sur cette carte y répond. La carte n'accepte aucun appui durant les 400 premières millisecondes suivant l'affichage d'une nouvelle requête. Si vous répondez à cette autre boîte de dialogue avec les touches du clavier et que Claude met fin au hook, la carte retenue indique que la réponse a été donnée au clavier.
  • La requête d'un sous-agent n'affiche aucune boîte de dialogue tant que le hook la retient. Cela s'applique à Claude Code 2.1.301. La carte de retenue est alors le seul moyen de la voir, elle affiche donc l'outil et l'entrée présentée.
  • Une requête en arrière-plan attend jusqu'à la limite de retenue, même sans téléphone connecté. Ensuite, Collie libère le hook, et Claude affiche la boîte de dialogue à l'écran. Claude 2.1.301 ne la refuse pas.
  • Les questions et les plans restent des cartes d'écran. AskUserQuestion et ExitPlanMode ne sont jamais retenus.

Le socket est <stateDir>/hold/sock. Son dossier est en mode 0700 et le socket en mode 0600, de sorte qu'un autre utilisateur ne peut pas s'y connecter. Avant de se connecter, le hook vérifie que le socket, son dossier et le répertoire d'état vous appartiennent. Il vérifie également que personne d'autre ne peut écrire dans les deux dossiers. Le bridge n'accepte de requête que depuis un processus qu'il place sur un volet. Il rejette toute autre requête avec une seule ligne surface.hold.dropped. Le hook et les paramètres ne contiennent aucun token. Chaque carte porte un hash de l'outil, de l'entrée présentée et des libellés. Un appui avec un autre hash libère le hook sans réponse.

Les informations du volet indiquent "holds permissions" lorsque les paramètres lus par Claude retiennent le hook. Collie lit les paramètres utilisateur, les deux fichiers de paramètres du projet et les paramètres gérés. disableAllHooks désactive la retenue, tout comme allowManagedHooksOnly dans le fichier géré.

Exécutez collie hooks install claude sans l'option pour retirer à nouveau la retenue. collie doctor indique dans combien de fichiers de paramètres les hooks retiennent les permissions.

Remarque. Les balises et les transitions de hook ne fournissent aucun canal de contrôle. Elles modifient uniquement ce que Collie affiche et le moment où il lit un volet. Elles ne peuvent pas envoyer de texte, injecter de frappes clavier, renommer des volets, fermer des sessions ou contourner les contrôles d'accès. Le modèle de menace et les champs omis sont documentés dans ADR 0024. La retenue des permissions est l'unique canal de contrôle. Un appui sur le téléphone devient la réponse de Claude à une permission. Quatre éléments la protègent. Le socket vous appartient exclusivement (mode 0600 dans un dossier 0700), et le hook le vérifie avant de se connecter. Le bridge ne répond qu'à un processus qu'il place sur un volet. L'appui doit porter le hash de l'outil, de l'entrée présentée et des libellés affichés par la carte. La réponse provient toujours de l'appui d'une personne : Collie n'autorise ni ne refuse jamais de lui-même.

Codex

Codex dispose d'un hook externe, sa commande notify. Collie peut l'utiliser pour une transition de hook lorsqu'un tour Codex se termine :

$ collie hooks install codex
$ collie hooks status
/home/you/.codex/config.toml: installed

L'installation écrit une ligne en haut de $CODEX_HOME/config.toml (~/.codex/config.toml lorsque CODEX_HOME n'est pas défini). La ligne se place après les commentaires au début du fichier :

notify = ["/home/you/.local/bin/collie", "beacon", "emit", "codex"]

Codex n'exécute qu'une seule commande de notification. Si votre configuration en indique déjà une, Collie la laisse en place et l'installation s'arrête avec un message. Si Collie ne parvient pas à lire le fichier en tant que TOML, l'installation s'arrête et signale la ligne. Collie conserve une copie du fichier avant sa première modification. collie hooks uninstall codex restaure les octets exacts précédant l'installation. Si l'installation a créé le fichier, la désinstallation le supprime. Une instance de Codex déjà ouverte peut ne pas voir la nouvelle ligne avant d'avoir redémarré.

Codex envoie un événement, agent-turn-complete, à la fin de chaque tour. Collie l'enregistre en tant que transition d'arrêt, et la lecture d'écran qui suit détermine si le volet est libre. Les limites :

  • Codex n'envoie aucun événement pour une boîte de dialogue d'approbation ou pour une nouvelle invite. Seul l'écran affiche une boîte de dialogue, et un envoi depuis le téléphone n'apparaît jamais comme Confirmé sur un volet Codex.
  • Codex 0.163.0 exécute la commande de notification depuis un helper en arrière-plan (codex app-server). Collie repère la fenêtre Codex dans /proc avec le même CODEX_HOME et le dossier de l'événement. Cela concerne Linux uniquement.
  • Deux fenêtres Codex dans un même dossier sur un même CODEX_HOME ne reçoivent aucune transition. Collie ne peut pas les distinguer. Leurs volets continuent de se mettre à jour depuis l'écran, comme sans le hook.
  • Codex exécute également un court tour masqué pour nommer une nouvelle tâche. Ce tour envoie une transition d'arrêt supplémentaire, ce qui déclenche une lecture d'écran de plus pour le volet.

Collie appuie sur Tab pour un message Codex. Pendant un tour, Codex le met en file d'attente. Dans Codex, Tab envoie un message sur un champ inactif et le met en file d'attente pendant un tour. Tab convient donc dans les deux états. Entrée oriente un tour en cours, donc Collie n'appuie jamais sur Entrée pour un message. Un texte commençant par / ou ! est une commande. Il requiert Entrée sur un champ inactif, car Tab y compléterait une commande /. Pendant un tour, il requiert Tab, et Codex le met en file d'attente comme un message. Codex exécute un texte commençant par ! comme une commande shell. L'accusé de réception n'indique mis en file d'attente que lorsque Codex affiche la ligne en file d'attente avec le texte.

Collie répond à une approbation Codex avec une seule touche : le chiffre de l'option, y ou Échap. Seule l'invite de confiance de Codex 0.156 navigue. Collie y appuie sur les touches fléchées, relit le pointeur, puis appuie sur Entrée. Une boîte de dialogue de question Codex prend également une seule touche, le chiffre de l'option. Dans Codex 0.163.0, le chiffre répond immédiatement. À la dernière question, il envoie toutes les réponses.

Profils de harness

Collie vérifie le champ de saisie d'un agent avant d'envoyer un message depuis le téléphone. Un fichier de profil décrit ce champ pour un agent donné. Il indique où le champ commence et se termine. Il décrit l'apparence d'un brouillon, la touche qui envoie le message et le texte affiché par l'agent lors d'un collage volumineux. Un shell standard et un agent sans profil acceptent toujours les envois. Collie ne peut pas lire leur champ de saisie ; il saisit donc le texte et appuie sur Entrée sans vérification préalable, une ligne à la fois. Seule une invite de mot de passe sur les dernières lignes l'interrompt : Collie n'y tape rien, et le téléphone propose Taper.

AgentEntrée pendant un tourTouche d'envoiSondeVérifié par rapport à
OpenCodeMet le message en file d'attenteEntréeOui1.18.33
piOriente le tour ; Alt+Entrée met en file d'attenteAlt+Entrée, Ctrl+Q sous WindowsTextes courts et envoie dans un tour1.1.0
OMPOriente le tour ; Ctrl+Q met en file d'attenteCtrl+QOui18.4.10
GrokNon mesuréEntréeOui1.0.41
Antigravity (agy)Non mesuréEntréeOuiÉcrans de 1.1.17
MuseNon mesuréEntréeOui1.4.7
Hermes (CLI classique)Interrompt le tour par défaut ; le /busy de Hermes peut le mettre en file d'attente ou le dirigerEntréeOui0.22.2
Cursor CLI (cursor-agent)Met le message en file d'attenteEntréeOui2026.10.16
Kiro (kiro-cli)Dirige le tour ; Collie diffère l'envoi jusqu'à la fin du tourEntréeTextes courts2.32.0

Une commande, comme /model, s'accompagne toujours d'Entrée. Un envoi sondé tape d'abord un caractère supplémentaire. Collie vérifie que le caractère apparaît dans la boîte, puis le supprime.

  • OpenCode affiche sa boîte sous la forme d'une colonne de ┃ lignes, fermée par une ligne ╹▀▀▀. Collie repère la boîte grâce à ces lignes. Un message envoyé pendant un tour en cours attend dans la transcription avec un badge QUEUED. Un saut de ligne s'insère avec Ctrl+J. Collie refuse un message plus long que ce que la boîte peut afficher, car il ne peut pas le relire.
  • pi affiche sa boîte entre deux séparateurs sans marque d'invite. Collie la repère grâce à la paire de séparateurs et à la ligne d'état que pi affiche en dessous. Une boîte de dialogue pi s'ouvre entre ces deux mêmes séparateurs. Collie lit donc les rappels de touches et la liste depuis le séparateur supérieur vers le bas. Dans pi, Entrée oriente un tour en cours, mais Alt+Entrée envoie sur une boîte inactive et met en file d'attente pendant un tour. Collie envoie donc avec Alt+Entrée, et avec Ctrl+Q sous Windows. pi affiche un message en file d'attente sous forme de ligne Follow-up: au-dessus de la boîte. Une boîte de plus de 30 lignes n'est pas reconnue comme telle. L'écran est considéré comme inconnu, et un envoi nécessite votre validation.
  • OMP vous permet de choisir le style de bordure de son cadre, Collie en reconnaît donc cinq. L'un est le cadre ouvert avec une ligne d'état au sommet. Les autres sont une paire de filets, un filet sans filet inférieur, une paire avec un milieu vide, et un cadre sans bordure. Collie coupe l'indication que OMP dessine à l'extrémité droite de la ligne d'invite. Dans OMP, Entrée pilote un tour en cours, mais Ctrl+Q envoie sur une zone inactive et met en file d'attente pendant un tour. Collie envoie donc avec Ctrl+Q. OMP affiche un message en file d'attente dans un bloc After yield au-dessus de la zone. OMP peut afficher une complétion grisée après votre texte. Un envoi qui en rencontre une s'arrête avant la touche d'envoi et laisse le texte dans la zone. Dans le cadre ouvert, OMP affiche au maximum 17 lignes d'un long message, les dernières. Collie compare ensuite ces lignes avec la fin de ce qu'il a saisi, et le reçu l'indique. Remplacer refuse un brouillon qui remplit ces 17 lignes, car Collie ne peut pas voir son début. Rien n'est supprimé.
  • Grok affiche une boîte arrondie avec une ligne d'invite ❯ et une ligne de raccourcis clavier en dessous. Un long brouillon affiche une barre de défilement sur le bord droit de la boîte. Un tel écran est considéré comme illisible, un envoi nécessite donc votre validation. Une liste de modèles s'ouvre au-dessus de la boîte et fait partie intégrante de la boîte. Le volet n'est jamais considéré comme libre tant que la liste est affichée.
  • Antigravity (agy) affiche sa boîte sous la forme d'un séparateur, d'une ligne > et d'un séparateur, avec un pied de page ? for shortcuts. Le tour affiche une ligne d'attente animée avec ... au-dessus de la boîte et esc to cancel en dessous. Herdr nomme cet agent agy ou antigravity. Collie classe les deux sous agy.
  • Muse affiche sa boîte sous la forme d'un séparateur pouvant porter une étiquette, d'une ligne ❯ et d'un séparateur. Une boîte vide affiche une indication grise, et Collie interprète cette indication comme une absence de texte. Une palette de commandes qui s'ouvre sous la boîte apparaît comme votre brouillon. La liste des tâches de fond sous la boîte est considérée comme inconnue, et un envoi nécessite votre validation. Un tour en cours affiche une ligne avec un minuteur et esc to interrupt.
  • Hermes (le CLI classique ; hermes --tui n'est pas lu) affiche sa zone sous la forme d'un filet, d'une ligne ❯ et d'un filet. Sous 64 colonnes, aucun filet n'est tracé sous la zone. Un profil nommé affiche son nom avant ❯. Un saut de ligne s'insère avec Alt+Entrée : Ctrl+J envoie le message lorsque display.cli_multiline_shortcuts est désactivé. La zone affiche au maximum huit lignes. Un message plus long ne pouvant être relu, l'envoi s'interrompt avant Entrée. Envoyer le transmet, et le téléphone ne peut alors pas confirmer son départ. Hermes peut afficher le reste d'un message précédent en gris après votre texte. Cet envoi s'interrompt également avant Entrée, et Envoyer ne transmet que ce que vous avez saisi. Le sélecteur de modèle et la palette de commandes s'ouvrent par-dessus la transcription, et le volet n'est jamais considéré comme libre sous l'un d'eux.
  • Hermes pendant un tour commence sa ligne par ☤, et Collie détecte le tour à partir de cette marque. L'action associée à Entrée dépend alors de la configuration propre à Hermes, Collie n'appuie donc jamais dessus pendant un tour. Un envoi effectué pendant un tour est différé, et part à la fin de celui-ci. Si un tour démarre pendant que Collie écrit, l'envoi s'arrête avant Entrée et le texte reste dans la zone.
  • Questions de Hermes : la réponse saisie à une question ouvre une ligne ✎, et un envoi depuis le téléphone y répond. Un message différé n'est jamais injecté dans cette ligne. Il patiente jusqu'à la fermeture de la question, puis part sous forme de message. Pendant qu'un message différé attend, un nouvel envoi le rejoint : annulez donc le message différé pour répondre depuis le téléphone.
  • CLI Cursor (cursor-agent) affiche sa zone sous la forme d'un filet ▄, d'une ligne → et d'un filet ▀. Une zone vide affiche une indication grise, « Plan, search, build anything » ou « Add a follow-up », et Collie interprète cette indication comme l'absence de texte. ! transforme la zone en invite de commande shell dotée de sa propre indication. Collie lit cette indication comme du texte, de sorte qu'aucun message ne passe en mode shell. Un tour en cours affiche une ligne avec indicateur d'activité comme Running au-dessus de la zone et ctrl+c to stop à l'extrémité droite de la ligne →. Collie supprime cette indication. L'appui sur Entrée pendant un tour place le message en file d'attente dans une zone follow-ups au-dessus de la zone de saisie. La zone affiche au maximum six lignes et fait défiler un brouillon plus long. Collie ne pouvant pas relire un message plus haut, il conserve le texte saisi dans la zone sans appuyer sur Entrée. Ses fenêtres de dialogue (approbation d'une commande, question, confirmation d'accès au dossier) remplacent la zone, rendant l'écran illisible. Les tests d'envoi en conditions réelles ont réussi le 2026.10.14 et le 2026.10.16.
  • Kiro dessine sa boîte sous une ligne : une barre d'état, le dossier, une ligne vide et une ligne d'invite ›. Collie ne saisit du texte que lorsque ce cadre complet est à l'écran. Un saut de ligne est envoyé sous la forme Ctrl+J. Pendant qu'un tour s'exécute, la ligne d'invite affiche Kiro is working. Dans Kiro, Entrée injecte ensuite le texte dans ce tour. Collie n'appuie pas sur Entrée pendant un tour en cours. Ctrl+S bascule Kiro entre injection et mise en file d'attente, Collie ne définit donc aucune touche de file d'attente. Collie retient donc un envoi tant que Kiro est occupé, et l'envoie lorsque la boîte affiche qu'elle est libre. Son profil a été vérifié sur Herdr uniquement, pas sur tmux ni zellij.

Grok, Antigravity et Muse ne sont pas installés sur l'hôte de construction. Leurs profils reposent sur des captures d'écran de chaque agent. Aucun message en direct ne leur a été envoyé via un profil, Collie teste donc chaque envoi pour ces derniers. Personne n'a mesuré l'effet de la touche Entrée pendant un tour pour eux. Collie refuse donc tout envoi tant que l'écran indique un tour en cours, et ne saisit rien. Quand un harness n'affiche aucun indicateur d'exécution, Collie ne peut pas savoir, et l'agent décide de l'effet d'Entrée. OpenCode et OMP ont validé des envois en direct sur une version supérieure à celle vérifiée. Collie teste chaque envoi sur ces derniers jusqu'à ce qu'un envoi réussisse dans la plage vérifiée. Hermes (le CLI classique) a validé des envois en direct sur la version 0.22.2, dans sa plage, sur Herdr uniquement. Le TUI Ink (hermes --tui, ou une configuration qui le démarre) n'est pas encore pris en charge ; appuyez sur Saisir ici pour envoyer. Le test n'a pas été tenté dans chaque dialogue Hermes, Collie teste donc aussi chaque envoi à cet endroit.

Une version supérieure à celle vérifiée fonctionne toujours, et le reçu indique provisional.

Injecter ou mettre en file d'attente

Pendant qu'un agent travaille, un envoi depuis le téléphone peut attendre la fin du tour ou s'y intégrer. Un simple appui sur Envoyer met votre texte en file d'attente pour après le tour. Cela s'applique à tous les agents. Collie n'injecte jamais un texte dans un tour par accident.

Une injection est votre propre choix, fait pour un seul envoi. Maintenez le bouton Envoyer et appuyez sur Injecter. L'agent lit la ligne après son appel d'outil en cours, au cours du même tour. La ligne n'apparaît que pendant que l'agent travaille et uniquement sur un agent disposant d'une touche d'injection dans son profil, par exemple pi, Codex et OMP aujourd'hui. Une courte indication sous la boîte précise qu'un appui court met en file d'attente et qu'un appui long injecte. Codex interprète un texte immédiatement suivi d'Entrée comme un collage, Collie attend donc une seconde après la saisie du texte avant d'appuyer sur la touche d'injection.

L'accusé de réception vous indique ce qui s'est passé :

  • Injecté. L'agent a intégré la ligne au tour en cours d'exécution. Collie a vu l'agent l'afficher.
  • Mis en file d'attente à la place. L'agent a conservé la ligne pour après le tour, même si vous avez demandé l'injection. Rien n'est perdu.
  • Saisi, non soumis. Le texte est dans la boîte et la touche d'injection ne l'a pas envoyé. Appuyez sur Envoyer ou effacez la boîte.
  • Non disponible sur ce panneau. L'agent n'a pas de touche d'injection dans son profil, Collie ne fait pas confiance à sa version pendant un tour en cours, ou le texte est une commande. Rien n'a été envoyé. Envoyez-le sans Injecter.
  • Seule une personne sur le téléphone peut injecter. Une injection provenant de toute autre source est refusée.

Si le tour se termine pendant que Collie écrit, la ligne part comme un envoi normal. Collie ne met pas d'injection en attente. Une injection longue peut se terminer sans indicateur clair. L'accusé de réception indique alors que Collie ne sait pas, et le texte n'est pas renvoyé.

Le message d'un agent vers un autre agent (Walky-talky) ne s'injecte jamais. Il attend toujours la fin du tour.

Modifier cette page sur GitHub

The rest of the documentation