Machines
Une machine est l'unité d'isolation de Bromure Agentic Coding : une VM Ubuntu avec son propre disque système, son propre dossier personnel persistant, ses propres identifiants et ses propres politiques de sécurité. Chaque session tourne sur une machine. Une machine de brouillon peut tourner grande ouverte sur une clé d'API jetable pendant qu'une machine tournée vers la production enregistre chaque échange IA et demande avant chaque écriture destructrice, et les deux ne partagent pas un octet.
Une machine s'appelle un espace de travail dans l'éditeur de réglages, dans certains menus (Nouvel espace de travail…, Supprimer l'espace de travail) et en ligne de commande ; dans le code et le JSON exporté, c'est un profil. C'est la même chose. Ce chapitre couvre les machines elles-mêmes : où elles sont listées, comment elles démarrent et s'arrêtent, comment vous les créez, les rembobinez, les réinitialisez et les supprimez, et ce que vous pouvez faire directement sur l'une d'elles : ouvrir des terminaux, en surveiller plusieurs dans la Grille, parcourir les fichiers, et y coller des fichiers. Les réglages de chaque machine sont documentés dans Référence des réglages. Le modèle d'isolation est dans Concepts et architecture.
Les machines sont persistantes. Le disque système et le dossier personnel survivent à chaque redémarrage. Seules des actions délibérées (Réinitialiser le disque, Effacer le dossier personnel…, Supprimer l'espace de travail) ou un effacement forcé après une alerte d'exfiltration d'identifiants détruisent des données. Arrêter une machine ne décide que de ce que sa VM fait ensuite : continuer à tourner, se suspendre, ou s'éteindre.
Note : la plupart du temps, vous n'avez pas à gérer les machines du tout. Démarrer une session sur une machine éteinte ou suspendue la réveille, et la machine d'une session en pause redémarre à votre prochain message. Ce chapitre est pour quand vous voulez regarder sous le capot.
La section Machines virtuelles
Les machines vivent dans la section Machines virtuelles en bas de la barre latérale, sous Sessions, Tâches et Automatisations. Elle est repliée par défaut ; cliquez son titre pour la déplier. Quand la barre latérale est étroite, le titre indique VM.
L'en-tête de la section porte :
- un badge vert avec le nombre de machines en cours d'exécution ou en démarrage ;
- le nombre total de machines ;
- un bouton + (infobulle Nouvel espace de travail) qui crée une machine. Option-cliquez-le pour d'abord importer les réglages depuis les fichiers de configuration de votre Mac (voir Créer une machine).
Dépliée, la section liste, de haut en bas :
| Entrée | Ce que c'est |
|---|---|
| Grille | Une scène qui juxtapose des terminaux vivants. Voir La Grille. |
| Une ligne par machine | La machine, ses onglets de terminal pendant qu'elle tourne, et un nœud Docker dès qu'au moins un conteneur y tourne. |
| Kubernetes | Vos clusters Kubernetes, une ligne chacun. Affiché seulement dès qu'un cluster existe. Voir Clusters Kubernetes et registres. |
| Registres | Vos registres de conteneurs privés. Affiché seulement dès qu'un registre existe. Voir Clusters Kubernetes et registres. |
| Messagerie | La VM du connecteur de messagerie, dès que vous l'avez configurée. Voir Standard et messagerie. |
Les clusters, les registres et le connecteur sont aussi des VM gérées, mais ce ne sont pas des machines : vous n'y faites pas tourner de sessions, et ils ont leurs propres tableaux de bord.
Les lignes de machine
Chaque ligne de machine montre, de gauche à droite :
- Une tuile teintée. Un glyphe de baie de serveurs dans la Couleur de la machine (réglée dans les réglages Général), avec un petit point d'état d'exécution dans son coin.
- Le nom. Un triangle d'avertissement rouge le suit quand la machine a été signalée compromise par le détecteur de fuite d'identifiants ; une telle machine refuse d'amorcer jusqu'à son effacement (voir Identifiants).
- Une étiquette d'état sous le nom : Éteinte, Démarrage… ou Suspendue. Une machine en cours d'exécution n'affiche pas d'étiquette.
- Des boutons. Pendant qu'elle tourne, + ouvre un nouvel onglet de terminal (Nouvel onglet (⌘T)), et survoler la ligne révèle Détacher dans sa propre fenêtre et Fermer cette VM. Le bouton ⋯ ouvre le menu de la machine sur chaque ligne.
Cliquez le nom d'une machine pour afficher son tableau de bord. Cliquez un de ses onglets pour afficher ce terminal sur la scène.
| État | Point | Signification |
|---|---|---|
| Éteinte | Gris | Pas en cours d'exécution. Aucune RAM ni CPU utilisés ; seuls ses disques existent. |
| Démarrage… | Orange, pulsant | La VM amorce. |
| En cours d'exécution | Vert | Amorcée. Ses terminaux et ses agents sont vivants. |
| Suspendue | Jaune | RAM enregistrée sur disque. Elle reprend là où elle s'était arrêtée. |
Les onglets d'agent sont des sessions
Les onglets d'une machine en cours d'exécution sont les fenêtres tmux à l'intérieur : les onglets d'agent dans lesquels tournent vos sessions, plus tout terminal que vous ouvrez vous-même. Tout agent de codage que vous démarrez dans un terminal de machine (en tapant claude, codex et compagnie), et tout agent démarré par une tâche de code ou une automatisation, apparaît aussi comme une session dans la liste Sessions de la barre latérale. Vous pouvez basculer entre le chat d'un agent et son onglet de terminal avec la pastille Linux (⌥⌘U) ; voir L'accueil des sessions.
Les sessions d'une machine supprimée
Quand vous supprimez une machine, ses sessions restent dans la barre latérale, atténuées, avec l'état Machine supprimée. Dans le repli Archivées, elles sont regroupées, avec toute session dont le dossier a disparu, en une seule ligne, « 1 session dont la machine ou le dossier a disparu » ou « N sessions dont la machine ou le dossier a disparu », avec un bouton Supprimer qui supprime ces conversations.
Le tableau de bord de la machine
Le tableau de bord est le panneau de commande d'une machine. Ouvrez-le en :
- cliquant le nom de la machine dans la section Machines virtuelles ;
- choisissant Détails de la machine dans le menu de machine de la barre d'outils, ou dans le menu contextuel de la capsule de machine d'une session ;
- choisissant la machine sous Machines dans la palette ⌘K.
En haut se trouvent la tuile de la machine, son nom, une pastille d'état (En cours d'exécution, Démarrage, Suspendue ou Éteinte) et son adresse IP. À droite, la barre d'actions : Nouveau terminal, Suspendre, Redémarrer et Éteindre pendant qu'elle tourne, ou Démarrer / Reprendre sinon.
En dessous, cinq cartes rapportent les ressources :
| Carte | Éteinte ou suspendue | En cours d'exécution |
|---|---|---|
| CPU | — | Charge CPU en direct, avec une courbe. |
| Mémoire | RAM allouée, p. ex. 8 Go (allouée) | Mémoire utilisée, sur l'allocation. |
| vCPUs | Nombre de cœurs (cœurs) | Le même nombre, avec la charge moyenne de l'invité. |
| Disque | Place que le disque système prend sur le Mac ((hôte)) | Usage disque tel que le système de fichiers de l'invité le rapporte. |
| Durée de fonctionnement | — | Temps depuis l'amorçage. |
La mémoire vient des réglages Ressources de la machine. Les valeurs se rafraîchissent environ toutes les 1,5 seconde ; des zéros juste après l'amorçage signifient que l'invité n'a pas encore rapporté.
Pendant que la machine tourne, une carte Ports en écoute liste les sockets joignables depuis l'extérieur de la VM sous forme de points d'accès <IP-VM>:<port> ; cliquez-en un pour le copier. Les services qui ressemblent à du HTTP reçoivent aussi un bouton globe qui expose ce service à Internet via un tunnel rapide Cloudflare. La première fois, un dialogue intitulé Exposer des services à Internet via Cloudflare Tunnel ? explique le téléchargement unique (environ 18 Mo) et vous demande d'Accepter et exposer.
Une carte Configuration récapitule les réglages qui comptent le plus avant de démarrer : une ligne par agent avec l'endroit où il tourne, Garde-fous, Analyse d'injection de prompt et Dossiers partagés.
Le menu de la machine dans la barre d'outils
Quand une session ou un onglet de machine est sur la scène, la barre d'outils montre une capsule avec la couleur et le nom de la machine. Cliquez-la pour tout ce qui concerne cette machine :
| Élément | Ce qu'il fait |
|---|---|
| Réglages… | Ouvre l'éditeur de réglages de la machine. |
| Détails de la machine | Affiche le tableau de bord. |
| Copier l'adresse IP (…) | Copie l'adresse IP de la machine. Seulement pendant qu'elle tourne. |
| Inspecter la trace | Ouvre l'Inspecteur de traces pour cette machine (aussi ⇧⌘I). |
| Détacher dans sa propre fenêtre | Déplace la machine dans une fenêtre à elle (voir Détacher et rattacher). |
| Redémarrer | Éteint proprement la machine et l'amorce à neuf, après une confirmation Redémarrer « … » ?. Maintenez ⌥ en le choisissant — l'élément devient Forcer le redémarrage — pour couper l'alimentation tout de suite à la place. Voir Redémarrer une machine. |
Quand la machine de la session ne tourne pas, le menu commence par « Pas en cours d'exécution — démarre avec votre prochain message » et n'offre que Réglages… et Détails de la machine.
Sur l'onglet de terminal propre d'une machine, la barre d'outils montre aussi l'éclair Fusion et, quand la machine utilise un modèle sur l'appareil, un badge de moteur (voir Modèles et fournisseurs). Les boutons globe (⌃⌘B) et Fichiers (⌃⌘E) basculent le navigateur et le volet Fichiers.
Démarrer et arrêter
Démarrer une machine
Une machine démarre quand :
- vous démarrez une session dessus, ou envoyez un message à une session en pause qui s'y trouve ;
- vous cliquez Démarrer (ou Reprendre) sur son tableau de bord, ou le choisissez dans son menu ⋯ ;
- vous cliquez Démarrer sur une de ses cellules d'attente dans la Grille ;
- une automatisation ou une tâche de code en a besoin (voir Automatisations) ;
- vous ouvrez une session sur votre Mac et Démarrer cette VM à l'ouverture de session est activé dans ses réglages Général ;
- vous lancez
bromure-cli vm run(voir CLI, API et MCP).
Ce qui amorce
- Premier lancement. L'application fabrique le disque système de la machine (
disk.img) comme un clone APFS copie-sur-écriture de l'image de base Ubuntu partagée. Le clone est instantané et ne prend aucune place tant que l'invité n'y écrit pas. L'image du dossier personnel est créée, et la VM amorce avec la RAM réglée dans ses réglages Ressources. - Lancements suivants. Le même disque système et le même dossier personnel sont réutilisés : tout ce que vous avez installé est toujours là.
- Une machine suspendue. L'instantané de RAM enregistré est restauré au lieu d'un amorçage, et la machine reprend où elle était, onglets compris.
Chaque amorçage réussi prend aussi un point de retour du dossier personnel (voir Rembobiner le dossier personnel).
Par défaut, chaque machine rejoint le réseau NAT privé de Bromure, reçoit une adresse stable, et peut joindre les autres machines et la VM du navigateur. Un mode Pontée par machine se trouve dans les réglages Général.
L'écran d'amorçage
Pendant qu'une machine amorce, une surimpression animée couvre son terminal : le nom de la machine au-dessus d'une barre de progression de balayage, parfois avec une ligne d'état. Elle n'apparaît que si l'amorçage prend plus de 0,4 seconde et s'efface dès que le premier terminal est prêt. Une machine encore sur l'ancien dossier personnel en dossier partagé est déplacée vers une image ext4 privée à son prochain amorçage ; la surimpression montre alors une progression déterminée, par exemple « DÉPLACEMENT DU DOSSIER PERSONNEL — 42 % DE 7,9 GO ».
Si aucun terminal n'apparaît dans les 30 secondes, la surimpression devient un panneau ÉCHEC DE LA PLONGÉE (« « … » n'a jamais rendu de terminal après 30 secondes. La VM est peut-être bloquée, ou son disque système endommagé. ») avec deux boutons :
- Continuer d'attendre relance l'attente de 30 secondes.
- Réinitialiser le disque système… reclone le disque système de la machine depuis l'image de base. Votre dossier personnel survit.
Si l'amorçage s'arrête parce que le disque système a échoué à sa vérification de système de fichiers, la surimpression montre plutôt un panneau ERREUR DE DISQUE, avec Réparer le disque (rejoue le journal du disque sur place) et Réinitialiser le disque système…. Votre dossier personnel survit dans les deux cas. Voir Dépannage si les amorçages échouent sans cesse.
Questions avant un amorçage
Un démarrage peut être précédé d'une de ces questions :
| Invite | Quand | Choix |
|---|---|---|
| Une image de base plus récente est disponible. | L'image de base sur votre Mac est plus récente que celle dont le disque système de cette machine a été cloné. | Oui, mettre à jour réinitialise le disque système depuis la nouvelle base, puis amorce (votre dossier personnel est intact). Non amorce tel quel et ne redemande pas jusqu'à ce qu'une autre image de base sorte. Me le rappeler plus tard amorce tel quel et redemande au premier amorçage après un jour. La réponse est retenue par machine. |
| Machine compromise | Une exécution antérieure a été signalée pour exfiltration d'identifiants. | Confirmez un effacement du disque système, du dossier personnel et de l'état enregistré avant l'amorçage. Les réglages, les jetons et les clés SSH sont conservés. Voir Identifiants. |
| Modèle en cours de téléchargement | Un modèle sur l'appareil dont la machine a besoin n'a pas fini de se télécharger. | Le démarrage est refusé jusqu'à ce que ce soit fait. |
Quand personne n'est là pour répondre (une automatisation, une tâche de code, un démarrage à l'ouverture de session), une mise à jour d'image de base en attente est ignorée et la machine amorce telle quelle ; une machine compromise ne démarre pas avant que vous ne la démarriez vous-même.
Arrêter une machine
Depuis le menu ⋯ de la machine ou son tableau de bord :
- Suspendre enregistre la RAM de la VM sur disque et l'arrête. Reprendre repart exactement de là. Pas de confirmation, puisque rien n'est perdu.
- Éteindre coupe la VM après une confirmation (« Éteint la VM et arrête tout ce qui tourne dedans. Le disque système est conservé ; le travail en cours dans les processus en cours d'exécution est perdu. »). Le démarrage suivant est un amorçage complet.
- Redémarrer — voir Redémarrer une machine.
Lancer reboot dans l'invité marche aussi : l'application le remarque et réamorce la machine sur place.
Redémarrer une machine
Redémarrer est identique partout où il est proposé — le menu ⋯ de la ligne de machine, le tableau de bord de la machine et le menu de machine de la barre d'outils — et sur un client lourd comme sur ce Mac :
- Redémarrer « … » ? demande confirmation : « Éteint proprement la machine et l'amorce à neuf. Tout ce qui tourne dedans s'arrête. »
- Il est demandé à la machine de s'éteindre, comme si on appuyait sur son bouton d'alimentation, pour que ses systèmes de fichiers se vident et ses services s'arrêtent. Si elle ne s'est pas éteinte après 15 secondes (60 secondes pour un nœud Kubernetes ou un registre), son alimentation est coupée.
- Elle amorce à neuf — jamais depuis un état enregistré — exactement comme un démarrage, avec les réglages actuels (Préférences › Modèles compris).
Redémarrage forcé. Maintenez ⌥ (Option) en choisissant Redémarrer : dans le menu de machine de la barre d'outils, l'élément indique Forcer le redémarrage tant que ⌥ est enfoncé. La confirmation devient Forcer le redémarrage de « … » ?, et l'alimentation de la machine est coupée aussitôt — comme débrancher la prise — avant l'amorçage à neuf. Tout ce qui n'est pas enregistré dedans est perdu : gardez-le pour une machine qui ne répond pas à un redémarrage normal.
En ligne de commande, bromure-cli vm reboot <machine> fait le redémarrage propre et --hard le redémarrage forcé (voir CLI, API et MCP).
Les sessions d'une machine arrêtée ou suspendue ne sont pas perdues. Elles s'affichent en pause et continuent à votre prochain message, qui redémarre la machine. Pour ce qui arrive quand vous fermez une machine à la place, voir Fermer une machine.
Le menu ⋯
Le bouton ⋯ d'une ligne de machine s'adapte à l'état de la machine :
| Élément | Quand | Ce qu'il fait |
|---|---|---|
| Démarrer | Éteinte | Amorce la machine. |
| Reprendre | Suspendue | Restaure l'état enregistré. |
| Éteindre · Suspendre · Redémarrer | En cours d'exécution ou en démarrage | Voir Arrêter une machine. |
| Ajouter les worktrees à la grille | En cours d'exécution | Ajoute chaque onglet de worktree de cette machine à la Grille. |
| Modifier… | Toujours | Ouvre l'éditeur de réglages. |
| Dupliquer | Toujours | Copie la machine. |
| Rembobiner le dossier personnel… | Toujours | Ramène le dossier personnel à un amorçage antérieur. |
| Réinitialiser le disque | Toujours | Reclone le disque système depuis l'image de base. |
| Supprimer l'espace de travail | Toujours | Supprime la machine. |
Modifier et renommer
Modifier… (ou Réglages… dans le menu de machine de la barre d'outils, ou Réglages de « … »… dans ⌘K et dans les menus d'une session) ouvre l'éditeur de réglages, titré du nom de la machine. Changez ce que vous voulez et cliquez Enregistrer. Pour renommer une machine, changez Nom dans le volet Général. Une seule fenêtre d'éditeur est ouverte à la fois. Les volets sont documentés dans Référence des réglages.
Dupliquer
Dupliquer fait une copie complète tout de suite, nommée d'après l'original avec copie ajouté (par exemple Web app copie). Il n'y a pas de confirmation. La copie reçoit chaque réglage et identifiant, le disque système et le dossier personnel, clonés en copie-sur-écriture quand c'est possible, si bien qu'elle ne prend pas de place supplémentaire tant que les deux ne divergent pas. Trois choses ne sont pas copiées : l'état de RAM enregistré (la copie amorce à neuf), la disposition des onglets, et l'adresse MAC réseau (la copie rejoint le réseau comme une machine différente).
Rembobiner le dossier personnel
Chaque fois qu'une machine amorce avec succès, Bromure garde un point de contrôle copie-sur-écriture de son image de dossier personnel. L'échelle garde les derniers amorçages, puis un par jour pendant une semaine, puis un par semaine pendant un mois. Les points de contrôle ne coûtent rien à créer, mais ils prennent de la vraie place disque à mesure que le dossier personnel s'en éloigne.
Rembobiner le dossier personnel… ouvre une feuille listant ces points de retour.
Chaque point montre sa date, il y a combien de temps c'était, et sa taille. Choisissez-en un et cliquez Rembobiner. Le démarrage suivant amorce depuis ce dossier personnel. Le dossier personnel tel qu'il est maintenant est d'abord conservé comme un nouveau point, si bien qu'un rembobinage peut lui-même être annulé depuis la même liste.
La machine doit être éteinte, parce que l'image du dossier personnel est échangée en entier. Pendant qu'elle tourne, la feuille indique « La machine tourne — son dossier personnel ne peut pas être échangé pendant qu'il est utilisé. Éteignez-la d'abord. » avec un bouton Éteindre, et Rembobiner reste désactivé. Une machine qui n'a jamais amorcé affiche « Aucun point de retour pour l'instant — un est pris chaque fois que cette machine démarre. »
Le même retour est disponible sous Restaurer le dossier personnel… dans le volet Ressources, à côté d'Effacer le dossier personnel…, qui efface le dossier personnel entièrement.
Réinitialiser le disque système
Réinitialiser le disque (aussi Réinitialiser vers la base… dans le volet Ressources) reclone le disque système de la machine depuis l'image de base actuelle. La confirmation, Réinitialiser le disque système de « … » vers la base ?, liste ce qui part : tout ce que vous avez installé avec sudo apt install, les changements dans /etc, /var, /usr, /opt, et la configuration globale du système. Votre dossier personnel est intact : projets, dotfiles, clés .ssh, npm-global, .cargo et historique du shell survivent tous. Confirmez avec Réinitialiser vers la base.
Une réinitialisation abandonne aussi l'état de RAM enregistré et la disposition des onglets : le prochain amorçage est donc propre. Elle est refusée avec Fermez « … » d'abord. pendant que la machine tourne.
Note : un point de contrôle et une suspension répondent à des questions différentes. La suspension garde l'état d'exécution pour que vous puissiez le reprendre. Un point de contrôle garde le dossier personnel tel qu'il était à un amorçage connu comme bon pour que vous puissiez ramener en arrière un environnement cassé. Un état de suspension enregistré est abandonné dès que le disque auquel il appartient est réinitialisé ou rembobiné.
Supprimer une machine
Supprimer l'espace de travail (aussi Espaces de travail › Supprimer, qui supprime la machine sur la scène — la machine de la session pendant qu'une session est affichée — et est désactivé quand la scène n'affiche pas une machine unique, comme une salle, un tableau ou l'écran de nouvelle session) demande Supprimer l'espace de travail « … » ? — « Retire son disque, ses réglages et sa clé SSH. Le dossier hôte monté est intact. » Confirmez avec Supprimer.
Cela supprime tout le dossier de la machine sous ~/Library/Application Support/BromureAC/profiles/ : ses réglages, ses secrets chiffrés, son disque système, son image de dossier personnel, ses points de contrôle et ses clés SSH côté hôte. Cela retire aussi la machine de la liste d'accès de tout cluster Kubernetes. Les dossiers hôtes que vous avez partagés dans la machine vivent sur votre Mac et sont laissés tels quels.
Avertissement : supprimer une machine est irréversible. Il n'y a pas de corbeille. Tout ce que vous voulez garder devrait être dans un dossier hôte partagé, ou validé et poussé, avant la suppression.
Créer une machine
Vous pouvez créer une machine depuis :
- le + de l'en-tête Machines virtuelles ;
- Espaces de travail › Nouvel espace de travail… (⇧⌘N) ;
- Espaces de travail › Nouvel espace de travail depuis mes configs… (⇧⌥⌘N), ou Option-clic sur le + ;
- Nouvelle machine… à la fin de la liste de la puce Machine sur l'écran de nouvelle session ;
- Nouvelle machine… dans la palette ⌘K.
Chacun ouvre l'éditeur de réglages, titré Nouvel espace de travail, rempli depuis vos valeurs par défaut dans Préférences et avec un nom libre tel que Espace de travail par défaut ou Espace de travail par défaut 2. Donnez-lui un Nom dans le volet Général, changez ce dont vous avez besoin, et cliquez Créer (ou Annuler). Nouvel espace de travail depuis mes configs… lance d'abord l'import d'identifiants de l'assistant de configuration, pour que la nouvelle machine démarre avec les identifiants trouvés sur votre Mac.
Chaque agent est disponible sur chaque machine, et une machine utilise les modèles réglés dans Préférences › Modèles sauf si vous lui en donnez les siens dans son volet Modèles. Voir Modèles et fournisseurs.
Astuce : la plupart des changements de l'éditeur s'appliquent quand vous cliquez Créer ou Enregistrer. Quelques-uns prennent effet tout de suite parce qu'ils touchent un état partagé plutôt que les réglages propres de la machine : les téléchargements de modèles, les connexions OAuth MCP, et les imports de clés SSH.
Les terminaux et onglets de machine
Dans une machine, chaque terminal est une fenêtre d'une seule session tmux. tmux est la source de vérité : l'application reflète les fenêtres de la machine comme des onglets sous sa ligne, si bien qu'une machine peut continuer à tourner sans fenêtre ouverte, être détachée, ou être mise en miroir depuis un autre Mac (voir Accès distant et clients) sans déranger ses agents.
Quand le terminal d'une machine est sur la scène, ces raccourcis agissent sur ses onglets :
| Raccourci | Action |
|---|---|
| ⌘T | Nouvel onglet (aussi + sur la ligne de machine, et Espaces de travail › Nouvel onglet) |
| ⌘W | Fermer l'onglet. Fermer le dernier onglet ferme la machine (voir Fermer une machine). |
| ⌘1 – ⌘9 | Aller à l'onglet de ce numéro. Les numéros apparaissent à côté des neuf premiers onglets de la machine sélectionnée. |
| ⌘D | Ajouter ce terminal à la Grille et afficher la Grille (Espaces de travail › Ajouter le terminal à la grille) |
⌘N démarre toujours une nouvelle session. Quand une session est sur la scène plutôt qu'un terminal, ⌘1 – ⌘9 et ⌘W agissent sur les sessions ; voir L'accueil des sessions.
Les étiquettes d'onglet montrent le programme au premier plan (claude, codex, un shell…). L'icône de chaque onglet porte le point d'état de l'agent : orange et pulsant pendant qu'il travaille, vert quand il a fini, rouge quand il vous attend.
Les onglets de worktree
Un onglet de worktree est un agent tournant dans son propre worktree git : une autre branche du même dépôt extraite dans son propre dossier. Pour les conversations d'agent, les sessions de branche sont la manière habituelle de faire cela. Sur les onglets de terminal d'une machine, les commandes classiques de worktree sont toujours là.
Faites un clic droit sur un onglet pour :
- Nouveau worktree… (⇧⌘G, Espaces de travail › Nouveau worktree). Affiché désactivé comme Nouveau worktree… (Pas dans un dépôt git) quand l'onglet n'est pas dans un dépôt. Il ouvre un dialogue, « Crée un worktree git branché sur le commit actuel de cet onglet et y ouvre un agent imbriqué. », avec un nom de tâche, l'agent (claude, codex, grok, kimi ou omp) et un prompt initial facultatif. La branche est nommée
wt/<slug>d'après le nom de la tâche. - Nouvelle automatisation…, qui ouvre l'éditeur d'automatisations avec la machine et le dossier de cet onglet (voir Automatisations).
- Sur un onglet de worktree : Fusionner… (⇧⌘M, Espaces de travail › Fusionner le worktree), Attacher un terminal (un shell simple dans le dossier du worktree) et Abandonner le worktree (retire le checkout et supprime sa branche, après demande).
- Sur un onglet de fusion qui a rencontré des conflits : Faire résoudre les conflits par l'agent.
Fusionner… vous laisse choisir où fusionner : le worktree parent (par défaut), ou n'importe quel ancêtre jusqu'à la racine du dépôt, marqué ⚠︎ saute des intermédiaires quand il saute un niveau. Si la machine a un identifiant GitHub, Créer une pull request pousse la branche et fait ouvrir une pull request par l'agent à la place. Les conflits démarrent l'agent dans l'onglet de fusion pour les résoudre. Seul le travail validé est fusionné ; les modifications non validées sont perdues quand vous abandonnez le worktree.
Les onglets de worktree s'imbriquent sous l'onglet dont ils sont issus, jusqu'à six niveaux de profondeur. Quand le volet Fichiers montre un dépôt sur un onglet de machine, une barre sous son en-tête propose Nouveau worktree…, ainsi que Fusionner et Supprimer quand l'onglet est lui-même un worktree.
L'apparence du terminal
Les terminaux de machine sont des terminaux natifs, rendus par le GPU. Leur police, leurs couleurs, leur curseur et l'opacité de la fenêtre viennent des réglages d'Apparence de la machine et s'appliquent dès l'enregistrement. Seules les polices à largeur fixe sont utilisées ; toute autre retombe sur Menlo. Avec une opacité sous 1,0, la zone du terminal est du verre dépoli au-dessus du bureau (l'opacité est limitée à 0,3–1,0). ⌘+, ⌘− et ⌘0 zooment la police, comme un pincement sur le trackpad et un double-tap à deux doigts pour réinitialiser.
Ces réglages ne s'appliquent qu'aux terminaux. La vue chat d'une session a son propre aspect.
La Grille
La Grille juxtapose jusqu'à 25 terminaux vivants (au plus 5 × 5), de n'importe quel mélange de machines, pour que vous puissiez surveiller plusieurs agents à la fois. Chaque cellule est sa propre vue vivante de cette fenêtre tmux, indépendante de la scène propre à la machine : les deux peuvent donc être ouvertes.
- Affichez-la en cliquant le nœud Grille en haut de la section Machines virtuelles, ou le bouton de grille sur le rail replié de la barre latérale. Ses terminaux membres sont listés sous le nœud ; cliquez-en un pour mettre sa cellule au premier plan.
- Ajoutez des terminaux en faisant glisser une ligne d'onglet sur le nœud Grille (« Glissez des terminaux ici pour les surveiller côte à côte »), en appuyant sur ⌘D sur un terminal, ou avec Ajouter les worktrees à la grille dans le menu ⋯ d'une machine.
- Les nouveaux terminaux s'ajoutent d'eux-mêmes. Chaque terminal ouvert après le démarrage d'une machine (un onglet d'agent, un worktree, un terminal simple) est ajouté à la fin. Quand la Grille est pleine, la cellule la plus ancienne part pour faire de la place. Faites un clic droit sur le nœud Grille pour activer ou désactiver Ajouter automatiquement les nouveaux terminaux. Réarranger les cellules à la main le désactive ; l'arrangement est alors le vôtre.
- Les cellules. L'en-tête de chaque cellule montre un point d'état, le nom de la machine et l'étiquette de l'onglet, avec les boutons Ouvrir dans l'espace de travail et Retirer de la grille — le terminal continue de tourner et une poignée pour faire glisser la cellule ailleurs. Clic droit sur l'en-tête pour les mêmes actions, ou sur un membre sous le nœud Grille pour Retirer de la grille.
- Zoom. Double-cliquez une cellule, ou appuyez sur ⌘↩ sur la cellule au premier plan, pour qu'elle remplisse la scène. Refaites-le pour dézoomer. Échap ne dézoome pas, parce que les agents utilisent Échap.
Les cellules d'une machine éteinte ou suspendue restent des emplacements avec Éteinte ou Suspendue et un bouton Démarrer. Les cellules dont le terminal a disparu d'une machine en cours d'exécution sont retirées. La Grille, y compris le réglage d'ajout automatique, est conservée entre les redémarrages dans ~/Library/Application Support/BromureAC/grid-layout.json.
Détacher et rattacher
Détacher dans sa propre fenêtre (menu de machine de la barre d'outils, ou le bouton de détachement sur une ligne de machine) déplace une machine en cours d'exécution dans une fenêtre à elle ; ses onglets deviennent une bande de pastilles dans la barre de titre de cette fenêtre. La fenêtre détachée a sa propre barre d'outils : l'adresse IP (cliquez pour copier), un bouton dossier listant les dossiers hôtes partagés dans la machine, redémarrer, trace, réglages, et Remettre cette VM dans la fenêtre principale pour la rattacher.
Le volet Fichiers
Le volet Fichiers est un navigateur de fichiers à droite de la scène. Basculez-le avec ⌃⌘E ou le bouton Fichiers de la barre d'outils.
Il montre :
- le dossier de la session sur la scène, que son agent tourne ou non (dans une salle, la session de la cellule au premier plan) ;
- sur l'onglet de terminal d'une machine, le dossier courant de cet onglet (la racine du dépôt quand il est dans un dépôt).
Passer d'une session ou d'un onglet à l'autre déplace le volet avec vous. Sans rien à montrer, il indique « Aucune session sélectionnée ».
Parcourir
- L'en-tête nomme le dossier affiché. ↑ (Remonter au dossier englobant) va au parent ; double-cliquez un dossier, ou faites un clic droit et choisissez Afficher ce dossier, pour y entrer.
- Les fichiers sont colorés selon leur état git avec des badges d'une lettre (M, A, U, D, R, !), et les dossiers qui contiennent des changements portent un point. Cela marche pour le dépôt propre du dossier et pour les dépôts imbriqués dedans, si bien que parcourir votre dossier personnel montre encore les changements de chaque projet. Les dossiers avec des changements se déplient d'eux-mêmes une fois.
- Une puce compte les fichiers modifiés. Le bouton de filtre bascule sur Afficher seulement les fichiers modifiés, et le bouton d'actualisation recharge (le volet s'actualise aussi toutes les 4 secondes tant qu'il est visible).
- Cliquez un fichier pour ouvrir une vue de détail avec les onglets Diff et Fichier : un diff coloré avec des décomptes +/−, ou un aperçu (Markdown rendu, source colorée). Un bouton de détachement ouvre le détail dans sa propre fenêtre, qui suit votre sélection.
Quand le fichier affiché appartient à l'agent sur la scène, le diff fait pousser des bulles de commentaire dans sa marge : commentez des lignes, puis Envoyer à l'agent pour confier les commentaires à cet agent en un seul message. La fenêtre de revue fait la même chose sur tout un changement.
Déplacer des fichiers dans un sens et dans l'autre
- Vers l'extérieur. Faites glisser un fichier vers le Finder, ou faites un clic droit et choisissez Enregistrer dans Téléchargements. Copier le chemin copie son chemin à l'intérieur de la machine.
- Vers l'intérieur. Déposez des fichiers depuis le Finder n'importe où sur le volet pour les copier dans le dossier affiché. Un dossier vide indique « Dossier vide — déposez des fichiers ici pour en ajouter. »
Les transferts passent par le canal propre de la machine, pas par un dossier partagé : ils marchent donc sur n'importe quelle machine, y compris distante. La machine doit tourner.
Quand il s'ouvre de lui-même
- Pour une session : l'application vérifie les dossiers des sessions en cours d'exécution environ toutes les dix secondes. La première fois que la session sur la scène a des changements (travail non validé dans un dépôt ; dans tout autre dossier, des fichiers écrits depuis le début de la session), le volet Fichiers s'ouvre. Si vous le fermez, il reste fermé jusqu'à ce que le dossier soit propre à nouveau (après un commit, disons) puis change encore.
- Sur un onglet de machine : entrer dans un dépôt git ouvre le volet, et le quitter pour un dossier qui n'en est pas le ferme. Le fermer à la main l'emporte jusqu'à ce que vous passiez à un autre dépôt.
Note : le volet Fichiers ne modifie jamais le contenu des fichiers. Il liste jusqu'à 20 000 fichiers (au-delà, l'arbre est tronqué), prévisualise les fichiers jusqu'à 512 Ko et les diffs jusqu'à 1 Mo.
Le presse-papiers et le collage de fichiers
Le presse-papiers passe dans les terminaux de machine par le terminal lui-même ; il n'y a rien à configurer.
- Invité → Mac. Copier dans l'invité (mode copie de tmux, ou tout programme utilisant OSC 52) atterrit sur le presse-papiers du Mac. Relâcher une sélection à la souris dans tmux la copie.
- Mac → invité. ⌘V collera le presse-papiers du Mac comme du texte (collage entre crochets).
- Sélectionner. Un glisser à la souris sélectionne du texte ; ⌘C le copie. Sélectionner seul ne copie jamais.
Coller et déposer des fichiers
Quand le presse-papiers contient des fichiers plutôt que du texte, ⌘V dans un terminal de machine devient un transfert de fichiers. La même chose se produit quand vous faites glisser des fichiers sur le terminal. Chaque fichier est copié dans la machine sous /home/ubuntu/.bromure/pastes/, et son chemin dans la machine est tapé à sa place, pour que l'agent puisse le lire sur le disque.
- Tout fichier ordinaire fonctionne : images, PDF, archives, n'importe quoi. Un fichier copié garde son nom, préfixé d'un horodatage et avec les caractères que le shell exigerait d'échapper remplacés par
_. Une image bitmap sur le presse-papiers (une capture d'écran, un « Copier l'image » de navigateur) devient un fichierclipboard-<horodatage>-<id>.png. - Jusqu'à 512 Mo en un collage. Tout ce qui est plus gros, une sélection qui inclut un dossier, ou un presse-papiers qui porte aussi du texte, se colle comme du texte comme d'habitude : le ⌘V ordinaire n'est donc jamais détourné.
- Une puce apparaît au curseur avec la progression de l'envoi, reste brièvement quand c'est fini (rouge en cas d'échec), et s'en va à votre prochaine frappe.
- Les fichiers collés vivent dans l'image du dossier personnel : leurs chemins survivent donc à un redémarrage. Les fichiers de plus de 7 jours sont nettoyés dans la machine.
Dans le chat d'une session, les fichiers déposés et collés deviennent des pièces jointes ; voir Le chat.
Astuce : les liens vont dans l'autre sens d'eux-mêmes. Quand un programme dans la machine ouvre une URL
httpouhttps(une connexion OAuth,xdg-open), elle s'ouvre dans le navigateur par défaut de votre Mac.
Les dossiers partagés
Pour un travail suivi sur des fichiers qui vivent sur votre Mac, partagez le dossier dans la machine au lieu de copier des fichiers dans un sens et dans l'autre. Jusqu'à 8 dossiers hôtes peuvent être partagés ; chacun apparaît dans le dossier personnel de l'invité comme ~/<nom du dossier>. Voir les réglages Dossiers.
Fermer une machine
Vous fermez une machine avec Fermer cette VM (le × sur sa ligne), le bouton de fermeture de sa fenêtre détachée, ou ⌘W sur son dernier onglet. Ce qui se passe est réglé par À la fermeture de la fenêtre dans les réglages Général de la machine :
| Réglage | Ce qu'il fait |
|---|---|
| Continuer en arrière-plan | Seule la vue disparaît. La VM continue de tourner et ses agents continuent de travailler ; réouvrez-la depuis la barre latérale à tout moment. |
| Suspendre | Enregistre la RAM de la VM sur disque et l'arrête. Le démarrage suivant la restaure avec les mêmes terminaux. |
| Éteindre | Coupe proprement la VM. Le disque système et le dossier personnel sont conservés ; le démarrage suivant est un amorçage complet. |
| Demander (par défaut) | Demande Fermer « … » ? chaque fois, avec Continuer en arrière-plan, Suspendre, Éteindre et Annuler. |
Fermer une machine n'est pas la même chose que terminer une session. Pour arrêter un agent, terminez ou archivez sa session (voir L'accueil des sessions) ; la machine continue de tourner pour ses autres sessions.
Quelques détails :
- Reprendre exige la même machine. Une machine suspendue ne peut reprendre qu'avec la même configuration : son identité, son adresse réseau et ses dossiers partagés sont donc enregistrés avec l'instantané. Changer ses dossiers partagés pendant qu'elle est suspendue vous demande d'abandonner l'état enregistré ; le démarrage suivant est alors un amorçage à neuf. Les fichiers du dossier personnel et des dossiers partagés ne sont pas touchés.
- Reprises échouées. Si un état enregistré ne peut pas être restauré quand vous démarrez la machine vous-même, elle amorce à neuf à la place.
- Rien n'est détruit par une fermeture. Les données ne partent qu'avec Réinitialiser le disque, Effacer le dossier personnel…, Supprimer l'espace de travail, ou l'effacement après une alerte d'exfiltration d'identifiants, et même alors les réglages, les jetons et les clés SSH sont conservés et les dossiers hôtes partagés ne sont jamais touchés.
Où une machine est stockée
Chaque machine est un dossier sous ~/Library/Application Support/BromureAC/profiles/<id>/ :
| Chemin | Contenu |
|---|---|
profile.json | Tous les réglages non secrets. |
secrets.enc | Chaque secret, chiffré avec une clé conservée dans votre Keychain. |
disk.img | La copie propre à la machine de l'OS de base. |
home.img | Le /home/ubuntu persistant. |
checkpoints/ | Les points de retour du dossier personnel (et du disque système). |
vm.state | La RAM enregistrée d'une machine suspendue. |
agent/, ssh/ | Le matériel de clé SSH côté hôte. La clé privée n'entre jamais dans la VM. |
Vos valeurs par défaut des Préférences sont conservées en dehors de profiles/, ce qui explique qu'elles n'apparaissent jamais comme une machine. Les secrets ne sont jamais écrits dans profile.json ni copiés dans la VM : l'invité ne détient que des substituts, que le proxy de l'hôte échange contre les vraies valeurs sur le fil (voir Identifiants et frontière du fil).
Astuce :
disk.img,home.imget les points de contrôle sont des images ext4. Espaces de travail › Ouvrir un fichier ext4… les parcourt, en extrait et les répare sur votre Mac sans rien amorcer. Voir Avancé.
En ligne de commande
Tout ce qui est dans ce chapitre peut aussi se faire sans la fenêtre. Avec l'application lancée, bromure-cli vm ls liste les machines et leur état, et workspaces create, workspaces edit, workspaces describe et workspaces rm les créent, les changent, les inspectent et les suppriment (vm est un alias de workspaces). Voir CLI, API et MCP.