
raptor v3.1.0
Framework autônomo de pesquisa em segurança que integra análise estática, análise binária, fuzzing, validação de vulnerabilidades baseada em LLM, geração de exploits e criação de patches para operações ofensivas e defensivas.
╔═══════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ║
║ ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ║
║ ██████╔╝███████║██████╔╝ ██║ ██║ ██║██████╔╝ ║
║ ██╔══██╗██╔══██║██╔═══╝ ██║ ██║ ██║██╔══██╗ ║
║ ██║ ██║██║ ██║██║ ██║ ╚██████╔╝██║ ██║ ║
║ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ║
║ ║
║ Autonomous Offensive/Defensive Research Framework ║
║ Based on Claude Code (v3.1.0) ║
║ ║
║ Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake) ║
║ Michael Bargury, John Cartwright ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════╝
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣀⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠿⠿⠟
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣤⣴⣶⣶⣶⣤⣿⡿⠁⠀⠀⠀
⣀⠤⠴⠒⠒⠛⠛⠛⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⣿⣿⣿⡟⠻⢿⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢿⣿⠟⠀⠸⣊⡽⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⣿⡁⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠿⣿⣧⠀ Get them bugs.....⠀⠀⠀⠀⠀
Autores: Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake), Michael Bargury, John Cartwright (@gadievron, @danielcuthbert, @thomasdullien, @mbrg, @grokjc)
Licença: MIT, consulte LICENSE. Note que o CodeQL tem a sua própria licença e não permite uso comercial.
Repositório: https://github.com/gadievron/raptor
O que é o RAPTOR?
O RAPTOR é uma framework autónoma de investigação de segurança construída sobre o Claude Code (mas não vinculada a ele -- também pode ligar a sua própria camada de análise). Encadeia análise estática, análise binária, validação de vulnerabilidades com LLM, geração de exploits e escrita de patches num único fluxo de trabalho que pode executar contra uma base de código ou binário.
Não é software polido. Foi construído em tempo livre, mantido com entusiasmo e fita adesiva, e funciona suficientemente bem para que não consigamos parar de o usar. Se quiser melhorá-lo, abra um PR.
RAPTOR significa Recursive Autonomous Penetration Testing and Observation Robot. Queríamos mesmo chamar-lhe RAPTOR.
Como é construído
O RAPTOR é maioritariamente código gerado por IA. Os humanos definem a direção, revêem o resultado e tomam decisões de design; a IA escreve a implementação. A verificação mecânica (testes, análise estática, calibração de corpus) mantém o nível de qualidade onde precisa de estar, independentemente de quem — ou o quê — escreveu o código.
Pré-requisitos
- Claude Code com uma subscrição ativa (Max, Pro, Team ou Enterprise) ou uma chave API da Anthropic. Esta é a camada de orquestração para a shell interativa
raptor-- opcional se apenas precisar das CLIs autónomas, consulte Executar totalmente autónomo abaixo. - Python 3.10+ e Node.js 18+.
- Semgrep (
pip install semgrep) para análise estática. O CodeQL é opcional mas recomendado.
Para a camada de despacho de análise (o LLM que analisa descobertas individuais), o próprio Claude Code trata de tudo por predefinição -- não são necessárias chaves API adicionais. Se quiser análise multi-modelo (por exemplo, Claude + GPT + Gemini) ou uma configuração totalmente local, terá de configurar o(s) outro(s) fornecedor(es). Consulte Usar um LLM diferente abaixo.
Início Rápido
Opção 1: Instalar manualmente```bash
Clone the repo
git clone https://github.com/gadievron/raptor.git cd raptor
Install Python dependencies
uv sync --locked
Compatibility path during the uv migration
pip install -r requirements.txt
Install Claude Code (if you don't already have it)
npm install -g @anthropic-ai/claude-code
Install Semgrep (required for scanning)
pip install semgrep
Add the launcher to your PATH -- put this in your shell profile to make it
permanent. Append rather than prepend, so system directories stay ahead of
the repo. (Alternatively, symlink bin/raptor into a directory already on PATH.)
export PATH="$PATH:$PWD/bin"
Launch RAPTOR
raptor
O lançador `raptor` é a forma recomendada de iniciar uma sessão, e funciona a partir de qualquer diretório -- resolve a instalação do RAPTOR, memoriza o diretório a partir do qual foi lançado (para que comandos como `/scan` o usem por omissão), executa as verificações de confiança e de projeto prévias, carrega o plugin de rastreio de cobertura e sanitiza o ambiente antes de passar o controlo ao Claude Code. Também aceita um caminho de destino opcional e flags como `--project`, `--continue` e `--model` -- consulte `raptor --help`.
Executar simplesmente `claude` a partir de dentro do diretório do repositório também funciona -- o Claude Code deteta a configuração do RAPTOR a partir do checkout -- mas perde tudo o que o lançador faz acima: sem verificações prévias, sem rastreio de cobertura, e os comandos que usam por omissão "o diretório a partir do qual executou isto" não o conseguem ver.
**Importante:** O RAPTOR carrega a sua configuração a partir do diretório do repositório. Se executar `claude` a partir de qualquer outro diretório, obtém o Claude Code simples, não o RAPTOR. O lançador `raptor` evita completamente este modo de falha.
### Opção 2: Executar num contentor (recomendado)
A utilização de contentores é uma prática de segurança comum para restringir o acesso dos agentes a áreas do seu sistema de ficheiros às quais não quer que acedam, bem como para limitar o raio de impacto de qualquer código malicioso que possa ser executado (por exemplo, através de um ataque à cadeia de fornecimento). A imagem é grande (cerca de 6 GB). Parte do devcontainer Microsoft Python 3.12 e adiciona ferramentas de análise estática, fuzzing e automação de navegador.
Pode descarregar uma imagem pré-construída:```bash
docker pull danielcuthbert/raptor:latest
ou compile-o localmente usando o Dockerfile incluído:```bash
docker build -f .devcontainer/Dockerfile -t raptor:latest .
A imagem espera que o framework RAPTOR (este repositório) seja montado em `/workspaces/raptor` na inicialização. Opcionalmente, você pode montar uma pasta de destino para análise local.
Para iniciar o contêiner:```bash
docker run -it \
-v "$(pwd):/workspaces/raptor" \
raptor:latest
Para montar também uma pasta de destino:```bash
docker run -it
-v "$(pwd):/workspaces/raptor"
-v "/path/to/target-folder:/workspaces/target"
raptor:latest
Adicione `--privileged` se você precisar do depurador determinístico `rr`.
Devcontainers do VS Code também são suportados. Para montar uma pasta de destino, adicione-a à seção `mounts` de `.devcontainer/devcontainer.json`:```jsonc
"mounts": [
// ...existing entries...
"source=/path/to/target-folder,target=/workspaces/target,type=bind,consistency=cached"
]
Em seguida, abra o repositório no VS Code — ele solicitará que você reabra no contêiner:```bash cd /path/to/raptor code .
De qualquer forma, depois de entrar no container, execute `raptor` para começar.
---
## O que esperar na primeira execução
A coisa mais simples que você pode fazer:```
/scan /path/to/code
Isso executa o Semgrep (além do Coccinelle quando spatch está instalado; adicione --codeql para CodeQL) contra o alvo, deduplica os achados e grava um relatório SARIF. Sem análise de LLM, sem chaves de API além do Claude Code. Leva alguns minutos em um repositório típico.
Para adicionar validação com LLM:``` /agentic /path/to/code
Isso executa o pipeline completo: scan, deduplicate e, em seguida, envia cada descoberta pelas etapas de validação (A-F). Em uma base de código de tamanho médio com ~50 descobertas, espere de 10 a 30 minutos e de $2 a $8 em custos de LLM da camada de análise (dependendo do modelo). O limite de custo padrão é de $10 por execução; ajuste com `--max-cost-usd`.
**Nota sobre custos:** A camada de orquestração do Claude Code usa sua assinatura do Claude. A camada de despacho de análise faz chamadas separadas à API de LLM que são cobradas por token. Se você usar apenas o Claude Code como modelo de análise (o padrão), não há custo extra além da sua assinatura. Se você configurar modelos externos (OpenAI, Gemini, etc.), essas chamadas de API serão cobradas por esses provedores.
---
## Modelo de segurança
O RAPTOR executa código gerado por LLM e analisa repositórios não confiáveis. Subprocessos que lidam com conteúdo não confiável são isolados usando namespaces do Linux, Landlock e seccomp. O sandbox bloqueia acesso à rede, restringe a visibilidade do sistema de arquivos e limita o consumo de recursos. Consulte `docs/sandbox.md` para o modelo de ameaça completo e a configuração.
Variáveis de ambiente que poderiam injetar código na cadeia de inicialização são removidas na inicialização (`core/security/_dangerous_env_strip.sh`). Caminhos de arquivos de repositórios escaneados nunca são interpolados em strings de shell — todas as chamadas de subprocesso usam argumentos baseados em listas.
---
## O que o RAPTOR pode fazer
| Comando | O que faz | Status |
|---------|-------------|--------|
| `/agentic` | Fluxo de trabalho autônomo completo: scan, validate, exploit, patch | Estável |
| `/scan` | Análise estática com Semgrep e CodeQL | Estável |
| `/understand` | Mapear superfície de ataque, rastrear fluxos de dados, caçar variantes de vulnerabilidade | Estável |
| `/binary` | Investigação de binário em caixa-preta, evidências em tempo de execução, consultas de grafo e handoff | Beta |
| `/ghidra` | Ponte de RE do Ghidra: anexar/importar projetos `.gpr`, diff entre versões, exportação de descobertas | Beta |
| `/audit` | Revisão sistemática de código orientada por hipóteses e fundamentada em ferramentas | Beta |
| `/review` | Consultar estado da auditoria: descobertas, lacunas, cobertura, notas do operador | Estável |
| `/annotate` | Anexar anotações em prosa de formato livre por função (notas de revisão do operador) | Estável |
| `/validate` | Pipeline de validação de explorabilidade em múltiplos estágios (Estágios 0-F) | Estável |
| `/diagram` | Mapas visuais Mermaid a partir das saídas JSON de `/understand` e `/validate` | Beta |
| `/codeql` | Análise profunda somente com CodeQL com pré-triagem de fluxo de dados SMT | Estável |
| `/analyze` | Analisar descobertas SARIF existentes com LLM, sem reescanear | Estável |
| `/openant` | Scan de código-fonte com LLM do OpenAnt: análise de AST mais raciocínio de LLM por função | Beta |
| `/sca` | Análise de composição de software: dependências, avisos, sinais de cadeia de suprimentos, SBOMs e correções | Beta |
| `/cve-diff` | Descobrir e comparar o commit de correção de uma CVE em OSV, NVD, GitHub e GitLab | Beta |
| `/cve-env` | Construir e verificar um ambiente Docker executando a aplicação afetada por uma CVE em sua versão pré-patch | Experimental |
| `/exploit` | Gerar código de exploit de prova de conceito | Beta |
| `/patch` | Gerar patches seguros para vulnerabilidades confirmadas | Beta |
| `/fuzz` | Fuzzing de binários com AFL++ e análise de crashes | Estável |
| `/crash-analysis` | Análise autônoma de causa raiz para crashes de C/C++ | Estável |
| `/oss-forensics` | Investigação forense baseada em evidências para repositórios do GitHub | Estável |
| `/project` | Espaços de trabalho nomeados para organizar execuções e acompanhar descobertas ao longo do tempo | Estável |
| `/describe` | Descrever um alvo: mix de linguagens, sistema de build, lacunas de ferramentas, estimativa de custo (somente leitura) | Estável |
| `/threat-model` | Criar, inspecionar e manter modelos de ameaça por projeto | Estável |
| `/sage` | Camada de memória persistente (armazenar, recuperar, vincular, corroborar) | Estável |
| `/ask` | Enviar um prompt de formato livre para qualquer modelo de LLM configurado | Estável |
| `/scorecard` | Inspecionar a confiabilidade por modelo em classes de decisão | Estável |
| `/frida` | Instrumentação dinâmica via Frida | Alpha |
| `/web` | Escaneamento de aplicações web: crawl, integração ffuf/nuclei, injeção verificada por oráculo, callbacks de SSRF cego | Beta |
---
## Como o pipeline funciona
Comece criando um projeto para que todas as suas execuções fiquem em um só lugar:```
/project create myapp --target /path/to/code # create a project first
/project use myapp # set it as active
/understand --map # map the attack surface
/agentic --threat-model --validate # map, model, scan, validate
/project findings # review everything in one place
Para um artefato compilado, o ponto de partida equivalente é:```text /binary investigate /path/to/binary # build the evidence-backed binary map /binary graph --edges --json # query the persisted graph /binary trace-parser # collect runtime parser evidence /binary harness # draft a harness only when the boundary is explicit
`/understand` constrói um mapa de contexto de pontos de entrada, limites de confiança e sinks antes que qualquer linha de análise seja executada. `/agentic` então executa Semgrep e CodeQL, deduplica os achados e despacha cada um para validação usando a metodologia exploitation-validator:
Com `--threat-model`, o RAPTOR executa o mapa primeiro, cria `threat-model.json` e `THREAT_MODEL.md` se o projeto ainda não os tiver, e então alimenta uma versão compacta em `/understand`, análise autônoma e `/validate`. Modelos de ameaça existentes do projeto são preservados a menos que você passe `--threat-model-refresh`; mapas de fallback obsoletos são recusados a menos que você passe explicitamente `--threat-model-use-stale`. Ele também transforma fluxos não verificados mapeados em SARIF candidato para que falhas do scanner não matem a execução. É contexto de propriedade do operador, não prova mágica: os achados ainda precisam de evidência de código ou confirmação respaldada por oráculo. Veja `docs/threat-model.md`.
- Estágio A: o padrão é realmente uma vulnerabilidade, ou a ferramenta está fazendo correspondência de padrões com ruído?
- Estágio B: o que um atacante precisa para alcançá-lo, e o que fica no caminho?
- Estágio C: o caminho de código realmente existe? pode ser alcançado de fora?
- Estágio D: decisão final -- isto é código de teste, precisa de pré-condições irrealistas, o modelo está se esquivando?
- Estágio E: viabilidade de exploit binário (quando um artefato compilado está disponível)
- Estágio F: auto-revisão -- algum estágio anterior se esquivou ou se contradisse?
Achados que passam na validação recebem PoCs de exploit e patches gerados. Uma análise cruzada de achados é executada no final para encontrar causas-raiz compartilhadas e cadeias de ataque.
`/validate` executa esse mesmo pipeline como uma etapa autônoma se você já tem achados de uma varredura anterior.
Para um artefato compilado, `/binary <path>` agora executa uma investigação
orientada a evidências em vez de despejar uma pilha de artefatos brutos de engenharia reversa
no operador. Por baixo, ele ainda constrói o manifesto vinculado a SHA-256,
o livro-razão de evidências, o mapa de contexto, a checklist e o grafo SQLite a partir de metadados de arquivo,
imports e xrefs do radare2. Aplicativos Mach-O também recebem inventário de slices, metadados de bundle
e seletores de classe Objective-C / Swift; pseudocódigo de alto valor é
persistido em vez de desaparecer dentro da execução. Exportações de DLL PE, dispatchers de driver Windows
e handlers ioctl de módulos de kernel Linux também são tratados como
seus próprios candidatos de ingresso, com a arquitetura PE lida do cabeçalho
COFF em vez de adivinhada. A camada de investigação então consulta esse grafo,
classifica o ingresso externo antes de pistas genéricas de sink, descobre binários auxiliares/irmãos declarados
e escreve um relatório compacto dividido em fatos,
inferências estruturais e hipóteses não comprovadas. Observações do Frida, testemunhas de crash de fuzzing,
verificações explícitas de Z3 e diffs binários podem então adicionar evidências mais fortes
posteriormente. O RAPTOR também mantém o grafo de chamadas interno necessário para recuperar
candidatos limitados de ingresso-para-parser, para que um callback de aplicativo possa ser restringido à
função interna que realmente chama `XML_Parse`, `d2i_X509`,
`jpeg_read_header` ou outra superfície real de parser sem fingir que isso é
prova de taint. `/binary trace-parser <run-dir>` é o acompanhamento dinâmico explícito:
ele executa o trace estreito do parser Frida, então atualiza o mesmo mapa de contexto,
handoff, grafo e relatório de investigação no local. `/binary investigate --active` mapeia primeiro e só lança uma
campanha real de fuzzing quando existe um limite concreto de harness; alvos de aplicativo, DLL e driver
recebem um passo de harness ou snapshot em vez disso. `/binary harness` escreve uma
especificação de harness respaldada por evidências para o ingresso escolhido e só emite código-fonte candidato
quando o contrato de ABI ou IOCTL é explícito. Ele não blefa o caminho de "`memcpy` existe" para "isto é
explorável": imports, seletores e arestas de chamada permanecem candidatos até que
algo mecânico prove mais. Veja `docs/binary-analysis.md`.
---
## Análise de Composição de Software
`/sca` analisa o lado de dependências e cadeia de suprimentos de um projeto. Não é apenas uma consulta de CVE em arquivo de requisitos: o RAPTOR descobre manifests, lockfiles, comandos de instalação inline, dependências de workflow e fontes de pacotes de imagem de contêiner/base, e então os normaliza em uma única visão de dependências.
A varredura enriquece as dependências com avisos do OSV, CISA KEV, EPSS, CISA Vulnrichment/SSVC, alcançabilidade, sinais de evidência de exploit, verificações de higiene, heurísticas de cadeia de suprimentos, achados de política de licença e revisão/triagem opcional por LLM. Ela emite achados nativos do RAPTOR mais SBOM e saída amigável para CI:
- `findings.json` - achados canônicos do RAPTOR
- `report.md` - resumo legível por humanos
- `sbom.cdx.json` - SBOM CycloneDX com dados VEX
- `findings.sarif` - saída de code-scanning do GitHub/GitLab
Comandos comuns:```bash
python3 raptor.py sca --repo /path/to/project
python3 raptor.py sca --repo /path/to/project --no-llm
python3 raptor.py sca --repo /path/to/project --fail-on-severity high --fail-on-kev
python3 raptor.py sca --repo /path/to/project fix
python3 raptor.py sca check PyPI django 4.2.10
Subcomandos úteis incluem fix, check, upgrade, diff, verify, health, render, suppress e clean-cache. Consulte docs/sca.md para a referência completa.
Integração com Z3 SMT
O RAPTOR possui uma integração Z3 em duas camadas (pip install z3-solver). É opcional. Tudo funciona sem ela, mas os resultados são melhores com ela.
Pré-triagem de fluxo de dados (CodeQL)
Quando o CodeQL produz um resultado de caminho, as restrições do caminho são verificadas quanto à satisfatibilidade antes de qualquer chamada ao LLM. Caminhos comprovadamente inalcançáveis são descartados imediatamente. Para caminhos alcançáveis, o Z3 produz entradas candidatas concretas que vão para o prompt de análise, de modo que o LLM tem algo específico para raciocinar em vez de padrões abstratos.
Análise de restrições de one-gadget (viabilidade binária)
Durante a avaliação de viabilidade de exploração binária, o Z3 verifica se as restrições de registradores e memória de um one-gadget são satisfatíveis em relação ao estado concreto do crash. Os gadgets são classificados por alcançabilidade real em vez de heurísticas, para que você gaste tempo com gadgets que realmente podem funcionar.
O Z3 vem pré-instalado no devcontainer. Para instalações manuais: pip install z3-solver.
Executando offline e em pipelines com air-gap
As regras personalizadas do RAPTOR em engine/semgrep/rules/ são totalmente locais e funcionam sem acesso à rede.
Para pacotes de registro (p/security-audit, p/owasp-top-ten, etc.), o diretório de cache é fornecido vazio. Uma ferramenta de cache (engine/semgrep/tools/cache-packs.py) lida com o preenchimento:```bash
On a connected machine — update the local cache directly:
python3 engine/semgrep/tools/cache-packs.py update
Or fetch into a zip bundle for airgap transfer:
python3 engine/semgrep/tools/cache-packs.py fetch
→ produces semgrep-cache-YYYY-MM-DD.zip
On the airgapped machine — import the bundle:
python3 engine/semgrep/tools/cache-packs.py import semgrep-cache-2026-07-16.zip
Check what's cached:
python3 engine/semgrep/tools/cache-packs.py list
Uma vez preenchido, o scanner resolve os IDs de pacote para ficheiros locais e não ocorre qualquer chamada de rede. Sem a cache, o RAPTOR tentará obter os pacotes de registo de semgrep.dev no momento da análise; se estiver offline, descarta os pacotes não armazenados em cache de forma graciosa e executa apenas com regras personalizadas.
O CodeQL necessita de acesso à rede apenas durante a configuração inicial para descarregar a CLI e os pacotes de consulta. Uma vez instalado, executa offline.
---
## Regras personalizadas
O RAPTOR inclui mais de 200 regras personalizadas de análise estática, testadas adversarialmente para eliminar falsos positivos:
- **Semgrep (~150 regras)** — regras de rastreio de taint e de padrões para Python, Go, Java e JS/TS. Cobre SQLi, XSS, SSRF, SSTI, injeção de comandos, desserialização, XXE, injeção LDAP/NoSQL, path traversal, open redirect, injeção de log/header, injeção de eval, ReDoS, prototype pollution, má configuração de JWT, criptografia fraca, TLS inseguro e segredos codificados.
- **Coccinelle (68 regras)** — correspondência estrutural para C/C++. Segurança de memória (double free, use-after-free, free de ponteiro não-base, free de array na stack, memória mmap'd, use-after-close), bugs de inteiros (overflow, extensão de sinal, double sizeof), fugas de recursos (incompatibilidade popen/fclose, duplo close de fdopendir), tratamento de buffers (strncpy sem NUL, incompatibilidade de tamanho em copy_user, off-by-one em malloc/strlen), segurança de signal handlers, uso indevido de API (domínio de flags fcntl, SIGKILL/SIGSTOP, duplo byte-swap, buffer estático de inet_ntoa), eliminação de dead-store pelo compilador, confusão IS_ERR/PTR_ERR no kernel, injeção de format string, corridas TOCTOU e mais.
- **CodeQL (8 consultas)** — rastreio de taint interprocedimental para C++ (injeção de format string, truncamento de inteiros, use-after-move, invalidação de iteradores) e Java (XXE, desserialização insegura, injeção de log, SSRF no Spring).
Navegue pelas regras diretamente: `engine/semgrep/rules/`, `engine/coccinelle/rules/`, `engine/codeql/queries/`. Estas complementam os pacotes de registo Semgrep que o RAPTOR obtém (`p/security-audit`, `p/owasp-top-ten`, `p/secrets` sempre; pacotes por grupo de políticas como `p/command-injection`, `p/jwt`, `p/xss` adicionalmente) — a sobreposição é mínima.
---
## Como o RAPTOR se verifica a si próprio
O RAPTOR faz dogfooding de uma boa parte das suas próprias ferramentas de segurança, mas vale a pena ser honesto sobre o que realmente bloqueia um PR e o que apenas corre em segundo plano para nos manter honestos. Parte disto é um gate rígido, parte é uma verificação agendada, e parte é apenas um benchmark que mantemos por perto para conseguirmos perceber quando piorámos algo. A decomposição mais completa, incluindo os parâmetros reais e como reproduzir as verificações, está em `docs/ci-controls.md`.
| Controlo | O que verifica | Gatilho | Config / evidência |
|---|---|---|---|
| Ruff | Linting de correção em Python (`F401`, `F811`, `F821`, `F841`) | Gate de diff em PR, mais auditoria semanal de toda a árvore | `pyproject.toml`, `.github/workflows/lint.yml` |
| Pytest | Fronteiras rápidas de testes unitários/integração, tiers específicos por subsistema (via dispatch do grafo de imports), auditoria de prompt-envelope | PRs, pushes para `main`, merge queue, suite completa agendada | `pytest.ini`, `.github/workflows/tests.yml`, `.github/workflows/nightly.yml` |
| CodeQL Advanced | Análise de código de Python, C/C++ e GitHub Actions com estreitamento de âmbito pelo grafo de imports | PRs, pushes para `main`, merge queue, agendamento semanal | `.github/workflows/codeql.yml`, `.github/codeql/codeql-config.yml` |
| Endurecimento de workflows | Actions de terceiros fixadas por SHA, permissões de menor privilégio, linting de metadados de comandos | Cada alteração de workflow e cada execução de lint | `.github/workflows/`, `.github/scripts/check_command_metadata.py` |
| Lint de etiquetas do corpus | Validação do esquema de etiquetas do corpus de auditoria e verificação de pins upstream | PRs (etiquetas alteradas), varredura completa semanal | `.github/workflows/corpus-labels.yml` |
| Gate de PR do RAPTOR SCA | Regressões de dependências e supply-chain introduzidas por um PR | Alterações a manifestos / lockfiles / workflows | `.github/workflows/sca-pr-gate.yml` |
| Auto-bump do RAPTOR SCA | Endurecimento mecânico de dependências e propostas de atualização seguras | Agendamento semanal, execução manual | `.github/workflows/sca-self-bump.yml` |
| Corpus de compromisso SCA | Se compromissos conhecidos de dependências ainda disparam o sinal esperado | Agendamento semanal, alterações relevantes em PRs | `test/data/sca-e2e/compromise-corpus/`, `.github/workflows/sca-compromise-check.yml` |
| Detetores de invariantes do repositório | Deteção de código morto / chamadas erradas, desvio de documentação de variáveis de ambiente, guardrails de listas de vocabulário, formas de bytes de JSON canónico, lint de imports de dependências opcionais | Gate de PR (job `repo-invariants` em `lint.yml`), mais varredura diária | `.github/workflows/lint.yml`, `.github/workflows/miswiring-scan.yml`, `.github/scripts/*_baseline.json` |
| Calibração SCA + corpus de stress | Se a pontuação de risco e a cobertura do parser sofrem desvio ao longo do tempo | Jobs agendados semanais / mensais | `packages/sca/data/calibration/`, `.github/workflows/refresh-sca-calibration.yml`, `.github/workflows/sca-stress-sweep.yml` |
| Corpus de dataflow | Rastreio de precisão / recall / categoria de FP para o comportamento do validador | Benchmark executado por developers e testes de corpus | `core/dataflow/corpus/`, `core/dataflow/scripts/corpus-metrics` |
| Guarda do documento de controlos de CI | Os caminhos documentados existem, a configuração do ruff corresponde, o README liga ao documento | PRs | `.github/tests/test_ci_controls_docs.py` |
Atualmente não aplicado: `mypy` está fixado em `pyproject.toml` mas não bloqueia nada; a formatação do Ruff não é aplicada; o Semgrep faz parte da superfície de scanner do RAPTOR, mas ainda não temos um workflow Semgrep dedicado a "scan RAPTOR with RAPTOR".
---
## Usar um LLM diferente
O RAPTOR tem duas camadas de modelo separadas, e vale a pena saber como ambas funcionam antes de alterar algo.
A **camada de orquestração** é o Claude Code -- mas apenas para a shell interativa `raptor` (esta camada conversacional, de slash-commands). O CLAUDE.md, as skills e os comandos correm todos como instruções do Claude Code aí. Para alterar qual modelo Claude orquestra essa camada, use a flag `--model` do Claude Code ou o comando `/model` dentro de uma sessão. Se não quiser esta camada de todo, veja [Running fully standalone](#running-fully-standalone-no-claude-code) abaixo.
A **camada de dispatch de análise** é o LLM que analisa descobertas individuais de vulnerabilidades. Esta é separada da camada de orquestração e pode ser qualquer fornecedor suportado. Configure-a em `~/.config/raptor/models.json`:```json
{
"models": [
{
"provider": "anthropic",
"model": "claude-opus-4-6",
"api_key": "sk-ant-...",
"role": "analysis"
},
{
"provider": "openai",
"model": "gpt-5.4",
"api_key": "sk-...",
"role": "analysis"
},
{
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"api_key": "sk-ant-...",
"role": "aggregate"
}
]
}
Ou ignore o arquivo de configuração e defina variáveis de ambiente. O RAPTOR irá detectá-las automaticamente:```bash export ANTHROPIC_API_KEY=sk-ant-... # Anthropic Claude export OPENAI_API_KEY=sk-... # OpenAI export GEMINI_API_KEY=... # Google Gemini export MISTRAL_API_KEY=... # Mistral export OLLAMA_HOST=http://localhost:11434 # Local Ollama
Papéis de modelo permitem que você atribua modelos diferentes a tarefas diferentes:
| Papel | O que faz |
|------|-------------|
| `analysis` | Valida e analisa cada descoberta (Estágios A-F) |
| `code` | Escreve PoCs de exploit e código de patch |
| `consensus` | Voto de segunda opinião sobre verdadeiros positivos |
| `aggregate` | Opcional. Síntese narrativa escrita por LLM sobre a correlação determinística multi-modelo, gravada em `aggregation.json` e no `agentic-report.md` final |
| `fallback` | Usado se o modelo primário falhar ou atingir limites de taxa |
Se nenhum papel estiver definido, o primeiro modelo da lista cuida de tudo. Para análise de código-fonte multi-modelo, configure dois ou mais modelos `analysis` — você obterá a correlação determinística por padrão. O papel `aggregate` é opcional e adiciona um resumo escrito por LLM por cima:```bash
python3 raptor.py agentic --repo /code \
--model claude-opus-4-6 \
--model gpt-5.4 \
--aggregate claude-sonnet-4-6
Controle de orçamento:```bash
Cap analysis-layer LLM spend at $5 for this run (default: $10)
python3 raptor.py agentic --repo /code --max-cost-usd 5.00
O Ollama funciona bem para análise; a confiabilidade para geração de código de exploit/patch acompanha a escala e a quantização do modelo, em vez de ser uma propriedade fixa dos modelos locais — consulte [Quality Tradeoffs](https://github.com/gadievron/raptor/blob/main/llm.md#quality-tradeoffs) no guia do LLM, e verifique `/scorecard` para saber o que o seu modelo específico está realmente medindo.
### Executando totalmente autônomo (sem Claude Code)
`bin/raptor` -- o shell interativo com o banner e comandos de barra, ou seja, esta camada conversacional -- executa diretamente na CLI do Claude Code e sempre precisa de seu próprio login. A mecânica real por baixo dele não precisa: `python3 raptor.py <mode>` é uma CLI Python simples, sem nenhuma dependência do Claude Code.```bash
# No `claude` process involved at any point
python3 raptor.py doctor # status check -- explicitly "no claude needed"
python3 raptor.py agentic --repo /path/to/code # scan -> dedup -> analysis
python3 raptor.py scan --repo /path/to/code
Os scripts libexec/raptor-* (incluindo raptor-project-manager -- raptor.py não tem modo project, o gerenciamento de projetos fica lá exclusivamente) também são Python puro, mas eles se recusam a executar a menos que CLAUDECODE esteja definido (verdadeiro automaticamente dentro de uma sessão do Claude Code) ou _RAPTOR_TRUSTED=1 esteja definido explicitamente -- uma proteção contra ser invocado fora da sanitização de ambiente do launcher. Defina uma vez para uso autônomo:```bash
export _RAPTOR_TRUSTED=1
libexec/raptor-project-manager create myapp --target /path/to/code libexec/raptor-project-manager use myapp python3 raptor.py agentic --repo /path/to/code # picks up the active project automatically libexec/raptor-project-manager status libexec/raptor-project-manager findings
Aponte `models.json` / `OLLAMA_HOST` para uma instância local do Ollama (veja acima) e todo esse caminho nunca conversa com a Anthropic -- útil para máquinas isoladas ou hardware apenas local. Você perde a camada conversacional de slash-commands (este chat); o pipeline de scan/análise/exploit em si não é afetado.
### Curto-circuito do tier rápido + o scorecard de modelos
Quando seu modelo de tier de análise tem um irmão mais barato do mesmo provedor (Anthropic Opus → Haiku, OpenAI 5.x → 4o-mini, Gemini Pro → Flash-Lite, Mistral Large → Small), o RAPTOR o usará como pré-filtro em consumidores que se conectam ao substrato (codeql hoje; SCA e outros conforme os follow-ups chegam). O modelo barato só faz curto-circuito em **falsos positivos confiantes**; casos ambíguos e TPs confiantes sempre executam a análise completa. A confiança acumula por célula `(model, decision_class)` — o RAPTOR registra a concordância entre barato e completo e só faz curto-circuito quando o limite superior de 95% de Wilson sobre a taxa de erro da célula cai para 5% ou menos.
Para inspecionar no que seus modelos são bons, use `/scorecard` (ou diretamente: `libexec/raptor-llm-scorecard list`). O scorecard é global (as lições se acumulam entre projetos) e persiste em `out/llm_scorecard.json`.
---
## Projetos
Sem um projeto, cada execução recebe seu próprio diretório com timestamp em `out/`. Com um projeto, tudo vai para um único lugar e você obtém achados mesclados, rastreamento de cobertura e diffs entre execuções.```bash
/project create myapp --target /path/to/code -d "Short description"
/project use myapp
/scan
/understand --map
/validate
/project status # all runs, pass/fail, timestamps
/project findings # merged findings across all runs
/project findings --detailed # per-finding detail
/project coverage --detailed # which files were reviewed
/project diff myapp run1 run2 # compare two runs
/project report # full merged report
/project clean --keep 3 # remove old runs, keep the last 3
/project export myapp /tmp/myapp.zip
/project none # clear active project
Arquitetura
O RAPTOR é composto por duas camadas.
A camada de execução Python (raptor.py, packages/, core/, engine/) realiza o trabalho pesado: executar o Semgrep e o CodeQL, gerir subprocessos, analisar SARIF, deduplicar descobertas, despachar chamadas à API do LLM, rastrear custos, escrever ficheiros de saída. Não toma decisões. Executa.
A camada de decisão do Claude Code (.claude/, tiers/, CLAUDE.md) toma as decisões: que descobertas priorizar, como interpretar os resultados, qual é o cenário de ataque, se o exploit é realista. Implementada como skills, comandos e agentes do Claude Code que carregam progressivamente.```
CLAUDE.md always loaded -- bootstrap, routing, security rules
.claude/commands/ slash commands (/agentic, /scan, /validate, etc.)
.claude/skills/ methodology detail, loaded on demand
tiers/ adversarial thinking, recovery, expert personas
.claude/agents/ specialist sub-agents (offsec, crash analysis, forensics)
A separação significa que você pode executar a camada Python a partir de um pipeline de CI (`python3 raptor.py scan --repo ...`) e obter saída SARIF estruturada sem o Claude Code, ou executá-la interativamente com o fluxo de trabalho agêntico completo.
---
## Forense de OSS
O `/oss-forensics` investiga repositórios públicos do GitHub usando evidências de múltiplas fontes: a API do GitHub, o GH Archive (histórico imutável de eventos via BigQuery), a Wayback Machine e o histórico local do git. Ele executa um pipeline estruturado desde a coleta de evidências, passando pela formulação de hipóteses, até um relatório forense final.
Requer `GOOGLE_APPLICATION_CREDENTIALS` para acesso ao BigQuery. Consulte `.claude/commands/oss-forensics.md` para obter detalhes.
---
## Personas especialistas
Oito personas especialistas estão disponíveis sob demanda. Carregue uma quando quiser uma perspectiva diferente sobre um achado ou uma técnica específica:```
Exploit Developer (Mark Dowd) Exploit PoC generation
Crash Analyst (Charlie Miller / Halvar Flake) Crash analysis and exploitability assessment
Security Researcher General adversarial code review
Patch Engineer Secure fix generation
Penetration Tester Realistic attack scenario assessment
Web Researcher (James Kettle) Web endpoint research (smuggling, cache poisoning, SSRF)
Fuzzing Strategist Corpus design and triage
Binary Exploitation Specialist ROP, heap, and memory corruption
Diga ao Claude qual usar, por exemplo, "Use the Binary Exploitation Specialist".
Documentação
Consulte docs/README.md para o índice completo. Guias principais:
| Ficheiro | Conteúdo |
|---|---|
docs/commands.md | Referência completa de slash-commands com todas as flags |
docs/architecture.md | Estrutura do código e árvore de diretórios |
docs/llm.md | Configuração de fornecedores de LLM, Bedrock, fluxos multi-modelo |
docs/sandbox.md | Isolamento de processos: perfis, Landlock, namespaces |
docs/troubleshooting.md | Auto-teste, erros de configuração do sandbox (mount-ns/uidmap no Ubuntu 24.04+), interação com EDR |
docs/agent-security.md | Capacidades do agente, limites de ferramentas, controlos de rede, aprovação humana |
docs/audit.md | Revisão sistemática de código: hipóteses, ferramentas, estratégias, gates |
docs/validation.md | Pipeline de validação de explorabilidade (fases 0--1) |
docs/static-analysis.md | Regras Semgrep e Coccinelle |
docs/codeql.md | Integração CodeQL e análise autónoma |
docs/binary-analysis.md | Oráculo binário, /binary, viabilidade de exploit |
docs/fuzzing.md | AFL++ e libFuzzer |
docs/crash-analysis.md | Análise autónoma de causa-raiz de crashes |
docs/sca.md | Análise de composição de software |
docs/frida.md | Instrumentação dinâmica |
docs/security.md | O próprio modelo de segurança do RAPTOR |
docs/ci-controls.md | Controlos de CI, workflows e evidência de benchmarks |
docs/threat-model.md | Funcionalidade de threat model por projeto |
docs/python-cli.md | Referência da CLI Python para scripting e CI |
docs/concepts.md | Conceitos centrais: modelo de duas camadas, ciclo de vida de findings, escolher um comando |
docs/agentic.md | Fluxo autónomo: pipeline /agentic, flags de enriquecimento, multi-modelo |
docs/sage.md | Memória persistente SAGE: configuração, chave HMAC, CPU/GPU, casos de uso |
docs/dependencies.md | Ferramentas externas, versões e licenças |
tiers/personas/README.md | Referência de personas especialistas |
Contribuir
O RAPTOR é open source. Bons pontos de partida se quiseres contribuir:
- Crawling com motor de browser e cobertura de DOM XSS para o scanner web (o Playwright está fixado mas não é usado)
- Cobertura de regras SSRF para frameworks orientados a anotações (Spring
@RequestParam, parâmetros tipados do FastAPI) — o semgrep não consegue corresponder a estas fontes, por isso abordagens alternativas são bem-vindas - Geração de assinaturas YARA
- Portes para outras ferramentas de coding com IA (Cursor, Windsurf, Copilot, Cline)
- Melhor cobertura de análise de firmware
- Qualquer coisa que aches que falta
As releases são etiquetadas como vX.Y.Z e construídas automaticamente pela CI. Os prefixos de commit determinam o que entra no changelog: feat: para novas funcionalidades, fix: para correções de bugs, security: para alterações de segurança, docs: para documentação. Qualquer coisa sem prefixo cai em "Other changes". Não é exigida uma convenção estrita, mas ajuda.
Submete pull requests. Fala connosco no canal #raptor no Slack Prompt||GTFO: https://join.slack.com/t/promptgtfo/shared_invite/zt-3v2b4sll3-SfyzFRw2lykx_XQX7F3uNQ
Licença
MIT -- Copyright (c) 2025-2026 Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake), Michael Bargury, John Cartwright.
Consulta o LICENSE para o texto completo. Revê as licenças de todas as dependências antes de uso comercial -- o CodeQL em particular não o permite.
Issues: https://github.com/gadievron/raptor/issues
Dependências Python
O RAPTOR usa pyproject.toml e uv.lock como fonte de verdade para
as dependências Python. O requirements.txt versionado mantém-se como
export de compatibilidade para utilizadores que preferem pip install.
Instalações úteis:```bash uv sync --locked # core runtime uv sync --locked --group dev # tests + linting uv sync --locked --extra web # /web scanner support uv sync --locked --extra "web smt llm sage" # optional stacks
Manter `/web`, Z3, SAGE e SDKs de provedores de nuvem como extras opcionais evita
tornar a instalação padrão do RAPTOR mais pesada e frágil do que o necessário.