CLI, API & MCP
Alles, was die App tut, lässt sich auch ohne ihr Fenster steuern. Das App-Binary — bromure-ac, in Bromure Agentic Coding.app/Contents/MacOS/ — ist zugleich eine CLI mit mehreren Befehlen, eine HTTP-Steuerungsebene, ein MCP-Server für externe KI-Werkzeuge und ein AppleScript-Ziel. In jeder VM gibt ein Satz integrierter MCP-Server den Agenten ihre eigene Sicht auf Bromure. Dieses Kapitel ist die Referenz für all das.
Die Oberflächen, von außen nach innen:
- Die
bromure-cli-Befehlszeile — eine CLI im Stil von Docker/kubectl für Maschinen, VMs, Terminals, Befehle, Traces, Modelle, Fernzugriff und Registrierung. - Die Steuerungsebene — dieselben Operationen als JSON über HTTP, auf einem Unix-Socket nur für den Eigentümer und optional auf einem Loopback-TCP-Port.
- Der AC-MCP-Server (
bromure-ac mcp) — lässt ein KI-Werkzeug auf Ihrem Mac (Claude Code, Claude Desktop) die App verwalten. - Die MCP-Server im Gast — in jede VM eingebaut: der Browser, Automatisierungen, Infrastruktur, Delegation und, für bestimmte Sitzungen, das Aufgaben-Board und die Schaltzentrale.
- AppleScript — das Wörterbuch Bromure AC Suite.
In diesem Kapitel wie in der CLI heißt eine Maschine Arbeitsbereich (ihr Name im Einstellungseditor und auf der Befehlszeile). Sitzungen im Sinne von Agenten-Unterhaltungen erreichen Sie über die Routen /agent-sessions; die älteren Routen /sessions und der Begriff session in CLI und AppleScript bezeichnen das Fenster einer Maschine.
Die Steuerungsebene: Socket und API
Jede Oberfläche spricht über einen von zwei Transporten HTTP mit der laufenden App:
| 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; die meisten Steuerrouten erfordern zusätzlich die Umgebungsvariable BROMURE_DEBUG_CLAUDE, und einige werden nie über TCP bereitgestellt (siehe Authentifizierungsmodell) | Nein — Opt-in unter Einstellungen › Automatisierung |
Die CLI spricht nie direkt mit einer VM. Jeder Unterbefehl ist ein schlanker HTTP-Client über den Steuer-Socket, sodass dieselben Befehle lokal funktionieren und — wenn der Socket über SSH getunnelt wird — gegen eine entfernte Instanz von einem Rich Client aus. Läuft kein Agent, wenn Sie einen Befehl aufrufen, der einen braucht, startet die CLI automatisch einen fensterlosen Hintergrund-Agenten (bromure-ac run --headless) und wartet bis zu 40 Sekunden, bis er auf /health antwortet. Nur lesende Befehle (vm ls, describe, trace …) starten nichts automatisch; sie geben stattdessen No bromure-ac agent running. aus.
Hinweis: Der Steuer-Socket ist immer verfügbar, solange die App läuft, und 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 CLI zu verwenden.
Die Kommandozeile bromure-cli
Sie können das Binary über seinen vollständigen Pfad im Bundle aufrufen, aber der Kurzname ist bequemer. Wählen Sie im App-Menü Bromure Agentic Coding › Befehlszeilenprogramm installieren…. Der Hinweis Das Befehlszeilenwerkzeug „bromure-cli“ installieren? erklärt, dass ein symbolischer Link unter /usr/local/bin/bromure-cli angelegt wird und einmalig Ihr Administratorpasswort nötig ist; klicken Sie auf Installieren (oder Abbrechen). Bei Erfolg fordert Befehlszeilenprogramm installiert Sie auf, bromure-cli --help auszuführen. Die App bietet dies beim Start nicht mehr an — der Menüpunkt ist der einzige Weg, und Sie können ihn jederzeit erneut ausführen (etwa nachdem Sie die App verschoben haben).
Dasselbe Binary verhält sich je nach dem Namen, unter dem es aufgerufen wird, unterschiedlich:
- Als
bromure-cliblendet es die app-internen Befehle aus — Image-Verwaltung (init,info,resetund die Werkzeuge der Veröffentlichungs-Pipeline), denmcp-Server und den GUI-Standardrun— und stellt nur die Gruppen für das Terminal bereit (Workspaces, Tracing, Local inference, Enterprise features,remote). Ein bloßesbromure-cligibt die Hilfe aus, statt die App zu starten. - Als
bromure-ac(das Binary im App-Bundle) ist alles verfügbar, und der Standard-Unterbefehl istrun, der die GUI startet.
Die Beispiele unten verwenden bromure-cli; nutzen Sie den vollständigen Pfad …/MacOS/bromure-ac für die Befehle, die nur dieser bereitstellt.
Befehle akzeptieren überall, wo ein Arbeitsbereich-Argument steht, die ID eines Arbeitsbereichs, ein kurzes ID-Präfix oder seinen Namen. Die Befehlsgruppen vm und workspaces sind Aliasse füreinander. Was eine Maschine ist und wie sie mit Sitzungen zusammenhängt, erklärt Maschinen.
Die App und der Hintergrund-Agent
| Syntax | Funktion |
|---|---|
bromure-ac run [--headless] | Standard-Unterbefehl (verborgen) — startet die GUI. --headless führt einen fensterlosen Menüleisten-Agenten aus; diesen startet die CLI automatisch, um den Steuer-Socket bereitzustellen. |
Image-Verwaltung
Das Basis-Image wird einmal installiert. Diese Befehle gibt es nur unter dem Namen bromure-ac.
| Syntax | Funktion |
|---|---|
bromure-ac init [--build-local] | Installiert das Ubuntu-Basis-Image: lädt das vorgefertigte Image herunter und fällt bei einem Download-Fehler auf einen lokalen Build zurück. --build-local erzwingt den lokalen Build. |
bromure-ac info | Gibt Version, virtuelle Größe, Größe auf der Festplatte und Pfad des Basis-Images aus. |
bromure-ac reset [--yes] | Löscht das Basis-Image (Festplatte, EFI-Variablen, Versionsstempel, Zustand), damit das nächste init frisch beginnt; fragt nach, außer mit --yes. |
bromure-ac init-foss-image --output <dir> | Nur Veröffentlichungs-Pipeline — baut das weiterverteilbare, nur aus freier Software bestehende Basis-Image nach <dir>. |
bromure-ac verify-image --disk <path> [--timeout 300] | Nur Veröffentlichungs-Pipeline — startet einen Wegwerf-Klon headless und verlangt die serielle Login-Aufforderung innerhalb des Zeitlimits. |
Hinweis: Gibt es kein Basis-Image, führt Sie der Start der GUI in den Einrichtungsassistenten, der das Image an Ort und Stelle installiert — siehe Installation & erster Start.
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 vm fsck <workspace> [--repair] [--home] | Prüft die Systemfestplatte eines gestoppten Arbeitsbereichs — oder mit --home sein Home-Image — vom Mac aus, ohne VM und ohne zusätzliche Werkzeuge. --repair spielt das Dateisystem-Journal ab und löscht ein veraltetes Fehler-Flag. Siehe Eine Festplatte über die Befehlszeile prüfen. |
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. Einen Schlüssel im Editor zu löschen leert dieses Feld. --from-json wendet ein Dokument nicht-interaktiv an; es darf unvollständig sein — ein fehlender Schlüssel behält seinen Wert, ein explizites null leert ihn. |
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:
- Flags von
vm run.--toolnimmt eine Agenten-ID:claude,codex,grok,kimioderomp.--authisttoken,subscription,bedrockoderlocal. Ein unbekannter Wert ist ein Fehler, der die gültigen Werte auflistet, zum BeispielInvalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp.;workspaces createprüft--toolund--authgenauso.-v/--volume <hostdir>bindet einen Host-Ordner unter~/<basename>im Gast ein (wiederholbar, bis zu 8).-d/--detachstartet die VM und kehrt zurück, statt sich anzuhängen.--rmlöscht den Arbeitsbereich und seine Festplatte, wenn die VM stoppt. Lösen Sie sich mitCtrl-b dvon einem angehängten tmux — die VM läuft dann weiter. - Agenten kommen aus Modelle. Die Flags für Werkzeug und Authentifizierung legen nur die Anfangswerte eines neuen Arbeitsbereichs fest. Welches Modell und welchen Anbieter jeder Agent tatsächlich nutzt, bestimmen Einstellungen › Modelle und der eigene Bereich Modelle des Arbeitsbereichs — siehe Modelle & Anbieter.
- TTY-bewusst. Das Docker-typische Standardverhalten, das Terminal an tmux zu übergeben, gilt nur in einem echten Terminal; per Pipe oder Skript aufgerufen verhält es sich, als hätten Sie
-dübergeben. - Werte für
workspaces create. 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.
Eine Festplatte über die Befehlszeile prüfen
vm fsck ist das skriptfähige Gegenstück zu fsck ausführen… im ext4-Browser und zur Schaltfläche Festplatte reparieren, die die App anzeigt, wenn ein Start an Dateisystemfehlern scheitert. Es nutzt Bromures eigenen ext4-Prüfer, sodass nichts installiert werden muss.
bromure-cli vm kill "Web app" # the workspace must be stopped
bromure-cli vm fsck "Web app" # check the system disk, report only
bromure-cli vm fsck "Web app" --repair # replay the journal, clear the error flag
bromure-cli vm fsck "Web app" --home # check the home image instead
Es verweigert die Ausführung, solange der Arbeitsbereich läuft. Die Ausgabe endet mit einer dieser Zusammenfassungen: „Filesystem is clean.“, „Filesystem repaired; it is now consistent.“ oder „Filesystem has errors this checker cannot repair.“. Eine Prüfung ohne --repair, die Probleme findet, schlägt vor, mit --repair erneut auszuführen. Der Befehl endet mit Status 4, solange Fehler bestehen. Umfang und Grenzen des Prüfers beschreibt Erweitert.
Modelle, Routing und Fusion
Modell- und Anbietereinstellungen behandelt Modelle & Anbieter, die Synthese mehrerer Modelle Fusion; die CLI-Schalter sind:
| Syntax | Funktion |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Verwaltet MLX-Modelle auf dem Gerät — den kuratierten Katalog durchsuchen (mit Abzeichen für RAM-Eignung und Tool-Aufrufe), mit Live-Fortschritt herunterladen, das aktive Modell für den Arbeitsbereich einer laufenden VM festlegen, entfernen. |
bromure-cli vm fusion enable|disable <vm> | Schaltet Fusion auf einer laufenden VM ein oder aus. Der Arbeitsbereich muss zwei oder mehr konfigurierte Modelle haben. on/engage und off/disengage werden als Synonyme akzeptiert. |
bromure-cli vm routing cloud|local <vm> | Legt das LLM-Backend-Routing einer laufenden VM fest: die Cloud-Anbieter der Agenten oder das lokale Modell. |
Trace-Inspektion
Diese lesen die Proxy-Traces pro Arbeitsbereich. Sie liefern nichts, solange für den Arbeitsbereich kein Tracing aktiviert ist — siehe Tracing-Einstellungen — und das Gesamtbild steht in Tracing & Audit.
| 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 & Clients dokumentiert. Alle Operationen laufen über den Steuer-Socket durch die laufende App.
| 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 Bei bromure.io anmelden…, 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-ac 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. |
__remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Interne Einstiegspunkte (die SSH-ForceCommand-TUI, die Terminal-Byte-Pumpe und die Tunnel-Helfer des Rich Clients). Nicht für interaktive Nutzung. |
Das Remote-TUI (__remote-menu)
Ist der SSH-Fernzugriff aktiviert, wird jede entfernte Anmeldung (über ForceCommand) in eine selbst gebaute ANSI-Terminal-Oberfläche statt in eine Shell gezwungen — ein Menü im alternativen Bildschirm mit 256 Farben, gesteuert über Pfeiltasten und Ziffern, das über jedes SSH-PTY funktioniert (verwenden Sie ssh -t). Es bildet die CLI als Menüs ab:
- Arbeitsbereiche — Erstellen mit einem Formular auf einem Bildschirm (Name, Tool, Auth, API key, Memory, Color, Folders, Generate SSH, Full settings…, Create), Aktionen pro Arbeitsbereich (Attach, New tab, Describe, Configure…, Fusion, Routing, Worktrees…, Reboot…, Suspend, Kill für laufende Arbeitsbereiche; Start, Describe, Configure…, Delete für ausgeschaltete) und eine Rohtabellenansicht. Configure… bietet die Bereiche des Einstellungseditors als Textformulare an; sein Formular Models ist schreibgeschützt (die Anbieter des Servers und ob der Arbeitsbereich sie überschreibt), da Modelle in der App gewählt werden.
- 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 am tmux eines Arbeitsbereichs hängen, blendet eine magische Tastenkombination (standardmäßig Ctrl-], im Banner angezeigt) ein vom Host gezeichnetes Controller-Overlay ein: einen Tab-Baum, New tab, Worktrees…, Fusion, Routing, Edit settings…, Reboot…, Suspend, Disconnect. Der Gast sieht die Auslösetaste nie — überschreiben Sie sie mit der Datei remote/overlay-key oder $BROMURE_OVERLAY_KEY. Ctrl-b d trennt von tmux und kehrt zum Menü zurück. Die Remote-TUI arbeitet mit Maschinen und ihren Terminals; Agentensitzungen, Räume und die Schaltzentrale erreichen Sie stattdessen über den Rich Client. Das Gesamtbild zum Fernzugriff steht in Fernzugriff & Clients.
Die Loopback-Automatisierungs-API
Die Steuerungsebene kann auch als JSON über HTTP per TCP bereitgestellt werden, zum Skripten aus beliebigen Sprachen. Sie ist standardmäßig aus.
Aktivierung
Öffnen Sie Einstellungen… › Automatisierung (⌘,) — den Bereich Automatisierungs-API und 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 (beschriftet mit (Standard: 9223)) und Bind-Adresse (Standard
127.0.0.1) fest. Port und Bind-Adresse gelten ab dem nächsten Serverstart — schalten Sie den Schalter aus und wieder ein, um sie sofort 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) |
|---|---|---|
GET /health, GET /profiles, GET /vms, GET/POST /sessions | Erlaubt | Erlaubt |
Erstellen und Bearbeiten von Arbeitsbereichen (POST /profiles, /profiles/<id>…), VM-Steuerung und exec (POST /vms, /vms/<id>/…), /trace, /app/state, /preferences, /models/settings, Agentensitzungen, Räume, Delegationen, Aufgaben, Automatisierungen, Cluster und Registries | Erlaubt | Erfordert BROMURE_DEBUG_CLAUDE in der App |
/state, /state/subscribe, /remote…, /grid-layout, /workspaces, /subscriptions/…, /models/<action>, /connector | Erlaubt | Nie — nur Steuer-Socket |
Anders gesagt: Der Steuer-Socket ist der Weg mit vollem Zugriff, nur für den Eigentümer; die TCP-API öffnet die sichere Teilmenge auf Loopback und stellt alles andere hinter das Debug-Flag. Pfadsegmente werden einfach prozentkodiert (damit Arbeitsbereichsnamen mit Leerzeichen funktionieren).
Endpunkte für das Scripting
Die nützlichsten Routen:
| Endpunkt | Zweck |
|---|---|
GET /health | Lebenszeichen plus debugEnabled. |
GET /state | Einmaliger Spiegel-Schnappschuss: Arbeitsbereiche, VMs, Raster-Layout, Automatisierungen, pendingPrompts und mehr. |
GET /state/subscribe | Die Push-Form von /state: Die Verbindung bleibt offen, und bei jeder Zustandsänderung wird ein neuer Schnappschuss gestreamt. Rich Clients nutzen sie statt Polling. |
GET /vms / POST /vms | Laufende VMs auflisten; eine VM aus einer Arbeitsbereich-Referenz oder einer Inline-Spezifikation samt Mounts starten (was vm run aufruft). |
POST /vms/<id>/exec | Einen Befehl in einer VM ausführen; interactive übernimmt die Verbindung als rohen, gerahmten PTY-Stream. |
GET /profiles / POST /profiles | Arbeitsbereiche auflisten; einen aus einem JSON-Dokument erstellen. |
GET / PUT /preferences | Die Vorlage Defaults der Einstellungen lesen oder ersetzen (Geheimnisse beim Lesen geleert, beim Schreiben erhalten, wenn leer gelassen). Das bearbeitet das Einstellungsfenster eines Rich Clients auf einem entfernten Host. |
GET / PUT /models/settings | Die globalen Modelleinstellungen (Einstellungen › Modelle) lesen oder ersetzen, mit geschwärzten Schlüsseln. |
POST /subscriptions/register / POST /subscriptions/forget | Auf diesem Host für einen Client eine Anbieter-Anmeldung starten ({"provider": …, "profileId": …}; die Anmelde-URL kommt über /state zurück) oder eine gespeicherte Anmeldung vergessen. |
POST /agent-sessions/start | Eine Agentensitzung starten (profile, tool, optional Ordner, Repository oder Eröffnungsnachricht). |
POST /agent-sessions/<id>/<action> | Auf eine Sitzung einwirken: send, keys, resume, close, rename, nickname, archive, unarchive, delete, review und die Branch-Aktionen (worktree, branch-merge, branch-pr, branch-discard, branch-keep, branch-decline). |
GET /agent-sessions/<id>/transcript, GET /agent-sessions/<id>/pending | Die Unterhaltung einer Sitzung (Base64-JSONL) und worauf sie wartet (eine Frage und ihre Optionen). |
POST /agent-sessions/switchboard | Die Schaltzentrale starten oder anzeigen. |
POST /agent-rooms/create|move|group, POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboard | Räume erstellen und bearbeiten. |
POST /delegations/request, POST /delegations/<id>/<action>, GET /delegations/<id>/file | Host-übergreifende Delegation: Die Sitzung eines Hosts fragt eine Sitzung auf einem anderen, sendet dann, antwortet, steuert, schließt oder bricht ab und holt angehängte Dateien. |
GET / POST /tasks, /tasks/<id>/… | Das Board Coding-Aufgaben lesen und steuern. |
GET / POST /k8s, /k8s/<id>/<action>, POST /registries, /registries/<id>/<action> | Kubernetes-Cluster und Registries erstellen und steuern. |
GET /automations / POST /automations/<id>/run | Geplante Automatisierungen lesen und steuern (siehe Automatisierungen über die API steuern). |
POST /prompts/<id>/answer | Einen eingereihten Lebenszyklus-Prompt beantworten (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
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Web app"}'
# 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 braucht das Auflisten von Arbeitsbereichen und das Öffnen des Fensters einer Maschine kein Debug-Flag:
curl http://127.0.0.1:9223/profiles
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Web app"}'
Hinweis: Die Routen der Steuerungsebene sind eine mit dem Rich Client geteilte Integrationsoberfläche, keine versionierte öffentliche API; Form von Anfragen und Antworten kann sich zwischen Releases ändern. Die CLI-Befehle oben sind der stabile Weg, Bromure zu skripten. Nur für Debugging gedachte Routen, Umgebungsvariablen und Dateispeicherorte sind im Anhang katalogisiert.
Der AC-MCP-Server (bromure-ac mcp)
bromure-ac mcp führt einen stdio-JSON-RPC-MCP-Server aus (Servername bromure-ac), mit dem ein KI-Werkzeug auf Ihrem Mac die App verwalten kann. Er umhüllt die HTTP-Automatisierungs-API und AppleScript, also aktivieren Sie zuerst den Automatisierungsserver — die Listen- und Fensterwerkzeuge rufen die HTTP-API unter --api-url auf (Standard http://127.0.0.1:9223). Unter dem Namen bromure-cli ist er nicht verfügbar.
Die Werkzeuge, die er bereitstellt:
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(öffnet das Fenster eines Arbeitsbereichs; wartet bis zu 30 Sekunden),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
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 Folgendes zu ~/.config/claude-code/.mcp.json hinzu (oder zum Gegenstück Ihres Clients). Genau dieses Snippet zeigt der Abschnitt MCP-Client-Konfiguration im Bereich Automatisierung:
{
"mcpServers": {
"bromure-ac": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac",
"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.
MCP-Server in den VMs
Unabhängig vom AC-MCP-Server gibt Bromure den Agenten in jeder VM einen Satz integrierter MCP-Server — ohne jede Konfiguration. Jeder ist ein kleiner Python-stdio-Shim, der schreibgeschützt unter /mnt/bromure-meta/ im Gast bereitgestellt wird; der Shim verbindet sich über vsock mit dem Host und verbindet sich bei Abbrüchen endlos neu, sodass der Agent seine Werkzeuge nie verliert. Der Host stellt die Werkzeuge bereit, und jeder Aufruf wird dort geprüft: Ein Agent kann nur sehen und beeinflussen, wozu seine eigene Maschine und Sitzung berechtigt sind.
| vsock-Port | Server | Wer ihn erhält | Werkzeuge |
|---|---|---|---|
| 5830 | browser | Jeder Agent | Die 23 browser_*-Werkzeuge, die das eingebettete Chromium der Maschine steuern (siehe unten). |
| 5831 | task board | Nur Agenten, die eine Coding-Aufgabe ausführen | board_get_task, board_set_plan, board_create_subtasks, board_set_dependencies, board_ready_for_review, board_report_landing. |
| 5832 | plan stream | Planungsläufe von Coding-Aufgaben | Kein MCP-Server: der Kanal, über den der Planungslauf einer Aufgabe seinen Plan an das Board streamt. |
| 5833 | automations | Jeder Agent | automation_list, automation_get, automation_create, automation_update, automation_delete, automation_run — beschränkt auf die Automatisierungen der eigenen Maschine des Agenten. Siehe Automatisierungen. |
| 5834 | infrastructure | Jeder Agent | infrastructure_overview, cluster_status, cluster_create, cluster_start, registry_status, registry_create, registry_start — beschränkt auf die Cluster und Registries, auf die die Maschine Zugriff hat. Siehe Kubernetes-Cluster und Registries. |
| 5835 | delegation | Jede Agentensitzung | delegate, request, list_peers, list_delegations, read_inbox, wait, ask, report, deliver, answer, steer, close_delegation, cancel, worktree_create, worktree_status, worktree_merge. Der Shim teilt dem Host mit, in welchem tmux-Fenster er läuft, sodass sich ein Agent nicht als andere Sitzung ausgeben kann. Siehe Agenten arbeiten zusammen. |
| 5836 | switchboard | Nur die Sitzung der Schaltzentrale | list_sessions, read_session, pending_question, list_workspaces, next_events, send_to_session, answer_question, press_keys, start_session, resume_session, message_user, archive_session. |
Die Server browser, automations, infrastructure und delegation werden in die eigene MCP-Konfiguration jedes Agenten geschrieben, neben den Servern, die Sie im Bereich MCP der Maschine hinzufügen (MCP-Einstellungen). Die Server task board und switchboard werden nur an die Läufe übergeben, die sie brauchen.
Der browser-Server
Der browser-Server steuert das eingebettete Chromium der Maschine, das in einer eigenen Wegwerf-VM läuft. Seine 23 Werkzeuge decken Navigation und Inspektion ab — browser_navigate, browser_new_tab, browser_list_tabs, browser_activate_tab, browser_close_tab, browser_back, browser_forward, browser_reload, browser_screenshot (mit 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 (eine interaktive Elementauswahl für 60 Sekunden).
Ein Werkzeugaufruf bei geschlossenem Browser öffnet ihn und wartet auf den Kaltstart. Da der Browser eine separate VM ist, weisen die Anweisungen des Servers die Agenten an, einen Dev-Server auf ihrer Maschine über deren LAN-IP (hostname -I) zu erreichen, nie über localhost. Das Gesamtbild steht in Der eingebettete Browser.
Hinweis: Auf einem Rich Client kann der Browser-MCP-Stream der Agenten über die SSH-Verbindung laufen, sodass ein entfernter Agent den Browser-Bereich steuert, den Sie lokal sehen. Siehe Fernzugriff & Clients.
OAuth für MCP-Server, die Sie hinzufügen
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 Skript-Wörterbuch, die Bromure AC Suite, ist eine weitere Automatisierungsoberfläche — nützlich für Orchestrierung und für Screenshot-Werkzeuge, die Fenster-IDs brauchen. Sprechen Sie application "Bromure Agentic Coding" aus dem Skripteditor oder mit osascript an. Es umfasst:
- Profile —
list profiles,create ac profile <name> [color <c>](gibt eine UUID zurück),delete ac profile <name|uuid>und den vollständigen Hin- und Rückweg des Dokuments überget profile json/set profile json(das ganze Profil; ID bleibt erhalten; gespeicherte Geheimnisse werden bei leeren Feldern übernommen). - 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). - Maschinenfenster —
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.
So öffnen Sie zum Beispiel das Fenster einer Maschine:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Web app"'
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 Agentenlauf, der an eine Maschine gebunden ist. Automatisierungen werden im Automatisierungs-Board (⇧⌘A oder der Abschnitt Automationen der Seitenleiste) erstellt und verwaltet, und Agenten können die Automatisierungen ihrer eigenen Maschine über den oben genannten MCP-Server automations verwalten. Die gesamte Funktion — Auslöser, Zeitpläne, Verkettung, die obligatorische Injection-Prüfung, der Laufverlauf — ist in Automatisierungen dokumentiert. Dieser Abschnitt behandelt die Oberfläche der Steuerungsebene: Automatisierungen über die API steuern, die Entscheidungs-Prompts beantworten, die ein unbeaufsichtigter Start auslösen kann, und wie die Zustimmung über ein angehängtes Terminal funktioniert.
Automatisierungen über die API steuern
| 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. |
POST /automation-runs/<run-id>/acknowledge | Einen fehlgeschlagenen oder blockierten Lauf aus der Spalte Braucht Aufmerksamkeit des Boards entfernen. |
GET /automation-runs/<run-id>/transcript | Das archivierte Transkript eines abgeschlossenen Laufs (Base64). |
Ausstehende Prompts beantworten
Manche Lebenszyklus-Entscheidungen — das Angebot eines Basis-Image-Upgrades, eine Festplatte, die ihre Prüfung beim Start nicht besteht, ein Kompromittierungsalarm, eine Löschung wegen Kompromittierung — erscheinen normalerweise als lokaler Hinweis. Ist niemand am Mac, der antworten könnte (ein headless Agent oder ein von einem entfernten Rich Client angeforderter Start), werden sie stattdessen eingereiht: Sie erscheinen in GET /state unter pendingPrompts (jeweils mit 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":"Remind me later"}'
Übergeben Sie eine der Schaltflächenbeschriftungen des Prompts als choice. Antwortet kein Client vor dem Zeitlimit des Prompts, wird er mit seiner sicheren Ausweichwahl aufgelöst — nie mit der destruktiven Option (ein Kompromittierungsalarm etwa fällt auf das Herunterfahren der VM zurück). Ist überhaupt kein Client verbunden, greift die Ausweichwahl sofort. Ein Rich Client stellt diese Prompts als gewöhnliche Hinweise dar.
Hinweis: Automatisierungen, Delegationen und andere unbeaufsichtigte Starts warten nie auf einen Prompt. Ein Start, der eine Antwort von Ihnen bräuchte — eine als kompromittiert markierte Maschine oder ein lokales Modell, das noch heruntergeladen wird —, wird stattdessen mit einem klaren Grund im Laufverlauf abgelehnt („The workspace is marked compromised — start it yourself to confirm the wipe.“). Eine angehaltene Maschine, deren gespeicherter Zustand nicht wiederhergestellt werden kann, startet frisch.
Zustimmung über angehängte Terminals
Solange ein Terminal interaktiv an eine Maschine angehängt ist — über vm exec -it, vm attach oder einen SSH-Attach —, werden hostseitige Genehmigungs-Prompts (Nutzung von Anmeldedaten und Ähnliches) in Ihrem Terminal dargestellt, nicht im Gast. Der Prompt lautet 🔒 Bromure — approval required mit nummerierten Optionen und Choice [1-N] (Enter or timeout = deny). Enter, Zeitüberschreitung, EOF oder Trennen bedeuten jeweils Ablehnung, sodass ein kompromittierter Gast nie eine Genehmigung fälschen kann. Das tmux des Gasts wird anschließend neu gezeichnet.
Debug-Endpunkte (BROMURE_DEBUG_CLAUDE)
Wird die App mit gesetztem BROMURE_DEBUG_CLAUDE gestartet, fällt die Debug-Sperre der TCP-Automatisierungs-API weg, sodass die Routen der mittleren Zeile der Authentifizierungstabelle auch über TCP funktionieren, einschließlich dieser Debug-Routen (auf dem Steuer-Socket immer verfügbar, sofern nicht anders angegeben):
GET /debug/ui-shot?path=…&which=…— die App rendert ihr eigenes Fenster in ein PNG (keine Berechtigung für Bildschirmaufnahme nötig) und gibt einen Dump der Subview-Frames 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 unverändert durch die Profil-JSON-Brücken von AppleScript und MCP laufen und wird von den VM-Werkzeugen von bromure-ac mcp --debug benötigt. GET /health meldet debugEnabled, damit Sie erkennen, in welchem Modus die App läuft.
Warnung:
BROMURE_DEBUG_CLAUDEentfernt die Sicherheitssperre, dieexec, die VM-Steuerung und rohe Profilgeheimnisse normalerweise von der Loopback-TCP-API fernhält. Starten Sie die App damit nur auf einer Maschine, die Sie kontrollieren, und kombinieren Sie es nie mit einer Bind-Adresse außerhalb von Loopback — sonst hätte jeder, der den Port erreicht, vollen Shell-Zugriff auf die VMs, ungeschwärzte Geheimnisse und Fenstererfassungen. Es ist nicht zu verwechseln mitBROMURE_AC_DEBUG(Ereignisprotokollierung auf stderr) undBROMURE_CLI_DEBUG(Socket-Diagnose der CLI), die harmlose Protokollierungsschalter sind.