Votre terminal affiche enfin l'image : les images en ligne dans le CLI et le TUI Hermes

Vous demandez à Hermes de regarder la page que vous venez de capturer, et il répond que le bouton de droite est coupé. Vous voulez revenir dessus pour vérifier, vous levez les yeux — et il n’y a aucune image à l’écran. Juste un chemin : /tmp/screenshot-2026-11-05.png. Ouvrir le gestionnaire de fichiers, double-cliquer, attendre la visionneuse, revenir au terminal. Deux allers-retours plus tard, votre raisonnement est parti en fumée.
Cette boucle est désormais fermée. Un changement fusionné le 4 novembre permet à Hermes de dessiner les images directement dans le CLI classique et dans le TUI : les images que vous joignez apparaissent sous votre message, et celles qu’un outil a produites apparaissent sous la ligne de cet outil.
Avant, c’était un chemin ; maintenant, c’est l’image
Deux cas sont couverts :
- Les images que vous joignez — via
/paste,/image, ou en glissant un fichier dans le terminal — sont dessinées sous votre ligne de message. - Les images locales qu’un outil a produites ou consultées — une entrée de
vision_analyze, un résultat d’image_generate, une capture d’écran de navigateur ou de computer-use — sont dessinées sous la ligne de cet outil.
Deux choses n’apparaissent volontairement pas, et le savoir vous évite une chasse au support : read_file ne sait pas lire les images, il ne dessine donc rien ; et les URL d’images distantes ne sont jamais récupérées — seuls les fichiers locaux sont rendus.
Un seul réglage, cinq niveaux
Il vit dans config.yaml, sous display, et vaut auto par défaut :
display:
inline_images: auto # auto | kitty | iterm | unicode | off
Ce que signifie chaque niveau :
autodessine les images en pleine résolution dans kitty et Ghostty (protocole graphique kitty avec placeholders Unicode) aussi bien dans le CLI que dans le TUI, et dans le CLI classique il utilise en plus le protocole d’images en ligne iTerm2 pour peindre sur des lignes réservées dans iTerm2, WezTerm et Konsole. Tout le reste — tmux, GNU screen, les sessions SSH vers VS Code, et le TUI partout ailleurs que dans kitty/Ghostty — obtient des demi-blocs en truecolor : deux caractères en demi-hauteur par cellule de pixel colorée.kittyforce le protocole kitty. La raison habituelle est le CLI classique dans tmux avecset -g allow-passthrough on.itermforce le protocole iTerm2 dans le CLI classique ; à ce niveau, le TUI revient àauto.unicodeutilise toujours les demi-blocs.offn’affiche que les chemins de fichiers, exactement comme avant.
Un tableau se lit plus vite :
| Terminal | Ce que auto vous donne |
|---|---|
| kitty / Ghostty | pleine résolution (CLI et TUI) |
| iTerm2 / WezTerm / Konsole | pleine résolution (CLI classique seulement) |
| terminal VS Code (support d’images activé) | pleine résolution (CLI classique seulement) |
| tmux / GNU screen / SSH vers VS Code | demi-blocs truecolor |
| tout le reste, y compris les terminaux sixel | demi-blocs truecolor |
VS Code n’est interrogé qu’une fois, au démarrage
Le terminal intégré de VS Code peut afficher de vraies images, mais seulement si terminal.integrated.enableImages est activé. Hermes n’avait aucun moyen de le savoir et jouait donc toujours la prudence avec des blocs.
Désormais, le CLI classique sonde VS Code une seule fois par lancement : il envoie une requête XTSMGRAPHICS encadrée par DA1, dans la fenêtre qui précède la prise de contrôle du tty par prompt_toolkit. Seul l’addon d’images de VS Code répond à cette requête, donc une réponse signifie que les images sont activées. La réponse est mise en cache ; la sonde est ignorée en Remote-SSH, sous Windows, et quand il n’y a pas de tty. Si les images s’avèrent désactivées, environ un lancement sur cinq Hermes remplace son astuce aléatoire par une ligne citant le réglage — pas à chaque lancement.
Pourquoi tant de terminaux n’ont droit qu’à des blocs colorés
La raison est mécanique. Un moteur de rendu qui dispose ligne par ligne peut mesurer de façon fiable deux formes d’images : les placeholders Unicode de kitty, où l’image occupe des cellules de la grille et où le nombre de lignes est connu, et les demi-blocs truecolor, où deux caractères forment une cellule de pixel. Le protocole iTerm2 peint par-dessus un certain nombre de lignes réservées que rien ne comptait, et c’est pourquoi il apparaît dans le CLI classique et pas dans le TUI.
La même contrainte explique pourquoi tmux et GNU screen finissent en demi-blocs : ils peuvent avaler ou réécrire les échappements graphiques de passthrough, sauf si vous autorisez explicitement le passthrough et forcez le niveau kitty.
Ce qui se passe quand vous redimensionnez
Le CLI redessine son transcript lorsque la taille du terminal change. Les images kitty et les demi-blocs reviennent dans ce redessin. Les images dessinées avec le protocole iTerm2 laissent des lignes vides dans l’écran redessiné et ne restent visibles que dans le scrollback au-dessus. C’est une différence de protocole, pas une fonctionnalité cassée — bon à savoir avant d’ouvrir un ticket.
Quelles images sont dessinées, et lesquelles restent discrètes
Le chemin des images d’outils ne regarde que des champs nommés : image_url, url, path, image_path, screenshot_path, en lisant le résultat avant les arguments. Une sortie de search_files pleine de chemins PNG ne transformera donc pas votre terminal en album photo.
Les aperçus PNG surdimensionnés sont refusés avant tout décodage — une frontière volontaire pour qu’une seule image énorme ne puisse pas bloquer le terminal.
Le dessin est du rendu local. L’image partait de toute façon vers le modèle comme pièce jointe ou comme résultat d’outil ; cette couche ajoute des pixels à votre écran, pas des tokens à la requête.
Peut-on l’utiliser aujourd’hui ?
Le travail a été fusionné sur main le 4 novembre, après le point de release v0.22.7 (3 novembre), donc ce n’est pas encore dans une release — à l’heure où ces lignes sont écrites, cela ne vit que sur main. Lancez depuis les sources si vous le voulez maintenant, ou attendez la prochaine version.
Si l’autre moitié du sujet vous intéresse — comment une image est comprise et ce qu’elle coûte en contexte — l’article sur le budget de contexte des images et le guide de routage vision des images traitent de cela. Ce changement-ci porte sur le fait de la voir. Si vous vivez au clavier, le guide de la palette de commandes est la lecture voisine, et une installation neuve commence par la page d’installation.