CLI, API e MCP
Tudo o que a aplicação faz também pode ser conduzido sem a sua janela. O binário da aplicação — bromure-ac, dentro de Bromure Agentic Coding.app/Contents/MacOS/ — é também uma CLI com vários comandos, um plano de controlo HTTP, um servidor MCP para ferramentas de IA externas e um alvo de AppleScript. Dentro de cada VM, um conjunto de servidores MCP integrados dá aos agentes a sua própria vista do Bromure. Este capítulo é a referência de todos eles.
As superfícies, de fora para dentro:
- A linha de comandos
bromure-cli— uma CLI ao estilo Docker/kubectl para máquinas, VMs, terminais, comandos, rastos, modelos, acesso remoto e inscrição. - O plano de controlo — as mesmas operações em JSON sobre HTTP, num socket Unix exclusivo do proprietário e, opcionalmente, numa porta TCP de loopback.
- O servidor MCP do AC (
bromure-ac mcp) — permite que uma ferramenta de IA no seu Mac (Claude Code, Claude Desktop) faça a gestão da aplicação. - Os servidores MCP dentro do convidado — integrados em cada VM: o navegador, as automatizações, a infraestrutura, a delegação e, para sessões específicas, o quadro de tarefas e a Central.
- AppleScript — o dicionário Bromure AC Suite.
Ao longo deste capítulo, e na CLI, uma máquina chama-se espaço de trabalho (o seu nome no editor de definições e na linha de comandos). As sessões no sentido de conversas de agente são alcançadas através das rotas /agent-sessions; as rotas mais antigas /sessions e o termo session na CLI e no AppleScript referem-se à janela de uma máquina.
O plano de controlo: socket e API
Cada superfície fala HTTP com a aplicação em execução através de um de dois transportes:
| Transporte | Onde | Controlo de acesso | Ativo por predefinição |
|---|---|---|---|
| Socket de controlo | ~/Library/Application Support/BromureAC/control.sock (domínio Unix, HTTP/1.1) | Permissões de ficheiro — o socket está no modo 0600, apenas para o proprietário. Chegar ao ficheiro é a autorização, ao estilo do socket do Docker. | Sim, sempre que a aplicação ou um agente headless estiver em execução |
| API de automatização | 127.0.0.1:9223 (TCP) | Apenas loopback por predefinição; a maioria das rotas de controlo exige ainda a variável de ambiente BROMURE_DEBUG_CLAUDE, e algumas nunca são servidas por TCP (consulte Modelo de autenticação) | Não — ativação explícita em Preferências › Automatização |
A CLI nunca fala diretamente com uma VM. Cada subcomando é um cliente HTTP leve sobre o socket de controlo, pelo que os mesmos comandos funcionam localmente e — quando o socket passa em túnel por SSH — contra uma instância remota a partir de um cliente nativo. Se nenhum agente estiver em execução quando invoca um comando que precise de um, a CLI arranca automaticamente um agente em segundo plano sem janela (bromure-ac run --headless) e aguarda até 40 segundos que responda a /health. Os comandos só de leitura (vm ls, describe, trace …) não arrancam nada automaticamente; em vez disso, mostram No bromure-ac agent running..
Nota: O socket de controlo está sempre disponível enquanto a aplicação corre e é independente do interruptor Ativar servidor de automatização. Esse interruptor controla apenas o listener TCP na porta 9223. Não precisa de ativar a API de automatização para usar a CLI.
A linha de comandos bromure-cli
Pode chamar o binário pelo caminho completo dentro do pacote, mas o nome curto é mais prático. Escolha Bromure Agentic Coding › Instalar ferramenta de linha de comando… no menu da aplicação. O alerta Instalar a ferramenta de linha de comando “bromure-cli”? explica que cria uma ligação simbólica em /usr/local/bin/bromure-cli e precisa da sua palavra-passe de administrador uma vez; clique em Instalar (ou Cancelar). Em caso de sucesso, Ferramenta de linha de comando instalada indica-lhe que execute bromure-cli --help. A aplicação já nunca oferece isto ao arrancar — o item de menu é a única forma, e pode executá-lo novamente a qualquer momento (por exemplo, depois de mover a aplicação).
O mesmo binário comporta-se de forma diferente consoante o nome com que é chamado:
- Como
bromure-cli, oculta os comandos internos da aplicação — gestão de imagens (init,info,resete as ferramentas do pipeline de publicação), o servidormcpe a predefiniçãorunda interface gráfica — e expõe apenas os grupos destinados ao terminal (Workspaces, Tracing, Local inference, Enterprise features,remote). Umbromure-clisozinho mostra a ajuda em vez de abrir a aplicação. - Como
bromure-ac(o binário dentro do pacote da aplicação), está tudo disponível e o subcomando predefinido érun, que abre a interface gráfica.
Os exemplos abaixo usam bromure-cli; use o caminho completo …/MacOS/bromure-ac para os comandos que só ele expõe.
Os comandos aceitam o id de um espaço de trabalho, um prefixo curto do id ou o seu nome sempre que aparece um argumento de espaço de trabalho. Os grupos de comandos vm e workspaces são aliases um do outro. O que é uma máquina, e como se relaciona com as sessões, é explicado em Máquinas.
A aplicação e o agente de segundo plano
| Sinopse | O que faz |
|---|---|
bromure-ac run [--headless] | Subcomando predefinido (oculto) — abre a interface gráfica. --headless executa um agente acessório da barra de menus sem janela; é isto que a CLI arranca automaticamente para servir o socket de controlo. |
Gestão de imagens
A imagem base é instalada uma única vez. Estes comandos só existem com o nome bromure-ac.
| Sinopse | O que faz |
|---|---|
bromure-ac init [--build-local] | Instala a imagem base Ubuntu: transfere a imagem pré-construída, recorrendo a uma construção local se a transferência falhar. --build-local força a construção local. |
bromure-ac info | Mostra a versão da imagem base, o tamanho virtual, o tamanho em disco e o caminho. |
bromure-ac reset [--yes] | Elimina a imagem base (disco, variáveis EFI, marca de versão, estado) para que o próximo init comece do zero; pede confirmação salvo com --yes. |
bromure-ac init-foss-image --output <dir> | Apenas pipeline de publicação — constrói em <dir> a imagem base redistribuível só com software livre. |
bromure-ac verify-image --disk <path> [--timeout 300] | Apenas pipeline de publicação — arranca sem interface um clone descartável e exige o prompt de login série dentro do tempo limite. |
Nota: Se não existir imagem base, abrir a interface gráfica leva-o ao assistente de configuração inicial, que instala a imagem no local — consulte Instalação e primeira execução.
Controlo de espaços de trabalho e VM
Este é o grupo central. vm run foi deliberadamente modelado ao estilo do Docker: arranca um espaço de trabalho e entrega o seu terminal à sessão tmux bromure partilhada do convidado.
| Sinopse | O que faz |
|---|---|
bromure-cli vm ls | Lista todos os espaços de trabalho com estado ao vivo (desligado / suspenso / a arrancar / em execução), tempo de atividade, estado de anexação da janela, separadores tmux em árvore (* marca o separador ativo) e contentores Docker em execução. |
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm] | Inicia a VM de um espaço de trabalho, ou cria um descartável na hora. Predefinição: anexa o seu terminal ao tmux do convidado. |
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w] | Anexa o terminal ao tmux da VM (opcionalmente saltando para um separador), faz docker exec -it para dentro de um contentor em execução (shell predefinida bash), ou abre/reanexa a janela da GUI com -w/--window. |
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…> | Executa um comando dentro da VM (ao estilo kubectl, após --). -it abre um pty interativo; omita o comando com -it para obter uma shell. Os códigos de saída do convidado são propagados. |
bromure-cli vm kill <vm> [--suspend] | Para uma VM: encerramento controlado, ou suspensão (RAM guardada em disco) com --suspend. |
bromure-cli vm reboot <workspace> [--hard] | Reinicia no lugar um espaço de trabalho em execução; controlado por predefinição, --hard desmonta-o imediatamente. |
bromure-cli vm describe <workspace> | Imprime as definições do espaço de trabalho e ainda os detalhes de tempo de execução ao vivo quando está em execução (estado, IP, vCPUs, estado da Fusion, utilização de disco a partir do df do convidado, separadores, contentores, memória em uso). |
bromure-cli vm ports <workspace> (ou vm <workspace> -L) | Mostra as portas à escuta de um espaço de trabalho em execução (ss ao vivo como root): PORT, PROTO, ADDRESS, PROCESS, com os binds apenas de loopback assinalados. |
bromure-cli vm fsck <workspace> [--repair] [--home] | Verifica o disco de sistema de um espaço de trabalho parado — ou a sua imagem home com --home — a partir do Mac, sem VM e sem ferramentas adicionais. --repair repete o journal do sistema de ficheiros e limpa um indicador de erro obsoleto. Consulte Verificar um disco a partir da linha de comandos. |
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->] | Cria um espaço de trabalho em modo headless. --from-json aplica um documento JSON de perfil completo (as flags substituem os campos correspondentes); --generate-ssh gera uma chave SSH do lado do anfitrião e imprime a chave pública. |
bromure-cli workspaces edit <workspace> [--from-json <file|->] | Obtém a configuração completa do espaço de trabalho, abre-a em $VISUAL/$EDITOR (recorrendo a vi) e guarda as alterações. Os segredos aparecem em branco — deixe em branco para manter, escreva para substituir. Apagar uma chave no editor limpa esse campo. --from-json aplica um documento de forma não interativa; pode ser parcial — uma chave ausente mantém o seu valor, um null explícito limpa-o. |
bromure-cli workspaces rm <workspace> [-f] | Elimina um espaço de trabalho e TODOS os seus dados (disco + home) após uma confirmação y/N, ignorada com -f. |
bromure-cli workspaces ssh-keygen <workspace> | Gera uma nova chave SSH do lado do anfitrião para o espaço de trabalho e imprime a chave pública para o seu anfitrião Git. |
Alguns detalhes operacionais que vale a pena conhecer:
- Opções de
vm run.--toolrecebe um id de agente:claude,codex,grok,kimiouomp.--authétoken,subscription,bedrockoulocal. Um valor não reconhecido é um erro que lista os valores válidos, por exemploInvalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp.;workspaces createverifica--toole--authda mesma forma.-v/--volume <hostdir>monta uma pasta do anfitrião em~/<basename>no convidado (repetível, até 8).-d/--detacharranca a VM e regressa em vez de anexar.--rmelimina o espaço de trabalho e o seu disco quando a VM para. Desanexe-se de um tmux anexado comCtrl-b d— a VM continua em execução. - Os agentes vêm de Modelos. As opções de ferramenta e autenticação apenas inicializam um espaço de trabalho novo. O modelo e o fornecedor que cada agente usa de facto vêm de Preferências › Modelos e do painel Modelos do próprio espaço de trabalho — consulte Modelos e fornecedores.
- Sensível ao TTY. O comportamento predefinido ao estilo Docker, de entregar o terminal ao tmux, só se aplica num terminal real; invocações por pipe ou em scripts comportam-se como se tivesse passado
-d. - Valores de
workspaces create. As cores sãoblue,red,green,orange,purple,pink,tealougray. - Manter-em-branco na edição.
workspaces editexporta toda a configuração com os segredos em branco; um documento guardado de volta com um segredo em branco mantém o valor armazenado, pelo que uma ida-e-volta nunca pode apagar as suas chaves. Um buffer inalterado não guarda nada; JSON inválido aborta. - Esperas do exec.
vm execaguarda até 10 segundos pelo agente de shell do convidado; um502significa que a VM pode não estar em execução ou que o nome não correspondeu. Os pedidos de aprovação que surgem durante uma sessão anexada são apresentados no seu terminal (ver Consentimento em terminais anexados), nunca dentro do convidado.
Verificar um disco a partir da linha de comandos
vm fsck é o gémeo scriptável de Executar fsck… no navegador ext4 e do botão Reparar disco que a aplicação mostra quando um arranque para devido a erros do sistema de ficheiros. Usa o verificador ext4 do próprio Bromure, por isso não é preciso instalar nada.
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
Recusa-se a correr enquanto o espaço de trabalho estiver em execução. A saída termina com um destes resumos: "Filesystem is clean.", "Filesystem repaired; it is now consistent." ou "Filesystem has errors this checker cannot repair.". Uma verificação sem --repair que encontre problemas sugere voltar a executar com --repair. O comando termina com o estado 4 enquanto houver erros. O âmbito e os limites do verificador estão descritos em Avançado.
Modelos, encaminhamento e Fusion
As definições de modelos e fornecedores são tratadas em Modelos e fornecedores e a síntese multimodelo em Fusion; os comandos da CLI são:
| Sinopse | O que faz |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Gere os modelos MLX no dispositivo — explorar o catálogo selecionado (com indicadores de adequação à RAM e de chamadas de ferramentas), transferir com progresso em direto, definir o modelo ativo do espaço de trabalho de uma VM em execução, remover. |
bromure-cli vm fusion enable|disable <vm> | Ativa ou desativa o Fusion numa VM em execução. O espaço de trabalho tem de ter dois ou mais modelos configurados. on/engage e off/disengage são aceites como sinónimos. |
bromure-cli vm routing cloud|local <vm> | Define o encaminhamento do backend de LLM de uma VM em execução: os fornecedores na nuvem dos agentes, ou o modelo local. |
Inspeção de rastreios
Estes leem os rastos do proxy por espaço de trabalho. Não devolvem nada a menos que o espaço de trabalho tenha o rastreio ativado — consulte Definições de rastreio — e a história completa está em Rastreio e Auditoria.
| Sinopse | O que faz |
|---|---|
bromure-cli trace ls [workspace] [--limit 50] | Lista os pedidos recentes: TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS (as flags incluem swap×N, LEAK×N, conv). |
bromure-cli trace summary [workspace] | Agrega totais, classes de estado, contagens de swap/fuga/conversação e principais anfitriões. |
bromure-cli trace hostnames [workspace] | Lista os anfitriões distintos e as suas contagens de pedidos. |
bromure-cli trace leaks [workspace] | Mostra os pedidos com suspeitas de fuga de credenciais (cabeçalho, pré-visualização, suspeita). |
bromure-cli trace clear [-f] | Apaga o histórico de rastreios em memória e em disco após uma confirmação y/N. |
Acesso remoto
A porta de entrada SSH opcional está desativada por predefinição e documentada por completo em Acesso remoto e clientes. Todas as operações passam pela aplicação em execução através do socket de controlo.
| Sinopse | O que faz |
|---|---|
bromure-cli remote [status] | Subcomando predefinido — imprime o estado ativado/em execução, o bind e a porta, os métodos de autenticação, a impressão digital da chave do anfitrião, o utilizador de início de sessão, uma linha de ligação pronta a usar e as chaves autorizadas. |
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey] | Ativa o servidor SSH. Pelo menos um método de autenticação tem de permanecer ativo. |
bromure-cli remote disable | Desliga o servidor SSH. |
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint> | Gere as chaves públicas autorizadas (ls é a predefinição). |
Inscrição empresarial
Equivalentes na CLI da folha Iniciar sessão em bromure.io…, para o aprovisionamento de dispositivos por script. Ver Empresa.
| Sinopse | O que faz |
|---|---|
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME] | Inscreve este Mac num espaço de trabalho da bromure.io usando um código gerado por um administrador. O servidor assume por predefinição $BROMURE_MANAGED_URL ou https://bromure.io/api; o nome do dispositivo assume por predefinição o hostname do Mac. |
bromure-cli unenroll [--force] | Termina a sessão do espaço de trabalho inscrito (y/N a menos que use --force). |
bromure-cli enrollment-status | Imprime o estado da inscrição (espaço de trabalho, utilizador, id de instalação, dispositivo, servidor, data de inscrição, presença de bearer/certificado-folha). "não inscrito" termina com 0 para que a automatização não o trate como uma falha. |
Comandos de integração e internos
| Sinopse | O que faz |
|---|---|
bromure-ac mcp [--debug] [--api-url http://127.0.0.1:9223] | Executa o servidor MCP do AC em stdio para ferramentas de IA. Consulte O servidor MCP do AC. |
__remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Pontos de entrada internos (a TUI ForceCommand do SSH, a bomba de bytes do terminal e os auxiliares de túnel do cliente nativo). Não se destinam a uso interativo. |
A TUI remota (__remote-menu)
Quando o acesso remoto por SSH está ativo, cada início de sessão remoto é forçado (via ForceCommand) para uma interface de terminal ANSI feita à medida, em vez de uma shell — um menu em ecrã alternativo, de 256 cores, conduzido pelas setas e pelos algarismos, que funciona em qualquer PTY SSH (use ssh -t). Espelha a CLI sob a forma de menus:
- Espaços de trabalho — criação com um formulário de ecrã único (Name, Tool, Auth, API key, Memory, Color, Folders, Generate SSH, Full settings…, Create), ações por espaço de trabalho (Attach, New tab, Describe, Configure…, Fusion, Routing, Worktrees…, Reboot…, Suspend, Kill para os que estão em execução; Start, Describe, Configure…, Delete para os desligados) e uma vista de tabela em bruto. Configure… oferece os painéis do editor de definições como formulários de texto; o seu formulário Models é só de leitura (os fornecedores do servidor e se o espaço de trabalho os substitui), já que os modelos se escolhem na aplicação.
- Modelos — os modelos instalados e o catálogo de transferências; selecionar um modelo não instalado oferece-se para fazer
model pulldo mesmo em linha com progresso ao vivo. - Rastreio — Resumo / Anfitriões / Fugas / Recentes / Limpar.
Enquanto está anexado ao tmux de um espaço de trabalho, uma combinação de teclas mágica (por predefinição Ctrl-], mostrada no cabeçalho) faz surgir uma sobreposição de controlo desenhada pelo anfitrião: uma árvore de separadores, New tab, Worktrees…, Fusion, Routing, Edit settings…, Reboot…, Suspend, Disconnect. O convidado nunca vê a tecla de ativação — substitua-a com o ficheiro remote/overlay-key ou $BROMURE_OVERLAY_KEY. Ctrl-b d desliga do tmux e regressa ao menu. A TUI remota trabalha sobre as máquinas e os seus terminais; as sessões de agente, as salas e a Central alcançam-se antes a partir do cliente nativo. A história completa do acesso remoto está em Acesso remoto e clientes.
A API de automatização em loopback
O plano de controlo também pode ser exposto em JSON sobre HTTP por TCP, para scripts em qualquer linguagem. Está desativado por predefinição.
Como ativá-la
Abra Preferências… › Automatização (⌘,) — o painel API de automatização e servidor MCP.
- Ative Ativar servidor de automatização. Quando está ativado, o painel indica A escutar em 127.0.0.1:9223; desativá-lo para o servidor imediatamente.
- Opcionalmente, defina a Porta (com a legenda (padrão: 9223)) e o Endereço de bind (por predefinição
127.0.0.1). A porta e o endereço de bind têm efeito no próximo arranque do servidor — desligue e volte a ligar o interruptor para os aplicar já.
Também pode acionar o interruptor sem a GUI:
defaults write io.bromure.agentic-coding automation.enabled -bool true
Aviso: Definir o Endereço de bind para algo diferente de
127.0.0.1expõe a API — e o servidor MCP que a suporta — à rede, e o painel avisa O bind fora do loopback expõe a API à rede. O servidor MCP não tem autenticação. Não existe autenticação no recetor TCP para além da fronteira de loopback e do controloBROMURE_DEBUG_CLAUDEabaixo. Deixe o endereço de bind em loopback a menos que tenha uma razão específica e de confiança para não o fazer.
Modelo de autenticação
O recetor TCP e o socket de controlo servem as mesmas rotas, mas com acessos diferentes:
| Grupo de rotas | Socket de controlo | API de automatização (TCP loopback) |
|---|---|---|
GET /health, GET /profiles, GET /vms, GET/POST /sessions | Permitido | Permitido |
Criação e edição de espaços de trabalho (POST /profiles, /profiles/<id>…), controlo de VMs e exec (POST /vms, /vms/<id>/…), /trace, /app/state, /preferences, /models/settings, sessões de agente, salas, delegações, tarefas, automatizações, clusters e registos | Permitido | Exige BROMURE_DEBUG_CLAUDE na aplicação |
/state, /state/subscribe, /remote…, /grid-layout, /workspaces, /subscriptions/…, /models/<action>, /connector | Permitido | Nunca — só no socket de controlo |
Por outras palavras: o socket de controlo é o caminho de acesso total, exclusivo do proprietário; a API TCP abre o subconjunto seguro em loopback e coloca tudo o resto atrás do indicador de depuração. Os segmentos de caminho são codificados em percentagem uma única vez (para que nomes de espaços de trabalho com espaços funcionem).
Endpoints para scripting
As rotas mais úteis:
| Endpoint | Finalidade |
|---|---|
GET /health | Sinal de vida, mais debugEnabled. |
GET /state | Instantâneo pontual do espelho: espaços de trabalho, VMs, disposição da grelha, automatizações, pendingPrompts e mais. |
GET /state/subscribe | A forma push de /state: a ligação fica aberta e é transmitido um instantâneo novo sempre que o estado muda. Os clientes nativos usam-na em vez de consultar periodicamente. |
GET /vms / POST /vms | Lista as VMs em execução; arranca uma VM a partir de uma referência de espaço de trabalho ou de uma especificação inline com montagens (o que vm run chama). |
POST /vms/<id>/exec | Executa um comando numa VM; interactive converte a ligação num fluxo pty em bruto com enquadramento. |
GET /profiles / POST /profiles | Lista os espaços de trabalho; cria um a partir de um documento JSON. |
GET / PUT /preferences | Lê ou substitui o modelo Defaults das Preferências (segredos em branco na leitura, mantidos quando deixados em branco na escrita). É isto que a janela de Preferências de um cliente nativo edita num anfitrião remoto. |
GET / PUT /models/settings | Lê ou substitui as definições globais de modelos (Preferências › Modelos), com as chaves ocultadas. |
POST /subscriptions/register / POST /subscriptions/forget | Inicia neste anfitrião, para um cliente, um início de sessão num fornecedor ({"provider": …, "profileId": …}; o URL de início de sessão regressa através de /state), ou esquece um início de sessão guardado. |
POST /agent-sessions/start | Inicia uma sessão de agente (profile, tool e, opcionalmente, uma pasta, um repositório ou uma mensagem inicial). |
POST /agent-sessions/<id>/<action> | Atua sobre uma sessão: send, keys, resume, close, rename, nickname, archive, unarchive, delete, review e as ações de ramo (worktree, branch-merge, branch-pr, branch-discard, branch-keep, branch-decline). |
GET /agent-sessions/<id>/transcript, GET /agent-sessions/<id>/pending | A conversa de uma sessão (JSONL em base64) e aquilo por que está à espera (uma pergunta e as suas opções). |
POST /agent-sessions/switchboard | Inicia ou mostra a Central. |
POST /agent-rooms/create|move|group, POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboard | Cria e edita salas. |
POST /delegations/request, POST /delegations/<id>/<action>, GET /delegations/<id>/file | Delegação entre anfitriões: a sessão de um anfitrião pede algo a uma sessão noutro e depois envia, responde, redireciona, encerra ou cancela, e obtém os ficheiros anexados. |
GET / POST /tasks, /tasks/<id>/… | Lê e conduz o quadro de Tarefas de código. |
GET / POST /k8s, /k8s/<id>/<action>, POST /registries, /registries/<id>/<action> | Cria e conduz clusters Kubernetes e registos. |
GET /automations / POST /automations/<id>/run | Lê e conduz automatizações agendadas (consulte Controlar automatizações através da API). |
POST /prompts/<id>/answer | Responde a um pedido de ciclo de vida em fila (consulte Responder a pedidos pendentes). |
Como o caminho do socket de controlo contém espaços, capture-o primeiro numa variável:
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"}'
O subconjunto seguro funciona pela API TCP depois de a ativar — por exemplo, listar os espaços de trabalho e abrir a janela de uma máquina não precisa do indicador de depuração:
curl http://127.0.0.1:9223/profiles
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Web app"}'
Nota: As rotas do plano de controlo são uma superfície de integração partilhada com o cliente nativo, não uma API pública versionada; a forma dos pedidos e respostas pode mudar entre versões. Os comandos da CLI acima são a forma estável de automatizar o Bromure com scripts. As rotas só de depuração, as variáveis de ambiente e as localizações de ficheiros estão catalogadas no Apêndice.
O servidor MCP do AC (bromure-ac mcp)
bromure-ac mcp executa um servidor MCP JSON-RPC em stdio (nome do servidor bromure-ac) que permite a uma ferramenta de IA no seu Mac gerir a aplicação. Envolve a API HTTP de automatização e o AppleScript, por isso ative primeiro o servidor de automatização — as ferramentas de listagem e de janelas chamam a API HTTP em --api-url (por predefinição http://127.0.0.1:9223). Não está disponível com o nome bromure-cli.
As ferramentas que expõe:
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(abre a janela de um espaço de trabalho; aguarda até 30 segundos),bromure_ac_close_sessionbromure_ac_get_profile,bromure_ac_set_profile(substituição JSON atómica, id preservado)bromure_ac_get_profile_setting,bromure_ac_set_profile_setting
Com --debug (e BROMURE_DEBUG_CLAUDE definido na aplicação) acrescenta bromure_ac_app_state, bromure_ac_vm_exec, bromure_ac_vm_read_file e bromure_ac_vm_write_file.
Para o ligar ao Claude Code, acrescente o seguinte a ~/.config/claude-code/.mcp.json (ou ao equivalente do seu cliente). É exatamente o excerto que a secção Configuração do cliente MCP do painel Automatização mostra:
{
"mcpServers": {
"bromure-ac": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac",
"args": ["mcp"]
}
}
}
Nota: As ferramentas de perfil
get/setrecorrem aoosascript(AppleScript contra a aplicação em execução), pelo que a aplicação GUI tem de estar em execução e o macOS pode pedir uma vez a permissão de Automatização. O JSON de perfil viaja com os segredos em branco a menos queBROMURE_DEBUG_CLAUDEesteja definido.
Servidores MCP dentro das VMs
Independentemente do servidor MCP do AC, o Bromure dá aos agentes dentro de cada VM um conjunto de servidores MCP integrados — sem qualquer configuração. Cada um é um pequeno adaptador Python stdio colocado só de leitura no convidado em /mnt/bromure-meta/; o adaptador liga ao anfitrião por vsock e volta a ligar indefinidamente em caso de quebra, pelo que o agente nunca perde as suas ferramentas. O anfitrião serve as ferramentas e cada chamada é verificada lá: um agente só pode ver e atuar sobre aquilo a que a sua própria máquina e sessão têm direito.
| Porta vsock | Servidor | Quem o recebe | Ferramentas |
|---|---|---|---|
| 5830 | browser | Todos os agentes | As 23 ferramentas browser_* que conduzem o Chromium incorporado da máquina (consulte abaixo). |
| 5831 | task board | Só os agentes que executam uma tarefa de código | board_get_task, board_set_plan, board_create_subtasks, board_set_dependencies, board_ready_for_review, board_report_landing. |
| 5832 | plan stream | Execuções de planeamento de tarefas de código | Não é um servidor MCP: o canal pelo qual a execução de planeamento de uma tarefa transmite o seu plano ao quadro. |
| 5833 | automations | Todos os agentes | automation_list, automation_get, automation_create, automation_update, automation_delete, automation_run — limitadas às automatizações da própria máquina do agente. Consulte Automatizações. |
| 5834 | infrastructure | Todos os agentes | infrastructure_overview, cluster_status, cluster_create, cluster_start, registry_status, registry_create, registry_start — limitadas aos clusters e registos a que a máquina tem acesso. Consulte Clusters Kubernetes e registos. |
| 5835 | delegation | Todas as sessões de agente | delegate, request, list_peers, list_delegations, read_inbox, wait, ask, report, deliver, answer, steer, close_delegation, cancel, worktree_create, worktree_status, worktree_merge. O adaptador indica ao anfitrião em que janela tmux corre, pelo que um agente não se pode fazer passar por outra sessão. Consulte Agentes a trabalhar em conjunto. |
| 5836 | switchboard | Só a sessão da Central | 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. |
Os servidores browser, automations, infrastructure e delegation são escritos na configuração MCP de cada agente, ao lado dos servidores que adiciona no painel MCP da máquina (Definições de MCP). Os servidores task board e switchboard são passados apenas às execuções que precisam deles.
O servidor browser
O servidor browser conduz o Chromium incorporado da máquina, que corre na sua própria VM descartável. As suas 23 ferramentas cobrem a navegação e a inspeção — browser_navigate, browser_new_tab, browser_list_tabs, browser_activate_tab, browser_close_tab, browser_back, browser_forward, browser_reload, browser_screenshot (com opção de página inteira), 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 e browser_pick_element (um seletor interativo de elementos de 60 segundos).
Uma chamada de ferramenta com o navegador fechado abre-o e aguarda o arranque a frio. Como o navegador é uma VM separada, as instruções do servidor dizem aos agentes que alcancem um servidor de desenvolvimento na sua máquina pelo IP LAN da máquina (hostname -I), nunca por localhost. A história completa está em O Navegador Incorporado.
Nota: Num cliente nativo, o fluxo browser-MCP dos agentes pode seguir pela ligação SSH, para que um agente remoto conduza o painel de navegador que vê localmente. Consulte Acesso remoto e clientes.
OAuth para os servidores MCP que adiciona
Os servidores MCP HTTP que adiciona no editor podem autenticar-se através do broker OAuth do lado do anfitrião: este realiza a descoberta RFC 8414 e o registo dinâmico de cliente RFC 7591 (como Bromure AC), executa um fluxo de código de autorização PKCE no navegador do seu sistema e serve o callback num recetor de loopback (portas 28500–28599). A página de sucesso indica Autorizado — Pode fechar este separador e regressar ao Bromure AC. Todo o fluxo corre no anfitrião, pelo que a VM nunca vê credenciais OAuth reais.
AppleScript (Bromure AC Suite)
Um dicionário de scripting, o Bromure AC Suite, é outra superfície de automatização — útil para orquestração e para ferramentas de captura de ecrã que precisam de IDs de janela. Aponte para application "Bromure Agentic Coding" a partir do Editor de Scripts ou do osascript. Abrange:
- Perfis —
list profiles,create ac profile <name> [color <c>](devolve um UUID),delete ac profile <name|uuid>, e ida e volta do documento completo viaget profile json/set profile json(o perfil inteiro; id preservado; segredos guardados reintegrados nos campos em branco). - Definições por campo —
get profile setting … key …/set profile setting … key … to value …. - Janelas do editor —
open profile manager,open ac profile editor,close ac profile editor,select editor category <key>eget editor window id/get main window id(umCGWindowIDparascreencapture -l). - Janelas de máquina —
open ac session,close ac session,list ac sessions. - Estado e definições da aplicação —
get app state(JSON), maisget ac app setting/set ac app settingpara as chavesautomation.enabled,automation.port,automation.bindAddress,remoteAccess.enabled,remoteAccess.port,remoteAccess.bindAddress,managed.serverURLemanaged.acIngestURL. Definirautomation.enabledaciona o servidor HTTP em tempo real.
Por exemplo, para abrir a janela de uma máquina:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Web app"'
Nota: O JSON de perfil viaja com os segredos removidos a menos que
BROMURE_DEBUG_CLAUDEesteja definido. DefinirapiKeycomo uma cadeia vazia viaset profile settinglimpa a chave em vez de a manter — ao contrário do comportamento de manter-em-branco das pontes de ida-e-volta de JSON. A mudança de idioma não é deliberadamente programável; em vez disso, reinicie a aplicação com, por exemplo,-AppleLanguages "(fr)".
Automatizações agendadas
Uma automatização agendada é uma execução de agente recorrente e sem supervisão, associada a uma máquina. As automatizações são criadas e geridas a partir do quadro de automatizações (⇧⌘A, ou a secção Automatizações da barra lateral), e os agentes podem gerir as automatizações da própria máquina através do servidor MCP automations acima. A funcionalidade completa — acionadores, agendamentos, encadeamento, o ecrã de injeção obrigatório, o histórico de execuções — está documentada em Automatizações. Esta secção aborda a superfície do plano de controlo: conduzir automatizações através da API, responder aos pedidos de decisão que um arranque sem supervisão pode levantar e o funcionamento do consentimento num terminal anexado.
Controlar automatizações através da API
| Endpoint | Finalidade |
|---|---|
GET /automations | Lista as automatizações e o seu histórico de execuções. |
POST /automations | Cria ou atualiza (upsert) uma automatização. |
DELETE /automations/<id> | Elimina uma automatização. |
POST /automations/<id>/run | Dispara-a agora (não altera o agendamento). |
POST /automations/<id>/toggle | Pausa-a ou retoma-a. |
POST /automation-runs/<run-id>/acknowledge | Retira uma execução falhada ou bloqueada da coluna Requer atenção do quadro. |
GET /automation-runs/<run-id>/transcript | A transcrição arquivada de uma execução concluída (base64). |
Responder a pedidos pendentes
Algumas decisões de ciclo de vida — a oferta de atualização da imagem base, um disco que falha a verificação no arranque, um alerta de comprometimento, uma limpeza por comprometimento — aparecem normalmente como um alerta local. Quando não está ninguém ao Mac para responder (um agente sem interface, ou um arranque pedido por um cliente nativo remoto), ficam em fila: surgem em GET /state sob pendingPrompts (cada um com id, profileID, title, message e rótulos de botões) e respondem-se com POST /prompts/<id>/answer:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Remind me later"}'
Passe um dos próprios rótulos de botão do pedido como choice. Se nenhum cliente responder antes do tempo limite do pedido, este resolve-se para a sua alternativa segura — nunca a opção destrutiva (um alerta de comprometimento, por exemplo, recorre a desligar a VM). Se não houver nenhum cliente ligado, recorre à alternativa de imediato. Um cliente nativo mostra estes pedidos como alertas normais.
Nota: As automatizações, as delegações e os outros arranques sem supervisão nunca ficam à espera de um pedido. Um arranque que precisaria de uma resposta sua — uma máquina marcada como comprometida, ou um modelo local ainda a ser transferido — é recusado, com um motivo claro no histórico da execução ("The workspace is marked compromised — start it yourself to confirm the wipe."). Uma máquina suspensa cujo estado guardado não possa ser reposto arranca do zero.
Consentimento em terminais anexados
Enquanto um terminal está anexado de forma interativa a uma máquina — através de vm exec -it, vm attach ou de um attach SSH — os pedidos de aprovação do lado do anfitrião (uso de credenciais e semelhantes) são mostrados no seu terminal, não dentro do convidado. O pedido diz 🔒 Bromure — approval required com escolhas numeradas e Choice [1-N] (Enter or timeout = deny). Enter, tempo esgotado, EOF ou desanexar significam todos recusa, pelo que um convidado comprometido nunca consegue forjar uma aprovação. O tmux do convidado é redesenhado a seguir.
Endpoints de depuração (BROMURE_DEBUG_CLAUDE)
Abrir a aplicação com BROMURE_DEBUG_CLAUDE definido levanta a barreira de depuração da API de automatização TCP, pelo que as rotas da linha do meio da tabela de autenticação também funcionam por TCP, incluindo estas rotas de depuração (sempre disponíveis no socket de controlo, salvo indicação em contrário):
GET /debug/ui-shot?path=…&which=…— a aplicação desenha a sua própria janela num PNG (não é preciso a autorização de Gravação de ecrã) e devolve um despejo das molduras das subvistas; a saída predefinida é/tmp/bromure-ui-shot.png.POST /debug/editor— controla o editor de definições para a ferramenta de captura de ecrã.POST /detect/prompt-injection— executa os detetores reais e devolve o seu veredicto (esta rota requer a flag de depuração mesmo no socket de controlo).
O indicador também permite que os segredos passem tal como estão pelas pontes de JSON de perfil do AppleScript e do MCP, e é exigido pelas ferramentas de VM de bromure-ac mcp --debug. GET /health indica debugEnabled para que saiba em que modo está a aplicação.
Aviso:
BROMURE_DEBUG_CLAUDEremove a barreira de segurança que normalmente mantémexec, o controlo das VMs e os segredos de perfil em bruto fora da API TCP de loopback. Execute a aplicação com ele apenas numa máquina que controla, e nunca o combine com um endereço de bind que não seja de loopback — isso exporia acesso total à shell das VMs, segredos não ocultados e capturas de janelas a qualquer pessoa que consiga chegar à porta. É distinto deBROMURE_AC_DEBUG(registo de eventos em stderr) e deBROMURE_CLI_DEBUG(diagnóstico do socket da CLI), que são interruptores de registo inofensivos.