transparência radical
Cada byte que sai da sua máquina: listado aqui. Seu código não sai sem você mandar.
A análise é 100% local. Por conta própria, a codafort envia só duas coisas: uma métrica de uso pseudônima (sem código, sem caminho de arquivo, sem a localização de nenhum finding) e, com licença ativa, a revalidação dela uma vez por dia (o id da licença e o próprio token, que traz o tier, a validade e o e-mail do titular). Código e findings só saem quando você os entrega à Platform da sua organização, ou conecta um repositório a ela. Está tudo nesta página, e a telemetria você desliga numa linha.
A linha vermelha
Se um dado pode identificar você, seu código ou seu alvo, ele não é telemetria; é seu. Telemetria nenhuma o carrega, em nenhum plano: ele só sai quando você mesmo o entrega à Platform da sua organização (abaixo).
✕ O que a telemetria NUNCA leva
✕ Seu código, trechos ou qualquer conteúdo de arquivo
✕ Caminhos, nomes de arquivo, de repositório ou de branch
✕ Nomes e versões das suas dependências
✕ Segredos, variáveis de ambiente, config
✕ A localização de um finding (arquivo:linha)
✕ Seu IP, hostname, usuário ou e-mail
✓ O que enviamos (pseudônimo)
✓ Que um scan aconteceu, e quanto tempo levou (em faixas, não o valor exato)
✓ Quantos findings, por severidade
✓ Por classe de CWE (ex.: "SQL injection", nunca onde)
✓ Quais linguagens você escaneia
✓ Versão da codafort, sistema e arquitetura
✓ Um ID aleatório da instalação, fixo, sem nome nem e-mail
O pacote inteiro, exatamente como sai
Um envio real, gerado por um scan que encontrou um SQL injection. Rode codafort scan . --telemetry-dry-run e veja o seu, byte a byte, sem enviar nada.
{
"schema": "coda-telemetry/1",
"install_id": "a3f…", // aleatório, fixo / random, fixed
"version": "0.1.0",
"os": "macos", "arch": "aarch64",
"event": "scan",
"files_bucket": "1-9", // faixa, nunca o nº exato / bucket, never exact
"duration_bucket": "100ms-1s",
"findings": {
"by_severity": { "critical": 1 },
"by_cwe_class": { "89": 1 }, // classe, jamais arquivo:linha / class, never file:line
"by_lang": { "python": 1 }
}
}
Níveis; do silêncio total ao seu próprio painel
| Nível | O que sai | Padrão |
|---|---|---|
| 0 · Silencioso | nada: CI, air-gap, banco/órgão público | auto (CI / não-TTY) |
| 1 · Heartbeat | as contagens agregadas acima | LIGADO |
| 2 · Produto | quais regras disparam, aceite do fix, falsos-positivos que você marca | opt-in (ainda não existe) |
| 3 · Sua Platform | não é telemetria: o que você entrega à Platform da sua organização com platform push ou o que a conexão sincroniza, findings com trecho de código inclusive (ver abaixo) | opt-in, plano Platform |
Desligar é grátis e leva uma linha
codafort config telemetry off # permanente / permanent
export CODAFORT_TELEMETRY=off # sessão · CI / session · CI
codafort scan . --no-telemetry # só desta vez / just this once
export CODAFORT_LICENSE_OFFLINE=1 # sem revalidar a licença / no licence check
Quando você liga a Platform, sai o seu dado, e só porque você mandou
O canal codafort platform não é telemetria: ele entrega à Platform da sua organização o resultado da análise, para a fila, o histórico de cada finding e o placar antes/depois. Nada passa por ele até você autorizar este computador.
O que sai, e quando
platform push: os findings (regra, severidade, mensagem e o trecho de código onde estão), as dependências e a lista de arquivos, com o nome do repositório, a branch e o commit. O resto do grafo fica na máquina, a não ser com --with-graph. Com --git, vai também o nome e o e-mail do autor do commit de cada finding.
Caminho absoluto não sai: tudo vai relativo à raiz do repositório, e o envio é recusado se sobrar algum.
Depois de platform connect: um registro por comando naquele repositório, sem novo envio seu: o verbo, o hash dos argumentos, quantos findings, a duração, o repositório, a branch e o commit, o agente de IA usado e as propostas de correção com a justificativa dele. Sem caminho e sem código. No platform login, o nome desta máquina vira o rótulo do dispositivo.
Como não mandar
Não faça platform login: sem sessão (ou sem token no CI), o canal não tem com quem falar.
platform disconnect desliga o repositório e descarta o que esperava envio; platform logout revoga a sessão.
A versão para ambiente isolado não tem o canal. O guia completo está na documentação.
Nós mesmos ameaça-modelamos a nossa telemetria
Coletar métrica de segurança cria um alvo. Uma empresa de segurança tem que provar que cuidou disso, e não só prometer.
Sem mapa de vulnerabilidades
Findings saem só como contagem por classe, nunca com arquivo, linha ou repositório. Um vazamento da nossa base não reconstrói "qual bug, onde".
Sem IP guardado
O coletor vai descartar o IP na chegada. Nada de geolocalização, nada de identificar máquina.
ID aleatório, sem nome
O install-id é um número aleatório gerado na instalação. Fica o mesmo naquela máquina, e por isso o tratamos como dado pessoal pseudônimo; mas não carrega nome, e-mail nem nada da máquina.
Publicamos só agregado
Nenhum número que publicarmos isola um cliente (k-anonimato).
Para ambiente isolado, uma versão sem rede
No contrato Platform há uma versão para ambiente sem internet, entregue sem telemetria, sem revalidação online da licença e sem o canal da Platform. O código de rede não vem nela, e um auditor consegue conferir isso. A versão pública tem os três, e a telemetria se desliga numa linha.
E a LGPD / GDPR
O Nível 1 é dado pessoal pseudonimizado: um ID fixo, sem nome nem e-mail. A base legal é o legítimo interesse em entender e corrigir o produto, e você se opõe desligando. Na Platform, a sua organização é a controladora e a Orchestro trata os dados como operadora, sob contrato e acordo de tratamento de dados, com isolamento por cliente. A página de privacidade detalha cada tratamento.