12k
All articles

Guide du Développeur sur tmux à l'Ère de l'IA

tmux pour les agents de codage IA : sessions, panneaux, configuration minimale, tmux-resurrect et quand tmux bat Zellij ou Warp en SSH.

OpenReplay Team
OpenReplay Team
Guide du Développeur sur tmux à l'Ère de l'IA

tmux est un multiplexeur de terminal : il exécute un processus serveur persistant sur votre machine, de sorte que les sessions, fenêtres et panneaux survivent aux déconnexions du terminal — vous pouvez vous détacher d’une session, fermer votre ordinateur portable, vous reconnecter en SSH depuis une autre machine, et retrouver chaque processus exactement là où vous l’aviez laissé. C’est précisément cette propriété qui rend tmux plus pertinent aujourd’hui qu’il y a dix ans : les développeurs font tourner de plus en plus de processus longue durée — serveurs de développement, observateurs de build, et agents de codage IA autonomes comme Claude Code et aider — qui doivent survivre à une connexion SSH instable ou à la fermeture du couvercle.

Ce guide commence par construire le modèle mental (sessions, fenêtres, panneaux, la touche préfixe), vous fournit une configuration minimale à coller une fois pour toutes, puis s’attarde sur ce qu’aucun autre guide tmux n’aborde : l’utilisation de tmux comme hôte durable pour les agents de codage IA. Il se conclut par une comparaison honnête des cas où tmux est le bon outil, et de ceux où un terminal moderne comme Zellij ou Warp s’impose.

Points Clés

  • tmux survit aux déconnexions SSH parce que le processus serveur tmux s’exécute indépendamment de toute connexion client ; votre terminal n’est qu’une vue sur une session qui continue de tourner, que vous y soyez connecté ou non.
  • Une configuration tmux minimale nécessite exactement quatre éléments : un préfixe remappé (Ctrl+a), la prise en charge de la souris (set -g mouse on), le mode copie vi, et des raccourcis de division intuitifs — tout le reste est cosmétique.
  • tmux est l’hôte naturel pour les agents de codage longue durée : détachez une session Claude Code ou aider, rattachez-vous depuis n’importe quelle machine avec tmux attach -t agent, et le processus de l’agent ainsi que l’historique complet de ses sorties vous attendent.
  • tmux-resurrect restaure automatiquement la disposition des sessions (fenêtres, panneaux, répertoires de travail) ; la restauration des programmes en cours d’exécution est optionnelle via une liste blanche, et tmux-continuum automatise les sauvegardes toutes les 15 minutes par défaut.
  • Si vous travaillez en local et ne vous connectez jamais en SSH à des machines distantes ni n’exécutez de processus longue durée, un terminal moderne vous offre le multiplexage avec de meilleures valeurs par défaut et sans la courbe d’apprentissage liée à la touche préfixe.

Ce qu’est tmux et le Problème qu’il Résout

tmux est un multiplexeur de terminal qui permet à une seule fenêtre de terminal d’héberger de nombreuses sessions, fenêtres et panneaux persistants. Le mécanisme à l’origine de cette persistance repose sur une architecture client-serveur : lorsque vous exécutez tmux, il démarre un processus serveur longue durée qui possède vos sessions, et votre terminal se connecte à ce serveur en tant que client. Quand votre connexion SSH tombe, votre session tmux, elle, ne tombe pas — parce que le processus serveur s’exécute indépendamment de toute connexion client. Votre terminal n’est qu’une vue ; la session continue de tourner, que vous y soyez connecté ou non.

tmux résout deux problèmes à la fois. Le premier est la persistance : un build qui prend 40 minutes, un serveur de développement, ou un agent IA en pleine tâche continuent tous de tourner après la mort de votre session ssh. Vous vous reconnectez et vous rattachez. Le second est la disposition : au lieu de jongler avec des onglets de terminal, vous divisez une fenêtre en panneaux — l’éditeur à gauche, un journal de serveur à droite, un shell en bas — tous visibles simultanément et tous reproductibles.

tmux a été créé en 2007 par Nicholas Marriott comme une alternative sous licence ISC à GNU screen. Les exemples de ce guide utilisent tmux 3.6b. Installez-le avec votre gestionnaire de paquets :

# macOS
brew install tmux

# Debian / Ubuntu / WSL
sudo apt install tmux

# Fedora / RHEL
sudo dnf install tmux

tmux -V   # confirm the version

La Hiérarchie Sessions, Fenêtres et Panneaux

tmux organise le travail en trois niveaux : une session est un espace de travail nommé et persistant (un par projet) ; les fenêtres sont des onglets au sein de cette session ; les panneaux sont des divisions au sein d’une fenêtre. La touche préfixe — Ctrl+b par défaut, conventionnellement remappée sur Ctrl+a — conditionne chaque commande tmux. Vous appuyez sur le préfixe, le relâchez, puis appuyez sur la touche de commande.

L’analogie la plus claire s’appuie sur un éditeur que vous connaissez déjà : une session ressemble à une fenêtre d’éditeur entière pour un projet, les fenêtres sont les onglets à l’intérieur, et les panneaux sont les vues divisées à l’intérieur d’un onglet. Vous pourriez avoir une session frontend et une session backend ; dans backend, une fenêtre pour l’application et une pour la base de données ; dans la fenêtre applicative, un panneau exécutant le serveur et un autre pour les commandes ad hoc.

NiveauCe que c’estDurée de vie
SessionEspace de travail nommé, généralement un par projetPersiste jusqu’à ce qu’elle soit supprimée ou que la machine redémarre
FenêtreUn onglet au sein d’une sessionVit avec sa session
PanneauUne division au sein d’une fenêtreVit avec sa fenêtre

La touche préfixe conditionnant les commandes, chaque raccourci ci-dessous suppose que vous appuyez d’abord sur le préfixe. Le préfixe par défaut est Ctrl+b ; la configuration de la section suivante le remappera sur Ctrl+a, plus facile à atteindre.

L’Ensemble de Commandes Essentielles

Ces commandes couvrent 90 % de l’utilisation quotidienne de tmux : créer et nommer des sessions, se détacher et se rattacher, diviser et naviguer entre les panneaux, et faire défiler l’historique de sortie. Les commandes de niveau session s’exécutent depuis votre shell ; les commandes de panneau et de fenêtre s’exécutent à l’intérieur de tmux via le préfixe.

Gestion des sessions depuis le shell :

tmux new -s project       # create a named session
tmux ls                   # list running sessions
tmux attach -t project    # reattach to a session
tmux kill-session -t project

À l’intérieur d’une session, avec le préfixe (indiqué ici comme le Ctrl+a remappé) :

  • prefix d — se détacher ; la session continue de tourner en arrière-plan.
  • prefix c — créer une nouvelle fenêtre.
  • prefix n / prefix p — fenêtre suivante / précédente.
  • prefix % — diviser le panneau courant verticalement (gauche/droite).
  • prefix " — diviser horizontalement (haut/bas).
  • prefix + touches fléchées — se déplacer entre les panneaux.
  • prefix z — zoomer le panneau courant en plein écran ; appuyer à nouveau pour restaurer.
  • prefix [ — entrer en mode copie pour faire défiler et rechercher ; en mode vi, / lance une recherche, n/N saute entre les correspondances, q quitte.

La boucle détacher/rattacher est le flux de travail central : détachez-vous avec prefix d, passez sur une autre machine, rattachez-vous avec tmux attach -t project-name, et reprenez exactement là où vous en étiez. Pour une référence complète des raccourcis, gardez un aide-mémoire tmux à portée de main — mémoriser toute la page de manuel est inutile.

Un ~/.tmux.conf Minimal à Coller Une Fois

Une configuration tmux minimale nécessite exactement quatre éléments : une touche préfixe remappée (Ctrl+a est plus ergonomique que Ctrl+b), la prise en charge de la souris (set -g mouse on), le mode copie vi, et des raccourcis de division intuitifs — tout le reste est cosmétique et peut attendre. Voici cette configuration, avec un commentaire sur chaque ligne expliquant sa raison d’être. Collez-la dans ~/.tmux.conf et rechargez avec tmux source-file ~/.tmux.conf.

# --- prefix -------------------------------------------------
unbind C-b                 # drop the default prefix
set -g prefix C-a          # Ctrl+a is closer to home row
bind C-a send-prefix       # press Ctrl+a twice to send a literal Ctrl+a

# --- usability ----------------------------------------------
set -g mouse on            # click panes, drag borders, scroll natively
set -g history-limit 10000 # keep more scrollback than the default 2000
set -g base-index 1        # number windows from 1, not 0
setw -g pane-base-index 1  # number panes from 1 too

# --- copy mode ----------------------------------------------
setw -g mode-keys vi       # vi keys in copy mode
bind v copy-mode           # prefix v to enter copy mode quickly

# --- saner splits -------------------------------------------
bind | split-window -h -c "#{pane_current_path}"  # | splits left/right
bind - split-window -v -c "#{pane_current_path}"  # - splits top/bottom
# both open in the current pane's directory

# --- reload -------------------------------------------------
bind r source-file ~/.tmux.conf \; display "reloaded"

Quelques remarques sur la syntaxe et les versions. set -g mouse on est la forme correcte à option unique pour tmux 2.1 et versions ultérieures ; tmux 2.1 (2015) a regroupé les quatre anciennes options (mode-mouse, mouse-select-pane, mouse-resize-pane, mouse-select-window) en une seule. Si vous trouvez une ancienne configuration utilisant mode-mouse on, c’est pour cette raison qu’elle semble différente. Le flag -c "#{pane_current_path}" fait en sorte que les nouvelles divisions héritent du répertoire courant — un détail dont vous ressentirez immédiatement l’absence s’il manque.

C’est toute la configuration. Résistez à la tentation d’ajouter un thème de barre de statut dès le premier jour. Si vous en voulez un plus tard, le plugin Catppuccin pour tmux (tag actuel v2.3.0) nécessite tmux 3.2+, et son README recommande un clone manuel plutôt que le gestionnaire de plugins en raison d’un conflit de noms.

Flux de Travail Modernes : tmux comme Hôte pour les Agents de Codage IA

tmux est l’hôte naturel pour les agents de codage IA longue durée. Détachez une session Claude Code ou aider avant de fermer votre ordinateur portable, rattachez-vous depuis n’importe quelle machine avec tmux attach -t agent, et le processus de l’agent — ainsi que l’historique complet de ses sorties — vous attend. Claude Code et aider sont tous deux des CLI en terminal, donc il ne s’agit pas d’une intégration spéciale : c’est le comportement standard de tout processus au premier plan s’exécutant dans une session tmux, appliqué à un outil pouvant tourner pendant de nombreuses minutes sans surveillance.

Les sessions de codage agentique sont exactement la charge de travail que tmux a été conçu pour protéger. Un agent refactorisant une grande base de code ou exécutant une longue boucle de tests est un processus que vous ne voulez pas lier à la durée de vie de votre connexion SSH. Démarrez-le dans tmux et il survivra à la déconnexion.

Surveiller un Agent Pendant que Vous Travaillez

La disposition la plus utile est un agent dans un panneau et un éditeur dans un autre, côte à côte. Démarrez une session, divisez-la, et lancez l’agent d’un côté :

tmux new -s agent
# inside the session:
#   prefix |   -> split left/right
#   left pane:  claude   (or: aider)
#   right pane: nvim .

Vous observez le raisonnement et les diffs de l’agent à gauche pendant que vous révisez ou éditez à droite, le tout dans une seule fenêtre, le tout survivant aux déconnexions.

Superviser Plusieurs Agents avec des Panneaux Synchronisés

Lorsque vous exécutez plusieurs agents en parallèle — par exemple, la même tâche sur différentes branches — les panneaux synchronisés vous permettent de les piloter ensemble. Avec setw -g synchronize-panes on, chaque frappe que vous tapez est envoyée simultanément à tous les panneaux de la fenêtre, ce qui est utile pour émettre le même prompt sur plusieurs sessions d’agents ou pour réinitialiser un ensemble de processus parallèles en une seule fois. Désactivez-le de la même façon (synchronize-panes off) lorsque vous souhaitez interagir avec un seul panneau. Un écueil courant que nous avons rencontré avec les panneaux synchronisés est d’oublier que la synchronisation est activée et de diffuser une commande destructrice à tous les panneaux — associez-la à une touche avec un indicateur visuel pour que son état ne soit jamais ambigu.

Une Disposition d’Agent Scriptée

Pour obtenir une disposition de supervision reproductible à trois panneaux — agent à gauche, éditeur en haut à droite, journaux en bas à droite — sans dépendance supplémentaire, déposez ce script dans ~/bin/tmux-agent.sh :

#!/usr/bin/env bash
set -euo pipefail
SESSION="agent"

# First pane: the agent (left). -d creates the session detached.
tmux new-session -d -s "$SESSION" -x "$(tput cols)" -y "$(tput lines)"
tmux send-keys -t "$SESSION" "claude" C-m          # agent, left

# Split off the right side for the editor; the new pane becomes active.
tmux split-window -h -t "$SESSION"
tmux send-keys -t "$SESSION" "nvim ." C-m          # editor, top-right

# Split the right pane for logs; the new pane becomes active.
tmux split-window -v -t "$SESSION"
tmux send-keys -t "$SESSION" "tail -f dev.log" C-m # logs, bottom-right

# Focus the agent pane and attach. Targeting by direction (-L) instead of
# hardcoded pane indices keeps this correct whatever your base-index is.
tmux select-pane -t "$SESSION" -L
tmux attach -t "$SESSION"

Exécutez chmod +x ~/bin/tmux-agent.sh une seule fois, puis tmux-agent.sh à chaque démarrage de session de travail. L’agent continue de tourner si vous vous détachez ; rattachez-vous depuis n’importe où.

Persistance et Plugins

Les sessions tmux survivent aux déconnexions, mais pas à un redémarrage de la machine par elles-mêmes — pour cela, vous avez besoin de plugins qui sérialisent et restaurent l’état. La pile standard est le Tmux Plugin Manager (TPM) associé à tmux-resurrect et tmux-continuum. Installez TPM avec :

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Ajoutez ensuite les lignes de plugins en bas de ~/.tmux.conf et appuyez sur prefix + I pour les installer :

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
run '~/.tmux/plugins/tpm/tpm'   # keep this line last

Comprenez ce que chaque plugin fait réellement. tmux-resurrect sauvegarde et restaure automatiquement la disposition de vos sessions — fenêtres, panneaux et répertoires de travail. La restauration des programmes en cours d’exécution est optionnelle et limitée à une liste blanche configurée (@resurrect-processes), les sessions d’éditeur étant gérées par @resurrect-strategy-vim/nvim et le contenu textuel des panneaux n’étant préservé que lorsque @resurrect-capture-pane-contents 'on' est défini. Ne supposez pas que votre agent redémarre de lui-même à la restauration ; ce ne sera pas le cas, sauf si vous l’avez mis en liste blanche.

tmux-continuum automatise la sauvegarde toutes les 15 minutes par défaut (configurable via @continuum-save-interval) et restaure au démarrage du serveur tmux uniquement lorsque @continuum-restore 'on' est activé. Ensemble, ils font en sorte qu’un redémarrage vous coûte un rechargement de disposition, et non une reconstruction de zéro.

Dispositions Déclaratives avec tmuxp

Pour les dispositions que vous lancez de manière répétée, définissez-les une fois en YAML avec tmuxp (dépôt : tmux-python/tmuxp) ou le Tmuxinator basé sur Ruby. tmuxp lit les configurations depuis le répertoire XDG ~/.config/tmuxp/ (l’ancien chemin ~/.tmuxp/ fonctionne toujours). Voici la disposition de supervision d’agent sous forme de ~/.config/tmuxp/agent.yaml :

session_name: agent
windows:
  - window_name: supervise
    layout: main-vertical
    shell_command_before:
      - cd ~/code/project
    panes:
      - claude
      - nvim .
      - tail -f dev.log

Chargez-la avec tmuxp load agent. Les clés ici — session_name, windows, window_name, layout, shell_command_before, panes — sont toutes actuelles dans tmuxp 1.70.x. C’est l’équivalent déclaratif du script bash ci-dessus : une seule commande, la même disposition reproductible à chaque fois.

Quand NE PAS Utiliser tmux

Si vous travaillez en local et ne vous connectez jamais en SSH à des machines distantes ni n’exécutez de processus longue durée en arrière-plan, un terminal moderne comme Zellij ou Warp vous offre le multiplexage avec de meilleures valeurs par défaut et sans la courbe d’apprentissage liée à la touche préfixe ; l’avantage de tmux réside spécifiquement dans sa persistance côté serveur et sa scriptabilité via SSH. Recourir à tmux quand les onglets natifs de votre terminal feraient l’affaire, c’est ajouter de la complexité sans aucun bénéfice.

BesointmuxZellijWarpOnglets natifs
Persistance des sessions SSHOuiOuiOuiNon
Dispositions scriptablesOui (bash/tmuxp)Oui (layouts)LimitéNon
Courbe d’apprentissageModèle à touche préfixeBasé sur les modes, découvrableNatif GUIAucune
Écosystème de pluginsLarge, matureEn croissanceFonctionnalités intégréesAucun
Intégration IAHéberge tout agent CLIHéberge tout agent CLISuggestions IA nativesDépend
PlateformesmacOS, Linux, WSLmacOS, LinuxmacOS, Linux, WindowsDépend du système

Quelques remarques décisives. Zellij est un multiplexeur basé sur Rust avec un système à modes plutôt qu’une touche préfixe unique, une persistance et une sérialisation des sessions intégrées, et un préréglage optionnel de style tmux ; il est en développement actif et toujours en pré-1.0. Warp est un terminal multiplateforme — macOS, Linux et Windows — avec des suggestions de commandes intégrées à l’IA, et son client a été mis en open source (MIT + AGPL v3) en avril 2026, ce qui en fait une option viable sous Linux, et non un outil exclusivement macOS. Utilisez tmux lorsque vous vous connectez en SSH à des machines distantes, exécutez des processus longue durée (observateurs de build, serveurs de développement, agents IA), ou avez besoin de dispositions reproductibles et scriptées. Utilisez un terminal moderne lorsque vous souhaitez ces fonctionnalités avec moins de cérémonie et que vous n’avez pas besoin de la profondeur de scriptabilité ou de l’étendue de l’écosystème de plugins de tmux.

Conclusion

La raison pour laquelle tmux mérite sa place dans un flux de travail intensif en agents est la même qui lui a valu une place via SSH il y a des années : il découple un processus en cours d’exécution du terminal qui l’observe. Démarrez votre prochain long run d’agent dans tmux new -s agent, détachez-vous quand vous vous éloignez, et rattachez-vous depuis où que vous soyez — le travail continue sans vous. Collez la configuration minimale ci-dessus, ajoutez tmux-resurrect quand les redémarrages commencent à vous coûter vos dispositions, et scriptez la disposition d’agent une fois pour ne jamais avoir à la reconstruire à la main.

FAQ

Que se passe-t-il pour un processus s'exécutant dans tmux quand le serveur tmux est tué ou que la machine redémarre ?

Le processus est terminé. La persistance de tmux protège uniquement contre les déconnexions client, pas contre l'arrêt du serveur ; tuer le serveur avec tmux kill-server ou redémarrer la machine met fin à chaque processus en cours et supprime chaque session. Pour survivre à un redémarrage, vous avez besoin de tmux-resurrect pour sauvegarder la disposition et de tmux-continuum pour la restaurer au démarrage du serveur, mais même dans ce cas, c'est la disposition qui est restaurée, pas les programmes en cours d'exécution, sauf si vous mettez des processus spécifiques en liste blanche via l'option resurrect-processes.

Quelle est la différence entre les fenêtres et les panneaux tmux ?

Une fenêtre est un onglet plein écran au sein d'une session, et un panneau est une région divisée à l'intérieur d'une seule fenêtre. Changer de fenêtre remplace l'écran entier par un onglet différent en utilisant prefix n ou prefix p, tandis que les panneaux divisent une fenêtre visible en régions côte à côte ou empilées entre lesquelles vous naviguez avec prefix et les touches fléchées. Utilisez les fenêtres pour séparer des tâches distinctes comme une application et sa base de données, et les panneaux pour visualiser des processus liés simultanément, comme un éditeur à côté d'un journal en direct.

Dois-je remapper la touche préfixe de Ctrl+b à Ctrl+a ?

Non, le remappage est optionnel et relève purement de l'ergonomie. Le préfixe par défaut Ctrl+b fonctionne pour chaque commande tmux sans aucune configuration. De nombreux utilisateurs le remappent sur Ctrl+a parce que les touches sont plus proches l'une de l'autre sur le clavier, mais cela entre en conflit avec le même raccourci dans GNU screen et avec le raccourci readline qui déplace le curseur au début d'une ligne. Si vous remappez sur Ctrl+a, ajoutez bind C-a send-prefix pour que l'appuyer deux fois envoie toujours un Ctrl+a littéral au shell.

Dois-je utiliser tmux ou Zellij pour exécuter des agents de codage via SSH ?

Les deux fonctionnent car chacun exécute un serveur sur l'hôte distant qui maintient les sessions actives lors des déconnexions, donc le choix se résume aux valeurs par défaut et à l'écosystème. Choisissez tmux quand vous voulez un large écosystème de plugins mature, une scriptabilité approfondie via bash ou tmuxp, et des raccourcis déjà installés sur la plupart des serveurs. Choisissez Zellij quand vous préférez des contrôles à modes découvrables plutôt qu'un modèle à touche préfixe, et que vous souhaitez une sérialisation des sessions sans configurer de plugins. Zellij reste en pré-1.0, donc tmux est le choix le plus conservateur pour les configurations longue durée.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.