pwn 0.5.684 → 0.5.685
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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/documentation/Agent-Tool-Registry.md +1 -3
- data/documentation/Configuration.md +0 -2
- data/documentation/Home.md +2 -2
- data/documentation/How-PWN-Works.md +2 -2
- data/documentation/Installation.md +18 -2
- data/documentation/Persistence.md +1 -1
- data/documentation/Session-Workflow.md +8 -28
- data/documentation/Skills-Memory-Learning.md +20 -0
- data/documentation/Troubleshooting.md +1 -1
- data/documentation/Why-PWN.md +1 -1
- data/documentation/diagrams/dot/memory-skills-detailed.dot +1 -1
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +1 -1
- data/documentation/diagrams/dot/persistence-filesystem.dot +1 -1
- data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
- data/documentation/diagrams/memory-skills-detailed.svg +85 -84
- data/documentation/diagrams/overall-pwn-architecture.svg +15 -15
- data/documentation/diagrams/persistence-filesystem.svg +1 -1
- data/documentation/diagrams/sessions-cron-automation.svg +7 -6
- data/documentation/pwn-ai-Agent.md +4 -7
- data/etc/default_skills/bug-bounty-hunting/SKILL.md +70 -0
- data/etc/default_skills/deep-exploitation/SKILL.md +74 -0
- data/etc/default_skills/hardware-and-firmware-testing/SKILL.md +83 -0
- data/etc/default_skills/osint/SKILL.md +147 -0
- data/etc/default_skills/penetration-testing/SKILL.md +81 -0
- data/etc/default_skills/red-teaming/SKILL.md +70 -0
- data/etc/default_skills/reverse-engineering-binaries/SKILL.md +70 -0
- data/etc/default_skills/sast-code-scans/SKILL.md +66 -0
- data/etc/default_skills/social-engineering/SKILL.md +67 -0
- data/etc/default_skills/vulnerability-research-fundamentals/SKILL.md +74 -0
- data/etc/default_skills/web-application-penetration-testing/SKILL.md +68 -0
- data/lib/pwn/ai/agent/loop.rb +3 -28
- data/lib/pwn/ai/agent/mistakes.rb +6 -6
- data/lib/pwn/ai/agent/prompt_builder.rb +0 -4
- data/lib/pwn/ai/agent/tool_guard.rb +1 -46
- data/lib/pwn/ai/agent/tools/ruby_eval.rb +0 -10
- data/lib/pwn/ai/agent/tools/shell.rb +0 -6
- data/lib/pwn/config.rb +62 -1
- data/lib/pwn/migrate.rb +2 -0
- data/lib/pwn/version.rb +1 -1
- data/spec/integration/config_spec.rb +37 -0
- data/spec/lib/pwn/ai/agent/loop_spec.rb +9 -7
- data/spec/lib/pwn/ai/agent/mistakes_spec.rb +7 -0
- data/spec/lib/pwn/ai/agent/signal_hygiene_spec.rb +5 -8
- data/spec/lib/pwn/ai/agent/tools/shell_spec.rb +10 -18
- data/third_party/pwn_rdoc.jsonl +3 -4
- metadata +12 -2
- data/documentation/PWN_Contributors_and_Users.png +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4969508ce00cf858c5dfd06506e306f37d86e3d0671f07c3d3c021fa603b49d8
|
|
4
|
+
data.tar.gz: 6e23201a56add7514b8a12de42ee930aba424e33329bc9c608bd3dc4c2ce0473
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 980664beb783d0a4c4aed5df5548d8f3c839e47afadd566a35f5b3b4413d6242e6c6da54319cacc91ceb7a3f8f5756f8268d29876b6277fdfda2e2f4475a251d
|
|
7
|
+
data.tar.gz: de6ce8fac7cc8c1dda8989faef831c4c32bf88141d188b113aa16b7b0035f3062505fc4cb843ea2b7f9e179306f66060ab8fbc1e4c8a325169a274f5784ef79f
|
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
|
<!--[](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`)
|
|
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`. |
|
data/documentation/Home.md
CHANGED
|
@@ -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 -
|
|
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
|
|
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.
|
|
250
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 activation
|
|
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
|
|
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.
|
|
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`.
|
data/documentation/Why-PWN.md
CHANGED
|
@@ -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 |
|
|
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",
|
|
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\
|
|
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
|
|
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
|
|
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}
|