
Agente autónomo de pruebas de penetración con IA que orquesta el reconocimiento, la explotación, la post-explotación y la generación de informes multiagente, con un estado de compromiso persistente.
Agente de pentesting con IA en tu terminal.
Arquitectura multiagente • Seguimiento del estado de la operación • Más de 20 proveedores de LLM
PentestCode es un agente de pentesting autónomo para tu terminal. Apúntalo a un objetivo y ejecuta las herramientas, lee la salida, actualiza su imagen de la red y decide qué hacer a continuación — igual que haría un operador. Un hard fork de OpenCode (MIT), despojado del enfoque de edición de código y reconstruido para la seguridad ofensiva.
Beta — aguanta en operaciones reales y CTFs, pero espera asperezas. Abre un issue cuando algo falle; eso es lo que lo hace mejor.
Una instrucción dentro, una cadena de ataque completa fuera:
you: "pentest 10.10.10.5, goal is domain admin"
Es metódico donde la gente se vuelve perezosa: prueba cada credencial contra cada servicio en cada host, y no se olvida de comprobar las cosas. Todo lo que aprende acaba en un estado estructurado que puedes consultar a mitad de ejecución 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 único binario autocontenido — sin Bun, Node ni runtime que instalar. Linux y macOS, x64 y arm64.
Fijar versión:
PENTESTCODE_VERSION=0.1.7 curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Directorio personalizado:
PENTESTCODE_INSTALL=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
Desde el código fuente:
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 con más de 20 proveedores a través de ai-sdk — Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama y más.
Dos cosas separan a PentestCode de un prompt de pentester pegado en una ventana de chat: un equipo de agentes y una memoria que comparten.
El diseño sigue el modelo estratega-coordinador de la investigación HPTSA — una mejora de 4.3× con respecto a un agente único:
┌─────────────┐
│ pentest │ strategist / coordinator
│ (lead) │ plans, dispatches, tracks state
└──────┬──────┘
┌───────┬───────┼───────┬───────┐
▼ ▼ ▼ ▼ ▼
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│recon ││scan- ││explo-││iden- ││post- │
│ ││ner ││iter ││tity ││explo │ ... + 7 more
└──────┘└──────┘└──────┘└──────┘└──────┘
El agente principal (pentest) divide la operación en tareas y despacha subagentes especialistas en paralelo — cada uno con su propio system prompt, permisos de herramientas y conocimiento de dominio. 13 agentes en total: recon, scanner, enumerator, exploiter, identity (AD/Kerberos), infrastructure (SNMP/IPMI/bases de datos), webapp (OWASP Top 10), post-exploit, exploit-dev, critic (verificador de falsos positivos), reporter, más agentes ocultos para la compresión de contexto y la gestión de sesiones.
Cuando el scanner encuentra un puerto, el enumerator lo ve al instante — porque cada agente lee y escribe en un único estado de la operación estructurado:
El estado sobrevive a la sesión: cierra la terminal, vuelve mañana y el agente se reanuda donde se detuvo. A su lado, un findings.md legible por humanos registra cada vulnerabilidad, credencial y obtención de acceso con marcas de tiempo — haz tail -f para ver cómo se desarrolla la operación.
18 herramientas de pentest integradas además de bash. Las herramientas de parseo son obligatorias: después de ejecutar nmap, el agente debe pasar la salida por nmap_parse en lugar de hacer grep del XML a mano, para que cada hallazgo llegue al estado de la operación.
19 paquetes de conocimiento curados, cargados bajo demanda para que solo consuman contexto cuando es relevante:
Las habilidades son markdown plano. Añade las tuyas colocando un SKILL.md en el directorio de habilidades — no se necesitan cambios de código.
Conduce una sesión en vivo con comandos de barra:
Y decide cuánta libertad le das al agente:
Los modos se combinan con el comportamiento de pausa — auto + pause always te da una ejecución autónoma que se detiene en cada hallazgo para revisión.
Un mismo toolkit para toda la seguridad ofensiva:
La configuración se encuentra en .pentestcode/pentestcode.jsonc:
{
"provider": {
"anthropic": {
"model": "claude-sonnet-4-20250514"
}
}
}
Proveedores: Anthropic, OpenAI, Google, Azure, AWS Bedrock, Ollama, Together, Groq, Fireworks, DeepSeek, Mistral y más a través de ai-sdk.
Los informes de errores de uso real son lo más valioso que puedes enviar. Ejecuta PentestCode en una máquina de CTF, un equipo de HTB o un pentest autorizado, y cuando algo salga mal — se quede en un bucle, pase por alto una ruta obvia, se atasque con la salida de una herramienta o desperdicie tokens — abre un issue con:
findings.md y/o la salida de sesión relevanteLas solicitudes de funciones y los PRs también son bienvenidos. El código está escrito en TypeScript sobre la librería Effect — consulta CLAUDE.md para la arquitectura.
MIT — consulta LICENSE.
Hard fork de OpenCode • Construido para seguridad ofensiva • Autohospedado y de código abierto
| Etapa | Qué hace el agente |
|---|
| Escaneo | nmap -sS -p- encuentra 7 puertos abiertos y parsea el XML directamente al estado de la operación |
| Reconocimiento | Puertos 88 + 389 → Controlador de dominio. Despliega tres enumeradores en paralelo (SMB, LDAP, HTTP) |
| Enumeración | Sesión SMB nula → recurso compartido con escritura. LDAP → lista de usuarios. Gobuster → directorios web |
| Ataque | AS-REP roast → hash crackeable → primera credencial válida |
| Spray | Esa credencial probada contra SMB, WinRM, LDAP y RDP en cada host conocido |
| Explotación | Punto de apoyo en WinRM → el agente de post-explotación vuelca SAM / LSA / DPAPI |
| Resultado | Hash de admin de dominio en mano — cada paso registrado con su cadena de evidencia |
| Herramienta | Qué hace |
|---|
nmap_parse | Parsear XML de nmap → rellenar hosts/servicios automáticamente |
nuclei_parse | Parsear JSON de Nuclei → crear vulnerabilidades con severidad |
cme_parse | Parsear salida de NetExec → actualizar credenciales/accesos/hosts |
gobuster_parse | Parsear salida de fuerza bruta de directorios → clasificar hallazgos |
bloodhound_parse | Parsear JSON de SharpHound → poblar el modelo AD |
sqlmap_parse | Parsear salida de sqlmap → extraer puntos de inyección |
xss_detect | Analizar respuestas en busca de XSS reflejado/almacenado |
jwt_analyze | Decodificar JWT, comprobar alg:none/HMAC débil/expiración |
cred_spray | Planificar spray de credenciales en todos los servicios descubiertos |
scope_check | Validación de alcance CIDR/comodín |
attack_path_suggest | Búsqueda de rutas basada en coste a través del grafo de relaciones |
tunnel_manage | Planificar túneles SSH/chisel/ligolo, rastrear sesiones activas |
phase_control | Gestión de fases con puertas de calidad |
report_gen | Generar informes de pentest en markdown/JSON |
state_update | Registrar hallazgos (más de 30 tipos de mutación, modo lote) |
state_query | Consultar el estado de la operación (más de 20 tipos de consulta) |
| Comando | Qué hace |
|---|
/status | Panel de la operación — hosts, vulnerabilidades, credenciales, fase |
/targets | Tabla de hosts y servicios |
/vulns | Hallazgos por severidad |
/creds | Credenciales descubiertas |
/scope | Ver/editar el alcance de objetivos |
/phase | Gestión de fases |
/mode | Cambiar auto / free / guided |
/pause | Pausar ante hallazgos (never / always / checkpoint) |
/report | Generar un informe de pentest |