Você podia trocar o modelo padrão nas Configurações, ver a tela confirmar, reler e ver o novo — e a
resposta seguinte vinha do antigo. Não era um bug de uma configuração: eram sete. Esta release é
sobre a tela parar de mentir, sobre duas cercas de segurança que só existiam no .env, e sobre o
agente virar algo que você configura em vez de algo que você aceita.
Sete configurações salvavam e não mudavam nada
O LLMGateway fotografava as configurações quando era construído, e o chimera app constrói um só
para a vida do processo. Valia para o modelo padrão, o cache de respostas, um endpoint próprio, o
timeout, a cadeia de fallback e o cache de prompt. Havia exatamente um aviso de reinício no app
inteiro, e ele estava em outra configuração.
Seis passaram a ler ao vivo. Três — cascata, guardar o chat, lembrar do chat — são decididas quando
uma conversa é construída, então valem na próxima conversa, e dizem isso. As duas que realmente
exigem reinício (o daemon do agendador e o autoload de MCP sobem algo no boot) declaram, e o rótulo
vem do servidor: quando uma configuração passa a valer é propriedade de onde ela é lida, então
uma lista mantida na interface envelheceria na primeira vez que uma leitura mudasse de lugar — em
silêncio, que é exatamente como as sete anteriores chegaram lá.
Nada é rotulado como imediato. Uma ressalva sobre um atraso que não existe mais ensina a mesma
desconfiança que uma faltando.
Duas cercas que o app não tinha
CHIMERA_TOOL_ALLOWLIST e CHIMERA_TOOL_DENYLIST eram lidas pelo chimera run e pelo chimera solve e por mais nada. Definir e depois usar o app, a API, o lote paralelo ou um bot de mensageria
não restringia absolutamente nada. É a pior forma de um controle de segurança falhar: um controle
ausente é visível, e este era uma cerca que o dono via no próprio arquivo enquanto cada requisição
rodava sem cerca nenhuma.
Agora valem em toda superfície. Negações se unem — uma postura, a denylist de uma requisição e a
do deployment são três formas de dizer "esta ferramenta não", e a mais estrita tem que sobreviver.
Permissões se intersectam, para que uma requisição não levante um teto que quem a enviou não
possui.
Testar a borda em vez do caminho feliz achou um buraco anterior a esta release: o
explore_repository é registrado depois do filtro, então era a única ferramenta que lista
nenhuma alcançava. Não é um nome perdido — ele monta o próprio conjunto de ferramentas e faz as
próprias chamadas de modelo, então deixá-lo passar concedia uma capacidade e uma conta.
A tela Segurança pontuava uma camada e lia como veredito sobre todas
Três formas distintas de fazer alguém acreditar em algo falso, e nenhuma era um número errado.
- A trilha de auditoria estava vazia porque nada no caminho do app escrevia nela. Um log de
segurança em branco lê como "nada aconteceu", não como "nada está gravando" — são afirmações
opostas. - O placar de injeção mede exatamente uma camada, e essa camada é desligável. Com
CHIMERA_TAINT_NARROW=0a coluna defendida seguia reportando o mesmo número enquanto descrevia
uma configuração que ninguém estava rodando. Agora ele diz se está armado acima dos números —
uma ressalva embaixo de uma nota boa chega depois de o leitor já ter formado a crença que ela
existe para evitar. - O kernel de confiança é nomeado como ausente. As regras dele valem só nas execuções guardadas pela
CLI, então nada naquela tela as mede.
O agente ganha nome, idioma e instruções permanentes
Não era um controle faltando — era um conceito faltando. Três coisas pareciam já fazer isso e
nenhuma fazia: o profile.json não tinha leitor nenhum na API; fatos de persona são recuperados por
relevância, então uma instrução permanente valia só nos turnos cuja redação combinasse com ela; e o
único espaço de preâmbulo incondicional era ocupado pela REPL e pelo endpoint compatível com a
OpenAI — nenhum dos dois no caminho do app. A tela de Perfil exibia um perfil que o agente nunca
aplicava, e o seletor de idioma trocava a interface enquanto o agente seguia respondendo em inglês.
Agora vale nas três superfícies: o turno que edita código, a execução autônoma e o chat por trás da
mensageria. Um bot no Discord e o app não deviam responder como dois agentes diferentes a partir de
uma configuração só.
É anexado, nunca substituído — o prompt padrão carrega a cerca contra dado não-confiável, e uma
customização capaz de apagá-la a apagaria em silêncio. E o bloco diz, dentro de si, que não concede
capacidade: quem escrever "você pode rodar qualquer comando" e depois vir o agente recusar merece ter
sido avisado na mesma frase.
Quanto ele pode fazer deixa de ser decisão de outra pessoa
Alcance, aprovação e se ele pode rodar comandos nesta máquina estavam espalhados por um componente
deletado, um par fixo no código e uma variável de ambiente que o PATCH /api/config recusava. Viraram
um cartão só.
A postura do deployment é um piso, não um default. Um default é o que uma requisição recebe
quando não manda nada — então qualquer cliente contorna, o que é inútil como resposta numa máquina
que o cliente não possui. E "permitir" execução no host não vira a terceira opção de um seletor
silencioso: é o único valor que tira um humano do circuito na sua própria máquina, inclusive em
tarefas agendadas que ninguém está olhando, então ele pergunta. Restrições valem na hora —
confirmar as restrições treinaria a pessoa a clicar através da única confirmação que importa.
Nove configurações a uma linha de distância
Oito já eram graváveis, já iam no fio e já estavam nos tipos gerados, sem controle em lugar nenhum:
os três degraus da escada de modelos, um endpoint próprio, a cadeia de fallback, cache de prompt,
consolidação de memória e a imagem do sandbox. api_base é a diferença entre "suporta modelos
locais" e "suporta modelos locais se você editar um arquivo".
A nona é a que importa: CHIMERA_SKILL_CARDS vinha desligada, o que significa que o agente
extraía uma skill de cada execução bem-sucedida e nunca lia nenhuma de volta — a afirmação central do
produto com o fio cortado. Virou um interruptor, e a dica dele diz o que custa deixar desligado.
Vários projetos, e vários agentes
- A barra lateral agrupava conversas por projeto desde sempre, mas o grupo vinha das conversas — um
projeto só aparecia depois de já ter sido conversado, com o nome do último pedaço do caminho.
Agora você adiciona antes de usar, e chama do que você chama. - Trocar de projeto mantinha a conversa (a tela dizia uma coisa e o disco dizia outra, e o disco
estava certo), e uma execução congelava a digitação em todos os projetos. Os dois eram
invisíveis com um workspace só. - Um recibo grava de qual projeto veio. Sem isso, "valeu a pena?" só podia ser global, e um veredito
que funde três projetos é pior que veredito nenhum. chimera agentse/api/agents/registry: id, nome, instruções, modelo, permissões. O id do agente
é a lane do Kanban — o quadro já guardava a lane como texto livre e o despachante já recebia os
runners injetados, então isso custou uma classe e uma linha, com o despachante intocado.- O quadro deixa de ser vitrine: arquivar, mover, remover e despachar, com o despacho transmitido
cartão a cartão. Ele reporta quantos foram trabalhados, não quantos foram enfileirados — um
cartão cuja lane não tem runner espera no backlog, e "0 trabalhados" é como você descobre que seu
agente não está registrado. - Projetos podem ser criados e avançados pelo app, que antes conseguia aprovar um projeto sem ter
como criá-lo. Um passo por clique: um projeto termina quando o SPEC dele diz que terminou.
Instalação
Os instaladores não são assinados por uma autoridade — Windows e macOS avisam na primeira execução.
Nada medido mudou: 37/37 provado (GA), ganho interno de 48% → 71% com n=100, significativo.