Sessões
Uma sessão é um espaço de trabalho em execução: a sua VM Ubuntu arrancada, os seus separadores de terminal ativos e o seu agente a trabalhar. Este capítulo abrange tudo o que acontece entre clicar em Iniciar e fechar a janela — a disposição da janela da sessão, os separadores e as worktrees do Git, o navegador incorporado e os painéis de ficheiros, a movimentação de ficheiros e conteúdo da área de transferência entre o seu Mac e a VM, os pontos de verificação e as opções de que dispõe quando uma sessão termina.
Ao contrário do navegador web Bromure equivalente, cujas sessões são destruídas quando a janela é fechada, os espaços de trabalho do Bromure Agentic Coding são persistentes por conceção. O disco de sistema e o diretório home da VM sobrevivem entre sessões; apenas ações deliberadas (Repor para a base…, Apagar home…, Eliminar espaço de trabalho) ou uma limpeza de segurança destroem dados. Fechar uma sessão apenas decide o que a VM faz a seguir: continuar em execução, suspender ou desligar.
Como funcionam as sessões
Cada espaço de trabalho corresponde a exatamente uma VM. A VM arranca a partir de um disco de sistema específico do espaço de trabalho (disk.img) — um clone copy-on-write em APFS da imagem base partilhada do Ubuntu, criado instantaneamente no primeiro arranque e reutilizado em todos os arranques seguintes. Tudo o que instalar dentro da VM (sudo apt install, cadeias de ferramentas de linguagens, configuração do sistema) persiste entre sessões. O diretório home /home/ubuntu é armazenado separadamente — numa imagem de disco ext4 esparsa e privada, nos espaços de trabalho modernos — e sobrevive mesmo a uma reposição completa do disco de sistema. Consulte Conceitos para o modelo de armazenamento em profundidade.
Dentro da VM, todos os terminais pertencem a uma única sessão tmux. O tmux é a fonte de verdade: cada separador da interface é uma janela tmux, e o anfitrião espelha a lista de separadores do convidado na barra lateral. Esta conceção significa que a interface pode desanexar-se e reanexar-se livremente — uma sessão pode continuar a correr em segundo plano sem interface, ser destacada para a sua própria janela ou ser espelhada a partir de outro Mac (ver Acesso remoto) sem perturbar o trabalho do agente.
Nota: As VMs dos espaços de trabalho não são pré-aquecidas a partir de um conjunto. Cada uma arranca a frio a partir do seu próprio disco (ou é restaurada a partir de um instantâneo de suspensão). Apenas a VM sidecar por trás do painel do navegador agêntico utiliza o conjunto pré-aquecido.
Iniciar uma sessão
Pode iniciar um espaço de trabalho parado a partir de vários locais:
- Selecione o espaço de trabalho na barra lateral e clique em Iniciar (ou Retomar se estiver suspenso) — quer no cartão de início do palco, quer no painel de controlo da VM.
- Clique em ⋯ na linha do espaço de trabalho na barra lateral e escolha Iniciar.
- Clique numa célula de marcador de posição na Grelha de terminais que pertença a um espaço de trabalho desligado.
O que arranca
- Primeiro arranque — a aplicação clona a imagem base para o
disk.imgdo espaço de trabalho utilizando um clone copy-on-write em APFS. O clone é instantâneo e não custa espaço em disco à partida; os blocos são alocados apenas à medida que o convidado escreve. A imagem home e as partilhas por arranque (partilha de metadados e outbox) são criadas, e a VM arranca com 4 vCPUs (fixos) e a RAM configurada nas definições do espaço de trabalho. - Arranques subsequentes — o disco de sistema e o home existentes são reutilizados, pelo que tudo o que foi instalado dentro da VM continua lá.
- Espaço de trabalho suspenso — em vez de um arranque a frio, o instantâneo de RAM guardado (
vm.state) é restaurado e a sessão retoma exatamente onde ficou, com a sua barra de separadores re-hidratada a partir do instantâneo de separadores guardado. Retomar é quase instantâneo.
Por predefinição, a VM junta-se ao switch NAT partilhado do Bromure: cada VM de espaço de trabalho (e a VM do navegador agêntico) partilha uma sub-rede privada, obtém um endereço DHCP estável e pode alcançar as outras — para que o painel do navegador possa carregar um servidor de desenvolvimento que o agente iniciou, através do IP da VM. Um modo Bridged por espaço de trabalho está disponível nas definições do espaço de trabalho. Consulte Definições — Geral para opções de memória e rede.
O ecrã de arranque
Enquanto a VM arranca, uma sobreposição animada de "mergulho" cobre a área do terminal — o nome do espaço de trabalho sobre uma barra de progresso de leitura, com uma linha de estado opcional. Só aparece se o arranque demorar mais de 0,4 segundos, e desaparece no momento em que o convidado reporta a sua primeira lista de separadores. Durante uma migração de armazenamento home, a sobreposição mostra progresso determinado (por exemplo, "A MOVER HOME — 42% DE 7,9 GB").
Se nenhum terminal aparecer no espaço de 30 segundos, a sobreposição muda para um painel MERGULHO FALHADO — "«nome» nunca devolveu um terminal após 30 segundos. A VM pode estar bloqueada, ou a imagem base pode estar danificada." — com dois botões:
- Continuar a esperar — rearma o watchdog e mantém o arranque em curso.
- Repor imagem base… — inicia uma reconstrução da imagem base para casos em que a própria imagem partilhada está danificada.
Consulte Resolução de problemas se os arranques falharem repetidamente.
Pedidos no momento do arranque
Um arranque pode ser precedido por um destes pedidos:
| Pedido | Quando aparece | Opções |
|---|---|---|
| Divergência da imagem base | A imagem base partilhada foi reconstruída desde que o disco deste espaço de trabalho foi clonado | Repor e iniciar (re-clonar a partir da nova base; home intacto) / Iniciar tal como está / Cancelar |
| Espaço de trabalho comprometido | Uma sessão anterior foi assinalada por exfiltração de credenciais | Confirmar uma limpeza do disco, do home, do instantâneo de RAM e das partilhas por arranque antes do arranque; as definições, os tokens e as chaves SSH são mantidos. Consulte Credenciais. |
| Atualização do armazenamento home | O espaço de trabalho ainda utiliza o home antigo de pasta partilhada | Atualizar agora (migrar para uma imagem home ext4 durante este arranque) / Agora não (perguntado novamente no próximo início) |
| Modelo ainda a descarregar | Um modelo local necessário não terminou de descarregar | O arranque é recusado com uma explicação. Consulte Modelos locais. |
| Disco cheio | O volume do anfitrião tem menos de 1 GB livre | O arranque é recusado com um erro claro em vez de encravar a meio da sessão. |
A janela da sessão
Todas as sessões vivem numa única janela partilhada intitulada Bromure (1320 × 860 pontos por predefinição). É uma divisão ao estilo do Mail.app: uma barra lateral redimensionável à esquerda que lista todos os espaços de trabalho, e um único palco à direita que mostra o terminal do espaço de trabalho selecionado. A barra de título é transparente e unificada com a barra de ferramentas; clicar numa área vazia dela arrasta a janela, ao estilo de um navegador.
A captura de ecrã acima mostra a janela com um espaço de trabalho desligado selecionado: a barra lateral ESPAÇOS DE TRABALHO à esquerda (com o nó Grelha fixado, dois espaços de trabalho a mostrar o seu estado Desligado, uma secção AUTOMATIZAÇÕES e o botão preto + para criar um espaço de trabalho) e o palco a mostrar o painel de controlo da VM desse espaço de trabalho — cartões de estatísticas para CPU, Memória, vCPUs, Disco e Tempo de atividade, um resumo de CONFIGURAÇÃO e um botão Iniciar.
A barra lateral de espaços de trabalho
A barra lateral é uma lista de origem com uma linha por espaço de trabalho — em execução ou não. Cada linha mostra o nome do espaço de trabalho, o seu bloco de cor de destaque e um distintivo de estado de execução:
| Distintivo | Etiqueta de estado | Significado |
|---|---|---|
| Ponto verde | — | Em execução |
| Laranja, a pulsar | A iniciar… | A arrancar |
| Ponto amarelo | Suspenso | Instantâneo de RAM guardado em disco |
| Ponto cinzento | Desligado | Desligado |
Um triângulo de exclamação vermelho assinala um espaço de trabalho comprometido. Os espaços de trabalho em execução mostram os seus separadores de terminal aninhados por baixo (na ordem em árvore das worktrees) mais um nó Docker sempre presente, e revelam controlos ao passar o cursor: destacar, fechar (×) e + para um novo separador. O menu ⋯ em cada linha oferece ações de ciclo de vida sensíveis ao estado: Iniciar / Retomar / Desligar / Suspender / Reiniciar, Adicionar worktrees à Grelha (apenas em execução), Editar…, Duplicar, Repor disco e Eliminar espaço de trabalho.
Nota: Desligar e Reiniciar pedem confirmação porque param processos em execução. Suspender não pede — é totalmente recuperável.
Arraste o divisor entre a barra lateral e o palco para o redimensionar (largura predefinida de 220 pontos). Arrastar abaixo de cerca de 100 pontos ajusta a barra lateral a uma barra de ícones de 44 pontos; arraste de volta para além disso para a expandir. ⌃⌘S alterna o estado recolhido da barra lateral. Na barra recolhida, os separadores de contentor ficam ocultos e as dicas transportam o contexto do espaço de trabalho e do separador.
O palco
O palco mostra o terminal do separador selecionado. Também pode ser coberto por superfícies de sobreposição a toda a área:
- O painel de controlo da VM — clique no nome de um espaço de trabalho na barra lateral (ver abaixo).
- A Grelha de terminais — clique no nó Grelha fixado (ver A Grelha de terminais).
- O painel de controlo do Docker — clique no nó Docker sob um espaço de trabalho em execução para gerir contentores e imagens.
- O editor de automatizações — a partir da secção AUTOMATIZAÇÕES (ver Automatização e a CLI).
Duas divisões adicionais vivem dentro do palco na sua margem direita: o painel do navegador agêntico (⌃⌘B) e o painel do explorador de ficheiros (⌃⌘E).
O painel de controlo da VM
Clicar no nome de um espaço de trabalho (em vez de num dos seus separadores) sobrepõe o seu painel de controlo no palco, para qualquer estado de execução. Para uma VM em execução, mostra sinais vitais em tempo real: CPU com um gráfico de tendência, memória usada da alocada, vCPUs com carga média, utilização do disco (obtida do próprio df do convidado, que é mais fiel do que o tamanho do clone no lado do anfitrião), tempo de atividade e um cartão de Portas em escuta que lista os sockets do convidado alcançáveis externamente como pontos de extremidade <IP-da-VM>:<porta> com cópia num clique. Serviços provavelmente HTTP também recebem um botão de globo que pode expor esse serviço à internet através de um túnel rápido da Cloudflare (um diálogo de consentimento único explica o descarregamento e os termos). Para um espaço de trabalho suspenso ou desligado, o painel de controlo mostra em vez disso a especificação da máquina e a configuração.
A barra de ações oferece Novo terminal, Suspender, Reiniciar e Desligar enquanto em execução, ou Iniciar / Retomar caso contrário. Um cartão de CONFIGURAÇÃO resume o modo de autenticação por ferramenta, as Salvaguardas, a análise de injeção de prompt e as pastas partilhadas.
Nota: Os sinais vitais atualizam-se cerca de cada 1,5 segundos a partir do convidado. Valores a zero logo após o arranque significam que o agente convidado ainda não reportou.
Controlos da barra de título
Um conjunto de controlos por VM selecionada situa-se na extremidade final da barra de ferramentas enquanto o espaço de trabalho selecionado está em execução:
| Controlo | O que faz |
|---|---|
| Pílula de IP | O endereço IP da VM em monoespaçado. Clique para copiar — pisca Copiado. Dica: IP da VM — clique para copiar. |
| Ponto de transmissão | Um ponto vermelho a pulsar mostrado quando os metadados da sessão estão a ser enviados para bromure.io (Macs inscritos, espaços de trabalho não privados). Consulte Enterprise. |
| Distintivo do motor | Estado da inferência local: um indicador de progresso enquanto o motor aquece, um ícone verde de cpu quando pronto, laranja em caso de falha. Consulte Modelos locais. |
| Raio da Fusion | Alterna a Fusion para este espaço de trabalho. Amarelo quando ativada (Fusion ativada — clique para desativar). Desativado com a dica Ative pelo menos dois modelos para usar a Fusion até que pelo menos dois fornecedores tenham credenciais utilizáveis. |
| Explorar ficheiros | Abre a janela do navegador de ficheiros por espaço de trabalho (ver Mover ficheiros e a área de transferência). |
| Reiniciar a VM | Reinicia o convidado. |
| Inspecionar rastreio (⇧⌘I) | Abre o Inspetor de Rastreios. |
| Editar espaço de trabalho | Abre o editor do espaço de trabalho. |
| Destacar para a sua própria janela | Move o espaço de trabalho para a sua própria janela (ver abaixo). |
| Mostrar ou ocultar o navegador agêntico (⌃⌘B) | Alterna o painel do navegador (ícone de globo). |
| Mostrar ou ocultar ficheiros do repositório (⌃⌘E) | Alterna o painel do explorador de ficheiros. |
Destacar e reancorar
Qualquer espaço de trabalho em execução pode ser destacado da janela unificada para a sua própria janela de VM única: clique no ícone de destacar na sua linha da barra lateral ou na barra de ferramentas. Os seus separadores tornam-se uma tira de pílulas em cápsula na barra de título dessa janela, e o painel mantém o estado da sua VM e dos seus separadores — apenas a janela anfitriã muda. A janela destacada transporta os mesmos controlos da barra de ferramentas, mais um botão de reancorar (Mover esta VM de volta para a janela principal) e um popover de pastas partilhadas que lista as pastas do anfitrião montadas (clique numa linha para a abrir no Finder). Clique no botão de reancorar para dobrar o espaço de trabalho de volta para a janela unificada.
Trabalhar com separadores
Cada separador é uma janela tmux dentro da única sessão tmux da VM do espaço de trabalho. O tmux é autoritativo: o convidado publica a sua lista de janelas cerca de cada 0,7 segundos, e o anfitrião espelha-a nas linhas da barra lateral (e na tira de pílulas de uma janela destacada). Alterações de separadores, como renomeações, são detetadas em cerca de 40 milissegundos.
- Novo separador — prima ⌘T, ou clique em + na linha do espaço de trabalho na barra lateral.
- Fechar separador — prima ⌘W, ou passe o cursor sobre uma linha de separador e clique no seu ×. Fechar o último separador termina a sessão e passa pela mesma cadeia de ação de fecho que fechar a janela.
- Trocar de separador — prima ⌘1 a ⌘9. Pequenas etiquetas de combinação aparecem junto às primeiras nove linhas do espaço de trabalho selecionado; a numeração segue a ordem em árvore visível da barra lateral (separadores de contentor excluídos).
As etiquetas dos separadores mostram o programa em primeiro plano (claude, codex, uma shell, e assim por diante); os separadores de worktree mostram um nome de exibição mais amigável, como "Reformulação do website (claude)". Os separadores abertos ao anexar uma shell a um contentor Docker aninham-se sob esse contentor no nó Docker em vez de no nível superior.
Nota: Os índices de janela do tmux podem ter lacunas depois de fechar separadores; a interface gere o mapeamento, e as combinações ⌘-número seguem sempre o que vê na barra lateral.
Pontos de estado do agente
O ícone de cada separador transporta um ponto de estado colorido que acompanha o agente em execução nele:
| Ponto | Significado |
|---|---|
| Laranja, a pulsar | O agente está a trabalhar |
| Verde | O agente terminou |
| Vermelho | O agente precisa da sua intervenção |
O estado é conduzido por hooks por janela para o Claude Code e pelo proxy de tráfego para outros agentes, pelo que os pontos funcionam sem qualquer configuração dentro da VM.
Worktrees do Git
Uma worktree do Git é uma segunda cópia de trabalho de um repositório: outro ramo com checkout no seu próprio diretório, partilhando o histórico do repositório mas com os seus próprios ficheiros e o seu próprio índice. O Git suporta muitas de uma só vez, pelo que vários ramos podem ser trabalhados em paralelo sem guardar temporariamente alterações, voltar a clonar ou trocar de ramo no mesmo local.
O Bromure constrói linhas de trabalho paralelas de agentes sobre isso. Qualquer separador de terminal cujo diretório de trabalho esteja dentro de um repositório Git pode gerar uma worktree com o seu próprio separador de agente aninhado — um agente a reformular o site em wt/website-refactoring enquanto outro persegue um erro em wt/login-fix, cada um no seu próprio checkout, nenhum a tropeçar nos ficheiros não confirmados do outro. Quando uma linha de trabalho está pronta, integra-se o seu ramo de volta (ou abre-se um pull request a partir dela) e descarta-se a worktree. É a forma natural de distribuir uma tarefa por vários agentes de uma só vez e observá-los na Grelha de terminais.
Criar uma worktree
Clique com o botão direito em qualquer linha de separador na barra lateral para abrir o seu menu de contexto. Dois itens estão sempre presentes:
- Nova worktree… — abre o diálogo descrito abaixo. Quando o diretório de trabalho do separador não é um repositório Git, o item é mostrado mas desativado, etiquetado como Nova worktree… (Não está num repositório git), para que o menu nunca fique silenciosamente vazio. Um separador de worktree é, ele próprio, um checkout, pelo que também oferece Nova worktree… — é assim que se ramifica uma worktree a partir de uma worktree.
- Nova automatização… — inicializa o editor de automatizações com o diretório do separador (ver Automatizações).
O diálogo Nova worktree — "Cria uma worktree do git ramificada a partir do commit atual deste separador e abre um agente aninhado nela." — recolhe três coisas:
| Campo | Finalidade |
|---|---|
| Nome da tarefa | Uma etiqueta humana curta, por exemplo Website refactoring. É convertida num slug para o nome do ramo e mostrada no separador. |
| Menu de ferramenta | O agente a lançar no novo checkout — claude, codex ou grok. Assume por predefinição o agente configurado do espaço de trabalho. |
| Prompt inicial (opcional) | A primeira mensagem entregue ao agente quando ele arranca, para que uma worktree possa começar a trabalhar sem supervisão. Deixe em branco para abrir o agente inativo. |
Clique em Criar (ou Cancelar). O Bromure adiciona uma worktree do Git ramificada a partir do commit atual do separador num ramo chamado wt/<slug> — o slug é o nome da tarefa em minúsculas com sequências de outros caracteres reduzidas a hífenes simples e limitado a 40 caracteres; um nome cujo ramo já existe recebe um sufixo -2, -3, … Um separador de agente aninhado abre então no novo checkout, etiquetado com o nome da tarefa e a ferramenta, como "Reformulação do website (claude)".
Nota: Se o diretório de trabalho do separador não puder ser determinado, um alerta — "O diretório de trabalho deste separador ainda não está disponível" — explica que o espaço de trabalho está provavelmente a correr um agente in-VM mais antigo, e sugere reiniciá-lo (Desligar e depois Iniciar) para que ele adote o suporte de worktrees.
Como os separadores de worktree se aninham
Os separadores de worktree aninham-se sob o separador a partir do qual foram ramificados, indentados e prefixados com um pequeno glifo de ramo para que os subagentes aninhados se leiam como ramos em vez de meros separadores. Como uma worktree pode, ela própria, ser ramificada, o aninhamento é uma árvore: worktrees a partir de worktrees são suportadas, e a indentação avança para dentro em cada nível, até 6 níveis de profundidade. Um separador Anexar terminal e um separador Integrar → … em execução aninham-se sob a sua worktree da mesma forma. Isto é apenas uma ordem de exibição — cada separador continua a ser uma janela tmux comum, e as combinações ⌘-número seguem a ordem em árvore visível.
Para observar vários agentes de worktree lado a lado, use Adicionar worktrees à Grelha no menu ⋯ do espaço de trabalho, que adiciona todos os separadores de worktree desse espaço de trabalho à Grelha de terminais de uma só vez.
Ações de worktree
Clique com o botão direito num separador de worktree para as ações específicas dele — Integrar…, Anexar terminal e (abaixo de um divisor) Descartar worktree.
Integrar… — integrar o ramo de volta. O diálogo executa a integração num novo separador com checkout no destino; apenas o trabalho confirmado no ramo da worktree é integrado. O seu seletor de destino percorre a cadeia de ascendentes — a worktree-mãe imediata, depois a mãe dessa worktree, e assim por diante até à raiz do repositório ("«ramo» (raiz do repositório)"). A mãe imediata é a predefinição segura e é selecionada por si; escolher algo mais acima é assinalado como «etiqueta» ⚠︎ salta intermediários, porque essas worktrees intermédias nunca recebem a alteração. Escolha um destino e clique em Integrar.
- Os conflitos resolvem-se sozinhos. Se a integração entrar em conflito, o agente de programação é iniciado ali mesmo no separador de integração para o resolver automaticamente. Se parar com o conflito por resolver, o separador de integração oferece Fazer o agente resolver conflitos no seu próprio menu de contexto para tentar novamente.
- Criar Pull Request. Quando o espaço de trabalho tem uma credencial do GitHub (que é o que autentica o
ghdentro da VM), o diálogo de integração ganha um terceiro botão, Criar Pull Request. Em vez de integrar localmente, empurra o ramo e faz o agente abrir um pull request limpo no GitHub contra o destino selecionado. Consulte Credenciais. - Integrar não descarta a worktree — limpa-a você mesmo assim que estiver satisfeito com o resultado.
Anexar terminal abre um separador de terminal simples — sem agente, apenas uma shell já com cd feito para o checkout da worktree — aninhado sob a worktree, para que possa inspecionar ou testar as suas alterações à mão.
Descartar worktree é o passo de limpeza, e é destrutivo: remove o checkout e elimina o ramo. Quaisquer commits nesse ramo que nunca tenham sido integrados perdem-se, pelo que pergunta primeiro — "Descartar worktree «nome»?" — e fecha o separador juntamente com o checkout.
Nota: Apenas o trabalho confirmado atravessa uma integração ou um pull request. As alterações não confirmadas numa worktree permanecem nessa worktree, e desaparecem definitivamente assim que a descartar.
Worktrees a partir de automatizações agendadas
As automatizações agendadas também criam worktrees. Cada execução sem supervisão cria uma worktree do Git nova no seu próprio ramo wt/<slug> e lança o agente aí, pelo que uma execução aterra como um separador de worktree comum — indentado, anexável e integrável exatamente como um que tenha criado à mão. Consulte Automatizações.
O terminal
O separador ativo é renderizado numa superfície de terminal nativa, no lado do anfitrião (libghostty, renderizado com Metal) anexada à sua janela tmux através de um socket virtio. O processo filho da superfície é apenas uma bomba de bytes, pelo que um filho morto — um reinício da VM, um socket perdido — nunca perde o estado do terminal: a superfície simplesmente reaparece e reanexa-se com recuo progressivo. Se o terminal nativo não conseguir arrancar, a aplicação recorre silenciosamente ao framebuffer gráfico da VM; ambos são vistas da mesma sessão tmux.
A aparência — família e tamanho da fonte, cores de fundo e de primeiro plano, forma e intermitência do cursor — vem das definições de Aparência do espaço de trabalho e aplica-se em tempo real quando guarda o perfil. Os novos espaços de trabalho são inicializados com JetBrains Mono 12 sobre um fundo cinzento-ardósia escuro (#212734), com o primeiro plano retirado do seu tema do Terminal.app. Apenas as fontes de largura fixa são renderizadas; famílias não resolúveis ou proporcionais recorrem a Menlo.
O zoom da fonte está disponível por superfície: ⌘+ / ⌘− / ⌘0, um pinçar no trackpad (cada passo de ±0,25 de ampliação avança um tamanho de fonte) e um duplo toque com dois dedos para repor.
Os espaços de trabalho com uma opacidade de janela inferior a 1.0 recebem um terminal em vidro fosco: a área do terminal compõe-se contra o ambiente de trabalho com um desfoque de fundo, enquanto a barra de título, a barra lateral e o divisor permanecem opacos. A opacidade é limitada a 0.3–1.0 e aplica-se em tempo real ao guardar o perfil.
A Grelha de terminais
A Grelha é uma superfície de palco que mostra até 25 terminais ativos (a disposição cresce de forma quadrada, limitada a 5 × 5) de qualquer combinação de espaços de trabalho lado a lado — ideal para observar uma frota de agentes de worktree. Cada célula é a sua própria superfície de terminal ativa nessa janela tmux, independente da vista de palco do espaço de trabalho, pelo que ambas podem estar abertas ao mesmo tempo.
- Adicionar um terminal — arraste qualquer linha de separador para o nó Grelha fixado no topo da barra lateral (a sua dica diz "Arraste terminais para aqui para os observar lado a lado"), ou prima ⌘D no terminal ativo para o fixar e saltar para a Grelha. Adicionar worktrees à Grelha no menu ⋯ de um espaço de trabalho adiciona todos os separadores de worktree de uma só vez.
- Mostrar a Grelha — clique no nó Grelha (ou no botão da grelha na barra recolhida). Clicar numa linha de membro foca a sua célula.
- Controlos da célula — o cabeçalho de cada célula mostra um ponto de estado, o nome do espaço de trabalho e a etiqueta do separador, com controlos ao passar o cursor Abrir no espaço de trabalho e Remover da grelha — o terminal continua em execução, mais um manípulo de arrasto para trocar as posições das células. Clique com o botão direito no cabeçalho de uma célula para as mesmas ações.
- Zoom — clique duas vezes numa célula (ou prima ⌘↩ na célula focada) para a ampliar a todo o palco; repita para reduzir. Esc deliberadamente não reduz, porque os agentes usam Esc.
As células pertencentes a um espaço de trabalho desligado ou suspenso permanecem como cartões de marcador de posição com uma etiqueta Desligado ou Suspenso e um botão Iniciar; as células cuja janela tmux desapareceu são removidas. A pertença à Grelha persiste entre reinícios da aplicação (em ~/Library/Application Support/BromureAC/grid-layout.json).
O painel do navegador agêntico
O painel do navegador é uma divisão à direita dentro do palco que aloja um Chromium ativo — a correr na sua própria VM sidecar descartável, uma por espaço de trabalho, criada preguiçosamente na primeira abertura. Tanto você como o agente o conduzem: os agentes controlam-no através do servidor MCP de navegador incorporado, e as suas chamadas de ferramenta podem arrancar e revelar o navegador automaticamente para o espaço de trabalho selecionado. O painel nunca se reabre depois de o ter fechado manualmente.
Dica: Esta secção aborda o navegador como um painel da janela de sessão. Para o guia completo de utilização — conduzi-lo você mesmo, deixar o agente conduzi-lo através das ferramentas
browser_*, manter a sessão iniciada e o modelo de privacidade — consulte O Navegador Incorporado.
Alterne o painel com ⌃⌘B ou o botão de globo da barra de ferramentas. A primeira vez que o abrir, um cartão de consentimento pergunta Instalar o navegador? com Descarregar e instalar / Agora não — a imagem do navegador é um descarregamento único de cerca de 500 MB.
O que pode fazer nele
O painel é uma vista de navegador sem cromo, encimada por uma barra de separadores compacta ao estilo do Safari:
- Recuar / avançar — botões de seta, ou ⌘[ e ⌘].
- Pílulas de separador — uma pílula por separador; a pílula ativa funciona também como campo de URL ("Pesquisar ou introduzir URL"). Os nomes de anfitrião simples recebem
https://prefixado; qualquer coisa que não seja um URL torna-se uma pesquisa no Google. - + — novo separador (⌘T enquanto o painel tiver o foco).
- DevTools — alterna as DevTools do Chromium (F12).
- Partilhar — o menu padrão de partilha do macOS.
- Informação do site — clique no favicon para um popover de informação do site, incluindo detalhes do certificado em páginas HTTPS.
Como a VM do navegador partilha a mesma sub-rede NAT que as VMs dos espaços de trabalho, pode carregar os servidores de desenvolvimento do agente diretamente pelo IP do espaço de trabalho — copie-o a partir da pílula de IP na barra de ferramentas.
Arraste a margem esquerda do painel para o redimensionar (predefinição de 640 pontos, entre 380 e 1400; o terminal mantém sempre pelo menos 240 pontos). Arrastar abaixo do mínimo fecha o painel.
Ciclo de vida e persistência
O navegador é descartável por predefinição: o seu disco é um clone efémero que é eliminado quando o navegador é desmontado, pelo que os cookies e os inícios de sessão desaparecem com ele. Um navegador oculto suspende após 10 segundos e é totalmente desmontado após 5 minutos recolhido. O estado aberto/fechado do painel é lembrado por espaço de trabalho enquanto a aplicação corre, mas deliberadamente não entre reinícios da aplicação — o navegador efémero não sobrevive a um reinício de qualquer forma.
Para manter os inícios de sessão, ative Manter sessão iniciada nos sites nas definições de Navegador do espaço de trabalho: o perfil do Chromium passa então a viver num disco encriptado por espaço de trabalho e sobrevive às desmontagens. Alternar a definição reinicia o navegador do espaço de trabalho (é avisado ao guardar).
Nota: Enquanto a vista do navegador tem o foco do teclado, ⌘Q e ⌘Tab são capturados pelo convidado. Clique no terminal ou na barra lateral para os recuperar.
O painel do explorador de ficheiros
O painel do explorador de ficheiros (cabeçalho FICHEIROS) mostra o repositório Git do separador ativo como uma árvore de ficheiros de origem ao estilo de um IDE. Abre-se por si só no momento em que o diretório do separador ativo entra num repositório Git — um cd para um repositório, ou trocar para um separador já dentro de um — pelo que raramente o abre à mão; também pode alterná-lo com ⌃⌘E ou o botão Mostrar ou ocultar ficheiros do repositório (⌃⌘E) da barra de ferramentas. Entrar num repositório é o gatilho, pelo que um espaço de trabalho que nunca visita um repositório simplesmente nunca mostra o painel.
- Estado do Git num relance — os ficheiros são coloridos por estado com distintivos de uma letra (M/A/U/D/R/!), as pastas que contêm alterações levam um ponto laranja, e uma pílula mostra a contagem de ficheiros alterados. Um filtro "apenas ficheiros alterados" e um botão de atualização manual situam-se no cabeçalho.
- Diffs e pré-visualizações — selecionar um ficheiro abre uma divisão de detalhe com um controlo segmentado Diff / Ficheiro: um diff unificado colorido com contagens +/− e goteiras de número de linha, ou uma pré-visualização renderizada (Markdown renderizado, ficheiros de origem com realce de sintaxe, imagens e binários assinalados). Os ficheiros eliminados aparecem rasurados — "O ficheiro foi eliminado — mude para Diff para ver o que foi removido." Os ficheiros não rastreados e recém-adicionados não têm diff, apenas uma pré-visualização.
- Visualizador destacado — um botão de destacar abre o detalhe numa janela Visualizador de Ficheiros separada, com capacidade de ecrã completo, que acompanha a seleção do painel em tempo real.
- Ações de worktree — uma barra diretamente sob o cabeçalho gere as worktrees do Git do repositório atual sem abrir o menu da barra lateral: Nova worktree… está sempre disponível dentro de um repositório, e Integrar e Eliminar aparecem quando o separador ativo é, ele próprio, uma worktree. Executam as mesmas operações descritas em Worktrees do Git — Nova worktree… abre o diálogo de criação, Integrar abre o seletor de destino, e Eliminar descarta a worktree e o seu ramo após confirmação. (Apenas sessões locais; num espelho remoto, gira as worktrees a partir do menu de separadores da barra lateral.)
Todos os dados são recolhidos executando git (e head) dentro do convidado através do canal de shell do socket virtio — o painel funciona mesmo sem uma pasta partilhada, e para espaços de trabalho remotos. A árvore atualiza-se automaticamente a cada 4 segundos enquanto visível, e os diretórios que contêm alterações expandem-se automaticamente uma vez por repositório.
O painel abre e fecha ao estilo de um IDE por si só: entrar num repositório (um cd para um, ou trocar para um separador cujo diretório está num) abre-o; sair para um diretório que não é um repositório fecha-o. Um fecho manual prevalece até mudar de repositório. Arraste a margem esquerda do painel para redimensionar (predefinição de 260 pontos, entre 200 e 1000; abaixo de 200 fecha-o).
Nota: A árvore de ficheiros é apenas de leitura — nunca edita o conteúdo dos ficheiros (a barra de worktree executa operações git, não edições de ficheiros). Limites: 20 000 ficheiros listados (a árvore é truncada além disso), 512 KB por pré-visualização, 1 MB por diff.
Mover ficheiros e a área de transferência
Os ficheiros e o conteúdo da área de transferência atravessam a fronteira anfitrião/VM de quatro formas: a janela do navegador de ficheiros, as pastas partilhadas, a área de transferência do terminal e a colagem de imagens.
A janela do navegador de ficheiros
Clique no botão Explorar ficheiros da barra de ferramentas (ícone de pasta) para abrir uma janela ao estilo do Finder intitulada Ficheiros — «espaço de trabalho» para transportar ficheiros para dentro e para fora da VM. A sua barra lateral Locais oferece Home — o verdadeiro /home/ubuntu do convidado, explorado em tempo real através do serviço de ficheiros do socket virtio — mais uma entrada por pasta partilhada do anfitrião (explorada diretamente no anfitrião). As linhas mostram ícone, nome, tamanho e data de modificação, e a listagem atualiza-se automaticamente a cada 1,5 segundos.
- Copiar para fora — arraste um ficheiro da janela para o Finder. Os ficheiros do convidado são descarregados preguiçosamente ao largar.
- Copiar para dentro — largue ficheiros em qualquer parte do painel para os copiar para o diretório atual. As transferências são divididas em blocos (6 MB) com uma pílula de progresso "A copiar … para dentro/fora"; as colisões de nomes recebem sufixos " copy" ao estilo do Finder; as pastas largadas chegam inteiras.
- Barra de ferramentas — seta para cima (Pasta envolvente), uma trilha de navegação de caminho do convidado em monoespaçado, Nova pasta, Mostrar no Finder (apenas locais do anfitrião) e Atualizar.
- Menu de contexto — Abrir, Mostrar no Finder (linhas do anfitrião) e Mover para o Lixo (anfitrião) ou Eliminar (convidado).
- Duplo clique — os ficheiros do anfitrião abrem com a sua aplicação predefinida; os ficheiros do convidado são primeiro descarregados para uma cache por espaço de trabalho e depois abertos.
Nota: Os ficheiros ocultos com ponto não são mostrados. Os locais do convidado precisam de uma VM ativa ("O espaço de trabalho tem de estar em execução para explorar os seus ficheiros."), e uma VM recém-arrancada pode reportar brevemente "O agente in-VM está a atualizar — tente novamente dentro de alguns segundos."
Pastas partilhadas
Para o trabalho contínuo de um projeto, as pastas partilhadas são normalmente melhores do que transferências pontuais: até 8 pastas do anfitrião podem ser montadas na VM, cada uma com uma ligação simbólica no home do convidado como ~/<basename> (com desduplicação automática, como src-2). Configure-as nas definições de Pastas do espaço de trabalho.
Área de transferência
A área de transferência é ligada através do próprio protocolo do terminal — não há um agente separado para configurar:
- Convidado → Mac — copiar dentro do convidado (modo de cópia do tmux, OSC 52) chega automaticamente à área de transferência do macOS; libertar uma seleção do rato no tmux copia-a.
- Mac → convidado — ⌘V cola a área de transferência do macOS no terminal usando colagem com delimitadores.
- Seleção — um simples arrasto do rato seleciona texto ao estilo do macOS; ⌘C copia a seleção no lado do anfitrião. Selecionar nunca copia por si só.
Colar imagens
Premir ⌘V com uma imagem na área de transferência torna-se uma transferência de ficheiro: a imagem é escrita no convidado em /home/ubuntu/.bromure/pastes/clipboard-<timestamp>-<id>.<ext>, e o caminho do ficheiro no convidado é colado como texto no seu lugar — para que o agente possa ler a imagem do disco. Uma miniatura transitória aparece junto ao cursor com uma linha de progresso durante o carregamento, permanece brevemente ao concluir (vermelha em caso de falha) e é dispensada pela sua próxima tecla.
Reconhecido como imagens: ficheiros de imagem copiados do Finder (apenas quando todos os itens copiados são imagens) e bitmaps simples como capturas de ecrã ou o "Copiar imagem" de um navegador — qualquer coisa que também carregue um formato de texto cola como texto como de costume, pelo que um ⌘V comum nunca é sequestrado. As colagens são limitadas a 96 MB no total (maiores recorrem a texto), e os ficheiros de colagem com mais de 7 dias são limpos automaticamente dentro do convidado. O diretório de colagem vive na imagem home, pelo que os caminhos colados sobrevivem a um reinício da VM.
Dica: As ligações funcionam na direção oposta automaticamente: os URLs que o agente ou uma ferramenta CLI abre dentro do convidado (inícios de sessão OAuth,
xdg-open) são retransmitidos para o anfitrião e abrem no seu navegador Mac predefinido. Apenas os URLshttp/httpssão retransmitidos, com limite de taxa; as ligaçõesmailto:são deliberadamente descartadas.
Pontos de verificação e reversão
O Bromure cria pontos de reversão automáticos para que uma sessão que corra mal possa ser recuada sem uma reposição completa.
O que é capturado, e quando
Em cada arranque bem-sucedido de um espaço de trabalho, a aplicação cria silenciosamente instantâneos de ambas as camadas de armazenamento como clones copy-on-write sob o diretório checkpoints/ do espaço de trabalho:
- o disco de sistema (
disk.img), e - a imagem home ext4 (
home.img, armazenada sobcheckpoints/home/), para espaços de trabalho no modelo home moderno.
Como um ponto de verificação só é criado após um arranque que produziu um terminal funcional, cada ponto de verificação está comprovadamente apto para arrancar. A retenção segue uma escada em camadas: os últimos arranques são mantidos incondicionalmente, depois um por dia durante uma semana, depois um por semana durante um mês. Os pontos de verificação são gratuitos de criar mas consomem espaço em disco real à medida que o disco ativo diverge deles.
Restaurar o home
Restaurar home… vive no painel de Recursos do editor do espaço de trabalho, na linha de armazenamento A sua pasta home (está desativado enquanto o espaço de trabalho está em execução — feche primeiro a janela da sessão).
Clicar nele lista os pontos de reversão disponíveis num popup — como explica o diálogo, "cada um é o home tal como estava quando essa sessão começou". Escolha um e confirme: o home atual é primeiro colocado num ponto de verificação, pelo que um restauro pode, ele próprio, ser desfeito. Um espaço de trabalho que nunca tenha arrancado no modelo home ext4 mostra em vez disso Ainda sem pontos de verificação de home.
Repor o disco de sistema
Repor para a base…, na linha Disco de sistema do espaço de trabalho do mesmo painel (também Repor disco no menu ⋯ da barra lateral), é a opção nuclear para a camada de sistema: elimina o disk.img para que o próximo arranque volte a clonar uma cópia nova da imagem base. A confirmação — "Repor o disco de sistema de «nome» para a base?" — detalha o que é apagado: tudo o que instalou com sudo apt install, modificações a /etc, /var, /usr, /opt e configuração de todo o sistema. A sua pasta home fica intacta: projetos, dotfiles, chaves SSH e histórico da shell sobrevivem todos.
Repor é bloqueado enquanto a VM corre, e uma reposição também descarta qualquer instantâneo de RAM e estado de separadores guardado — um disco novo com RAM antiga corromper-se-ia instantaneamente.
Nota: Os pontos de verificação respondem a uma questão diferente da suspensão. A suspensão preserva o estado em execução da sessão atual para que a possa retomar; os pontos de verificação preservam o conteúdo do disco em momentos conhecidos como bons para que possa reverter um ambiente danificado. Um instantâneo de suspensão é descartado sempre que o disco a que pertence é reposto ou revertido.
Dica: Para acesso forense a um ponto de verificação ou à imagem home de um espaço de trabalho parado sem arrancar nada, Espaços de trabalho ▸ Abrir ficheiro ext4… abre qualquer
.imgext4 num navegador ao estilo do Finder, apenas de leitura — pode pré-visualizar e extrair ficheiros diretamente no Mac. Consulte Avançado para o navegador completo, a edição no local e a integração com ofsck.
Fechar uma sessão
Fechar uma sessão — através do × na linha do espaço de trabalho na barra lateral, do botão de fechar da sua janela destacada ou de ⌘W no seu último separador — resolve a preferência Ao fechar a janela do espaço de trabalho a partir do painel de definições Geral:
| Ação | O que faz |
|---|---|
| Executar em segundo plano | Desanexa apenas a interface. A VM continua a correr sem interface — os agentes continuam a trabalhar — e pode reanexar-se a qualquer momento a partir da barra lateral. |
| Suspender | Pausa a VM e guarda a sua RAM em disco (vm.state no armazenamento do espaço de trabalho). O próximo arranque restaura-a quase instantaneamente, com os mesmos terminais; a barra de separadores também é instantaneada (tabs.json) para que a sessão restaurada mostre os seus separadores de imediato. |
| Desligar | Um desligamento ACPI limpo. Os processos em curso param. O disco de sistema e o home são mantidos — nada é destruído. Um desligamento completo limpa qualquer estado de suspensão guardado, pelo que o próximo arranque é a frio. |
| Perguntar (predefinição) | Mostra um pedido de cada vez: "Fechar «nome»?" com os botões Executar em segundo plano, Suspender, Desligar e Cancelar, e a explicação "Executar em segundo plano mantém a VM a correr para que possa reanexar-se mais tarde. Suspender guarda o seu estado em disco. Desligar desliga-a." |
Alguns detalhes que vale a pena conhecer:
- Identidade de suspensão/retoma — o restauro exige exatamente a mesma configuração de VM, pelo que o identificador de máquina do espaço de trabalho, o endereço MAC e os caminhos de partilha são persistidos junto com o instantâneo. Ao retomar, o anfitrião faz ping ao convidado para ressincronizar o seu relógio.
- Falhas de restauro — se um instantâneo guardado não puder ser restaurado num arranque interativo, a aplicação recorre a um arranque novo. Os arranques iniciados por automatização abortam em vez disso — nunca destroem silenciosamente uma sessão suspensa.
- Alterar pastas partilhadas enquanto suspenso — um instantâneo não pode retomar contra um conjunto de partilhas diferente, pelo que editar as pastas partilhadas força uma confirmação Descartar VM suspensa…; o próximo arranque é a frio. Os ficheiros do home e das pastas partilhadas não são afetados.
- Reinício iniciado pelo convidado — executar
rebootdentro do convidado não termina a sessão: a aplicação deteta a intenção de reinício e relança a VM no local. - Destruir dados é sempre explícito — um espaço de trabalho desligado mantém o seu disco e home. Os dados só são destruídos por Repor para a base…, Apagar home…, Eliminar espaço de trabalho (todos confirmados; ver Espaços de trabalho), ou a limpeza forçada após um comprometimento por exfiltração de credenciais — e mesmo então as definições do seu perfil, os tokens e as chaves SSH são mantidos, e as pastas partilhadas do anfitrião nunca são tocadas.
Atalhos de teclado
As combinações da janela de sessão pertencem ao anfitrião — são intercetadas antes de o terminal as ver, pelo que funcionam independentemente do que corre dentro da VM.
Janela e separadores
| Atalho | Ação |
|---|---|
| ⌘T | Novo separador |
| ⌘W | Fechar separador (o último separador fecha a sessão) |
| ⌘1 – ⌘9 | Selecionar separador pela ordem das linhas da barra lateral |
| ⌘D | Fixar o terminal ativo na Grelha e revelá-lo |
| ⌘↩ | Ampliar / reduzir a célula da Grelha focada |
| ⌘N | Abrir o gestor de espaços de trabalho |
| ⌃⌘S | Alternar a barra lateral |
| ⌃⌘E | Alternar o painel do explorador de ficheiros |
| ⌃⌘B | Alternar o painel do navegador agêntico |
| ⇧⌘I | Abrir o Inspetor de Rastreios |
Terminal
| Atalho | Ação |
|---|---|
| ⌘C | Copiar a seleção |
| ⌘V | Colar (as imagens são carregadas para o convidado como ficheiros) |
| ⌘+ / ⌘− / ⌘0 | Tamanho da fonte maior / menor / repor |
| Pinçar / duplo toque com dois dedos | Ampliar fonte / repor zoom |
Painel do navegador (enquanto focado)
| Atalho | Ação |
|---|---|
| ⌘T / ⌘W | Novo / fechar separador do navegador |
| ⌘R | Recarregar |
| ⌘[ / ⌘] | Recuar / avançar |
| ⌘L | Focar o campo de endereço |
| F12 | Alternar as DevTools |
Nota: Uma proteção de repetição automática de 80 ms significa que manter uma combinação premida a dispara uma vez; repressões deliberadas disparam todas.