Agentes a trabalhar em conjunto
Os agentes no Bromure podem trabalhar em conjunto. Um agente pode entregar um pedaço de trabalho delimitado a um agente novo. Também pode pedir a uma sessão que já está em execução, na mesma máquina ou noutra, algo que ela sabe ou pode fazer. Pode sugeri-lo você mesmo («pede a @payments o esquema do webhook»), ou o agente pode decidi-lo por si.
Os dois agentes nunca falam diretamente. Cada mensagem passa pelo anfitrião Bromure, que:
- mostra a cada sessão apenas as conversas de que faz parte
- filtra cada mensagem em busca de injeção de prompt
- registra cada mensagem na Linha do tempo de segurança
- copia os ficheiros que viajam com ela entre máquinas
Este capítulo diz «máquina» para aquilo a que o editor de definições chama espaço de trabalho.
Delegações e pedidos
Há dois tipos de troca:
| Delegação | Pedido | |
|---|---|---|
| Quem faz o trabalho | Uma sessão nova, iniciada para isso | Uma sessão que já existe, nomeada pelo seu @apelido |
| Onde | Por omissão numa worktree git ramificada da pasta de quem delega, no seu próprio ramo. Corre na mesma pasta quando esta não é um repositório, e numa pasta própria quando a delegação vai para outra máquina. | Onde essa sessão já corre |
| Como abre | Com o título de quem delega, o resumo, o que «terminado» significa (o contrato) e os caminhos de onde não sair | Como um aviso de uma linha na linha de comando do par |
| Como termina | O delegado entrega. Quem delegou aceita ou rejeita com close_delegation, ou cancela. A sessão do delegado é então arquivada, enquanto o seu ramo fica para integrar ou descartar. | O deliver do par é a resposta. Nada é iniciado nem terminado do lado dele. |
Um delegado fica aninhado sob quem o delegou na barra lateral, como uma sessão de ramo. Uma delegação para outra máquina arranca essa máquina se estiver desligada. Fá-lo discretamente, sem tomar conta do chat que está a ver.
Como as mensagens chegam a um agente
Um agente recebe mensagens de três formas:
- À espera: se o agente está bloqueado em
waitouask, recebe a mensagem de imediato. - Inativo: se a sua linha de comando está inativa, o anfitrião escreve lá um aviso de uma linha, a dizer-lhe que chame
read_inbox. - Ocupado: se está a meio de uma vez, ou há um diálogo no ecrã dele, o aviso espera que a linha de comando fique livre.
Um aviso ainda não lido alguns minutos depois é enviado de novo, até três vezes. Se o agente do destinatário tiver terminado, a mensagem retoma-o. Por exemplo, orientar um delegado terminado traz-no de volta ao ponto onde estava.
O que o anfitrião ainda deve a uma sessão é guardado na própria mensagem, pelo que sobrevive a um reinício da aplicação.
@apelidos
Um apelido é a forma como você e os outros agentes se dirigem a uma sessão. Defina um com Apelido… no menu de contexto da sessão ou no menu ⋯ do seu cabeçalho.
A folha explica: «Como os outros agentes alcançam «sessão»: pedem-lhe com request(to: "@nome"), e pode escrever @nome em qualquer compositor. Letras, dígitos, pontos, traços e sublinhados.» Pré-visualiza o resultado («Será @payments»). Clique em Definir, ou em Limpar para o remover.
Os apelidos são únicos no Mac. Escolher um já em uso é recusado («@payments já é «Refatoração da Payments API».»). O apelido aparece ao lado do título da sessão na barra lateral, no cabeçalho e nas células de sala, e pode procurá-lo na barra lateral.
A paleta @
Escreva @ no compositor de um chat ou no ecrã de nova sessão para obter uma paleta de sessões que pode nomear:
- Lista todas as sessões exceto a atual.
- As sessões com apelido aparecem como estão. As que não têm aparecem com o apelido que receberiam, derivado do título e marcado nome novo. Escolher uma dessas dá à sessão esse apelido na hora, pelo que o @nome que acabou de escrever é um que um agente consegue resolver.
- As correspondências de nome ficam acima das de título, e as sessões nomeadas acima das que não o são.
- ↑ e ↓ movem, Tab ou ⏎ completa, e Esc fecha.
Escrever «@nome» numa mensagem não envia nada por si. Diz ao seu agente a que par se refere, e o agente usa depois request para lhe pedir.
As ferramentas bromure-delegation
Cada sessão de agente recebe o servidor MCP bromure-delegation (porta vsock 5835). O anfitrião identifica a sessão que chama pela janela de terminal em que corre o intermediário das ferramentas, nunca por nada que o agente afirme.
| Ferramenta | Quem a usa | O que faz |
|---|---|---|
delegate | quem delega | Inicia um delegado: título, resumo, contrato, âmbito, agente (o seu próprio, por omissão), worktree verdadeiro/falso, um eventual outro workspace, e ficheiros a enviar com ele. |
request | quem pede | Pede a um par por @nick (ou id de sessão), com ficheiros opcionais. Espera pela resposta: 50 segundos por omissão, até 600. |
list_peers | qualquer um | Lista as sessões que consegue alcançar, com apelidos, títulos, máquinas, agentes e estados, e as máquinas para as quais pode delegar. |
list_delegations | qualquer um | Lista as suas delegações e pedidos, de qualquer dos lados, com o estado e a última palavra. |
read_inbox | qualquer um | Recolhe as mensagens que o esperam, as mais antigas primeiro. |
wait | qualquer um | Bloqueia até chegar uma mensagem: 50 segundos por omissão, até 600. |
ask | delegado / par | Faz uma pergunta bloqueante a quem lhe pediu, e espera pela resposta. |
report | delegado | Envia uma nota de progresso. Nunca interrompe quem delegou. |
deliver | delegado / par | Entrega o trabalho (o que mudou, como verificá-lo, o que fica em aberto), ou responde a um pedido. Pode devolver ficheiros. |
answer | quem delega | Responde à pergunta de um delegado ou de um par. |
steer | quem delega | Envia um seguimento ou uma correção de rumo, com ficheiros opcionais. |
close_delegation | quem delega | Fecha uma delegação entregue como aceita ou rejeitada, com uma nota. |
cancel | quem delega | Pára um delegado antes de ele entregar, ou retira um pedido. |
worktree_create, worktree_status, worktree_merge | qualquer um | Inicia sessões de ramo a partir da sua própria pasta, acompanha-as, e pede-lhe para integrar uma. Ver Ramos e revisão. |
Confiança e perguntas
Aos agentes é dito que você os configurou para trabalharem em conjunto. Um pedido, resumo, resposta ou correção de outro agente deve ser tratado como se tivesse sido você a pedi-lo, sem voltar a consultá-lo. A filtragem de injeção de prompt do anfitrião aplica-se de qualquer forma.
As perguntas voltam pelo caminho por onde veio o trabalho, para que fique numa só janela:
- Um delegado ou par que precisa de uma decisão usa
askpara alcançar quem lhe pediu. Nunca pergunta ao seu próprio utilizador. - O agente que pediu responde a partir da sua própria conversa, se puder.
- Se não puder, põe-lhe a pergunta, palavra por palavra e dizendo quem pergunta, e devolve depois a sua resposta com
answer.
Limites
| Limite | Valor |
|---|---|
| Encadeamento de delegações (um delegado que delega mais) | 3 níveis |
| Delegações e pedidos abertos por sessão | 8 |
Tempo limite de wait, ask e request | 50 s por omissão, 600 s no máximo |
| Ficheiros por mensagem | 20 (envie uma pasta ou um arquivo para mais; uma pasta viaja como tarball) |
| Tamanho total dos ficheiros de uma mensagem | 4 GB (verificado primeiro face ao espaço livre em disco do destinatário) |
Um pedido a uma sessão arquivada é recusado até a trazer de volta.
Ficheiros e a caixa de entrada
As máquinas não partilham qualquer sistema de ficheiros, pelo que os ficheiros nomeados numa mensagem são copiados pelo anfitrião. Aterram em ~/.bromure/inbox/<id>/ da máquina destinatária, antes de ela ler a mensagem que os menciona.
Os caminhos são resolvidos em relação à pasta do remetente, e ~ é a home do remetente. Entre duas sessões na mesma máquina, a cópia é local.
Filtragem e auditoria
Cada resumo, pedido, pergunta, resposta, relatório, entrega e correção é analisado pelo detetor de injeção de prompt no dispositivo antes de ser retransmitido.
- Uma mensagem que faça disparar o detetor é retida. Fica no registo, marcada como bloqueada. O remetente é informado do motivo, é-lhe mostrado o fragmento problemático, e é-lhe pedido que reformule em termos simples.
- Cada mensagem, retransmitida ou retida, é uma linha na Linha do tempo de segurança sob o motor Delegação de agentes, com a decisão retransmitida ou retida — injeção de prompt. Em instalações inscritas, as linhas vão também para o registo de auditoria da organização. Ver Empresa.
O painel Delegações
Quando uma sessão delegou ou pediu algo, aparece um painel Delegações acima do seu compositor. O cabeçalho conta as delegações e quaisquer perguntas e entregas à espera («1 pergunta», «2 entregas»). A seta recolhe-o.
Cada linha mostra:
- o avatar e o título da outra sessão (clique para Abrir a sessão do delegado, ou Abrir a sessão do par num pedido)
- uma etiqueta pedido nos pedidos
- o estado: Iniciando, A trabalhar, Fez uma pergunta, Entregue, Aceita, Rejeitada, Cancelada ou Falhou
- o nome da máquina quando a outra sessão corre noutra máquina
- o seu ramo
- a última palavra trocada, por exemplo «O delegado entregou: …»
Quando um delegado ou par fez uma pergunta, a sua linha mostra a pergunta com um campo Resposta para o agente… e Enviar. «O seu agente também lhe pode responder — isto envia a sua em vez da dele.» Responder aí poupa a ida e volta pelo seu agente.
Na outra ponta, o chat do próprio delegado ou par mostra uma faixa a dizer a quem responde. A faixa diz «Delegado por sessão» ou «Pedido de sessão», com o estado e uma ligação Mostrar quem delegou (ou Mostrar quem pediu).
Um delegado que termina sem entregar faz falhar a sua delegação, e quem delegou é informado. As delegações terminadas (aceitas, rejeitadas, canceladas ou falhadas) arquivam a sessão do delegado. Ela continua legível na dobra Arquivadas.
Entre máquinas, e entre Macs
- Entre máquinas deste Mac: por omissão, os agentes de qualquer máquina podem alcançar todas as outras máquinas, tanto para delegar para lá como para pedir às suas sessões. Para restringir uma máquina, abra as suas definições, painel Geral, secção Alcance, e desligue Todos os espaços de trabalho: aparece um interruptor por cada outra máquina, e os agentes dela só podem alcançar as que ligar (com nenhuma ligada, só as sessões da própria máquina). A regra é de sentido único: se os agentes da outra máquina podem responder define-se nessa máquina. Uma máquina restringida deixa também de oferecer as sessões dos Macs remotos que espelha (ver o ponto seguinte).
- Entre Macs: quando este Mac espelha um Bromure remoto numa janela de cliente pesado, os agentes de uma máquina que ficou em Todos os espaços de trabalho também podem enviar pedidos às sessões desse servidor, por @apelido. O pedido viaja pelo túnel do espelho, ficheiros incluídos. No painel Delegações, a linha nomeia o anfitrião a que foi. Isto funciona do Mac para o servidor que ele espelha, não no sentido inverso.
- Os espelhos mostram as delegações apenas para leitura. Uma janela de cliente pesado mostra o painel Delegações das sessões do servidor, mas não pode responder a perguntas a partir de lá.