AI Coding Harness (Arreio de Segurança para Codificação com IA)
O que é
Um AI coding harness (arreio de segurança para codificação com IA) é a estrutura de reforço e verificação que você constrói ao redor de um agente de codificação para que ele possa rodar de forma autônoma sem quebrar nada. Enquanto uma guardrail (proteção) é um hábito que você precisa lembrar de seguir (rodar os testes, ler o diff), um harness é uma máquina que lembra por você: ele fica entre a intenção do agente e o mundo real, e a cada passo perigoso ele registra, avisa ou bloqueia. O dancinlab/harness é um motor de referência independente de projeto — um núcleo compartilhado em TypeScript onde cada repositório se diferencia apenas por um harness.config.json mais alguns arquivos de dados .harness/*.json.
Pontos fortes
- Transforma suas guardrails de hábitos opcionais em regras impostas por código — o agente não consegue simplesmente pular por cima delas.
- Cobre todo o ciclo de vida da ferramenta: antes de um comando rodar, antes de um arquivo ser escrito, no , no e no push.
- Um ledger (livro-razão) aqui é como um caderno em que você só adiciona linhas novas e nunca apaga as antigas. Esses ledgers são escritos em JSONL ( Lines — um objeto JSON por linha) e fornecem um registro à prova de adulteração de tudo que o agente fez. São baratos de escrever e triviais de auditar.
- Se encaixa em qualquer repositório: o comportamento é definido por configuração e dados, não por código bifurcado (fork).
- Projetado para ficar quieto quando tudo está bem, para que os avisos ainda signifiquem alguma coisa.
Trade-offs (contrapartidas)
- É encanamento, não mágica: um harness torna os erros baratos de detectar, ele não torna a IA correta.
- Precisa de uma configuração inicial ajustada às zonas de perigo do seu projeto.
- Regras excessivamente rígidas criam atrito; a disciplina do "bitter-gate" (aposentar uma regra adormecida antes de adicionar uma nova) existe justamente para combater isso.
- É mais valioso em projetos reais com usuários reais — é exagero para um protótipo descartável.
Melhor para
Vibe coding sério, em que você deixa um agente fazer mudanças em vários arquivos e rodar comandos praticamente sem supervisão, e você precisa que o custo de uma ação ruim fique perto de zero.
Os cinco princípios (H1–H5)
- H1 Sucesso silencioso, falha ruidosa — nenhum ruído que você vá aprender a ignorar.
- H2 Nunca corrigir automaticamente — propor, bloquear ou avisar; um humano ou o agente informado decide.
- H3 Bitter-gate — aposentar uma regra adormecida antes de adicionar uma nova.
- H4 Guiado por configuração — um único motor,
harness.config.jsonpor projeto. - H5 Nativo de IA — ledgers em JSONL somente-para-anexar, impossíveis de reescrever silenciosamente.
Como se parece
Um esboço mínimo de configuração:
// harness.config.json
{
"lockedPaths": ["src/auth/**", "infra/**", ".github/**"],
"blockCommands": ["rm -rf", "git push --force", "curl * | sh"],
"verify": ["npm run lint", "npm run typecheck", "npm test"],
"ledger": ".harness/ledger.jsonl"
}
E o fluxo de hooks pré/pós em torno de uma única ação do agente:
agent intends an action
│
┌────▼─────────────┐
│ pre (PreToolUse) │ block dangerous? warn? → else allow
└────┬─────────────┘
│ command runs / file is written
┌────▼──────────────┐
│ post (PostToolUse) │ record to JSONL · warn if a locked file was touched
└────┬──────────────┘
│ at commit / push
┌────▼─────┐
│ verify │ lint · typecheck · tests (parallel) → green or stop
└──────────┘
O agente nunca consegue burlar o portão — esse é todo o ponto.