
ブラックボックスのセキュリティテストのためのAIエージェントフレームワーク。自律型マルチエージェントオーケストレーション、組み込みのペンテストツール、バグバウンティ・レッドチーム・ペネトレーションテストのワークフロー向けMCP統合を備えています。
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 がサポートするモデル であれば何でも動作します。
OPENAI_API_BASE を使うと、OpenAI 互換の任意のエンドポイントに PentestAgent を向けられます:
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
コンテナは Linux のペンテストツールにアクセスできる状態で PentestAgent を実行します。エージェントはターミナルツール経由で nmap、msfconsole、sqlmap などを直接使用できます。
Docker がインストールされ、実行されている必要があります。
PentestAgent には、TUI のコマンドからアクセスできる3つのモードがあります:
/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 は、実行中のエージェントが stdio 経由で接続された従属 MCP サーバーとして自身の子コピーを生成できるようにする組み込みツールです。子プロセスは完全に分離されており、独自のランタイム、LLM クライアント、会話履歴、ノートストアを持ちます。生成後は、その完全なツールセットが親エージェントの利用可能なツールに注入されます。
これにより、外部オーケストレーションなしで階層的なマルチエージェントワークフローが可能になります。エージェントは、必要に応じて生成した子エージェントにスコープ付きサブタスクを委任することで自己組織化します。
spawn_mcp_agent が戻ると、子エージェントのツール(run_task、run_task_async、await_tasks など)が次のツール呼び出しで利用可能になります。子エージェントのサーバー名は自動的に割り当てられ(例: child_agent_1)、結果に返されます。
例 — オーケストレーターが2つの子エージェントに並列偵察を委任する場合:
# 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 は実行中のエージェントループとは独立して子エージェントを手動で生成・終了できる2つのコマンドを提供します。
/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 ツールを呼び出し、一致したツールは次のターンで直接呼び出せるようになります。
エージェント向けの使用ガイダンス:
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
queries | string[] | (required) | 必要な機能ごとに1つの絞り込んだクエリ。具体的なほど精度が高くなります |
埋め込みは起動時に一度だけ計算されてキャッシュされるため、繰り返しのクエリは高速です。オプティマイザーはサーバーごとに構築されるため、カタログが大きい各 MCP サーバーは独自の独立したインデックスを持ちます。
ヒント: すべてを1つのクエリにまとめるのではなく、異なる機能ごとに1つのクエリを渡します。
["list open ports on a host", "get process memory usage"]は["list ports and memory and CPU"]よりも良い結果を取得できます。
PentestAgent は MCP(Model Context Protocol)を2つの方向でサポートしています: 外部 MCP サーバーをツールソースとして利用することと、外部クライアント(Claude Desktop、Cursor など)が PentestAgent をプログラムから操作できるように、自身を MCP サーバーとして公開することです。
PentestAgent を任意の外部 MCP サーバーに接続するには mcp_servers.json を設定します。設定例:
{
"mcpServers": {
"nmap": {
"command": "npx",
"args": ["-y", "gc-nmap-mcp"],
"env": {
"NMAP_PATH": "/usr/bin/nmap"
}
}
}
}
PentestAgent は MCP サーバーとして実行でき、MCP 互換の任意のクライアントがタスクを送信し、結果を検査し、エージェントをリモートから制御できます。サポートされているトランスポートは2つです:
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 ストリーム)、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 | タスクを送信し、task_id を即座に返します。get_task_status でポーリングします |
タスク検査
| ツール | 説明 |
|---|---|
list_tasks | ステータス、ターゲット、概要を含むすべてのタスクを一覧表示。ステータスでフィルタリング可能 |
get_task_status |
タスク制御
| ツール | 説明 |
|---|---|
cancel_task | ID で実行中または保留中のタスクをキャンセル |
ツール管理
| ツール | 説明 |
|---|---|
list_tools | エージェントが利用可能なすべてのツールを一覧表示 |
enable_tool | プライマリエージェントで指定したツールを有効化 |
disable_tool | プライマリエージェントで指定したツールを無効化 |
会話履歴
| ツール | 説明 |
|---|---|
get_conversation_history | タスクまたはプライマリエージェントのメッセージ履歴を返します。limit パラメータをサポート |
reset_conversation | タスクまたはプライマリエージェントの会話履歴をクリア |
メモリ
| ツール | 説明 |
|---|---|
store_memory | プロセス内メモリストアにキーと値のペアを永続化 |
retrieve_memory | 完全一致キーでの取得、部分文字列での検索、または全キーの一覧表示 |
clear_memory | 特定のキーを削除するか、scope='all' ですべてのメモリを消去 |
可観測性
| ツール | 説明 |
|---|---|
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 の各ユーザーメッセージには、インラインの操作ボタンが2つ表示されます: rewind(巻き戻し)と fork(フォーク)。
任意のユーザーメッセージで rewind をクリックすると、そのメッセージの直前まで会話を切り詰めます(UI とエージェントのメモリ内履歴の両方)。破棄したパスを保存せずに、クエリを最初からやり直すために使用します。
任意のユーザーメッセージで >> fork をクリックすると、その時点から会話を分岐させます:
これにより、元のスレッドを /conversations で取得できるように保ちながら、任意の時点から代替アプローチを試すことができます。
PentestAgent はすべての会話を自動的に保存するため、過去のセッションを確認、比較、復元できます。
自動保存は、各 /assist、/agent、/crew、/interact タスクの後、および /clear の前に実行されます。最大20件の会話が保持され、古いものは自動的に削除されます。
保存場所: ワークスペースがアクティブな場合は workspaces/<active>/memory/conversations/、それ以外の場合はプロジェクトルートの conversations/ です。各会話は JSON ファイルです。
/conversations での閲覧と復元:
/conversations コマンドは、TUI 内に分割ペインのモーダルを開きます:
会話を選択して Restore を押すと現在のセッションに再読み込みされ、Close を押すとモーダルを閉じます。
pentestagent/knowledge/sources/ に置くと、自動的にコンテキストへ注入されます。credential、vulnerability、finding、artifact)付きで loot/notes.json に保存します。ノートはセッションをまたいで保持され、エージェントのコンテキストに注入されます。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> | ツール実行を伴う1回限りの指示 |
| Agent | /agent <task> | 単一タスクの自律実行 |
| Crew | /crew <task> | マルチエージェントモード。オーケストレーターが専門のワーカーを生成します |
| Interact | /interact <task> | インタラクティブモード。エージェントとチャットすると、ペンテスト手順中に支援・ガイドしてくれます |
| 引数 | 型 | デフォルト | 説明 |
|---|
target | string | — | 子エージェントに渡すペンテストターゲット |
scope | string[] | — | 子エージェントのスコープ内ターゲット/CIDR |
model | string | env var | モデル識別子。子エージェントの PENTESTAGENT_MODEL を上書きします |
no_rag | boolean | false | 子エージェントで RAG エンジンの初期化をスキップ |
no_mcp | boolean | true | 子エージェントで外部 MCP サーバー接続をスキップ(推奨) |
| 引数 | 説明 |
|---|
target | 子エージェントに渡すペンテストターゲット(位置引数または --target) |
--scope CIDR | スコープ内 CIDR を1つ以上(繰り返し指定可) |
--model MODEL | 子エージェントのモデルを上書き |
--no-rag | 子エージェントで RAG エンジンの初期化をスキップ |
--no-mcp | 子エージェントで外部 MCP サーバー接続をスキップ |
top_k | integer | 20 | クエリごとに取得するツール数(最大128)。結果はマージされ、重複排除されます |
| フラグ | デフォルト | 説明 |
|---|
--type | (required) | トランスポート: stdio または sse |
--host | 0.0.0.0 | SSE バインドホスト |
--port | 8080 | SSE バインドポート |
--target | none | 主要なペンテストターゲット(IP / ホスト名) |
--scope | [] | スコープ内ターゲット/CIDR(スペース区切り) |
--model | env var | モデル識別子。PENTESTAGENT_MODEL を上書きします |
--docker | false | LocalRuntime の代わりに DockerRuntime を使用 |
--no-rag | false | RAG エンジンの初期化をスキップ |
--no-mcp | false | 外部 MCP サーバー接続をスキップ |
| タスクの現在のステータスと結果プレビューをポーリング |
get_task_result | 完全なタスク結果: 最終出力、思考ステップ、すべてのツール呼び出しと結果、ノートのスナップショット |
await_tasks | 一連の非同期タスク ID がすべて完了するまでブロック(500ms ごとにポーリング、タイムアウト設定可能) |