
Agente autonomo di penetration testing basato su intelligenza artificiale che orchestra ricognizione multi-agente, exploitation, post-exploitation e reporting con stato di engagement persistente.
Agente di penetration testing AI nel tuo terminale.
Architettura multi-agente • Tracciamento dello stato dell'engagement • 20+ provider LLM
PentestCode è un agente di penetration testing autonomo per il tuo terminale. Puntalo su un target ed esegue gli strumenti, legge l'output, aggiorna la sua visione della rete e decide cosa fare dopo — proprio come farebbe un operatore. Un hard fork di OpenCode (MIT), privato del focus sull'editing del codice e ricostruito per la sicurezza offensiva.
Beta — tiene botta su engagement reali e CTF, ma aspettati qualche spigolo. Apri una segnalazione quando qualcosa si rompe; è così che migliora.
Un'istruzione in ingresso, una catena d'attacco completa in uscita:
you: "pentest 10.10.10.5, goal is domain admin"
È metodico dove le persone tendono a essere pigre: prova ogni credenziale su ogni servizio di ogni host e non si dimentica di verificare nulla. Tutto ciò che apprende finisce in uno stato strutturato che puoi interrogare a metà esecuzione con /status, /vulns o /creds.
npm install -g pentestcode-ai
# via curl
curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Un singolo binario autonomo — niente Bun, Node o runtime da installare. Linux e macOS, x64 e arm64.
Fissa la versione:
PENTESTCODE_VERSION=0.1.7 curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Directory personalizzata:
PENTESTCODE_INSTALL=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Dal sorgente:
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
Funziona con oltre 20 provider tramite ai-sdk — Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama e altri.
Due cose distinguono PentestCode da un prompt da pentester incollato in una finestra di chat: un team di agenti e una memoria condivisa.
Il design segue il modello stratega-coordinatore della ricerca HPTSA — un miglioramento di 4,3× rispetto a un agente singolo:
┌─────────────┐
│ pentest │ strategist / coordinator
│ (lead) │ plans, dispatches, tracks state
└──────┬──────┘
┌───────┬───────┼───────┬───────┐
▼ ▼ ▼ ▼ ▼
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│recon ││scan- ││explo-││iden- ││post- │
│ ││ner ││iter ││tity ││explo │ ... + 7 more
└──────┘└──────┘└──────┘└──────┘└──────┘
L'agente principale (pentest) suddivide l'engagement in attività e lancia sottoagenti specializzati in parallelo — ciascuno con il proprio system prompt, i propri permessi sugli strumenti e la propria conoscenza di dominio. 13 agenti in tutto: recon, scanner, enumerator, exploiter, identity (AD/Kerberos), infrastructure (SNMP/IPMI/database), webapp (OWASP Top 10), post-exploit, exploit-dev, critic (controllore dei falsi positivi), reporter, più agenti nascosti per la compressione del contesto e la gestione delle sessioni.
Quando lo scanner trova una porta, l'enumerator la vede all'istante — perché ogni agente legge e scrive su un unico stato dell'engagement strutturato:
Lo stato sopravvive alla sessione: chiudi il terminale, torna domani e l'agente riprende da dove si era fermato. Al suo fianco, un findings.md leggibile dall'uomo registra ogni vulnerabilità, credenziale e accesso ottenuto con i relativi timestamp — monitoralo con tail -f per vedere l'engagement svolgersi.
18 strumenti di pentest integrati oltre a bash. Gli strumenti di parsing sono obbligatori: dopo aver eseguito nmap, l'agente deve passare l'output attraverso nmap_parse invece di fare grep manuale sull'XML, così ogni risultato finisce nello stato dell'engagement.
19 pacchetti di conoscenza curati, caricati su richiesta così da consumare contesto solo quando rilevanti:
Le skill sono semplice markdown. Aggiungi le tue inserendo un SKILL.md nella directory delle skill — nessuna modifica al codice necessaria.
Guida una sessione live con i comandi slash:
E decidi quanta libertà dare all'agente:
Le modalità si combinano con il comportamento di pausa — auto + pause always ti offre un'esecuzione autonoma che si ferma a ogni risultato per la revisione.
Un unico toolkit per tutta la sicurezza offensiva:
La configurazione si trova in .pentestcode/pentestcode.jsonc:
{
"provider": {
"anthropic": {
"model": "claude-sonnet-4-20250514"
}
}
}
Provider: Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama, Together, Groq, Fireworks, DeepSeek, Mistral e altri tramite ai-sdk.
Le segnalazioni di bug provenienti dall'uso reale sono la cosa più preziosa che puoi inviare. Esegui PentestCode su una box CTF, una macchina HTB o un pentest autorizzato e, quando qualcosa va storto — entra in loop, ignora un percorso ovvio, si blocca sull'output di uno strumento o spreca token — apri una segnalazione con:
findings.md e/o l'output di sessione pertinenteAnche le richieste di funzionalità e le PR sono benvenute. Il codebase è in TypeScript sulla libreria Effect — consulta CLAUDE.md per l'architettura.
MIT — vedi LICENSE.
Hard fork di OpenCode • Progettato per la sicurezza offensiva • Self-hosted e open source
| Fase | Cosa fa l'agente |
|---|
| Scansione | nmap -sS -p- trova 7 porte aperte e analizza l'XML direttamente nello stato dell'engagement |
| Riconoscimento | Porte 88 + 389 → Domain Controller. Sguinzaglia tre enumeratori in parallelo (SMB, LDAP, HTTP) |
| Enumerazione | Sessione SMB nulla → condivisione scrivibile. LDAP → lista utenti. Gobuster → directory web |
| Attacco | AS-REP roast → hash decifrabile → prima credenziale valida |
| Spray | Quella credenziale provata su SMB, WinRM, LDAP e RDP su ogni host noto |
| Exploit | Punto d'appoggio WinRM → l'agente post-exploit estrae SAM / LSA / DPAPI |
| Risultato | Hash di admin di dominio in mano — ogni passo registrato con la sua catena di prove |
| Strumento | Cosa fa |
|---|
nmap_parse | Analizza l'XML di nmap → popola automaticamente host/servizi |
nuclei_parse | Analizza il JSON di Nuclei → crea vulnerabilità con severità |
cme_parse | Analizza l'output di NetExec → aggiorna credenziali/accessi/host |
gobuster_parse | Analizza l'output del brute force sulle directory → classifica i risultati |
bloodhound_parse | Analizza il JSON di SharpHound → popola il modello AD |
sqlmap_parse | Analizza l'output di sqlmap → estrae i punti di iniezione |
xss_detect | Analizza le risposte per XSS riflesso/persistente |
jwt_analyze | Decodifica JWT, controlla alg:none/HMAC debole/scadenza |
cred_spray | Pianifica lo spray di credenziali su tutti i servizi scoperti |
scope_check | Validazione dello scope CIDR/wildcard |
attack_path_suggest | Ricerca di percorsi basata sui costi nel grafo delle relazioni |
tunnel_manage | Pianifica tunnel SSH/chisel/ligolo, tiene traccia delle sessioni attive |
phase_control | Gestione delle fasi con quality gate |
report_gen | Genera report di pentest in markdown/JSON |
state_update | Registra i risultati (30+ tipi di mutazione, modalità batch) |
state_query | Interroga lo stato dell'engagement (20+ tipi di query) |
| Comando | Cosa fa |
|---|
/status | Dashboard dell'engagement — host, vulnerabilità, credenziali, fase |
/targets | Tabella di host e servizi |
/vulns | Risultati per severità |
/creds | Credenziali scoperte |
/scope | Visualizza/modifica lo scope del target |
/phase | Gestione delle fasi |
/mode | Cambia auto / free / guided |
/pause | Pausa sui risultati (never / always / checkpoint) |
/report | Genera un report di pentest |