
Agent IA autonome de test d'intrusion qui orchestre la reconnaissance multi-agents, l'exploitation, la post-exploitation et le reporting, avec un état d'engagement persistant.
Agent de test d'intrusion IA dans votre terminal.
Architecture multi-agents • Suivi de l'état de l'engagement • 20+ fournisseurs LLM
PentestCode est un agent de test d'intrusion autonome pour votre terminal. Pointez-le vers une cible et il exécute les outils, lit les sorties, met à jour sa vision du réseau et décide de la suite à donner — comme le ferait un opérateur. Un hard fork d'OpenCode (MIT), dépouillé de son orientation édition de code et reconstruit pour la sécurité offensive.
Bêta — il tient la route sur de vrais engagements et des CTF, mais attendez-vous à des aspérités. Ouvrez une issue quand quelque chose casse ; c'est ce qui le rend meilleur.
Une instruction en entrée, une chaîne d'attaque complète en sortie :
you: "pentest 10.10.10.5, goal is domain admin"
Il est méthodique là où les gens deviennent paresseux : il pulvérise chaque identifiant contre chaque service sur chaque hôte, et il n'oublie pas de vérifier les choses. Tout ce qu'il apprend aboutit dans un état structuré que vous pouvez interroger en cours d'exécution avec /status, /vulns ou /creds.
npm install -g pentestcode-ai
# via curl
curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Un binaire unique autonome — pas de Bun, Node ou runtime à installer. Linux et macOS, x64 et arm64.
Épingler la version :
PENTESTCODE_VERSION=0.1.7 curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Répertoire personnalisé :
PENTESTCODE_INSTALL=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Depuis les sources :
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
Fonctionne avec 20+ fournisseurs via ai-sdk — Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama, et plus encore.
Deux choses distinguent PentestCode d'un prompt de pentester collé dans une fenêtre de chat : une équipe d'agents et une mémoire partagée.
La conception suit le modèle stratège-coordinateur de la recherche HPTSA — une amélioration de 4,3× par rapport à un agent unique :
┌─────────────┐
│ pentest │ strategist / coordinator
│ (lead) │ plans, dispatches, tracks state
└──────┬──────┘
┌───────┬───────┼───────┬───────┐
▼ ▼ ▼ ▼ ▼
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│recon ││scan- ││explo-││iden- ││post- │
│ ││ner ││iter ││tity ││explo │ ... + 7 more
└──────┘└──────┘└──────┘└──────┘└──────┘
L'agent principal (pentest) découpe l'engagement en tâches et répartit des sous-agents spécialisés en parallèle — chacun avec son propre prompt système, ses permissions d'outils et ses connaissances de domaine. 13 agents au total : recon, scanner, enumerator, exploiter, identity (AD/Kerberos), infrastructure (SNMP/IPMI/bases de données), webapp (OWASP Top 10), post-exploit, exploit-dev, critic (vérificateur de faux positifs), reporter, plus des agents cachés pour la compression de contexte et la gestion de session.
Quand le scanner trouve un port, l'énumérateur le voit instantanément — parce que chaque agent lit et écrit dans un seul état d'engagement structuré :
L'état survit à la session : fermez le terminal, revenez demain, et l'agent reprend là où il s'est arrêté. À côté, un findings.md lisible par les humains journalise chaque vulnérabilité, identifiant et gain d'accès avec horodatages — faites un tail -f dessus pour voir l'engagement se dérouler.
18 outils de pentest intégrés en plus de bash. Les outils de parsing sont obligatoires : après avoir lancé nmap, l'agent doit faire passer la sortie par nmap_parse plutôt que de grepper le XML à la main, afin que chaque découverte atteigne l'état de l'engagement.
19 packs de connaissances organisés, chargés à la demande pour ne consommer du contexte que lorsque c'est pertinent :
Les compétences sont du markdown simple. Ajoutez les vôtres en déposant un SKILL.md dans le répertoire skills — aucune modification de code nécessaire.
Pilotez une session en direct avec les commandes slash :
Et définissez la liberté accordée à l'agent :
Les modes se combinent avec le comportement de pause — auto + pause always vous donne une exécution autonome qui s'arrête à chaque découverte pour revue.
Une seule boîte à outils pour la sécurité offensive :
La configuration se trouve dans .pentestcode/pentestcode.jsonc :
{
"provider": {
"anthropic": {
"model": "claude-sonnet-4-20250514"
}
}
}
Fournisseurs : Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama, Together, Groq, Fireworks, DeepSeek, Mistral, et plus encore via ai-sdk.
Les rapports de bugs issus d'une utilisation réelle sont la chose la plus précieuse que vous puissiez envoyer. Lancez PentestCode sur une box CTF, une machine HTB ou un pentest autorisé, et quand quelque chose tourne mal — il boucle, rate un chemin évident, s'étouffe sur une sortie d'outil ou gaspille des tokens — ouvrez une issue avec :
findings.md et/ou la sortie de session pertinenteLes demandes de fonctionnalités et les PR sont également les bienvenues. Le codebase est en TypeScript sur la bibliothèque Effect — voir CLAUDE.md pour l'architecture.
MIT — voir LICENSE.
Hard fork d'OpenCode • Conçu pour la sécurité offensive • Auto-hébergé et open source
| Étape | Ce que fait l'agent |
|---|
| Scan | nmap -sS -p- trouve 7 ports ouverts et parse le XML directement dans l'état de l'engagement |
| Identification | Ports 88 + 389 → Contrôleur de domaine. Déploie trois énumérateurs en parallèle (SMB, LDAP, HTTP) |
| Énumération | Session SMB nulle → partage en écriture. LDAP → liste d'utilisateurs. Gobuster → répertoires web |
| Attaque | AS-REP roast → hash craquable → premier identifiant valide |
| Pulvérisation | Cet identifiant pulvérisé sur SMB, WinRM, LDAP et RDP sur chaque hôte connu |
| Exploitation | Pied-à-terre WinRM → l'agent post-exploitation extrait SAM / LSA / DPAPI |
| Résultat | Hash d'admin de domaine en main — chaque étape enregistrée avec sa chaîne de preuves |
| Outil | Ce qu'il fait |
|---|
nmap_parse | Parse le XML de nmap → auto-remplit hôtes/services |
nuclei_parse | Parse le JSON de Nuclei → crée les vulnérabilités avec leur sévérité |
cme_parse | Parse la sortie de NetExec → met à jour identifiants/accès/hôtes |
gobuster_parse | Parse la sortie du brute-force de répertoires → classe les découvertes |
bloodhound_parse | Parse le JSON de SharpHound → remplit le modèle AD |
sqlmap_parse | Parse la sortie de sqlmap → extrait les points d'injection |
xss_detect | Analyse les réponses pour détecter les XSS réfléchis/stockés |
jwt_analyze | Décode les JWT, vérifie alg:none/HMAC faible/expiration |
cred_spray | Planifie la pulvérisation d'identifiants sur tous les services découverts |
scope_check | Validation du périmètre CIDR/joker |
attack_path_suggest | Recherche de chemins basée sur les coûts à travers le graphe de relations |
tunnel_manage | Planifie les tunnels SSH/chisel/ligolo, suit les sessions actives |
phase_control | Gestion de phase avec portes de qualité |
report_gen | Génère des rapports de pentest en markdown/JSON |
state_update | Enregistre les découvertes (30+ types de mutation, mode batch) |
state_query | Interroge l'état de l'engagement (20+ types de requêtes) |
| Commande | Ce qu'elle fait |
|---|
/status | Tableau de bord de l'engagement — hôtes, vulnérabilités, identifiants, phase |
/targets | Tableau des hôtes et services |
/vulns | Découvertes par sévérité |
/creds | Identifiants découverts |
/scope | Voir/modifier le périmètre cible |
/phase | Gestion de phase |
/mode | Basculer auto / free / guidé |
/pause | Pause sur découvertes (jamais / toujours / point de contrôle) |
/report | Générer un rapport de pentest |