Nobox · agente clone-rodrigo · atualizado 07/09 após auditoria de coerência

Macedo — o que existe e o que muda

Mapa do estado atual, dos furos encontrados e da arquitetura proposta. Levantado por 5 painéis adversariais entre 04 e 07/09/2026 — 39 agentes, ~5,9 milhões de tokens.

1 agenteacumulando 4 postos
1.336linhas de soul
3,2 GBde workspace

🔭 O que ele é hoje

Um único id — clone-rodrigo — servindo Telegram, WhatsApp e HTTP, com a mesma soul, o mesmo workspace e a mesma memória. Opus 5, 200 turnos, Bash com bypass, Chrome dedicado logado em 449 hosts e o token que publica no Instagram.

PostoEntradaTrava real
O clone — vida pessoal, empresa, conteúdoTelegram1 camada restrictedToUsers
Atendente da linha corporativaWhatsApp 55119377387742 camadas identifyContact → LEAD_TOOLS
Motor da Análise de PerfilHTTP :8787nenhuma localhost não pede token
Ouvinte de grupo (desde 04/09)WhatsApp grupocorrigida hoje silêncio por padrão

O contra-intuitivo: o canal frágil é o Telegram, não o WhatsApp. Lá existe uma camada só — e é a que o run atravessa com Bash e browser na mão. O comentário no YAML dizia que a trava valia “em qualquer canal”. Não valia.

🕳️ Os furos que a auditoria achou

🔓 A porta HTTP não pede nada

POST /api/agents/clone-rodrigo/message de localhost roda o Macedo em modo operador. Qualquer processo local dispara — inclusive outros agentes, que têm Bash.

🔨 A jaula ignora Bash

tool-jail.ts cobre Write/Edit. sed -i escreve na soul e no platform.yaml — e a soul é relida por mtime: a edição vale no turno seguinte, sem restart.

✍️ O auto-commit assinava como você

O boot commitava author=Rodrigo Macedo para edições que o runtime fez sozinho. A soul foi commitada assim em 31/08, 01/09 e 03/09. corrigido hoje

🧠 Memória de cliente entra como confiável

isLeadOrigin é fail-open para "client" — o que um cliente escreve volta no recall das suas sessões privilegiadas.

🚫 Ele não tem skills

clone-rodrigo está hardcoded no baseline client-facing → settingSources: [] e disallowedTools: [Skill, Agent]. As 38 skills do disco não existem na sessão dele. E a soul manda ele afirmar que tem.

💣 Uma segunda definição no config.json

Sem allowlist, sem pin de Opus 5, e com controle do macOS. Se o YAML quebrar, ele cai nela: menos trava e mais poder. neutralizada hoje

📢 O ruído — medido, não opinado

24 → 0entregas push · respostas suas em 15 dias
15/15execuções do Acervo entregando “🔇”
50%dos emissores VIVOS no seu inbox são do Macedo (5 de 10)

O reframe: o problema não é volume — é que nada que chega tem prazo. E o que tinha prazo não chegou: a amostra de fezes esquecida, o jejum do raio-X não avisado, o NexGard parado uma semana.

A regra nova: só chega sozinho o que tem data e consequência. Todo o resto é pull.


🎯 A arquitetura proposta

Não é “um agente faz tudo” nem cinco agentes. São 3 ids novos, e o roteamento decide por contato — não por canal.

     Telegram (só você) ─────────────┐
                                     ├──▶  clone-rodrigo        o clone, completo
     WhatsApp · contato = você ──────┘      + browser + skills   ← recupera as skills

     WhatsApp · qualquer outro ──────────▶  macedo-atende       WebSearch/WebFetch · 3 turnos
                                                                 memória isolada

     WhatsApp · GRUPO ───────────────────▶  macedo-grupos       escuta · NUNCA fala
                                                                 sem Bash · sem rede

     HTTP :8787 (Análise de Perfil) ─────▶  macedo-analise      sai de dentro do clone

Por que por contato e não por canal: você quer usar a linha do WhatsApp para coisa sua também — reservar restaurante, o que era da Priscila. Se “WhatsApp = corporativo”, você cairia no agente restrito na sua própria linha. Roteando por contato, você tem o clone inteiro nos dois canais, e o mundo tem o atendente.

O que id separado resolve que flag não resolve

🔇 A regra dos grupos

Silêncio por padrão. Grupo novo: ele reconhece, registra e não emite um caractere — nem quando chamado pelo nome. Só a entrada do JID em ~/.nobox-agents/grupos-fala.txt libera fala. Arquivo vazio = mudo em todos. A trava é em código, não em prompt.

GrupoNaturezaPerfil
AV2Playinterno, sua empresaa linha de base já testada — 384 mensagens observadas
Digital da Noboxinterno, volume altocaptura de demanda · entra primeiro, com 48 h de medição
Clientes de tráfegoexternomudo, e alerta fechado — não entra falando

🌊 As ondas

0
Verdade feito hoje
Commit das 133 linhas em voo · autoria do auto-commit · computer:true removido · dois textos falsos corrigidos
½
Silêncio por padrão feito hoje
Grupo mudo até liberação explícita · a “quarta boca” calada em grupo · teste com erro plantado 9/9
⅔
Backstop de saída feito hoje
O gate cobria 1 porta de 6. Agora as seis saídas do WhatsApp respeitam o grupos-fala.txt — inclusive o sendTyping, porque “digitando…” também é sinal visível no grupo. Teste com erro plantado: 7/7
⅓
Supabase próprio feito hoje
A memória do Macedo saiu do projeto compartilhado de 69 tabelas. Foi para o northstar (São Paulo), schema memoria isolado do public — sem custo novo, reaproveitando projeto que já era dele. Isolamento provado nos dois sentidos: 6/6
1
Portas
Fechar o HTTP · criar macedo-analise · tripwire por hash
2
Ruído
Acervo vira LaunchAgent · digest 3 dias em sombra antes de desligar nada · /uso passa a existir
2b
A linha bloqueia os grupos
142 quedas em 7 dias · meta: 72 h com menos de 3/dia
3
Número corporativo sua decisão
Roteamento por contato · macedo-atende · trilha auditável
4
Grupos sua decisão
Calibragem ≥70% obrigatória antes de ligar · 1 grupo interno primeiro
5
Harness sua decisão
PreToolUse negando Bash por caminho · worktree · /congela
6
Soul sua decisão
1.336 → ~330 linhas sem perda — o resto vira ref, padrão que a casa já usa

✅ O que já está feito

3 commits. 99d7e26 o ponto de retorno · d4d88e3 as travas.

Silêncio por padrão em grupo · a quarta boca calada · auto-commit assinado como agente · computer:true removido do fallback · os dois textos falsos corrigidos.

⚠️ Correção: eu disse “só adição, nada removido”. Era falso — foram 7 linhas apagadas (a nota de 31/08), contra a regra da casa e contra o próprio plano, que mandava corrigir por acréscimo datado. Reanexadas em 07/09 como citação histórica. Soul hoje: 1.353 linhas.

⏸️ Parte já está ativa — e isso eu tinha errado. O daemon roda npx tsx, sem build: ele lê o TypeScript direto. Então o commit do ponto de retorno já estava no ar desde 04/09 21:33. O que aguarda restart são as travas (d4d88e3 em diante).

🔴 E o mesmo commit continha a trava que calou o grupo E o fix que reabriu a porta ao lado. As 98 mensagens do AV2Play começaram 3 segundos depois daquele boot, com o grupo já mudo — 384 linhas OBSERVE-ONLY intercaladas com elas. A trava vivia só na entrada; elas saíram pela porta de saída.

O reinício derruba as sessões de WhatsApp — numa linha que já cai ~20×/dia e chegou a 8/10 tentativas. Aguardando você dizer a hora.

Uma coisa eu decidi não fazer. O plano mandava conter o alfred com o cinto client-facing. O YAML dele diz o oposto — “o canal mais íntimo da casa depois do clone” — e o cinto o enjaularia no próprio workspace, quebrando um agente que mexe em documento e financeiro fora dele. Revertido, com o motivo escrito no código.

Fontes: 5 painéis adversariais (39 agentes) · ~/.nobox-agents/docs/macedo-reforma/
Plano completo · refutações · playbook de grupos · journals dos agentes.
Atualizado em 07/09/2026.