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:

TransportOrtZugriffskontrolleStandardmäß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-API127.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-cli blendet es die app-internen Befehle aus — Image-Verwaltung (init, info, reset und die Werkzeuge der Veröffentlichungs-Pipeline), den mcp-Server und den GUI-Standard run — und stellt nur die Gruppen für das Terminal bereit (Workspaces, Tracing, Local inference, Enterprise features, remote). Ein bloßes bromure-cli gibt die Hilfe aus, statt die App zu starten.
  • Als bromure-ac (das Binary im App-Bundle) ist alles verfügbar, und der Standard-Unterbefehl ist run, 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

SyntaxFunktion
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.

SyntaxFunktion
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 infoGibt 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.

SyntaxFunktion
bromure-cli vm lsListet 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. --tool nimmt eine Agenten-ID: claude, codex, grok, kimi oder omp. --auth ist token, subscription, bedrock oder local. Ein unbekannter Wert ist ein Fehler, der die gültigen Werte auflistet, zum Beispiel Invalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp.; workspaces create prüft --tool und --auth genauso. -v/--volume <hostdir> bindet einen Host-Ordner unter ~/<basename> im Gast ein (wiederholbar, bis zu 8). -d/--detach startet die VM und kehrt zurück, statt sich anzuhängen. --rm löscht den Arbeitsbereich und seine Festplatte, wenn die VM stoppt. Lösen Sie sich mit Ctrl-b d von 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 sind blue, red, green, orange, purple, pink, teal oder gray.
  • Leer-Beibehalten beim Bearbeiten. workspaces edit exportiert 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 exec wartet bis zu 10 Sekunden auf den Shell-Agenten des Gasts; ein 502 bedeutet, 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:

SyntaxFunktion
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.

SyntaxFunktion
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.

SyntaxFunktion
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 disableSchaltet 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.

SyntaxFunktion
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-statusGibt 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

SyntaxFunktion
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-helperInterne 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 pull herunterzuladen.
  • 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.

Der Bereich Automatisierung der Einstellungen: der Schalter Automatisierungsserver aktivieren, Port 9223, Bind-Adresse 127.0.0.1 und das Konfigurations-Snippet für den MCP-Client
  1. 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.
  2. 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.1 setzen, 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 beschriebene BROMURE_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:

RoutengruppeSteuerungs-SocketAutomatisierungs-API (TCP-Loopback)
GET /health, GET /profiles, GET /vms, GET/POST /sessionsErlaubtErlaubt
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 RegistriesErlaubtErfordert BROMURE_DEBUG_CLAUDE in der App
/state, /state/subscribe, /remote…, /grid-layout, /workspaces, /subscriptions/…, /models/<action>, /connectorErlaubtNie — 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:

EndpunktZweck
GET /healthLebenszeichen plus debugEnabled.
GET /stateEinmaliger Spiegel-Schnappschuss: Arbeitsbereiche, VMs, Raster-Layout, Automatisierungen, pendingPrompts und mehr.
GET /state/subscribeDie 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 /vmsLaufende VMs auflisten; eine VM aus einer Arbeitsbereich-Referenz oder einer Inline-Spezifikation samt Mounts starten (was vm run aufruft).
POST /vms/<id>/execEinen Befehl in einer VM ausführen; interactive übernimmt die Verbindung als rohen, gerahmten PTY-Stream.
GET /profiles / POST /profilesArbeitsbereiche auflisten; einen aus einem JSON-Dokument erstellen.
GET / PUT /preferencesDie 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/settingsDie globalen Modelleinstellungen (Einstellungen › Modelle) lesen oder ersetzen, mit geschwärzten Schlüsseln.
POST /subscriptions/register / POST /subscriptions/forgetAuf 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/startEine 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>/pendingDie Unterhaltung einer Sitzung (Base64-JSONL) und worauf sie wartet (eine Frage und ihre Optionen).
POST /agent-sessions/switchboardDie Schaltzentrale starten oder anzeigen.
POST /agent-rooms/create|move|group, POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboardRäume erstellen und bearbeiten.
POST /delegations/request, POST /delegations/<id>/<action>, GET /delegations/<id>/fileHost-ü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>/runGeplante Automatisierungen lesen und steuern (siehe Automatisierungen über die API steuern).
POST /prompts/<id>/answerEinen 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_sessions
  • bromure_ac_open_session (öffnet das Fenster eines Arbeitsbereichs; wartet bis zu 30 Sekunden), bromure_ac_close_session
  • bromure_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 rufen osascript auf (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 nicht BROMURE_DEBUG_CLAUDE gesetzt 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-PortServerWer ihn erhältWerkzeuge
5830browserJeder AgentDie 23 browser_*-Werkzeuge, die das eingebettete Chromium der Maschine steuern (siehe unten).
5831task boardNur Agenten, die eine Coding-Aufgabe ausführenboard_get_task, board_set_plan, board_create_subtasks, board_set_dependencies, board_ready_for_review, board_report_landing.
5832plan streamPlanungsläufe von Coding-AufgabenKein MCP-Server: der Kanal, über den der Planungslauf einer Aufgabe seinen Plan an das Board streamt.
5833automationsJeder Agentautomation_list, automation_get, automation_create, automation_update, automation_delete, automation_run — beschränkt auf die Automatisierungen der eigenen Maschine des Agenten. Siehe Automatisierungen.
5834infrastructureJeder Agentinfrastructure_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.
5835delegationJede Agentensitzungdelegate, 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.
5836switchboardNur die Sitzung der Schaltzentralelist_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 über get 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> und get editor window id / get main window id (eine CGWindowID für screencapture -l).
  • Maschinenfenster — open ac session, close ac session, list ac sessions.
  • App-Zustand und -Einstellungen — get app state (JSON), sowie get ac app setting / set ac app setting für die Schlüssel automation.enabled, automation.port, automation.bindAddress, remoteAccess.enabled, remoteAccess.port, remoteAccess.bindAddress, managed.serverURL und managed.acIngestURL. Das Setzen von automation.enabled schaltet 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_CLAUDE gesetzt ist. Das Setzen von apiKey auf einen leeren String über set profile setting lö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

EndpunktZweck
GET /automationsListet Automatisierungen und ihre Lauf-Historie auf.
POST /automationsErstellt oder aktualisiert (Upsert) eine Automatisierung.
DELETE /automations/<id>Löscht eine Automatisierung.
POST /automations/<id>/runLöst sie jetzt aus (ändert den Zeitplan nicht).
POST /automations/<id>/togglePausiert oder setzt sie fort.
POST /automation-runs/<run-id>/acknowledgeEinen fehlgeschlagenen oder blockierten Lauf aus der Spalte Braucht Aufmerksamkeit des Boards entfernen.
GET /automation-runs/<run-id>/transcriptDas 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_CLAUDE entfernt die Sicherheitssperre, die exec, 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 mit BROMURE_AC_DEBUG (Ereignisprotokollierung auf stderr) und BROMURE_CLI_DEBUG (Socket-Diagnose der CLI), die harmlose Protokollierungsschalter sind.