MoA é distinto da Orquestração Multi-Agent: lá o eixo é agents especialistas (planner, reviewer…) despachados em paralelo dentro de uma tarefa. Aqui o eixo é a diversidade de modelos/provedores respondendo à mesma pergunta. Acionado pelo comando
/moa.Como funciona
- Briefing compartilhado — o mesmo system prompt estruturado de um turno de chat (contextos anexados via
/context attach, memória do workspace, skills, retrieval por turno) é montado uma vez por rodada e entregue a todos os participantes. - Proposta paralela — cada proponente recebe o mesmo prompt e o mesmo briefing, concorrentemente, podendo puxar knowledge, CCR e memória (read-only) antes de responder.
- Tolerância a falhas — erros de um proponente são tolerados; o MoA segue desde que pelo menos um tenha respondido. Só falha se o agregador em si falhar.
- Agregação — o agregador recebe um prompt de síntese com todas as propostas, mais o mesmo briefing e as mesmas tools, e produz uma resposta correta e coesa (sem mencionar que houve agregação).
Briefing e tools do painel
Cada participante do painel — proponentes e agregador — é tão capaz quanto um turno normal de conversa: recebe o briefing completo da sessão e três exceções de tools estritamente read-only, executadas em um loop limitado (até 4 rodadas de tool por participante), tanto via tool-use nativo quanto via XML para provedores sem suporte nativo:| Tool | O que faz | Quando é oferecida |
|---|---|---|
knowledge | Busca nas bases de conhecimento anexadas à sessão (search/get/toc) | Mesmo gate da exceção do chat: habilitada + base anexada |
recall | Expande markers <<ccr:KEY>> da compressão de contexto de volta ao original | Só quando a camada de compressão está ativa e o histórico realmente carrega um marker |
memory | Recupera a memória de longo prazo do usuário (perfil, fatos duráveis, preferências, notas) | CHATCLI_MEMORY_MODE diferente de off |
Ferramentas de especialista ativas neste painel: knowledge, recall, memory.
Read-only por construção. O acesso à memória é limitado ao subcomando
recall pelo próprio executor — as formas mutantes (remember, profile, forget) são inalcançáveis a partir de um turno do painel, mesmo que um modelo tente contrabandeá-las nos argumentos. ask_user e graphview ficam de fora de propósito: os participantes rodam em paralelo e desassistidos. Nenhum tool de execução, arquivo ou busca — a mesma regra do chat.Configuração
| Variável | Descrição |
|---|---|
CHATCLI_MOA_MODELS | Opcional. Proponentes em CSV provider:model. Sem ela, /moa e @moa usam os provedores configurados (ordenados, cap 4). |
CHATCLI_MOA_AGGREGATOR | Opcional. Modelo agregador (provider:model). Default: o provider/modelo ativo da sessão. |
Autenticação: funciona com OAuth, não só API key — quando um proponente/agregador coincide com o provider ativo da sessão, o MoA reusa o client da sessão, honrando o token OAuth (preferido sobre API key quando logado) ou tokens encaminhados (modo server/gateway). Nomes de provider são resolvidos de forma case-insensitive (
openai → OPENAI). O comando /moa e o tool @moa compartilham a mesma resolução e os mesmos defaults.Uso
Tool @moa (para o agente)
Além do comando /moa, há o tool @moa, que o agente pode invocar dentro de um fluxo agent/coder para consultar vários modelos e sintetizar a melhor resposta:
ask {prompt, models?, aggregator?}—modelsopcional (ex.["openai","anthropic:claude-opus-4-8"]); default é um conjunto dos provedores configurados.aggregatordefault é o modelo da sessão.list— provedores disponíveis para participar.
@moa recebem o histórico da conversa do fluxo agent e as mesmas tools read-only do painel (knowledge, recall, memory) — o briefing de chat não é remontado, pois o contexto do agente já está no histórico.
Degrada com elegância: um único proponente bem-sucedido é retornado direto; se o agregador estiver indisponível, retorna o melhor candidato em vez de falhar.
Veja também
- Orquestração Multi-Agent — agents especialistas em paralelo (eixo diferente)
- Variáveis de Ambiente → Mixture-of-Agents