pwn 0.5.737 → 0.5.739

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +0 -1
  3. data/Gemfile +2 -2
  4. data/documentation/Agent-Tool-Registry.md +17 -3
  5. data/documentation/Diagrams.md +1 -1
  6. data/documentation/How-PWN-Works.md +1 -1
  7. data/documentation/Plugin-Degradation.md +74 -0
  8. data/documentation/Swarm.md +2 -3
  9. data/documentation/What-is-PWN.md +1 -1
  10. data/documentation/pwn-REPL.md +0 -1
  11. data/documentation/pwn-ai-Agent.md +1 -1
  12. data/etc/default_skills/browser-exploitation/SKILL.md +10 -0
  13. data/etc/default_skills/firmware-unpack-emulate/SKILL.md +10 -0
  14. data/etc/default_skills/heap-exploitation/SKILL.md +11 -0
  15. data/etc/default_skills/kernel-pwn-triage/SKILL.md +11 -0
  16. data/etc/default_skills/pwn/ai/agent/swarm/SKILL.md +1 -1
  17. data/etc/default_skills/pwn/ai/agent/tools/sbom_scan/SKILL.md +45 -0
  18. data/etc/default_skills/pwn/corpus/SKILL.md +52 -0
  19. data/etc/default_skills/pwn/corpus/references/urls.md +3 -0
  20. data/etc/default_skills/pwn/engagement/SKILL.md +55 -0
  21. data/etc/default_skills/pwn/plugins/debugger/SKILL.md +62 -0
  22. data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +1 -0
  23. data/etc/default_skills/pwn/plugins/handler/SKILL.md +52 -0
  24. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +1 -0
  25. data/etc/default_skills/pwn/plugins/mitm_proxy/SKILL.md +1 -0
  26. data/etc/default_skills/pwn/plugins/nmap_it/SKILL.md +1 -0
  27. data/etc/default_skills/pwn/plugins/packet/SKILL.md +1 -0
  28. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +2 -0
  29. data/etc/default_skills/pwn/plugins/redb/SKILL.md +52 -0
  30. data/etc/default_skills/pwn/plugins/sbom/SKILL.md +48 -0
  31. data/etc/default_skills/pwn/redaction/SKILL.md +1 -0
  32. data/etc/default_skills/rop-jop-chain-construction/SKILL.md +10 -0
  33. data/etc/default_skills/windows-internals-triage/SKILL.md +10 -0
  34. data/lib/pwn/ai/agent/loop.rb +80 -11
  35. data/lib/pwn/ai/agent/prompt_builder.rb +19 -1
  36. data/lib/pwn/ai/agent/registry.rb +34 -4
  37. data/lib/pwn/ai/agent/swarm.rb +4 -5
  38. data/lib/pwn/ai/agent/tool_guard.rb +11 -4
  39. data/lib/pwn/ai/agent/tools/fuzz_campaign.rb +2 -1
  40. data/lib/pwn/ai/agent/tools/job_run.rb +9 -3
  41. data/lib/pwn/ai/agent/tools/pty_session.rb +7 -1
  42. data/lib/pwn/ai/agent/tools/sbom_scan.rb +25 -0
  43. data/lib/pwn/ai/agent/tools/shell.rb +3 -2
  44. data/lib/pwn/ai/agent/tools/swarm.rb +3 -6
  45. data/lib/pwn/ai/agent/turn_finalizer.rb +2 -2
  46. data/lib/pwn/corpus.rb +107 -0
  47. data/lib/pwn/engagement.rb +158 -0
  48. data/lib/pwn/plugins/debugger.rb +284 -0
  49. data/lib/pwn/plugins/findings.rb +14 -3
  50. data/lib/pwn/plugins/fuzz.rb +62 -0
  51. data/lib/pwn/plugins/handler.rb +171 -0
  52. data/lib/pwn/plugins/jobs.rb +55 -0
  53. data/lib/pwn/plugins/mitm_proxy.rb +37 -2
  54. data/lib/pwn/plugins/nmap_it.rb +32 -0
  55. data/lib/pwn/plugins/packet.rb +18 -0
  56. data/lib/pwn/plugins/preflight_checker.rb +6 -2
  57. data/lib/pwn/plugins/process_tube.rb +99 -8
  58. data/lib/pwn/plugins/redb.rb +210 -0
  59. data/lib/pwn/plugins/repl.rb +0 -3
  60. data/lib/pwn/plugins/sbom.rb +145 -0
  61. data/lib/pwn/plugins.rb +4 -0
  62. data/lib/pwn/redaction.rb +53 -0
  63. data/lib/pwn/reports/engagement.rb +2 -1
  64. data/lib/pwn/sessions.rb +3 -1
  65. data/lib/pwn/version.rb +1 -1
  66. data/lib/pwn.rb +2 -0
  67. data/packer/provisioners/irc.sh +1 -1
  68. data/spec/lib/pwn/ai/agent/harness_2026_09_15_spec.rb +144 -0
  69. data/spec/lib/pwn/ai/agent/registry_spec.rb +50 -0
  70. data/spec/lib/pwn/ai/agent/tools/mcp_spec.rb +31 -0
  71. data/spec/lib/pwn/ai/agent/tools/sbom_scan_spec.rb +10 -0
  72. data/spec/lib/pwn/corpus_spec.rb +23 -0
  73. data/spec/lib/pwn/engagement_spec.rb +27 -0
  74. data/spec/lib/pwn/plugins/debugger_spec.rb +27 -0
  75. data/spec/lib/pwn/plugins/handler_spec.rb +25 -0
  76. data/spec/lib/pwn/plugins/redb_spec.rb +33 -0
  77. data/spec/lib/pwn/plugins/repl_spec.rb +7 -1
  78. data/spec/lib/pwn/plugins/sbom_spec.rb +22 -0
  79. data/third_party/pwn_rdoc.jsonl +97 -4
  80. metadata +36 -9
  81. data/etc/default_skills/pwn/plugins/repl/irc/SKILL.md +0 -47
  82. data/lib/pwn/plugins/repl/irc.rb +0 -153
  83. data/spec/lib/pwn/plugins/repl/irc_spec.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af2001b2546112668f86a37ec9ab15c0bea62dd138188fd47b0441e2101a8622
4
- data.tar.gz: 9281f66b1e6563d1abe0cd057b3a8a7e6de5c9712dd58e72e188f24d51acfbfc
3
+ metadata.gz: 5a7b0a41aca20dc31343279c213c042d7362ff5c0ac59a89150a427111d5b11d
4
+ data.tar.gz: b4335ec85624abed2dbb25d8941ab1db79d73b07fb8b4eca64b90f56a96d15f7
5
5
  SHA512:
6
- metadata.gz: e8f434c799f8cb9c67fb9d8f2f329e1e172fa1664ccfaea7bcb208febe9e3d8b42372b95210c3afb551cdb5648816f033fccdacb6897e36177a17d3b3be79a5a
7
- data.tar.gz: 893e79ee5521e6c52558ea5cd69ac30c65b5a97e4a0cad3405da69bef72d48424714f971755880b8d7ca89168befe138d8edcc03636e124a09279ec7eb09c272
6
+ metadata.gz: 226c64efa942d21212d5766604c299908118f1be000093204ff1e70b31359d2931e009df8cdc0894696832240d597b687397975fad7437eea288a0254236b6d6
7
+ data.tar.gz: e2ed95fb25177d41d49cfe3efaef6cb162066eba28a7470d3256c88b74e6e8779b4daf2204836051305a8f7ec20d478fdd82526df046a13bd88eae4bbd68765c
data/.rubocop_todo.yml CHANGED
@@ -20,7 +20,6 @@ Lint/NestedMethodDefinition:
20
20
  - 'lib/pwn/plugins/repl.rb'
21
21
  - 'lib/pwn/plugins/repl/ai.rb'
22
22
  - 'lib/pwn/plugins/repl/asm.rb'
23
- - 'lib/pwn/plugins/repl/irc.rb'
24
23
  - 'lib/pwn/plugins/repl/mesh.rb'
25
24
  - 'lib/pwn/plugins/repl/vault.rb'
26
25
 
data/Gemfile CHANGED
@@ -20,7 +20,7 @@ gem 'base32', '0.3.4'
20
20
  gem 'bitcoin-ruby', '0.0.20'
21
21
  gem 'brakeman', '8.0.6'
22
22
  gem 'bson', '5.2.0'
23
- gem 'bundler', '>=4.0.20'
23
+ gem 'bundler', '>=4.0.21'
24
24
  gem 'bundler-audit', '>=0.9.3'
25
25
  gem 'bunny', '3.3.0'
26
26
  gem 'colorize', '1.1.0'
@@ -50,7 +50,7 @@ gem 'libusb', '0.8.0'
50
50
  gem 'luhn', '3.0.0'
51
51
  gem 'mail', '2.9.1'
52
52
  gem 'mcp', '1.5.1'
53
- gem 'meshtastic', '0.0.180'
53
+ gem 'meshtastic', '0.0.183'
54
54
  gem 'metasm', '1.0.6'
55
55
  gem 'mongo', '2.26.0'
56
56
  gem 'msfrpc-client', '1.1.2'
@@ -6,13 +6,13 @@ toolsets; the JSON-Schema for each tool is what the model actually sees.
6
6
 
7
7
  ![Tool registry](diagrams/agent-tool-registry.svg)
8
8
 
9
- ## Toolsets to tools (13 toolsets · 87 tools)
9
+ ## Toolsets to tools (13 toolsets · 88 tools)
10
10
 
11
11
  | Toolset | Tools | Backed by |
12
12
  |---|---|---|
13
13
  | `http` | `http_proxy_start` · `http_proxy_stop` · `http_proxy_entries` · `http_proxy_rules` · `http_replay` | `PWN::Plugins::MitmProxy`: native HTTP HAR capture/replay; opaque CONNECT tunnels |
14
14
  | `terminal` | `shell` | `Open3.capture3` on the host, after `PWN::AI::Agent::ToolGuard` |
15
- | `pwn` | `pwn_eval` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard` |
15
+ | `pwn` | `pwn_eval` · `sbom_scan` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard`; SBOM engines via `PWN::Plugins::SBOM` |
16
16
  | `mcp` | `mcp` | `PWN::AI::MCP` session broker → any `PWN::AI::MCP::*` stdio client |
17
17
  | `memory` | `memory_remember` · `memory_recall` · `memory_forget` · `memory_clear` · **`memory_lean`** | `PWN::Memory` → `~/.pwn/memory.json` |
18
18
  | `skills` | `skills_consolidate` · **`skills_recall`** · `skill_list` · `skill_view` · `skill_create` · `skill_add_reference` · `skill_delete` · `skill_migrate_legacy` | `~/.pwn/skills/<name>/SKILL.md` (**[agentskills.io](https://agentskills.io) spec**; legacy flat `*.md` auto-migrated) |
@@ -50,6 +50,20 @@ protected operator preferences, open mistakes, or gold outcomes.
50
50
 
51
51
  ## Dynamic tool-set slimming (`ai.agent.tool_router`)
52
52
 
53
+ The normal `Loop.run` path uses `core_only: true`. The central registry also
54
+ includes `mcp` when the original request names MCP, a discovered backend, or
55
+ one of its declared tools. Backend names and tool names come from
56
+ `PWN::AI::MCP.backends`, not a ComboNation-specific router. Thus `combo.nation`,
57
+ `combo_nation`, and `PWN::AI::MCP::ComboNation` expose the same broker, even in
58
+ core-only mode or with a zero top-K budget. Unrelated core-only prompts remain
59
+ unchanged, and explicit toolset exclusions and availability checks still apply.
60
+
61
+ The advertised MCP schema includes the local backend catalog. Use `list_tools`
62
+ for the selected backend's live argument schemas, then `call_tool` with a JSON
63
+ `arguments` object. Sessions persist across calls and menu IDs such as `5.10`
64
+ must stay strings. Catalog discovery reads local metadata only: it does not
65
+ launch a server or enable hardware. Hardware still requires explicit opt-in.
66
+
53
67
  Shipping every schema on every turn overwhelms a small local model - the
54
68
  choice space is huge and it mis-routes (for example, picks an RF tool for a git
55
69
  question). When `ai.agent.tool_router: true` **and** `Loop.run` passes the
@@ -70,7 +84,7 @@ PWN::AI::Agent::Registry.definitions(relevance: 'nmap sweep 10.0.0.0/8', top_k:
70
84
  PWN::AI::Agent::Registry.rank(query: 'run a shell command') # inspect ranking
71
85
  PWN::AI::Agent::Registry.preference_order # Env / DEFAULT_PREFERENCE
72
86
  PWN::AI::Agent::Registry.toolsets # -> the 13 names above
73
- PWN::AI::Agent::Registry.all.count # -> 87
87
+ PWN::AI::Agent::Registry.all.count # -> 88
74
88
  ```
75
89
 
76
90
  Frontier engines leave `tool_router` off (unless you set it) and receive the
@@ -68,7 +68,7 @@ groups) so lines never criss-cross.
68
68
  [source](diagrams/dot/ai-integration-tool-calling.dot) · doc: [AI Integration](AI-Integration.md)
69
69
  ![ai-integration-tool-calling](diagrams/ai-integration-tool-calling.svg)
70
70
 
71
- ### Agent Tool Registry (13 toolsets · 87 tools)
71
+ ### Agent Tool Registry (13 toolsets · 88 tools)
72
72
  [source](diagrams/dot/agent-tool-registry.dot) · doc: [Agent Tool Registry](Agent-Tool-Registry.md)
73
73
  ![agent-tool-registry](diagrams/agent-tool-registry.svg)
74
74
 
@@ -29,7 +29,7 @@ hardware).
29
29
  |---|---|
30
30
  | `Loop` | plan → **TaskSummarizer** briefs → dispatch tool_calls → observe → repeat until `may_finalize?`. No iteration-budget abort |
31
31
  | **`TaskSummarizer`** | Executive UX: every request gets an English task compass (`emit_plan!` · `about_to` as `task k/n`) - no statement/question/goal type |
32
- | `Registry` | JSON-Schema function definitions grouped into 13 **toolsets** · **87 tools** · `CORE_TOOLS` = `DEFAULT_PREFERENCE` (`memory_recall` · `session_recall` · `skills_recall` · `pwn_eval` · `shell` · `mistakes_record` · `mistakes_resolve` · `learning_note_outcome` · `memory_remember`) |
32
+ | `Registry` | JSON-Schema function definitions grouped into 13 **toolsets** · **88 tools** · `CORE_TOOLS` = `DEFAULT_PREFERENCE` (`memory_recall` · `session_recall` · `skills_recall` · `pwn_eval` · `shell` · `mistakes_record` · `mistakes_resolve` · `learning_note_outcome` · `memory_remember`) |
33
33
  | `Dispatch` / `Result` | execute a tool, capture stdout/value/error/duration |
34
34
  | `PromptBuilder` | inject MEMORY / SKILLS / LEARNING / **KNOWN MISTAKES + FIXES** / METRICS / **POLICY** / EXTROSPECTION / RECENT TURNS |
35
35
  | `Metrics` · `Learning` · `Reflect` · **`Policy`** | **introspection** - how well am I doing? (Policy is live Q / REINFORCE, advisory rank only) |
@@ -0,0 +1,74 @@
1
+ # Plugin degradation and fallbacks
2
+
3
+ Each `PreflightChecker` health line links here. CI asserts every plugin in
4
+ `PLUGIN_DEPS` has an anchor and that documented fallbacks still exist.
5
+
6
+ ## pwn-plugins-radare2
7
+
8
+ Required: `r2`. Fallback: `objdump` / `PWN::Plugins::REDB` binutils path.
9
+
10
+ ## pwn-plugins-gdb
11
+
12
+ Required: `gdb`. Fallback: `PWN::Plugins::Debugger` still exposes `cyclic` helpers.
13
+
14
+ ## pwn-plugins-nuclei
15
+
16
+ Required: `nuclei`. Fallback: `TransparentBrowser` + `pwn_eval`.
17
+
18
+ ## pwn-plugins-sqlmap
19
+
20
+ Required: `sqlmap`. Fallback: `pwn_eval` HTTP clients.
21
+
22
+ ## pwn-plugins-frida
23
+
24
+ Required: `frida`. Fallback: `Debugger` + `REDB`.
25
+
26
+ ## pwn-plugins-aflplusplus
27
+
28
+ Required: `afl-fuzz`. Fallback: `PWN::Plugins::Fuzz.triage` on an existing crash dir.
29
+
30
+ ## pwn-plugins-volatility
31
+
32
+ Required: `vol`. Fallback: `pwn_eval` + strings/REDB.
33
+
34
+ ## pwn-plugins-nmapit
35
+
36
+ Required: `nmap`. Fallback: `Packet.tcp_connect_scan`.
37
+
38
+ ## pwn-plugins-metasploit
39
+
40
+ Required: `msfconsole`. Fallback: `exploitdev`, `pwn_eval`, `PWN::Plugins::Handler`.
41
+
42
+ ## pwn-plugins-burpsuite
43
+
44
+ Required: `burpsuite`. Fallback: `TransparentBrowser`, `nuclei`, `PWN::Plugins::MitmProxy`.
45
+
46
+ ## pwn-plugins-zaproxy
47
+
48
+ Required: `zaproxy`. Fallback: `nuclei`, `TransparentBrowser`, `PWN::Plugins::MitmProxy`.
49
+
50
+ ## pwn-plugins-packet
51
+
52
+ Required: `CAP_NET_RAW` **or** the capability broker helper. Install the helper
53
+ from `documentation/Capability-Broker-Sandbox.md` (setcap the helper binary, not
54
+ the Ruby interpreter). Fallback: `Packet.tcp_connect_scan` / `PWN::Plugins::Sock`.
55
+
56
+ ## pwn-plugins-k8s
57
+
58
+ Required: `trivy` and docker.sock. Fallback: `sbom_scan` / `pwn_eval`.
59
+
60
+ ## pwn-plugins-semgrep
61
+
62
+ Required: `semgrep`. Fallback: `sast` tools / `pwn_eval`.
63
+
64
+ ## pwn-plugins-exploitdb
65
+
66
+ Required: `searchsploit`. Fallback: `intel_lookup`.
67
+
68
+ ## pwn-plugins-recon
69
+
70
+ Required: `subfinder`, `httpx`. Fallback: `NmapIt.scan` + `Corpus.get`.
71
+
72
+ ## pwn-plugins-credentialattack
73
+
74
+ Required: `hydra`, `john`, `hashcat`. Fallback: `pwn_eval` + `Corpus`.
@@ -1,8 +1,7 @@
1
1
  # Swarm - Native Multi-Agent Orchestration
2
2
 
3
- `PWN::AI::Agent::Swarm` replaces the legacy `pwn-irc` (inspircd + weechat +
4
- PRIVMSG) transport with **first-class sub-agents** built directly on
5
- `PWN::AI::Agent::Loop`. Each persona is a *full* tool-calling agent - Memory,
3
+ `PWN::AI::Agent::Swarm` is first-class multi-agent orchestration built
4
+ directly on `PWN::AI::Agent::Loop`. Each persona is a *full* tool-calling agent - Memory,
6
5
  Skills, Learning, Metrics and Extrospection all apply - so the
7
6
  self-improvement loop covers the whole swarm.
8
7
 
@@ -20,7 +20,7 @@ with a **tool-calling AI agent** on top that can run the same methods.
20
20
  | `PWN::FFI::*` | **8** | Native DSP/RF backends: Volk · Liquid · FFTW · RTLSdr · HackRF · AdalmPluto · SoapySDR · Stdio |
21
21
  | `PWN::AI::*` | **6** engines | OpenAI, Anthropic, Grok (OAuth device-flow), Gemini, Ollama, Open WebUI |
22
22
  | `bin/pwn_*` + `pwn` | **54** | Headless CLI executables for CI/CD |
23
- | Agent toolsets | **13** · **87 tools** | terminal · pwn · memory · skills · sessions · learning · metrics · policy · extrospection · cron · swarm · reward · curriculum |
23
+ | Agent toolsets | **13** · **88 tools** | terminal · pwn · memory · skills · sessions · learning · metrics · policy · extrospection · cron · swarm · reward · curriculum |
24
24
 
25
25
  ## Three ways to use it
26
26
 
@@ -26,7 +26,6 @@ commands.
26
26
  | `pwn-ai-sessions` | `PWN::Sessions` | List/view/delete transcripts |
27
27
  | `pwn-ai-cron` | `PWN::Cron` | List/run/toggle scheduled jobs |
28
28
  | `pwn-ai-delegate` | `Agent::Swarm` | Send one request to a persona |
29
- | `pwn-irc` | *(deprecated)* | Prints a pointer to `Agent::Swarm` - the IRC daemon transport is gone |
30
29
  | `toggle-debug` | `Agent::Loop` / `Plugins::Log` | Stage log per operator request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log` |
31
30
  | `toggle-trace` | `Agent::Loop` / `Plugins::Log` | Turns `toggle-debug` on with TracePoint; ENTER after each engine/tool step. Pry.config, not Env. Off turns both off. |
32
31
  | `toggle-pwn-ai-speaks` | `Plugins::Voice` | TTS every final answer on/off |
@@ -101,7 +101,7 @@ $ pwn --ai "run bin/pwn_sast against ./src and push findings to DefectDojo"
101
101
 
102
102
  ## What the agent can call
103
103
 
104
- 13 toolsets · **87 tools** - full table at
104
+ 13 toolsets · **88 tools** - full table at
105
105
  [Agent Tool Registry](Agent-Tool-Registry.md).
106
106
 
107
107
  The two that matter most:
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: browser-exploitation
3
+ description: Use when attacking browsers. Proxy plus Debugger.
4
+ ---
5
+
6
+ # Browser exploitation
7
+
8
+ 1. `PWN::Plugins::MitmProxy.start` and TransparentBrowser `proxy:`.
9
+ 2. `replay` mutated requests; diff HAR entries.
10
+ 3. Native crashes go through `PWN::Plugins::Debugger` and `REDB`.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: firmware-unpack-emulate
3
+ description: Use when unpacking firmware. REDB on extracted bins.
4
+ ---
5
+
6
+ # Firmware unpack and emulate
7
+
8
+ 1. Unpack with binwalk/firmware-mod-kit outside the radio path.
9
+ 2. `PWN::Plugins::REDB.open` on extracted userland binaries.
10
+ 3. Emulate with qemu user; debug via `PWN::Plugins::Debugger.launch`.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: heap-exploitation
3
+ description: Use when exploiting glibc heap. Debugger and REDB steps for tcache.
4
+ ---
5
+
6
+ # Heap exploitation (tcache / fastbin)
7
+
8
+ 1. `PWN::Plugins::REDB.open(bin: path)` then `xrefs_to(sym: 'malloc')` and `xrefs_to(sym: 'free')`.
9
+ 2. `PWN::Plugins::Debugger.launch(bin: path)` then `break(addr_or_sym: 'main')` and `run`.
10
+ 3. Use `cyclic` / `cyclic_find` to locate overflow into tcache metadata (`tcache_perthread_struct`).
11
+ 4. Confirm with `regs` and `read_mem` after `continue`. Write the proof via `Findings.record`.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: kernel-pwn-triage
3
+ description: Use when triaging kernel bugs. Debugger and REDB first.
4
+ ---
5
+
6
+ # Kernel pwn triage
7
+
8
+ 1. `PWN::Plugins::REDB.open(bin: vmlinux)` then `funcs` / `xrefs_to`.
9
+ 2. `PWN::Plugins::Debugger.attach(host: '127.0.0.1', port: 1234)` to a QEMU gdbstub (`-s`).
10
+ 3. `break(addr_or_sym: 'commit_creds')`, `continue`, `regs`, `backtrace`.
11
+ 4. Record findings with evidence paths; do not guess offsets.
@@ -12,7 +12,7 @@ metadata:
12
12
 
13
13
  # PWN::AI::Agent::Swarm
14
14
 
15
- Native multi-agent orchestration for pwn-ai. Swarm replaces the legacy `pwn-irc` mechanism (inspircd + weechat + PRIVMSG-flattened .chat calls) with first-class sub-agents built on top of PWN::AI::Agent::Loop.run. Each persona is a full tool-calling agent — Memory, Skills, Learning, Metrics and Extrospection all apply — so the self-improvement loop covers the whole swarm. ~/.pwn/agents.yml # persona registry ~/.pwn/swarm/<swarm_id>/bus.jsonl # append-only message bus ~/.pwn/swarm/<swarm_id>/personas.json# persona -> PWN::Sessions id Cross-session / cross-process communication == another pwn-ai (or a PWN::Cron job) calling Swarm.ask/debate with the same swarm_id and reading the same bus.jsonl. No daemon required.
15
+ Native multi-agent orchestration for pwn-ai. First-class sub-agents built on top of PWN::AI::Agent::Loop.run. Each persona is a full tool-calling agent — Memory, Skills, Learning, Metrics and Extrospection all apply — so the self-improvement loop covers the whole swarm. ~/.pwn/agents.yml # persona registry ~/.pwn/swarm/<swarm_id>/bus.jsonl # append-only message bus ~/.pwn/swarm/<swarm_id>/personas.json# persona -> PWN::Sessions id Cross-session / cross-process communication == another pwn-ai (or a PWN::Cron job) calling Swarm.ask/debate with the same swarm_id and reading the same bus.jsonl. No daemon required.
16
16
 
17
17
  ## When to use
18
18
 
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: pwn-ai-agent-tools-sbomscan
3
+ description: Drive PWN::Ai::Agent::Tools::SbomScan from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Ai::Agent::Tools::SbomScan
10
+ source: pwn/ai/agent/tools/sbom_scan.rb
11
+ ---
12
+
13
+ # PWN::Ai::Agent::Tools::SbomScan
14
+
15
+ Public API for PWN::Ai::Agent::Tools::SbomScan.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Ai::Agent::Tools::SbomScan` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/ai/agent/tools/sbom_scan.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Ai::Agent::Tools::SbomScan.help
31
+ PWN::Ai::Agent::Tools::SbomScan.help(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - _(no public class methods parsed)_
37
+
38
+ ## Source
39
+
40
+ `pwn/ai/agent/tools/sbom_scan.rb`
41
+
42
+ ## Verification
43
+
44
+ `PWN::Ai::Agent::Tools::SbomScan.respond_to?(:help)` after the
45
+ module is loaded. Read the source for parameter names.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: pwn-corpus
3
+ description: Drive PWN::Corpus from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Corpus
10
+ source: pwn/corpus.rb
11
+ ---
12
+
13
+ # PWN::Corpus
14
+
15
+ Named wordlist and payload corpora under ~/.pwn/corpora.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Corpus` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/corpus.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Corpus.help
31
+ PWN::Corpus.get(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - `get`
37
+ - `update`
38
+ - `authors`
39
+ - `help`
40
+
41
+ ## References
42
+
43
+ - `references/urls.md` — URLs from source
44
+
45
+ ## Source
46
+
47
+ `pwn/corpus.rb`
48
+
49
+ ## Verification
50
+
51
+ `PWN::Corpus.respond_to?(:get)` after the
52
+ module is loaded. Read the source for parameter names.
@@ -0,0 +1,3 @@
1
+ # PWN::Corpus source links
2
+
3
+ - https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/DNS/subdomains-top1million-5000.txt
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: pwn-engagement
3
+ description: Drive PWN::Engagement from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Engagement
10
+ source: pwn/engagement.rb
11
+ ---
12
+
13
+ # PWN::Engagement
14
+
15
+ Engagement scope, host state, and vault refs under ~/.pwn/engagements.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Engagement` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/engagement.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Engagement.help
31
+ PWN::Engagement.open(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - `open`
37
+ - `close`
38
+ - `status`
39
+ - `in_scope`
40
+ - `warn_unless_in_scope`
41
+ - `record_host`
42
+ - `hosts`
43
+ - `merge_scan`
44
+ - `authors`
45
+ - `help`
46
+ - `in_scope?`
47
+
48
+ ## Source
49
+
50
+ `pwn/engagement.rb`
51
+
52
+ ## Verification
53
+
54
+ `PWN::Engagement.respond_to?(:open)` after the
55
+ module is loaded. Read the source for parameter names.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: pwn-plugins-debugger
3
+ description: Drive PWN::Plugins::Debugger from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Plugins::Debugger
10
+ source: pwn/plugins/debugger.rb
11
+ ---
12
+
13
+ # PWN::Plugins::Debugger
14
+
15
+ Structured GDB/MI driver with a handle registry that survives pwn_eval.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Plugins::Debugger` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/plugins/debugger.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Plugins::Debugger.help
31
+ PWN::Plugins::Debugger.required_bins(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - `required_bins`
37
+ - `launch`
38
+ - `attach`
39
+ - `run`
40
+ - `break`
41
+ - `continue`
42
+ - `step`
43
+ - `read_mem`
44
+ - `write_mem`
45
+ - `regs`
46
+ - `backtrace`
47
+ - `checksec`
48
+ - `cyclic`
49
+ - `cyclic_find`
50
+ - `to_pwntools_offsets`
51
+ - `close`
52
+ - `authors`
53
+ - `help`
54
+
55
+ ## Source
56
+
57
+ `pwn/plugins/debugger.rb`
58
+
59
+ ## Verification
60
+
61
+ `PWN::Plugins::Debugger.respond_to?(:required_bins)` after the
62
+ module is loaded. Read the source for parameter names.
@@ -36,6 +36,7 @@ PWN::Plugins::Fuzz.socket(opts)
36
36
  - `socket`
37
37
  - `http`
38
38
  - `file_format`
39
+ - `triage`
39
40
  - `authors`
40
41
  - `help`
41
42
 
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: pwn-plugins-handler
3
+ description: Drive PWN::Plugins::Handler from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Plugins::Handler
10
+ source: pwn/plugins/handler.rb
11
+ ---
12
+
13
+ # PWN::Plugins::Handler
14
+
15
+ Payload generation and listener sessions without Metasploit.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Plugins::Handler` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/plugins/handler.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Plugins::Handler.help
31
+ PWN::Plugins::Handler.required_bins(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - `required_bins`
37
+ - `generate`
38
+ - `listen`
39
+ - `accept`
40
+ - `interact`
41
+ - `stop`
42
+ - `authors`
43
+ - `help`
44
+
45
+ ## Source
46
+
47
+ `pwn/plugins/handler.rb`
48
+
49
+ ## Verification
50
+
51
+ `PWN::Plugins::Handler.respond_to?(:required_bins)` after the
52
+ module is loaded. Read the source for parameter names.
@@ -47,6 +47,7 @@ PWN::Plugins::Jobs.required_bins(opts)
47
47
  - `harvest`
48
48
  - `list`
49
49
  - `stop`
50
+ - `graph`
50
51
  - `authors`
51
52
  - `help`
52
53
 
@@ -39,6 +39,7 @@ PWN::Plugins::MitmProxy.start(opts)
39
39
  - `rules`
40
40
  - `http_replay`
41
41
  - `exchange`
42
+ - `replay`
42
43
  - `authors`
43
44
  - `help`
44
45
 
@@ -37,6 +37,7 @@ PWN::Plugins::NmapIt.port_scan(opts)
37
37
  - `parse_xml_results`
38
38
  - `diff_xml_results`
39
39
  - `to_findings`
40
+ - `scan`
40
41
  - `authors`
41
42
  - `help`
42
43
 
@@ -47,6 +47,7 @@ PWN::Plugins::Packet.open_pcap_file(opts)
47
47
  - `tcp_connect_scan`
48
48
  - `cap_net_raw`
49
49
  - `capture`
50
+ - `health`
50
51
  - `authors`
51
52
  - `help`
52
53
  - `cap_net_raw?`
@@ -41,6 +41,8 @@ PWN::Plugins::ProcessTube.required_bins(opts)
41
41
  - `recvuntil`
42
42
  - `recvline`
43
43
  - `close`
44
+ - `send_raw`
45
+ - `register`
44
46
  - `expect`
45
47
  - `stream`
46
48
  - `reap_orphans`
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: pwn-plugins-redb
3
+ description: Drive PWN::Plugins::REDB from pwn_eval.
4
+ license: MIT
5
+ allowed-tools: [pwn, pwn_eval]
6
+ metadata:
7
+ bundled: true
8
+ generated: true
9
+ module: PWN::Plugins::REDB
10
+ source: pwn/plugins/redb.rb
11
+ ---
12
+
13
+ # PWN::Plugins::REDB
14
+
15
+ Persistent per-binary analysis DB under ~/.pwn/redb.
16
+
17
+ ## When to use
18
+
19
+ Call `PWN::Plugins::REDB` from `pwn_eval` when the task needs this module.
20
+ Do not reimplement it in shell.
21
+
22
+ ## Methodologies
23
+
24
+ Generated from `pwn/plugins/redb.rb`. Prefer the public class methods below.
25
+ Class methods take `(opts = {})` and read `opts`.
26
+
27
+ ## How to call
28
+
29
+ ```ruby
30
+ PWN::Plugins::REDB.help
31
+ PWN::Plugins::REDB.open(opts)
32
+ ```
33
+
34
+ ## Public methods
35
+
36
+ - `open`
37
+ - `funcs`
38
+ - `xrefs_to`
39
+ - `strings`
40
+ - `decompile`
41
+ - `annotate`
42
+ - `authors`
43
+ - `help`
44
+
45
+ ## Source
46
+
47
+ `pwn/plugins/redb.rb`
48
+
49
+ ## Verification
50
+
51
+ `PWN::Plugins::REDB.respond_to?(:open)` after the
52
+ module is loaded. Read the source for parameter names.