Resolução de problemas

Este capítulo está organizado por sintoma. Cada entrada indica a causa provável e os passos para a corrigir. Comece por Primeira paragem: a Linha do tempo, o registo e a saúde — quase todos os diagnósticos abaixo dependem de uma dessas fontes — e depois salte para a secção que corresponde ao que está a ver.

Dois factos estão na base de quase tudo o que se segue. Primeiro, uma máquina (um espaço de trabalho, no editor de definições) é uma sandbox persistente: o seu disco de sistema (disk.img) e a sua pasta pessoal Linux (home.img) sobrevivem entre arranques, pelo que um problema num deles não se resolve simplesmente voltando a abrir. Segundo, o Bromure Agentic Coding aplica a política de segurança no anfitrião, antes de o tráfego chegar à VM — por isso, os bloqueios e erros que parecem vir "de dentro" do convidado são normalmente o proxy do anfitrião a falar, e resolvem-se na aplicação, não na VM.

Primeira paragem: a Linha do tempo, o registo e a saúde

Antes de alterar seja o que for, descubra o que a própria aplicação está a reportar.

A Linha do tempo de segurança

Abra Janela › Segurança… (ou procure-a com ⌘K). Regista cada decisão que os motores de segurança do Bromure tomaram pelos seus agentes — intermediação e uso de credenciais, veredictos da firewall e do OpenShell, recusas da sandbox do convidado, salvaguardas, verificações da cadeia de fornecimento, análises de injeção de prompt, trocas de dados pessoais, mensagens de delegação entre agentes e problemas de TLS a montante. O registo está sempre ativo, sobrevive a reinícios, e os eventos de cada dia são guardados durante 90 dias.

A janela Segurança no separador Visão geral: mosaicos das Últimas 24 horas para Bloqueada, Permitidos, Intermediação de credenciais, Cadeia de suprimentos e Proteção de dados pessoais, uma tabela com as proteções de cada máquina e uma lista dos Últimos bloqueios
  • O separador Visão geral resume um período recente (as últimas 24 horas por predefinição) — Bloqueada, Permitidos, Intermediação de credenciais, Cadeia de suprimentos, Proteção de dados pessoais —, mostra as proteções de cada máquina e lista os Últimos bloqueios. Um bloqueio é normalmente a resposta mais rápida a "porque é que o pedido do agente falhou?"; clique nele para encontrar cada vez que aconteceu.
  • O separador Linha do tempo lista todos os eventos. Restrinja-o com o campo Filtrar eventos… (um nome de pacote, um anfitrião, uma máquina), os filtros de espaço de trabalho, de período e de motor e, quando espelha anfitriões remotos, o filtro de máquina (Todas as máquinas / Este Mac / um anfitrião).
  • Numa máquina com a sentinela do kernel, faça duplo clique numa linha Rede para ver que prompt, que chamada de ferramenta e que processo fizeram a ligação (linhagem de rede).
  • Exportar… guarda os eventos — com o filtro aplicado — num ficheiro CSV. Anexe-o a um relatório de erro ou entregue-o à sua equipa de segurança.
  • Limpar apenas oculta os eventos na janela; os ficheiros diários no disco são mantidos.
O separador Linha do tempo da janela Segurança: um campo de filtro, filtros de espaço de trabalho, de período e de motor, os botões Exportar… e Limpar, e linhas dos motores Proteção de dados pessoais, Injeção de prompt, Cadeia de fornecimento, Firewall e Intermediação de credenciais

A janela é descrita em pormenor em Visão geral e linha do tempo de segurança.

O registo da aplicação

A aplicação guarda uma cópia de tudo o que escreve no erro padrão em ~/Library/Logs/BromureAC/bromure-ac.log, quer a tenha iniciado a partir de um terminal ou não. Cada execução começa com uma linha === … launch pid … que indica a compilação e a versão do macOS, e termina com uma linha exit; uma falha deixa uma linha com o nome do sinal fatal. Quando o ficheiro passa dos 8 MB, é rodado no arranque seguinte, e é mantido um ficheiro anterior como bromure-ac.log.1.

É aqui que deve procurar quando:

  • não foi possível restaurar o estado guardado de uma máquina (a linha indica o que mudou desde a suspensão — consulte Uma máquina suspensa não retoma onde ficou);
  • um arranque sem supervisão foi recusado, ou foi feita uma reparação do sistema de ficheiros;
  • a aplicação fechou inesperadamente. Se o macOS não mostrar nenhum relatório de falha, as últimas linhas do registo são o melhor testemunho do que aconteceu. O motor de terminal incorporado também pode ter guardado detalhes da falha em ~/Library/Caches/com.mitchellh.ghostty/sentry.

Para ver o registo em direto, ou acrescentar saída de depuração, abra a aplicação a partir de um terminal:

"/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac"

Para mais detalhe, defina uma variável de depuração antes do comando (consulte o Apêndice):

  • BROMURE_AC_DEBUG=1 — depuração com data/hora para o motor de automatização, os classificadores de injeção e o pipeline de rastreios.
  • BROMURE_CLI_DEBUG=1 — diagnósticos de ligação ao control-socket para os comandos da CLI.
  • BROMURE_REPAIR_DEBUG=1 — diagnósticos do proxy de reparação da inferência local, acrescentados a /tmp/bromure-repair.log.

A verificação de saúde

Enquanto está em execução, a aplicação disponibiliza um socket de controlo exclusivo do proprietário em ~/Library/Application Support/BromureAC/control.sock. Peça-lhe o estado de saúde para confirmar que a aplicação está viva e a responder:

curl --unix-socket "$HOME/Library/Application Support/BromureAC/control.sock" http://localhost/health
{ "status": "ok", "service": "bromure-ac-automation", "debugEnabled": false }

Se ativou o servidor de automatização em loopback (Preferências › Automatização, desativado por predefinição), o mesmo endpoint responde por TCP na porta configurada — 9223 por predefinição:

curl http://127.0.0.1:9223/health

Uma ligação recusada significa que a aplicação (ou o seu agente sem interface) não está em execução; bromure-cli vm ls arranca o agente em segundo plano a pedido e é outra verificação rápida. Consulte CLI, API e MCP para instalar o bromure-cli.

A consola de instalação

Enquanto a imagem base se instala — no passo Instalação do assistente de configuração inicial, ou depois de Recompilar imagem base… — a vista de progresso tem uma secção recolhida Saída da consola que transmite o registo em bruto do instalador, com um botão Copiar. Só as últimas 100 linhas ficam no ecrã, por isso copie o registo antes de a janela fechar se precisar de o anexar a um relatório.

Configuração e instalação da imagem base

Nenhuma máquina pode correr enquanto não existir uma imagem base Linux. No primeiro arranque, o assistente de configuração inicial abre em Boas-vindas ao Bromure; clicar em Começar avança para o passo Instalação, que executa a mesma instalação que bromure-ac init. O fluxo completo está em Instalação e primeira execução; esta secção explica o que fazer quando falha.

O passo de boas-vindas do assistente: Boas-vindas ao Bromure, um botão Começar e a barra de passos Boas-vindas, Instalação, Credenciais, Escolher, Modelos, Concluído

A transferência pré-compilada falha ou fica bloqueada

Causa. O caminho preferido transfere uma imagem assinada e comprimida com gzip a partir de https://dl.bromure.io, verifica o seu SHA-256 e expande-a. Uma interrupção de rede, uma falha da CDN ou uma soma de verificação errada interrompem-no. A transferência já volta a tentar, obtendo de novo o catálogo entre tentativas (a publicação semanal pode substituir a compilação anterior a meio da transferência).

Correção. Acompanhe o estado e a Saída da consola. Numa falha do lado da transferência, a aplicação mostra um alerta Falha na transferência da imagem que oferece Compilar localmente ou Cancelar:

  1. Se estiver online e a falha foi passageira, tente novamente a partir do menu da aplicação: Recompilar imagem base… → Transferir pré-compilada.
  2. Se a transferência não conseguir concluir-se (rede restritiva, CDN bloqueada), escolha Compilar localmente para compilar a imagem no seu Mac (cerca de 10 minutos). O resultado é a mesma imagem.
  3. Na linha de comandos, bromure-ac init recorre automaticamente à compilação local.

"Problema de rede durante a compilação da imagem base"

Causa. A compilação local arranca uma VM instaladora Alpine descartável que necessita de uma concessão DHCP e de acesso de saída. Em algumas VPNs e redes bloqueadas, não obtém concessão, ou as suas transferências ficam num buraco negro devido a uma incompatibilidade de MTU.

Correção. A compilação para com um alerta Problema de rede durante a compilação da imagem base que oferece Reparar e tentar novamente (reinicia os daemons de rede do macOS — pede a sua palavra-passe de administrador) ou Cancelar. Se continuar a falhar numa VPN, reduza a MTU da placa de rede do convidado antes de tentar novamente:

defaults write io.bromure.agentic-coding vm.mtu -int 1280

O MTU já assume por predefinição 1280; baixe-o ainda mais apenas se um caminho PMTU empresarial o exigir.

A instalação fica sem espaço em disco

Causa. Qualquer instalação de imagem exige, à partida, pelo menos 8 GB livres no volume que contém o diretório de suporte, e um monitor a meio da compilação interrompe-a se o espaço livre acabar, para que a compilação não fique parada até um tempo limite sem explicação.

Correção. Liberte espaço e tente novamente. Consulte Espaço em disco para saber o que consome mais.

A imagem base fica num estado parcial

Causa. Cancelar a meio da instalação, ou uma compilação falhada, deixa ficheiros transitórios: base.img.partial, base.img.gz.partial, stock.img.partial e efivars.partial no diretório de suporte. A sua presença significa que há uma instalação em curso ou que foi interrompida. A imagem real só é substituída de forma atómica, pelo que uma imagem existente e funcional continua utilizável durante todo o processo.

Correção. Volte a executar a instalação até ao fim (Recompilar imagem base… ou bromure-ac init). Para recomeçar do zero, bromure-ac reset elimina os ficheiros da imagem base (base.img, efivars.bin, base.version, image-state.json e o descarregamento guardado stock.img / stock-state.json) após confirmação — não mexe nas suas máquinas. Confirme o que está instalado a qualquer momento com bromure-ac info.

Está disponível uma imagem base mais recente

Podem aparecer dois pedidos diferentes:

  • Atualização da imagem base disponível (no arranque) — a aplicação inclui, ou o catálogo publica, uma imagem base mais recente do que a que está no disco. Atualizar agora transfere-a (com uma recompilação local como alternativa); Depois volta a perguntar no próximo arranque. A imagem atual continua a funcionar entretanto.
  • Está disponível uma imagem de base mais recente. (quando uma máquina arranca) — a base no disco é mais recente do que aquela a partir da qual o disco de sistema desta máquina foi clonado. Sim, atualizar repõe o disco de sistema da máquina sobre a nova base: tudo o que foi instalado na VM com apt é apagado, enquanto a pasta pessoal é mantida. Não mantém a base atual até sair a próxima; Lembrar-me mais tarde volta a perguntar no primeiro arranque depois de amanhã. A resposta é memorizada por máquina.

Atualizar a imagem base nunca altera, por si só, o disco de uma máquina existente; cada máquina só é atualizada quando responde Sim, atualizar.

Uma máquina não inicia, não arranca ou não retoma

As máquinas estão listadas em Máquinas virtuais na barra lateral. O botão ⋯ na linha de uma máquina oferece Iniciar (ou Retomar, ou Desligar / Suspender / Reiniciar enquanto está em execução). Com uma sessão no palco, o menu da máquina na barra de ferramentas — a cápsula com o nome da máquina — oferece Detalhes da máquina: o painel com os cartões CPU, Memória, Disco e Tempo ativo, o resumo da configuração e os botões de energia. As máquinas são tratadas em Máquinas.

O arranque nunca termina ("IMERSÃO FALHOU")

Causa. As máquinas não são pré-aquecidas — arrancam a frio a partir do seu disco copy-on-write (ou restauram um instantâneo de suspensão), o que demora alguns segundos. Se nenhum terminal responder ao fim de 30 segundos, o ecrã de arranque passa a IMERSÃO FALHOU: "A VM pode estar travada, ou o disco do sistema dela pode estar danificado."

Correção.

  1. Clique uma vez em Continuar à espera — um primeiro arranque depois de uma atualização da imagem, ou um Mac lento, pode demorar mais.
  2. Se mesmo assim não arrancar, reinicie a máquina a partir do seu menu ⋯ (Reiniciar).
  3. Se a causa for um ficheiro danificado no disco de sistema, consulte Recuperar uma máquina que um ficheiro danificado impede de arrancar, ou clique em Redefinir disco do sistema… para voltar a clonar o disco de sistema a partir da imagem base. A sua pasta pessoal — projetos, dotfiles, chaves .ssh, histórico da shell — é mantida; tudo o que instalou com apt e as alterações em /etc perdem-se.

O arranque de uma máquina para num erro de disco

Causa. O disco de sistema falhou a verificação do sistema de ficheiros no arranque — normalmente porque a VM foi parada a meio de uma escrita (saída forçada, falha, corte de energia). O convidado não consegue avançar a partir daqui sozinho.

Correção. O palco da máquina mostra ERRO DE DISCO — "O disco do sistema falhou na verificação do sistema de arquivos na inicialização, e a inicialização não pode continuar." — com a linha da consola que o provocou:

  1. Clique em Reparar disco. O Bromure para a VM, repete o journal do disco no Mac com o seu verificador integrado e volta a arrancar. Nada é eliminado.
  2. Se o arranque voltar a falhar depois de uma reparação, clique em Redefinir disco do sistema… e confirme Redefinir para a base. A pasta pessoal é mantida.

Num cliente nativo, a mesma escolha chega como pedido: "“‹machine›” can't boot — disk error", com Reparar disco / Agora não primeiro e Reset System Disk / Agora não depois de tentada uma reparação. Também pode executar a reparação por si com a máquina parada: bromure-cli vm fsck <machine> --repair. Consulte Avançado.

Uma máquina suspensa não retoma onde ficou

Causa. Retomar restaura a RAM guardada (vm.state) sobre o hardware virtual exato da máquina. Quando a configuração mudou desde a suspensão — mais ou menos memória, outras pastas partilhadas, uma nova compilação da aplicação ou da imagem base —, o estado guardado deixa de poder ser restaurado.

O que acontece. O Bromure não deixa a máquina presa: quando uma restauração falha, descarta o estado guardado e arranca a máquina do zero, com o mesmo disco e a mesma pasta pessoal. Os seus ficheiros estão todos lá; só se perdem os programas em execução e os terminais abertos da sessão suspensa. O registo da aplicação indica o motivo, nomeando o que mudou — por exemplo configuration changed since the suspend: memoryGB: 8 → 6 — booting fresh. As automatizações e delegações que arrancam uma máquina suspensa comportam-se da mesma forma.

Alguns casos relacionados:

  • Pastas partilhadas alteradas durante a suspensão. Guardar as definições da máquina pergunta Descartar a VM suspensa de "‹machine›"? — escolha Descartar e guardar; o arranque seguinte é a frio. Os ficheiros da pasta pessoal e das pastas partilhadas não são afetados.
  • Repor ou apagar um disco descarta sempre o estado guardado: um disco novo com a RAM antiga ficaria corrompido de imediato.
  • Compilações de desenvolvimento. Um estado guardado por uma compilação da aplicação muitas vezes não pode ser restaurado por outra compilação local. Desligue as máquinas, em vez de as suspender, antes de mudar de compilação.

A máquina está marcada como "Comprometida"

Causa. O proxy viu a credencial substituta de uma máquina a caminho de um anfitrião para o qual não foi emitida — a assinatura de uma exfiltração. O pedido é bloqueado, a VM é pausada e o alerta Este ambiente pode ter sido comprometido lista as fugas com quatro opções:

BotãoO que aconteceMáquina marcada como comprometida?
Desligar (predefinição)A VM é desligada.Sim
BloquearSó este pedido é recusado; a VM retoma. Se tentar de novo, o alerta volta.Não
PermitirResponsabiliza-se pelo destino: durante o resto desta sessão, a credencial é trocada e enviada para lá, e os pedidos seguintes para esse destino deixam de ser assinalados.Não
Guardar para investigaçãoEscolhe uma pasta; o Bromure copia para lá a imagem do disco e arquivos da pasta pessoal e das pastas partilhadas, e depois desliga a VM.Sim

Num cliente nativo ou num Mac sem interface, o pedido oferece Desligar / Bloquear / Permitir e recorre a Desligar quando ninguém responde. Se ativou Não alertar sobre exfiltração de credenciais no painel Salvaguardas da máquina, não aparece nenhum alerta: a fuga continua a ser bloqueada e registada na Linha do tempo.

Correção. Uma máquina marcada como comprometida mostra "Comprometido — ao iniciar, será solicitado apagar o disco e a pasta pessoal" e recusa arrancar até confirmar a limpeza em ⛔ "‹machine›" está marcado como comprometido. Limpar e iniciar remove o disco, a pasta pessoal e o estado guardado, e depois arranca uma VM nova — as suas credenciais, chaves SSH e definições da máquina são mantidas. As pastas de projeto partilhadas vivem fora do armazenamento do Bromure e não são limpas, por isso reveja-as à mão à procura de ficheiros contaminados. Uma automatização ou delegação não pode confirmar a limpeza: o seu arranque é recusado com "The workspace is marked compromised — start it yourself to confirm the wipe.". O modelo de deteção é descrito em Credenciais e a fronteira de transmissão.

"The workspace did not boot in time" / "did not start in time"

Causa. Uma sessão, automatização ou tarefa de código esperou que a sua máquina arrancasse e desistiu. Motivos comuns:

  • A máquina não conseguiu mesmo arrancar — procure IMERSÃO FALHOU ou ERRO DE DISCO no seu palco (acima).
  • Um arranque sem supervisão foi recusado porque precisava de uma resposta sua. O histórico de execuções das automatizações mostra o motivo em vez do tempo esgotado: "The workspace is marked compromised — start it yourself to confirm the wipe." ou "“‹model›” is still downloading — the workspace can't start until it has.".
  • O Mac estava em repouso ou sobrecarregado.

Correção. Inicie a máquina por si a partir do menu ⋯ e acompanhe o seu palco, responda a qualquer pedido que surja e volte a tentar a sessão ou a execução. Os pedidos de arranque (atualizações de imagem, novos pacotes recomendados) aparecem como folhas na janela principal e nunca bloqueiam o arranque das máquinas.

Se, em vez disso, uma nova sessão disser "O agente nunca apareceu…", a máquina pode estar a correr um agente interno da VM mais antigo: Reinicie-a a partir do menu ⋯ e tente de novo.

Espaço em disco livre insuficiente

Causa. A criação de qualquer clone copy-on-write ou imagem home recusa prosseguir com menos de 1 GB livre no volume, falhando rapidamente com um erro de disco cheio em vez de encravar a meio de uma sessão.

Correção. Liberte espaço (consulte Espaço em disco) e volte a iniciar a máquina.

Recuperar uma máquina que um ficheiro danificado impede de arrancar

Causa. Uma configuração incorreta escrita no convidado — um /etc/fstab avariado, um dotfile corrompido — pode impedir a VM de arrancar antes de conseguir iniciar sessão para o corrigir. Como o macOS não consegue montar ext4, não pode simplesmente abrir o disco no Finder.

Correção. Use o navegador ext4 integrado, com a máquina parada:

  1. Espaços de trabalho › Abrir ficheiro ext4… e escolha o disk.img ou o home.img da máquina em ~/Library/Application Support/BromureAC/profiles/<uuid>/.
  2. Navegue até ao ficheiro problemático. Clique com o botão direito para o Pré-visualizar ou Extrair… para o seu Mac.
  3. Para o corrigir no local, clique em Ativar edição… (nunca edite uma imagem que uma VM em execução tenha aberta) e depois clique com o botão direito → Substituir… com uma cópia corrigida do seu Mac.
  4. Se o navegador indicar que o journal precisa de recuperação, clique primeiro em Executar fsck…. O verificador está integrado; não é preciso instalar nada.

Se o dano estiver na pasta pessoal — um agente apagou ou estragou algo —, Rebobinar a pasta pessoal… no menu ⋯ da máquina recua a pasta pessoal ao estado que tinha num arranque anterior. Consulte Avançado.

Aviso: A substituição no lugar só funciona quando o novo conteúdo cabe nos blocos já alocados do ficheiro — aumentar um ficheiro é recusado ("That file would need to grow"). Use-a para corrigir configurações e retirar ficheiros, não para acrescentar dados.

"Repor disco" / "Apagar home…" estão a cinzento

Causa. Estas ações destrutivas são recusadas enquanto a máquina está em execução.

Correção. Desligue primeiro a máquina (a dica diz "Close the session window first."), e depois tente de novo.

Nós e registos Kubernetes

Os clusters e os registos correm nas suas próprias máquinas, listadas em Máquinas virtuais › Kubernetes e Registos. Consulte Clusters Kubernetes e registos.

Um nó ou registo não volta depois de sair ou de Parar

O que o Bromure faz. Sair da aplicação suspende os nós dos clusters e os registos, e o arranque seguinte retoma-os; um instantâneo que não se restaura recorre a um arranque do zero, como em qualquer máquina. Um Parar explícito desliga-os de forma limpa, com até 60 segundos de margem.

Se, mesmo assim, o arranque de um nó parar numa verificação do sistema de ficheiros, o Bromure deteta-o na consola, para a VM, executa o seu verificador integrado nos discos de sistema e de dados do nó e — quando isso não chega — executa o e2fsck do Linux sobre eles a partir de uma máquina descartável. Tenta o arranque mais uma vez; se também falhar, o cluster mostra um erro claro.

Correção. Consulte o separador Registo do cluster para ver o que aconteceu. Se a reparação automática desistiu, reinicie o cluster a partir do menu Ações do cluster; em último caso, elimine-o e crie-o de novo.

Um espaço de trabalho não vê um cluster ou registo

Causa. O acesso é por máquina. Uma máquina que não esteja na lista de acesso de um cluster ou registo não recebe nenhum contexto ~/.kube/config nem $BROMURE_REGISTRY.

Correção. Abra o separador Acesso do cluster ou registo (num cluster, também Ações do cluster › Acesso dos espaços de trabalho…) e adicione a máquina. O contexto de um cluster é enviado para o ~/.kube/config das máquinas em execução assim que altera o seu acesso.

Problemas de início de sessão e de modelos

O desenho mantém as credenciais reais fora da VM: o convidado corre com tokens substitutos ("falsos") e o proxy do anfitrião troca-os pelos segredos reais durante a transmissão. A maioria dos sintomas de "autenticação" tem origem nessa fronteira. Consulte Credenciais e a fronteira de transmissão e Modelos e fornecedores.

O agente — ou você — vê uma chave de API falsa

Causa. Isto é esperado. Variáveis de ambiente como ANTHROPIC_API_KEY, OPENAI_API_KEY, XAI_API_KEY, GH_TOKEN e as variáveis da AWS dentro da VM são engodos deliberados. O proxy substitui o valor real do lado do anfitrião para os destinos permitidos, pelo que um engodo vazado não vale nada.

Correção. Nada — não tente "corrigir" a chave dentro da VM. Se os pedidos reais falharem com um erro de autenticação no fornecedor, o problema é o segredo real no anfitrião: volte a introduzir a chave de API do fornecedor em Preferências › Modelos (ou no painel Modelos da própria máquina, se tiver definições de modelos personalizadas). Um token falso que apareça num pedido para o anfitrião errado aciona a deteção de comprometimento em vez de autenticar.

Uma subscrição deixou de funcionar ("Início de sessão expirado")

Causa. Os inícios de sessão por subscrição (Claude, ChatGPT, Grok, Kimi) são guardados cifrados no anfitrião, que também os renova. Se o fornecedor revogar o token de renovação, ou se a sessão da conta terminar, o anfitrião deixa de conseguir emitir um token válido e todas as sessões que usam esse início de sessão falham.

Correção.

  1. Abra Preferências… › Modelos (⌘,). O fornecedor mostra Início de sessão expirado e "‹fornecedor› rejeitou o início de sessão guardado (de ‹data›). As sessões não o podem usar até iniciar sessão novamente."
  2. Clique em Iniciar sessão novamente e conclua o início de sessão no seu navegador. A chave substituta dentro das máquinas nunca muda, pelo que os agentes em execução passam a usar o novo início de sessão.
  3. Se uma máquina continuar a falhar enquanto as outras funcionam, provavelmente tem o seu próprio início de sessão. Um início de sessão feito a partir de uma máquina pergunta Partilhar com todos os espaços de trabalho? — escolher Apenas este espaço de trabalho dá a essa máquina um início de sessão privado que se sobrepõe ao partilhado. Verifique o painel Modelos da máquina: inicie sessão novamente lá, ou clique em Usar o fornecedor global para que a máquina herde o início de sessão partilhado.

Numa conversa, um agente que não se consegue autenticar mostra um cartão: Iniciar sessão em ‹agente›, com Abrir a página de início de sessão e um campo Colar código. A linha da barra lateral indica "É preciso iniciar sessão". Iniciar sessão a partir do cartão captura a credencial no anfitrião, tal como o painel Modelos.

Um agente precisa de um fornecedor de modelos

Causa. O agente que escolheu não tem nada em que correr nesta máquina — nenhuma chave de API, nenhum início de sessão, nenhum servidor personalizado ou modelo no dispositivo. A conversa mostra "‹agente› precisa de um fornecedor de modelos" e "‹agente› ainda não tem fornecedor de modelos nesta máquina. Adicione uma chave de API ou um modelo local nas definições da máquina e inicie a sessão de novo."

Correção. Clique em Definições da máquina… no cartão, ou configure um fornecedor em Preferências › Modelos, e inicie a sessão de novo. No ecrã de nova sessão, um agente neste estado aparece marcado com "Iniciar sessão ao começar" ou "Escolher um fornecedor de modelos ao começar".

Um agente está preso num ecrã de primeira execução, de confiança ou de início de sessão

Causa. Os agentes de programação têm os seus próprios ecrãs de primeira execução — seletores de tema, perguntas de confiança na pasta, menus de início de sessão — que a conversa não consegue mostrar tal como são. O Bromure responde aos ecrãs de configuração inicial antes de o agente arrancar e transforma o resto em cartões na conversa:

  • um cartão de início de sessão para um menu de início de sessão (o "Not logged in" do Claude, o seletor de ChatGPT do Codex, o código de dispositivo do Grok, o início de sessão do Kimi);
  • Confiar nesta pasta e continuar quando o agente está à espera de que confie na pasta;
  • cartões vermelhos quando o agente não se conseguiu autenticar, atingiu um limite de utilização ou parou com um erro;
  • para o Oh My Pi, que não tem início de sessão próprio, um cartão de fornecedor que aponta para as definições da máquina.

Correção. Responda ao cartão. Se a conversa continuar a parecer presa — "A pensar…" sem que nada aconteça —, prima Linux na barra de ferramentas (⌥⌘U) para ver o terminal real do agente, trate do que estiver no ecrã e prima Sessão para voltar. "Vá para o terminal para resolver e envie de novo." num cartão significa o mesmo.

Para o Kimi Code, o Bromure inicia sessão no serviço internacional do Kimi (kimi.ai). Um início de sessão no Kimi feito antes dessa alteração pode deixar de funcionar e mostrar um cartão de início de sessão; inicie sessão novamente.

"Trocar token de subscrição?" continua a aparecer, ou foi recusado por engano

Causa. Quando um agente inicia sessão com um token real dentro da VM, o proxy deteta-o e propõe movê-lo para o anfitrião, para que o segredo real saia do convidado. A escolha é memorizada por máquina e por fornecedor.

Correção. No painel Rastreio da máquina, as linhas Troca de token de subscrição do Claude e Troca de token de subscrição do Codex mostram o estado atual com um controlo de reposição — Esquecer troca (voltar a perguntar na próxima sessão) ou Reativar pergunta.

Rede dentro da VM

O IPv6 não funciona no convidado

Causa. É intencional. O caminho de rede do anfitrião do Bromure é só IPv4, e uma LAN que anuncia IPv6 sem saída IPv6 funcional faz com que todas as resoluções AAAA fiquem penduradas. As imagens base recentes desativam o IPv6 dentro do convidado, e o apt é forçado a usar IPv4 em cada arranque.

Correção. Use endereços IPv4 e nomes de anfitrião. localhost no convidado resolve apenas para 127.0.0.1.

A sub-rede das máquinas entra em conflito com uma rede que usa

Causa. As instalações novas colocam as suas máquinas num /24 privado aleatório dentro de 172.16.0.0/12 (evitando os habituais 172.17–172.20 do Docker e qualquer intervalo em que o Mac já esteja). As instalações mais antigas podem ainda usar 192.168.64.0/24. Qualquer um deles pode entrar em conflito com uma VPN ou com a rede de um escritório.

Correção. Abra Preferências… › Recursos. Em Sub-rede do espaço de trabalho, Usar uma sub-rede privada (evita conflitos entre remotos) muda para uma sub-rede 172.16/12 aleatória, e Sortear escolhe uma nova. As alterações aplicam-se no próximo arranque das suas máquinas.

O tráfego de uma máquina falha numa VPN

Causa. Os túneis VPN reduzem o tamanho útil dos pacotes; uma MTU demasiado grande faz as transferências desaparecerem.

Correção. A placa de rede do convidado já está limitada a 1280 bytes. Se um caminho empresarial precisar de menos, reduza vm.mtu como indicado em Problema de rede durante a compilação da imagem base.

Erros de TLS e de certificado dentro da VM

"self-signed certificate" ou "unable to get local issuer certificate"

Causa. Todo o HTTPS do convidado é intercetado pelo proxy MITM do anfitrião, que volta a assinar o tráfego com uma CA raiz por instalação. As ferramentas dentro da VM confiam nela através das variáveis de ambiente do pacote de CA que o Bromure define para node, python, go, rust, curl, deno e o SDK da AWS, mais o ficheiro de CA colocado na partilha meta (bromure-ca.pem). Uma ferramenta que ignore essas variáveis — ou um contentor que traga o seu próprio armazenamento de confiança — rejeitará o certificado do proxy.

Correção.

  1. Para a maioria das ferramentas, não é preciso fazer nada. Se uma ferramenta concreta falhar, aponte-a para o pacote de CA exportado em vez de desativar a verificação; o ficheiro de CA está disponível dentro do convidado e as variáveis habituais do tipo *_CA_BUNDLE / SSL_CERT_FILE já estão exportadas.
  2. Para um contentor Docker que precise de aceder à rede, use o interruptor Herdar definições de proxy HTTP da folha Executar um novo contentor, para que http_proxy/https_proxy (o proxy dentro do convidado em 127.0.0.1:65534) se propaguem, e monte ou instale a CA onde as ferramentas do contentor a procuram.
  3. Se os erros de certificado só aparecerem depois de eliminar ou renovar a CA (abaixo), reinicie as máquinas afetadas para que a nova CA seja colocada de novo.

Para um anfitrião que fixa o seu certificado, o painel Salvaguardas da máquina pode contornar a interceção para um único pedido (X-bromure-insecure) — consulte Definições de salvaguardas.

Rodar a CA raiz

Causa / quando fazê-lo. A chave privada da CA raiz reside em ~/Library/Application Support/BromureAC/ca/key.pem (modo 0600), com o seu certificado em cert.pem. Poderá querer rodá-la se suspeitar que a chave foi exposta.

Correção. Saia da aplicação, elimine o diretório ca/ e volte a abri-la — é gerada uma nova CA, colocada de novo nas máquinas no seu próximo arranque. Os corpos de rastreio já capturados não são afetados, mas qualquer convidado que tenha fixado o certificado antigo terá de passar a confiar no novo.

Bloqueios da cadeia de fornecimento

Quando o npm install, o pip install ou algo semelhante de um agente falha com um erro característico, é muito provável que o pipeline da cadeia de fornecimento do anfitrião tenha intervindo. A política e as suas camadas estão documentadas em Proteção da Cadeia de Fornecimento e na referência Definições da cadeia de fornecimento.

Uma instalação falhou com HTTP 451

Causa. Um 451 ("Unavailable For Legal Reasons") é o bloqueio da cadeia de fornecimento do Bromure — escolhido para ser distinguível de relance do 403 que as Salvaguardas usam. O gestor de pacotes imprime o motivo textualmente na sua saída de erro, por exemplo:

Bromure Supply-Chain Security blocked this request: npm package [email protected]
published 4 hours ago — policy requires 2 days minimum

Correção. Leia o motivo. Os gatilhos comuns e os seus remédios:

Motivo na mensagemCamadaComo proceder
"published … ago — policy requires N days"Barreira de idadeFixe uma versão mais antiga, ou adicione o pacote a Pacotes isentos no painel Cadeia de fornecimento da máquina.
Uma CVE / aviso igual ou superior ao seu limiarOSV ou socket.devEscolha uma versão corrigida, ou eleve o limiar Bloquear na severidade.
Sinalizado como comprometido / malware / typosquatsocket.devTrate-o como um sinal real — verifique o nome do pacote antes de o ignorar.

Encontrar o motivo na Linha do tempo

Abra a Linha do tempo de segurança, escolha o motor Cadeia de fornecimento e volte a executar a instalação. Cada pacote verificado aparece numa linha: a verde se passou, a vermelho se foi bloqueado ou removido. Uma Linha do tempo silenciosa durante uma instalação significa normalmente que tudo veio da cache — o mosaico Pacotes verificados no separador Visão geral mostra que as verificações estão a acontecer.

Ignorar um bloqueio

Correção. As camadas da cadeia de fornecimento são interruptores por máquina, aplicados em direto (sem reiniciar a VM). Para deixar passar um pacote concreto, adicione uma isenção ou uma entrada na lista de permissões no painel Cadeia de fornecimento, ou baixe ou desative a camada relevante para essa máquina.

Todas as instalações pedem consentimento (offline, ou socket.dev + Cargo)

Causa. Quando o OSV ou o socket.dev está ativado mas não consegue produzir um veredicto — a rede está em baixo, ou o ecossistema não é suportado — o Bromure falha de forma fechada, retendo cada pacote para o seu consentimento em vez de o permitir silenciosamente. Duas situações produzem um pedido por pacote:

  • Trabalhar offline com o OSV ou o socket.dev ativado: cada pacote não em cache é retido.
  • socket.dev com Cargo: o socket.dev não tem suporte para Cargo, pelo que cada artefacto de crates.io não produz veredicto.

Correção. Para períodos offline, desative o OSV e o socket.dev — a barreira de idade continua a funcionar a partir de metadados já em cache sem conectividade. Para trabalho pesado em Rust, ou desligue o socket.dev ou responda aos pedidos (as concessões são chaveadas por package@version). O apoio de tempo de publicação do PyPI é a única verificação que falha aberta num erro de rede puro.

Falsos positivos de injeção de prompt

O detetor de injeção de prompt analisa o conteúdo devolvido ao agente e pode registar, perguntar ou bloquear. O seu comportamento e afinação estão em Deteção de injeção de prompt e salvaguardas e na referência Definições de injeção de prompt.

Um pedido legítimo foi sinalizado ou bloqueado

Causa. O classificador atribuiu a um excerto recebido uma pontuação acima do limiar da máquina — documentação de segurança, uma página que cita um ataque ou um excerto que parece uma instrução para o agente podem todos ter o aspeto de uma injeção.

Correção.

  1. Consulte as linhas Injeção de prompt da Linha do tempo para avaliar se foi uma tentativa real.
  2. Se foi um falso positivo e os bloqueios estão a atrapalhar, mude o modo de injeção de prompt da máquina de Bloquear para Perguntar (decide a cada deteção) ou Registar (só regista, nunca bloqueia) no painel Injeção de prompt.
  3. As definições são por máquina, por isso uma máquina de investigação ruidosa pode correr em modo Registar enquanto uma de produção fica em Bloquear.

As mensagens entre agentes também são analisadas: uma mensagem de delegação assinalada mostra "retido — injeção de prompt" e é registada em Delegação entre agentes.

As automatizações acionadas por eventos estão todas bloqueadas

Causa. As automatizações acionadas por eventos requerem o modelo PromptGuard. Sem ele, cada execução por evento é bloqueada com "PromptGuard model not installed — event triggers require it (download in Settings)." Isto é intencional, não um erro.

Correção. Instale o modelo PromptGuard a partir do painel Injeção de prompt. Se um interruptor de deteção estiver ativo mas o modelo não se tiver transferido — por exemplo, porque o disco estava cheio —, a máquina corre sem proteção e a falha fica registada; transfira-o de novo quando houver espaço.

Espaço em disco: para onde vai e como recuperá-lo

O que consome espaço

O armazenamento fica em ~/Library/Application Support/BromureAC/ (consulte o Apêndice para o mapa completo). Os grandes consumidores:

O quêOndeTamanho típico
A imagem base Ubuntubase.img24 GB lógicos, alguns GB físicos
Discos de sistema por máquinaprofiles/<uuid>/disk.imgClone copy-on-write da base; só cresce à medida que o convidado escreve
Pastas pessoais por máquinaprofiles/<uuid>/home.imgext4 esparso, 16 GB aparentes por predefinição, alocados à medida
Instantâneos de RAM de VMs suspensasprofiles/<uuid>/vm.stateAté à RAM atribuída à máquina, por máquina suspensa
Pontos de verificação do disco e da pasta pessoalprofiles/<uuid>/checkpoints/Espaço real só à medida que divergem dos discos ativos
Nós Kubernetes, registos, conector de mensagenskube/<id>/nodes/<uuid>/Um disco de sistema cada, mais um disco de dados por nó com Longhorn (40 GB aparentes por predefinição) ou o Armazenamento de imagens do registo
Modelos no dispositivomodels/<org>--<name>/Vários GB por modelo
Modelos de deteçãoModels/prompt-injection/, Models/claudemd-guard/Centenas de MB cada
Corpos de rastreiotraces/Limitados: 100 MB por sessão, 5 GB no total
Cópias das conversastranscripts/, task-transcripts/, runs/Cresce com as suas sessões, tarefas e execuções de automatizações
Registos de sessões, salas e delegaçõessessions.json, rooms.json, delegations.jsonPequenos
Linha do tempo de segurançasecurity-timeline/<date>.jsonlPequena; guardada 90 dias por predefinição (Preferências › Rastreamento › Security history)
Registo da aplicação~/Library/Logs/BromureAC/No máximo cerca de 16 MB (8 MB mais um ficheiro rodado)

Nota: O cartão de Disco do painel de controlo prefere os números do próprio df do convidado à alocação do clone do anfitrião, porque um clone copy-on-write sobre-reporta a utilização — os blocos libertados dentro do convidado permanecem materializados no clone.

Recuperar espaço

  • Desligue as máquinas suspensas que não está a usar. Um encerramento completo limpa o vm.state; a máquina arranca a frio da próxima vez.
  • Remova os modelos no dispositivo que já não usa, em Preferências › Modelos ou com bromure-cli model rm <id>.
  • Reponha um disco de sistema inchado com Redefinir disco no menu ⋯ da máquina (volta a clonar a partir da base, mantém a pasta pessoal).
  • Limpe os rastreios com bromure-cli trace clear — apaga tanto o anel em memória como os corpos em disco.
  • Elimine as sessões de que já não precisa (Eliminar sessão no menu da linha), e elimine as conversas cuja máquina ou pasta desapareceu com a linha de limpeza da barra lateral.
  • Elimine uma máquina inteira de que já não precisa (⋯ › Eliminar espaço de trabalho, ou bromure-cli workspaces rm <workspace>), o que remove o seu disco e a sua pasta pessoal.
  • Elimine clusters e registos não utilizados a partir dos seus painéis.
  • Recupere a imagem base com bromure-ac reset se quiser recomeçar do zero (as máquinas não são tocadas; volte a executar init depois).

Acesso remoto e o cliente nativo

A porta de entrada SSH opcional de acesso remoto e o espelho do cliente nativo são tratados em Acesso remoto e clientes. Os sintomas abaixo são os que impedem uma ligação.

Não é possível ligar por SSH (porta 2222)

Causa. A porta de entrada remota está desativada por predefinição. É também um servidor incorporado (não o sshd do sistema), pelo que ativar o Início de sessão remoto do macOS não tem qualquer efeito sobre ela, e fica em pausa durante qualquer instalação da imagem base.

Correção.

  1. Verifique o estado com bromure-cli remote status — indica se o servidor está ativado e em execução, o endereço e a porta de escuta, os métodos de autenticação, a impressão digital da chave do anfitrião, uma cadeia de ligação ssh -p <port> <user>@<host> pronta a usar e a lista de chaves autorizadas.
  2. Ative-a com bromure-cli remote enable (predefinições: porta 2222, vinculação 0.0.0.0, ambos os métodos de autenticação ativos). Dá erro se ambos os métodos de autenticação estiverem desativados, se a porta for inferior a 1024, ou enquanto a imagem base estiver em falta ou a instalar.
  3. Adicione a sua chave pública com bromure-cli remote key add <path-or-key>. Adicionar ou remover uma chave reinicia o listener e derruba as ligações ativas — comportamento esperado.

Incompatibilidade de chave do anfitrião ou de impressão digital (TOFU)

Causa. O cliente nativo fixa a chave de anfitrião de cada remoto na primeira ligação (confiança no primeiro uso), guardada em ~/Library/Application Support/BromureAC/remote-client/known_hosts. A fixação é por ponto de acesso (address:port), pelo que editar o endereço ou a porta de um anfitrião guardado volta, com razão, a mostrar o pedido de confiança. Uma discrepância num ponto de acesso inalterado significa que a chave do remoto mudou — ou que algo está a intercetar a ligação.

Correção. Se recompilou legitimamente o remoto, remova a sua fixação e volte a ligar-se para voltar a confiar. Se não esperava que a chave mudasse, pare e investigue antes de a aceitar.

As Preferências remotas não carregam

Causa. Quando uma janela-espelho está aberta, Preferências… pode editar as definições de um anfitrião remoto (o seletor Definições para:). Mostra "Carregando as preferências de ‹anfitrião›…" enquanto as obtém, e "Não foi possível carregar as preferências remotas" quando a ligação cai ou o remoto é de uma versão mais antiga.

Correção. Verifique se a janela-espelho está ligada e clique em Tentar novamente. Entretanto, escolha Este Mac em Definições para: para editar as suas próprias definições.

O túnel a nível do sistema precisa de aprovação

Causa. O túnel opcional a nível do sistema do cliente nativo usa um daemon launchd privilegiado registado através do SMAppService. O seu primeiro registo faz surgir um alternador de aprovação de item em segundo plano.

Correção. Aprove o Bromure Agentic Coding em Definições do Sistema › Geral › Itens de Início de Sessão e Extensões (a aplicação pode abrir esse painel por si). Através do túnel, um ping ICMP para um convidado remoto é respondido localmente e confirma o encaminhamento, não que o convidado está vivo.

Reportar um erro

Ao apresentar um relatório em bromure.io, inclua o suficiente para um responsável de manutenção reproduzir o problema:

  1. Versões da aplicação e da imagem — a versão da aplicação (em About Bromure Agentic Coding) e a saída de bromure-ac info (a marca de versão da imagem base, os tamanhos e o caminho).
  2. O registo da aplicação — ~/Library/Logs/BromureAC/bromure-ac.log (e bromure-ac.log.1 se o problema começou antes do último arranque). Volte a abrir a aplicação com BROMURE_AC_DEBUG=1 a partir de um terminal se quem mantém o projeto pedir mais detalhe.
  3. O registo relevante — para falhas de instalação, a Saída da consola copiada; para comportamentos relacionados com segurança, um CSV filtrado obtido com Exportar… a partir da Linha do tempo de segurança.
  4. O que esperava versus o que aconteceu, e se a máquina estava desligada, suspensa ou em execução.

Não inclua segredos reais — os registos de rastreio e as linhas de registo já os reduzem a pequenas pré-visualizações, e a aplicação foi feita para que as credenciais reais nunca entrem numa VM. Se o seu Mac estiver inscrito num espaço de trabalho bromure.io, encaminhe os relatórios através do administrador da sua organização. A inscrição é tratada em Empresa.