CLI, Automatisierung & MCP
Alles, was Sie in der App tun können, können Sie auch ohne das Fenster tun. Dieselbe Binärdatei, die die GUI bereitstellt — bromure-cli, innerhalb von Bromure Agentic Coding.app/Contents/MacOS/ — ist eine vollständige Multi-Befehl-CLI, eine HTTP-Steuerungsebene, zwei MCP-Server, ein AppleScript-Wörterbuch und ein Scheduler. Dieses Kapitel ist die Referenz für sie alle.
Vier Automatisierungs-Oberflächen setzen auf einer einzigen Steuerungsebene auf:
- Die Kommandozeile
bromure-cli— eine CLI im Docker-/kubectl-Stil zum Erstellen von Arbeitsbereichen, Starten von VMs, Anhängen von Terminals, Ausführen von Befehlen und Lesen von Traces. - Die Automatisierungs-API — dieselbe Steuerungsebene, bereitgestellt als JSON-over-HTTP auf der Loopback-Schnittstelle, für das Scripting aus jeder Sprache.
- MCP-Server — ein stdio-Server, mit dem ein KI-Agent (Claude Code, Claude Desktop) die App verwalten kann, und ein
browser-Server, mit dem ein Agent das eingebettete Chromium seines Arbeitsbereichs steuern kann. - AppleScript — das Wörterbuch Bromure AC Suite für macOS-Scripting und Screenshot-Werkzeuge.
Geplante Automatisierungen — wiederkehrende, unbeaufsichtigte Agent-Läufe — bauen auf derselben Steuerungsebene auf und werden am Ende des Kapitels behandelt.
Die Steuerungsebene: Socket und API
Jede dieser Oberflächen kommuniziert letztlich per HTTP mit der laufenden App über einen von zwei Transportwegen:
| Transport | Ort | Zugriffskontrolle | Standardmäßig aktiv |
|---|---|---|---|
| Steuerungs-Socket | ~/Library/Application Support/BromureAC/control.sock (Unix-Domain, HTTP/1.1) | Dateiberechtigungen — der Socket hat den Modus 0600, nur für den Eigentümer. Das Erreichen der Datei ist die Autorisierung, im Docker-Socket-Stil. | Ja, immer wenn die App oder ein Headless-Agent läuft |
| Automatisierungs-API | 127.0.0.1:9223 (TCP) | Standardmäßig nur Loopback; Introspektions- und Mutations-Routen erfordern zusätzlich die Umgebungsvariable BROMURE_DEBUG_CLAUDE (siehe Debug-Endpunkte) | Nein — optional aktivierbar unter Einstellungen → Automatisierung |
Die CLI kommuniziert nie direkt mit einer VM. Jeder Unterbefehl ist ein schlanker HTTP-Client über den Steuerungs-Socket, sodass dieselben Befehle lokal funktionieren und — wenn der Socket über SSH getunnelt wird — gegen eine entfernte Instanz von einem Rich Client. Wenn kein Agent läuft, während Sie einen Befehl aufrufen, der einen benötigt, startet die CLI automatisch einen fensterlosen Hintergrund-Agenten (bromure-cli run --headless) und wartet bis zu 40 Sekunden darauf, dass dieser /health beantwortet. Schreibgeschützte Befehle (vm ls, describe, trace …) starten nicht automatisch; sie geben stattdessen No bromure-cli agent running. aus.
Hinweis: Der Steuerungs-Socket ist immer verfügbar, während die App läuft, und ist unabhängig vom Schalter Automatisierungsserver aktivieren. Dieser Schalter steuert nur den TCP-Listener auf Port 9223. Sie müssen die Automatisierungs-API nicht aktivieren, um die
bromure-cli-CLI zu verwenden.
Die Kommandozeile bromure-cli
Sie können die Binärdatei über ihren vollständigen Bundle-Pfad aufrufen, aber die App bietet eine einmalige Installation eines kurzen Alias an. Beim Start zeigt sie einen Hinweis — Das Kommandozeilen-Werkzeug „bromure-cli" installieren? — mit den Schaltflächen Installieren / Jetzt nicht / Nicht mehr fragen. Die Wahl von Installieren verlinkt /usr/local/bin/bromure-cli per Symlink auf die App-Binärdatei (eine Administrator-Abfrage). Unter dem Namen bromure-cli verbirgt die Binärdatei app-interne Befehle — Image-Verwaltung, den mcp-Server und die GUI-Standardaktion run — und stellt nur die terminalorientierten Gruppen bereit (Arbeitsbereiche, Tracing, lokale Inferenz, Enterprise, remote); ein bloßes bromure-cli gibt Hilfe aus, anstatt die App zu starten. Als bromure-cli aufgerufen, ist alles verfügbar und der Standard-Unterbefehl ist run (die GUI). Die folgenden Beispiele verwenden bromure-cli; ersetzen Sie bromure-cli beliebig für die Befehle, die es bereitstellt.
Befehle akzeptieren eine Arbeitsbereich-id, ein Short-id-Präfix oder dessen name, wo immer ein Arbeitsbereich-Argument gezeigt wird. Arbeitsbereiche sind die persistenten VM-Konfigurationen, die in Arbeitsbereiche beschrieben sind; die Befehlsgruppen vm und workspaces sind Aliase füreinander.
Die App und der Hintergrund-Agent
| Syntax | Funktion |
|---|---|
bromure-cli run [--headless] | Standard-Unterbefehl (versteckt) — startet die GUI. --headless führt einen fensterlosen Menüleisten-Hilfsagenten aus; dies ist, was die CLI automatisch startet, um den Steuerungs-Socket zu bedienen. |
Image-Verwaltung
Das Base-Image wird einmalig installiert. Diese Befehle sind unter dem Alias bromure-cli verborgen.
| Syntax | Funktion |
|---|---|
bromure-cli init [--build-local] | Installiert das Ubuntu-Base-Image: lädt das vorgefertigte Image herunter und weicht bei einem Download-Fehler auf einen etwa 10-minütigen lokalen Build aus. --build-local erzwingt den lokalen Build. |
bromure-cli info | Gibt Version, virtuelle Größe, Größe auf der Festplatte und Pfad des Base-Image aus. |
bromure-cli reset [--yes] | Löscht das Base-Image (Festplatte, EFI-Variablen, Versionsstempel, Zustand), sodass das nächste init neu beginnt; fragt nach Bestätigung, sofern nicht --yes angegeben ist. |
bromure-cli init-foss-image --output <dir> | Nur Publish-Pipeline — erstellt das weiterverteilbare, ausschließlich Freie-Software-Base-Image in <dir>. |
bromure-cli verify-image --disk <path> [--timeout 300] | Nur Publish-Pipeline — startet einen verwerfbaren Klon headless und verlangt die serielle Login-Eingabeaufforderung innerhalb des Timeouts. |
Hinweis: Es gibt keinen
setup-Unterbefehl — dieser gehört zum Schwesterprodukt Bromure (Browser). Der Befehl zur Image-Installation für Agentic Coding lautetinit. Wenn kein Base-Image vorhanden ist, leitet Sie der Start der GUI stattdessen in den In-App-Einrichtungsablauf.
Arbeitsbereich- und VM-Steuerung
Dies ist die Kerngruppe. vm run ist bewusst Docker-artig gestaltet: Es startet einen Arbeitsbereich und übergibt Ihr Terminal an die gemeinsam genutzte bromure-tmux-Sitzung des Gasts.
| Syntax | Funktion |
|---|---|
bromure-cli vm ls | Listet jeden Arbeitsbereich mit Live-Status (off / suspended / booting / running), Betriebszeit, Fenster-Anhängezustand, tmux-Tabs als Baum (* markiert den aktiven Tab) und laufenden Docker-Containern auf. |
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm] | Startet die VM eines Arbeitsbereichs oder erstellt spontan einen Wegwerf-Arbeitsbereich. Standard: hängt Ihr Terminal an das tmux des Gasts an. |
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w] | Hängt das Terminal an das tmux der VM an (optional zu einem Tab springend), führt docker exec -it in einen laufenden Container aus (Standard-Shell bash) oder öffnet/verbindet das GUI-Fenster erneut mit -w/--window. |
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…> | Führt einen Befehl innerhalb der VM aus (kubectl-artig, nach --). -it öffnet ein interaktives pty; lassen Sie den Befehl mit -it weg, um eine Shell zu erhalten. Exit-Codes des Gasts werden weitergereicht. |
bromure-cli vm kill <vm> [--suspend] | Stoppt eine VM: sauberes Herunterfahren oder Suspend (RAM auf Festplatte gesichert) mit --suspend. |
bromure-cli vm reboot <workspace> [--hard] | Startet einen laufenden Arbeitsbereich an Ort und Stelle neu; standardmäßig sanft, --hard reißt ihn sofort ab. |
bromure-cli vm describe <workspace> | Gibt die Einstellungen des Arbeitsbereichs sowie Live-Laufzeitdetails aus, wenn er läuft (Status, IP, vCPUs, Fusion-Status, Festplattennutzung aus dem Gast-df, Tabs, Container, belegter Speicher). |
bromure-cli vm ports <workspace> (or vm <workspace> -L) | Zeigt die lauschenden Ports eines laufenden Arbeitsbereichs (Live-ss als root): PORT, PROTO, ADDRESS, PROCESS, wobei reine Loopback-Bindungen markiert sind. |
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->] | Erstellt einen Arbeitsbereich headless. --from-json wendet ein vollständiges Profil-JSON-Dokument an (Flags überschreiben passende Felder); --generate-ssh erzeugt einen SSH-Schlüssel auf Host-Seite und gibt den öffentlichen Schlüssel aus. |
bromure-cli workspaces edit <workspace> [--from-json <file|->] | Ruft die vollständige Konfiguration des Arbeitsbereichs ab, öffnet sie in $VISUAL/$EDITOR (Fallback vi) und speichert Änderungen zurück. Geheimnisse werden leer angezeigt — leer lassen zum Beibehalten, tippen zum Ersetzen. --from-json wendet ein Dokument nicht-interaktiv an. |
bromure-cli workspaces rm <workspace> [-f] | Löscht einen Arbeitsbereich und ALLE seine Daten (Festplatte + Home) nach einer y/N-Bestätigung, die mit -f übersprungen wird. |
bromure-cli workspaces ssh-keygen <workspace> | Erzeugt einen neuen SSH-Schlüssel auf Host-Seite für den Arbeitsbereich und gibt den öffentlichen Schlüssel für Ihren Git-Host aus. |
Einige betriebliche Details, die man kennen sollte:
vm run-Flags.--toolistclaude,codexodergrok;--authisttoken,subscriptionoderbedrock.-v/--volume <hostdir>hängt einen Host-Ordner unter~/<basename>im Gast ein (wiederholbar, bis zu 8).-d/--detachstartet die VM und kehrt zurück, anstatt sich anzuhängen.--rmlöscht den Arbeitsbereich und seine Festplatte, wenn die VM stoppt. Lösen Sie sich von einem angehängten tmux mitCtrl-b d— das lässt die VM weiterlaufen.- TTY-bewusst. Der Docker-artige Standard, das Terminal an tmux zu übergeben, gilt nur auf einem echten Terminal; per Pipe oder Skript ausgeführte Aufrufe verhalten sich stillschweigend so, als hätten Sie
-dübergeben. workspaces create-Auth. Fürcreateakzeptiert--authauchlocal. Farben sindblue,red,green,orange,purple,pink,tealodergray.- Leer-Beibehalten beim Bearbeiten.
workspaces editexportiert die gesamte Konfiguration mit geleerten Geheimnissen; ein zurückgespeichertes Dokument mit einem leeren Geheimnis behält den gespeicherten Wert bei, sodass ein Round-Trip Ihre Schlüssel niemals löschen kann. Ein unveränderter Puffer speichert nichts; ungültiges JSON bricht ab. - Exec wartet.
vm execwartet bis zu 10 Sekunden auf den Shell-Agenten des Gasts; ein502bedeutet, dass die VM möglicherweise nicht läuft oder der Name nicht passte. Freigabe-Prompts, die während einer angehängten Sitzung ausgelöst werden, werden auf Ihrem Terminal dargestellt (siehe Zustimmung über angehängte Terminals), niemals innerhalb des Gasts.
Modelle, Routing und Fusion
Lokale Inferenz wird ausführlich in Lokale Modelle behandelt und die Mehr-Modell-Synthese in Fusion; die CLI-Schalter sind:
| Syntax | Funktion |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Verwaltet lokale MLX-Inferenzmodelle — durchsucht den kuratierten Katalog, lädt mit Live-Fortschritt herunter, wählt pro Arbeitsbereich aus, entfernt. |
bromure-cli vm fusion enable|disable <vm> | Aktiviert oder deaktiviert Fusion auf einer laufenden VM. Erfordert, dass im Arbeitsbereich zwei oder mehr Modelle konfiguriert sind. |
bromure-cli vm routing cloud|local|hybrid <vm> | Legt das LLM-Backend-Routing für eine laufende VM fest. |
bromure-cli vm hybrid budget <tokens> <vm> | ttft <seconds> <vm> | split <percent> <vm> | Feinabstimmung des Hybrid-Routings: Cloud-Token-Obergrenze pro gleitende 24 Stunden (0 = unbegrenzt), weicher Time-to-First-Token-Fallback-Schwellenwert (Standard 5 s) und Prozentsatz neuer Sitzungen, die auf lokal festgelegt sind (0–100). |
fusion akzeptiert auch on/engage und off/disengage als Synonyme.
Trace-Inspektion
Diese lesen die MITM-Sitzungs-Traces pro Arbeitsbereich. Sie liefern nichts zurück, sofern im Arbeitsbereich nicht Tracing aktiviert ist — siehe Tracing-Einstellungen — und die vollständige Erläuterung findet sich in Tracing.
| Syntax | Funktion |
|---|---|
bromure-cli trace ls [workspace] [--limit 50] | Listet aktuelle Anfragen auf: TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS (Flags umfassen swap×N, LEAK×N, conv). |
bromure-cli trace summary [workspace] | Aggregiert Summen, Statusklassen, Swap-/Leak-/Konversations-Zählungen und Top-Hosts. |
bromure-cli trace hostnames [workspace] | Listet eindeutige Hosts und deren Anfragezahlen auf. |
bromure-cli trace leaks [workspace] | Zeigt Anfragen mit vermuteten Zugangsdaten-Lecks (Header, Vorschau, Verdacht). |
bromure-cli trace clear [-f] | Löscht die Trace-Historie im Speicher und auf der Festplatte nach einer y/N-Bestätigung. |
Fernzugriff
Die optionale SSH-Eingangstür ist standardmäßig deaktiviert und vollständig in Fernzugriff dokumentiert. Alle Vorgänge laufen über die laufende App über den Steuerungs-Socket.
| Syntax | Funktion |
|---|---|
bromure-cli remote [status] | Standard-Unterbefehl — gibt Aktiv-/Laufstatus, Bindung und Port, Authentifizierungsmethoden, Host-Key-Fingerabdruck, Login-Benutzer, eine fertige Verbindungszeile und autorisierte Schlüssel aus. |
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey] | Aktiviert den SSH-Server. Mindestens eine Authentifizierungsmethode muss aktiviert bleiben. |
bromure-cli remote disable | Schaltet den SSH-Server aus. |
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint> | Verwaltet autorisierte öffentliche Schlüssel (ls ist der Standard). |
Enterprise-Registrierung
CLI-Entsprechungen des Dialogs In bromure.io registrieren…, für skriptbasierte Geräte-Bereitstellung. Siehe Enterprise.
| Syntax | Funktion |
|---|---|
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME] | Registriert diesen Mac bei einem bromure.io-Arbeitsbereich mit einem vom Administrator erzeugten Code. Der Server ist standardmäßig $BROMURE_MANAGED_URL oder https://bromure.io/api; der Gerätename ist standardmäßig der Hostname des Macs. |
bromure-cli unenroll [--force] | Meldet sich vom registrierten Arbeitsbereich ab (y/N, sofern nicht --force). |
bromure-cli enrollment-status | Gibt den Registrierungsstatus aus (Arbeitsbereich, Benutzer, Installations-id, Gerät, Server, Registrierungsdatum, Vorhandensein von Bearer-/Leaf-Zertifikat). „not enrolled" beendet mit 0, damit Automatisierung es nicht als Fehler behandelt. |
Integration und interne Befehle
| Syntax | Funktion |
|---|---|
bromure-cli mcp [--debug] [--api-url http://127.0.0.1:9223] | Führt den AC-MCP-Server über stdio für KI-Werkzeuge aus. Siehe Der AC-MCP-Server. |
bromure-cli __remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Interne Einstiegspunkte (das SSH-ForceCommand-TUI, die Terminal-Byte-Pumpe und die Rich-Client-Tunnel-Helfer). Nicht für den interaktiven Gebrauch. |
Das Remote-TUI (__remote-menu)
Wenn der SSH-Fernzugriff aktiviert ist, wird jede Remote-Anmeldung (über ForceCommand) in eine handgefertigte ANSI-Terminal-Oberfläche statt in eine Shell gezwungen — eine Alternate-Screen-Minishell mit 256 Farben, die per Pfeiltasten und Ziffern gesteuert wird und über jedes SSH-PTY funktioniert (verwenden Sie ssh -t). Sie spiegelt die gesamte CLI als Menüs wider:
- Arbeitsbereiche — Erstellen mit einem Einzelbildschirm-Formular (Name, Tool, Auth, API-Schlüssel, Speicher, Farbe, Ordner, SSH generieren, Vollständige Einstellungen…, Erstellen), Aktionen pro Arbeitsbereich (Anhängen, Neuer Tab, Beschreiben, Konfigurieren…, Fusion, Routing, Worktrees…, Neustart…, Suspend, Beenden für laufende Arbeitsbereiche; Starten, Beschreiben, Konfigurieren…, Löschen für ausgeschaltete) und eine reine Tabellenansicht. Konfigurieren… reproduziert jeden GUI-Editor-Bereich nativ.
- Modelle — installierte Modelle und der Download-Katalog; die Auswahl eines nicht installierten Modells bietet an, es inline mit Live-Fortschritt per
model pullherunterzuladen. - Trace — Zusammenfassung / Hostnamen / Lecks / Aktuell / Löschen.
Während Sie an das tmux eines Arbeitsbereichs angehängt sind, öffnet ein magischer Tastenakkord (Standard Ctrl-], im Banner angezeigt) ein Host-gezeichnetes Controller-Overlay: einen Tab-Baum, Neuer Tab, Worktrees…, Fusion, Routing, Einstellungen bearbeiten…, Neustart…, Suspend, Trennen. Der Gast sieht die Auslösetaste nie — überschreiben Sie sie mit der Datei remote/overlay-key oder $BROMURE_OVERLAY_KEY. Ctrl-b d trennt vom tmux zurück zum Menü. Die vollständige Erläuterung zu Remote und Rich Client, einschließlich Overlay und Verbindungsaufbau, findet sich in Fernzugriff.
Die Loopback-Automatisierungs-API
Die Steuerungsebene lässt sich auch als JSON-over-HTTP über TCP für das Scripting aus jeder Sprache bereitstellen. Sie ist standardmäßig deaktiviert.
Aktivierung
Öffnen Sie Bromure → Einstellungen → Automatisierung — den Bereich Automatisierungs-API & MCP-Server.
- Aktivieren Sie Automatisierungsserver aktivieren. Wenn er aktiv ist, zeigt der Bereich Lauscht auf 127.0.0.1:9223 an; das Deaktivieren stoppt den Server sofort.
- Legen Sie optional Port fest (das Feld ist mit (Standard: 9223) beschriftet) und Bind-Adresse (Standard
127.0.0.1). Port und Bind-Adresse werden beim nächsten Start des Servers wirksam — schalten Sie den Schalter aus und wieder ein, um sie jetzt anzuwenden.
Sie können den Schalter auch ohne die GUI umlegen:
defaults write io.bromure.agentic-coding automation.enabled -bool true
Warnung: Wenn Sie Bind-Adresse auf etwas anderes als
127.0.0.1setzen, wird die API — und der MCP-Server, den sie stützt — dem Netzwerk zugänglich gemacht, und der Bereich warnt Nicht-Loopback-Bindung macht die API im Netzwerk zugänglich. Der MCP-Server hat keine Authentifizierung. Über die Loopback-Grenze und die unten beschriebeneBROMURE_DEBUG_CLAUDE-Kontrolle hinaus gibt es keine Authentifizierung auf dem TCP-Listener. Belassen Sie die Bind-Adresse auf Loopback, sofern Sie keinen konkreten, vertrauenswürdigen Grund dagegen haben.
Authentifizierungsmodell
Der TCP-Listener und der Steuerungs-Socket bedienen dieselben Routen, jedoch mit unterschiedlichem Zugriff:
| Routengruppe | Steuerungs-Socket | Automatisierungs-API (TCP-Loopback) |
|---|---|---|
| Profil- und Sitzungs-Auflistung, Sitzung öffnen/schließen | Erlaubt | Erlaubt |
VM-Steuerung, exec, /app/state, /debug/* | Erlaubt | Erfordert BROMURE_DEBUG_CLAUDE in der App |
remote, /state, automations, grid-layout, prompts | Erlaubt | Nur Steuerungs-Socket |
Mit anderen Worten: Der Steuerungs-Socket ist der Pfad mit Vollzugriff, nur für den Eigentümer; die TCP-API öffnet die sichere Teilmenge auf Loopback und schützt die mächtigen Routen hinter dem Debug-Flag. Pfadsegmente sind einfach prozentkodiert (sodass Arbeitsbereich-Namen mit Leerzeichen funktionieren), und Anfrage-Bodys bis zu 8 MB werden akzeptiert.
Endpunkte für das Scripting
Die nützlichsten Routen:
| Endpunkt | Transport | Zweck |
|---|---|---|
GET /health | Beide | Liveness plus debugEnabled. |
GET /state | Socket | Einmaliger Spiegelungs-Snapshot: Arbeitsbereiche, VMs, Grid-Layout, Automatisierungen, pendingPrompts, vmnet-Subnetz. |
GET /vms | Beide | Listet laufende VMs auf. |
POST /vms | Beide (auf TCP debug-geschützt) | Startet eine VM aus einer Profilreferenz oder einer Inline-Spezifikation samt Mounts. |
GET /sessions / POST /sessions | Beide | Listet Sitzungen auf; öffnet eine Sitzung für einen Arbeitsbereich. |
GET /profiles / POST /profiles | Beide | Listet Arbeitsbereiche auf; erstellt einen aus einem JSON-Dokument (?full=1 gibt das gesamte Dokument mit geleerten Geheimnissen zurück). |
POST /vms/<id>/exec | Beide (auf TCP debug-geschützt) | Führt einen Befehl in einer VM aus; interactive übernimmt die Verbindung als roher, gerahmter pty-Stream. |
GET /automations / POST /automations/<id>/run | Socket | Liest und steuert geplante Automatisierungen (siehe Geplante Automatisierungen). |
POST /prompts/<id>/answer | Socket | Beantwortet einen in der Warteschlange befindlichen Lebenszyklus-Prompt (siehe Ausstehende Prompts beantworten). |
Da der Pfad des Steuerungs-Sockets Leerzeichen enthält, erfassen Sie ihn zuerst in einer Variablen:
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"}'
Die sichere Teilmenge funktioniert über die TCP-API, sobald Sie sie aktiviert haben — zum Beispiel benötigt das Auflisten und Öffnen von Sitzungen kein Debug-Flag:
# 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"}'
Hinweis:
GET /vms(Auflisten laufender VMs) ist über die TCP-Automatisierungs-API ohne Debug-Flag verfügbar. Verändernde VM-Routen —POST /vms(VM starten) undPOST /vms/<id>/exec— erfordernBROMURE_DEBUG_CLAUDEüber TCP; steuern Sie sie über den Steuerungs-Socket (wie oben), wenn Sie die App nicht im Debug-Modus ausführen möchten. Die vollständige Endpunkt-Oberfläche — einschließlich Worktree- und Tab-Aktionen,/trace,/remoteund der Rich-Client-Spiegelungs-Routen — ist im Anhang zusammengefasst.
Der AC-MCP-Server (bromure-cli mcp)
bromure-cli mcp führt einen stdio-JSON-RPC-MCP-Server aus (Servername bromure-cli), mit dem ein KI-Werkzeug die App verwalten kann. Er umschließt die Automatisierungs-HTTP-API und AppleScript, also aktivieren Sie zuerst den Automatisierungsserver — die Werkzeuge zum Auflisten von Sitzungen und Profilen rufen die HTTP-API unter --api-url auf (Standard http://127.0.0.1:9223).
Die Werkzeuge, die er bereitstellt:
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(wartet bis zu 30 Sekunden auf das Fenster),bromure_ac_close_sessionbromure_ac_get_profile,bromure_ac_set_profile(atomarer JSON-Ersatz, id bleibt erhalten)bromure_ac_get_profile_setting,bromure_ac_set_profile_setting(Schlüssel umfassenname,color,comments,tool,authMode,apiKey,closeAction,memoryGB,folderPathsCount,mcpServerCount,keyboardLayoutOverride,keyRepeatDelayMs,keyRepeatRateHz)
Mit --debug (und gesetztem BROMURE_DEBUG_CLAUDE in der App) fügt er bromure_ac_app_state, bromure_ac_vm_exec, bromure_ac_vm_read_file und bromure_ac_vm_write_file hinzu.
Um ihn in Claude Code einzubinden, fügen Sie das Folgende zu ~/.config/claude-code/.mcp.json hinzu (oder dem Äquivalent Ihres Clients). Dies ist genau der Ausschnitt, den der Abschnitt MCP-Client-Konfiguration des Einstellungsbereichs zum Kopieren anbietet:
{
"mcpServers": {
"bromure-cli": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-cli",
"args": ["mcp"]
}
}
}
Hinweis: Die
get/set-Profil-Werkzeuge rufenosascriptauf (AppleScript gegen die laufende App), daher muss die GUI-App laufen und macOS fragt möglicherweise einmal nach der Automatisierungsberechtigung. Profil-JSON wird mit geleerten Geheimnissen übertragen, sofern nichtBROMURE_DEBUG_CLAUDEgesetzt ist.
Der Browser-MCP-Server im Arbeitsbereich
Getrennt vom AC-MCP-Server erhält jeder Arbeitsbereich-Agent automatisch einen browser-MCP-Server — ohne Konfiguration. Er steuert das eingebettete Chromium des Arbeitsbereichs, das in seiner eigenen verwerfbaren VM läuft. Der MCP-Bereich des Arbeitsbereich-Editors beschreibt die eigenen MCP-Server des Arbeitsbereichs; der eingebaute Browser-Server ist stets zusätzlich zu allem vorhanden, was Sie dort hinzufügen.
Der Server stellt 23 Werkzeuge für Navigation und Inspektion bereit — browser_navigate, browser_new_tab, browser_list_tabs, browser_activate_tab, browser_close_tab, browser_back, browser_forward, browser_reload, browser_screenshot (mit einer Ganzseiten-Option), 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 und browser_pick_element (ein interaktiver 60-Sekunden-Elementauswähler).
Der Transport ist ein generierter Python-stdio-Shim, bromure-browser-mcp.py, der schreibgeschützt im Gast unter /mnt/bromure-meta/ bereitgestellt wird. Er wählt den Host über vsock-Port 5830 an und verbindet sich bei Abbrüchen endlos neu, sodass der MCP-Client die Werkzeuge nie zurückzieht. Ein Werkzeugaufruf gegen einen geschlossenen Browser öffnet ihn und wartet auf den Kaltstart. Da der Browser eine separate VM ist, weisen die Server-Anweisungen die Agenten an, einen Dev-Server des Arbeitsbereichs über die LAN-IP des Arbeitsbereichs (hostname -I) zu erreichen, niemals über localhost.
Hinweis: Auf einem Rich Client kann der Browser-MCP-Stream des Agenten über einen SSH-Kanal eingeschleift werden, sodass ein entfernter Agent den Browser-Bereich steuert, den Sie lokal sehen. Es ist jeweils ein Relay aktiv. Siehe Fernzugriff.
HTTP-MCP-Server, die Sie im Editor hinzufügen, können sich über den OAuth-Broker auf Host-Seite authentifizieren: Er führt RFC-8414-Discovery und RFC-7591-Dynamic-Client-Registration durch (als Bromure AC), führt einen PKCE-Authorization-Code-Flow in Ihrem Systembrowser aus und bedient den Callback über einen Loopback-Listener (Ports 28500–28599). Die Erfolgsseite zeigt Authorized — You can close this tab and return to Bromure AC. Der gesamte Ablauf läuft auf dem Host, sodass die VM nie echte OAuth-Zugangsdaten sieht.
AppleScript (Bromure AC Suite)
Ein Scripting-Wörterbuch, die Bromure AC Suite, ist eine dritte Automatisierungs-Oberfläche — nützlich für Orchestrierung und für Screenshot-Werkzeuge, die Fenster-IDs benötigen. Zielen Sie mit application "Bromure Agentic Coding" aus dem Skripteditor oder osascript. Sie umfasst:
- Profile —
list profiles,create ac profile <name> [color <c>](gibt eine UUID zurück),delete ac profile <name|uuid>und vollständiger Dokument-Round-Trip überget profile json/set profile json(das gesamte Codable-Profil; id bleibt erhalten; gespeicherte Geheimnisse werden unter leeren Feldern zusammengeführt). - Einstellungen pro Feld —
get profile setting … key …/set profile setting … key … to value …. - Editor-Fenster —
open profile manager,open ac profile editor,close ac profile editor,select editor category <key>undget editor window id/get main window id(eineCGWindowIDfürscreencapture -l). - Sitzungen —
open ac session,close ac session,list ac sessions. - App-Zustand und -Einstellungen —
get app state(JSON), sowieget ac app setting/set ac app settingfür die Schlüsselautomation.enabled,automation.port,automation.bindAddress,remoteAccess.enabled,remoteAccess.port,remoteAccess.bindAddress,managed.serverURLundmanaged.acIngestURL. Das Setzen vonautomation.enabledschaltet den HTTP-Server live um.
Zum Beispiel, um eine Sitzung zu öffnen:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Claude Dev"'
Hinweis: Profil-JSON wird mit bereinigten Geheimnissen übertragen, sofern nicht
BROMURE_DEBUG_CLAUDEgesetzt ist. Das Setzen vonapiKeyauf einen leeren String überset profile settinglöscht den Schlüssel, anstatt ihn beizubehalten — anders als das Leer-Beibehalten-Verhalten der JSON-Round-Trip-Brücken. Das Umschalten der Sprache ist bewusst nicht skriptbar; starten Sie die App stattdessen zum Beispiel mit-AppleLanguages "(fr)"neu.
Geplante Automatisierungen
Eine geplante Automatisierung ist ein wiederkehrender, unbeaufsichtigter Agent-Lauf, der an einen Arbeitsbereich gebunden ist: Wenn sie ausgelöst wird, erstellt sie einen frischen Git-Worktree und startet dort den gewählten Agenten mit Ihrem Prompt, und der Lauf erscheint als gewöhnlicher Worktree-Tab. Automatisierungen werden auf dem Automatisierungs-Board (⇧⌘A oder dem Abschnitt AUTOMATISIERUNGEN der Seitenleiste) erstellt und verwaltet, und die gesamte Funktion — Auslöser, Zeitplan-Syntax, Verkettung, der obligatorische Injektions-Bildschirm, Lauf-Historie und wo Automatisierungen persistiert werden — ist in Automatisierungen dokumentiert. Dieser Abschnitt behandelt nur die Steuerungsebenen-Oberfläche, die die Funktion bereitstellt: das Steuern von Automatisierungen über die API, das Beantworten der Entscheidungs-Prompts, die ein unbeaufsichtigter Lauf auslösen kann, und wie die Zustimmung über ein angehängtes Terminal funktioniert.
Automatisierungen über die API steuern
Die gesamte Funktion wird für den Rich Client auf dem Steuerungs-Socket gespiegelt:
| Endpunkt | Zweck |
|---|---|
GET /automations | Listet Automatisierungen und ihre Lauf-Historie auf. |
POST /automations | Erstellt oder aktualisiert (Upsert) eine Automatisierung. |
DELETE /automations/<id> | Löscht eine Automatisierung. |
POST /automations/<id>/run | Löst sie jetzt aus (ändert den Zeitplan nicht). |
POST /automations/<id>/toggle | Pausiert oder setzt sie fort. |
Ausstehende Prompts beantworten
Einige Lebenszyklus-Entscheidungen — eine Speicher-Erweiterung, ein Drift-Reset, eine Kompromittierungs-Löschung — erscheinen normalerweise als lokaler Hinweis. Wenn sie stattdessen von einem entfernten Rich Client ausgelöst werden, werden sie in eine Warteschlange gestellt, statt auf dem Host angezeigt zu werden: Sie erscheinen in GET /state unter pendingPrompts (jeweils mit einem id, profileID, title, message und Schaltflächenbeschriftungen) und werden mit POST /prompts/<id>/answer beantwortet:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Upgrade"}'
Übergeben Sie eine der Schaltflächenbeschriftungen des Prompts als choice. Wenn kein Client innerhalb von 180 Sekunden antwortet, wird der Prompt auf seinen sicheren Fallback aufgelöst (Abbrechen / Jetzt nicht — niemals die destruktive Option); wenn kein Client innerhalb von 10 Sekunden /state abgefragt hat, greift der Fallback sofort. Diese Routen sind nur über den Steuerungs-Socket verfügbar. Ein Rich Client stellt diese Prompts als gewöhnliche lokale Hinweise dar.
Zustimmung über angehängte Terminals
Während ein Terminal interaktiv an eine Sitzung angehängt ist — über vm exec -it, vm attach oder ein SSH-Attach — werden Freigabe-Prompts auf Host-Seite (Nutzung von Zugangsdaten und Ähnliches) auf Ihrem Terminal dargestellt, nicht innerhalb des Gasts. Der Prompt zeigt 🔒 Bromure — Freigabe erforderlich mit nummerierten Auswahlmöglichkeiten und Choice [1-N] (Enter or timeout = deny). Enter, Timeout, EOF oder das Ablösen bedeuten alle Ablehnung, sodass ein kompromittierter Gast niemals eine Freigabe fälschen kann. Das Gast-tmux wird danach neu gezeichnet.
Debug-Endpunkte (BROMURE_DEBUG_CLAUDE)
Der Start der App mit gesetztem BROMURE_DEBUG_CLAUDE schaltet zusätzliche Routen auf der TCP-Automatisierungs-API frei und hebt die Debug-Kontrolle für die VM-Steuerung auf:
POST /sessions/<id>/execund die/vms/…-Steuerungsrouten ohne den Steuerungs-Socket.GET /app/state.GET /debug/ui-shot?path=…&which=unified|picker|editor— die App rendert ihr eigenes Fenster in ein PNG (keine Bildschirmaufnahme-Berechtigung erforderlich) und gibt einen Subview-Frame-Dump zurück; die Standardausgabe ist/tmp/bromure-ui-shot.png.POST /debug/editor— steuert den Einstellungseditor für das Screenshot-Werkzeug.POST /detect/prompt-injection— führt die echten Detektoren aus und gibt deren Urteil zurück (diese Route erfordert das Debug-Flag sogar über den Steuerungs-Socket).
Das Flag lässt außerdem Geheimnisse wortgetreu durch die AppleScript- und MCP-Profil-JSON-Brücken laufen und wird von den VM-Werkzeugen von bromure-cli mcp --debug benötigt. GET /health meldet debugEnabled, sodass Sie erkennen können, in welchem Modus sich die App befindet.
Warnung:
BROMURE_DEBUG_CLAUDEentfernt die Sicherheitskontrolle, die normalerweiseexec, VM-Steuerung und rohe Profil-Geheimnisse von der Loopback-TCP-API fernhält. Führen Sie die App damit nur auf einer Maschine aus, die Sie kontrollieren, und kombinieren Sie es niemals mit einer Nicht-Loopback-Bind-Adresse — das würde vollständigen VM-Shell-Zugriff, unredigierte Geheimnisse und Fensteraufnahmen jedem zugänglich machen, der den Port erreichen kann. Es unterscheidet sich vonBROMURE_AC_DEBUG(stderr-Ereignisprotokollierung) undBROMURE_CLI_DEBUG(CLI-Socket-Diagnose), die harmlose Protokollierungsschalter sind. Die Debug-Endpunkte, alle Umgebungsvariablen und jeder in diesem Kapitel berührte Dateispeicherort sind im Anhang katalogisiert.