
Фреймворк ИИ-агентов для black-box тестирования безопасности с автономной мультиагентной оркестрацией, встроенными инструментами пентеста и интеграцией MCP для рабочих процессов bug bounty, red-team и тестирования на проникновение.
https://github.com/user-attachments/assets/a67db2b5-672a-43df-b709-149c8eaee975
# 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
Создайте файл .env в корне проекта:
ANTHROPIC_API_KEY=sk-ant-...
PENTESTAGENT_MODEL=claude-sonnet-4-20250514
Или для OpenAI:
OPENAI_API_KEY=sk-...
PENTESTAGENT_MODEL=gpt-5
Подойдет любая модель, поддерживаемая LiteLLM.
Направьте PentestAgent на любой OpenAI-совместимый эндпоинт с помощью OPENAI_API_BASE:
OPENAI_API_KEY=your-relay-token
OPENAI_API_BASE=https://relay.example/v1
PENTESTAGENT_MODEL=openai/<model-name-on-your-relay>
Для Anthropic-совместимых эндпоинтов используйте ANTHROPIC_API_BASE вместо этого.
Полные примечания по провайдерам и опции эмбеддингов см. в .env.example.
pentestagent # Launch TUI
pentestagent -t 192.168.1.1 # Launch with target
pentestagent tui --docker # Run tools in Docker container
Запускайте инструменты внутри Docker-контейнера для изоляции и использования предустановленных инструментов пентеста.
# 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
# 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
Контейнер запускает PentestAgent с доступом к Linux-инструментам пентеста. Агент может использовать nmap, msfconsole, sqlmap и т.д. напрямую через терминальный инструмент.
Требуется установленный и запущенный Docker.
У PentestAgent есть три режима, доступных через команды в 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, /?)
Нажмите Esc, чтобы остановить запущенного агента. Ctrl+Q для выхода.
PentestAgent включает готовые атакующие плейбуки для тестирования безопасности методом черного ящика. Плейбуки задают структурированный подход к конкретным оценкам безопасности.
Запуск плейбука:
pentestagent run -t example.com --playbook thp3_web

PentestAgent включает встроенные инструменты и поддерживает MCP (Model Context Protocol) для расширения функциональности.
Встроенные инструменты: terminal, browser, notes, web_search (требуется TAVILY_API_KEY), spawn_mcp_agent
spawn_mcp_agent)spawn_mcp_agent — встроенный инструмент, который позволяет запущенному агенту породить собственную дочернюю копию в качестве подчиненного MCP-сервера, подключенного через stdio. Дочерний процесс полностью изолирован — у него собственный рантайм, LLM-клиент, история диалога и хранилище заметок, — а после порождения полный набор его инструментов внедряется в доступные инструменты родительского агента.
Это позволяет реализовывать иерархические мультиагентные рабочие процессы без внешней оркестрации: агент самоорганизуется, делегируя ограниченные по области подзадачи дочерним агентам, которых порождает по требованию.
После возврата из spawn_mcp_agent инструменты дочернего агента (run_task, run_task_async, await_tasks и т.д.) становятся доступны при следующем вызове инструмента. Имя сервера дочернего агента назначается автоматически (например, child_agent_1) и возвращается в результате.
Пример — оркестратор делегирует параллельную разведку двум дочерним агентам:
# 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>"
/spawn и /despawn)Помимо автоматического инструмента spawn_mcp_agent, TUI предоставляет две команды, которые позволяют вручную запускать и завершать дочерних агентов, независимо от выполняющегося цикла агента.
/spawn/spawn [target] [--scope CIDR ...] [--model MODEL] [--no-rag] [--no-mcp]
Порождает нового дочернего MCP-агента через stdio и подключает его к текущей сессии. Дочерний агент появляется в виде сворачиваемой терминальной панели на боковой панели TUI, а его инструменты становятся доступны родительскому агенту при следующем вызове инструмента.
Примеры:
/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>
Завершает дочернего агента, идентифицируемого по server_name (например, child_agent_1), удаляет его терминальную панель из TUI и отключает его инструменты от родительской сессии. Используйте /mcp list, чтобы увидеть имена всех активных на данный момент дочерних агентов.
Пример:
/despawn child_agent_1
Когда MCP-сервер предоставляет более 128 инструментов, PentestAgent автоматически заменяет весь каталог одним инструментом mcp_<server>_rag_optimizer. Этот мета-инструмент использует схожесть эмбеддингов (через LiteLLM, по умолчанию text-embedding-3-small) для поиска наиболее релевантных инструментов для текущей задачи и внедряет их в следующий ход агента — сохраняя контекстное окно управляемым без потери доступа к полному набору инструментов.
Оптимизатор прозрачен для агента: он вызывает RAG-инструмент с точечными запросами на естественном языке, описывающими то, что ему нужно, и подходящие инструменты становятся доступны на следующем ходу для прямого вызова.
Рекомендации по использованию для агента:
| Аргумент | Тип | По умолчанию | Описание |
|---|
Эмбеддинги вычисляются один раз при запуске и кэшируются, поэтому повторные запросы выполняются быстро. Оптимизатор создается для каждого сервера отдельно, поэтому каждый MCP-сервер с большим каталогом получает собственный независимый индекс.
Совет: Передавайте по одному запросу на отдельную возможность, а не объединяйте всё в один запрос.
["list open ports on a host", "get process memory usage"]даёт лучшие результаты, чем["list ports and memory and CPU"].
PentestAgent поддерживает MCP (Model Context Protocol) в двух направлениях: потребление внешних MCP-серверов в качестве источников инструментов и предоставление себя в качестве MCP-сервера, чтобы внешние клиенты (Claude Desktop, Cursor и т.д.) могли управлять PentestAgent программно.
Настройте mcp_servers.json, чтобы подключить PentestAgent к любым внешним MCP-серверам. Пример конфигурации:
{
"mcpServers": {
"nmap": {
"command": "npx",
"args": ["-y", "gc-nmap-mcp"],
"env": {
"NMAP_PATH": "/usr/bin/nmap"
}
}
}
}
PentestAgent может работать как MCP-сервер, позволяя любому MCP-совместимому клиенту отправлять задачи, просматривать результаты и удаленно управлять агентом. Поддерживаются два транспорта:
STDIO — для локальных клиентов (например, 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) — для удаленных или сетевых клиентов:
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
Транспорт SSE предоставляет единый эндпоинт /mcp, поддерживающий POST (запросы), GET (постоянный SSE-поток для push-уведомлений, инициируемых сервером) и DELETE (завершение сессии). Сессии отслеживаются через заголовок Mcp-Session-Id.
Все флаги mcp_server:
claude_desktop_config.json){
"mcpServers": {
"pentestagent": {
"command": "pentestagent",
"args": ["mcp_server", "--type", "stdio"]
}
}
}
В роли MCP-сервера PentestAgent предоставляет следующие инструменты:
Статус сервера и конфигурация
| Инструмент | Описание |
|---|---|
get_server_status | Текущий статус сервера: готовность, количество задач по состояниям, основная цель/область действия, размер хранилища памяти |
get_config | Основная конфигурация агента: цель, область действия, максимальное количество итераций, список инструментов |
update_config |
Выполнение задач
| Инструмент | Описание |
|---|---|
run_task | Отправляет задачу и блокирует выполнение до её завершения. Возвращает полный результат, использованные инструменты и снимок заметок |
run_task_async |
Просмотр задач
| Инструмент | Описание |
|---|
Управление задачами
| Инструмент | Описание |
|---|---|
cancel_task | Отменить выполняющуюся или ожидающую задачу по ID |
Управление инструментами
| Инструмент | Описание |
|---|---|
list_tools | Список всех инструментов, доступных агенту |
enable_tool | Включить указанный инструмент у основного агента |
disable_tool | Отключить указанный инструмент у основного агента |
История диалога
| Инструмент | Описание |
|---|---|
get_conversation_history | Возвращает историю сообщений для задачи или основного агента. Поддерживает параметр limit |
reset_conversation | Очищает историю диалога для задачи или основного агента |
Память
| Инструмент | Описание |
|---|---|
store_memory | Сохраняет пару ключ-значение во внутрипроцессном хранилище памяти |
retrieve_memory | Получение по точному ключу, поиск по подстроке или вывод списка всех ключей |
clear_memory | Удалить конкретный ключ или очистить всю память с помощью |
Наблюдаемость
| Инструмент | Описание |
|---|---|
get_logs | Возвращает недавние журналы выполнения, опционально отфильтрованные по уровню (info / warning / error) |
get_metrics | Метрики рантайма: количество задач, процент успеха, общее количество вызовов инструментов, размеры памяти и журналов |
Для длительных задач разведки используйте асинхронный паттерн:
# 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>"
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
Каждое пользовательское сообщение в TUI содержит две встроенные кнопки действий: rewind и fork.
Нажмите rewind на любом пользовательском сообщении, чтобы обрезать диалог до точки непосредственно перед этим сообщением — как в интерфейсе, так и в оперативной истории агента. Используйте эту функцию, чтобы повторить запрос с нуля, не сохраняя отброшенную ветку.
Нажмите >> fork на любом пользовательском сообщении, чтобы создать ответвление диалога от этой точки:
Это позволяет опробовать альтернативный подход с любой точки, сохраняя исходную ветку доступной через /conversations.
PentestAgent автоматически сохраняет каждый диалог, чтобы вы могли просматривать, сравнивать и восстанавливать прошлые сессии.
Автосохранение срабатывает после каждой задачи /assist, /agent, /crew и /interact, а также перед /clear. Хранится до 20 диалогов; более старые автоматически удаляются.
Место хранения: workspaces/<active>/memory/conversations/ при активной рабочей области, либо conversations/ в корне проекта в противном случае. Каждый диалог — это JSON-файл.
Просмотр и восстановление через /conversations:
Команда /conversations открывает модальное окно с двумя панелями внутри TUI:
Выберите диалог и нажмите Restore, чтобы загрузить его в текущую сессию, или Close, чтобы закрыть модальное окно.
pentestagent/knowledge/sources/ для автоматического внедрения в контекст.loot/notes.json с категориями (credential, vulnerability, finding, artifact). Заметки сохраняются между сессиями и внедряются в контекст агента.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
pip install -e ".[dev]"
pytest # Run tests
pytest --cov=pentestagent # With coverage
black pentestagent # Format
ruff check pentestagent # Lint
Используйте только против систем, на тестирование которых у вас есть явное разрешение. Несанкционированный доступ незаконен.
MIT
| Режим | Команда | Описание |
|---|
| Assist | /assist <task> | Однократная инструкция с выполнением инструментов |
| Agent | /agent <task> | Автономное выполнение одной задачи |
| Crew | /crew <task> | Мультиагентный режим. Оркестратор создает специализированных воркеров |
| Interact | /interact <task> | Интерактивный режим. Общайтесь с агентом, он поможет и будет сопровождать вас в процессе пентеста |
| Аргумент | Тип | По умолчанию | Описание |
|---|
target | string | — | Цель пентеста для передачи дочернему агенту |
scope | string[] | — | Цели/CIDR, входящие в область действия дочернего агента |
model | string | переменная окружения | Идентификатор модели; переопределяет PENTESTAGENT_MODEL у дочернего агента |
no_rag | boolean | false | Пропустить инициализацию RAG-движка у дочернего агента |
no_mcp | boolean | true | Пропустить подключения к внешним MCP-серверам у дочернего агента (рекомендуется) |
| Аргумент | Описание |
|---|
target | Цель пентеста для передачи дочернему агенту (позиционная или через --target) |
--scope CIDR | Один или несколько CIDR в области действия (можно повторять) |
--model MODEL | Переопределить модель для дочернего агента |
--no-rag | Пропустить инициализацию RAG-движка у дочернего агента |
--no-mcp | Пропустить подключения к внешним MCP-серверам у дочернего агента |
queries | string[] | (обязательно) | Один точечный запрос на каждую требуемую возможность. Чем конкретнее, тем выше точность |
top_k | integer | 20 | Количество инструментов, возвращаемых на запрос (максимум 128). Результаты объединяются и дедуплицируются |
| Флаг | По умолчанию | Описание |
|---|
--type | (обязательно) | Транспорт: stdio или sse |
--host | 0.0.0.0 | Хост для привязки SSE |
--port | 8080 | Порт для привязки SSE |
--target | нет | Основная цель пентеста (IP / имя хоста) |
--scope | [] | Цели/CIDR, входящие в область действия (через пробел) |
--model | переменная окружения | Идентификатор модели; переопределяет PENTESTAGENT_MODEL |
--docker | false | Использовать DockerRuntime вместо LocalRuntime |
--no-rag | false | Пропустить инициализацию RAG-движка |
--no-mcp | false | Пропустить подключения к внешним MCP-серверам |
| Обновить цель, область действия или максимальное количество итераций для всех последующих задач |
Отправляет задачу и немедленно возвращает task_id. Проверяйте статус с помощью get_task_status |
list_tasks | Список всех задач со статусом, целью и сводкой. Можно фильтровать по статусу |
get_task_status | Получить текущий статус и предпросмотр результата задачи |
get_task_result | Полный результат задачи: итоговый вывод, шаги рассуждений, все вызовы инструментов и их результаты, снимок заметок |
await_tasks | Блокирует выполнение, пока все асинхронные задачи из набора ID не завершатся (опрос каждые 500 мс, настраиваемый таймаут) |
scope='all'