Vários agentes se comunicam por meio de caixas de correio de arquivos
De subagente a companheiro de equipe: único → persistente; sem nome → nomeado; sem comunicação → caixa de correio de arquivo.
Qual é a diferença entre Subagente e companheiro de equipe?
O subagente do S04 é simples e rudimentar: spawn → run → return to summary → die. Uma comunicação única, sem nome, sem comunicação bidirecional entre pai e filho.
O companheiro de equipe de s09 é um agente independente que tem um nome, pode ser despertado repetidamente e pode enviar e receber mensagens:
subagent (s04): spawn -> executar -> retornar -> destruído companheiro de equipe (s09): spawn -> trabalho -> ocioso -> trabalho -> ... -> desligamentoOs dois mecanismos têm finalidades diferentes:
- O Subagent é adequado para "fazer uma exploração específica" (como revisar um PR).
- Teammate é adequado para "assumir continuamente uma função" (como um revisor de longo prazo que é acordado toda vez que há um novo commit).
A caixa de correio é um arquivo JSONL
Como os membros da equipe se comunicam entre si? s09 usa o mecanismo mais primitivo: arquivo JSONL somente anexado.
.team/ config.json # Lista da equipe caixa de entrada/ alice.jsonl # Cartas para alice estão anexadas aqui bob.jsonl lead.jsonl
enviar é open("alice.jsonl", "a").write(msg); read é ler o arquivo inteiro, analisar JSONL e então truncate para limpar (drenar a semântica).
Por que usar arquivos em vez de filas de memória? Os documentos são naturalmente duráveis. O agente reinicia, os processos travam e até a máquina reinicia - os e-mails ainda estão lá. Além disso, é legível e compatível com grep, e a experiência de depuração é muito boa.
Veja o processo completo de uma mensagem do lead para Alice
O widget a seguir permite enviar uma mensagem para Alice e ver o que está acontecendo no disco em cada etapa.
5 tipos de mensagens
s09 define 5 tipos de mensagens (VALID_MSG_TYPES), mas apenas os dois primeiros são implementados e os três últimos são adicionados na classe de protocolo s10:
mensagem— mensagem de texto comum.transmissão— enviado para todos os colegas de equipe, exceto você.shutdown_request/shutdown_response— Solicitação/resposta para desligamento normal (s10).plan_approval_response— Aprovação do plano (s10).
Por que é declarado, mas não implementado? Como s09 deseja abrir a "extensão de protocolo" - o tipo de mensagem é uma enumeração. Para adicionar um novo, você só precisa adicionar uma entrada no dicionário e processá-la na rota _exec.