CLI, automatisation et MCP
Tout ce que vous pouvez faire dans l'application, vous pouvez aussi le faire sans fenêtre. Le même binaire qui héberge l'interface graphique — bromure-cli, dans Bromure Agentic Coding.app/Contents/MacOS/ — est à la fois une CLI multi-commandes complète, un plan de contrôle HTTP, deux serveurs MCP, un dictionnaire AppleScript et un planificateur. Ce chapitre en est la référence.
Quatre surfaces d'automatisation reposent sur un plan de contrôle unique :
- La ligne de commande
bromure-cli— une CLI de style Docker/kubectl pour créer des espaces de travail, démarrer des VM, attacher des terminaux, exécuter des commandes et lire les traces. - L'API d'automatisation — le même plan de contrôle exposé en JSON-sur-HTTP sur l'interface loopback, pour le scripting depuis n'importe quel langage.
- Les serveurs MCP — un serveur stdio qui permet à un agent IA (Claude Code, Claude Desktop) de gérer l'application, et un serveur
browserqui permet à un agent de piloter le Chromium intégré de son espace de travail. - AppleScript — le dictionnaire Bromure AC Suite, pour le scripting macOS et l'outillage de capture d'écran.
Les automatisations planifiées — des exécutions d'agent récurrentes et sans surveillance — s'appuient sur le même plan de contrôle et sont traitées à la fin du chapitre.
Le plan de contrôle : socket et API
Chacune de ces surfaces parle en fin de compte HTTP à l'application en cours d'exécution via l'un de deux transports :
| Transport | Où | Contrôle d'accès | Activé par défaut |
|---|---|---|---|
| Socket de contrôle | ~/Library/Application Support/BromureAC/control.sock (domaine Unix, HTTP/1.1) | Permissions de fichier — le socket est en mode 0600, réservé au propriétaire. Atteindre le fichier constitue l'autorisation, à la manière du socket Docker. | Oui, dès que l'application ou un agent sans interface s'exécute |
| API d'automatisation | 127.0.0.1:9223 (TCP) | Loopback uniquement par défaut ; les routes d'introspection et de mutation nécessitent en outre la variable d'environnement BROMURE_DEBUG_CLAUDE (voir Points de terminaison de débogage) | Non — activation explicite dans Préférences → Automatisation |
La CLI ne parle jamais directement à une VM. Chaque sous-commande est un client HTTP léger sur le socket de contrôle, de sorte que les mêmes commandes fonctionnent localement et — lorsque le socket est tunnelé via SSH — sur une instance distante depuis un client riche. Si aucun agent ne s'exécute lorsque vous invoquez une commande qui en nécessite un, la CLI démarre automatiquement un agent d'arrière-plan sans fenêtre (bromure-cli run --headless) et attend jusqu'à 40 secondes qu'il réponde à /health. Les commandes en lecture seule (vm ls, describe, trace …) ne déclenchent pas de démarrage automatique ; elles affichent No bromure-cli agent running. à la place.
Remarque : Le socket de contrôle est toujours disponible tant que l'application s'exécute et est indépendant du commutateur Activer le serveur d'automatisation. Ce commutateur ne régit que l'écouteur TCP sur le port 9223. Vous n'avez pas besoin d'activer l'API d'automatisation pour utiliser la CLI
bromure-cli.
La ligne de commande bromure-cli
Vous pouvez appeler le binaire par son chemin de bundle complet, mais l'application propose une installation unique d'un alias court. Au lancement, elle affiche une alerte — Installer l'outil en ligne de commande « bromure-cli » ? — avec les boutons Installer / Pas maintenant / Ne plus demander. Choisir Installer crée un lien symbolique de /usr/local/bin/bromure-cli vers le binaire de l'application (une seule invite d'administrateur). Sous le nom bromure-cli, le binaire masque les commandes internes à l'application — la gestion des images, le serveur mcp et le run par défaut de l'interface graphique — et n'expose que les groupes destinés au terminal (Espaces de travail, Traçage, Inférence locale, Entreprise, remote) ; un bromure-cli seul affiche l'aide au lieu de lancer l'application. Invoqué en tant que bromure-cli, tout est disponible et la sous-commande par défaut est run (l'interface graphique). Les exemples ci-dessous utilisent bromure-cli ; substituez librement bromure-cli pour les commandes qu'il expose.
Les commandes acceptent un id d'espace de travail, un préfixe de short-id ou son nom partout où un argument d'espace de travail est indiqué. Les espaces de travail sont les configurations de VM persistantes décrites dans Espaces de travail ; les groupes de commandes vm et workspaces sont des alias l'un de l'autre.
L'application et l'agent d'arrière-plan
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli run [--headless] | Sous-commande par défaut (masquée) — lance l'interface graphique. --headless exécute un agent accessoire de barre de menus sans fenêtre ; c'est ce que la CLI démarre automatiquement pour servir le socket de contrôle. |
Gestion des images
L'image de base est installée une seule fois. Ces commandes sont masquées sous l'alias bromure-cli.
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli init [--build-local] | Installe l'image de base Ubuntu : télécharge l'image préconstruite, avec repli sur une compilation locale d'environ 10 minutes en cas d'échec du téléchargement. --build-local force la compilation locale. |
bromure-cli info | Affiche la version de l'image de base, sa taille virtuelle, sa taille sur disque et son chemin. |
bromure-cli reset [--yes] | Supprime l'image de base (disque, variables EFI, marqueur de version, état) pour que le prochain init reparte de zéro ; demande confirmation sauf avec --yes. |
bromure-cli init-foss-image --output <dir> | Pipeline de publication uniquement — compile l'image de base redistribuable uniquement composée de logiciels libres dans <dir>. |
bromure-cli verify-image --disk <path> [--timeout 300] | Pipeline de publication uniquement — démarre un clone jetable en mode sans interface et exige l'invite de connexion série dans le délai imparti. |
Remarque : Il n'existe pas de sous-commande
setup— celle-ci appartient au produit frère Bromure (navigateur). La commande d'installation de l'image d'Agentic Coding estinit. Si aucune image de base n'existe, le lancement de l'interface graphique vous dirige plutôt vers le flux de configuration intégré.
Contrôle des espaces de travail et des VM
C'est le groupe principal. vm run est délibérément calqué sur Docker : il démarre un espace de travail et confie votre terminal à la session tmux bromure partagée de l'invité.
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli vm ls | Liste chaque espace de travail avec son état en direct (off / suspended / booting / running), sa durée de fonctionnement, l'état d'attache de fenêtre, les onglets tmux sous forme d'arborescence (* marque l'onglet actif) et les conteneurs Docker en cours d'exécution. |
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm] | Démarre la VM d'un espace de travail, ou en crée un jetable à la volée. Par défaut : attache votre terminal au tmux de l'invité. |
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w] | Attache le terminal au tmux de la VM (avec saut optionnel vers un onglet), lance docker exec -it dans un conteneur en cours d'exécution (shell par défaut bash), ou ouvre/rattache la fenêtre de l'interface graphique avec -w/--window. |
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…> | Exécute une commande à l'intérieur de la VM (style kubectl, après --). -it ouvre un pty interactif ; omettez la commande avec -it pour obtenir un shell. Les codes de sortie de l'invité se propagent. |
bromure-cli vm kill <vm> [--suspend] | Arrête une VM : arrêt gracieux, ou suspension (RAM sauvegardée sur disque) avec --suspend. |
bromure-cli vm reboot <workspace> [--hard] | Redémarre sur place un espace de travail en cours d'exécution ; gracieux par défaut, --hard le détruit immédiatement. |
bromure-cli vm describe <workspace> | Affiche les paramètres de l'espace de travail ainsi que les détails d'exécution en direct lorsqu'il fonctionne (état, IP, vCPU, état de Fusion, utilisation du disque via le df de l'invité, onglets, conteneurs, mémoire utilisée). |
bromure-cli vm ports <workspace> (ou vm <workspace> -L) | Affiche les ports en écoute d'un espace de travail en cours d'exécution (ss en direct en tant que root) : PORT, PROTO, ADDRESS, PROCESS, avec les liaisons loopback uniquement signalées. |
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->] | Crée un espace de travail sans interface. --from-json applique un document JSON de profil complet (les options prennent le pas sur les champs correspondants) ; --generate-ssh génère une clé SSH côté hôte et affiche la clé publique. |
bromure-cli workspaces edit <workspace> [--from-json <file|->] | Récupère la configuration complète de l'espace de travail, l'ouvre dans $VISUAL/$EDITOR (repli sur vi) et enregistre les modifications. Les secrets s'affichent vides — laissez vide pour conserver, saisissez pour remplacer. --from-json applique un document de manière non interactive. |
bromure-cli workspaces rm <workspace> [-f] | Supprime un espace de travail et TOUTES ses données (disque + home) après une confirmation y/N, ignorée avec -f. |
bromure-cli workspaces ssh-keygen <workspace> | Génère une nouvelle clé SSH côté hôte pour l'espace de travail et affiche la clé publique pour votre hôte Git. |
Quelques détails opérationnels utiles à connaître :
- Options de
vm run.--toolestclaude,codexougrok;--authesttoken,subscriptionoubedrock.-v/--volume <hostdir>monte un dossier de l'hôte à~/<basename>dans l'invité (répétable, jusqu'à 8).-d/--detachdémarre la VM et rend la main au lieu de s'attacher.--rmsupprime l'espace de travail et son disque à l'arrêt de la VM. Détachez-vous d'un tmux attaché avecCtrl-b d— cela laisse la VM en cours d'exécution. - Sensible au TTY. Le comportement par défaut de style Docker consistant à confier le terminal à tmux ne s'applique que sur un terminal réel ; les invocations redirigées ou scriptées se comportent silencieusement comme si vous aviez passé
-d. - Auth de
workspaces create. Pourcreate,--authaccepte aussilocal. Les couleurs sontblue,red,green,orange,purple,pink,tealougray. - Conservation via champ vide à l'édition.
workspaces editexporte toute la configuration avec les secrets vidés ; un document réenregistré avec un secret vide conserve la valeur stockée, de sorte qu'un aller-retour ne peut jamais effacer vos clés. Un tampon inchangé n'enregistre rien ; un JSON invalide interrompt l'opération. - Attentes de
exec.vm execattend jusqu'à 10 secondes l'agent shell de l'invité ; un502signifie que la VM n'est peut-être pas en cours d'exécution ou que le nom ne correspondait pas. Les invites d'approbation qui se déclenchent pendant une session attachée sont affichées sur votre terminal (voir Consentement sur les terminaux attachés), jamais à l'intérieur de l'invité.
Modèles, routage et Fusion
L'inférence locale est traitée en profondeur dans Modèles locaux et la synthèse multi-modèles dans Fusion ; les commutateurs de la CLI sont :
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Gère les modèles d'inférence MLX locaux — parcourir le catalogue organisé, télécharger avec progression en direct, sélectionner par espace de travail, supprimer. |
bromure-cli vm fusion enable|disable <vm> | Active ou désactive Fusion sur une VM en cours d'exécution. Nécessite que l'espace de travail ait au moins deux modèles configurés. |
bromure-cli vm routing cloud|local|hybrid <vm> | Définit le routage du backend LLM pour une VM en cours d'exécution. |
bromure-cli vm hybrid budget <tokens> <vm> | ttft <seconds> <vm> | split <percent> <vm> | Ajuste le routage hybride : plafond de jetons cloud par période glissante de 24 heures (0 = illimité), seuil souple de repli du délai jusqu'au premier jeton (défaut 5 s) et pourcentage de nouvelles sessions épinglées en local (0–100). |
fusion accepte également on/engage et off/disengage comme synonymes.
Inspection des traces
Celles-ci lisent les traces de session MITM par espace de travail. Elles ne renvoient rien tant que le traçage n'est pas activé pour l'espace de travail — voir Paramètres de traçage — et le détail complet figure dans Traçage.
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli trace ls [workspace] [--limit 50] | Liste les requêtes récentes : TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS (les indicateurs incluent swap×N, LEAK×N, conv). |
bromure-cli trace summary [workspace] | Agrège les totaux, les classes de statut, les décomptes de swap/leak/conversation et les principaux hôtes. |
bromure-cli trace hostnames [workspace] | Liste les hôtes distincts et leur nombre de requêtes. |
bromure-cli trace leaks [workspace] | Affiche les requêtes présentant des fuites d'identifiants suspectées (en-tête, aperçu, suspicion). |
bromure-cli trace clear [-f] | Efface l'historique des traces en mémoire et sur disque après une confirmation y/N. |
Accès à distance
La porte d'entrée SSH optionnelle est désactivée par défaut et entièrement documentée dans Accès à distance. Toutes les opérations passent par l'application en cours d'exécution via le socket de contrôle.
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli remote [status] | Sous-commande par défaut — affiche l'état activé/en cours d'exécution, la liaison et le port, les méthodes d'authentification, l'empreinte de la clé d'hôte, l'utilisateur de connexion, une ligne de connexion toute prête et les clés autorisées. |
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey] | Active le serveur SSH. Au moins une méthode d'authentification doit rester active. |
bromure-cli remote disable | Désactive le serveur SSH. |
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint> | Gère les clés publiques autorisées (ls est la valeur par défaut). |
Inscription en entreprise
Contreparties CLI de la feuille S'inscrire dans bromure.io…, pour le provisionnement scripté d'appareils. Voir Entreprise.
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME] | Inscrit ce Mac sur un espace de travail bromure.io à l'aide d'un code généré par un administrateur. Le serveur prend par défaut la valeur de $BROMURE_MANAGED_URL ou https://bromure.io/api ; le nom de l'appareil prend par défaut le nom d'hôte du Mac. |
bromure-cli unenroll [--force] | Se déconnecte de l'espace de travail inscrit (y/N sauf avec --force). |
bromure-cli enrollment-status | Affiche l'état d'inscription (espace de travail, utilisateur, id d'installation, appareil, serveur, date d'inscription, présence du bearer/leaf-cert). « not enrolled » sort avec 0 pour que l'automatisation ne le traite pas comme un échec. |
Commandes d'intégration et internes
| Synopsis | Ce qu'elle fait |
|---|---|
bromure-cli mcp [--debug] [--api-url http://127.0.0.1:9223] | Exécute le serveur MCP d'AC sur stdio pour les outils IA. Voir Le serveur MCP d'AC. |
bromure-cli __remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Points d'entrée internes (l'interface TUI ForceCommand SSH, le pompe d'octets de terminal et les assistants de tunnel du client riche). Non destinés à un usage interactif. |
L'interface TUI distante (__remote-menu)
Lorsque l'accès distant SSH est activé, chaque connexion distante est forcée (via ForceCommand) vers une interface terminal ANSI artisanale plutôt qu'un shell — un mini-shell en écran alternatif, 256 couleurs, piloté par les touches fléchées et les chiffres, qui fonctionne sur n'importe quel PTY SSH (utilisez ssh -t). Elle reflète toute la CLI sous forme de menus :
- Espaces de travail — création via un formulaire sur un seul écran (Nom, Outil, Auth, Clé API, Mémoire, Couleur, Dossiers, Générer SSH, Paramètres complets…, Créer), actions par espace de travail (Attacher, Nouvel onglet, Décrire, Configurer…, Fusion, Routage, Worktrees…, Redémarrer…, Suspendre, Tuer pour les espaces de travail en cours d'exécution ; Démarrer, Décrire, Configurer…, Supprimer pour ceux à l'arrêt) et une vue en tableau brut. Configurer… reproduit nativement chaque volet d'éditeur de l'interface graphique.
- Modèles — les modèles installés et le catalogue de téléchargement ; sélectionner un modèle non installé propose de le récupérer via
model pullen ligne avec progression en direct. - Trace — Résumé / Noms d'hôtes / Fuites / Récentes / Effacer.
Pendant que vous êtes attaché au tmux d'un espace de travail, un raccourci magique (par défaut Ctrl-], indiqué dans la bannière) fait apparaître une superposition de contrôle dessinée par l'hôte : une arborescence d'onglets, Nouvel onglet, Worktrees…, Fusion, Routage, Modifier les paramètres…, Redémarrer…, Suspendre, Déconnecter. L'invité ne voit jamais la touche de déclenchement — remplacez-la avec le fichier remote/overlay-key ou $BROMURE_OVERLAY_KEY. Ctrl-b d déconnecte de tmux et revient au menu. Le récit complet du distant et du client riche, y compris la superposition et la configuration de la connexion, figure dans Accès à distance.
L'API d'automatisation en loopback
Le plan de contrôle est également exposable en JSON-sur-HTTP sur TCP pour le scripting depuis n'importe quel langage. Il est désactivé par défaut.
L'activer
Ouvrez Bromure → Préférences → Automatisation — le volet Serveur d'automatisation et serveur MCP.
- Activez Activer le serveur d'automatisation. Lorsqu'il est activé, le volet affiche Écoute sur 127.0.0.1:9223 ; le désactiver arrête le serveur immédiatement.
- Définissez éventuellement le Port (le champ est légendé (défaut : 9223)) et l'Adresse de liaison (défaut
127.0.0.1). Le port et l'adresse de liaison prennent effet au prochain démarrage du serveur — désactivez puis réactivez le commutateur pour les appliquer maintenant.
Vous pouvez aussi actionner le commutateur sans l'interface graphique :
defaults write io.bromure.agentic-coding automation.enabled -bool true
Avertissement : Définir l'Adresse de liaison sur autre chose que
127.0.0.1expose l'API — et le serveur MCP qu'elle soutient — au réseau, et le volet avertit Une liaison non-loopback expose l'API au réseau. Le serveur MCP n'a pas d'authentification. Il n'y a aucune authentification sur l'écouteur TCP au-delà de la frontière loopback et du contrôleBROMURE_DEBUG_CLAUDEci-dessous. Laissez l'adresse de liaison sur loopback à moins d'avoir une raison spécifique et de confiance de ne pas le faire.
Modèle d'authentification
L'écouteur TCP et le socket de contrôle servent les mêmes routes, mais avec des accès différents :
| Groupe de routes | Socket de contrôle | API d'automatisation (loopback TCP) |
|---|---|---|
| Liste des profils et des sessions, ouverture/fermeture de session | Autorisé | Autorisé |
Contrôle des VM, exec, /app/state, /debug/* | Autorisé | Nécessite BROMURE_DEBUG_CLAUDE sur l'application |
remote, /state, automations, grid-layout, prompts | Autorisé | Socket de contrôle uniquement |
Autrement dit : le socket de contrôle est la voie à accès complet, réservée au propriétaire ; l'API TCP ouvre le sous-ensemble sûr sur loopback et protège les routes puissantes derrière l'indicateur de débogage. Les segments de chemin sont encodés une seule fois en pourcentage (pour que les noms d'espaces de travail avec espaces fonctionnent) et les corps de requête jusqu'à 8 Mo sont acceptés.
Points de terminaison pour le scripting
Les routes les plus utiles :
| Point de terminaison | Transport | Objet |
|---|---|---|
GET /health | Les deux | Vivacité plus debugEnabled. |
GET /state | Socket | Instantané miroir en une fois : espaces de travail, VM, disposition de la grille, automatisations, pendingPrompts, sous-réseau vmnet. |
GET /vms | Les deux | Liste les VM en cours d'exécution. |
POST /vms | Les deux (protégé par débogage sur TCP) | Démarre une VM à partir d'une référence de profil ou d'une spécification en ligne plus les montages. |
GET /sessions / POST /sessions | Les deux | Liste les sessions ; ouvre une session pour un espace de travail. |
GET /profiles / POST /profiles | Les deux | Liste les espaces de travail ; en crée un à partir d'un document JSON (?full=1 renvoie le document complet avec les secrets vidés). |
POST /vms/<id>/exec | Les deux (protégé par débogage sur TCP) | Exécute une commande dans une VM ; interactive détourne la connexion en un flux pty brut à trames. |
GET /automations / POST /automations/<id>/run | Socket | Lit et pilote les automatisations planifiées (voir Automatisations planifiées). |
POST /prompts/<id>/answer | Socket | Répond à une invite de cycle de vie en file d'attente (voir Répondre aux invites en attente). |
Comme le chemin du socket de contrôle contient des espaces, capturez-le d'abord dans une variable :
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
# Full mirror snapshot (control socket only)
curl --unix-socket "$SOCK" http://localhost/state
# List running VMs (control socket — no debug flag needed here)
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Claude Dev"}'
# Answer a queued lifecycle prompt with one of its offered button labels
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Not Now"}'
Le sous-ensemble sûr fonctionne sur l'API TCP une fois que vous l'avez activée — par exemple, lister et ouvrir des sessions ne nécessite aucun indicateur de débogage :
# List sessions
curl http://127.0.0.1:9223/sessions
# Open a session for a workspace
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Claude Dev"}'
Remarque :
GET /vms(liste des VM en cours d'exécution) est disponible sur l'API d'automatisation TCP sans aucun indicateur de débogage. Les routes de mutation des VM —POST /vms(démarrer une VM) etPOST /vms/<id>/exec— nécessitentBROMURE_DEBUG_CLAUDEsur TCP ; pilotez-les via le socket de contrôle (comme ci-dessus) lorsque vous ne voulez pas exécuter l'application en mode débogage. La surface complète des points de terminaison — y compris les actions de worktree et d'onglet,/trace,/remoteet les routes miroir du client riche — est résumée dans l'Annexe.
Le serveur MCP d'AC (bromure-cli mcp)
bromure-cli mcp exécute un serveur MCP JSON-RPC sur stdio (nom du serveur bromure-cli) qui permet à un outil IA de gérer l'application. Il enveloppe l'API HTTP d'automatisation et AppleScript, alors activez d'abord le serveur d'automatisation — les outils de liste de sessions et de profils appellent l'API HTTP à --api-url (défaut http://127.0.0.1:9223).
Les outils qu'il expose :
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(attend jusqu'à 30 secondes la fenêtre),bromure_ac_close_sessionbromure_ac_get_profile,bromure_ac_set_profile(remplacement JSON atomique, id préservé)bromure_ac_get_profile_setting,bromure_ac_set_profile_setting(les clés incluentname,color,comments,tool,authMode,apiKey,closeAction,memoryGB,folderPathsCount,mcpServerCount,keyboardLayoutOverride,keyRepeatDelayMs,keyRepeatRateHz)
Avec --debug (et BROMURE_DEBUG_CLAUDE défini sur l'application), il ajoute bromure_ac_app_state, bromure_ac_vm_exec, bromure_ac_vm_read_file et bromure_ac_vm_write_file.
Pour le connecter à Claude Code, ajoutez ce qui suit à ~/.config/claude-code/.mcp.json (ou l'équivalent de votre client). C'est l'extrait exact que la section Configuration du client MCP du volet des Préférences propose de copier :
{
"mcpServers": {
"bromure-cli": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-cli",
"args": ["mcp"]
}
}
}
Remarque : Les outils de profil
get/setappellentosascript(AppleScript contre l'application en cours d'exécution), donc l'application graphique doit être en cours d'exécution et macOS peut demander une fois l'autorisation d'Automatisation. Le JSON de profil circule avec les secrets vidés sauf siBROMURE_DEBUG_CLAUDEest défini.
Le serveur MCP de navigateur intégré à l'espace de travail
Distinct du serveur MCP d'AC, chaque agent d'espace de travail reçoit automatiquement un serveur MCP browser — sans configuration. Il pilote le Chromium intégré de l'espace de travail, qui s'exécute dans sa propre VM jetable. Le volet MCP de l'éditeur d'espace de travail décrit les serveurs MCP propres à l'espace de travail ; le serveur de navigateur intégré est toujours présent en plus de ce que vous y ajoutez.
Le serveur expose 23 outils pour la navigation et l'inspection — browser_navigate, browser_new_tab, browser_list_tabs, browser_activate_tab, browser_close_tab, browser_back, browser_forward, browser_reload, browser_screenshot (avec une option de page complète), browser_evaluate, browser_get_text, browser_get_html, browser_get_links, browser_click, browser_fill, browser_type, browser_press_key, browser_wait_for, browser_network, browser_network_summary, browser_clear_network, browser_console et browser_pick_element (un sélecteur d'élément interactif de 60 secondes).
Le transport est un shim stdio Python généré, bromure-browser-mcp.py, déployé en lecture seule dans l'invité à /mnt/bromure-meta/. Il appelle l'hôte via le port vsock 5830 et se reconnecte indéfiniment en cas de coupure, de sorte que le client MCP ne retire jamais les outils. Un appel d'outil contre un navigateur fermé l'ouvre et attend le démarrage à froid. Comme le navigateur est une VM distincte, les instructions du serveur avertissent les agents d'atteindre le serveur de développement d'un espace de travail par l'IP LAN de l'espace de travail (hostname -I), jamais localhost.
Remarque : Sur un client riche, le flux browser-MCP de l'agent peut être raccordé sur un canal SSH afin qu'un agent distant pilote le volet de navigateur que vous voyez localement. Un seul relais est actif à la fois. Voir Accès à distance.
Les serveurs MCP HTTP que vous ajoutez dans l'éditeur peuvent s'authentifier via le courtier OAuth côté hôte : il effectue la découverte RFC 8414 et l'enregistrement dynamique de client RFC 7591 (en tant que Bromure AC), exécute un flux de code d'autorisation PKCE dans votre navigateur système et sert le rappel sur un écouteur loopback (ports 28500–28599). La page de succès indique Authorized — You can close this tab and return to Bromure AC. Tout le flux s'exécute sur l'hôte, de sorte que la VM ne voit jamais les véritables identifiants OAuth.
AppleScript (Bromure AC Suite)
Un dictionnaire de scripting, le Bromure AC Suite, est une troisième surface d'automatisation — utile pour l'orchestration et pour l'outillage de capture d'écran qui nécessite des ID de fenêtre. Ciblez application "Bromure Agentic Coding" depuis Script Editor ou osascript. Il couvre :
- Profils —
list profiles,create ac profile <name> [color <c>](renvoie un UUID),delete ac profile <name|uuid>, et aller-retour de document complet viaget profile json/set profile json(l'ensemble du profil Codable ; id préservé ; secrets stockés fusionnés sous les champs vides). - Paramètres par champ —
get profile setting … key …/set profile setting … key … to value …. - Fenêtres d'éditeur —
open profile manager,open ac profile editor,close ac profile editor,select editor category <key>, etget editor window id/get main window id(unCGWindowIDpourscreencapture -l). - Sessions —
open ac session,close ac session,list ac sessions. - État et paramètres de l'application —
get app state(JSON), plusget ac app setting/set ac app settingpour les clésautomation.enabled,automation.port,automation.bindAddress,remoteAccess.enabled,remoteAccess.port,remoteAccess.bindAddress,managed.serverURLetmanaged.acIngestURL. Définirautomation.enabledactionne le serveur HTTP en direct.
Par exemple, pour ouvrir une session :
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Claude Dev"'
Remarque : Le JSON de profil circule avec les secrets nettoyés sauf si
BROMURE_DEBUG_CLAUDEest défini. DéfinirapiKeysur une chaîne vide viaset profile settingefface la clé au lieu de la conserver — contrairement au comportement de conservation par champ vide des ponts d'aller-retour JSON. Le changement de langue n'est délibérément pas scriptable ; relancez plutôt l'application avec, par exemple,-AppleLanguages "(fr)".
Automatisations planifiées
Une automatisation planifiée est une exécution d'agent récurrente et sans surveillance liée à un espace de travail : lorsqu'elle se déclenche, elle crée un nouveau worktree git et y lance l'agent choisi avec votre prompt, et l'exécution apparaît comme un onglet de worktree ordinaire. Les automatisations sont créées et gérées depuis le tableau des automatisations (⇧⌘A, ou la section AUTOMATISATIONS de la barre latérale), et l'ensemble de la fonctionnalité — déclencheurs, syntaxe de planification, chaînage, l'écran d'injection obligatoire, l'historique des exécutions et l'endroit où les automatisations persistent — est documenté dans Automatisations. Cette section ne couvre que la surface du plan de contrôle exposée par la fonctionnalité : piloter les automatisations via l'API, répondre aux invites de décision qu'une exécution sans surveillance peut soulever, et comment le consentement fonctionne sur un terminal attaché.
Contrôler les automatisations via l'API
L'ensemble de la fonctionnalité est reflété sur le socket de contrôle pour le client riche :
| Point de terminaison | Objet |
|---|---|
GET /automations | Liste les automatisations et leur historique d'exécution. |
POST /automations | Crée ou met à jour (upsert) une automatisation. |
DELETE /automations/<id> | Supprime une automatisation. |
POST /automations/<id>/run | La déclenche maintenant (ne change pas la planification). |
POST /automations/<id>/toggle | La met en pause ou la reprend. |
Répondre aux invites en attente
Certaines décisions de cycle de vie — une mise à niveau de stockage, une réinitialisation de dérive, un effacement en cas de compromission — apparaissent normalement sous forme d'alerte locale. Lorsqu'elles sont déclenchées par un client riche distant, elles sont mises en file d'attente plutôt qu'affichées sur l'hôte : elles apparaissent dans GET /state sous pendingPrompts (chacune avec un id, un profileID, un title, un message et des libellés de boutons) et on y répond avec POST /prompts/<id>/answer :
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Upgrade"}'
Passez l'un des libellés de boutons de l'invite comme choice. Si aucun client ne répond dans les 180 secondes, l'invite se résout sur son repli sûr (annuler / pas maintenant — jamais l'option destructrice) ; si aucun client n'a interrogé /state dans les 10 secondes, elle se replie immédiatement. Ces routes sont réservées au socket de contrôle. Un client riche affiche ces invites comme des alertes locales ordinaires.
Consentement sur les terminaux attachés
Pendant qu'un terminal est attaché de manière interactive à une session — via vm exec -it, vm attach ou une attache SSH — les invites d'approbation côté hôte (utilisation d'identifiants, et similaires) sont affichées sur votre terminal, pas à l'intérieur de l'invité. L'invite indique 🔒 Bromure — approbation requise avec des choix numérotés et Choix [1-N] (Entrée ou expiration = refus). Entrée, expiration, EOF ou détachement signifient tous refus, de sorte qu'un invité compromis ne peut jamais falsifier une approbation. Le tmux de l'invité est ensuite redessiné.
Points de terminaison de débogage (BROMURE_DEBUG_CLAUDE)
Lancer l'application avec BROMURE_DEBUG_CLAUDE défini déverrouille des routes supplémentaires sur l'API d'automatisation TCP et lève le contrôle de débogage sur le contrôle des VM :
POST /sessions/<id>/execet les routes de contrôle/vms/…sans le socket de contrôle.GET /app/state.GET /debug/ui-shot?path=…&which=unified|picker|editor— l'application rend sa propre fenêtre en PNG (aucune autorisation d'Enregistrement de l'écran nécessaire) et renvoie un vidage des cadres de sous-vues ; la sortie par défaut est/tmp/bromure-ui-shot.png.POST /debug/editor— pilote l'éditeur de paramètres pour l'outil de capture d'écran.POST /detect/prompt-injection— exécute les véritables détecteurs et renvoie leur verdict (cette route nécessite l'indicateur de débogage même sur le socket de contrôle).
L'indicateur permet également aux secrets de circuler tels quels à travers les ponts de JSON de profil AppleScript et MCP, et est requis par les outils de VM de bromure-cli mcp --debug. GET /health signale debugEnabled pour que vous puissiez savoir dans quel mode se trouve l'application.
Avertissement :
BROMURE_DEBUG_CLAUDEsupprime le contrôle de sécurité qui maintient normalementexec, le contrôle des VM et les secrets bruts de profil hors de l'API TCP loopback. N'exécutez l'application avec cet indicateur que sur une machine que vous contrôlez, et ne le combinez jamais avec une adresse de liaison non-loopback — cela exposerait un accès shell complet aux VM, des secrets non expurgés et des captures de fenêtre à quiconque peut atteindre le port. Il est distinct deBROMURE_AC_DEBUG(journalisation d'événements sur stderr) et deBROMURE_CLI_DEBUG(diagnostics de socket de la CLI), qui sont des commutateurs de journalisation inoffensifs. Les points de terminaison de débogage, toutes les variables d'environnement et chaque emplacement de fichier abordé dans ce chapitre sont catalogués dans l'Annexe.