An autonomous penetration-testing framework for Claude Code β with scope safety that's enforced, not requested.
One command runs a whole engagement β recon β enum β bounded exploit β verify β report β while making it technically impossible for the agent to touch a target outside your authorized scope. Enforcement lives in a git-tracked hook and a CLI choke point the agent can't disable, so scope holds even if the model is jailbroken, confused, or wrong. Other "AI pentest" tools ask the agent to behave; Boundhound removes the choice.
- π― One command β
/fullscanruns the full chain autonomously and hands you a submittablereport.md(or drive each phase by hand). - π‘οΈ Enforced scope β every tool call goes through one choke point (
bh-exec) that refuses anything outsidescope.yaml, before a packet leaves. APreToolUsehook blocks any bypass. - 𧨠Bounded exploitation β sqlmap in proof-of-vulnerability mode; dump / OS-shell / file flags hard-denied by two layers.
- β»οΈ Resilient β
--resumea killed scan,--max-retriestransient failures (same bounded command),--max-stepsceiling. A DENY is never retried. - π Burp-safe β Burp runs host-side and bypasses the container, so a second deny-by-default guard scope-checks every Burp MCP call.
- π 81 technique playbooks β a self-authored
skills-library/across 11 categories, each wired to the tools + safety model. - π§Ύ Fully audited β every run and every denial lands in a per-engagement
audit.log.
# install as a Claude Code plugin
/plugin marketplace add tuktukerz/boundhound
/plugin install boundhound@tuktukerz-marketplace
/engagement acme # scaffold engagement, then fill in scope.yaml
/fullscan # run the whole engagement β output/report/report.md
# non-intrusive pass: /fullscan --no-exploit$ /fullscan --no-exploit
[recon] subfinder β 14 subdomains Β· httpx β 6 live Β· nmap β open ports
[recon] DENY blog.partner.io (out of scope) β skipped + audited
[enum] ffuf β /admin /.git/ Β· nuclei β 3 findings
[report] output/report/report.md (2 medium Β· 4 info)
# Penetration Test Report β acme
## Executive summary
| critical | high | medium | low | info |
|:-:|:-:|:-:|:-:|:-:|
| 0 | 0 | 2 | 0 | 4 |
### [MEDIUM] http-service β exposed .git/ at shop.acme.com
Remediation: block access to version-control metadata at the web server.| Area | Tools / command | Bound |
|---|---|---|
| Recon | subfinder Β· httpx Β· nmap β /recon |
deny-by-default scope; nmap non-aggressive |
| Enumeration | ffuf Β· nuclei β /enum |
concurrency & rate caps |
| Exploitation | sqlmap β /exploit |
proof-of-vuln only; weaponizing flags denied |
| Verification | /verify |
re-runs the same bounded check, never escalates |
| Reporting | /report |
pure renderer; never fabricates a finding |
| Orchestration | /fullscan |
chains all phases; --resume / retry / budgets |
| Burp Suite | /burp Β· bh-burp-scope |
separate deny-by-default MCP choke point |
Everything runs through the same enforced bh-exec choke point (or, for Burp, its own guard) β the framework can't do anything a manually-run, scope-checked command couldn't.
User / Agent
β direct call to a network tool? βββΊ PreToolUse hook βββΊ DENY (bypass blocked)
βΌ
bh-exec βββΊ scope check βββΊ out of scope? βββΊ DENY + audit
β safety check ββΊ destructive/DoS? ββΊ DENY + audit
βΌ
docker exec (bounded tool) βββΊ audit ALLOW
Enforcement is a git-tracked hook + a CLI choke point β a layer the agent doesn't control. Scope is deny-by-default and fail-closed: no active engagement, a broken scope.yaml, or an unresolvable target all refuse rather than run.
skills-library/ holds 81 self-authored technique playbooks across 11 categories (web-injection, access-control, auth/session, API, recon/OSINT, infra, info-disclosure, business-logic, client-side, methodology). Each names the bounded tool(s) and command(s) it uses; where a technique has no bounded tool yet, it says so and gives the safe in-scope path instead of inventing a capability. All are machine-validated (test/skill-library.test.mjs). These are source playbooks β the active per-phase skills under .claude/skills/ are promoted deliberately.
Promote/demote a playbook with bh-skill (or /skill): node bin/bh-skill.mjs list|promote <slug>|demote <slug>. Promoting copies skills-library/<slug>/ into .claude/skills/<slug>/; the 8 core pipeline skills can't be demoted.
bun install
bun test # 1340 pass Β· 1 skip (docker smoke) Β· 0 fail
bin/bh-container up smoke # start the tool container
node bin/bh-engagement.mjs acme # scaffold an engagement β fill scope.yaml
node bin/bh-exec.mjs curl --target api.acme.io -- -I # run a tool through the choke pointDev mode keeps state in the checkout ($CLAUDE_PROJECT_DIR); installed as a plugin it uses ${CLAUDE_PLUGIN_DATA}. Pass --data-dir <path> to override.
bin/ bh-exec (choke point) Β· per-phase CLIs Β· bh-fullscan Β· bh-burp-scope
hooks/ scope-guard.mjs (PreToolUse enforcement + Burp MCP guard)
src/ scope Β· safety Β· guard Β· audit Β· recon/enum/exploit/verify/report Β· orchestrate
.claude/ active skills + commands (/engagement /recon β¦ /fullscan /burp)
skills-library/ 81 technique playbooks (source)
docker/ lean multi-stage image (subfinder/httpx/nmap/ffuf/nuclei/sqlmap)
docs/ ARCHITECTURE.md + per-phase specs & plans
- Exploitation is proof-of-vulnerability, not weaponization β it confirms a flaw is real; it doesn't dump data, get a shell, or touch the filesystem.
- Boundhound doesn't drive Burp on its own yet β it enforces the safety layer around Burp MCP; the live drive-through needs your Burp Pro and is validated separately.
- No mass / credential-flood / DoS β the safety layer caps request rates and denies DoS-shaped activity.
- One active engagement per install (shared
.active); running several concurrently isn't supported yet.
Built for authorized engagements, bug-bounty programs, and your own lab.
- Safety before capability β no offensive tool ships before the layer bounding it passes its tests.
- Enforcement, not instruction β what must hold true is enforced by code/hooks, not asked of the agent.
- Authored, not imported β every skill is written for Boundhound's own config and safety model.
- TDD + adversarial review β each module is written test-first and reviewed by an independent pass before it lands.
The full phase-by-phase design story and roadmap live in docs/ARCHITECTURE.md. Built iteratively with Claude Code β spec β plan β subagent-driven implementation, each step reviewed before moving on.