Seu código, protegido.
O revisor de segurança que o seu agente chama a cada mudança, dentro do Claude Code, do Codex, do Cursor, do OpenCode, do Antigravity e de qualquer cliente MCP: segue o dado da entrada até o sink, conserta e diz o que não olhou. Roda na sua máquina, de graça, e o código só sai dela se você mandar. Quando um cliente pede prova, o veredito vira evidência, e a evidência, uma declaração contra-assinada que qualquer pessoa verifica offline.
Pré-lançamento: a codafort ainda não está disponível para instalar. Entre na lista de espera →
$ codafort vet # a mudança que a IA acabou de escrever V0 security-delta ▲ crit SF-1 SQL injection api/users.py:42 request.args → db.query V2 vacuous-tests ● adv tests/test_users.py:9 assert True V3 public-contract ok V4 blast-radius ok 1 file · 12 lines verdict: BLOCKED · 1 blocking · 1 advisory · axes_skipped: [] · 0.9s $ codafort fix SF-1 && codafort vet --evidence-out vet.json verdict: PASS · evidence → vet.json (coda-evidence/1, modality: vet) $ codafort attest create --evidence vet.json --evidence iast-ev.json coda-attestation/1 · asvs-l2-sast · verdict: pass · evidence[2] · Ed25519 ✓ $ codafort attest verify token.txt # grátis, offline, qualquer pessoa ✓ assinatura VÁLIDA — contra-assinada pela codafort (kid 2)
Saída ilustrativa, com a forma real dos contratos coda-vet/1, coda-evidence/1 e coda-attestation/1.
codafort mcp installfix SF-na real sobre programar com IA
O agente escreve com confiança, e ninguém revisa tudo o que ele escreve.
Quase metade do código gerado por IA vem com alguma falha de segurança, e cada rodada de "melhora isso" aumenta a chance. Achar essas falhas sempre foi trabalho de ferramenta. O que mudou é que agora você também precisa provar que olhou: para você, para quem revisa o PR e para o cliente que pede evidência. Ler cada linha que a IA escreve não escala; medir cada mudança e assinar o resultado escala.
platform push, quando você mandacomo funciona
Três passos, dentro do loop do agente.
A codafort é um servidor MCP que o seu agente chama enquanto escreve, e uma CLI que devolve exatamente o mesmo dado. Roda no seu terminal, sem painel para abrir.
Instala no agente
codafort mcp install registra o servidor em cada agente instalado: Claude Code, Codex, Cursor, OpenCode e Antigravity; qualquer outro cliente MCP entra por configuração stdio. Dez tools, todas ancoradas no motor determinístico: de scan, scan_diff, explain e fix_preview a vet e à triagem.
O agente programa; a codafort confere
A cada diff, scan_diff segue o caminho real do dado (taint interprocedural sobre um Code Property Graph) e devolve só o que é confirmado. fix_preview entrega o patch como dado: quem grava é o agente, com você aprovando.
O veredito vira prova
codafort vet julga a mudança em cinco eixos e diz quais não rodaram. Com --evidence-out, o veredito entra no ledger; attest create contra-assina o conjunto. Como o vet funciona →
o motor por dentro
Como um dado não-confiável vira finding.
O grafo abaixo é uma ilustração, com dez nós de uma app Flask. Os passos são os que o motor executa de verdade: monta o grafo, marca as fontes, segue o dado e só reporta o que chega a um sink.
- Para o agente, seu repositório é um monte de arquivos.
- O motor monta o grafo: cada função, cada chamada e o valor que passa de uma para a outra.
- Depois marca de onde vem o dado que ninguém controla: aqui, a query string e o formulário.
- E segue esse dado aresta por aresta. Quando ele passa por um sanitizador, a contaminação termina ali.
- Se o dado chega a um sink sem sanitização, vira finding, com o caminho inteiro e o conserto.
36 arquivos · nenhum grafo ainda
grafo · 10 nós · 8 arestas
2 fontes de dado não-confiável
taint · 5 arestas percorridas · 1 sanitizador no caminho
▲ crit SF-1 · CWE-89 SQL injection · api/users.py:42 · request.args → get_user() → build_query() → db.query() · fix: consulta parametrizada
render_template(): sanitizado por escape_html(), sem finding
Clique num nó para ver de onde o dado vem e até onde ele chega.
Fonte: parâmetro da query string. Chega a db.query() em três arestas, sem passar por sanitização.
Fonte: campo do formulário. Chega a render_template(), mas passa antes por escape_html().
Recebe request.args e repassa a build_query(): o taint atravessa a função.
Concatena o valor na string SQL. Daqui o dado segue contaminado até db.query().
Sink de SQL. É alcançado por request.args sem sanitização: vira o finding SF-1, CWE-89.
Recebe request.form e passa o valor por escape_html() antes de renderizar.
Sanitizador de HTML. Depois dele o dado deixa de contar como contaminado para XSS.
Sink de XSS. Recebe dado de request.form só depois de escape_html(), então não há finding.
Lê a configuração local. Não é fonte de dado não-confiável, e o motor não o segue.
Abre a conexão que db.query() usa. O valor não vem de uma fonte, então não entra no finding.
onde ele entra
Do primeiro prompt à declaração contra-assinada, sem trocar de ferramenta.
Você não precisa saber o que é SQL injection para não publicar uma. O mesmo motor responde no editor, no commit, no PR e no dia em que alguém pede evidência, sempre com o mesmo Finding e o mesmo vocabulário.
Enquanto a IA escreve
O agente chama scan_diff a cada mudança e recebe só o que o motor confirma, com o caminho do dado da entrada até o sink. Quem escreve continua sendo o agente; ele passa a escrever com um revisor do lado.
No editor
codafort lsp fala LSP 3.17 e marca o achado na linha, no VS Code, no Neovim ou no Helix. codafort watch refaz a análise a cada salvamento, em menos de 500 ms, sem consumir CPU parado.
Antes de commitar
codafort vet julga aquela mudança em cinco eixos, separa o que bloqueia do que é aviso e nomeia os eixos que não rodaram. O delta é medido contra a base do PR, e não contra o seu HEAD.
No PR e no CI
codafort gate roda no pipeline com os limiares do seu arquivo de política e decide o exit code. A Action oficial do GitHub publica o SARIF no code scanning e arquiva o coda-gate/1 como evidência. Na Action, o gate só reporta, e com vet-enforce: true um veredito bloqueante do vet reprova o job; para reprovar pelo gate, chame o codafort gate direto no pipeline. Tudo isso em qualquer plano.
Quando o app roda
O codatrace confirma, em execução, quais achados estáticos foram alcançados por dado não-confiável; o que ele não viu fica marcado como unreached, que quer dizer não medido. O codaprobe testa a app viva por fora, num alvo autorizado. Se um processo quebra, o codacrash lê o dump e aponta a causa.
Quando alguém pede prova
attest create, num plano pago, leva o conjunto de evidências para a codafort contra-assinar. Quem recebe confere o token offline, de graça, em /verify ou pela CLI, sem instalar nada: vê que a declaração não mudou depois de emitida e quem a emitiu. O conteúdo continua sendo o que você declarou.
Achar e consertar vulnerabilidade vai ser grátis. Os planos pagos e os preços estão em definição e saem no lançamento; quem está na lista de espera fica sabendo primeiro.
a cadeia de prova
Do finding à declaração contra-assinada: um ledger que qualquer pessoa recomputa.
Contratos públicos e versionados, cada um com $id resolvível. Cada camada da plataforma contribui evidência no mesmo formato, inclusive sobre o que não mediu. O veredito é uma função recomputável do ledger, e a assinatura cobre o ledger inteiro.
- codafort · src
- codatrace · iast
- codaprobe · dast
- codacrash · run
- finding
coda-finding/1o que o motor achou, com o caminho do dado - vet
coda-vet/1eixo pulado nunca é eixo limpo - evidence
coda-evidence/1← codafort · codatrace · codaprobe · codacrash cada camada contribui no mesmo formato (modality, granularity) confirmed · sanitized · unreached (= não medido) - ledger
evidence[]ordem total · veredito recomputável · supersedes - declaration
coda-attestation/1Ed25519 · token ou DSSE/in-toto · verify offline
blocking (provado) × advisory, e axes.skipped: o eixo que não rodou aparece no próprio veredito.confirmed, sanitized ou deixou unreached ("não medido", nunca "seguro"), com a cobertura de instrumentação em números absolutos.(standard, reduction_version) e só aperta: confirmed-at-runtime vira pass → fail, e nada afrouxa. Mais evidência sobre o mesmo scan não edita: sucede (supersedes).unreached é de primeira classe, o axes_skipped viaja no veredito, e a cobertura é publicada em contagem absoluta. Um laudo neste formato não consegue esconder o que não olhou: é a forma do contrato que impede, sem depender de política interna.
as camadas
Quatro jeitos de conferir o que o seu agente escreveu.
Comece pelo código: achar e consertar falha nele vai ser grátis, e a análise roda na sua máquina. Com a app rodando, as outras três camadas mostram o que acontece com ela de verdade, e cada uma diz o que não conseguiu verificar.
codafort grátisNo seu código
Lê o que você e o seu agente escreveram, em 16 linguagens (Delphi inclusive), e acha onde um dado que vem de fora chega a um ponto perigoso, como uma consulta ao banco. Também confere dependências com falha conhecida, segredos esquecidos no código, infraestrutura como código e o pipeline de CI. O caminho que ele mostra existe no código; se a produção passa por ele, o código sozinho não diz.
codatrace plano pagoCom a app rodando, por dentro
Roda dentro da sua app (Python, Node ou JVM) enquanto você usa ou testa, e mostra quais daqueles achados o dado de fora alcançou de verdade. Só observa e não muda nada na app. O que ninguém exercitou aparece como "não medido", e não como seguro. Na JVM, SQL e XSS ainda ficam de fora.
codaprobe plano pagoCom a app rodando, por fora
Testa a sua API pela rede, como alguém de fora faria, e só no endereço que você autorizou. Uma falha só é apontada quando a resposta ao teste difere da resposta normal, e cada requisição fica num registro que dá para conferir depois. Rota que o teste não percorreu continua sem verificação.
codacrash grátisQuando a app cai
Lê o dump de um crash direto, sem depurador, e diz o que causou a queda, se a falha parece explorável e um ID que junta os crashes iguais. Serve só para defesa e nunca gera exploit. Analisar um dump vai ser grátis; juntar crashes de muitas máquinas vai entrar num plano pago.
para o time de segurança
Análise de fluxo de dados de verdade, com o número publicado inteiro.
No OWASP Benchmark 1.2, re-medido em 2026-09-28 contra a CodeQL e o Semgrep na mesma rodada: zero falso-positivo em 2.740 casos, onde a CodeQL levanta 531 e o Semgrep 552, com o mesmo recall da CodeQL (0.972). A ressalva vai junto: afinamos contra esse corpus e eles não, então trate como teto; no holdout que nenhum ajuste pode usar, a precisão segue 1.000. E publicamos onde perdemos: uma régua em que a CodeQL é mais precisa.
| Precisão | FP | Recall | Falsos-positivos | |
|---|---|---|---|---|
| codafort | 1.000 | 0.000 | 0.972 | 0 |
| CodeQL 2.27 | 0.721 | 0.401 | 0.972 | 531 |
Semgrep OSS 1.177 (p/default) | 0.693 | 0.417 | 0.882 | 552 |
OWASP Benchmark 1.2, Java, os três lados na mesma rodada e no mesmo scorer (2026-09-28; CodeQL security-extended, Semgrep na sua melhor configuração). O gate de CI reprova o build se a precisão cair abaixo de 1.000 nas categorias do NIST Juliet que ele cobre. Metodologia, as outras linguagens e as ressalvas em /benchmark.
planos
Planos e preços: em definição.
O que já está decidido: achar e consertar vulnerabilidade vai ser grátis, na sua máquina. Os planos pagos saem no lançamento.
pré-lançamento
Seja dos primeiros a usar.
Deixe o seu e-mail: avisamos quando a codafort abrir e chamamos os primeiros para testar.