Netw0rkNoob/VulnClaw
Netw0rkNoob/VulnClaw has 3,906 GitHub stars and 545 forks. GitHot measured +9 stars in 24 hours and +57 in 7 days. Last checked 2026-11-08 23:23 UTC. Last push 2026-10-30.
基于 AI Agent + MCP 工具链 + 渗透 Skill 编排, 配合大语言模型, 自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。
Measured star growth
- in 24h
- +9
- in 7 days
- +57
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README_EN.md
OriginalVulnClaw 🦞
AI-Powered Penetration Testing CLI — Speak plainly, find real bugs.
🌐 中文版: README.md
This project is a standalone AI penetration testing Agent.
Official Website: https://unclecheng-li.github.io/vulnclaw.com/
Built on LLM Agent + MCP Toolchain + optional Skill reference material, compatible with OpenAI / Anthropic / MiniMax / DeepSeek and similar models. Natural language input → automated "Recon → Vulnerability Discovery → Exploitation → Reporting".
What It Does
Give it a natural language command and watch it run a full pentest:
User: "Run a penetration test on http://target.example.com"
VulnClaw executes:
Round 1: Recon → Fingerprinting, port scan, directory enumeration
Round 2: Vulnerability Discovery → Injection points, known CVEs, misconfigs
Round 3: Exploitation → PoC verification, access obtained
Round 4: Reporting → Structured report + Python PoC script
Suitable for authorized pentests, CTF competitions, security training, and red team operations.
Features
- Model-Led Solver Engine (default) — Claude Code/Codex-style autonomous loop: the model decides the next action, tool usage, completion, user questions, or no-path termination
- Parallel Sub-Agent Fan-Out — The model can spawn multiple independent sub-agents in a single turn via
spawn_subagents; each sub-agent inherits target constraints and evidence, runs concurrently with its own lifecycle budget; sub-evidence is merged back into the parent state with unifiedeNNNrenumbering - Cold/Hot Memory Separation — Hot conversation context retains only recent complete tool-exchange groups (default 48 messages / 32K tokens); older messages are archived to rotating JSONL shards;
memory_searchretrieves relevant archived turns on demand - Unified Context Budget & Structured Compaction — All LLM call paths go through
prepare_context(), which estimates tokens (including tool schemas), triggers structured compaction at 70% of usable context, and generates a deterministic[context digest v1]summary (target/scope/verified facts/evidence references) — no LLM free-form summarization needed - TUI Sub-Agent Monitor — Real-time panel showing each sub-agent's role, status, step count, and latest progress via a private JSON-line protocol
- AgentState Evidence Memory — Tool results are stored in
AgentState.evidencewith complete raw text preserved; active context receives bounded high-signal previews by default, whileevidence_search/evidence_viewrevisit raw evidence on demand - Lightweight Correction Layer — Records repeated calls, degraded tools, timing, and new observations; repeated reads of the same evidence range are suppressed and evidence-only stalls trigger a stall guard without restoring the old stage planner
- Evidence-Level Anti-Hallucination Gate — Claims about flags/conclusions must appear verbatim in real tool output to be accepted; prevents fabricated flags
- Natural Language Driven — Describe your goal in plain English, auto-identifies phases and tools
- 13 LLM Providers — OpenAI / Anthropic / MiniMax / DeepSeek / Zhipu / Moonshot / Qwen / SiliconFlow / Doubao / StepFun / SenseTime / OpenRouter / local Ollama, one-command switch
- MCP Toolchain — 4 MCP services:
fetch/memoryrun locally out-of-the-box,chrome-devtools/burpconnect to external MCP servers for browser automation and HTTP interception - Enhanced fetch request tool — Defaults to GET, returns the full response body, and supports HTTP/HTTPS, custom method/headers/params/cookies/body/data/form/json, timeout/redirect/TLS controls; TLS verification is off by default for CTF/lab HTTPS targets
- Native Traffic Evidence Store — In-scope request/response pairs land in an append-only JSONL index under
evidence/traffic/. Built-intraffic_list/traffic_view/traffic_repeat/traffic_sitemaptools read and replay the store - AI Agent Core — OpenAI-compatible protocol + Tool Calling + autonomous pentest loop
- Structured Reasoning + Adaptive Reflection — Facts/constraints/attack chains structured and injected into prompts; failures auto-classified with L0-L4 payload escalation
- Vulnerability Detection Plugin System — Low-coupling plugin runtime + built-in read-only Web plugins, results auto-merged into reports (
vulnclaw plugins) - 50 Specialized Skills — CTF, Web, intranet, reversing, vulnerability validation, and authorized red-team knowledge; skills are exposed as optional reference indexes only, and full reference bodies are loaded only when the model explicitly calls
load_skill_reference - Encode/Decode & Crypto Tools — 29 operations (Base64/Hex/URL/AES/JWT/Morse etc.), LLM calls them directly, no guessing
- Automatic Source Rendering —
fetch/http_probe_batchautomatically prepend clean source before raw bodies when they seehighlight_file, highlighted HTML source, or noisy HTML/JS bodies;http_probe_batchdisables TLS verification by default and records full response headers so runtime clues such asX-Powered-Byare not lost; built-insource_extractremains available for revisiting saved evidence and pinning dangerous sinks, forms, inputs, and endpoints - Local Command Verification — Built-in
shell_commandsupports Codex-style local checks such asphp -rserialization tests, exactcurlrequests, andrg/Select-Stringfile searches; raw stdout/stderr are preserved in evidence, and large active-context observations use high-signal previews - Runtime Differential Probing — Built-in
runtime_diff_probehelps the model build compact local tables for regex/string-filter vs runtime-parser mismatches, including PHP serialize/unserialize lexical variants, target/local runtime version mismatch notes, and PHP5 signed-length candidates that must be verified remotely instead of being discarded due to newer local PHP behavior - Python Code Execution — Built-in
python_executetool for payload crafting and response parsing; currently still a high-risk experimental capability, not a strong isolation sandbox - Batch HTTP Probing — Built-in
http_probe_batchcompares URL/parameter/header/body/raw-URL variants in one call, preserves each raw response body in evidence, and shows the audited request surface plus high-signal response preview in model-visible output to reduce repeated LLM/tool rounds - Near-Miss Stop Guard — solve keeps the evidence gate and adds a generic
NO_PATHguard: when unresolved high-signal anchors such as source sinks, forms/parameters, request surfaces, local proof or response differentials exist, a single no-output/same-body payload attempt is not accepted as proof that the path is dead - Persistent Pentesting — Cyclic runs (100 rounds/cycle × 10 cycles = 1000 rounds), auto-reports every cycle
- Thinking Process Control —
think on/offtoggles LLM reasoning visibility - Sandbox Mode Prompting — Unlocks AI security testing capabilities, for CTF and authorized pentest scenarios
- Auto Report & PoC — Generates structured Markdown reports and runnable Python PoC scripts
- Web UI Mode —
vulnclaw weblaunches a local web interface, default127.0.0.1:7788 - Security Knowledge Base — Includes KB module and baseline seed data; retrieval augmentation being integrated
- CONTRIBUTING_EN.md — English contributing guide for international contributors
Quick Start
Installation
# Install from PyPI (recommended)
pip install vulnclaw
# Install from source
git clone https://github.com/Netw0rkNoob/VulnClaw.git
cd VulnClaw
pip install -e .
Run with Docker (optional)
The image bundles the Web UI plus runtimes (npx / uvx) for default MCP servers. All state persists in a /data volume.
cp .env.example .env # add VULNCLAW_LLM_API_KEY etc.
docker compose up --build # build the image and start the Web UI
# open http://127.0.0.1:7788
Or run a one-off CLI command:
docker run --rm -it \
-e VULNCLAW_LLM_API_KEY=sk-your-key-here \
-v vulnclaw-data:/data \
vulnclaw:latest scan <target>
⚠️
localhostinside the container refers to the container itself. To scan a host service usehost.docker.internal. See DOCKER.md.
Four-Step Launch
# 1. Select provider (auto-fills Base URL and model name)
vulnclaw config provider minimax # or openai / anthropic / deepseek / zhipu / moonshot / qwen / siliconflow / ollama
# 1.2 (optional) custom Base URL or model name
vulnclaw config set llm.base_url https://your-own-api.example.com/v1
vulnclaw config set llm.model your-model-name
# 2. Set API Key
vulnclaw config set llm.api_key sk-your-key-here
# — or sign in with ChatGPT subscription (no API key needed):
# vulnclaw login (browser sign-in; note ToS caveat)
# 3. Default: open the original CLI / REPL
vulnclaw
# 4. Optional: open the TUI workbench
vulnclaw tui
Environment Check
vulnclaw doctor
Sample output:
🦞 VulnClaw Environment Check
Python: 3.14.4
Node.js: v24.14.1
npx: installed
nmap: installed
LLM Config:
Provider: openai
Auth Mode: static
Credentials: configured
Base URL: https://api.openai.com/v1
Model: gpt-4o
MCP Services:
fetch: enabled [P0]
memory: enabled [P0]
...
✅ Ready. Run vulnclaw to start.
CLI Command Reference
$ vulnclaw --help
🦞 VulnClaw — AI-powered penetration testing CLI
Usage: vulnclaw [OPTIONS] COMMAND [ARGS]...
Commands:
run 🚀 Full pentest in one shot (defaults to the solve engine)
solve 🧩 Goal-driven solver (model-led, no fixed rounds)
persistent 🔄 Persistent pentesting (100 rounds/cycle)
recon 🔍 Reconnaissance only
scan 🔎 Vulnerability scanning
exploit 💥 Exploitation phase
report 📝 Generate report from session JSON
repl 💬 Start the classic REPL
config ⚙️ Manage config (set/get/list/provider)
plugins 🧩 Manage vulnerability detection plugins (list/info/run)
init 🔧 Initialize configuration
doctor 🏥 Check runtime environment
tui 🖥️ Open the terminal UI workbench
web 🌐 Launch local Web UI
code 🧬 Local source-code security scan (no network target)
| Command | Description | Example |
|---|---|---|
vulnclaw |
Open the original CLI / REPL by default | vulnclaw |
vulnclaw tui |
Terminal UI workbench | vulnclaw tui --target target.com |
vulnclaw repl |
Start the classic REPL | vulnclaw repl |
vulnclaw solve <target> |
Goal-driven solver (no fixed rounds) | vulnclaw solve target.com --goal "get the flag" |
vulnclaw run <target> |
Full pentest in one shot | vulnclaw run 192.168.1.1 |
vulnclaw persistent <target> |
Persistent pentesting (100 rounds/cycle) | vulnclaw persistent 192.168.1.1 |
vulnclaw recon <target> |
Reconnaissance only | vulnclaw recon target.com |
vulnclaw scan <target> |
Vulnerability scanning | vulnclaw scan target.com --ports 80,443 |
vulnclaw exploit <target> |
Exploitation phase | vulnclaw exploit target.com --cve CVE-2024-1234 |
vulnclaw report <session> |
Generate report from session JSON | vulnclaw report session_xxx.json |
vulnclaw config set <key> <value> |
Set a config value | vulnclaw config set llm.api_key sk-xxx |
vulnclaw config provider <name> |
Switch LLM provider | vulnclaw config provider minimax |
vulnclaw plugins list |
List vulnerability detection plugins | vulnclaw plugins list --stage discovery |
vulnclaw plugins info <id> |
View plugin metadata | vulnclaw plugins info builtin.web.headers |
vulnclaw plugins run <id> |
Run plugin (analysis only) | vulnclaw plugins run builtin.web.headers --input headers.json |
vulnclaw code scan <path> |
Local source-code security scan (L1 regex / L2 structural / L3 LLM optional) | vulnclaw code scan ./src --format sarif |
Usage
Mode 1: CLI / REPL (Default)
vulnclaw
No-args startup opens the 🦞 interactive shell for natural-language use:
🦞 vulnclaw> pentest 192.168.1.100 — this is my authorized lab
[*] Entering autonomous pentest mode. Press Ctrl+C to interrupt.
── Round 1 ──
[+] Target: 192.168.1.100
[+] Open ports: 22, 80, 443, 8080
[+] Web fingerprint: Apache/2.4.62
── Round 2 ──
[+] Discovered /manager/html (Tomcat Manager)
[+] Matched CVE-202X-XXXX: Apache Tomcat Auth Bypass
── Round 3 ──
[+] Vulnerability verified
🦞 192.168.1.100 | report> generate pentest report
[+] Report saved: ./reports/192.168.1.100_20260418.md
[+] PoC saved: ./pocs/CVE-202X-XXXX.py
REPL Built-in Commands:
| Command | Description |
|---|---|
target <host> |
Set pentest target |
status |
View current state |
tools |
List available MCP tools |
think on/off |
Toggle thinking process display |
mode [mode] |
Show or switch the execution approval mode (ask / auto_review / full_access) |
persistent |
Start persistent pentesting |
clear |
Clear current session |
help |
Show help |
exit / quit / q |
Exit |
Auto Pentest Trigger: Keywords like "pentest", "find flag", "bruteforce" + a target address auto-enter the multi-round autonomous loop. Ctrl+C to interrupt anytime.
Mode 2: TUI Workbench
Optional terminal UI workbench showing authorized target, check mode, runtime overview, and safety boundary — confirm scope before launching.
vulnclaw tui
vulnclaw tui --target https://target.example --mode quick --only-port 443
vulnclaw tui --dry-run --target https://target.example --mode deep --only-path /admin
The Rust workbench has configurable containers: Status on the left, Findings and Subagents stacked on the right, agent output in the center, and an input area below. Subagent data is currently unavailable.
- Drag a view title between sidebars or to reorder it. An orange preview shows the module's position and size after release; click
v/>to collapse or expand. - Drag a separator to resize neighboring containers or expanded views. Press Esc during a drag to cancel.
- The mouse wheel scrolls the view under the pointer. Click to focus, use arrow keys to scroll,
Ctrl+Left/Rightto cycle views, andCtrl+Yto copy the focused view. - An empty secondary sidebar collapses automatically. Drag a view to the workbench's right edge for an orange docking preview, then release to reopen it. The primary sidebar always keeps at least one view.
- Layout changes save automatically to
VULNCLAW_HOME/tui/layout.json(default~/.vulnclaw/tui/layout.json). The command palette grows the input area automatically. Small terminals show the required dimensions and restore the layout when enlarged.
Native text selection while mouse capture is active depends on your terminal's modifier keys; Ctrl+Y copies an individual view. On Windows terminals Ctrl+V, Shift+Insert, and the right mouse button read the system clipboard directly into the composer (Win32 API, microseconds; the platform has no bracketed paste, so pasting never depends on the terminal synthesizing keystrokes); Unix terminals paste via bracketed paste.
Common menus:
- Menu 3 — Set testing scope (host/port/path/allowed actions/blocked actions)
- Menu 7 — Environment diagnostics (full details via
vulnclaw doctor) - Menu 8 — Model/API settings (switch Provider, Base URL, Model, API Key)
Mode 3: Single Command
vulnclaw run 192.168.1.100 # full pentest
vulnclaw recon 192.168.1.100 # recon only
vulnclaw scan 192.168.1.100 --ports 80,443 # vuln scan
vulnclaw exploit 192.168.1.100 --cve CVE-2024-1234 --cmd id # exploit
vulnclaw report session.json # generate report
Mode 4: Persistent Pentesting
For long-running deep pentesting. Runs in cyclic loops:
┌──────────────────────────────────────────────┐
│ Cycle 1 (100 rounds) → auto-report → continue │
│ Cycle 2 (100 rounds) → auto-report → continue │
│ ... │
│ Until Ctrl+C or max cycles reached (default 10) │
└──────────────────────────────────────────────┘
vulnclaw persistent 192.168.1.100 # default 100 rounds/cycle × 10 cycles
vulnclaw persistent 192.168.1.100 -r 200 -c 5 # 200 rounds/cycle × 5 cycles
vulnclaw persistent 192.168.1.100 --no-report # disable auto-report
# TUI mode
vulnclaw tui --target 192.168.1.100 --mode continuous
# REPL mode
🦞 vulnclaw> persistent 192.168.1.100
Features: Cross-cycle state / Cycle reports / Graceful interrupt / Incremental discovery / Fully configurable
Mode 5: Web UI
Operate the full pentest workflow through a browser.
git clone https://github.com/Netw0rkNoob/VulnClaw.git
cd VulnClaw
pip install -e '.[web]' # install from a source checkout
# First run: build the React frontend (Node.js 18+)
cd frontend
npm install
npm run build
cd ..
vulnclaw web # launch (default 127.0.0.1:7788)
vulnclaw web --port 8080 # custom port
The published wheel does not contain the React build or its source files. Use
the source-checkout installation above for the full Web UI. If you see the
Fallback Web Shell (no full scan UI),
frontend/dist/index.html is missing. Build as above, restart vulnclaw web,
and hard-refresh. API endpoints such as /api/health still work while the SPA is unbuilt.
⚠️ By default binds to localhost only. For remote access pass
--host 0.0.0.0 --allow-remote.
Architecture
Solver Engine
VulnClaw defaults to the model-led solve engine (switch back to fixed-round with vulnclaw config set session.engine rounds).
Model-Led Loop: The framework no longer decomposes a task into forced "research directions", and it no longer schedules directory scans, JS reconnaissance, or SQLi checks by phase templates. solve provides the target, conversation context, evidence memory, and tool catalog; the model decides the next action.
| Primitive | Meaning |
|---|---|
| Model context | Target, user constraints, recent messages, evidence summaries, and executed tool calls |
| Tool catalog | fetch, browser, directory enumeration, JS recon, encode/decode, Python, shell_command, source_extract, runtime_diff_probe, skill lookup, and other capabilities exposed only as optional hands |
| Tool transcript | After tool execution, assistant tool_calls and role=tool observations are appended to model history; large outputs use high-signal previews so HTML bodies, logs, and response blobs do not repeatedly pollute active context |
| AgentState evidence | Every real tool result is stored in AgentState.evidence; raw text is preserved with evidence id/hash/size, and the model can use evidence_search / evidence_view to revisit exact content |
| High-signal memory | Source SQL, HTML forms/inputs, linked PHP/API files, JavaScript endpoints, highlight_file source, and unserialize/magic-method/dangerous-sink snippets are pinned as durable facts so later probes do not bury the actual entry point |
| Lightweight correction layer | Observes tool lifecycle only: timing, degraded failures, repeated calls, high-signal target facts, and small semantic deltas become next-turn hints; it does not plan stages or schedule tools |
| Evidence gate | FINAL: conclusions must cite or match real evidence; unsupported flags/conclusions are rejected and the model continues |
| Automatic solve report | After completion, solve generates a Markdown replay report with reasoning chain, key evidence, raw replay request, curl command, response excerpt, and evidence index |
MODEL DECIDES → optional tool call → AgentState records full raw evidence + active-context high-signal preview + correction hints
│
continue reasoning / continue tool use / ASK_USER / NO_PATH / FINAL
│
FINAL passes evidence gate → accepted; otherwise the rejection is fed back and solve continues
Context Strategy: solve keeps ordinary conversation history by default. Hot context is bounded to 48 messages / 32K tokens; when exceeded, older messages are archived to cold-memory JSONL shards and retrievable via memory_search. The unified context budget (prepare_context()) estimates tokens (including tool schemas) across all LLM call paths and triggers structured compaction at 70% of usable context, generating a deterministic [context digest v1] summary with target/scope/verified facts/evidence references. Tool output is fully stored in AgentState.evidence, while large outputs enter active context as bounded high-signal previews. The same raw output appearing again gets a same_as=eXXX reference instead of repeating the body.
Evidence-Level Anti-Hallucination Gate: Records all real tool output as the sole trusted evidence. Claims about flags/conclusions must appear in real output or cite evidence ids before they are accepted. NO_PATH is also gated by the near-miss guard: if unresolved high-signal anchors remain in evidence, the rejection reason is fed back to the model for another concrete verification step instead of stopping immediately.
Automatic Solve Report: When solve reaches the goal, VulnClaw deterministically renders a Markdown replay report from AgentState and prints it by default. It does not make another LLM call; replay packets, curl commands and response excerpts come from real fetch / http_probe_batch evidence.
Authorized Red-Team Skills: Authorized red-team detail packs from codex-redteam-mode are imported as skills/knowledge for on-demand use; jailbreak, refusal-bypass, and session-patching content is not imported.
Core Modules
| Module | File | Description |
|---|---|---|
| CLI/TUI Entry | cli/main.py + cli/tui.py |
Typer commands + REPL + TUI |
| Agent Core | agent/core.py |
AgentCore coordination entrypoint |
| Solver Engine | agent/solver.py + agent/agent_state.py |
Model-led loop + AgentState evidence / steps / completion gate |
| Sub-Agent Runtime | agent/subagent/ |
Parallel fan-out: budget, integration, merge, service, solve |
| Context Budget | agent/context_budget.py + agent/token_counter.py |
Unified token budget, structured compaction, tool-exchange grouping |
| Cold/Hot Memory | agent/memory.py + agent/context.py (ContextManager) |
Hot context bounding, cold-memory archival & retrieval |
| Reasoning / Reflection | agent/reasoning_state.py + reflexion.py |
Structured facts/constraints/attack chains + L0-L4 escalation |
| Plugin System | plugins/ |
Low-coupling vulnerability detection plugin runtime |
| Skill reference index | skills/loader.py + resolver.py |
Task-aware optional references without forced workflow injection |
| MCP Orchestration | mcp/registry.py + lifecycle.py + router.py |
Service registry + lifecycle + tool routing |
| Config | config/schema.py + settings.py |
Pydantic + YAML + 14 provider presets + SubagentConfig |
| Report Generator | report/generator.py + poc_builder.py |
Markdown reports + PoC scripts |
| Security KB | kb/store.py + retriever.py + ranking.py |
JSON storage + Chinese-aware BM25 retrieval + optional reranking |
MCP Toolchain
| MCP Service | Tools | Mode | Use Case | Status |
|---|---|---|---|---|
| fetch | 1 | Local (httpx) | HTTP/HTTPS requests, GET/POST/PUT methods, headers/params/cookies/body/json/form, API testing | Out-of-the-box |
| memory | 2 | Local (JSON) | Context memory, state persist | Out-of-the-box |
| chrome-devtools | 31+ | stdio MCP | Browser automation, screenshots, JS execution | Requires setup |
| burp | Multiple | stdio MCP | HTTP interception, replay, vuln scanning | Requires setup |
Plus built-in Agent tools (
http_probe_batch,python_execute,shell_command,source_extract,runtime_diff_probe,nmap_scan,crypto_decode,brute_force_login,load_skill_reference,evidence_list,evidence_search,evidence_view, etc.) — no MCP needed.
Chrome DevTools MCP Setup
Prerequisites: Node.js LTS (v20+) + Chrome browser
# Step 1: Start Chrome with remote debugging
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir=C:\tmp\chrome-debug
# Linux/Mac
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug
# Step 2: Enable in VulnClaw
vulnclaw config set mcp.servers.chrome-devtools.enabled true
Custom Chrome debug address — edit ~/.vulnclaw/config.yaml:
mcp:
servers:
chrome-devtools:
enabled: true
transport:
type: stdio
command: npx
args: ["-y", "chrome-devtools-mcp@latest", "--browser-url=http://127.0.0.1:9222"]
Burp Suite MCP Setup
Prerequisites: Java 11+ + Burp Suite Professional
# Step 1: Clone and build
git clone https://github.com/PortSwigger/mcp-server.git burp-mcp
cd burp-mcp
./gradlew embedProxyJar # Windows: gradlew.bat embedProxyJar
# Step 2: Load into Burp Suite → Extensions → Add → Type: Java → select burp-mcp-all.jar
# Step 3: Enable in Burp's MCP tab
# Step 4: Enable in VulnClaw
vulnclaw config set mcp.servers.burp.enabled true
Recommended config:
mcp:
servers:
burp:
enabled: true
transport:
type: stdio
command: java
args: ["-jar", "~/.vulnclaw/tools/burp-mcp-all.jar", "--sse-url", "http://127.0.0.1:9876"]
See docs/mcp-deployment.md for detailed setup instructions.
Built-in Skills
Core Skills (7)
| Skill | Description |
|---|---|
| pentest-flow | Full pentest workflow orchestration |
| recon | Information gathering |
| vuln-discovery | Vulnerability discovery |
| exploitation | Exploitation |
| post-exploitation | Post-exploitation |
| reporting | Report generation |
| waf-bypass | WAF bypass techniques |
Specialized Skills (16)
| Skill | Ref Docs | Description |
|---|---|---|
| web-pentest | 3 | Web application pentesting |
| android-pentest | 9 | Android application pentesting |
| client-reverse | 20 | Client-side reverse engineering |
| web-security-advanced | 33 | Advanced web security (injection, bypass, chains) |
| ai-mcp-security | 7 | AI/MCP security testing |
| intranet-pentest-advanced | 15 | Advanced internal network pentesting |
| pentest-tools | 16 | Pentest tool quick reference |
| rapid-checklist | 2 | Rapid validation checklists |
| crypto-toolkit | 3 | Encode/decode/crypto (29 ops) |
| ctf-web | 8 | CTF Web attacks (PHP bypass/RCE/SSTI/deserialization) |
| ctf-crypto | 6 | CTF cryptography (RSA/AES/ECC/PRNG/lattice attacks) |
| ctf-misc | 6 | CTF Misc (PyJail/BashJail/encoding chains/VM RE) |
| osint-recon | 7 | OSINT four-dimension model (server/web/domain/person) |
| cve-triage | 1 | CVE lookup and triage |
| hackerone | 1 | HackerOne bounty scope-guard |
| secknowledge-skill | 40 | Web+AI security testing knowledge base |
Skills are resolved from user input into an optional reference index. VulnClaw does not automatically inject skill bodies, phase workflows, or methodology scripts into the system prompt. Specialized skills include detailed methodology documents in references/, and the model loads them only when it chooses to call load_skill_reference.
Built-in Encode/Decode & Crypto Tool (crypto_decode)
| Category | Operations |
|---|---|
| Encoding | base64, base32, base58, hex, url, html, unicode, rot13, caesar, morse (each with encode/decode) |
| Hashing | md5, sha1, sha256, sha512 |
| Encrypt | aes_encrypt, aes_decrypt (CBC mode, PKCS7 padding) |
| JWT | jwt_decode, jwt_encode |
| Auto | auto_decode — tries all common encodings, returns matching results |
Configuration
LLM Providers
vulnclaw config provider --list # list all providers
vulnclaw config provider minimax # one-command switch
| Provider | Command | Default Model |
|---|---|---|
| OpenAI | provider openai |
gpt-5.6-sol |
| Anthropic Claude | provider anthropic |
claude-opus-5 |
| MiniMax | provider minimax |
MiniMax-M3 |
| DeepSeek | provider deepseek |
deepseek-v4-pro |
| Zhipu GLM | provider zhipu |
glm-5.3 |
| Kimi | provider moonshot |
kimi-k3 |
| Qwen | provider qwen |
qwen3.8-max |
| SiliconFlow | provider siliconflow |
deepseek-ai/DeepSeek-V4-Flash |
| Doubao | provider doubao |
doubao-seed-evolving |
| StepFun | provider stepfun |
step-3.7-flash |
| SenseTime | provider sensetime |
SenseNova-V6.5-Pro |
| OpenRouter | provider openrouter |
anthropic/claude-opus-5 |
| Ollama (local) | provider ollama |
qwen3.5:9b |
| Custom | provider custom |
manual |
CLI Configuration
vulnclaw config list # view all settings
vulnclaw config get llm.model # view single setting
vulnclaw config set llm.api_key sk-xx # set API key
vulnclaw config set session.max_rounds 30 # set max rounds (default 15)
vulnclaw config set session.show_thinking false # hide thinking process
Execution Approvals (unattended execution)
Dangerous tools (shell / python / PoC) prompt Approve this execution? [y/N] before every run by default. Three ways to change that:
# 1. Persist to config (recommended)
vulnclaw config set safety.permission_mode full_access
# 2. Current REPL session only (falls back to the config file after restart)
mode full_access # switch; without an argument, show the current mode
# 3. Single run
VULNCLAW_SAFETY_PERMISSION_MODE=full_access vulnclaw solve <target>
| Mode | Behavior |
|---|---|
ask (default) |
Every execution prompts y/N; unanswered prompts auto-deny after 300 s (safety.approval_timeout_seconds) |
auto_review |
Read-only allowlist commands (ls / cat / nmap scans, etc.) run unattended, everything else still prompts; extend via safety.trusted_commands prefixes |
full_access |
Everything runs unattended, no prompts |
⚠️ Under
full_access, target responses, page content and reports are untrusted input — prompt injection can drive unconfirmed arbitrary command execution. Reserve it for isolated labs, CTFs and throwaway VMs; for real engagements preferauto_reviewplus your own trusted prefixes.
Configurable Options
| Option | Default | Description |
|---|---|---|
llm.provider |
openai | LLM provider |
llm.api_key |
empty | API key |
llm.auth_mode |
static | static or oauth |
llm.chatgpt_auto_proxy |
false | Auto-start built-in ChatGPT bridge proxy |
llm.base_url |
per provider | API base URL |
llm.model |
per provider | Model name |
llm.temperature |
0.1 | Sampling temperature |
llm.max_tokens |
4096 | Max output tokens |
session.engine |
solve | solve (model-led) / team (role team) / rounds (legacy fixed-round) |
session.solve_max_steps |
240 | Runaway safety budget for solve; not a planned round count |
session.solve_max_directions |
3 | Deprecated compatibility field; model-led solve no longer uses research direction counts |
session.solve_max_tool_rounds |
6 | Compatibility safety cap for consecutive tool follow-ups inside one model turn; not a planned workflow length |
session.solve_auto_compact |
false | Deprecated; use context_auto_compact instead |
session.solve_compact_trigger_ratio |
0.9 | Deprecated; use context_compact_trigger_ratio instead |
session.context_auto_compact |
true | Enable automatic structured context compaction |
session.context_compact_trigger_ratio |
0.70 | Context usage ratio that triggers auto-compaction |
session.context_compact_target_ratio |
0.55 | Post-compaction target ratio of usable context |
session.context_recent_message_groups |
12 | Minimum complete message groups retained after compaction |
session.context_summary_max_tokens |
3500 | Max tokens for the structured context digest |
session.context_output_reserve_tokens |
0 | Output token reserve (0 = auto: min(max_tokens, 8192)) |
session.context_compaction_mode |
structured | Compaction strategy (only structured supported) |
session.context_hot_max_messages |
48 | Max messages retained in hot conversation memory |
session.context_hot_max_tokens |
32000 | Approximate token cap for hot conversation memory |
session.memory_search_max_chars |
6000 | Max characters returned by one cold-memory search |
session.memory_archive_max_bytes |
67108864 | Rotate cold-memory JSONL shard after this many bytes |
session.memory_archive_max_files |
8 | Max cold-memory JSONL shards retained per output directory |
subagent.enabled |
true | Expose spawn_subagents tool to the model-led solve engine |
subagent.max_background_groups |
3 | Max concurrent sub-agent groups per solve turn |
subagent.max_concurrent_leaf_total |
4 | Max concurrent leaf agents across all groups |
subagent.max_leaf_per_group |
6 | Max leaf agents per group |
subagent.max_steps_per_leaf |
12 | Max solve steps per leaf agent |
subagent.leaf_max_tool_rounds |
4 | Max tool follow-up rounds per leaf agent |
subagent.max_model_tokens_per_solve |
8000000 | Solve-wide model-token ceiling for all descendant agents |
subagent.max_model_tokens_per_group |
1000000 | Shared token ceiling for one Leader and all its leaves |
session.solve_auto_report |
true | Generate a Markdown replay report when solve completes |
session.solve_report_show |
true | Print the generated solve report body in the terminal |
session.max_rounds |
15 | Max rounds |
session.output_dir |
./vulnclaw-output | Report output directory |
session.report_format |
markdown | Report format (markdown / html) |
session.poc_language |
python | PoC language (python / bash) |
session.language |
auto | UI language (auto / zh / en), defaults to English |
session.show_thinking |
false | Show LLM reasoning |
session.persistent_rounds_per_cycle |
100 | Rounds per cycle in persistent mode |
session.persistent_max_cycles |
10 | Max cycles (0=unlimited) |
session.persistent_auto_report |
true | Auto-report after each cycle |
session.stale_rounds_threshold |
5 | Dead-loop detection threshold |
safety.permission_mode |
ask | Execution approval policy for dangerous tools: ask (default, y/N per request), auto_review (read-only allowlist runs unattended, rest still prompt), full_access (everything runs, no prompts) |
safety.approval_timeout_seconds |
300 | How long an unanswered execution approval waits before auto-denying |
safety.trusted_commands |
empty | auto_review prefixes that skip per-request approval (e.g. nmap, git diff); entries starting with a banned name are refused |
safety.enable_python_execute |
true | Enable the python_execute built-in tool (disable for safer runs) |
safety.python_execute_max_lines |
50 | Max lines of code allowed per python_execute call |
safety.python_execute_show_warning |
true | Show a security warning before each python_execute invocation |
safety.python_execute_audit_enabled |
true | Write python_execute audit records to the local config directory |
Environment Variables
| Variable | Description |
|---|---|
VULNCLAW_LLM_PROVIDER |
LLM provider name |
VULNCLAW_LLM_API_KEY |
API key |
VULNCLAW_LLM_AUTH_MODE |
static / oauth |
VULNCLAW_LLM_CHATGPT_AUTO_PROXY |
Built-in ChatGPT proxy |
VULNCLAW_LLM_BASE_URL |
API base URL |
VULNCLAW_LLM_MODEL |
Model name |
VULNCLAW_SESSION_MAX_ROUNDS |
Max rounds |
VULNCLAW_SESSION_STALE_ROUNDS_THRESHOLD |
Dead-loop threshold |
VULNCLAW_SESSION_REASONING_STATE_ENABLED |
Structured reasoning toggle |
VULNCLAW_SESSION_REFLEXION_ENABLED |
Adaptive reflection toggle |
VULNCLAW_SESSION_REFLEXION_MAX_SAME_VULN_FAILS |
Same-vuln failure trigger threshold |
VULNCLAW_SESSION_ESCALATION_MAX_LEVEL |
Payload escalation cap (0-4) |
VULNCLAW_SESSION_PLUGIN_RUNTIME_ENABLED |
Plugin runtime toggle |
VULNCLAW_SESSION_PLUGIN_MAX_REQUESTS_PER_TARGET |
Per-target plugin request budget |
VULNCLAW_SAFETY_PERMISSION_MODE |
Execution approval mode (ask / auto_review / full_access) |
VULNCLAW_SAFETY_APPROVAL_TIMEOUT_SECONDS |
Execution approval wait seconds |
VULNCLAW_SAFETY_TRUSTED_COMMANDS |
auto_review trusted command prefixes (comma-separated) |
VULNCLAW_SUBAGENT_ENABLED |
Sub-agent fan-out toggle |
VULNCLAW_SUBAGENT_MAX_BACKGROUND_GROUPS |
Max concurrent sub-agent groups per solve turn |
VULNCLAW_SUBAGENT_MAX_CONCURRENT_LEAF_TOTAL |
Max concurrent leaf agents across all groups |
VULNCLAW_SUBAGENT_MAX_LEAF_PER_GROUP |
Max leaf agents per group |
VULNCLAW_SUBAGENT_MAX_STEPS_PER_LEAF |
Max solve steps per leaf agent |
VULNCLAW_SUBAGENT_LEAF_MAX_TOOL_ROUNDS |
Max tool follow-up rounds per leaf agent |
VULNCLAW_SUBAGENT_LEAF_TIMEOUT_SECONDS |
Per-leaf solve timeout (seconds) |
VULNCLAW_SUBAGENT_GROUP_TIMEOUT_SECONDS |
Per-group timeout (seconds) |
VULNCLAW_SUBAGENT_MAX_MODEL_TOKENS_PER_SOLVE |
Solve-wide model-token ceiling |
VULNCLAW_SUBAGENT_MAX_MODEL_TOKENS_PER_GROUP |
Per-group model-token ceiling |
Priority: Environment Variables > Config File > Built-in Defaults
Config file: ~/.vulnclaw/config.yaml.
Language
VulnClaw ships with a built-in English / 中文 (Chinese) bilingual interface. The default is English (auto mode falls back to English), so international users never hit a language wall; Chinese is fully preserved and both modes produce identical behavior.
Switch the UI language any of three ways:
| Method | Example |
|---|---|
| REPL command | /language en or /language zh (or /language auto) inside the interactive REPL |
| Environment variable | VULNCLAW_LANG=zh / VULNCLAW_LANG=en |
| Config file | session.language: auto | zh | en in ~/.vulnclaw/config.yaml |
Everything user-visible in the CLI follows the current language: REPL messages and status banners, event stream, solve reports, knowledge-base status, and LLM retry/recovery notices. Agent detection keyword tables are bilingual, so English or Chinese task phrasing is classified the same way. (Note: the web dashboard is not yet localized; that's planned separately.)
Changelog
See CHANGELOG.md for full version history.
Contributing
Contributions are welcome! Please read CONTRIBUTING_EN.md (English) or CONTRIBUTING.md (Chinese) before submitting a pull request.
The project uses a dev branch for integration — all PRs should target dev, not main.
Security Notice
Public alpha: VulnClaw is public alpha software for authorized security testing, CTFs, labs, and controlled research. It is not a production security control or a replacement for human authorization. See SECURITY.md before using or reporting security issues.
VulnClaw is intended solely for authorized security testing. Before using this tool, ensure:
- You have explicit authorization for the target system
- Scope has been confirmed in writing with the target owner
- You comply with all applicable local laws and regulations
Unauthorized penetration testing is illegal. The author assumes no liability for misuse.
License
Join the Community
Connect with security enthusiasts to share, learn, and grow together.
| Community Group | Developer Group |
|---|---|
| Join discussions and get the latest product updates and usage tips | Join us for open-source contributions and deep technical discussions |
![]() |
![]() |
| QQ Group: 954402631 | QQ Group: 1065858551 |
🦞 VulnClaw — Every pentest should follow a process.
Explore related projects
affaan-m/ECC
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
299,811 starsNousResearch/hermes-agent
The agent that grows with you
261,839 starsmultica-ai/andrej-karpathy-skills
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
231,042 starsfirecrawl/firecrawl
Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥
199,847 stars
