pwn 0.5.684 → 0.5.686

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/documentation/Agent-Tool-Registry.md +1 -3
  4. data/documentation/Configuration.md +0 -2
  5. data/documentation/General-PWN-Usage.md +1 -1
  6. data/documentation/Home.md +2 -2
  7. data/documentation/How-PWN-Works.md +2 -2
  8. data/documentation/Installation.md +18 -2
  9. data/documentation/Persistence.md +1 -1
  10. data/documentation/Session-Workflow.md +8 -28
  11. data/documentation/Skills-Memory-Learning.md +20 -0
  12. data/documentation/Troubleshooting.md +1 -1
  13. data/documentation/Why-PWN.md +1 -1
  14. data/documentation/diagrams/dot/memory-skills-detailed.dot +1 -1
  15. data/documentation/diagrams/dot/overall-pwn-architecture.dot +1 -1
  16. data/documentation/diagrams/dot/persistence-filesystem.dot +1 -1
  17. data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
  18. data/documentation/diagrams/memory-skills-detailed.svg +85 -84
  19. data/documentation/diagrams/overall-pwn-architecture.svg +15 -15
  20. data/documentation/diagrams/persistence-filesystem.svg +1 -1
  21. data/documentation/diagrams/sessions-cron-automation.svg +7 -6
  22. data/documentation/pwn-REPL.md +1 -1
  23. data/documentation/pwn-ai-Agent.md +4 -7
  24. data/etc/default_skills/bug-bounty-hunting/SKILL.md +70 -0
  25. data/etc/default_skills/deep-exploitation/SKILL.md +74 -0
  26. data/etc/default_skills/hardware-and-firmware-testing/SKILL.md +83 -0
  27. data/etc/default_skills/osint/SKILL.md +147 -0
  28. data/etc/default_skills/penetration-testing/SKILL.md +81 -0
  29. data/etc/default_skills/red-teaming/SKILL.md +70 -0
  30. data/etc/default_skills/reverse-engineering-binaries/SKILL.md +70 -0
  31. data/etc/default_skills/sast-code-scans/SKILL.md +66 -0
  32. data/etc/default_skills/social-engineering/SKILL.md +67 -0
  33. data/etc/default_skills/vulnerability-research-fundamentals/SKILL.md +74 -0
  34. data/etc/default_skills/web-application-penetration-testing/SKILL.md +68 -0
  35. data/lib/pwn/ai/agent/loop.rb +79 -41
  36. data/lib/pwn/ai/agent/mistakes.rb +6 -6
  37. data/lib/pwn/ai/agent/prompt_builder.rb +3 -4
  38. data/lib/pwn/ai/agent/tool_guard.rb +1 -46
  39. data/lib/pwn/ai/agent/tools/ruby_eval.rb +0 -10
  40. data/lib/pwn/ai/agent/tools/shell.rb +0 -6
  41. data/lib/pwn/ai/anthropic.rb +0 -118
  42. data/lib/pwn/ai/gemini.rb +0 -15
  43. data/lib/pwn/ai/grok.rb +0 -158
  44. data/lib/pwn/ai/ollama.rb +0 -12
  45. data/lib/pwn/ai/open_ai.rb +0 -110
  46. data/lib/pwn/ai/open_web_ui.rb +0 -12
  47. data/lib/pwn/ai.rb +0 -86
  48. data/lib/pwn/config.rb +62 -1
  49. data/lib/pwn/migrate.rb +2 -0
  50. data/lib/pwn/plugins/log.rb +302 -0
  51. data/lib/pwn/plugins/repl.rb +28 -8
  52. data/lib/pwn/version.rb +1 -1
  53. data/spec/integration/config_spec.rb +37 -0
  54. data/spec/lib/pwn/ai/agent/loop_spec.rb +52 -12
  55. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +7 -0
  56. data/spec/lib/pwn/ai/agent/signal_hygiene_spec.rb +5 -8
  57. data/spec/lib/pwn/ai/agent/tools/shell_spec.rb +10 -18
  58. data/spec/lib/pwn/ai/anthropic_spec.rb +2 -2
  59. data/spec/lib/pwn/ai/gemini_spec.rb +2 -2
  60. data/spec/lib/pwn/ai/grok_spec.rb +2 -2
  61. data/spec/lib/pwn/ai/ollama_spec.rb +2 -7
  62. data/spec/lib/pwn/ai/open_ai_spec.rb +2 -23
  63. data/spec/lib/pwn/ai/open_web_ui_spec.rb +2 -7
  64. data/spec/lib/pwn/ai_spec.rb +4 -21
  65. data/spec/lib/pwn/plugins/log_spec.rb +139 -0
  66. data/spec/lib/pwn/plugins/repl_pwn_vault_spec.rb +31 -0
  67. data/spec/lib/pwn/plugins/repl_spec.rb +4 -3
  68. data/third_party/pwn_rdoc.jsonl +29 -24
  69. metadata +12 -2
  70. data/documentation/PWN_Contributors_and_Users.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea35094f56adb31f1af096c634b0a027aa16825fe596ed34165b1efc0627c279
4
- data.tar.gz: 42bedb6ce050206f988a3df3d99c84d39896e63ec54d453aa0d625e763600b9e
3
+ metadata.gz: 1c85ad9f56d45556168111931b475458009ad82fd7dac279457824484dde1105
4
+ data.tar.gz: 8cc423564b1f6adc95674b7002ca2a33abcc3e337b0d9a4dbf493a108431d1af
5
5
  SHA512:
6
- metadata.gz: da7066b555f86266d022850351074fd8ce266254e746c80f13a84fd631a71040d7e122c6fb1ccbd9ef5c93225b40c22a99651bfb35a05ae26bd60dd56d0208b7
7
- data.tar.gz: de4d5212171f9bb84122a9141203851245a8fa4e4ca01eb127992b9fce505de4aeb15ed7812cd03bc6aaf71248cfa389fdb41ee280460f24ed7f56b8245b1d77
6
+ metadata.gz: f1b42ef466382cbe8122910f5baee95d4c1af40090bf31e26961f31ee2d66a44be805c51bed475c4f96b57c9a0fac00cacd7a2a554f1035fabd354823f4a4652
7
+ data.tar.gz: a53ae1eeb0fdd70938672b357c55456699810679921abd9ecfa17a1f296a3fe9c4b10dfd663b0958e52b450d80a7197c601724120efc9ccf03b90c0cac1d55b2
data/README.md CHANGED
@@ -182,6 +182,12 @@ $ pwn setup --profile net --dry-run
182
182
  Also available as `pwn_setup` (standalone driver) and `pwn --setup[=PROFILE]`.
183
183
  The doctor exits non-zero when capabilities are degraded, so CI can gate on it.
184
184
 
185
+ First launch seeds bundled operator skills into `~/.pwn/skills/` from
186
+ `etc/default_skills/` when those names are missing (vulnerability research,
187
+ pentest, red team, SAST, RE, hardware, social engineering, and related).
188
+ Existing `SKILL.md` files are never overwritten.
189
+
190
+
185
191
  <!--[![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)-->
186
192
 
187
193
  Full page: [Installation](documentation/Installation.md) ·
@@ -34,9 +34,7 @@ those without the full learning surface.
34
34
  `shell` and `pwn_eval` share `PWN::AI::Agent::ToolGuard`
35
35
  (`lib/pwn/ai/agent/tool_guard.rb`) before they run. The guard remaps common
36
36
  wrong keys, rejects ellipsis placeholders, refuses bash-only syntax unless
37
- `ai.agent.shell_bash` is true (default runner is `/bin/sh`), and blocks live
38
- host-discovery unless the request is in-scope or `ai.agent.recon_authorized`
39
- is true.
37
+ `ai.agent.shell_bash` is true (default runner is `/bin/sh`).
40
38
 
41
39
  The `policy` toolset is inspect-only. `policy_stats`, `policy_evaluate`, and
42
40
  `policy_recommend` read the live Q / REINFORCE table. Reset is Ruby-only, so a
@@ -129,7 +129,6 @@ ai:
129
129
  auto_extrospect: true # Ambient baseline after every final answer (host/repo/env ONLY - never launches burpsuite/zaproxy/msf/gqrx). Sense tools stay on-demand.
130
130
  defer_introspect: true # Run auto_introspect on a background thread AFTER the user-visible reply (default on). Specs/cron stay inline.
131
131
  prompt_cache: true # Engine-native prefix cache. Anthropic cache_control, OpenAI prompt_cache_key, Grok x-grok-conv-id, Gemini systemInstruction split. Ollama / Open WebUI have none.
132
- recon_authorized: false # Allow live subnet sweeps / raw-socket discovery tools this session
133
132
  shell_bash: false # true -> run shell via bash -lc. Default is /bin/sh.
134
133
  plan_first: ~ # Plan-then-act pre-pass. nil = auto (true when ai.active is ollama or openwebui).
135
134
  tool_router: ~ # Dynamic tool-set slimming. nil = auto (true for ollama / openwebui).
@@ -313,7 +312,6 @@ PWN::Config.refresh_env
313
312
  | `ai.agent.auto_introspect` | Boolean | `true` | `PWN::AI::Agent::Learning.auto_introspect` | Run outcome logging + lesson mining after every final answer. Toggle live via `learning_auto_introspect_toggle`. |
314
313
  | `ai.agent.auto_extrospect` | Boolean | `true` | `PWN::AI::Agent::Extrospection.auto_extrospect` | Ambient baseline after every final answer (`AUTO_SECTIONS` = host/repo/env only; never spawns GUI/JVM tools). Sense tools (`intel`/`verify`/`watch`/`rf_tune`/`observe`) stay on-demand. Toggle live via `extro_auto_toggle`. |
315
314
  | `ai.agent.toolsets` | Array\<String\> \| `nil` | `nil` (all) | `bin/pwn`, `PWN::Plugins::REPL`, `PWN::AI::Agent::Registry` | Allow-list of toolsets exposed to the agent. Valid: `cron`, `curriculum`, `extrospection`, `learning`, `memory`, `metrics`, `policy`, `pwn`, `reward`, `sessions`, `skills`, `swarm`, `terminal`. |
316
- | `ai.agent.recon_authorized` | Boolean | `false` | `PWN::AI::Agent::ToolGuard.recon_authorized?` / `Loop.recon_authorized?` | When true (or the user request contains in-scope / engagement language), live host-discovery tools may run. Default refuses unauthorized sweeps. |
317
315
  | `ai.agent.shell_bash` | Boolean | `false` | `PWN::AI::Agent::ToolGuard.shell_bash?` | When true, `shell` runs via `bash -lc` so bash-only syntax is allowed. Default is POSIX `/bin/sh` and bashisms are rejected with a rewrite hint. |
318
316
  | `ai.agent.plan_first` | Boolean \| `nil` | `nil` (auto: `true` when `ai.active` is `ollama` or `openwebui`) | `PWN::AI::Agent::Loop.plan_first` | Plan-then-act pre-pass: the model must emit a numbered tool plan (as an assistant message) *before* it may dispatch anything. Cheap chain-of-thought scaffolding for local models. |
319
317
  | `ai.agent.tool_router` | Boolean \| `nil` | `nil` (auto: `true` for `ollama` / `openwebui`) | `PWN::AI::Agent::Registry.definitions` | Dynamic tool-set slimming: expose only `Registry::CORE_TOOLS` + the top-K keyword-relevant schemas for *this* request. Ties break on historical `Metrics` success rate, then `ai.agent.tool_preference`. |
@@ -45,7 +45,7 @@ history # what you've typed → copy into a driver
45
45
  | `pwn-ai-sessions` | List / view / delete transcripts |
46
46
  | `pwn-ai-cron` | List / run scheduled jobs |
47
47
  | `pwn-ai-delegate` | Hand a task to a Swarm persona |
48
- | `toggle-pwn-ai-debug` | Show/hide raw tool_calls JSON |
48
+ | `toggle-pwn-ai-debug` | Stream pwn-ai module progress to the TUI and `/tmp/pwn-ai-DEBUG-TIMESTAMP.log` |
49
49
  | `toggle-pwn-ai-speaks` | TTS every final answer on/off |
50
50
  | `welcome-banner` | Redraw a random `PWN::Banner` |
51
51
  | `toggle-pager` | Pry pager on/off |
@@ -37,13 +37,13 @@
37
37
  |---|---|
38
38
  | [AI / LLM Integration](AI-Integration.md) | OpenAI · Anthropic · Grok (OAuth) · Gemini · Ollama · Open WebUI |
39
39
  | [Agent Tool Registry](Agent-Tool-Registry.md) | 13 toolsets · **87** LLM-callable tools |
40
- | [Memory · Skills · Learning](Skills-Memory-Learning.md) | Introspection - the self-improvement loop |
40
+ | [Memory · Skills · Learning](Skills-Memory-Learning.md) | Introspection - self-improvement loop + 10 bundled skills on first launch |
41
41
  | [Mistakes](Mistakes.md) | **Negative feedback** - fingerprint failures · do-NOT-repeat · `[REPEATING]`/`[REGRESSED]` · inline self-correction |
42
42
  | [Reinforcement Learning](Reinforcement-Learning.md) | **`Reward` + `Curriculum` + `Policy`** - outcome/process judges · preference ledger · self-play practice · live Q / REINFORCE (advisory) · export-ready LoRA gate |
43
43
  | [Extrospection](Extrospection.md) | World-awareness - snapshot · drift · intel · **watch** · **verify** · **rf_tune** · **osint** · serial · telecomm · packet · vision · voice · correlate |
44
44
  | [Swarm (Multi-Agent)](Swarm.md) | Personas · ask · debate · broadcast · shared bus |
45
45
  | [Sessions](Sessions.md) | Transcript persistence + reflection |
46
- | [Session Workflow](Session-Workflow.md) | Keywords: `continue` / last session / write-then-read / recon scope |
46
+ | [Session Workflow](Session-Workflow.md) | Keywords: `continue` / last session / write-then-read |
47
47
  | [Cron](Cron.md) | Scheduled jobs. Hygiene seeds on; curriculum practice/judge/train ship off |
48
48
 
49
49
  ## 🧩 Capability Namespaces (`lib/pwn/*`)
@@ -21,7 +21,7 @@ hardware).
21
21
  | `pwn --ai PROMPT` | `bin/pwn` | Headless one-shot agent (CI-friendly) |
22
22
  | `pwn setup` | `lib/pwn/setup.rb` · `bin/pwn_setup` | Post-install doctor + capability provisioner + `--migrate` state doctor (also `pwn --setup[=PROFILE]`) |
23
23
  | `bin/pwn_*` + `pwn` | 54 files | Thin OptionParser wrappers plus the `pwn` REPL / one-shot agent |
24
- | `PWN::Cron` | `lib/pwn/cron.rb` | Scheduled jobs. Fresh install seeds hygiene on (`learning_consolidate_nightly`, `pwn_stores_lean_nightly`) and curriculum practice/judge/train off |
24
+ | `PWN::Cron` | `lib/pwn/cron.rb` | Scheduled jobs + background worker (`pwn setup`). Fresh install seeds hygiene on (`learning_consolidate_nightly`, `pwn_stores_lean_nightly`) and curriculum practice/judge/train off |
25
25
 
26
26
  ## L2 - AI agent core (`lib/pwn/ai/agent/`)
27
27
 
@@ -46,7 +46,7 @@ call, and [Reinforcement Learning](Reinforcement-Learning.md) for how
46
46
  ## L3 - Capability namespaces (`lib/pwn/*`)
47
47
 
48
48
  `Plugins` (67) · `SAST` (48) · `WWW` (22) · `AWS` (90) · `SDR` · `Blockchain` ·
49
- `Bounty` · `Reports` · `FFI` · `Banner` · **`Setup`** · **`Migrate`**. Each is
49
+ `Bounty` · `Reports` · `FFI` · `Banner` · **`Setup`** · **`Migrate`**. First launch also seeds bundled skills from `etc/default_skills/`. Each is
50
50
  a plain module of `public_class_method def self.x(opts = {})` methods -
51
51
  callable the same way from the REPL, from `pwn_eval`, or from a driver.
52
52
 
@@ -246,8 +246,24 @@ pwn setup --profile ${PWN_PROFILE:-full} --yes
246
246
  ## First-run configuration
247
247
 
248
248
  The first `pwn` launch creates `~/.pwn/` and an **encrypted**
249
- `~/.pwn/pwn.yaml` template. Add at least one LLM engine key with the
250
- `pwn-vault` REPL command to enable `pwn-ai` - see
249
+ `~/.pwn/pwn.yaml` template. It also seeds bundled skills into
250
+ `~/.pwn/skills/` when those names are missing:
251
+
252
+ - `vulnerability-research-fundamentals`
253
+ - `deep-exploitation`
254
+ - `bug-bounty-hunting`
255
+ - `sast-code-scans`
256
+ - `reverse-engineering-binaries`
257
+ - `penetration-testing`
258
+ - `web-application-penetration-testing`
259
+ - `red-teaming`
260
+ - `hardware-and-firmware-testing`
261
+ - `social-engineering`
262
+ - `osint`
263
+
264
+ Source lives in the gem at `etc/default_skills/`. `PWN::Config.install_default_skills`
265
+ is idempotent and never overwrites an edited `SKILL.md`. Add at least one
266
+ LLM engine key with the `pwn-vault` REPL command to enable `pwn-ai` - see
251
267
  [Configuration](Configuration.md). `pwn setup` will report the AI-engine
252
268
  row as `MISSING` until a key is set.
253
269
 
@@ -11,7 +11,7 @@ Every byte PWN remembers between processes lives here.
11
11
  | **`.schema`** | **`PWN::Migrate`** | JSON `{schema:,pwn_version:,at:}` | `pwn setup --migrate` | **schema stamp - drives the one-line drift warning on launch** |
12
12
  | `memory.json` | `PWN::Memory` | JSON array | `memory_clear` | facts · prefs · lessons · env - injected into every prompt |
13
13
  | `memory.idx` | `PWN::MemoryIndex` | JSON `{key → {sha,vec}}` | `PWN::MemoryIndex.reset` | local embedding index over `memory.json` - powers **relevance-ranked** MEMORY injection (incremental; only re-embeds changed entries) |
14
- | `skills/<name>/SKILL.md` | `PWN::Config.load_skills` | **[agentskills.io](https://agentskills.io) spec** - `name`+`description` YAML front-matter | `skill_delete` | reusable procedures + `metadata.references:` (CWE/CVE/ATT&CK/NIST). Legacy flat `skills/*.md` auto-migrated by `skill_migrate_legacy` / `pwn setup --migrate --fix`. |
14
+ | `skills/<name>/SKILL.md` | `PWN::Config.load_skills` | **[agentskills.io](https://agentskills.io) spec** - `name`+`description` YAML front-matter | `skill_delete` | reusable procedures + `metadata.references:`. Fresh install seeds bundled skills from `etc/default_skills/` via `PWN::Config.install_default_skills` (never overwrites an existing file). Legacy flat `skills/*.md` auto-migrated by `skill_migrate_legacy` / `pwn setup --migrate --fix`. |
15
15
  | `learning.jsonl` | `PWN::AI::Agent::Learning` | JSON-per-line | `learning_reset` | task outcome log → success_rate |
16
16
  | **`preferences.jsonl`** | **`PWN::AI::Agent::Reward`** | JSON-per-line `{prompt,rejected,chosen,source}` | `rm` | **DPO/KTO/ORPO preference-pair ledger - user_correction · mistakes_resolve · counterfactual · critic · curriculum** |
17
17
  | **`mistakes.json`** | **`PWN::AI::Agent::Mistakes`** | **JSON `{sig → entry}`** | **`mistakes_reset`** | **failure fingerprints · cross-session count · fix · `[REPEATING]` · `[REGRESSED]`** |
@@ -17,7 +17,7 @@ operator cheat sheet.
17
17
  3. Everything else is an autonomous goal. `Loop.run` keeps CORE_TOOLS until
18
18
  the original request is done or truly blocked.
19
19
  4. An unfinished host-work request is written to `~/.pwn/open_goal.json`.
20
- 5. A accepted final answer deletes that file. Budget exhaust leaves it.
20
+ 5. An accepted final answer deletes that file. Budget exhaust leaves it.
21
21
 
22
22
  ```
23
23
  you type a line
@@ -28,8 +28,6 @@ you type a line
28
28
  |
29
29
  +-- last / previous session ---------> prior JSONL, not this line
30
30
  |
31
- +-- live sweep without scope --------> refuse (syntax only)
32
- |
33
31
  +-- everything else -----------------> one Loop.run
34
32
  write? then read it back
35
33
  listing is not done
@@ -63,7 +61,7 @@ Delete `~/.pwn/open_goal.json` to drop a stuck checkpoint.
63
61
 
64
62
  ## This session vs last session
65
63
 
66
- Entering `pwn-ai` is a new transcript. Last session is the newest other
64
+ Entering `pwn-ai` is a new transcript. "Last session" is the newest other
67
65
  `~/.pwn/sessions/*.jsonl`.
68
66
 
69
67
  | Phrase | Where it reads |
@@ -98,34 +96,16 @@ Whole-line greetings only, so `hi, scan this host` stays a goal:
98
96
  | Write / update / regenerate / docs / fix | A **write** effect, then a later **read** (`cat`, `ruby -c`, eval read) |
99
97
  | Browser / navigate / `TransparentBrowser` | A **browse** effect (goto / dump_links / close) |
100
98
  | Hostname / uname / cwd / whoami | Any live **read** |
101
- | Other long goals (bounty, recon-in-scope) | **write**, **browse**, or **eval** `ls` alone is not enough |
99
+ | Other long goals (bounty, scrape, recon) | **write**, **browse**, or **eval** (`ls` alone is not enough) |
102
100
 
103
101
  These do **not** count as finishing a write: `memory_remember`,
104
102
  `learning_note_outcome`, `mistakes_*`, rspec/rubocop green, a README listing,
105
- or I will do that next time.”
103
+ or "I will do that next time."
106
104
 
107
105
  After you mutate a file, read it back before a final.
108
106
 
109
107
  ---
110
108
 
111
- ## Live recon (authorization)
112
-
113
- Sweeps (`find live hosts`, `ping sweep`, `scan this subnet`) need scope
114
- language or `ai.agent.recon_authorized=true`. Otherwise the agent refuses
115
- the live scan and may still give command syntax.
116
-
117
- | In-scope wording that unlocks live recon |
118
- |---|
119
- | `in-scope` / `in scope` |
120
- | `authorized` / `authorised` |
121
- | `engagement` / `written permission` |
122
- | `bug bounty` / `bugbounty` |
123
- | `rules of engagement` / `roe` |
124
- | `lab only` / `my lab` / `I own this` |
125
- | `permission to scan` / `scope:…` |
126
-
127
- ---
128
-
129
109
  ## Phrases that are **not** a final answer
130
110
 
131
111
  Loop keeps calling tools if the model emits any of:
@@ -133,10 +113,10 @@ Loop keeps calling tools if the model emits any of:
133
113
  - `shall I` / `should I` / `want me to` / `proceed?` / `continue?`
134
114
  - `# Remaining block` / heading-only outlines
135
115
  - `were not applied` / `not written to disk` / `next time`
136
- - narrated next tool (`Wait, let's try…`) with no `tool_calls`
116
+ - narrated next tool (`Wait, let's try...`) with no `tool_calls`
137
117
 
138
118
  Type `continue` yourself only to resume a **saved** open goal after the REPL
139
- died. Do not use it as a mid-turn ok, go on the loop should already be
119
+ died. Do not use it as a mid-turn "ok, go on" - the loop should already be
140
120
  going.
141
121
 
142
122
  ---
@@ -145,8 +125,8 @@ going.
145
125
 
146
126
  | Path | Role |
147
127
  |---|---|
148
- | `~/.pwn/sessions/<id>.jsonl` | This activations transcript |
128
+ | `~/.pwn/sessions/<id>.jsonl` | This activation's transcript |
149
129
  | `~/.pwn/open_goal.json` | Unfinished host-work request |
150
- | `~/.pwn/memory.json` | Durable facts (not last line) |
130
+ | `~/.pwn/memory.json` | Durable facts (not "last line") |
151
131
 
152
132
  [← Home](Home.md)
@@ -103,6 +103,26 @@ them in-place to the spec-conformant `<name>/SKILL.md` layout with
103
103
  back-filled `name`/`description` front-matter. `skill_create` always writes
104
104
  the new format.
105
105
 
106
+ A fresh install (first `pwn` launch or `pwn setup --migrate`) copies these
107
+ bundled skills into `~/.pwn/skills/` when the name is missing:
108
+
109
+ | Skill | For |
110
+ |---|---|
111
+ | `vulnerability-research-fundamentals` | First-pass research methodology with PWN plugins |
112
+ | `deep-exploitation` | Crash / primitive to reliable PoC |
113
+ | `bug-bounty-hunting` | Program scope, Burp, authz replay, report |
114
+ | `sast-code-scans` | `PWN::SAST::Factory` / `pwn_sast` + reports |
115
+ | `reverse-engineering-binaries` | checksec, disasm, `PWN::Plugins::Assembly` |
116
+ | `penetration-testing` | PTES / NIST / OSSTMM / ISSAF engagement loop |
117
+ | `web-application-penetration-testing` | OWASP WSTG / ASVS / API Top 10 |
118
+ | `red-teaming` | MITRE ATT&CK, TIBER-EU, Kill Chain |
119
+ | `hardware-and-firmware-testing` | OWASP FSTM / ISTG, serial, firmware |
120
+ | `social-engineering` | OSSTMM human channel, ATT&CK phishing |
121
+ | `osint` | `extro_osint` kinds, feeds, keys, pivots |
122
+
123
+ Source: `etc/default_skills/` in the gem. Edits in `~/.pwn/skills` are never
124
+ overwritten.
125
+
106
126
  ## Housekeeping
107
127
 
108
128
  | Tool | When |
@@ -138,7 +138,7 @@ list, then install equivalents by hand.
138
138
 
139
139
  **Cause:** older dual-emit paths or `about_to` restating the full goal every batch.
140
140
 
141
- **Current behavior (v0.5.683+):**
141
+ **Current behavior (v0.5.684+):**
142
142
 
143
143
  1. `Loop.task_summary_about_to!` is the only about_to entry.
144
144
  2. `TaskSummarizer.about_to` builds distinct lines with `tool_counts_phrase` + `intent_phrase`.
@@ -33,7 +33,7 @@ critical when the caller is an autonomous agent.
33
33
  | "Trust our scanner" | `cat lib/pwn/sast/sql.rb` - read the regex yourself |
34
34
  | Per-seat license for the glue | MIT-licensed glue; bring your own Burp Pro / Nessus key |
35
35
  | Agent output is a PDF | Agent output is a `PWN::Reports` object *and* a distilled skill *and* a memory entry |
36
- | One vendor's model | Five interchangeable engines; swarm can pit them against each other |
36
+ | One vendor's model | Six interchangeable engines; swarm can pit them against each other |
37
37
 
38
38
  ## Why the feedback loop matters
39
39
 
@@ -29,7 +29,7 @@ digraph "PWN_MemorySkills" {
29
29
  color="#a16207"; bgcolor="#422006";
30
30
  Fmem [label="memory.json\nfact · pref · lesson · env", shape=cylinder, fillcolor="#fcd34d"];
31
31
  Fidx [label="memory.idx\nembedding index\n(sha → vec)", shape=cylinder, fillcolor="#fcd34d"];
32
- Fskl [label="skills/<n>/SKILL.md\nYAML front-matter refs", shape=cylinder, fillcolor="#fcd34d"];
32
+ Fskl [label="skills/<n>/SKILL.md\nYAML front-matter + refs\n(+ etc/default_skills seed)", shape=cylinder, fillcolor="#fcd34d"];
33
33
  Flrn [label="learning.jsonl\noutcome log", shape=cylinder, fillcolor="#fcd34d"];
34
34
  Fses [label="sessions/*.jsonl\ntranscripts (+ lean)", shape=cylinder, fillcolor="#fcd34d"];
35
35
  Fmis [label="mistakes.json\nsig → count · fix · regressed", shape=cylinder, fillcolor="#fcd34d"];
@@ -28,7 +28,7 @@ digraph "PWN_Overall_Architecture" {
28
28
  REPL [label="🐚 pwn REPL\nPry + PWN:: preload", fillcolor="#7dd3fc"];
29
29
  PwnAI [label="✨ pwn-ai\nAgent TUI · pwn --ai", fillcolor="#7dd3fc"];
30
30
  CLI [label="📜 bin/pwn_*\n54 executables", fillcolor="#7dd3fc"];
31
- Cronb [label="⏱ PWN::Cron\nScheduled jobs", fillcolor="#7dd3fc"];
31
+ Cronb [label="⏱ PWN::Cron\nJobs + background worker", fillcolor="#7dd3fc"];
32
32
  }
33
33
  {rank=same; REPL; PwnAI; CLI; Cronb}
34
34
 
@@ -16,7 +16,7 @@ digraph "PWN_Persistence" {
16
16
  schm [label=".schema\n{schema:, pwn_version:, at:}\ndrives launch drift warning"];
17
17
  mem [label="memory.json\nfacts · prefs · lessons · env"];
18
18
  midx [label="memory.idx\nlocal embedding index\n(relevance-ranked MEMORY)"];
19
- skl [label="skills/<name>/SKILL.md\nagentskills.io spec\nname+description frontmatter + refs"];
19
+ skl [label="skills/<name>/SKILL.md\nagentskills.io + default_skills seed\nname+description frontmatter + refs"];
20
20
  lrn [label="learning.jsonl\ntask outcomes"];
21
21
  prf [label="preferences.jsonl\nDPO/KTO/ORPO pairs\nuser_correction · resolve · counterfactual"];
22
22
  mis [label="mistakes.json\nfailure fingerprints · fixes\n[REPEATING] · [REGRESSED]"];
@@ -25,7 +25,7 @@ digraph "PWN_SessionsCron" {
25
25
  label="Later / Elsewhere"; fontcolor="#ddd6fe"; style=rounded;
26
26
  color="#6d28d9"; bgcolor="#2e1065";
27
27
  Reflect [label="learning_reflect\n(session_id)", fillcolor="#c4b5fd"];
28
- Fire [label="crontab → PWN::Cron.run", fillcolor="#c4b5fd"];
28
+ Fire [label="worker / crontab\n→ PWN::Cron.run", fillcolor="#c4b5fd"];
29
29
  Resume [label="agent_debate\n(swarm_id: ...)", fillcolor="#c4b5fd"];
30
30
  }
31
31
  {rank=same; Reflect; Fire; Resume}