
Agente autônomo de teste de penetração com IA que orquestra reconhecimento multiagente, exploração, pós-exploração e geração de relatórios com estado de engajamento persistente.
Agente de teste de penetração com IA no seu terminal.
Arquitetura multiagente • Rastreamento de estado do engajamento • 20+ provedores de LLM
O PentestCode é um agente de pentest autônomo para o seu terminal. Aponte para um alvo e ele executa as ferramentas, lê a saída, atualiza sua visão da rede e decide o que fazer em seguida — da mesma forma que um operador faria. Um hard fork do OpenCode (MIT), sem o foco em edição de código e reconstruído para segurança ofensiva.
Beta — ele se sustenta em engajamentos reais e CTFs, mas espere arestas por lixar. Abra uma issue quando algo quebrar; é isso que o torna melhor.
Uma instrução entra, uma cadeia de ataque completa sai:
you: "pentest 10.10.10.5, goal is domain admin"
Ele é metódico onde as pessoas ficam preguiçosas: faz spray de todas as credenciais contra todos os serviços em todos os hosts, e não se esquece de verificar as coisas. Tudo o que ele aprende vai para um estado estruturado que você pode consultar durante a execução com /status, /vulns ou /creds.
npm install -g pentestcode-ai
# via curl
curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Um único binário autossuficiente — sem Bun, Node ou runtime para instalar. Linux e macOS, x64 e arm64.
Fixar versão:
PENTESTCODE_VERSION=0.1.7 curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Diretório personalizado:
PENTESTCODE_INSTALL=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
A partir do código-fonte:
bun install
bun run build --single --skip-embed-web-ui
# binary at packages/opencode/dist/pentestcode-<os>-<arch>/bin/pentestcode
pentestcode auth login # connect your LLM provider
pentestcode # interactive session
pentestcode --prompt "scan 10.10.10.0/24 and enumerate all services" # one-shot
Funciona com 20+ provedores através do ai-sdk — Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama e mais.
Duas coisas separam o PentestCode de um prompt de pentester colado em uma janela de chat: uma equipe de agentes e uma memória compartilhada.
O design segue o modelo estrategista-coordenador da pesquisa HPTSA — uma melhoria de 4,3× em relação a um único agente:
┌─────────────┐
│ pentest │ strategist / coordinator
│ (lead) │ plans, dispatches, tracks state
└──────┬──────┘
┌───────┬───────┼───────┬───────┐
▼ ▼ ▼ ▼ ▼
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│recon ││scan- ││explo-││iden- ││post- │
│ ││ner ││iter ││tity ││explo │ ... + 7 more
└──────┘└──────┘└──────┘└──────┘└──────┘
O agente líder (pentest) divide o engajamento em tarefas e despacha subagentes especialistas em paralelo — cada um com seu próprio prompt de sistema, permissões de ferramentas e conhecimento de domínio. 13 agentes no total: recon, scanner, enumerator, exploiter, identity (AD/Kerberos), infrastructure (SNMP/IPMI/databases), webapp (OWASP Top 10), post-exploit, exploit-dev, critic (verificador de falsos positivos), reporter, além de agentes ocultos para compressão de contexto e gerenciamento de sessão.
Quando o scanner encontra uma porta, o enumerator a vê instantaneamente — porque cada agente lê e escreve em um único estado de engajamento estruturado:
O estado sobrevive à sessão: feche o terminal, volte amanhã, e o agente retoma de onde parou. Ao lado dele, um findings.md legível por humanos registra cada vulnerabilidade, credencial e ganho de acesso com carimbos de data/hora — use tail -f para assistir ao engajamento se desenrolar.
18 ferramentas de pentest integradas além do bash. As ferramentas de parser são obrigatórias: após executar o nmap, o agente deve canalizar a saída pelo nmap_parse em vez de fazer grep no XML manualmente, para que cada descoberta chegue ao estado do engajamento.
19 pacotes de conhecimento selecionados, carregados sob demanda para que custem contexto apenas quando relevantes:
As habilidades são markdown simples. Adicione as suas colocando um SKILL.md no diretório de skills — sem necessidade de alterações no código.
Conduza uma sessão ao vivo com comandos de barra:
E defina quanta corda o agente recebe:
Os modos combinam com o comportamento de pausa — auto + pause always oferece execução autônoma que para em cada descoberta para revisão.
Um único kit de ferramentas para toda a segurança ofensiva:
A configuração fica em .pentestcode/pentestcode.jsonc:
{
"provider": {
"anthropic": {
"model": "claude-sonnet-4-20250514"
}
}
}
Provedores: Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama, Together, Groq, Fireworks, DeepSeek, Mistral e mais via ai-sdk.
Relatos de bugs de uso real são a coisa mais valiosa que você pode enviar. Rode o PentestCode em uma box de CTF, uma máquina do HTB ou um pentest autorizado, e quando algo der errado — ele entra em loop, perde um caminho óbvio, engasga na saída de uma ferramenta ou desperdiça tokens — abra uma issue com:
findings.md e/ou a saída de sessão relevantePedidos de funcionalidades e PRs também são bem-vindos. O código é TypeScript sobre a biblioteca Effect — veja CLAUDE.md para a arquitetura.
MIT — veja LICENSE.
Hard fork do OpenCode • Feito para segurança ofensiva • Self-hosted e open source
| Estágio | O que o agente faz |
|---|
| Escaneamento | nmap -sS -p- encontra 7 portas abertas e analisa o XML direto para o estado do engajamento |
| Reconhecimento | Portas 88 + 389 → Domain Controller. Dispara três enumeradores em paralelo (SMB, LDAP, HTTP) |
| Enumeração | Sessão SMB nula → compartilhamento gravável. LDAP → lista de usuários. Gobuster → diretórios web |
| Ataque | AS-REP roast → hash quebrável → primeira credencial válida |
| Spray | Essa credencial é pulverizada em SMB, WinRM, LDAP e RDP em todos os hosts conhecidos |
| Exploração | Foothold via WinRM → agente de pós-exploração extrai SAM / LSA / DPAPI |
| Resultado | Hash de admin de domínio em mãos — cada passo registrado com sua cadeia de evidências |
| Ferramenta | O que faz |
|---|
nmap_parse | Analisa XML do nmap → preenche hosts/serviços automaticamente |
nuclei_parse | Analisa JSON do Nuclei → cria vulnerabilidades com severidade |
cme_parse | Analisa a saída do NetExec → atualiza credenciais/acesso/hosts |
gobuster_parse | Analisa a saída do brute force de diretórios → classifica descobertas |
bloodhound_parse | Analisa JSON do SharpHound → popula o modelo AD |
sqlmap_parse | Analisa a saída do sqlmap → extrai pontos de injeção |
xss_detect | Analisa respostas em busca de XSS refletido/armazenado |
jwt_analyze | Decodifica JWT, verifica alg:none/HMAC fraco/expiração |
cred_spray | Planeja spray de credenciais em todos os serviços descobertos |
scope_check | Validação de escopo CIDR/wildcard |
attack_path_suggest | Busca de caminhos baseada em custo através do grafo de relacionamentos |
tunnel_manage | Planeja túneis SSH/chisel/ligolo, rastreia sessões ativas |
phase_control | Gerenciamento de fases com portões de qualidade |
report_gen | Gera relatórios de pentest em markdown/JSON |
state_update | Registra descobertas (30+ tipos de mutação, modo lote) |
state_query | Consulta o estado do engajamento (20+ tipos de consulta) |
| Comando | O que faz |
|---|
/status | Painel do engajamento — hosts, vulnerabilidades, credenciais, fase |
/targets | Tabela de hosts e serviços |
/vulns | Descobertas por severidade |
/creds | Credenciais descobertas |
/scope | Ver/editar escopo do alvo |
/phase | Gerenciamento de fases |
/mode | Alternar auto / free / guided |
/pause | Pausar em descobertas (nunca / sempre / checkpoint) |
/report | Gerar um relatório de pentest |