
AI agent framework for black-box security testing with autonomous multi-agent orchestration, built-in pentesting tools, and MCP integration for bug bounty, red-team, and penetration testing workflows.
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를 통해 PentestAgent를 모든 OpenAI 호환 엔드포인트로 연결할 수 있습니다:
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 # TUI 실행
pentestagent -t 192.168.1.1 # 대상 설정 후 실행
pentestagent tui --docker # Docker 컨테이너에서 도구 실행
격리 및 사전 설치된 침투 테스트 도구를 위해 Docker 컨테이너 내에서 도구를 실행합니다.
# 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
# metasploit, sqlmap, hydra 등이 포함된 Kali 이미지
docker run -it --rm \
-e ANTHROPIC_API_KEY=your-key \
ghcr.io/gh05tcrew/pentestagent:kali
# 빌드
docker compose build
# 실행
docker compose run --rm pentestagent
# 또는 Kali 사용 시
docker compose --profile kali build
docker compose --profile kali run --rm pentestagent-kali
컨테이너는 PentestAgent를 Linux 침투 테스트 도구에 접근 가능한 상태로 실행합니다. 에이전트는 터미널 도구를 통해 nmap, msfconsole, sqlmap 등을 직접 사용할 수 있습니다.
Docker가 설치 및 실행 중이어야 합니다.
PentestAgent는 TUI에서 명령어를 통해 접근할 수 있는 세 가지 모드를 제공합니다:
/assist <task> 단일 1회성 명령.
/agent <task> 작업에 대한 자율 에이전트 실행
/crew <task> 작업에 대한 다중 에이전트 크루 실행
/interact <task> 가이드 모드에서 에이전트와 채팅
/target <host> 대상 설정
/tools 사용 가능한 도구 목록
/notes 저장된 노트 보기
/report 세션에서 보고서 생성
/memory 토큰/메모리 사용량 표시
/prompt 시스템 프롬프트 표시
/conversations 저장된 대화 보기 및 복원
/mcp <list/add> MCP 서버 시각화 또는 추가
/spawn [target] [--scope CIDR] [--model M] [--no-rag] [--no-mcp]
TUI에서 수동으로 하위 MCP 에이전트 생성
/despawn <server_name>
이전에 생성된 하위 에이전트 종료 및 제거
/clear 채팅 및 기록 지우기
/quit 종료 (/exit, /q 도 가능)
/help 도움말 표시 (/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) 결과에 반환됩니다.
예시 — 오케스트레이터가 두 하위 에이전트에 병렬 정찰을 위임:
# 1회차: 두 개의 격리된 하위 에이전트 생성
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"]
# 2회차: 하위 에이전트 도구 사용 가능 — 비동기로 작업 위임
child_agent_1__run_task_async task="전체 포트 스캔 및 서비스 열거"
child_agent_2__run_task_async task="전체 포트 스캔 및 서비스 열거"
# 3회차: 대기 및 수집
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]
stdio를 통해 새 하위 MCP 에이전트를 생성하고 현재 세션에 연결합니다. 하위 에이전트는 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[] | (필수) | 필요한 기능당 하나의 집중 쿼리. 구체적일수록 정확도 상승 |
임베딩은 시작 시 한 번 계산되어 캐시되므로 반복 쿼리가 빠릅니다. 최적화 도구는 서버별로 구축되므로 대규모 카탈로그를 가진 각 MCP 서버는 자체 독립 인덱스를 가집니다.
팁: 모든 것을 하나의 쿼리로 결합하는 대신, 각각의 고유 기능에 대해 하나의 쿼리를 전달하세요.
["호스트의 열린 포트 나열", "프로세스 메모리 사용량 가져오기"]는["포트 및 메모리 및 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 스트림), DELETE (세션 종료)를 지원합니다. 세션은 Mcp-Session-Id 헤더를 통해 추적됩니다.
모든 mcp_server 플래그:
claude_desktop_config.json){
"mcpServers": {
"pentestagent": {
"command": "pentestagent",
"args": ["mcp_server", "--type", "stdio"]
}
}
}
PentestAgent가 MCP 서버로 작동할 때 다음 도구를 노출합니다:
서버 상태 및 설정
| 도구 | 설명 |
|---|---|
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. 차단 없이 작업 제출
run_task_async task="example.com의 하위 도메인 열거" target="example.com"
run_task_async task="example.com에 nmap SYN 스캔 실행" target="example.com"
# 2. 둘 다 완료될 때까지 대기 (최대 5분)
await_tasks task_ids=["<id1>", "<id2>"] timeout_seconds=300
# 3. 전체 결과 검색
get_task_result task_id="<id1>"
get_task_result task_id="<id2>"
pentestagent tools list # 모든 도구 나열
pentestagent tools info <name> # 도구 세부 정보 표시
pentestagent mcp list # MCP 서버 나열
pentestagent mcp add <name> <command> [args...] # MCP 서버 추가
pentestagent mcp test <name> # MCP 연결 테스트
TUI의 각 사용자 메시지에는 두 개의 인라인 액션 버튼이 있습니다: 되감기 및 분기.
사용자 메시지에서 되감기를 클릭하면 UI와 에이전트의 메모리 내 기록 모두에서 해당 메시지 직전으로 대화가 잘립니다. 버린 경로 없이 처음부터 질문을 다시 시도할 때 사용하세요.
사용자 메시지에서 >> 분기를 클릭하면 해당 지점에서 대화를 분기합니다:
이를 통해 원래 스레드를 유지하면서 모든 지점에서 대체 접근 방식을 시도할 수 있으며, /conversations를 통해 검색할 수 있습니다.
PentestAgent는 모든 대화를 자동으로 저장하여 과거 세션을 검토, 비교 및 복원할 수 있습니다.
자동 저장은 각 /assist, /agent, /crew, /interact 작업 후 및 /clear 전에 트리거됩니다. 최대 20개의 대화가 유지되며, 오래된 것은 자동으로 정리됩니다.
저장 위치: 작업 공간이 활성화된 경우 workspaces/<active>/memory/conversations/, 그렇지 않으면 프로젝트 루트의 conversations/입니다. 각 대화는 JSON 파일입니다.
/conversations로 탐색 및 복원:
/conversations 명령어는 TUI 내에서 분할 패널 모달을 엽니다:
대화를 선택하고 복원을 누르면 현재 세션으로 다시 불러오거나 닫기를 눌러 모달을 해제할 수 있습니다.
pentestagent/knowledge/sources/에 방법론, CVE 또는 워드리스트를 배치하면 자동 컨텍스트 주입이 가능합니다.loot/notes.json에 카테고리와 함께 저장합니다 (credential, vulnerability, finding, artifact). 노트는 세션 간에 유지되며 에이전트 컨텍스트에 주입됩니다.pentestagent/
agents/ # 에이전트 구현
config/ # 설정 및 상수
interface/ # TUI 및 CLI
knowledge/ # RAG 시스템 및 섀도우 그래프
llm/ # LiteLLM 래퍼
mcp/ # MCP 클라이언트 및 서버 설정
playbooks/ # 공격 플레이북
runtime/ # 실행 환경
tools/ # 내장 도구
pip install -e ".[dev]"
pytest # 테스트 실행
pytest --cov=pentestagent # 커버리지 포함
black pentestagent # 포맷팅
ruff check pentestagent # 린트
명시적 승인을 받은 시스템에 대해서만 사용하십시오. 무단 접근은 불법입니다.
MIT
| 모드 | 명령어 | 설명 |
|---|
| 보조 | /assist <task> | 도구 실행이 포함된 단일 1회성 명령 |
| 에이전트 | /agent <task> | 단일 작업의 자율 실행 |
| 크루 | /crew <task> | 다중 에이전트 모드. 오케스트레이터가 전문화된 작업자를 생성 |
| 대화형 | /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 서버 연결 건너뛰기 |
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 | LocalRuntime 대신 DockerRuntime 사용 |
--no-rag | false | RAG 엔진 초기화 건너뛰기 |
--no-mcp | false | 외부 MCP 서버 연결 건너뛰기 |
get_task_result | 전체 작업 결과: 최종 출력, 사고 과정, 모든 도구 호출 및 결과, 노트 스냅샷 |
await_tasks | 비동기 작업 ID 집합이 모두 완료될 때까지 대기 (500ms마다 폴링, 구성 가능한 타임아웃) |