MÓDULO 4.1

🎛️ Controle da conversa

Parar, priorizar e dar voz. Os interruptores que cancelam o que está em voo, os quatro modos de fila com os limites reais, a persona em três camadas, o custo fixo do prompt, os servidores MCP de um agente só e onde conferir a sintaxe quando a memória falha.

6
Tópicos
75
Minutos
Prático
Nível
Fase 9
Origem
Progresso do módulo 4.1 0%
0 de 0
1

🛑 Interruptores: /parar e /retomar

/parar [tudo|agentes|<agente>] [motivo] é o freio de mão. Ele grava um interruptor na tabela prefs (um armazém de chave e valor por chat, onde '*' vale como global), então ele sobrevive a restart do serviço. /parar sozinho lista o que está ligado, com o motivo que você escreveu. /retomar sem alvo desliga todos.

/parar grava em prefs, cancela em voo tudo: nenhuma resposta, nenhum agentepassam: comandos de barra e manutenção na lane ollama agentes: nenhum claude -p, lead ou especialistapassa: resposta direta no Ollama agente:<id>: só aquele, por exemplo /parar ops quebroupassa: todo o resto

Legenda: quanto mais alto o alvo, mais coisa para. Nenhum deles derruba o serviço, e nenhum deles apaga job: a fila continua sendo o histórico.

✓ O que FAZER

  • Escrever o motivo: /parar agentes revisando o prompt. Ele aparece quando você mandar /parar sozinho.
  • Usar /parar <agente> quando o problema é de um especialista só, por exemplo ops.
  • Contar até 30 s antes de concluir que não parou: o processo em execução morre na batida seguinte do worker.
  • Lembrar que consolidação, ingestão, indexação e backup seguem rodando na lane ollama.

✗ O que NÃO fazer

  • Reiniciar o serviço para "parar": o interruptor persiste e o restart não cancela nada a mais.
  • Esquecer o /retomar: o bot vai continuar mudo amanhã, e o motivo escrito é a única pista.
  • Achar que job enfileirado antes do /parar vai rodar: ele falha ao ser pego, com o motivo, sem gastar token.
  • Contar com /parar para bloquear comando de barra: comando sempre responde.

Dica prática

Ligar um interruptor cancela o que está em voo nas lanes chat, agente e io que bate com o alvo. É cancelamento sem corrida: a fila marca o job como cancelado e o worker desiste. O que não é instantâneo é o subprocesso já rodando, porque quem mata é o worker na próxima batida.

2

🚦 Modos de fila: /fila

Uma mensagem sua chega enquanto outra ainda está sendo respondida. O que fazer com ela é escolha sua, por chat, com /fila collect|followup|steer|interrupt. O padrão é collect. A ideia veio do openclaw, e dois dos quatro modos têm um limite que vale conhecer antes de confiar neles.

ModoComportamentoDiferença para o openclaw
collectjunta mensagens seguidas por 2 s e responde uma vezigual
followupsem janela; se ocupado, entra na fila e responde depoisigual
steerse ocupado, substitui o que estava na fila deste chat pela nova, com prioridade altao openclaw injeta no agente em execução; com claude -p em subprocesso não dá, então a mensagem só entra quando o agente atual terminar
interruptcancela fila e agentes deste chat (por flow_ref = canal:chat) e responde à nova agoraresposta direta já em voo no Ollama não é abortável: ela termina e é descartada, por um contador de geração por chat

Legenda: a terceira coluna é a parte honesta. steer muda a fila, não o agente que já está rodando; interrupt joga fora a resposta pronta em vez de interromper a geração.

Uma mensagem em modo interrupt, segundo a segundo

  1. t0 você pergunta algo; o roteador manda para agente e o job entra na lane agente.
  2. t0 + 40 s você percebe que pediu errado e manda a mensagem certa.
  3. imediato o contador de geração do chat avança e o cancelamento por flow_ref acontece antes de qualquer checagem.
  4. até 30 s o claude -p cancelado morre na batida seguinte do worker.
  5. em paralelo a nova mensagem já está sendo respondida; se a antiga produzir texto, ele é descartado.

Dica prática

Essa correção do interrupt é a versão 3.2.2. Antes dela, o teste de "tem algo em curso" só olhava a resposta direta, e no caso comum (agente rodando na fila, resposta direta já encerrada) o claude -p seguia vivo. Foi achado em revisão, não em produção. Se você leu documentação antiga, confira a versão com /versao.

Copiar e rodar: escolher o modo do chat

Objetivo: ver o modo atual, trocar para interrupt e voltar ao padrão, no chat do Telegram com o bot.

/fila
/fila interrupt
/ajuda fila
/fila collect

Como verificar: /fila sem argumento responde qual modo está valendo neste chat. Depois de trocar, mande uma pergunta longa e, enquanto ela roda, mande outra: em interrupt a segunda é respondida e a primeira some; em collect as duas viram uma resposta só. O modo fica gravado em prefs, então continua valendo depois de um restart.

3

🗣️ Persona em três camadas

A voz do bot não vem de um arquivo só. São três camadas, sempre somadas, sempre nesta ordem dentro do prompt. Vale tanto para a resposta direta no Ollama quanto para os agentes. A ideia da alma fixa por agente veio do Hermes.

1. IDENTIDADE.md (raiz)a base do bot, nunca sai do prompt 2. agents/<id>/SOUL.mdpersona fixa daquele agente, opcional, pede restart 3. personalidades/<nome>.mdescolhida por chat com /personality, vale já voz final direto e agente, mesma soma

Legenda: a camada 1 não é negociável, por isso uma personalidade não consegue apagar um limite da identidade. A camada 2 mora com o agente; a 3 é sua, naquele chat.

Copiar e rodar: trocar a voz deste chat

Objetivo: listar as personalidades disponíveis, ligar uma e voltar ao padrão. Duas já vêm no repositório: curto e professor.

/personality
/personality professor
/personality off

Como verificar: sem argumento, o comando lista as disponíveis. Depois de trocar, a próxima resposta já sai na voz nova. Para criar a sua, crie um arquivo personalidades/<nome-que-voce-escolhe>.md e chame por esse nome.

Dica prática

Trocar a personalidade apaga as sessões retomadas daquele chat. Não é efeito colateral: uma sessão --resume de até 6 h faria o agente continuar com a voz antiga. Já o SOUL.md de um agente só entra depois de reiniciar o serviço, porque o registry de agentes lê a pasta uma vez.

4

🧮 /context: o custo fixo do prompt

/context [detail] [texto] mede, sem chamar modelo de chat, quanto do prompt é cada camada: identidade, persona, USER.md, memória e insights, histórico, skills, regras e a sua mensagem. Mostra os números para a resposta direta e para o agente, que montam prompts diferentes. Sem texto, ele usa a sua última mensagem do chat como consulta.

/context (recriação ilustrativa, não é captura real)
Camadas do prompt identidade IDENTIDADE.md persona personalidades + SOUL.md USER.md perfil do usuário memória itens recuperados + insights histórico turnos recentes do chat skills só nome e descrição regras limites operacionais mensagem sua consulta detail lista item a item o que entrou em memória e histórico

Legenda: a forma da saída é esta, com a contagem de tokens de cada linha, para os dois caminhos. Os números dependem do seu chat, por isso não estão reproduzidos aqui.

✓ O que FAZER

  • Rodar /context quando as respostas ficarem caras sem motivo aparente.
  • Usar /context detail para ver item a item o que a memória trouxe.
  • Passar um texto de consulta quando quiser simular outro assunto: /context detail <assunto-que-voce-quer-testar>.
  • Comparar as duas colunas: overhead fixo alto pesa mais na rota de agente.

✗ O que NÃO fazer

  • Achar que /context gasta token de chat: ele só conta, não chama modelo de conversa.
  • Temer que consultar infle a memória: o retrieval roda em modo somente leitura e não mexe na saliência.
  • Cortar memória boa antes de medir; muitas vezes o peso está no histórico.
  • Confundir com /usage, que é dinheiro gasto, não tamanho de prompt.
5

🔌 mcp_config por agente

Novo aqui? MCP é o protocolo pelo qual um assistente conversa com ferramentas externas: um servidor MCP expõe ações (ler arquivo, baixar vídeo, consultar API) e o cliente chama. Por padrão, um agente do v3 herda os servidores MCP configurados no seu ~/.claude. A chave mcp_config troca isso por uma lista fechada.

Copiar e rodar: dar a um agente só os servidores dele

Objetivo: criar o JSON na pasta do agente e apontar o agent.yaml para ele. Os dois exemplos saem de agents/_template/mcp.json.example.

# agents/<id-do-agente>/mcp.json
{
  "mcpServers": {
    "exemplo-http": { "type": "http", "url": "http://127.0.0.1:8010/mcp" },
    "exemplo-stdio": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/<seu-usuario>/projetos"] }
  }
}

# agents/<id-do-agente>/agent.yaml
mcp_config: mcp.json

Como verificar: reinicie o serviço com bash scripts/instalar-servico.sh para o registry reler a pasta. A partir daí o runner sobe o claude -p com --mcp-config <arquivo> --strict-mcp-config, e o agente enxerga apenas esses servidores. O caminho é relativo à pasta do agente.

✓ Quando usar

  • Especialista de pesquisa que não deveria ter ferramenta de escrita.
  • Agente que precisa de um servidor local específico e de mais nada.
  • Quando você quer que o comportamento do agente não mude junto com a sua máquina.

✗ Onde erra

  • Caminho absoluto do outro computador: use o nome do arquivo na própria pasta.
  • Esperar que valha sem restart: o registry lê a pasta do agente no boot.
  • Deixar a chave e esquecer um servidor de que o agente precisa: com strict, o que não está listado não existe.

Sem a chave mcp_config, nada muda: o agente herda os MCP do usuário, como sempre foi. Um cliente MCP nativo no caminho da resposta direta no Ollama é outra coisa, e está anotado como fase 10 em docs/INCORPORAR-V3.md, sem ordem de início.

6

📘 /ajuda <comando> e o CHANGELOG

Os cinco comandos deste módulo têm detalhe embutido. /ajuda lista tudo por grupo, incluindo o bloco "Controle da conversa"; /ajuda <comando> abre o texto longo de parar, retomar, fila, personality e context. Para os demais comandos, a resposta diz que não há detalhe e lista os que têm.

De onde veio este módulo

  1. 3.2.1, fase 9 "Jarvis obedece" seis itens de docs/INCORPORAR-V3.md, um commit cada, tudo em prefs pela migration 8: interruptores, modos de fila, SOUL e personality, /context, doctor --deep e mcp_config. Testes: 187 passando.
  2. 3.2.2 correção do interrupt que não pegava agente em voo, achada em revisão.
  3. 3.2.3 a documentação: seção 9b do README e o /ajuda com detalhe por comando. É a fonte deste módulo.

Dica prática

Quando a resposta do bot contradiz o que você lembra da documentação, confie no /versao e no CHANGELOG, nessa ordem. Os comandos de controle são novos, e a seção 9b do README é o texto que acompanha o código que está no ar.

Resumo do módulo

Interruptores persistem - /parar tudo|agentes|<agente> [motivo] grava em prefs; comandos e manutenção na lane ollama seguem
Nada morre na hora - processo em execução cai na batida seguinte do worker, até 30 s; job enfileirado antes falha sem gastar token
Quatro modos de fila - collect é o padrão; steer não injeta no agente em voo; interrupt descarta a resposta direta por geração
Persona em três camadas - IDENTIDADE.md, SOUL.md do agente (pede restart), personalidades/*.md por chat; trocar apaga a sessão retomada
/context mede, não gasta - tokens por camada, direto e agente; detail lista os itens; retrieval só leitura
mcp_config fecha a caixa - --mcp-config <arquivo> --strict-mcp-config; sem a chave, herda os MCP do usuário

Próximo módulo:

4.2 - Agentes, skills, custo e o que vem: a pasta que vira agente, o arquivo que vira skill, os tiers de custo com trava, o gestor do Ollama e o roadmap.