pwn 0.5.736 → 0.5.738

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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +0 -1
  3. data/documentation/Agent-Tool-Registry.md +3 -3
  4. data/documentation/Diagrams.md +1 -1
  5. data/documentation/How-PWN-Works.md +1 -1
  6. data/documentation/Plugin-Degradation.md +74 -0
  7. data/documentation/Swarm.md +2 -3
  8. data/documentation/What-is-PWN.md +1 -1
  9. data/documentation/pwn-REPL.md +27 -1
  10. data/documentation/pwn-ai-Agent.md +1 -1
  11. data/etc/default_skills/browser-exploitation/SKILL.md +10 -0
  12. data/etc/default_skills/firmware-unpack-emulate/SKILL.md +10 -0
  13. data/etc/default_skills/heap-exploitation/SKILL.md +11 -0
  14. data/etc/default_skills/kernel-pwn-triage/SKILL.md +11 -0
  15. data/etc/default_skills/pwn/ai/agent/swarm/SKILL.md +1 -1
  16. data/etc/default_skills/pwn/ai/agent/tools/sbom_scan/SKILL.md +45 -0
  17. data/etc/default_skills/pwn/corpus/SKILL.md +52 -0
  18. data/etc/default_skills/pwn/corpus/references/urls.md +3 -0
  19. data/etc/default_skills/pwn/engagement/SKILL.md +55 -0
  20. data/etc/default_skills/pwn/plugins/debugger/SKILL.md +62 -0
  21. data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +1 -0
  22. data/etc/default_skills/pwn/plugins/handler/SKILL.md +52 -0
  23. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +1 -0
  24. data/etc/default_skills/pwn/plugins/mitm_proxy/SKILL.md +1 -0
  25. data/etc/default_skills/pwn/plugins/nmap_it/SKILL.md +1 -0
  26. data/etc/default_skills/pwn/plugins/packet/SKILL.md +1 -0
  27. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +2 -0
  28. data/etc/default_skills/pwn/plugins/redb/SKILL.md +52 -0
  29. data/etc/default_skills/pwn/plugins/sbom/SKILL.md +48 -0
  30. data/etc/default_skills/pwn/redaction/SKILL.md +1 -0
  31. data/etc/default_skills/rop-jop-chain-construction/SKILL.md +10 -0
  32. data/etc/default_skills/windows-internals-triage/SKILL.md +10 -0
  33. data/lib/pwn/ai/agent/loop.rb +76 -8
  34. data/lib/pwn/ai/agent/prompt_builder.rb +19 -1
  35. data/lib/pwn/ai/agent/swarm.rb +4 -5
  36. data/lib/pwn/ai/agent/tool_guard.rb +11 -4
  37. data/lib/pwn/ai/agent/tools/fuzz_campaign.rb +2 -1
  38. data/lib/pwn/ai/agent/tools/job_run.rb +9 -3
  39. data/lib/pwn/ai/agent/tools/pty_session.rb +7 -1
  40. data/lib/pwn/ai/agent/tools/sbom_scan.rb +25 -0
  41. data/lib/pwn/ai/agent/tools/shell.rb +3 -2
  42. data/lib/pwn/ai/agent/tools/swarm.rb +3 -6
  43. data/lib/pwn/ai/agent/turn_finalizer.rb +2 -2
  44. data/lib/pwn/corpus.rb +107 -0
  45. data/lib/pwn/engagement.rb +158 -0
  46. data/lib/pwn/plugins/debugger.rb +284 -0
  47. data/lib/pwn/plugins/findings.rb +14 -3
  48. data/lib/pwn/plugins/fuzz.rb +62 -0
  49. data/lib/pwn/plugins/handler.rb +171 -0
  50. data/lib/pwn/plugins/jobs.rb +55 -0
  51. data/lib/pwn/plugins/mitm_proxy.rb +37 -2
  52. data/lib/pwn/plugins/nmap_it.rb +32 -0
  53. data/lib/pwn/plugins/packet.rb +18 -0
  54. data/lib/pwn/plugins/preflight_checker.rb +6 -2
  55. data/lib/pwn/plugins/process_tube.rb +99 -8
  56. data/lib/pwn/plugins/redb.rb +210 -0
  57. data/lib/pwn/plugins/repl/mesh.rb +181 -36
  58. data/lib/pwn/plugins/repl.rb +0 -3
  59. data/lib/pwn/plugins/sbom.rb +145 -0
  60. data/lib/pwn/plugins.rb +4 -0
  61. data/lib/pwn/redaction.rb +53 -0
  62. data/lib/pwn/reports/engagement.rb +2 -1
  63. data/lib/pwn/sessions.rb +3 -1
  64. data/lib/pwn/version.rb +1 -1
  65. data/lib/pwn.rb +2 -0
  66. data/packer/provisioners/irc.sh +1 -1
  67. data/spec/lib/pwn/ai/agent/harness_2026_09_15_spec.rb +144 -0
  68. data/spec/lib/pwn/ai/agent/tools/sbom_scan_spec.rb +10 -0
  69. data/spec/lib/pwn/corpus_spec.rb +23 -0
  70. data/spec/lib/pwn/engagement_spec.rb +27 -0
  71. data/spec/lib/pwn/plugins/debugger_spec.rb +27 -0
  72. data/spec/lib/pwn/plugins/handler_spec.rb +25 -0
  73. data/spec/lib/pwn/plugins/redb_spec.rb +33 -0
  74. data/spec/lib/pwn/plugins/repl_mesh_channel_route_spec.rb +13 -0
  75. data/spec/lib/pwn/plugins/repl_mesh_dm_spec.rb +17 -0
  76. data/spec/lib/pwn/plugins/repl_mesh_dm_transport_spec.rb +50 -0
  77. data/spec/lib/pwn/plugins/repl_mesh_history_spec.rb +47 -0
  78. data/spec/lib/pwn/plugins/repl_mesh_key_exchange_spec.rb +85 -0
  79. data/spec/lib/pwn/plugins/repl_mesh_node_id_spec.rb +36 -0
  80. data/spec/lib/pwn/plugins/repl_mesh_rx_paint_spec.rb +23 -0
  81. data/spec/lib/pwn/plugins/repl_mesh_security_paint_spec.rb +36 -0
  82. data/spec/lib/pwn/plugins/repl_spec.rb +10 -4
  83. data/spec/lib/pwn/plugins/sbom_spec.rb +22 -0
  84. data/third_party/pwn_rdoc.jsonl +96 -4
  85. metadata +36 -4
  86. data/etc/default_skills/pwn/plugins/repl/irc/SKILL.md +0 -47
  87. data/lib/pwn/plugins/repl/irc.rb +0 -153
  88. 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: f20a2bcbd4611945405ce166826e978eabfe051ee9b1d5bc51ab07f9dde2e5d2
4
- data.tar.gz: 894c5e39df14c75ce020427d0ea9294550b17dee242c728aaa1067fadfd1d683
3
+ metadata.gz: 1ca56931addf19f59b18ee2776ee84b0af0a75496bcf9bd9d8453b96b9b9eef2
4
+ data.tar.gz: b9310696c7ae7098d37dc3c8e46b1cd2214ab652a49ef75df281b34c472a738c
5
5
  SHA512:
6
- metadata.gz: c512159a8249c30b3ae191d3e4d159d8f30da33b48dbc99fdb2d6e753c4811444f5db70492b8ca712a7dd26396818365c0940d225d9c9011247109a7cfd3a47f
7
- data.tar.gz: 0a9bff32912c36b10baca436caf72a18f132f9f9e4779df8f823b0aa66f785e3c905473762b85953916dbc20b51bfcae1989697ed6a57282f2d9da1d114761de
6
+ metadata.gz: d6ec57ded9a7213562cdaf4b4486d680387f8dea1ec1fbf6bfc47a2b4ed40e7c7782c40e3ab80a5164c308c5dae220442956b83cf2c0ccbddbbc2e398b1e6acf
7
+ data.tar.gz: 7c447c3b9e42779e4ca86038836719dad5b051a872f4bbad2bc704b54596a69644c56a92a6d877681045f3c7000cddb0a51aaa49e79be9ab1afc5de40b7fa8a2
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
 
@@ -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) |
@@ -70,7 +70,7 @@ PWN::AI::Agent::Registry.definitions(relevance: 'nmap sweep 10.0.0.0/8', top_k:
70
70
  PWN::AI::Agent::Registry.rank(query: 'run a shell command') # inspect ranking
71
71
  PWN::AI::Agent::Registry.preference_order # Env / DEFAULT_PREFERENCE
72
72
  PWN::AI::Agent::Registry.toolsets # -> the 13 names above
73
- PWN::AI::Agent::Registry.all.count # -> 87
73
+ PWN::AI::Agent::Registry.all.count # -> 88
74
74
  ```
75
75
 
76
76
  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 |
@@ -54,6 +53,33 @@ Typed at the mesh TX prompt (leading `/`). `/` or `/menu` opens a boxed curses m
54
53
 
55
54
  Typing `/` shows matching commands in the TX pane (ncurses hides Reline's dropdown). TAB still completes `/…` commands, channel names, transports, and device ids.
56
55
 
56
+ In COMPOSE, Up recalls older submitted lines and Down recalls newer ones.
57
+ Moving past the newest entry restores the draft and cursor position from before
58
+ history browsing. Recalled lines can be edited without changing saved entries.
59
+ History includes messages and slash commands, skips blank lines and consecutive
60
+ duplicates, and keeps the latest 100 entries in memory for the current pwn-mesh
61
+ session only; it is not written to disk.
62
+
63
+ ### Encrypted DMs and key discovery
64
+
65
+ On serial, Bluetooth, or TCP, a DM checks the destination's public key in the
66
+ connected radio's NodeInfo records. If missing, pwn-mesh sends its own public
67
+ NodeInfo to that destination with a response requested and waits up to 15 seconds.
68
+ Only after obtaining the destination key does it submit the text with PKI
69
+ encryption explicitly required. Both radios must be reachable over the selected
70
+ channel; this does not verify a peer's identity outside Meshtastic's key exchange.
71
+
72
+ Discovery failure sends no DM text. The most recent failed attempt is retained
73
+ in session memory; bare `/msg` retries it using the current connection and active
74
+ channel. A new DM replaces that retained attempt, and exiting the process loses
75
+ it. Retention ends after transport submission, not a delivery acknowledgement;
76
+ later radio failures are displayed separately. There is no plaintext or
77
+ channel-PSK downgrade. Missing local public-key metadata requires a reconnect.
78
+
79
+ MQTT channel broadcasts remain supported, but PKI DMs are not implemented for
80
+ the broker transport. MQTT DM attempts remain unsent with an explicit error;
81
+ switch to serial, Bluetooth, or TCP and use `/msg` to retry.
82
+
57
83
  ## Multi-line input
58
84
 
59
85
  `pwn-ai` and `pwn-asm` use a custom `PWNMultiLineInput` reader. Plain
@@ -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.