Avaliações
O blume eval dá à sua documentação um conjunto de testes — um agente de IA responde às perguntas dos seus usuários usando apenas a documentação, um juiz avalia as respostas e a CI falha quando a documentação não consegue responder.
O blume audit diz se os rastreadores conseguem encontrar sua documentação. O blume eval diz se alguém consegue de fato usá-la: um agente de IA lê sua documentação como um estranho leria e tenta responder a perguntas reais de usuários a partir dela. Quando a documentação não apresenta a resposta, a execução falha e aponta a página que deveria apresentá-la.
blume eval
blume eval 3 question(s) · Claude Code
✔ install-node-version pass 1.00 14.2s $0.14
✖ deploy-vercel fail 0.40 38.9s $0.31
missing: the adapter is auto-detected
⊘ search-providers skipped
fix: content/docs/deployment.mdx Docs could not answer: "How do I deploy to Vercel?" — missing: the adapter is auto-detected
2 passed · 1 failed · 1 skipped · 1m 42s · $0.45
Como funciona
Cada pergunta passa por duas sessões de agente, usando uma CLI de agente que você já tem instalada — Claude Code por padrão, ou Codex com --agent codex. O Blume não guarda nenhuma chave de API e não chama nenhum modelo por conta própria.
- O leitor responde à pergunta usando apenas sua documentação. Ele roda em um diretório vazio, com as ferramentas de arquivo, shell e web desativadas, conectado a um servidor MCP privado que serve sua documentação — as mesmas ferramentas
search_docs/get_pageque um agente real usa contra o seu site publicado. Ele não consegue ler seu repositório, então vivencia a documentação exatamente como um usuário novo: o que não está escrito não existe. - O juiz avalia a resposta em relação aos fatos que você listou, sem nenhuma ferramenta. Paráfrase passa; um fato ausente ou contradito falha — e “a documentação não diz” também falha.
O snapshot do MCP é construído diretamente a partir das suas fontes de conteúdo, então não é necessário rodar o blume build antes, e nada é publicado ou enviado para lugar nenhum.
Uma resposta que a documentação não consegue sustentar falha mesmo quando o conhecimento prévio do agente por acaso está correto — esse é justamente o ponto. Sua documentação é a única fonte que vai para produção.
Escrevendo avaliações
As perguntas ficam em evals.yaml na raiz do projeto. Para que um agente rascunhe um arquivo inicial a partir da sua documentação existente:
blume eval init
Ou escreva à mão:
questions:
- id: install-node-version
question: What is the minimum Node.js version required?
expected:
- Node 22.12 or newer
routes: /docs/quickstart
- id: deploy-vercel
question: How do I deploy to Vercel?
expected:
- run blume build
- the output directory is dist
routes:
- /docs/deployment
- id: search-providers
question: Which search providers are supported?
expected:
- pagefind is the default
severity: warning # a miss warns instead of failing CI
skip: true # temporarily excluded, reported as skipped
expectedlista os fatos que uma resposta correta deve declarar, em substância — o juiz aceita paráfrase e rejeita contradição.routesindica a(s) página(s) que deveriam responder à pergunta. Uma falha é então ancorada ao arquivo-fonte dessa página no relatório; uma dica que não corresponde mais a uma página gera um aviso em vez de ser descartada silenciosamente.severity: warningmantém uma pergunta no relatório sem fazer a CI falhar;skip: truedeixa uma pergunta de fora por completo.
Escreva as perguntas que seus usuários realmente fazem — as que vêm de tópicos de suporte, issues no GitHub e chamadas de onboarding. As melhores avaliações codificam uma promessa que sua documentação faz (“deploys sem configuração”) como uma pergunta que quebra quando um PR quebra a promessa.
Fazendo a CI falhar
O código de saída é o contrato: qualquer pergunta que falhe sai com código diferente de zero. O --threshold afrouxa a barreira para uma fração de aprovação quando você está saindo de um acúmulo de pendências:
blume eval # every question must pass
blume eval --threshold 0.8 # at least 80% must pass
blume eval --json # machine-readable report on stdout
O relatório JSON tem o mesmo formato de diagnostics + summary que blume validate --json e blume audit --json, com os resultados por pergunta (resposta, pontuação, fatos ausentes, custo) ao lado.
Como cada pergunta são duas sessões de modelo, uma execução de avaliação custa dinheiro e minutos reais — o gasto por pergunta é exibido conforme a execução acontece. Uma configuração sensata de CI roda o blume eval em mudanças na documentação, e não a cada push.
Corrigindo os achados
Cada falha indica os fatos ausentes e a página que deveria declará-los. Para entregar o relatório inteiro ao agente em vez disso:
blume eval --fix
Isso grava o relatório JSON completo em um arquivo e abre o agente de forma interativa com um prompt que o conduz por cada pergunta que falhou: ler a página indicada, adicionar os fatos ausentes na voz da página e rodar o blume eval novamente até tudo passar. A sessão é interativa por design — você revisa as edições através do próprio fluxo de permissões do agente — e o agente é instruído a nunca excluir perguntas ou enfraquecer os fatos esperados para chegar ao verde.
Flags
--agent claude|codex— qual CLI de agente executa o leitor e o juiz. Padrão:claude.--file <path>— o arquivo de avaliações. Padrão:evals.yaml.--threshold <0..1>— fração mínima de aprovação antes de a execução sair com código diferente de zero. Padrão:1.--timeout <seconds>— limite de tempo do leitor por pergunta. Padrão:180.--json— emite o relatório como JSON no stdout.--fix— após uma execução com falhas, entrega o relatório ao agente para corrigir a documentação interativamente.--verbose— inclui a resposta completa do leitor abaixo de cada falha.