Máquinas

Uma máquina é a unidade de isolamento do Bromure Agentic Coding: uma VM Ubuntu com o seu próprio disco de sistema, a sua própria pasta pessoal persistente, as suas próprias credenciais e as suas próprias políticas de segurança. Cada sessão corre numa máquina. Uma máquina de rascunho pode correr totalmente aberta com uma chave de API descartável enquanto uma voltada para produção registra todas as trocas com a IA e pergunta antes de cada escrita destrutiva, e as duas nunca partilham um byte.

Uma máquina chama-se espaço de trabalho no editor de definições, em alguns menus (Novo espaço de trabalho…, Eliminar espaço de trabalho) e na linha de comandos; no código e no JSON exportado é um perfil. É tudo a mesma coisa. Este capítulo cobre as máquinas em si: onde são listadas, como arrancam e param, como as cria, rebobina, redefine e elimina, e o que pode fazer diretamente numa delas: abrir terminais, ver várias na Grelha, percorrer ficheiros e colar ficheiros lá dentro. As definições de cada máquina estão documentadas em Referência de Definições. O modelo de isolamento está em Conceitos e arquitetura.

As máquinas são persistentes. O disco de sistema e a pasta pessoal sobrevivem a cada reinício. Só ações deliberadas (Redefinir disco, Apagar pasta pessoal…, Eliminar espaço de trabalho) ou uma limpeza forçada após um alerta de exfiltração de credenciais destroem dados. Parar uma máquina apenas decide o que a VM faz a seguir: continuar a correr, suspender-se, ou desligar-se.

Nota: na maior parte do tempo não precisa de gerir máquinas. Iniciar uma sessão numa máquina desligada ou suspensa acorda-a, e a máquina de uma sessão em pausa arranca outra vez com a sua próxima mensagem. Este capítulo é para quando quiser olhar debaixo do capô.

A secção Máquinas virtuais

As máquinas vivem na secção Máquinas virtuais, no fundo da barra lateral, sob Sessões, Tarefas e Automações. Está recolhida por omissão; clique no título para a expandir. Quando a barra lateral está estreita, o título diz VMs.

A janela principal com a secção Máquinas virtuais expandida no fundo da barra lateral: um sinal verde a indicar 2 em execução e uma contagem de 3, um botão +, depois o nó Grelha e as linhas Payments API e Web app, cada uma com um botão + e um botão ⋯. O palco mostra o ecrã de nova sessão.

O cabeçalho da secção traz:

  • um sinal verde com o número de máquinas em execução ou a arrancar;
  • o número total de máquinas;
  • um botão + (dica Novo espaço de trabalho) que cria uma máquina. Clique nele com Option para primeiro importar definições dos ficheiros de configuração do seu Mac (ver Criar uma máquina).

Expandida, a secção lista, de cima para baixo:

EntradaO que é
GrelhaUm palco que dispõe terminais vivos lado a lado. Ver A Grelha.
Uma linha por máquinaA máquina, os seus separadores de terminal enquanto corre, e um nó Docker enquanto houver pelo menos um contentor a correr nela.
KubernetesOs seus clusters Kubernetes, uma linha cada. Só aparece quando existe um cluster. Ver Clusters Kubernetes e registos.
RegistosOs seus registos de contentores privados. Só aparece quando existe um registo. Ver Clusters Kubernetes e registos.
MensagensA VM do conector de mensagens, depois de a ter configurado. Ver Central e mensagens.

Os clusters, os registos e o conector também são VM geridas, mas não são máquinas: não corre sessões neles, e têm os seus próprios painéis.

As linhas de máquina

Cada linha de máquina mostra, da esquerda para a direita:

  • Um mosaico tingido. Um glifo de bastidor de servidores na Cor da máquina (definida em definições Geral), com um pequeno ponto de estado de execução no canto.
  • O nome. Um triângulo de aviso vermelho segue-o quando a máquina foi assinalada como comprometida pelo detetor de fuga de credenciais; uma máquina assim recusa arrancar até ser limpa (ver Credenciais).
  • Uma etiqueta de estado sob o nome: Desligada, A arrancar… ou Suspensa. Uma máquina em execução não mostra etiqueta.
  • Botões. Enquanto a máquina corre, + abre um novo separador de terminal (Novo separador (⌘T)), e passar o cursor na linha revela Destacar para janela própria e Fechar esta VM. O botão ⋯ abre o menu da máquina em todas as linhas.

Clique no nome de uma máquina para mostrar o seu painel. Clique num dos separadores para mostrar esse terminal no palco.

EstadoPontoSignificado
DesligadaCinzentoNão está em execução. Sem RAM nem CPU em uso; só os discos existem.
A arrancar…Laranja, a pulsarA VM está a iniciar.
Em execuçãoVerdeIniciada. Os terminais e os agentes estão vivos.
SuspensaAmareloRAM gravada em disco. Retoma onde ficou.

Os separadores de agente são sessões

Os separadores de uma máquina em execução são as janelas tmux lá dentro: os separadores de agente em que as suas sessões correm, mais qualquer terminal que abra você. Qualquer agente de programação que inicie num terminal da máquina (escrevendo claude, codex e assim por diante), e cada agente iniciado por uma tarefa de código ou uma automação, também aparece como sessão na lista Sessões da barra lateral. Pode alternar entre o chat de um agente e o seu separador de terminal com a cápsula Linux (⌥⌘U); ver O início das sessões.

Sessões numa máquina eliminada

Quando elimina uma máquina, as suas sessões ficam na barra lateral, esbatidas, com o estado Máquina removida. Na dobra Arquivadas são agrupadas, juntamente com qualquer sessão cuja pasta desapareceu, numa única linha, «1 sessão cuja máquina ou pasta desapareceu» ou «N sessões cuja máquina ou pasta desapareceu», com um botão Eliminar que elimina essas conversas.

O painel da máquina

O painel é o quadro de comandos de uma máquina. Abra-o:

  • clicando no nome da máquina na secção Máquinas virtuais;
  • escolhendo Detalhes da máquina no menu de máquina da barra de ferramentas, ou no menu de contexto da cápsula de máquina de uma sessão;
  • escolhendo a máquina sob Máquinas na paleta ⌘K.

No topo estão o mosaico da máquina, o nome, uma cápsula de estado (Em execução, A iniciar, Suspensa ou Desligada) e o endereço IP. À direita fica a barra de ações: Novo terminal, Suspender, Reiniciar e Desligar enquanto a máquina corre, ou Iniciar / Retomar caso contrário.

Abaixo, cinco cartões reportam recursos:

CartãoDesligada ou suspensaEm execução
CPU—Carga de CPU ao vivo, com um gráfico.
MemóriaRAM atribuída, p. ex. 8 GB (atribuída)Memória em uso, de entre a atribuição.
vCPUsNúmero de núcleos (núcleos)O mesmo número, com a carga média do convidado.
DiscoEspaço que o disco de sistema ocupa no Mac ((anfitrião))Uso de disco tal como o sistema de ficheiros do convidado o reporta.
Tempo ativo—Tempo desde o arranque.

A memória vem das definições Recursos da máquina. Os valores atualizam-se cerca de cada 1,5 segundos; zeros logo após o arranque significam que o convidado ainda não reportou.

Enquanto a máquina corre, um cartão Portas em escuta lista os sockets alcançáveis de fora da VM como pontos <IP-da-VM>:<porta>; clique num para o copiar. Os serviços que parecem HTTP recebem também um botão de globo que expõe esse serviço à internet através de um túnel rápido da Cloudflare. À primeira vez, um diálogo intitulado Expor serviços à internet via Cloudflare Tunnel? explica a transferência única (cerca de 18 MB) e pede-lhe para Concordar e expor.

Um cartão Configuração resume as definições que mais importam antes de arrancar: uma linha por agente com o local onde corre, Guardrails, Análise de injeção de prompt e Pastas partilhadas.

O menu da máquina na barra de ferramentas

Quando uma sessão ou um separador de máquina está no palco, a barra de ferramentas mostra uma cápsula com a cor e o nome da máquina. Clique nela para tudo o que diz respeito a essa máquina:

ItemO que faz
Definições…Abre o editor de definições da máquina.
Detalhes da máquinaMostra o painel.
Copiar endereço IP (…)Copia o endereço IP da máquina. Só enquanto corre.
Inspecionar rastroAbre o Inspetor de rastros para esta máquina (também ⇧⌘I).
Destacar para janela própriaMove a máquina para uma janela só dela (ver Destacar e voltar a encaixar).
ReiniciarDesliga a máquina de forma limpa e arranca-a de novo, depois de uma confirmação Reiniciar «…»?. Mantenha ⌥ ao escolhê-lo — o item passa a Forçar reinício — para cortar a energia de imediato. Ver Reiniciar uma máquina.

Quando a máquina da sessão não está em execução, o menu começa com «Não está em execução — arranca com a sua próxima mensagem» e oferece apenas Definições… e Detalhes da máquina.

No separador de terminal próprio de uma máquina, a barra de ferramentas mostra também o relâmpago Fusion e, quando a máquina usa um modelo no dispositivo, um sinal de motor (ver Modelos e fornecedores). Os botões de globo (⌃⌘B) e Ficheiros (⌃⌘E) alternam o navegador e o painel Ficheiros.

Iniciar e parar

Iniciar uma máquina

Uma máquina arranca quando:

  • inicia uma sessão nela, ou envia uma mensagem a uma sessão em pausa que esteja lá;
  • clica em Iniciar (ou Retomar) no painel dela, ou escolhe isso no menu ⋯;
  • clica em Iniciar numa das células de reserva dela na Grelha;
  • uma automação ou uma tarefa de código precisa dela (ver Automações);
  • inicia sessão no seu Mac e Iniciar esta VM no login está ligado nas suas definições Geral;
  • corre bromure-cli vm run (ver CLI, API e MCP).

O que arranca

  • Primeiro arranque. A aplicação faz o disco de sistema da máquina (disk.img) como um clone APFS copy-on-write da imagem de base Ubuntu partilhada. O clone é instantâneo e não ocupa espaço até o convidado escrever nele. A imagem da pasta pessoal é criada, e a VM arranca com a RAM definida nas definições de Recursos.
  • Arranques seguintes. O mesmo disco de sistema e a mesma pasta pessoal são reutilizados, pelo que tudo o que instalou continua lá.
  • Uma máquina suspensa. O instantâneo de RAM gravado é restaurado em vez de um arranque, e a máquina retoma onde estava, separadores incluídos.

Cada arranque com sucesso tira também um ponto de reversão da pasta pessoal (ver Rebobinar a pasta pessoal).

Por omissão, cada máquina junta-se à rede NAT privada do Bromure, recebe um endereço estável, e pode alcançar as outras máquinas e a VM do navegador. Existe um modo Em ponte por máquina nas definições Geral.

O ecrã de arranque

Enquanto uma máquina arranca, uma sobreposição animada cobre o terminal: o nome da máquina sobre uma barra de progresso de varrimento, por vezes com uma linha de estado. Só aparece se o arranque levar mais de 0,4 segundos e desaparece assim que o primeiro terminal estiver pronto. Uma máquina que ainda use a antiga pasta pessoal em pasta partilhada é movida para uma imagem ext4 privada no arranque seguinte; a sobreposição mostra então progresso determinado, por exemplo «A MOVER A PASTA PESSOAL — 42% DE 7,9 GB».

Se nenhum terminal aparecer em 30 segundos, a sobreposição passa a um painel IMERSÃO FALHOU (««…» nunca devolveu um terminal depois de 30 segundos. A VM pode estar presa, ou o disco de sistema pode estar danificado.») com dois botões:

  • Continuar à espera reinicia a espera de 30 segundos.
  • Redefinir disco do sistema… volta a clonar o disco de sistema da máquina a partir da imagem de base. A sua pasta pessoal sobrevive.

Se o arranque parar porque o disco de sistema falhou a verificação do sistema de ficheiros, a sobreposição mostra em vez disso um painel ERRO DE DISCO, com Reparar disco (repete o journal do disco no lugar) e Redefinir disco do sistema…. A sua pasta pessoal sobrevive em qualquer dos casos. Ver Resolução de problemas se os arranques continuarem a falhar.

Perguntas antes de um arranque

Um arranque pode ser precedido de uma destas:

PerguntaQuandoEscolhas
Está disponível uma imagem de base mais recente.A imagem de base no seu Mac é mais recente do que aquela de onde o disco de sistema desta máquina foi clonado.Sim, atualizar redefine o disco de sistema a partir da nova base e depois arranca (a sua pasta pessoal fica intacta). Não arranca como está e não volta a perguntar até sair uma imagem de base diferente. Lembrar-me mais tarde arranca como está e volta a perguntar no primeiro arranque depois de um dia. A resposta é recordada por máquina.
Máquina comprometidaUma execução anterior foi assinalada por exfiltração de credenciais.Confirme uma limpeza do disco de sistema, da pasta pessoal e do estado gravado antes de arrancar. As definições, os tokens e as chaves SSH são mantidos. Ver Credenciais.
Modelo ainda a transferirUm modelo no dispositivo de que a máquina precisa ainda não terminou a transferência.O arranque é recusado até estar concluída.

Quando não há ninguém para responder (uma automação, uma tarefa de código, um arranque ao iniciar sessão), uma atualização de imagem de base pendente é ignorada e a máquina arranca como está; uma máquina comprometida não arranca até que a inicie você.

Parar uma máquina

Do menu ⋯ da máquina ou do painel dela:

  • Suspender grava a RAM da VM em disco e pára-a. Retomar recomeça exatamente onde estava. Sem confirmação, já que nada se perde.
  • Desligar desliga a VM depois de uma confirmação («Desliga a VM e pára tudo o que corre lá dentro. O disco de sistema é mantido; o trabalho em curso nos processos em execução perde-se.»). O arranque seguinte é completo.
  • Reiniciar — ver Reiniciar uma máquina.

Correr reboot dentro do convidado também funciona: a aplicação nota e volta a arrancar a máquina no lugar.

Reiniciar uma máquina

Reiniciar é igual em todos os lugares onde é oferecido — o menu ⋯ da linha da máquina, o painel da máquina e o menu de máquina da barra de ferramentas — e num cliente pesado tal como neste Mac:

  1. Reiniciar «…»? pede confirmação: «Desliga a máquina de forma limpa e arranca-a de novo. Tudo o que corre lá dentro pára.»
  2. Pede-se à máquina que se desligue, como premir o botão de energia, para que os sistemas de ficheiros se esvaziem e os serviços parem. Se não se tiver desligado depois de 15 segundos (60 segundos para um nó Kubernetes ou um registo), a energia é cortada.
  3. Arranca de novo — nunca a partir de um estado gravado — exatamente como um arranque normal, com as definições atuais (Preferências › Modelos incluídas).

Reinício forçado. Mantenha ⌥ (Option) ao escolher Reiniciar: no menu de máquina da barra de ferramentas, o item diz Forçar reinício enquanto ⌥ estiver premido. A confirmação passa a Forçar o reinício de «…»?, e a energia da máquina é cortada de imediato — como puxar a ficha — antes do arranque novo. Tudo o que não estiver gravado lá dentro perde-se, pelo que o deve guardar para uma máquina que não responda a um reinício normal.

Na linha de comandos, bromure-cli vm reboot <máquina> faz o reinício limpo e --hard o forçado (ver CLI, API e MCP).

As sessões de uma máquina parada ou suspensa não se perdem. Aparecem em pausa e continuam com a sua próxima mensagem, que arranca a máquina outra vez. Para o que acontece quando fecha uma máquina, ver Fechar uma máquina.

O menu ⋯

O botão ⋯ numa linha de máquina adapta-se ao estado dela:

ItemQuandoO que faz
IniciarDesligadaArranca a máquina.
RetomarSuspensaRestaura o estado gravado.
Desligar · Suspender · ReiniciarEm execução ou a arrancarVer Parar uma máquina.
Adicionar worktrees à grelhaEm execuçãoAcrescenta cada separador de worktree desta máquina à Grelha.
Editar…SempreAbre o editor de definições.
DuplicarSempreCopia a máquina.
Rebobinar a pasta pessoal…SempreFaz a pasta pessoal voltar a um arranque anterior.
Redefinir discoSempreVolta a clonar o disco de sistema a partir da imagem de base.
Eliminar espaço de trabalhoSempreElimina a máquina.

Editar e renomear

Editar… (ou Definições… no menu de máquina da barra de ferramentas, ou Definições de «…»… no ⌘K e nos menus de uma sessão) abre o editor de definições, intitulado com o nome da máquina. Altere o que quiser e clique em Gravar. Para renomear uma máquina, altere Nome no painel Geral. Só há uma janela de editor aberta de cada vez. Os painéis estão documentados em Referência de Definições.

Duplicar

Duplicar faz logo uma cópia completa, com o nome do original e cópia acrescentado (por exemplo Web app cópia). Não há confirmação. A cópia recebe todas as definições e credenciais, o disco de sistema e a pasta pessoal, clonados copy-on-write quando possível, pelo que não ocupa espaço extra até as duas divergirem. Três coisas não são copiadas: o estado de RAM gravado (a cópia arranca de novo), a disposição dos separadores, e o endereço MAC de rede (a cópia junta-se à rede como uma máquina diferente).

Rebobinar a pasta pessoal

De cada vez que uma máquina arranca com sucesso, o Bromure guarda um ponto de verificação copy-on-write da imagem da pasta pessoal dela. A escada guarda os últimos arranques, depois um por dia durante uma semana, depois um por semana durante um mês. Os pontos de verificação não custam nada a criar, mas ocupam espaço real em disco conforme a pasta pessoal se afasta deles.

Rebobinar a pasta pessoal… abre uma folha que lista esses pontos de reversão.

A folha Rebobinar a pasta pessoal de «Web app», a explicar que cada ponto é a pasta pessoal tal como estava quando esse arranque começou. Mostra Ainda sem pontos de reversão, um aviso de que a máquina está em execução com um botão Desligar, e Cancelar mais um botão Rebobinar desativado.

Cada ponto mostra a data, há quanto tempo foi, e o tamanho. Escolha um e clique em Rebobinar. O arranque seguinte parte dessa pasta pessoal. A pasta pessoal tal como está agora é primeiro guardada como um ponto novo, pelo que uma reversão pode ela mesma ser desfeita a partir da mesma lista.

A máquina tem de estar desligada, porque a imagem da pasta pessoal é trocada por inteiro. Enquanto corre, a folha diz «A máquina está em execução — a pasta pessoal não pode ser trocada enquanto está em uso. Desligue-a primeiro.» com um botão Desligar, e Rebobinar fica desativado. Uma máquina que nunca arrancou mostra «Ainda sem pontos de reversão — é tirado um de cada vez que esta máquina arranca.»

A mesma reversão está disponível como Restaurar pasta pessoal… no painel Recursos, ao lado de Apagar pasta pessoal…, que limpa a pasta pessoal por completo.

Redefinir o disco de sistema

Redefinir disco (também Redefinir para a base… no painel Recursos) volta a clonar o disco de sistema da máquina a partir da imagem de base atual. A confirmação, Redefinir o disco de sistema de «…» para a base?, lista o que se vai: tudo o que instalou com sudo apt install, alterações a /etc, /var, /usr, /opt, e configuração de todo o sistema. A sua pasta pessoal fica intacta: projetos, dotfiles, chaves .ssh, npm-global, .cargo e histórico da shell sobrevivem todos. Confirme com Redefinir para a base.

Uma redefinição também descarta o estado de RAM gravado e a disposição dos separadores, pelo que o arranque seguinte é limpo. É recusada com Feche «…» primeiro. enquanto a máquina corre.

Nota: um ponto de verificação e uma suspensão respondem a perguntas diferentes. A suspensão guarda o estado em execução para que possa retomá-lo. Um ponto de verificação guarda a pasta pessoal tal como estava num arranque que sabemos bom para que possa recuar um ambiente estragado. Um estado de suspensão gravado é descartado sempre que o disco a que pertence é redefinido ou rebobinado.

Eliminar uma máquina

Eliminar espaço de trabalho (também Espaços de trabalho › Eliminar, que elimina a máquina no palco — a máquina da sessão enquanto uma sessão está visível — e está desativado quando o palco não mostra uma máquina única, como numa sala, num quadro ou no ecrã de nova sessão) pergunta Eliminar o espaço de trabalho «…»? — «Remove o disco, as definições e a chave SSH. A pasta do anfitrião montada fica intacta.» Confirme com Eliminar.

Isto elimina toda a pasta da máquina sob ~/Library/Application Support/BromureAC/profiles/: definições, segredos cifrados, disco de sistema, imagem da pasta pessoal, pontos de verificação e chaves SSH do lado do anfitrião. Remove também a máquina da lista de acesso de qualquer cluster Kubernetes. As pastas do anfitrião que partilhou para dentro da máquina vivem no seu Mac e ficam como estão.

Aviso: eliminar uma máquina não pode ser desfeito. Não há lixo. Tudo o que quiser manter deve estar numa pasta partilhada do anfitrião, ou confirmado e enviado, antes de eliminar.

Criar uma máquina

Pode criar uma máquina a partir de:

  • o + no cabeçalho Máquinas virtuais;
  • Espaços de trabalho › Novo espaço de trabalho… (⇧⌘N);
  • Espaços de trabalho › Novo espaço de trabalho a partir das minhas configs… (⇧⌥⌘N), ou Option-clique no +;
  • Nova máquina… no fim da lista da etiqueta Máquina no ecrã de nova sessão;
  • Nova máquina… na paleta ⌘K.

Cada um destes abre o editor de definições, intitulado Novo espaço de trabalho, preenchido a partir dos seus valores predefinidos em Preferências e com um nome livre como Espaço de trabalho predefinido ou Espaço de trabalho predefinido 2. Dê-lhe um Nome no painel Geral, altere o que mais precisar, e clique em Criar (ou Cancelar). Novo espaço de trabalho a partir das minhas configs… corre primeiro a importação de credenciais do assistente de configuração, para que a máquina nova arranque com as credenciais encontradas no seu Mac.

Todos os agentes estão disponíveis em todas as máquinas, e uma máquina usa os modelos definidos em Preferências › Modelos a não ser que lhe dê os seus próprios no painel Modelos dela. Ver Modelos e fornecedores.

Dica: a maioria das alterações no editor aplica-se quando clica em Criar ou Gravar. Algumas fazem efeito de imediato porque tocam em estado partilhado e não nas definições da própria máquina: transferências de modelos, inícios de sessão OAuth de MCP, e importações de chaves SSH.

Terminais e separadores de máquina

Dentro de uma máquina, cada terminal é uma janela de uma sessão tmux. O tmux é a fonte de verdade: a aplicação espelha as janelas da máquina como separadores sob a linha dela, pelo que uma máquina pode continuar a correr sem nenhuma janela aberta, ser destacada, ou ser espelhada de outro Mac (ver Acesso remoto e clientes) sem incomodar os agentes.

Quando o terminal de uma máquina está no palco, estes atalhos agem sobre os separadores dela:

AtalhoAção
⌘TNovo separador (também + na linha da máquina, e Espaços de trabalho › Novo separador)
⌘WFechar o separador. Fechar o último separador fecha a máquina (ver Fechar uma máquina).
⌘1 – ⌘9Ir para o separador com esse número. Os números aparecem ao lado dos primeiros nove separadores da máquina selecionada.
⌘DAcrescentar este terminal à Grelha e mostrar a Grelha (Espaços de trabalho › Adicionar terminal à grelha)

⌘N continua a iniciar uma sessão nova. Quando está no palco uma sessão e não um terminal, ⌘1 – ⌘9 e ⌘W agem sobre sessões; ver O início das sessões.

As etiquetas dos separadores mostram o programa em primeiro plano (claude, codex, uma shell…). O ícone de cada separador traz o ponto de estado do agente: laranja e a pulsar enquanto trabalha, verde quando terminou, vermelho quando precisa de si.

Separadores de worktree

Um separador de worktree é um agente a correr na sua própria worktree git: outro ramo do mesmo repositório extraído na sua própria pasta. Para conversas com agentes, as sessões de ramo são a forma habitual de fazer isto. Nos separadores de terminal de uma máquina, os comandos clássicos de worktree continuam lá.

Clique com o botão direito num separador para:

  • Nova worktree… (⇧⌘G, Espaços de trabalho › Nova worktree). Aparece desativado como Nova worktree… (Não está num repositório git) quando o separador não está num repositório. Abre um diálogo, «Cria uma worktree git ramificada do commit atual deste separador e abre lá um agente aninhado.», com um nome de tarefa, o agente (claude, codex, grok, kimi ou omp) e um prompt inicial opcional. O ramo recebe o nome wt/<slug> a partir do nome da tarefa.
  • Nova automação…, que abre o editor de automações com a máquina e a pasta deste separador (ver Automações).
  • Num separador de worktree: Integrar… (⇧⌘M, Espaços de trabalho › Integrar worktree), Anexar um terminal (uma shell simples na pasta da worktree) e Descartar worktree (remove a cópia e elimina o ramo dela, depois de perguntar).
  • Num separador de integração que encontrou conflitos: Pedir ao agente que resolva os conflitos.

Integrar… deixa-o escolher onde integrar: a worktree ascendente (por omissão), ou qualquer antecessora até à raiz do repositório, assinalada ⚠︎ salta intermédias quando salta um nível. Se a máquina tiver uma credencial GitHub, Criar pull request envia o ramo e faz o agente abrir um pull request em vez disso. Os conflitos põem o agente a trabalhar no separador de integração para os resolver. Só o trabalho confirmado é integrado; as alterações não confirmadas perdem-se quando descarta a worktree.

Os separadores de worktree aninham-se sob o separador de que foram ramificados, até seis níveis. Quando o painel Ficheiros mostra um repositório num separador de máquina, uma barra sob o cabeçalho oferece Nova worktree…, e Integrar e Eliminar quando o separador é ele mesmo uma worktree.

Aspeto do terminal

Os terminais de máquina são terminais nativos, desenhados pela GPU. O tipo de letra, as cores, o cursor e a opacidade da janela vêm das definições de Aparência da máquina e aplicam-se assim que grava. Só são usados tipos de letra de largura fixa; qualquer outro recai no Menlo. Com uma opacidade abaixo de 1,0, a área do terminal é vidro fosco sobre a área de trabalho (a opacidade está limitada a 0,3–1,0). ⌘+, ⌘− e ⌘0 ampliam o tipo de letra, tal como um gesto de pinça no trackpad e um toque duplo com dois dedos para reiniciar.

Estas definições aplicam-se só aos terminais. A vista de chat de uma sessão tem um aspeto próprio.

A Grelha

A Grelha dispõe até 25 terminais vivos (no máximo 5 × 5), de qualquer mistura de máquinas, para que possa acompanhar vários agentes ao mesmo tempo. Cada célula é a sua própria vista viva daquela janela tmux, independente do palco da máquina, pelo que ambos podem estar abertos.

  • Mostre-a clicando no nó Grelha no topo da secção Máquinas virtuais, ou no botão de grelha na barra estreita recolhida. Os terminais membros são listados sob o nó; clique num para pôr a célula dele em foco.
  • Acrescente terminais arrastando a linha de um separador para o nó Grelha («Arraste terminais para aqui para os ver lado a lado»), premindo ⌘D num terminal, ou com Adicionar worktrees à grelha no menu ⋯ de uma máquina.
  • Os terminais novos juntam-se por si. Cada terminal aberto depois de uma máquina estar a postos (um separador de agente, uma worktree, um terminal simples) é acrescentado no fim. Quando a Grelha está cheia, a célula mais antiga sai para dar lugar. Clique com o botão direito no nó Grelha para ligar ou desligar Adicionar novos terminais automaticamente. Reordenar as células à mão desliga-o; a disposição passa a ser sua.
  • Células. O cabeçalho de cada célula mostra um ponto de estado, o nome da máquina e a etiqueta do separador, com os botões Abrir no espaço de trabalho e Remover da grelha — o terminal continua a correr e uma alça para arrastar a célula para outro lugar. Clique com o botão direito no cabeçalho para as mesmas ações, ou num membro sob o nó Grelha para Remover da grelha.
  • Zoom. Faça duplo clique numa célula, ou prima ⌘↩ na célula em foco, para ela encher o palco. Repita para reduzir. O Esc não reduz, porque os agentes usam o Esc.

As células de uma máquina desligada ou suspensa ficam como marcadores com Desligada ou Suspensa e um botão Iniciar. As células cujo terminal desapareceu de uma máquina em execução são removidas. A Grelha, incluindo a opção de acrescentar automaticamente, é mantida entre reinícios em ~/Library/Application Support/BromureAC/grid-layout.json.

Destacar e voltar a encaixar

Destacar para janela própria (menu de máquina da barra de ferramentas, ou o botão de destacar numa linha de máquina) move uma máquina em execução para uma janela só dela; os separadores tornam-se uma faixa de cápsulas na barra de título dessa janela. A janela destacada tem a sua própria barra de ferramentas: o endereço IP (clique para copiar), um botão de pasta que lista as pastas do anfitrião partilhadas para dentro da máquina, reiniciar, rastro, definições, e Mover esta VM de volta para a janela principal para a voltar a encaixar.

O painel Ficheiros

O painel Ficheiros é um explorador de ficheiros à direita do palco. Alterne-o com ⌃⌘E ou com o botão Ficheiros da barra de ferramentas.

Mostra:

  • a pasta da sessão no palco, esteja ou não o agente dela a correr (numa sala, a sessão da célula em foco);
  • no separador de terminal de uma máquina, a pasta atual desse separador (a raiz do repositório quando estiver num).

Mover-se entre sessões ou separadores leva o painel consigo. Sem nada para mostrar, diz «Nenhuma sessão selecionada».

Percorrer

  • O cabeçalho nomeia a pasta em exibição. ↑ (Subir para a pasta que a contém) vai para a pasta acima; faça duplo clique numa pasta, ou clique com o botão direito e escolha Mostrar esta pasta, para entrar nela.
  • Os ficheiros são coloridos pelo seu estado git com sinais de uma letra (M, A, U, D, R, !), e as pastas que contêm alterações trazem um ponto. Isto funciona para o repositório da própria pasta e para repositórios aninhados dentro dela, pelo que percorrer a sua pasta pessoal continua a mostrar as alterações de cada projeto. As pastas com alterações expandem-se sozinhas uma vez.
  • Uma etiqueta conta os ficheiros alterados. O botão de filtro passa para Mostrar só os ficheiros alterados, e o botão de atualizar recarrega (o painel também se atualiza a cada 4 segundos enquanto estiver visível).
  • Clique num ficheiro para abrir uma vista de detalhe com os separadores Diff e Ficheiro: um diff colorido com contagens +/−, ou uma pré-visualização (Markdown renderizado, código com realce). Um botão de destacar abre o detalhe numa janela própria, que acompanha a sua seleção.

Quando o ficheiro em exibição pertence ao agente no palco, o diff faz nascer bolhas de comentário na margem: comente linhas e depois Enviar ao agente para entregar os comentários a esse agente numa só mensagem. A janela de revisão faz o mesmo para uma alteração inteira.

Mover ficheiros para dentro e para fora

  • Para fora. Arraste um ficheiro para o Finder, ou clique com o botão direito e escolha Gravar em Downloads. Copiar caminho copia o caminho dele dentro da máquina.
  • Para dentro. Largue ficheiros do Finder em qualquer ponto do painel para os copiar para a pasta em exibição. Uma pasta vazia diz «Pasta vazia — largue ficheiros aqui para acrescentar alguns.»

As transferências passam pelo canal próprio da máquina, não por uma pasta partilhada, pelo que funcionam em qualquer máquina, inclusive remota. A máquina tem de estar em execução.

Quando abre por si

  • Para uma sessão: a aplicação verifica as pastas das sessões em execução cerca de cada dez segundos. A primeira vez que a sessão no palco tem alterações (trabalho não confirmado num repositório; em qualquer outra pasta, ficheiros escritos desde que a sessão começou), o painel Ficheiros abre-se. Se o fechar, fica fechado até a pasta estar limpa outra vez (depois de um commit, digamos) e depois mudar de novo.
  • Num separador de máquina: entrar num repositório git abre o painel, e sair dele para uma pasta que não o seja fecha-o. Fechá-lo à mão prevalece até passar para outro repositório.

Nota: o painel Ficheiros nunca edita o conteúdo dos ficheiros. Lista até 20 000 ficheiros (além disso a árvore é truncada), pré-visualiza ficheiros até 512 KB e diffs até 1 MB.

A área de transferência e colar ficheiros

A área de transferência entra nos terminais da máquina através do próprio terminal; não há nada a configurar.

  • Convidado → Mac. Copiar dentro do convidado (modo de cópia do tmux, ou qualquer programa que use OSC 52) aterra na área de transferência do Mac. Soltar uma seleção com o rato no tmux copia-a.
  • Mac → convidado. ⌘V cola a área de transferência do Mac como texto (colagem entre parênteses).
  • Selecionar. Arrastar com o rato seleciona texto; ⌘C copia-o. Selecionar por si só nunca copia.

Colar e largar ficheiros

Quando a área de transferência tem ficheiros em vez de texto, ⌘V num terminal de máquina passa a ser uma transferência de ficheiros. O mesmo acontece quando arrasta ficheiros para o terminal. Cada ficheiro é copiado para dentro da máquina sob /home/ubuntu/.bromure/pastes/, e o caminho dele na máquina é escrito no lugar, para que o agente o possa ler do disco.

  • Qualquer ficheiro comum serve: imagens, PDF, arquivos, tudo. Um ficheiro copiado mantém o nome, prefixado com um carimbo de tempo e com os caracteres que uma shell precisaria de citar substituídos por _. Um bitmap na área de transferência (uma captura de ecrã, um «Copiar imagem» de um navegador) torna-se um ficheiro clipboard-<carimbo>-<id>.png.
  • Até 512 MB numa colagem. Qualquer coisa maior, uma seleção que inclua uma pasta, ou uma área de transferência que também traga texto, cola como texto, como sempre, pelo que o ⌘V comum nunca é desviado.
  • Uma etiqueta aparece no cursor com o progresso do envio, fica brevemente quando acaba (vermelha se falhou), e desaparece com a sua tecla seguinte.
  • Os ficheiros colados vivem na imagem da pasta pessoal, pelo que os caminhos sobrevivem a um reinício. Os ficheiros com mais de 7 dias são limpos dentro da máquina.

No chat de uma sessão, os ficheiros largados e colados tornam-se anexos; ver O chat.

Dica: as ligações vão no outro sentido por si. Quando um programa na máquina abre um URL http ou https (um início de sessão OAuth, xdg-open), ele abre no navegador predefinido do seu Mac.

Pastas partilhadas

Para trabalho continuado em ficheiros que vivem no seu Mac, partilhe a pasta para dentro da máquina em vez de copiar ficheiros de um lado para o outro. Podem ser partilhadas até 8 pastas do anfitrião; cada uma aparece na pasta pessoal do convidado como ~/<nome da pasta>. Ver definições Pastas.

Fechar uma máquina

Fecha uma máquina com Fechar esta VM (o × na linha dela), o botão de fechar da janela destacada, ou ⌘W no último separador. O que acontece é definido por Ao fechar a janela nas definições Geral da máquina:

DefiniçãoO que faz
Correr em segundo planoSó a vista desaparece. A VM continua a correr e os agentes continuam a trabalhar; volte a abri-la a partir da barra lateral quando quiser.
SuspenderGrava a RAM da VM em disco e pára-a. O arranque seguinte restaura-a com os mesmos terminais.
DesligarDesliga a VM de forma limpa. O disco de sistema e a pasta pessoal são mantidos; o arranque seguinte é completo.
Perguntar (por omissão)Pergunta Fechar «…»? de cada vez, com Correr em segundo plano, Suspender, Desligar e Cancelar.

Fechar uma máquina não é o mesmo que encerrar uma sessão. Para parar um agente, encerre ou arquive a sessão dele (ver O início das sessões); a máquina continua a correr para as outras sessões.

Alguns detalhes:

  • Retomar exige a mesma máquina. Uma máquina suspensa só pode retomar com a mesma configuração, pelo que a identidade, o endereço de rede e as pastas partilhadas são gravados com o instantâneo. Alterar as pastas partilhadas enquanto está suspensa pede-lhe que descarte o estado gravado; o arranque seguinte passa a ser novo. Os ficheiros da pasta pessoal e das pastas partilhadas não são afetados.
  • Retomas falhadas. Se um estado gravado não puder ser restaurado quando iniciar a máquina você mesmo, ela arranca de novo em vez disso.
  • Fechar não destrói nada. Os dados só se vão com Redefinir disco, Apagar pasta pessoal…, Eliminar espaço de trabalho, ou a limpeza após um alerta de exfiltração de credenciais, e mesmo então as definições, os tokens e as chaves SSH são mantidos e as pastas partilhadas do anfitrião nunca são tocadas.

Onde uma máquina é guardada

Cada máquina é uma pasta sob ~/Library/Application Support/BromureAC/profiles/<id>/:

CaminhoConteúdo
profile.jsonTodas as definições não secretas.
secrets.encTodos os segredos, cifrados com uma chave guardada no seu Keychain.
disk.imgA cópia própria da máquina do SO de base.
home.imgO /home/ubuntu persistente.
checkpoints/Pontos de reversão da pasta pessoal (e do disco de sistema).
vm.stateA RAM gravada de uma máquina suspensa.
agent/, ssh/Material de chave SSH do lado do anfitrião. A chave privada nunca entra na VM.

Os seus valores predefinidos das Preferências são guardados fora de profiles/, e é por isso que nunca aparecem como máquina. Os segredos nunca são escritos em profile.json nem copiados para a VM: o convidado só tem substitutos, que o proxy do anfitrião troca pelos valores reais no fio (ver Credenciais e a fronteira do fio).

Dica: disk.img, home.img e os pontos de verificação são imagens ext4. Espaços de trabalho › Abrir ficheiro ext4… percorre-os, extrai deles e repara-os no seu Mac sem arrancar nada. Ver Avançado.

Da linha de comandos

Tudo o que está neste capítulo também se pode fazer sem a janela. Com a aplicação em execução, bromure-cli vm ls lista as máquinas e o estado delas, e workspaces create, workspaces edit, workspaces describe e workspaces rm criam-nas, alteram-nas, inspecionam-nas e eliminam-nas (vm é um alias de workspaces). Ver CLI, API e MCP.