Tout ce que fait Unterm
La liste complète : chaque interface, chaque capacité, et pourquoi elle est conçue ainsi.
Unterm en 60 secondes
des caractéristiques vérifiables dans le code source · mises à jour à chaque version- Dernière version
- v0.71.18 · 2026-10-04 · MIT
- Agents IA intégrés
- 7 manifestes signés — Claude Code · Codex CLI · Gemini CLI · OpenCode · Aider · Kimi Code CLI · Trae Agent. Enveloppe vérifiée Ed25519 depuis unterm.app/api/agents/manifests ; choix du mode d'authentification par agent.
- Prix
- 0 $ pour toujours · pas d'offre payante · pas d'abonnement · pas d'achat intégré
- Plateformes
- macOS (universel) · Linux x86_64 + arm64 (.deb + AppImage) · Windows 10/11 x64 + arm64 (.msi + .zip portable) — 9 paquets par version
- Taille de l'installeur
- DMG 50 MB · .deb 27 MB · AppImage 43 MB · MSI 43 MB (x86_64 / x64)
- Mémoire au repos
- ~110 MB résidents · croît linéairement avec les panneaux ouverts
- Langues de l'interface
- 9 — en · 简体 · 繁體 · 日本語 · 한국어 · Deutsch · Français · Italiano · हिन्दी
- Surfaces de contrôle
- MCP (JSON-RPC sur TCP) · Réglages Web HTTP ·
unterm-cli· interface graphique — le même état JSON pour les quatre - Intégrations d'agents testées
- Claude Code · Cursor · Codex CLI · clients MCP Python / Node personnalisés — tous via 1 socket, ~30 lignes de code
- Collecte de données
- Zéro télémétrie · pas de compte · pas d'analytics · chaque serveur lié à 127.0.0.1
- Pile technique
- Rust · moteur natif next-core · wgpu · MCP (JSON-RPC délimité par lignes) · Tailwind + Alpine pour les Réglages Web
Installez chaque agent de codage. Un clic chacun. Sans corvée de configuration.
Si vous avez déjà essayé de faire tourner plusieurs CLI de codage IA côte à côte, vous connaissez la corvée : npm install, flux OAuth, clé API, ~/.config/<vendor>/<different format each>, variables d'environnement, séparation des profils. Unterm v0.18 réduit tout cela à un onglet de réglages + une CLI. Aucun autre terminal ne fait cela.
Installer dans l'interface ou via la CLI
Cliquez sur Install sur la carte d'un agent, ou lancez unterm-cli agent install <id>. Unterm exécute la bonne commande pour votre plateforme (npm / pipx / etc.), vérifie que le binaire arrive dans le PATH et le redétecte automatiquement.
L'abonnement officiel d'abord. Votre propre clé reste optionnelle.
La plupart des agents proposent une connexion via un compte ou un abonnement officiel (Claude Pro, ChatGPT Plus, Google AI Pro). Unterm utilise ce mode par défaut — aucune clé API n'est jamais injectée en silence. Passez explicitement à votre propre clé ou à un point d'accès personnalisé dans le formulaire Configure quand vous voulez vraiment une facturation au jeton ou une passerelle d'entreprise.
Catalogue de manifestes signé Ed25519
La liste des agents et de leurs commandes d'installation n'est pas codée en dur dans Unterm — c'est une enveloppe signée servie depuis unterm.app/api/agents/manifests. Une compromission du CDN ne peut pas pousser un curl | sh sur votre machine ; la clé publique est intégrée à chaque binaire Unterm.
L'IA pilote le terminal. MCP le rend possible.
La plupart des terminaux intègrent l'IA dans le binaire. Unterm fait l'inverse : l'IA reste à l'extérieur, et le terminal est exposé comme une surface que n'importe quel agent externe peut saisir via MCP. Le terminal est ce qu'on pilote ; l'agent est celui qui fait le travail.
Une IA en pilote une autre à travers le terminal.
L'agent externe possède la session du terminal. Il change de cwd, lance un agent de codage interne dans un panneau, lit les logs et itère jusqu'à ce que le dépôt soit au vert.
L'agent externe place le panneau actif à la racine du projet pour que chaque commande, log et capture d'écran reste ancré dans le même répertoire de travail.
Il démarre un agent de codage dans un panneau divisé, lui confie la tâche et le laisse mener la boucle d'édition dans le terminal.
L'agent externe lit la sortie des tests et l'état du panneau, réessaie si besoin, et ne passe au commit ou à la publication que lorsque le terminal indique que le travail est terminé.
Trois façons d'utiliser Unterm
Nous n'avons pas conçu Unterm pour un seul flux de travail. Grâce à la surface MCP, chaque profil accède au même plan de contrôle par des points d'entrée différents.
Pilotez plusieurs panneaux de terminal depuis Claude Code, Cursor ou votre propre agent. Un panneau, une tâche ; votre agent choisit où taper. Les noms OTAN des instances (alpha, bravo, charlie…) rendent le routage entre fenêtres trivial.
- Modèle directeur / exécutant : un agent externe supervise un agent interne dans un panneau
- Surveillance de longue durée : lancer un build, interroger jusqu'à l'inactivité, décider de l'étape suivante
- Orchestration multi-panneaux : répartir le travail entre projets, agréger les résultats
- Enregistrement avec masquage des jetons pour la revue et le fine-tuning
Une CLI compatible cron pour tout ce que vous faites dans la GUI. unterm-cli est livré dans chaque version ; passez --json à tout outil en aval qui attend du JSON-RPC brut. La même surface pour les scripts d'exploitation, les tableaux de bord et les runbooks.
- Détection automatique du proxy : macOS scutil / registre Windows / GNOME gsettings
- Captures d'écran et lecture de panneaux en mode headless pour la documentation d'incidents
- Enregistrement → markdown pour générer des runbooks, données personnelles masquées par défaut
- Pas de télémétrie, pas de connexion, chaque serveur lié à 127.0.0.1
Sous licence MIT, sur son propre noyau next-core depuis la v0.61 (~12k lignes, 10 dépendances directes), avec une intégration des agents de premier plan. Patchs bienvenus sur GitHub. Compilez-le vous-même ; la CLI binaire est livrée dans chaque version. L'interface des réglages Web est une SPA Tailwind + Alpine — forkez la page, changez les couleurs.
- Binaire macOS universel arm64 + x86_64, signé avec un Developer ID
- Linux .deb (apt) et AppImage (toute distribution)
- MSI Windows avec WiX 6 + .zip portable
- 9 langues prêtes à l'emploi, détection automatique de la langue du système
Quatre surfaces de contrôle, un seul moteur
Chaque fenêtre Unterm démarre un serveur MCP local et un serveur de réglages HTTP. Lisez et écrivez le même état JSON depuis n'importe lequel d'entre eux.
JSON-RPC délimité par lignes sur 127.0.0.1:19876, protégé par jeton. Lancer des shells, lire l'état des panneaux, faire des captures d'écran, contrôler les sessions.
La même surface depuis n'importe quel shell, tâche cron ou script. Un client JSON-RPC léger au-dessus du MCP local — aucune logique métier dupliquée.
Une interface de configuration moderne dans le navigateur, pas dans la grille de cellules. SPA Tailwind + Alpine sur 127.0.0.1:19877. Thèmes, proxy, enregistrements, langue.
en / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Français / Italiano / हिन्दी prêtes à l'emploi. Détection automatique de la langue du système.
Markdown découpé en blocs OSC 133, avec masquage intégré. Les enregistrements se trouvent dans <cwd>/.unterm/sessions/.
Capture de zone en un clic depuis la barre d'état. PNG sur le disque, image dans le presse-papiers, chemin dans le presse-papiers texte.
Détecte automatiquement les réglages macOS / Windows / GNOME / variables d'environnement, avec des surcharges HTTP/SOCKS manuelles, des nœuds nommés, la rotation et la prise en charge des contrôleurs Clash/mihomo.
Construit sur le moteur de terminal natif next-core d'Unterm, avec un rendu wgpu multiplateforme.
La surface de contrôle complète
Pas une visite guidée en captures d'écran — la vraie surface que chaque agent et chaque script peut appeler. 152 méthodes MCP réparties en 30 espaces de noms, plus 34 commandes CLI, qui renvoient toutes le même JSON.
Voyez l'état en direct de chaque agent CLI (au travail / en attente / inactif), sautez depuis la boîte de réception vers celui qui a besoin de vous, lancez une flotte de N agents sur une même tâche dans des git worktrees isolés, puis relisez, fusionnez ou annulez ce qu'ils ont produit — depuis la GUI, via MCP ou en CLI.
Créez, divisez, activez, redimensionnez et détruisez des panneaux depuis l'extérieur du terminal. Tapez dans n'importe quel panneau caractère par caractère, lisez son cwd, attendez qu'il soit inactif — sans simulation de frappe.
Récupérez le texte visible en direct, tout le scrollback en une seule chaîne, la position du curseur, ou une recherche par regex. detect_errors signale les commandes échouées pour qu'un agent puisse réagir.
Lancez une commande et diffusez sa sortie, exécutez et attendez un code de sortie, envoyez des octets bruts, interrogez l'état, annulez ou envoyez un signal POSIX — des résultats structurés, pas du screen-scraping.
Installez, authentifiez, configurez et lancez Claude Code / Codex / Gemini / OpenCode / Aider. Le pont mcp-stdio rebranche automatiquement chacun d'eux sur le serveur MCP de ce terminal.
Associez une fenêtre à une identité de développeur — PAT GitHub, clés AWS, jeton npm, clé SSH, auteur git. Les identifiants restent dans le coffre du système ; 7 détecteurs découvrent ceux qui existent déjà, en lecture seule.
Chaque fenêtre est une instance portant un nom de l'alphabet OTAN (alpha, bravo, charlie…). Énumérez chaque Unterm actif sur la machine, activez-en un ou renommez-le — un agent répartit le travail entre les fenêtres selon le cwd ou le titre.
Enregistrez n'importe quel panneau en Markdown découpé en blocs de commande OSC 133 — chaque bloc contient sa commande, sa sortie, son code de sortie et sa durée — avec les jetons masqués. Listez, lisez ou exportez les enregistrements via MCP ou la CLI. Il n'y a pas de relecture : les anciennes commandes asciicast record / replay ont été supprimées.
Capturez l'écran, une fenêtre ou un rectangle (macOS et Windows ; sous Linux, ces appels renvoient « not implemented » pour l'instant) ; rendez tout le scrollback d'un panneau en un seul PNG vertical sur toutes les plateformes ; faites une capture défilante de la fenêtre d'une autre application sur macOS ; lisez le presse-papiers ; ou envoyez un fichier vers votre propre bucket Aliyun OSS / Tencent COS / Qiniu et récupérez une URL publique — le tout via MCP.
Lisez l'état du proxy du système, basculez entre les nœuds configurés, testez la latence des points d'accès, ou appliquez / effacez des surcharges du proxy système (scutil sur macOS · registre Windows · env Linux) — sans coller une seule URL.
Chaque écriture d'un agent est journalisée avec son identité ; une politique de confirmation d'écriture encadre le premier contact. Testez les décisions de la politique, lancez la suite d'autotests intégrée et lisez les indicateurs de vivacité/disponibilité.
Enregistrez toute la disposition des panneaux / onglets de la fenêtre actuelle, listez les dispositions enregistrées et restaurez-en une — un agent peut figer un ensemble de travail et le rétablir plus tard.
meta.surface renvoie chaque méthode MCP (avec ses schémas de paramètres), chaque sous-commande CLI et chaque raccourci clavier actif en un seul appel — ainsi un agent qui vient de se connecter apprend toute l'API sans documentation.
Les agents et les scripts atteignent cette surface via MCP (JSON-RPC sur TCP) et le binaire unterm-cli ; les humains utilisent l'interface graphique et la page Réglages Web, dont l'API HTTP peut aussi être appelée par des scripts. Les quatre se recoupent plutôt qu'elles ne se reflètent — le thème, la langue et unterm.conf, par exemple, ne sont pas sur MCP. Un seul aller-retour vers meta.surface (ou unterm-cli reference) renvoie en direct chaque méthode MCP, commande CLI et raccourci clavier.
Là où Unterm se démarque
Trois affirmations que vous pouvez vérifier par grep, compiler ou exécuter vous-même. Pas de brouillard marketing.
La v0.18 fait d'Unterm un lanceur en un clic pour Claude Code, Codex CLI, Gemini CLI, OpenCode et Aider. La commande d'installation, le flux OAuth, la clé API et le fichier de configuration natif de chaque agent sont décrits par un manifeste signé récupéré depuis unterm.app ; le runtime range la clé dans le trousseau de votre système, écrit la configuration JSON/TOML/YAML propre à l'agent (en préservant les champs inconnus), expose Unterm lui-même à l'agent comme serveur MCP et enregistre la session dans l'audit — le tout accessible depuis la CLI et le nouvel onglet Agents IA des Réglages Web.
session.split + session.focus via MCP permettent à un agent externe (Claude Code, Cursor, votre script) de découper la fenêtre active à gauche / à droite / en haut / en bas et de donner le focus au nouveau panneau — sans simuler la moindre frappe. Intégré à l'extrait Python de la page d'accueil. Aucun autre terminal n'expose ainsi la géométrie des panneaux aux processus externes.
Chaque session.input / exec.send est journalisé avec l'identité de l'agent appelant. La première écriture d'un nouvel agent déclenche une bannière Autoriser / Bloquer / Toujours autoriser. La confiance est conservée dans ~/.unterm/trusted_agents.json et révocable en un clic depuis l'onglet MCP des Réglages Web. La barre d'état affiche en direct le nombre d'écritures MCP.
Des petits détails qui font la différence
Des finitions pour l'usage quotidien — aucune n'est une fonction phare, mais ensemble elles éliminent les frictions.
Une prédiction grise à la Fish complète votre saisie à partir de l'historique shell de n'importe quel panneau ; → ou End l'accepte.
Les agents proposent des commandes sans toucher au PTY — affichées au-dessus de la barre d'état ; Tab accepte, Alt+Enter accepte et exécute.
Sélectionnez n'importe quel rectangle depuis la barre d'état ; PNG sur le disque, image dans le presse-papiers, chemin du fichier en texte — tout à la fois.
7 thèmes intégrés ; unterm-cli theme set midnight les change tous en direct. La barre d'état affiche le cwd du panneau actif relatif à $HOME.
Clic droit dans le Finder → Open in Unterm. Utilise l'extension Services d'AppleScript — pas de menu contextuel ajouté dans l'application.
Le profil d'identité actif (PAT GitHub / clés AWS / jeton npm associés à cette fenêtre) s'affiche dans la barre d'état ; cliquez pour lancer le profil suivant.
Lit scutil sur macOS / le registre Windows / gsettings GNOME / l'env. Un seul interrupteur marche/arrêt. Aucune URL à coller.
Les enregistrements se découpent automatiquement aux limites de l'invite du shell. Chaque bloc contient sa commande, sa sortie, son code de sortie et sa durée — consultables par recherche.
Le clic droit colle. La sélection copie.
Toute la boucle copier-coller tient dans la souris, mais ses deux moitiés reposent sur deux gestes distincts. Relâchez une sélection et elle est déjà dans le presse-papiers ; appuyez sur le bouton droit et elle se colle au curseur — à chaque fois, avec ou sans sélection. Aucun menu contextuel ne s'ouvre, rien à fermer.
Glissez sur la sortie, ou double-cliquez simplement sur un mot. Dès que le bouton se relève, le texte est dans le presse-papiers. Pas de second geste à retenir, rien à presser pour confirmer.
Un bouton, une tâche. Il colle à l'invite, qu'il y ait une sélection ou non. Copiez depuis un panneau, cliquez dans un autre, clic droit — commande déplacée, zéro frappe. Un presse-papiers vide ne fait rien en silence, jamais une erreur.
macOS traite Ctrl+clic comme un clic secondaire, et Unterm aussi — trackpad, Magic Mouse ou n'importe quel pilote tiers. Seul un Ctrl seul compte, donc vos propres raccourcis souris avec Ctrl et le déplacement de fenêtre Ctrl+Shift restent intacts. macOS transmet ce geste unique sous forme de deux événements ; Unterm n'y réagit qu'une fois. Les TUI qui gèrent la souris, comme vim ou Claude Code, se comportent de la même manière.
Modifié dans la v0.71.6. Le clic copiait auparavant dès qu'une sélection existait — refaisant un travail que la sélection avait déjà fait, au détriment du collage qu'il visait.
Votre terminal voit désormais les agents qui tournent dedans
Claude Code, Codex, Gemini, Aider — chaque panneau indique qui travaille, qui est bloqué en attente de vous, et ce qui a changé. Zéro configuration pour commencer ; une seule commande pour un reporting précis au niveau des hooks.
Quatre couches de signaux — hooks officiels, analyse des titres/OSC, détection de processus, heuristiques d'écran — se replient en un seul état par panneau : au travail (bleu qui respire), vous attend (ambre), terminé, inactif. La barre supérieure fait le compte sur toutes les fenêtres et passe à l'ambre dès que quelque chose vous attend.
Ctrl+Shift+A : tous les agents de toutes les fenêtres, ceux en attente d'abord, avec la durée et la cause du blocage. Entrée saute directement au panneau. « Va appuyer sur y quelque part » tient désormais en deux touches.
Faites courir claude × 2 + codex sur la même tâche — chaque membre dans son propre git worktree et sa propre branche à côté de votre dépôt, avec son onglet et son badge d'état. Votre copie de travail n'est jamais touchée.
Dès qu'un agent se met au travail, Unterm pose un point de contrôle sur le dépôt (un commit dangling — HEAD, index et fichiers intacts). Diffs ligne à ligne, y compris les fichiers créés par l'agent, squash-merge en tant que staged (le commit reste le vôtre), retour à n'importe quel point de contrôle, comparaison des membres côte à côte.
Le cockpit lui-même est MCP + CLI : agent.status, cockpit.inbox, fleet.launch, review.merge… un agent orchestrateur peut lancer des flottes et relire des diffs sans humain aux commandes. Local d'abord — rien de tout cela ne touche un cloud.
Nouveautés de la v0.71
Un terminal qui s'ouvre sur une machine sans pilote graphique, une deuxième fenêtre en 31 ms au lieu de 587, des shells qui survivent à la fenêtre où ils ont été ouverts, et du CJK qui se copie enfin comme du texte — les huit dernières versions, en sept cartes.
Unterm affiche désormais les images en ligne — protocole graphique de kitty, images en ligne d'iTerm2 et sixel —, si bien que chafa, img2sixel, viu, timg et unterm-cli imgcat montrent l'image elle-même. Les images défilent avec le texte à côté, restent dans l'historique, sont coupées proprement aux bords d'un volet et restent sur l'écran (y compris alternatif) où elles ont été dessinées. Les programmes qui demandent la taille d'une cellule en pixels obtiennent la vraie. Les agents les listent avec screen.images. Aussi : les sections [platform.*] de la configuration s'appliquent, close_confirmation fonctionne, et les réglages sans effet le signalent.
Mise à jour en un clic : unterm-cli update, « Installer la mise à jour » dans la palette de commandes ou le bouton des Réglages web téléchargent la nouvelle version, vérifient son SHA-256 (et sa signature sur macOS) et redémarrent dessus. L'intégration shell se charge toute seule dans zsh, bash, fish et PowerShell : une commande qui échoue marque son onglet d'un ▲ — une sortie qui contient simplement « error », non. Les agents obtiennent ce qu'ils demandent aux terminaux : Maj+Entrée n'est plus Entrée (protocole clavier kitty), les requêtes de couleur répondues d'après votre thème, une barre de progression sous l'onglet (OSC 9;4) et des redessins plein écran sans déchirure (mode 2026). Aussi : Git Bash et chaque distribution WSL dans le menu des shells Windows, une boîte de plantage qui ouvre une issue GitHub pré-remplie, et l'installation via Homebrew et Scoop.
Le démarrage essayait les chemins matériels et s'arrêtait là. Sur une machine Windows sans pilote d'affichage utilisable — une VM, une image vierge, une session distante — DX12 trouvait un adaptateur mais ne pouvait pas configurer de surface, OpenGL n'avait aucun pilote à trouver, et le terminal refusait de démarrer avec « no working GPU path », sans jamais avoir demandé WARP, qui est livré avec D3D12 et ne nécessite aucun pilote. La chaîne se termine désormais par un rendu logiciel. Dans la même version : `unterm-cli start` le signale quand il se rabat sur un second processus au lieu de confier la fenêtre à celui qui tourne déjà, car ce repli coûte un second adaptateur GPU et un Core partagé ; et le manifeste des fournisseurs est désormais validé par rapport au contrat qui le lit.
Une deuxième fenêtre était auparavant un deuxième Unterm : un autre adaptateur GPU, une autre connexion au Core, 587 ms d'attente. Elle s'ouvre maintenant dans le processus déjà en cours, en 31 ms. Les fenêtres ont des identifiants, donc `instance.new_window` répond avec celle qu'il vient de créer et `instance.focus` l'accepte ; une session appartient à exactement une fenêtre, et fermer une fenêtre ferme la vue tandis que les shells restent dans le Core pour la fenêtre qui reste. Seule la dernière fenêtre demande si vous vouliez quitter.
Les capacités vivent désormais derrière des baux : un agent en acquiert un, l'utilise sous une clé que vous pouvez voir et le perd quand vous le révoquez — au lieu que chaque appelant détienne le même socket sans limite. Les approbations sont devenues répondables, la question nommant ce qui est sur le point de se produire plutôt que la méthode qui se trouve l'implémenter. Les flottes sont stockées durablement plutôt que dans un fichier JSON, si bien qu'un plantage en cours d'exécution ne fait plus perdre qui faisait quoi.
« Continuer en arrière-plan » laisse désormais quelque chose à l'écran — un indicateur dans la zone de notification sur les trois plateformes, qui indique combien de sessions sont encore actives et ramène une fenêtre mise de côté en un clic. Un agent peut faire de même via MCP : `instance.focus` réveille une fenêtre mise de côté au lieu d'échouer. Les deux boutons de fermeture ne sont plus en désaccord sur vos shells, ce qui faisait que « fermer » voulait dire deux choses différentes selon celui sur lequel vous appuyiez.
La saisie CJK se brisait en octets parasites `<009d>` quand l'interface transmettait au shell une locale qu'elle n'avait jamais définie. Le texte copié contenait la cellule d'espacement de la grille au lieu du texte, si bien qu'un collage revenait plein de trous. Un double-clic sélectionnait la moitié d'un mot et perdait l'autre moitié. Les caractères larges sont désormais un seul caractère — dans la sélection, dans le presse-papiers et à la saisie. Et la fin de la tempête de redessins : comparer l'image de la mauvaise façon entraînait un redessin, que quelque chose ait bougé ou non.
unterm-core possède désormais vos sessions : un processus par utilisateur garde les shells, le scrollback et les dispositions, sert toute la surface MCP et les passe d'une fenêtre à l'autre (v0.62). Quitter la dernière fenêtre l'arrête aussi, sauf si elle est rangée dans la barre d'état ou si le Core a été lancé avec --headless. v0.63 est la version que l'installation méritait : le démon core est réellement livré dans les neuf paquets, la page de réglages fonctionne en mode Core, les emoji s'affichent pour la première fois — la police embarquée était un COLRv1 que FreeType ne sait pas dessiner — la latence de frappe après une pause passe de 96ms à 8ms, macOS porte la nouvelle marque, et l'Explorateur gagne « Open in Unterm tab ».
Unterm ne tourne plus sur un fork de WezTerm. next-core est un noyau de terminal écrit pour ce produit — parseur, modèle d'écran, runtime PTY, pile de polices et un moteur de rendu wgpu — tenu à un budget d'environ 12k lignes de source et 10 dépendances directes. 22 ms du lancement à une surface MCP active (contre 7,1 s), 6,6 % d'un cœur au repos (contre 80 %), débit identique sur 200k lignes. La parité fonctionnelle avec l'ancien noyau a été fermée point par point contre un registre de 159 exigences, avec une typographie native par plateforme : de vrais feux tricolores sur macOS, des tailles exactes au pt, et le CJK enfin rendu correctement. Lisez l'histoire sur le blog.
Six principes, sans exception
Chaque serveur, chaque point d'accès API, chaque enregistrement reste sur 127.0.0.1. Pas de connexion, pas de télémétrie, pas d'abonnement. Votre historique shell vous appartient.
Pas de surcouche de chat, pas de panneau d'IA intégré, pas de modèle dans le terminal. Le terminal est la surface — Claude Code, Cursor, vos scripts s'en saisissent via MCP. La seule prédiction qu'il fait est un texte fantôme gris à l'invite du shell, tiré de votre propre historique, et il reste absent des panneaux où tourne un agent comme Claude Code.
Les fonctions destinées aux agents sortent avec une méthode MCP et une commande CLI. Les exceptions sont voulues : le thème, la langue et le fichier de configuration restent entre vos mains — réglages Web, <code class="font-mono text-xs">unterm-cli</code> et <code class="font-mono text-xs">unterm.conf</code> — pour qu'aucun agent ne change l'apparence de votre terminal en pleine session.
Une fonction qui marche sous Windows mais lâche sous macOS ou Linux est un bug, pas un « pas encore pris en charge ». Mac, Linux et Windows sortent ensemble.
Quand une fonction relève du système d'exploitation, utilisez le système. Gardez la génération IA hors du terminal, le fonctionnement de base en local, et utilisez l'intégration native au Finder sur macOS.
Quand vous installez un agent IA via Unterm, le mode d'authentification par défaut est l'abonnement officiel de l'éditeur (OAuth) — votre formule Pro / Plus / Team. Nous n'injectons jamais une clé API en silence dans une session ; la facturation au jeton n'a lieu que si vous passez explicitement le mode d'authentification à « votre propre clé API » ou « point d'accès personnalisé » dans le formulaire Configure. C'est un choix délibéré, pas un piège.
Un terminal n’a pas besoin d’IA intégrée.
Il doit pouvoir être piloté par l’IA.
C’est la bifurcation entre Unterm et Warp — pas un écart de fonctionnalités, une direction.
Un terminal est un outil de trente ans ; un modèle d’IA, un composant de six mois. Soudez l’IA au terminal et l’outil le plus durable que vous possédez est désormais défini par sa pièce la plus éphémère — quand le modèle vieillit, tout le terminal vieillit avec lui.
Claude Code, Codex, Gemini CLI, Aider — vous utilisez déjà les meilleurs agents de codage qui existent, et ils s’améliorent chaque mois. Une fenêtre de chat dans le terminal n’est qu’un copilote de plus auquel se connecter, et ce ne sera jamais celui que vous préférez vraiment.
Les agents ne manquent pas d’intelligence — ils manquent de mains sur le terminal. Unterm fait du terminal une surface pilotable par MCP : créer des panneaux, exécuter des commandes, lire l’écran, faire des captures défilantes, changer les réglages, enregistrer des sessions. Un agent utilise le terminal comme vous, au lieu de regarder derrière une vitre.
- IA intégrée à l’interface du terminal, liée à leur cloud — connexion, abonnement, quotas
- Les modèles qu’ils choisissent, mis à jour selon leur calendrier
- Le cœur IA est fermé ; le contexte de vos commandes transite par leurs serveurs
- Le terminal est une surface MCP — n’importe quel agent s’y branche et le pilote, celui d’aujourd’hui comme celui de l’an prochain
- Vous choisissez l’agent et le modèle ; Unterm ne vous enferme jamais
- MIT, entièrement open source ; tout reste sur 127.0.0.1 — pas de connexion, pas d’abonnement, pas de télémétrie
Vous utiliserez encore un terminal dans trente ans. Personne ne sait quelle IA le pilotera alors — c’est pourquoi le seul terminal à l’épreuve du temps est celui qui est conçu pour être piloté.
Unterm vs un terminal natif vs un terminal IA payant
Le terminal natif (Terminal.app) est la base que vous avez déjà. Warp est le terminal IA payant. iTerm2 et Ghostty sont les terminaux avancés gratuits. Unterm trace sa propre voie : tout ce qu'un agent externe peut saisir de l'extérieur.
| Capacité | Unterm | Terminal.app | Warp | iTerm2 | Ghostty |
|---|---|---|---|---|---|
| agent d'abord | natif | payant | gratuit | gratuit | |
| Pilotable de l'extérieur via MCP | ✓ | ✗ | ✗ | ✗ | ✗ |
| Une CLI scriptable pour chaque action | ✓ | ✗ | ✗ | Python API | ✗ |
| Lanceur d’agents de code IA intégré | ✓ ×7 | ✗ | ✗ | ✗ | ✗ |
| Agents branchés automatiquement sur le MCP du terminal | ✓ | ✗ | ✗ | ✗ | ✗ |
| Cockpit des agents (boîte de réception · flottes · revue) | ✓ | ✗ | ~ cloud | ✗ | ✗ |
| Profils d'identité (identifiants par fenêtre) | ✓ | ✗ | ✗ | ✗ | ✗ |
| Orchestration multi-instance | ✓ | ✗ | ✗ | ✗ | ✗ |
| Enregistrement de session → markdown | ✓ md | ✗ | ~ | ✓ | ✗ |
| Capture d'écran + envoi de fichiers via MCP | ✓ (Linux ~) | ✗ | ✗ | ~ | ✗ |
| Sélectionner copie, clic droit colle — sans menu | ✓ gesture | menu | menu | menu | menu |
| Gestion du proxy intégrée | ✓ | ✗ | ✗ | ✗ | ✗ |
| Local d'abord, sans cloud ni connexion | ✓ | ✓ | ✗ | ✓ | ✓ |
| IA intégrée au terminal | ✗ par choix | ✗ | ✓ (cloud) | plugin | ✗ |
| Rendu GPU | ✓ | ✗ | ✓ | ✓ | ✓ |
| macOS + Linux + Windows | ✓ | ✗ | ✓ | macOS | mac+Linux |
| Client open source | ✓ MIT | ✗ | ✗ | ✓ GPL | ✓ MIT |
| Langues d'interface natives | ✓ ×9 | OS | en | en | en |
| Prix | $0 | $0 | freemium $ | $0 | $0 |
✓ oui · ✗ non · ~ partiel · ×N nombre. Le ✗ par choix sur « IA intégrée » résume toute la thèse : Unterm garde l'IA à l'extérieur et expose le terminal comme la surface qu'elle saisit.
Reflète les fonctionnalités documentées publiquement en 2026-05. Warp est à code fermé, avec une offre gratuite adossée au cloud et des formules payantes Team/Pro ; iTerm2 propose une API de scripting Python et un plugin de commandes IA optionnel ; Ghostty n'a pas encore de build Windows. Corrections bienvenues sur GitHub.
Comparatifs détaillés en tête-à-tête :
Questions fréquentes
Qu'est-ce qu'Unterm ?
Un émulateur de terminal multiplateforme avec des surfaces de contrôle MCP, HTTP et CLI intégrées. L'idée du produit : le terminal comme surface pilotable par MCP, pour que n'importe quel agent IA externe puisse le piloter de l'extérieur au lieu d'avoir une IA intégrée au terminal lui-même.
Comment savoir quand Claude Code attend mon approbation ?
Unterm suit l'état de l'agent de chaque panneau. Quand Claude Code (ou Codex, Gemini, Aider) se bloque sur une confirmation, le point de son onglet passe à l'ambre, la pastille de la barre supérieure passe à l'ambre avec un compteur, et l'agent remonte en tête de la boîte de réception des agents (Ctrl+Shift+A) — Entrée vous amène directement au panneau. La détection fonctionne sans configuration pour Claude Code et Gemini ; « unterm-cli agent enable-hooks » ajoute un reporting précis au niveau des hooks.
Puis-je exécuter plusieurs instances de Claude Code en parallèle sans conflits ?
Oui — c'est exactement à ça que servent les flottes. « unterm-cli fleet launch --agents claude,claude,codex -- tâche » donne à chaque membre son propre git worktree et sa propre branche à côté de votre dépôt : impossible de se marcher dessus ou d'abîmer votre copie de travail. Chaque membre a son onglet avec badge d'état en direct, et la page Review compare leurs résultats côte à côte.
Comment relire ou annuler ce qu'un agent de codage IA a changé ?
Unterm pose un point de contrôle sur un dépôt dès qu'un agent s'y met au travail — un commit git dangling qui ne touche jamais HEAD, votre index ni vos fichiers. La page Review (dans les réglages Web) affiche des diffs ligne à ligne, y compris les fichiers créés par l'agent, et vous laisse squash-merger un résultat dans votre dépôt en tant que changements staged (c'est vous qui faites le commit), le rejeter, ou ramener le worktree à n'importe quel point de contrôle.
Quels agents de codage IA Unterm prend-il en charge ?
Le lanceur installe et branche Claude Code, Codex CLI, Gemini CLI, OpenCode et Aider en un clic chacun. La détection d'état du cockpit reconnaît en plus kimi, trae et cursor-agent d'emblée, et tout agent émettant des signaux de terminal standard (titres, OSC 9/777, BEL) bénéficie d'un suivi de base sans rien faire. Tout le reste peut s'intégrer via « unterm-cli agent signal ».
Comment copier et coller uniquement à la souris ?
Sélectionnez pour copier, clic droit pour coller. Relâchez un glisser ou un double-clic et le texte est déjà dans le presse-papiers. Un clic droit colle toujours au curseur — avec ou sans sélection, et dans chaque panneau, y compris les programmes qui prennent le contrôle de la souris (vim, htop, Claude Code) : Unterm garde le clic droit au lieu de le leur transmettre. Dans ces programmes, maintenez Shift en glissant pour sélectionner. Sur macOS, un simple Ctrl+clic compte comme un clic droit, et le bouton du milieu colle aussi. Aucun menu contextuel à fermer, et un presse-papiers vide ne fait rien en silence.
Comment fonctionne-t-il avec Claude Code, Cursor ou d'autres agents ?
Chaque fenêtre Unterm démarre un serveur MCP local (TCP, JSON-RPC, protégé par jeton). Pointez votre client MCP sur 127.0.0.1:<port> — le port et le jeton sont écrits dans ~/.unterm/server.json au lancement. L'agent peut lancer des shells, exécuter des commandes, lire l'état des panneaux, faire des captures d'écran, activer l'enregistrement et piloter l'Agent Cockpit (état, boîte de réception, flottes, revue). Le thème, la langue et la configuration ne sont volontairement pas sur MCP ; modifiez-les dans les réglages Web, avec unterm-cli ou dans unterm.conf.
Comment piloter plusieurs fenêtres Unterm depuis un seul agent ?
Chaque processus Unterm est une instance portant un nom de l'alphabet OTAN (alpha, bravo, …) enregistré dans ~/.unterm/instances/<name>.json. Appelez instance.list sur n'importe laquelle pour les énumérer ; choisissez selon le cwd, le titre ou l'ordre de démarrage ; connectez-vous au port de cette instance avec son jeton d'authentification. ~/.unterm/active.json pointe vers la dernière instance active, comme repli pour les configurations à instance unique.
En quoi est-ce différent de Warp ?
Warp intègre l'IA dans un orchestrateur cloud fermé (Oz) — des outils externes comme Claude Code ne peuvent pas piloter Warp de l'extérieur. Unterm prend la troisième voie : garder l'IA hors du terminal, exposer le terminal lui-même comme une surface pilotable par MCP, et laisser n'importe quel agent s'en saisir. Pas de cloud, pas de connexion.
Où vont mes données ?
Nulle part à l'extérieur. Les serveurs MCP et de réglages Web n'écoutent que sur 127.0.0.1. Les enregistrements de session sont stockés dans <project>/.unterm/sessions/ avec masquage intégré des jetons. Pas de télémétrie, pas d'analytique, pas de connexion, aucun aller-retour vers le cloud. Votre historique shell vous appartient.
Unterm contacte-t-il un serveur, ne serait-ce qu'une fois ?
Pas de télémétrie, pas d'analytics, pas de ping de plantage ou d'installation, pas de compte. Unterm effectue deux requêtes de lui-même, et aucune ne transporte quoi que ce soit vous concernant : (1) une vérification de mise à jour — un simple GET vers api.github.com/repos/zhitongblog/unterm/releases/latest environ 20 secondes après le lancement puis toutes les 6 heures, avec un User-Agent fixe (unterm-update-check) et aucun identifiant ; la réponse est mise en cache dans ~/.unterm/update_check.json. (2) le catalogue d'agents IA — un GET vers unterm.app/api/agents/manifests quand vous ouvrez Agents IA dans les Réglages Web ou lancez une commande unterm-cli agent, n'envoyant que la version d'Unterm dans le User-Agent et un ETag de cache ; en cas d'échec, la copie signée intégrée à l'application est utilisée. Aucune des deux ne peut encore être désactivée dans les réglages — bloquez ces deux hôtes dans votre pare-feu si vous voulez Unterm entièrement hors ligne. Tout le reste est du trafic que vous déclenchez : téléchargements, envois vers votre propre bucket, vérifications d'état de vos propres nœuds proxy, et tout ce que fait votre shell.
Existe-t-il une version payante ou des fonctions premium ?
Non. Unterm est sous licence MIT ; le même binaire contient toutes les fonctionnalités. Pas d’abonnement, pas de version Pro, pas de marketplace de plugins, pas de « payez pour débloquer les panneaux divisés ». Pour soutenir le projet, le lien « Soutenir » en pied de page est la seule demande.
Quelle est la taille de l'installation et à l'exécution ?
DMG macOS ~50 MB · .deb Linux 27 MB · AppImage 43 MB · MSI Windows 43 MB. Au repos avec une fenêtre ouverte, la mémoire résidente est de ~110 MB ; elle croît linéairement par panneau. Le moteur natif next-core effectue le rendu via wgpu ; le coût à l'exécution est normalement dominé par le shell et les applications de chaque panneau.
Unterm détecte-t-il la langue de mon système ?
Oui. Au premier lancement, Unterm lit la locale du système (defaults sur macOS, $LANG sous Linux, le registre sous Windows) et choisit la plus proche des 9 langues d'interface intégrées. Vous pouvez la changer par fenêtre dans Réglages Web → Langue. Les traductions se trouvent dans unterm-services/src/i18n/locales/*.json — les correctifs sont bienvenus.
Qu'est-ce qui empêche un agent malveillant de lancer rm -rf sur mon dépôt ?
Plusieurs garde-fous. (1) Le serveur MCP n'écoute que sur 127.0.0.1 — aucun accès réseau. (2) Il est protégé par jeton ; le jeton se trouve dans ~/.unterm/instances/<name>.json, et un agent sans accès en lecture à ce fichier ne peut même pas se connecter. (3) Chaque requête est classée dans l'une de sept bandes de risque — read, local_mutation, exec, external_side_effect, credential_access, financial, destructive. Les lectures passent. Les modifications locales et l'exécution de commandes passent sans demande, sous réserve des motifs de commandes bloquées et autorisées de votre politique. Tout ce qui va d'external_side_effect vers le haut attend votre accord, et pour les identifiants, l'argent et la destruction, cet accord ne vaut que pour un seul appel. (4) Taper dans un shell compte comme exec, donc ce qui sépare un agent d'un rm -rf, c'est la bannière de première écriture : la première fois qu'un nouvel agent écrit dans un panneau, vous obtenez Autoriser / Bloquer / Toujours autoriser, et le journal d'audit enregistre chaque tentative d'écriture avec l'identité de l'appelant. Révoquez la confiance à tout moment depuis l'onglet MCP des Réglages Web.
Comment l'automatiser par script ?
Utilisez unterm-cli : session list, proxy status, theme set midnight, session record start, screenshot. Ajoutez --json à n'importe quelle sous-commande pour obtenir une sortie JSON-RPC brute, adaptée aux pipelines shell et aux tâches cron.
Quelles plateformes sont livrées signées et notarisées ?
macOS : DMG universel arm64 + x86_64 signé avec un Developer ID, notarisé par Apple et agrafé (aucun avertissement Gatekeeper). Linux : .deb pour Debian/Ubuntu et AppImage pour toute distribution. Windows : installeur MSI construit avec WiX et .zip portable. Tout est publié sur GitHub Releases à chaque tag mineur.
Est-ce open source ?
Oui — sous licence MIT. L'interface graphique et le runtime du terminal actuels utilisent le moteur natif next-core d'Unterm, avec MCP, les réglages Web, l'enregistrement, l'i18n et l'outillage de publication dans le même dépôt. Code source sur github.com/zhitongblog/unterm.
Comment contribuer ?
Ouvrez une issue ou une PR sur GitHub. Bugs, demandes de fonctionnalités et discussions passent par une seule file. Nous regroupons les correctifs accumulés dans des versions mineures — les versions de correctif ne déclenchent pas de build CI. La documentation se trouve dans le dépôt, sous /docs.
Soutenir Unterm
Un seul développeur construit et maintient Unterm sur son temps libre. S'il accélère votre travail quotidien, un petit parrainage fait vivre le projet.
Palier mensuel ou ponctuel, international. Traité par Stripe via GitHub. Résiliable à tout moment.
Pourboire ponctuel depuis le monde entier. Choisissez n'importe quel montant dans votre devise.
Les sponsors sont cités dans le README et dans la boîte de dialogue À propos de l'application (avec leur accord). Pas de paywall, pas d'offre premium — tout est livré dans le même binaire sous licence MIT.
Plutôt donner du temps que de l'argent ? Devenez ambassadeur →
Communauté et contact
File ouverte, sans barrière. Le bon endroit pour votre question dépend du type de question.
Rapports de bugs, demandes de fonctionnalités, régressions. Il n'y a qu'une seule file de tri — chaque rapport est lu.
Questions sur les modèles d'intégration MCP, la configuration des agents, la conception de flux de travail. D'autres utilisateurs ont peut-être rencontré la même chose.
Ligne directe pour les problèmes de sécurité, les partenariats ou tout ce qui n'a pas sa place sur un forum public.