Sessions

Une session est un espace de travail en cours d'exécution : sa VM Ubuntu démarrée, ses onglets de terminal actifs et son agent au travail. Ce chapitre couvre tout ce qui se passe entre le clic sur Démarrer et la fermeture de la fenêtre — la disposition de la fenêtre de session, les onglets et les worktrees Git, le navigateur intégré et les volets de fichiers, le déplacement de fichiers et du contenu du presse-papiers entre votre Mac et la VM, les points de contrôle, et les choix qui s'offrent à vous lorsqu'une session se termine.

Contrairement au navigateur web Bromure apparenté, dont les sessions sont détruites à la fermeture de la fenêtre, les espaces de travail de Bromure Agentic Coding sont persistants par conception. Le disque système et le répertoire personnel de la VM survivent d'une session à l'autre ; seules des actions délibérées (Réinitialiser à l'image de base…, Effacer le dossier personnel…, Supprimer l'espace de travail) ou un effacement de sécurité détruisent les données. La fermeture d'une session décide simplement de ce que fait la VM ensuite : continuer à s'exécuter, se suspendre ou s'éteindre.

Fonctionnement des sessions

Chaque espace de travail correspond à exactement une VM. La VM démarre à partir d'un disque système propre à l'espace de travail (disk.img) — un clone APFS en copie sur écriture de l'image de base Ubuntu partagée, créé instantanément au premier lancement et réutilisé à chaque lancement ultérieur. Tout ce que vous installez à l'intérieur de la VM (sudo apt install, chaînes d'outils de langage, configuration système) persiste d'une session à l'autre. Le répertoire personnel /home/ubuntu est stocké séparément — sur une image de disque ext4 clairsemée privée pour les espaces de travail modernes — et survit même à une réinitialisation complète du disque système. Consultez Concepts pour le modèle de stockage en détail.

À l'intérieur de la VM, tous les terminaux appartiennent à une seule session tmux. tmux est la source de vérité : chaque onglet de l'interface est une fenêtre tmux, et l'hôte reflète la liste des onglets de l'invité dans la barre latérale. Cette conception signifie que l'interface peut se détacher et se rattacher librement — une session peut continuer à s'exécuter sans interface en arrière-plan, être détachée dans sa propre fenêtre, ou être reflétée depuis un autre Mac (voir Accès à distance) sans perturber le travail de l'agent.

Remarque : Les VM des espaces de travail ne sont pas préchauffées depuis un pool. Chacune démarre à froid depuis son propre disque (ou est restaurée à partir d'un instantané de suspension). Seule la VM sidecar derrière le volet de navigateur agentique utilise le pool préchauffé.

Démarrer une session

Vous pouvez démarrer un espace de travail arrêté depuis plusieurs endroits :

  1. Sélectionnez l'espace de travail dans la barre latérale et cliquez sur Démarrer (ou Reprendre s'il est suspendu) — soit sur la carte de démarrage de la scène, soit dans le tableau de bord des VM.
  2. Cliquez sur sur la ligne de l'espace de travail dans la barre latérale et choisissez Démarrer.
  3. Cliquez sur une cellule d'emplacement de la Grille de terminaux qui appartient à un espace de travail éteint.

Ce qui démarre

  • Premier lancement — l'application clone l'image de base dans le disk.img de l'espace de travail à l'aide d'un clone APFS en copie sur écriture. Le clone est instantané et ne consomme aucun espace disque au départ ; les blocs sont alloués uniquement au fur et à mesure que l'invité écrit. L'image du dossier personnel et les partages par lancement (partage de métadonnées et boîte d'envoi) sont créés, et la VM démarre avec 4 vCPU (fixe) et la RAM configurée dans les paramètres de l'espace de travail.
  • Lancements ultérieurs — le disque système et le dossier personnel existants sont réutilisés, de sorte que tout ce qui est installé à l'intérieur de la VM est toujours présent.
  • Espace de travail suspendu — au lieu d'un démarrage à froid, l'instantané de RAM enregistré (vm.state) est restauré et la session reprend exactement où elle s'était arrêtée, avec sa barre d'onglets réhydratée à partir de l'instantané d'onglets enregistré. La reprise est quasi instantanée.

Par défaut, la VM rejoint le commutateur NAT partagé de Bromure : chaque VM d'espace de travail (et la VM du navigateur agentique) partage un sous-réseau privé, obtient une adresse DHCP stable et peut atteindre les autres — de sorte que le volet de navigateur peut charger un serveur de développement démarré par l'agent, via l'IP de la VM. Un mode Ponté par espace de travail est disponible dans les paramètres de l'espace de travail. Consultez Paramètres — Général pour les options de mémoire et de réseau.

L'écran de démarrage

Pendant que la VM démarre, une superposition animée de « plongée » couvre la zone du terminal — le nom de l'espace de travail au-dessus d'une barre de progression à balayage, avec une ligne de statut facultative. Elle n'apparaît que si le démarrage prend plus de 0,4 seconde, et disparaît en fondu dès que l'invité signale sa première liste d'onglets. Lors d'une migration du stockage du dossier personnel, la superposition affiche plutôt une progression déterminée (par exemple « MOVING HOME — 42% OF 7.9 GB »).

Si aucun terminal n'apparaît dans les 30 secondes, la superposition bascule vers un panneau DIVE FAILED — « «name» never returned a terminal after 30 seconds. The VM may be stuck, or the base image may be damaged. » — avec deux boutons :

  • Keep Waiting — réarme le chien de garde et laisse le démarrage se poursuivre.
  • Reset Base Image… — lance une reconstruction de l'image de base pour les cas où l'image partagée elle-même est endommagée.

Consultez Dépannage si les démarrages échouent de façon répétée.

Invites au moment du lancement

Un lancement peut être précédé de l'une de ces invites :

InviteQuand elle apparaîtChoix
Dérive de l'image de baseL'image de base partagée a été reconstruite depuis que le disque de cet espace de travail a été clonéRéinitialiser et lancer (recloner depuis la nouvelle base ; dossier personnel intact) / Lancer tel quel / Annuler
Espace de travail compromisUne session précédente a été signalée pour exfiltration d'identifiantsConfirmer un effacement du disque, du dossier personnel, de l'instantané de RAM et des partages par lancement avant le démarrage ; les paramètres, jetons et clés SSH sont conservés. Voir Identifiants.
Mise à niveau du stockage du dossier personnelL'espace de travail utilise encore l'ancien dossier personnel en dossier partagéMettre à niveau maintenant (migrer vers une image de dossier personnel ext4 pendant ce démarrage) / Pas maintenant (redemandé au prochain démarrage)
Modèle encore en téléchargementUn modèle local requis n'a pas fini de se téléchargerLe lancement est refusé avec une explication. Voir Modèles locaux.
Disque pleinLe volume hôte dispose de moins de 1 GB d'espace libreLe lancement est refusé avec une erreur claire plutôt que de se bloquer en cours de session.

La fenêtre de session

Toutes les sessions vivent dans une seule fenêtre partagée intitulée Bromure (1320 × 860 points par défaut). Il s'agit d'une division de style Mail.app : une barre latérale redimensionnable à gauche listant chaque espace de travail, et une unique scène à droite affichant le terminal de l'espace de travail sélectionné. La barre de titre est transparente et unifiée avec la barre d'outils ; cliquer sur une zone vide de celle-ci fait glisser la fenêtre, à la manière d'un navigateur.

La fenêtre de session unifiée affichant le tableau de bord des VM pour un espace de travail éteint

La capture d'écran ci-dessus montre la fenêtre avec un espace de travail éteint sélectionné : la barre latérale WORKSPACES à gauche (avec le nœud Grille épinglé, deux espaces de travail affichant leur état Éteint, une section AUTOMATISATIONS, et le bouton noir + pour créer un espace de travail), et la scène affichant le tableau de bord des VM de cet espace de travail — des cartes statistiques pour le CPU, la mémoire, les vCPU, le disque et la durée de fonctionnement, un résumé CONFIGURATION et un bouton Démarrer.

La barre latérale des espaces de travail

La barre latérale est une liste source avec une ligne par espace de travail — en cours d'exécution ou non. Chaque ligne affiche le nom de l'espace de travail, sa tuile de couleur d'accentuation et un badge d'état d'exécution :

BadgeLibellé d'étatSignification
Point vertEn cours d'exécution
Orange, pulsantDémarrage…Démarrage en cours
Point jauneSuspenduInstantané de RAM enregistré sur disque
Point grisÉteintÉteint

Un triangle d'exclamation rouge signale un espace de travail compromis. Les espaces de travail en cours d'exécution affichent leurs onglets de terminal imbriqués en dessous (dans l'ordre de l'arborescence des worktrees) plus un nœud Docker toujours présent, et révèlent des contrôles au survol : détacher, fermer (×) et + pour un nouvel onglet. Le menu de chaque ligne propose des actions de cycle de vie adaptées à l'état : Démarrer / Reprendre / Éteindre / Suspendre / Redémarrer, Ajouter les worktrees à la Grille (en cours d'exécution uniquement), Modifier…, Dupliquer, Réinitialiser le disque et Supprimer l'espace de travail.

Remarque : Éteindre et Redémarrer demandent une confirmation car ils arrêtent les processus en cours. Suspendre ne le fait pas — c'est entièrement récupérable.

Faites glisser le séparateur entre la barre latérale et la scène pour la redimensionner (largeur par défaut de 220 points). Faire glisser en dessous d'environ 100 points fait passer la barre latérale à un rail d'icônes de 44 points ; faites-la glisser au-delà pour la développer. ⌃⌘S bascule l'état réduit de la barre latérale. Dans le rail réduit, les onglets de conteneur sont masqués et les info-bulles portent le contexte de l'espace de travail et de l'onglet.

La scène

La scène affiche le terminal de l'onglet sélectionné. Elle peut aussi être recouverte par des surfaces de superposition pleine largeur :

  • Le tableau de bord des VM — cliquez sur le nom d'un espace de travail dans la barre latérale (voir ci-dessous).
  • La Grille de terminaux — cliquez sur le nœud Grille épinglé (voir La Grille de terminaux).
  • Le tableau de bord Docker — cliquez sur le nœud Docker sous un espace de travail en cours d'exécution pour gérer les conteneurs et les images.
  • L'éditeur d'automatisation — depuis la section AUTOMATISATIONS (voir Automatisation et la CLI).

Deux divisions supplémentaires vivent à l'intérieur de la scène sur son bord droit : le volet de navigateur agentique (⌃⌘B) et le volet de l'explorateur de fichiers (⌃⌘E).

Le tableau de bord des VM

Cliquer sur le nom d'un espace de travail (plutôt que sur l'un de ses onglets) superpose son tableau de bord sur la scène, quel que soit l'état d'exécution. Pour une VM en cours d'exécution, il affiche des constantes en direct : le CPU avec une courbe de tendance, la mémoire utilisée sur la mémoire allouée, les vCPU avec la charge moyenne, l'utilisation du disque (issue du propre df de l'invité, plus fidèle que la taille du clone côté hôte), la durée de fonctionnement, et une carte Ports en écoute listant les sockets de l'invité accessibles de l'extérieur sous forme de points de terminaison <VM-IP>:<port> avec copie en un clic. Les services probablement HTTP obtiennent aussi un bouton globe permettant d'exposer ce service précis à Internet via un tunnel rapide Cloudflare (une boîte de dialogue de consentement unique explique le téléchargement et les conditions). Pour un espace de travail suspendu ou éteint, le tableau de bord affiche plutôt les spécifications et la configuration de la machine.

La barre d'actions propose Nouveau terminal, Suspendre, Redémarrer et Éteindre en cours d'exécution, ou Démarrer / Reprendre sinon. Une carte CONFIGURATION résume le mode d'authentification par outil, les garde-fous, l'analyse d'injection de prompt et les dossiers partagés.

Remarque : Les constantes se rafraîchissent environ toutes les 1,5 seconde depuis l'invité. Des valeurs nulles juste après le démarrage signifient que l'agent invité n'a pas encore signalé.

Contrôles de la barre de titre

Un groupe de contrôles propre à la VM sélectionnée se trouve à l'extrémité arrière de la barre d'outils lorsque l'espace de travail sélectionné est en cours d'exécution :

ContrôleCe qu'il fait
Pastille IPL'adresse IP de la VM en police à chasse fixe. Cliquez pour copier — elle affiche brièvement Copié. Info-bulle : IP de la VM — cliquer pour copier.
Point de diffusionUn point rouge pulsant affiché lorsque les métadonnées de session sont envoyées à bromure.io (Mac inscrits, espaces de travail non privés). Voir Entreprise.
Badge du moteurÉtat de l'inférence locale : un indicateur d'activité pendant que le moteur chauffe, une icône de processeur verte lorsqu'il est prêt, orange en cas d'échec. Voir Modèles locaux.
Éclair FusionBascule Fusion pour cet espace de travail. Jaune lorsqu'il est activé (Fusion activée — cliquer pour désactiver). Désactivé avec l'info-bulle Activez au moins deux modèles pour utiliser Fusion jusqu'à ce qu'au moins deux fournisseurs disposent d'identifiants utilisables.
Parcourir les fichiersOuvre la fenêtre de navigateur de fichiers propre à l'espace de travail (voir Déplacer des fichiers et le presse-papiers).
Redémarrer la VMRedémarre l'invité.
Inspecter la trace (⇧⌘I)Ouvre l'Inspecteur de traces.
Modifier l'espace de travailOuvre l'éditeur d'espace de travail.
Détacher dans sa propre fenêtreDéplace l'espace de travail dans sa propre fenêtre (voir ci-dessous).
Afficher ou masquer le navigateur agentique (⌃⌘B)Bascule le volet de navigateur (icône globe).
Afficher ou masquer les fichiers du dépôt (⌃⌘E)Bascule le volet de l'explorateur de fichiers.

Détacher et rattacher

Tout espace de travail en cours d'exécution peut être détaché de la fenêtre unifiée vers sa propre fenêtre à VM unique : cliquez sur l'icône de détachement sur sa ligne dans la barre latérale ou dans la barre d'outils. Ses onglets deviennent une bande de pastilles capsule dans la barre de titre de cette fenêtre, et le volet conserve son état de VM et d'onglets — seule la fenêtre hôte change. La fenêtre détachée porte les mêmes contrôles de barre d'outils, plus un bouton de rattachement (Ramener cette VM dans la fenêtre principale) et une infobulle de dossiers partagés listant les dossiers hôtes montés (cliquez sur une ligne pour l'ouvrir dans le Finder). Cliquez sur le bouton de rattachement pour replier l'espace de travail dans la fenêtre unifiée.

Travailler avec les onglets

Chaque onglet est une fenêtre tmux à l'intérieur de la session tmux unique de la VM de l'espace de travail. tmux fait autorité : l'invité publie sa liste de fenêtres environ toutes les 0,7 seconde, et l'hôte la reflète dans les lignes de la barre latérale (et la bande de pastilles d'une fenêtre détachée). Les modifications d'onglets telles que les renommages sont prises en compte en environ 40 millisecondes.

  • Nouvel onglet — appuyez sur ⌘T, ou cliquez sur + sur la ligne de l'espace de travail dans la barre latérale.
  • Fermer l'onglet — appuyez sur ⌘W, ou survolez une ligne d'onglet et cliquez sur son ×. Fermer le dernier onglet met fin à la session et emprunte le même pipeline d'action de fermeture que la fermeture de la fenêtre.
  • Changer d'onglet — appuyez sur ⌘1 à ⌘9. De petites étiquettes d'accord apparaissent à côté des neuf premières lignes de l'espace de travail sélectionné ; la numérotation suit l'ordre d'arborescence visible de la barre latérale (onglets de conteneur exclus).

Les libellés d'onglets affichent le programme au premier plan (claude, codex, un shell, etc.) ; les onglets de worktree affichent un nom d'affichage plus convivial comme « Website refactoring (claude) ». Les onglets ouverts en attachant un shell à un conteneur Docker s'imbriquent sous ce conteneur dans le nœud Docker plutôt qu'au niveau supérieur.

Remarque : Les index de fenêtres tmux peuvent présenter des trous après la fermeture d'onglets ; l'interface gère le mappage, et les accords ⌘-chiffre suivent toujours ce que vous voyez dans la barre latérale.

Points d'état de l'agent

L'icône de chaque onglet porte un point d'état coloré qui suit l'agent qui s'y exécute :

PointSignification
Orange, pulsantL'agent travaille
VertL'agent a terminé
RougeL'agent a besoin de votre intervention

L'état est piloté par des hooks par fenêtre pour Claude Code et par le proxy de trafic pour les autres agents, de sorte que les points fonctionnent sans aucune configuration à l'intérieur de la VM.

Worktrees Git

Un worktree git est une seconde copie de travail d'un même dépôt : une autre branche extraite dans son propre répertoire, partageant l'historique du dépôt mais avec ses propres fichiers et son propre index. Git en prend en charge plusieurs à la fois, de sorte que plusieurs branches peuvent être travaillées en parallèle sans remiser les modifications, recloner ou changer de branche sur place.

Bromure bâtit par-dessus des lignes de travail d'agents parallèles. Tout onglet de terminal dont le répertoire de travail est à l'intérieur d'un dépôt git peut engendrer un worktree avec son propre onglet d'agent imbriqué — un agent refactorisant le site sur wt/website-refactoring pendant qu'un autre traque un bug sur wt/login-fix, chacun dans son propre checkout, aucun ne butant sur les fichiers non validés de l'autre. Lorsqu'une ligne de travail est prête, vous fusionnez sa branche (ou ouvrez une pull request à partir d'elle) et écartez le worktree. C'est la façon naturelle de déployer une tâche sur plusieurs agents à la fois et de les observer dans la Grille de terminaux.

Créer un worktree

Faites un clic droit sur n'importe quelle ligne d'onglet dans la barre latérale pour ouvrir son menu contextuel. Deux éléments sont toujours présents :

  • Nouveau worktree… — ouvre la boîte de dialogue décrite ci-dessous. Lorsque le répertoire de travail de l'onglet n'est pas un dépôt git, l'élément est affiché mais désactivé, libellé Nouveau worktree… (Pas dans un dépôt git), de sorte que le menu n'est jamais silencieusement vide. Un onglet de worktree est lui-même un checkout, il propose donc lui aussi Nouveau worktree… — c'est ainsi que vous branchez un worktree à partir d'un worktree.
  • Nouvelle automatisation… — préremplit l'éditeur d'automatisation avec le répertoire de l'onglet (voir Automatisations).

La boîte de dialogue Nouveau worktree — « Creates a git worktree branched from this tab's current commit and opens a nested agent in it. » — recueille trois choses :

ChampObjectif
Nom de la tâcheUn court libellé humain, par exemple Website refactoring. Il est transformé en slug dans le nom de branche et affiché sur l'onglet.
Menu déroulant d'outilL'agent à lancer dans le nouveau checkout — claude, codex ou grok. Par défaut, l'agent configuré de l'espace de travail.
Prompt initial (facultatif)Le premier message remis à l'agent lors de son démarrage, afin qu'un worktree puisse commencer à travailler sans surveillance. Laissez-le vide pour ouvrir l'agent au repos.

Cliquez sur Créer (ou Annuler). Bromure ajoute un worktree git branché à partir du commit courant de l'onglet sur une branche nommée wt/<slug> — le slug est le nom de la tâche en minuscules, avec les suites d'autres caractères réduites à des tirets uniques et plafonnées à 40 caractères ; un nom dont la branche existe déjà reçoit un suffixe -2, -3, … Un onglet d'agent imbriqué s'ouvre alors dans le nouveau checkout, libellé avec le nom de la tâche et l'outil, comme « Website refactoring (claude) ».

Remarque : Si le répertoire de travail de l'onglet ne peut pas être déterminé, une alerte — « This tab's working directory isn't available yet » — explique que l'espace de travail exécute probablement un agent in-VM plus ancien, et suggère de le redémarrer (Éteindre, puis Démarrer) afin qu'il prenne en charge les worktrees.

Comment les onglets de worktree s'imbriquent

Les onglets de worktree s'imbriquent sous l'onglet à partir duquel ils ont été branchés, en retrait et préfixés d'un petit glyphe de branche pour que les sous-agents imbriqués se lisent comme des branches plutôt que comme de simples onglets. Comme un worktree peut lui-même être branché, l'imbrication est une arborescence : les worktrees issus de worktrees sont pris en charge, et le retrait s'accentue vers l'intérieur à chaque niveau, jusqu'à 6 niveaux de profondeur. Un onglet Attacher un terminal et un onglet Merge → … en cours d'exécution s'imbriquent sous leur worktree de la même façon. Il s'agit uniquement d'un ordre d'affichage — chaque onglet reste une fenêtre tmux ordinaire, et les accords ⌘-chiffre suivent l'ordre d'arborescence visible.

Pour observer plusieurs agents de worktree côte à côte, utilisez Ajouter les worktrees à la Grille dans le menu de l'espace de travail, qui ajoute d'un coup chaque onglet de worktree de cet espace de travail à la Grille de terminaux.

Actions de worktree

Faites un clic droit sur un onglet de worktree pour les actions qui lui sont propres — Fusionner…, Attacher un terminal, et (sous un séparateur) Écarter le worktree.

Fusionner… — refusionner la branche. La boîte de dialogue exécute la fusion dans un nouvel onglet extrait à la destination ; seul le travail validé sur la branche du worktree est fusionné. Son sélecteur de destination parcourt la chaîne d'ancêtres — le worktree parent immédiat, puis le parent de ce worktree, et ainsi de suite jusqu'à la racine du dépôt (« «branch» (repo root) »). Le parent immédiat est la valeur par défaut sûre et est sélectionné pour vous ; choisir quoi que ce soit de plus haut est signalé «label» ⚠︎ saute les intermédiaires, car ces worktrees intermédiaires ne reçoivent alors jamais la modification. Choisissez une destination et cliquez sur Fusionner.

  • Les conflits se résolvent d'eux-mêmes. Si la fusion entre en conflit, l'agent de codage est démarré directement dans l'onglet de fusion pour le résoudre automatiquement. S'il s'arrête avec le conflit non résolu, l'onglet de fusion propose Faire résoudre les conflits par l'agent dans son propre menu contextuel pour réessayer.
  • Créer une pull request. Lorsque l'espace de travail dispose d'un identifiant GitHub (c'est ce qui authentifie gh à l'intérieur de la VM), la boîte de dialogue de fusion gagne un troisième bouton, Créer une pull request. Au lieu de fusionner localement, il pousse la branche et fait ouvrir par l'agent une pull request GitHub propre contre la destination sélectionnée. Voir Identifiants.
  • La fusion n'écarte pas le worktree — vous le nettoyez vous-même une fois satisfait du résultat.

Attacher un terminal ouvre un simple onglet de terminal — pas d'agent, juste un shell déjà positionné (cd) dans le checkout du worktree — imbriqué sous le worktree, pour que vous puissiez inspecter ou tester ses modifications à la main.

Écarter le worktree est l'étape de nettoyage, et elle est destructrice : elle supprime le checkout et efface la branche. Tous les commits sur cette branche qui n'ont jamais été fusionnés sont perdus, elle demande donc d'abord — « Discard worktree “«name»”? » — et ferme l'onglet en même temps que le checkout.

Remarque : Seul le travail validé traverse une fusion ou une pull request. Les modifications non validées d'un worktree restent dans ce worktree, et disparaissent définitivement une fois que vous l'écartez.

Worktrees issus d'automatisations planifiées

Les automatisations planifiées créent aussi des worktrees. Chaque exécution sans surveillance crée un nouveau worktree git sur sa propre branche wt/<slug> et y lance l'agent, de sorte qu'une exécution se matérialise comme un onglet de worktree ordinaire — en retrait, attachable et fusionnable exactement comme un worktree créé à la main. Voir Automatisations.

Le terminal

L'onglet actif s'affiche dans une surface de terminal native côté hôte (libghostty, rendu Metal) attachée à sa fenêtre tmux via un socket virtio. Le processus enfant de la surface n'est qu'une pompe à octets, de sorte qu'un enfant mort — un redémarrage de VM, un socket abandonné — ne perd jamais l'état du terminal : la surface se relance simplement et se rattache avec temporisation croissante. Si le terminal natif ne peut pas démarrer, l'application bascule silencieusement vers le framebuffer graphique de la VM ; les deux sont des vues de la même session tmux.

L'apparence — famille et taille de police, couleurs d'arrière-plan et de premier plan, forme et clignotement du curseur — provient des paramètres d'apparence de l'espace de travail et s'applique en direct lorsque vous enregistrez le profil. Les nouveaux espaces de travail sont initialisés avec JetBrains Mono 12 sur un arrière-plan ardoise sombre (#212734), le premier plan étant repris de votre thème Terminal.app. Seules les polices à chasse fixe s'affichent ; les familles impossibles à résoudre ou proportionnelles se replient sur Menlo.

Le zoom de police est disponible par surface : ⌘+ / ⌘− / ⌘0, un pincement sur le trackpad (chaque pas de ±0,25 de grossissement change d'une taille de police), et un double-tap à deux doigts pour réinitialiser.

Les espaces de travail dont l'opacité de fenêtre est inférieure à 1.0 obtiennent un terminal en verre dépoli : la zone du terminal se compose avec le bureau via un flou d'arrière-plan, tandis que la barre de titre, la barre latérale et le séparateur restent opaques. L'opacité est bornée à 0,3–1,0 et s'applique en direct à l'enregistrement du profil.

La Grille de terminaux

La Grille est une surface de scène qui affiche jusqu'à 25 terminaux en direct (la disposition tend vers le carré, plafonnée à 5 × 5) issus de n'importe quel mélange d'espaces de travail, côte à côte — idéal pour observer un parc d'agents de worktree. Chaque cellule est sa propre surface de terminal en direct sur cette fenêtre tmux, indépendante de la vue de scène de l'espace de travail, de sorte que les deux peuvent être ouvertes en même temps.

  • Ajouter un terminal — faites glisser n'importe quelle ligne d'onglet sur le nœud Grille épinglé en haut de la barre latérale (son info-bulle indique « Drag terminals here to watch them side by side »), ou appuyez sur ⌘D sur le terminal actif pour l'épingler et sauter à la Grille. Ajouter les worktrees à la Grille dans le menu d'un espace de travail ajoute d'un coup chaque onglet de worktree.
  • Afficher la Grille — cliquez sur le nœud Grille (ou le bouton de grille sur le rail réduit). Cliquer sur une ligne membre met le focus sur sa cellule.
  • Contrôles de cellule — l'en-tête de chaque cellule affiche un point d'état, le nom de l'espace de travail et le libellé de l'onglet, avec les contrôles au survol Ouvrir dans l'espace de travail et Retirer de la grille — le terminal continue de s'exécuter, plus une poignée de glissement pour permuter les positions des cellules. Faites un clic droit sur un en-tête de cellule pour les mêmes actions.
  • Zoom — double-cliquez sur une cellule (ou appuyez sur ⌘↩ sur la cellule ayant le focus) pour la zoomer sur toute la scène ; répétez pour dézoomer. Échap ne dézoome délibérément pas, car les agents utilisent Échap.

Les cellules appartenant à un espace de travail éteint ou suspendu restent sous forme de cartes d'emplacement avec un libellé Éteint ou Suspendu et un bouton Démarrer ; les cellules dont la fenêtre tmux a disparu sont élaguées. L'appartenance à la Grille persiste d'un redémarrage de l'application à l'autre (dans ~/Library/Application Support/BromureAC/grid-layout.json).

Le volet de navigateur agentique

Le volet de navigateur est une division de droite à l'intérieur de la scène hébergeant un Chromium en direct — s'exécutant dans sa propre VM sidecar jetable, une par espace de travail, créée à la demande à la première ouverture. Vous et l'agent le pilotez tous deux : les agents le contrôlent via le serveur MCP de navigateur intégré, et leurs appels d'outil peuvent démarrer et révéler automatiquement le navigateur pour l'espace de travail sélectionné. Le volet ne se rouvre jamais de lui-même après que vous l'avez fermé manuellement.

Astuce : Cette section couvre le navigateur en tant qu'un volet de la fenêtre de session. Pour le guide complet de son utilisation — le piloter vous-même, laisser l'agent le piloter via les outils browser_*, rester connecté et le modèle de confidentialité — consultez Le navigateur intégré.

Basculez le volet avec ⌃⌘B ou le bouton globe de la barre d'outils. La première fois que vous l'ouvrez, une carte de consentement demande Installer le navigateur ? avec Télécharger et installer / Pas maintenant — l'image du navigateur est un téléchargement unique d'environ 500 MB.

Ce que vous pouvez y faire

Le volet est une vue de navigateur sans chrome coiffée d'une barre d'onglets compacte de style Safari :

  • Précédent / suivant — boutons fléchés, ou ⌘[ et ⌘].
  • Pastilles d'onglets — une pastille par onglet ; la pastille active fait aussi office de champ URL (« Search or enter URL »). Les noms d'hôtes nus se voient préfixer https:// ; tout ce qui n'est pas une URL devient une recherche Google.
  • + — nouvel onglet (⌘T lorsque le volet a le focus).
  • DevTools — bascule les DevTools de Chromium (F12).
  • Partager — le menu de partage standard de macOS.
  • Informations du site — cliquez sur le favicon pour une infobulle d'informations sur le site, y compris les détails du certificat sur les pages HTTPS.

Parce que la VM du navigateur partage le même sous-réseau NAT que les VM des espaces de travail, elle peut charger directement les serveurs de développement de l'agent via l'IP de l'espace de travail — copiez-la depuis la pastille IP de la barre d'outils.

Faites glisser le bord gauche du volet pour le redimensionner (640 points par défaut, entre 380 et 1400 ; le terminal conserve toujours au moins 240 points). Faire glisser en dessous du minimum ferme le volet.

Cycle de vie et persistance

Le navigateur est jetable par défaut : son disque est un clone éphémère qui est supprimé lorsque le navigateur est démonté, de sorte que les cookies et les connexions disparaissent avec lui. Un navigateur masqué se suspend après 10 secondes et est entièrement démonté après 5 minutes replié. L'état ouvert/fermé du volet est mémorisé par espace de travail tant que l'application s'exécute, mais délibérément pas d'un redémarrage de l'application à l'autre — le navigateur éphémère ne survit de toute façon pas à un redémarrage.

Pour conserver les connexions, activez Rester connecté aux sites web dans les paramètres de navigateur de l'espace de travail : le profil de Chromium vit alors sur un disque chiffré propre à l'espace de travail et survit aux démontages. Basculer ce paramètre redémarre le navigateur de l'espace de travail (vous en êtes averti lors de l'enregistrement).

Remarque : Tant que la vue du navigateur a le focus clavier, ⌘Q et ⌘Tab sont capturés par l'invité. Cliquez sur le terminal ou sur la barre latérale pour les récupérer.

Le volet de l'explorateur de fichiers

Le volet de l'explorateur de fichiers (en-tête FICHIERS) affiche le dépôt git de l'onglet actif sous forme d'arborescence de fichiers source de style IDE. Il s'ouvre de lui-même dès que le répertoire de l'onglet actif entre dans un dépôt git — un cd dans un dépôt, ou le passage à un onglet déjà à l'intérieur d'un dépôt — de sorte que vous l'ouvrez rarement à la main ; vous pouvez aussi le basculer avec ⌃⌘E ou le bouton de barre d'outils Afficher ou masquer les fichiers du dépôt (⌃⌘E). C'est l'entrée dans un dépôt qui déclenche l'ouverture, donc un espace de travail qui ne visite jamais de dépôt n'affiche tout simplement jamais le volet.

  • État git en un coup d'œil — les fichiers sont colorés selon leur état avec des badges à une lettre (M/A/U/D/R/!), les dossiers contenant des modifications portent un point orange, et une pastille affiche le nombre de fichiers modifiés. Un filtre « fichiers modifiés uniquement » et un bouton de rafraîchissement manuel se trouvent dans l'en-tête.
  • Diffs et aperçus — sélectionner un fichier ouvre une division de détail avec un contrôle segmenté Diff / Fichier : un diff unifié coloré avec des décomptes +/− et des gouttières de numéros de ligne, ou un aperçu rendu (Markdown rendu, fichiers source avec coloration syntaxique, images et binaires signalés). Les fichiers supprimés sont barrés — « File was deleted — switch to Diff to see what was removed. » Les fichiers non suivis et nouvellement ajoutés n'ont pas de diff, seulement un aperçu.
  • Visionneuse détachée — un bouton de détachement ouvre le détail dans une fenêtre Visionneuse de fichiers distincte, capable de plein écran, qui suit en direct la sélection du volet.
  • Actions de worktree — une barre directement sous l'en-tête gère les worktrees git du dépôt courant sans ouvrir le menu de la barre latérale : Nouveau worktree… est toujours disponible dans un dépôt, et Fusionner et Supprimer apparaissent lorsque l'onglet actif est lui-même un worktree. Elles exécutent les mêmes opérations décrites sous Worktrees Git — Nouveau worktree… ouvre la boîte de dialogue de création, Fusionner ouvre le sélecteur de destination, et Supprimer écarte le worktree et sa branche après confirmation. (Sessions locales uniquement ; dans un miroir distant, gérez les worktrees depuis le menu d'onglet de la barre latérale.)

Toutes les données sont recueillies en exécutant git (et head) à l'intérieur de l'invité via le canal shell du socket virtio — le volet fonctionne même sans dossier partagé, et pour les espaces de travail distants. L'arborescence se rafraîchit automatiquement toutes les 4 secondes tant qu'elle est visible, et les répertoires contenant des modifications se développent automatiquement une fois par dépôt.

Le volet s'ouvre et se ferme de lui-même à la manière d'un IDE : entrer dans un dépôt (un cd dans un dépôt, ou passer à un onglet dont le répertoire est dans un dépôt) l'ouvre ; sortir vers un répertoire hors dépôt le ferme. Une fermeture manuelle l'emporte jusqu'à ce que vous changiez de dépôt. Faites glisser le bord gauche du volet pour le redimensionner (260 points par défaut, entre 200 et 1000 ; en dessous de 200, il se ferme).

Remarque : L'arborescence de fichiers est en lecture seule — elle ne modifie jamais le contenu des fichiers (la barre de worktree exécute des opérations git, pas des modifications de fichiers). Limites : 20 000 fichiers listés (l'arborescence est tronquée au-delà), 512 KB par aperçu, 1 MB par diff.

Déplacer des fichiers et le presse-papiers

Les fichiers et le contenu du presse-papiers franchissent la frontière hôte/VM de quatre façons : la fenêtre de navigateur de fichiers, les dossiers partagés, le presse-papiers du terminal et le collage d'images.

La fenêtre de navigateur de fichiers

Cliquez sur le bouton de barre d'outils Parcourir les fichiers (icône de dossier) pour ouvrir une fenêtre à la Finder intitulée Fichiers — «workspace» pour faire transiter des fichiers vers et depuis la VM. Sa barre latérale Emplacements propose Dossier personnel — le vrai /home/ubuntu de l'invité, parcouru en direct via le service de fichiers du socket virtio — plus une entrée par dossier hôte partagé (parcouru directement sur l'hôte). Les lignes affichent icône, nom, taille et date de modification, et la liste se rafraîchit automatiquement toutes les 1,5 seconde.

  • Copier vers l'extérieur — faites glisser un fichier de la fenêtre vers le Finder. Les fichiers de l'invité se téléchargent à la demande au dépôt.
  • Copier vers l'intérieur — déposez des fichiers n'importe où sur le panneau pour les copier dans le répertoire courant. Les transferts sont fragmentés (6 MB) avec une pastille de progression « Copying … in/out » ; les collisions de noms reçoivent des suffixes « copy » à la Finder ; les dossiers déposés arrivent entiers.
  • Barre d'outils — flèche vers le haut (Dossier englobant), un fil d'Ariane de chemin invité à chasse fixe, Nouveau dossier, Afficher dans le Finder (emplacements hôtes uniquement) et Rafraîchir.
  • Menu contextuelOuvrir, Afficher dans le Finder (lignes hôtes) et Placer dans la corbeille (hôte) ou Supprimer (invité).
  • Double-clic — les fichiers hôtes s'ouvrent avec leur application par défaut ; les fichiers de l'invité se téléchargent d'abord dans un cache propre à l'espace de travail, puis s'ouvrent.

Remarque : Les fichiers cachés (dotfiles) ne sont pas affichés. Les emplacements de l'invité nécessitent une VM active (« The workspace must be running to browse its files. »), et une VM tout juste démarrée peut brièvement signaler « The in-VM agent is updating — try again in a few seconds. »

Dossiers partagés

Pour le travail continu sur un projet, les dossiers partagés valent généralement mieux que des transferts ponctuels : jusqu'à 8 dossiers hôtes peuvent être montés dans la VM, chacun lié par lien symbolique dans le dossier personnel de l'invité sous ~/<basename> (avec déduplication automatique telle que src-2). Configurez-les dans les paramètres de dossiers de l'espace de travail.

Presse-papiers

Le presse-papiers est ponté à travers le protocole du terminal lui-même — il n'y a aucun agent séparé à configurer :

  • Invité → Mac — copier à l'intérieur de l'invité (mode copie de tmux, OSC 52) atterrit automatiquement sur le presse-papiers de macOS ; relâcher une sélection à la souris dans tmux la copie.
  • Mac → invité — ⌘V colle le presse-papiers de macOS dans le terminal via le collage entre crochets.
  • Sélection — un simple glissement de souris sélectionne le texte à la manière de macOS ; ⌘C copie la sélection côté hôte. La sélection ne copie jamais d'elle-même.

Coller des images

Appuyer sur ⌘V avec une image dans le presse-papiers devient un transfert de fichier : l'image est écrite dans l'invité à /home/ubuntu/.bromure/pastes/clipboard-<timestamp>-<id>.<ext>, et le chemin du fichier de l'invité est collé en texte à sa place — de sorte que l'agent peut lire l'image depuis le disque. Une puce vignette transitoire apparaît au niveau du curseur avec une ligne de progression pendant le téléversement, s'attarde brièvement à l'achèvement (rouge en cas d'échec), et est écartée par votre frappe suivante.

Reconnus comme images : les fichiers image copiés depuis le Finder (uniquement lorsque chaque élément copié est une image) et les bitmaps nus tels que les captures d'écran ou un « Copy Image » de navigateur — tout ce qui porte aussi une saveur texte se colle en texte comme d'habitude, de sorte qu'un ⌘V ordinaire n'est jamais détourné. Les collages sont plafonnés à 96 MB au total (au-delà, repli sur le texte), et les fichiers de collage de plus de 7 jours sont nettoyés automatiquement à l'intérieur de l'invité. Le répertoire de collage vit dans l'image du dossier personnel, de sorte que les chemins collés survivent à un redémarrage de VM.

Astuce : Les liens fonctionnent automatiquement dans l'autre sens : les URL que l'agent ou un outil CLI ouvre à l'intérieur de l'invité (connexions OAuth, xdg-open) sont relayées vers l'hôte et s'ouvrent dans votre navigateur Mac par défaut. Seules les URL http/https sont relayées, à débit limité ; les liens mailto: sont délibérément abandonnés.

Points de contrôle et retour arrière

Bromure prend automatiquement des points de retour arrière afin qu'une session qui tourne mal puisse être ramenée en arrière sans réinitialisation complète.

Ce qui est capturé, et quand

À chaque démarrage réussi d'un espace de travail, l'application prend silencieusement un instantané des deux couches de stockage sous forme de clones en copie sur écriture dans le répertoire checkpoints/ de l'espace de travail :

  • le disque système (disk.img), et
  • l'image du dossier personnel ext4 (home.img, stockée sous checkpoints/home/), pour les espaces de travail sur le modèle de dossier personnel moderne.

Parce qu'un point de contrôle n'est pris qu'après un démarrage ayant produit un terminal fonctionnel, chaque point de contrôle est prouvé amorçable. La rétention suit une échelle à paliers : les derniers démarrages sont conservés sans condition, puis un par jour pendant une semaine, puis un par semaine pendant un mois. Les points de contrôle sont gratuits à créer mais consomment de l'espace disque réel à mesure que le disque en direct diverge d'eux.

Restaurer le dossier personnel

Restaurer le dossier personnel… se trouve dans le volet Ressources de l'éditeur d'espace de travail, sur la ligne de stockage Votre dossier personnel (il est désactivé tant que l'espace de travail est en cours d'exécution — fermez d'abord la fenêtre de session).

La section Stockage du volet Ressources avec les actions Restaurer le dossier personnel et Réinitialiser à l'image de base

Cliquer dessus liste les points de retour arrière disponibles dans une fenêtre contextuelle — comme l'explique la boîte de dialogue, « each one is the home as it was when that session started ». Choisissez-en un et confirmez : le dossier personnel courant est d'abord mis en point de contrôle, de sorte qu'une restauration peut elle-même être annulée. Un espace de travail qui n'a jamais démarré sur le modèle de dossier personnel ext4 affiche plutôt Aucun point de contrôle de dossier personnel pour l'instant.

Réinitialiser le disque système

Réinitialiser à l'image de base…, sur la ligne Disque système de l'espace de travail du même volet (aussi Réinitialiser le disque dans le menu de la barre latérale), est l'option nucléaire pour la couche système : elle supprime disk.img de sorte que le prochain lancement reclone une copie fraîche de l'image de base. La confirmation — « Reset “«name»” system disk to base? » — précise ce qui est effacé : tout ce que vous avez sudo apt installé, les modifications de /etc, /var, /usr, /opt et la configuration à l'échelle du système. Votre dossier personnel n'est pas touché : les projets, dotfiles, clés SSH et l'historique du shell survivent tous.

La réinitialisation est bloquée tant que la VM s'exécute, et une réinitialisation abandonne aussi tout instantané de RAM et état d'onglets enregistrés — un disque frais avec une ancienne RAM se corromprait instantanément.

Remarque : Les points de contrôle répondent à une question différente de la suspension. La suspension préserve l'état d'exécution de la session courante pour que vous puissiez la reprendre ; les points de contrôle préservent le contenu du disque à des instants connus comme bons pour que vous puissiez ramener en arrière un environnement cassé. Un instantané de suspension est abandonné chaque fois que le disque auquel il appartient est réinitialisé ou reverté.

Astuce : Pour un accès forensique à un point de contrôle ou à l'image du dossier personnel d'un espace de travail arrêté sans rien démarrer, Espaces de travail ▸ Ouvrir un fichier ext4… ouvre n'importe quel .img ext4 dans un navigateur en lecture seule à la Finder — vous pouvez prévisualiser et extraire des fichiers directement sur le Mac. Consultez Avancé pour le navigateur complet, l'édition en place et l'intégration fsck.

Fermer une session

Fermer une session — via le × sur la ligne de l'espace de travail dans la barre latérale, le bouton de fermeture de sa fenêtre détachée, ou ⌘W sur son dernier onglet — résout la préférence Lors de la fermeture de la fenêtre de l'espace de travail depuis le volet des paramètres Général :

Le volet Général avec la préférence Lors de la fermeture de la fenêtre
ActionCe qu'elle fait
Exécuter en arrière-planDétache uniquement l'interface. La VM continue de s'exécuter sans interface — les agents continuent de travailler — et vous pouvez vous rattacher à tout moment depuis la barre latérale.
SuspendreMet la VM en pause et enregistre sa RAM sur disque (vm.state dans le stockage de l'espace de travail). Le prochain lancement la restaure quasi instantanément, avec les mêmes terminaux ; la barre d'onglets est aussi mise en instantané (tabs.json) de sorte que la session restaurée affiche ses onglets immédiatement.
ÉteindreUne extinction ACPI propre. Les processus en cours s'arrêtent. Le disque système et le dossier personnel sont conservés — rien n'est détruit. Une extinction complète efface tout état de suspension enregistré, de sorte que le prochain lancement démarre à froid.
Demander (par défaut)Affiche une invite à chaque fois : « Close “«name»”? » avec les boutons Exécuter en arrière-plan, Suspendre, Éteindre et Annuler, et l'explication « Run in the background keeps the VM running so you can reattach later. Suspend saves its state to disk. Shut down powers it off. »

Quelques détails utiles à connaître :

  • Identité de suspension/reprise — la restauration exige exactement la même configuration de VM, de sorte que l'identifiant machine de l'espace de travail, l'adresse MAC et les chemins de partage sont persistés à côté de l'instantané. À la reprise, l'hôte ping l'invité pour resynchroniser son horloge.
  • Échecs de restauration — si un instantané enregistré ne peut pas être restauré lors d'un lancement interactif, l'application se replie sur un démarrage frais. Les démarrages initiés par une automatisation s'interrompent plutôt — ils ne détruisent jamais silencieusement une session suspendue.
  • Modifier les dossiers partagés pendant la suspension — un instantané ne peut pas reprendre avec un ensemble de partages différent, de sorte que modifier les dossiers partagés force une confirmation Abandonner la VM suspendue… ; le prochain lancement démarre à froid. Les fichiers du dossier personnel et des dossiers partagés ne sont pas affectés.
  • Redémarrage initié par l'invité — exécuter reboot à l'intérieur de l'invité ne met pas fin à la session : l'application détecte l'intention de redémarrage et relance la VM sur place.
  • La destruction de données est toujours explicite — un espace de travail éteint conserve son disque et son dossier personnel. Les données ne sont détruites que par Réinitialiser à l'image de base…, Effacer le dossier personnel…, Supprimer l'espace de travail (toutes confirmées ; voir Espaces de travail), ou l'effacement forcé après une compromission par exfiltration d'identifiants — et même dans ce cas, les paramètres de votre profil, jetons et clés SSH sont conservés, et les dossiers hôtes partagés ne sont jamais touchés.

Raccourcis clavier

Les accords de la fenêtre de session appartiennent à l'hôte — ils sont interceptés avant que le terminal ne les voie, de sorte qu'ils fonctionnent quel que soit ce qui s'exécute à l'intérieur de la VM.

Fenêtre et onglets

RaccourciAction
⌘TNouvel onglet
⌘WFermer l'onglet (le dernier onglet ferme la session)
⌘1 – ⌘9Sélectionner l'onglet par ordre de ligne de la barre latérale
⌘DÉpingler le terminal actif à la Grille et le révéler
⌘↩Zoomer / dézoomer la cellule de la Grille ayant le focus
⌘NOuvrir le gestionnaire d'espaces de travail
⌃⌘SBasculer la barre latérale
⌃⌘EBasculer le volet de l'explorateur de fichiers
⌃⌘BBasculer le volet de navigateur agentique
⇧⌘IOuvrir l'Inspecteur de traces

Terminal

RaccourciAction
⌘CCopier la sélection
⌘VColler (les images se téléversent dans l'invité en tant que fichiers)
⌘+ / ⌘− / ⌘0Taille de police plus grande / plus petite / réinitialiser
Pincement / double-tap à deux doigtsZoomer la police / réinitialiser le zoom

Volet de navigateur (lorsqu'il a le focus)

RaccourciAction
⌘T / ⌘WNouvel / fermer l'onglet de navigateur
⌘RRecharger
⌘[ / ⌘]Précédent / suivant
⌘LMettre le focus sur le champ d'adresse
F12Basculer les DevTools

Remarque : Une protection contre l'auto-répétition de 80 ms fait qu'un accord maintenu enfoncé ne se déclenche qu'une fois ; les répressions délibérées se déclenchent toutes.