pentestagent

Framework de agente de teste de segurança com IA que pode operar como ou consumir servidores MCP, com ferramentas Docker/Kali. Use apenas contra sistemas para os quais você tenha autorização explícita de teste.

Documentação

PentestAgent Logo

PentestAgent

Testes de Penetração com IA

GH05TCREW%2Fpentestagent | Trendshift

Python License Version Security MCP

https://github.com/user-attachments/assets/a67db2b5-672a-43df-b709-149c8eaee975

Requisitos

  • Python 3.10+
  • Chave de API para OpenAI, Anthropic ou outro provedor suportado pelo LiteLLM

Instalação

# Clone
git clone https://github.com/GH05TCREW/pentestagent.git
cd pentestagent

# Setup (creates venv, installs deps)
.\scripts\setup.ps1   # Windows
./scripts/setup.sh    # Linux/macOS

# Or manual
python -m venv venv
.\venv\Scripts\Activate.ps1  # Windows
source venv/bin/activate     # Linux/macOS
pip install -e ".[all]"
playwright install chromium  # Required for browser tool

Configuração

Crie o arquivo .env na raiz do projeto:

ANTHROPIC_API_KEY=sk-ant-...
PENTESTAGENT_MODEL=claude-sonnet-4-20250514

Ou para OpenAI:

OPENAI_API_KEY=sk-...
PENTESTAGENT_MODEL=gpt-5

Qualquer modelo suportado pelo LiteLLM funciona.

Usando um relay / base de API personalizada

Aponte o PentestAgent para qualquer endpoint compatível com OpenAI via OPENAI_API_BASE:

OPENAI_API_KEY=your-relay-token
OPENAI_API_BASE=https://relay.example/v1
PENTESTAGENT_MODEL=openai/<model-name-on-your-relay>

Para endpoints compatíveis com Anthropic, use ANTHROPIC_API_BASE. Consulte .env.example para notas completas sobre provedores e opções de embeddings.

Execução

pentestagent                      # Launch TUI
pentestagent -t 192.168.1.1       # Launch with target
pentestagent tui --docker         # Run tools in Docker container

Docker

Execute as ferramentas dentro de um contêiner Docker para isolamento e ferramentas de pentest pré-instaladas.

Opção 1: Baixar imagem pré-construída (mais rápida)

# Base image with nmap, netcat, curl
docker run -it --rm \
  -e ANTHROPIC_API_KEY=your-key \
  -e PENTESTAGENT_MODEL=claude-sonnet-4-20250514 \
  ghcr.io/gh05tcrew/pentestagent:latest

# Kali image with metasploit, sqlmap, hydra, etc.
docker run -it --rm \
  -e ANTHROPIC_API_KEY=your-key \
  ghcr.io/gh05tcrew/pentestagent:kali

Opção 2: Compilar localmente

# Build
docker compose build

# Run
docker compose run --rm pentestagent

# Or with Kali
docker compose --profile kali build
docker compose --profile kali run --rm pentestagent-kali

O contêiner executa o PentestAgent com acesso a ferramentas de pentest Linux. O agente pode usar nmap, msfconsole, sqlmap, etc. diretamente via a ferramenta de terminal.

Requer Docker instalado e em execução.

Modos

O PentestAgent possui três modos, acessíveis por comandos na TUI:

ModoComandoDescrição
Assist/assist <task>Uma única instrução pontual, com execução de ferramentas
Agent/agent <task>Execução autônoma de uma única tarefa
Crew/crew <task>Modo multiagente. O orquestrador cria agentes especializados
Interact/interact <task>Modo interativo. Converse com o agente; ele ajudará e orientará durante o procedimento de pentest

Comandos da TUI

/assist <task>    One single-shot instruction.
/agent <task>     Run autonomous agent on task
/crew <task>      Run multi-agent crew on task
/interact <task>  Chat with the agent in guided mode
/target <host>    Set target
/tools            List available tools
/notes            Show saved notes
/report           Generate report from session
/memory           Show token/memory usage
/prompt           Show system prompt
/conversations    Browse and restore saved conversations
/mcp <list/add>   Visualizes or adds a new MCP server.
/spawn [target] [--scope CIDR] [--model M] [--no-rag] [--no-mcp]
                  Manually spawn a child MCP agent from the TUI.
/despawn <server_name>
                  Terminate and remove a previously spawned child agent.
/clear            Clear chat and history
/quit             Exit (also /exit, /q)
/help             Show help (also /h, /?)

Pressione Esc para interromper um agente em execução. Ctrl+Q para sair.

Playbooks

O PentestAgent inclui playbooks de ataque pré-construídos para testes de segurança black-box. Os playbooks definem uma abordagem estruturada para avaliações de segurança específicas.

Executar um playbook:

pentestagent run -t example.com --playbook thp3_web

Playbook Demo

Ferramentas

O PentestAgent inclui ferramentas integradas e suporta MCP (Model Context Protocol) para extensibilidade.

Ferramentas integradas: terminal, browser, notes, web_search (requer TAVILY_API_KEY), spawn_mcp_agent

Auto-criação de Agentes (spawn_mcp_agent)

spawn_mcp_agent é uma ferramenta integrada que permite a um agente em execução criar uma cópia filha de si mesmo como um servidor MCP subordinado conectado via stdio. O processo filho é totalmente isolado — seu próprio runtime, cliente LLM, histórico de conversa e armazenamento de notas — e seu conjunto completo de ferramentas é injetado de volta nas ferramentas disponíveis do agente pai após a criação.

Isso permite fluxos de trabalho hierárquicos e multiagente sem orquestração externa: o agente se auto-organiza delegando subtarefas com escopo definido a filhos que ele cria sob demanda.

ArgumentoTipoPadrãoDescrição
targetstring—Alvo de pentest a ser passado ao filho
scopestring[]—Alvos/CIDRs no escopo para o filho
modelstringvariável de ambienteIdentificador do modelo, substitui PENTESTAGENT_MODEL no filho
no_ragbooleanfalseIgnora a inicialização do mecanismo RAG no filho
no_mcpbooleantrueIgnora conexões externas de servidores MCP no filho (recomendado)

Após spawn_mcp_agent retornar, as ferramentas do filho (run_task, run_task_async, await_tasks, etc.) ficam disponíveis na próxima chamada de ferramenta. O nome do servidor do filho é atribuído automaticamente (ex.: child_agent_1) e retornado no resultado.

Exemplo — orquestrador delegando reconhecimento paralelo a dois filhos:

# Turn 1: spawn two isolated child agents
spawn_mcp_agent  target="10.0.1.0/24"  scope=["10.0.1.0/24"]
spawn_mcp_agent  target="10.0.2.0/24"  scope=["10.0.2.0/24"]

# Turn 2: children's tools are now available — delegate work asynchronously
child_agent_1__run_task_async  task="Full port scan and service enumeration"
child_agent_2__run_task_async  task="Full port scan and service enumeration"

# Turn 3: wait and collect
child_agent_1__await_tasks  task_ids=["<id1>"]  timeout_seconds=600
child_agent_2__await_tasks  task_ids=["<id2>"]  timeout_seconds=600
child_agent_1__get_task_result  task_id="<id1>"
child_agent_2__get_task_result  task_id="<id2>"

Controle Manual de Agentes Filhos (/spawn e /despawn)

Além da ferramenta automática spawn_mcp_agent, a TUI expõe dois comandos que permitem criar e encerrar agentes filhos manualmente, independentemente de um loop de agente em execução.

/spawn

/spawn [target] [--scope CIDR ...] [--model MODEL] [--no-rag] [--no-mcp]

Cria um novo agente MCP filho via stdio e o anexa à sessão atual. O filho aparece como um painel de terminal recolhível na barra lateral da TUI e suas ferramentas ficam disponíveis ao agente pai na próxima chamada de ferramenta.

ArgumentoDescrição
targetAlvo de pentest a ser passado ao filho (posicional ou --target)
--scope CIDRUm ou mais CIDRs no escopo (repetível)
--model MODELSubstitui o modelo do agente filho
--no-ragIgnora a inicialização do mecanismo RAG no filho
--no-mcpIgnora conexões externas de servidores MCP no filho

Exemplos:

/spawn 10.0.1.1
/spawn 10.0.1.1 --scope 10.0.1.0/24 --model claude-sonnet-4-20250514
/spawn --target 10.0.1.1 --scope 10.0.1.0/24 --no-rag

/despawn

/despawn <server_name>

Encerra o agente filho identificado por server_name (ex.: child_agent_1), remove seu painel de terminal da TUI e desconecta suas ferramentas da sessão pai. Use /mcp list para ver os nomes de todos os agentes filhos ativos.

Exemplo:

/despawn child_agent_1

Otimizador de Ferramentas RAG do MCP

Quando um servidor MCP expõe mais de 128 ferramentas, o PentestAgent substitui automaticamente o catálogo completo por uma única ferramenta mcp_<server>_rag_optimizer. Essa meta-ferramenta usa similaridade de embeddings (via LiteLLM, padrão text-embedding-3-small) para recuperar as ferramentas mais relevantes para a tarefa em questão e as injeta na próxima rodada do agente — mantendo a janela de contexto gerenciável sem perder acesso ao conjunto completo de ferramentas.

O otimizador é transparente para o agente: ele chama a ferramenta RAG com consultas em linguagem natural focadas descrevendo o que precisa, e as ferramentas correspondentes ficam disponíveis na próxima rodada para chamada direta.

Orientações de uso para o agente:

ArgumentoTipoPadrãoDescrição
queriesstring[](obrigatório)Uma consulta focada por capacidade necessária. Quanto mais específica, maior a precisão
top_kinteiro20Ferramentas a recuperar por consulta (máx. 128). Os resultados são mesclados e deduplicados

Os embeddings são calculados uma vez na inicialização e armazenados em cache, portanto consultas repetidas são rápidas. O otimizador é construído por servidor, então cada servidor MCP com um catálogo grande recebe seu próprio índice independente.

Dica: Passe uma consulta por capacidade distinta em vez de combinar tudo em uma única consulta. ["list open ports on a host", "get process memory usage"] recupera melhores resultados do que ["list ports and memory and CPU"].

Integração MCP

O PentestAgent suporta MCP (Model Context Protocol) em duas direções: consumindo servidores MCP externos como fontes de ferramentas, e expondo-se como um servidor MCP para que clientes externos (Claude Desktop, Cursor, etc.) possam acionar o PentestAgent programaticamente.


Consumindo Servidores MCP Externos (Modo Cliente)

Configure mcp_servers.json para conectar o PentestAgent a quaisquer servidores MCP externos. Exemplo de configuração:

{
  "mcpServers": {
    "nmap": {
      "command": "npx",
      "args": ["-y", "gc-nmap-mcp"],
      "env": {
        "NMAP_PATH": "/usr/bin/nmap"
      }
    }
  }
}

Expondo o PentestAgent como Servidor MCP (Modo Servidor)

O PentestAgent pode ser executado como um servidor MCP, permitindo que qualquer cliente compatível com MCP envie tarefas, inspecione resultados e controle o agente remotamente. Dois transportes são suportados:

STDIO — para clientes locais (ex.: Claude Desktop, Cursor):

pentestagent mcp_server --type stdio
pentestagent mcp_server --type stdio --target 192.168.1.1 --scope 192.168.1.0/24
pentestagent mcp_server --type stdio --model claude-sonnet-4-20250514 --docker

SSE (HTTP) — para clientes remotos ou em rede:

pentestagent mcp_server --type sse
pentestagent mcp_server --type sse --host 0.0.0.0 --port 8080
pentestagent mcp_server --type sse --target 10.0.0.1 --scope 10.0.0.0/24 --docker

O transporte SSE expõe um único endpoint /mcp que suporta POST (requisições), GET (fluxo SSE persistente para push iniciado pelo servidor) e DELETE (encerramento de sessão). As sessões são rastreadas via cabeçalho Mcp-Session-Id.

Todas as flags de mcp_server:

FlagPadrãoDescrição
--type(obrigatório)Transporte: stdio ou sse
--host0.0.0.0Host de bind do SSE
--port8080Porta de bind do SSE
--targetnenhumAlvo principal de pentest (IP / hostname)
--scope[]Alvos/CIDRs no escopo (separados por espaço)
--modelvariável de ambienteIdentificador do modelo, substitui PENTESTAGENT_MODEL
--dockerfalseUsa DockerRuntime em vez de LocalRuntime
--no-ragfalseIgnora a inicialização do mecanismo RAG
--no-mcpfalseIgnora conexões externas de servidores MCP
Exemplo: configuração do Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "pentestagent": {
      "command": "pentestagent",
      "args": ["mcp_server", "--type", "stdio"]
    }
  }
}

Referência de Ferramentas do Servidor MCP

Ao atuar como servidor MCP, o PentestAgent expõe as seguintes ferramentas:

Status e Configuração do Servidor

FerramentaDescrição
get_server_statusStatus do servidor em tempo real: prontidão, contagens de tarefas por estado, alvo/escopo principal, tamanho do armazenamento de memória
get_configConfiguração principal do agente: alvo, escopo, iterações máximas, lista de ferramentas
update_configAtualiza alvo, escopo ou iterações máximas para todas as tarefas subsequentes

Execução de Tarefas

FerramentaDescrição
run_taskEnvia uma tarefa e bloqueia até que ela seja concluída. Retorna resultado completo, ferramentas usadas e snapshot de notas
run_task_asyncEnvia uma tarefa e retorna imediatamente com um task_id. Consulte com get_task_status

Inspeção de Tarefas

FerramentaDescrição
list_tasksLista todas as tarefas com status, alvo e resumo. Filtrável por status
get_task_statusConsulta o status atual e a prévia do resultado de uma tarefa
get_task_resultResultado completo da tarefa: saída final, etapas de raciocínio, todas as chamadas de ferramentas e resultados, snapshot de notas
await_tasksBloqueia até que um conjunto de IDs de tarefas assíncronas tenha terminado (consulta a cada 500 ms, timeout configurável)

Controle de Tarefas

FerramentaDescrição
cancel_taskCancela uma tarefa em execução ou pendente por ID

Gerenciamento de Ferramentas

FerramentaDescrição
list_toolsLista todas as ferramentas disponíveis ao agente
enable_toolHabilita uma ferramenta nomeada no agente principal
disable_toolDesabilita uma ferramenta nomeada no agente principal

Histórico de Conversa

FerramentaDescrição
get_conversation_historyRetorna o histórico de mensagens de uma tarefa ou do agente principal. Suporta um parâmetro limit
reset_conversationLimpa o histórico de conversa de uma tarefa ou do agente principal

Memória

FerramentaDescrição
store_memoryPersiste um par chave-valor no armazenamento de memória em processo
retrieve_memoryRecupera por chave exata, busca por substring ou lista todas as chaves
clear_memoryExclui uma chave específica ou apaga toda a memória com scope='all'

Observabilidade

FerramentaDescrição
get_logsRetorna logs de execução recentes, opcionalmente filtrados por nível (info / warning / error)
get_metricsMétricas de runtime: contagens de tarefas, taxa de sucesso, total de chamadas de ferramentas, tamanhos de memória e logs

Exemplo de Fluxo de Trabalho com Tarefas Assíncronas

Para tarefas de reconhecimento de longa duração, use o padrão assíncrono:

# 1. Submit tasks without blocking
run_task_async  task="Enumerate subdomains of example.com"  target="example.com"
run_task_async  task="Run nmap SYN scan on example.com"     target="example.com"

# 2. Block until both finish (up to 5 minutes)
await_tasks  task_ids=["<id1>", "<id2>"]  timeout_seconds=300

# 3. Retrieve full results
get_task_result  task_id="<id1>"
get_task_result  task_id="<id2>"

Gerenciamento de Ferramentas via CLI

pentestagent tools list         # List all tools
pentestagent tools info <name>  # Show tool details
pentestagent mcp list           # List MCP servers
pentestagent mcp add <name> <command> [args...]  # Add MCP server
pentestagent mcp test <name>    # Test MCP connection

Controles de Histórico de Conversa

Cada mensagem do usuário na TUI expõe dois botões de ação inline: rewind e fork.

Rewind

Clique em rewind em qualquer mensagem do usuário para truncar a conversa de volta ao ponto imediatamente anterior àquela mensagem — tanto na interface quanto no histórico em memória do agente. Use para tentar uma consulta do zero sem salvar o caminho descartado.

Fork

Clique em >> fork em qualquer mensagem do usuário para ramificar a conversa a partir daquele ponto:

  1. A conversa completa atual é salva no armazenamento de conversas e um ID curto de snapshot é exibido.
  2. A conversa é então truncada até o ponto imediatamente anterior à mensagem selecionada (mesmo comportamento do rewind). Isto permite que você tente uma abordagem alternativa a partir de qualquer ponto, mantendo o thread original recuperável via /conversations.

Histórico de Conversas

O PentestAgent salva automaticamente todas as conversas para que você possa revisar, comparar e restaurar sessões anteriores.

Salvamento automático é acionado após cada tarefa de /assist, /agent, /crew e /interact, e antes de /clear. Até 20 conversas são mantidas; as mais antigas são removidas automaticamente.

Local de armazenamento: workspaces/<active>/memory/conversations/ quando um workspace está ativo, ou conversations/ na raiz do projeto caso contrário. Cada conversa é um arquivo JSON.

Navegue e restaure com /conversations:

O comando /conversations abre um modal de painel dividido dentro do TUI:

  • Painel esquerdo — lista de conversas salvas com título e data.
  • Painel direito — pré-visualização de metadados mais as primeiras 5 mensagens (mensagens do usuário em azul, respostas do agente em verde, chamadas de ferramentas em amarelo, resultados de ferramentas em cinza). Um contador mostra quantas mensagens adicionais existem.
imagen

Selecione uma conversa e pressione Restaurar para recarregá-la na sessão atual, ou Fechar para dispensar o modal.

Conhecimento

  • RAG: Coloque metodologias, CVEs ou wordlists em pentestagent/knowledge/sources/ para injeção automática de contexto.
  • Notas: Os agentes salvam descobertas em loot/notes.json com categorias (credential, vulnerability, finding, artifact). As notas persistem entre sessões e são injetadas no contexto do agente.
  • Shadow Graph: No modo Crew, o orquestrador constrói um grafo de conhecimento a partir das notas para derivar insights estratégicos (ex.: "Temos credenciais para o host X").

Estrutura do Projeto

pentestagent/
  agents/         # Agent implementations
  config/         # Settings and constants
  interface/      # TUI and CLI
  knowledge/      # RAG system and shadow graph
  llm/            # LiteLLM wrapper
  mcp/            # MCP client and server configs
  playbooks/      # Attack playbooks
  runtime/        # Execution environment
  tools/          # Built-in tools

Desenvolvimento

pip install -e ".[dev]"
pytest                       # Run tests
pytest --cov=pentestagent    # With coverage
black pentestagent           # Format
ruff check pentestagent      # Lint

Legal

Use apenas contra sistemas para os quais você tem autorização explícita para testar. Acesso não autorizado é ilegal.

Licença

MIT