pwn 0.5.739 → 0.5.740
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/Gemfile +1 -1
- data/documentation/Agent-Tool-Registry.md +163 -6
- data/documentation/Diagrams.md +1 -1
- data/documentation/Home.md +1 -1
- data/documentation/How-PWN-Works.md +1 -1
- data/documentation/Plugin-Degradation.md +6 -2
- data/documentation/Recon-Findings-API.md +33 -1
- data/documentation/What-is-PWN.md +1 -1
- data/documentation/pwn-ai-Agent.md +1 -1
- data/etc/default_skills/pwn/ai/agent/confirmation/SKILL.md +49 -0
- data/etc/default_skills/pwn/ai/agent/result/SKILL.md +4 -1
- data/etc/default_skills/pwn/ai/agent/task_dag/SKILL.md +50 -0
- data/etc/default_skills/pwn/ai/agent/tool_guard/SKILL.md +2 -0
- data/etc/default_skills/pwn/ai/agent/tools/browser_goto/SKILL.md +45 -0
- data/etc/default_skills/pwn/ai/agent/tools/loot_query/SKILL.md +45 -0
- data/etc/default_skills/pwn/ai/agent/tools/nmap_scan/SKILL.md +45 -0
- data/etc/default_skills/pwn/ai/agent/tools/nuclei_scan/SKILL.md +45 -0
- data/etc/default_skills/pwn/ai/agent/tools/radare2/SKILL.md +45 -0
- data/etc/default_skills/pwn/ai/agent/turn_finalizer/SKILL.md +3 -0
- data/etc/default_skills/pwn/ai/router/SKILL.md +51 -0
- data/etc/default_skills/pwn/engagement/SKILL.md +2 -0
- data/etc/default_skills/pwn/ffi/capstone/SKILL.md +54 -0
- data/etc/default_skills/pwn/ffi/keystone/SKILL.md +50 -0
- data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +5 -1
- data/etc/default_skills/pwn/plugins/ai_sandbox/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +3 -0
- data/etc/default_skills/pwn/plugins/assembly/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/findings/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/gdbmi/SKILL.md +8 -2
- data/etc/default_skills/pwn/plugins/httpx/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/method_catalog/SKILL.md +50 -0
- data/etc/default_skills/pwn/plugins/nmap_it/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +2 -1
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +3 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/rop/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/sandbox/driver/SKILL.md +1 -8
- data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/vault/SKILL.md +3 -0
- data/etc/default_skills/pwn/reports/SKILL.md +2 -0
- data/lib/pwn/ai/agent/confirmation.rb +163 -0
- data/lib/pwn/ai/agent/dispatch.rb +43 -5
- data/lib/pwn/ai/agent/loop.rb +45 -11
- data/lib/pwn/ai/agent/prompt_builder.rb +7 -4
- data/lib/pwn/ai/agent/registry.rb +2 -1
- data/lib/pwn/ai/agent/result.rb +76 -6
- data/lib/pwn/ai/agent/task_dag.rb +220 -0
- data/lib/pwn/ai/agent/tool_guard.rb +166 -24
- data/lib/pwn/ai/agent/tools/artifacts.rb +35 -5
- data/lib/pwn/ai/agent/tools/binary_triage.rb +7 -3
- data/lib/pwn/ai/agent/tools/browser_goto.rb +32 -0
- data/lib/pwn/ai/agent/tools/debug_lane.rb +23 -0
- data/lib/pwn/ai/agent/tools/exploitdev.rb +32 -12
- data/lib/pwn/ai/agent/tools/finding_record.rb +31 -5
- data/lib/pwn/ai/agent/tools/fuzz_campaign.rb +44 -21
- data/lib/pwn/ai/agent/tools/job_run.rb +30 -18
- data/lib/pwn/ai/agent/tools/loot_query.rb +44 -0
- data/lib/pwn/ai/agent/tools/nmap_scan.rb +32 -0
- data/lib/pwn/ai/agent/tools/nuclei_scan.rb +31 -0
- data/lib/pwn/ai/agent/tools/radare2.rb +55 -0
- data/lib/pwn/ai/agent/tools/ruby_eval.rb +19 -2
- data/lib/pwn/ai/agent/tools/shell.rb +22 -10
- data/lib/pwn/ai/agent/turn_finalizer.rb +46 -5
- data/lib/pwn/ai/agent.rb +3 -1
- data/lib/pwn/ai/cli.rb +26 -2
- data/lib/pwn/ai/context.rb +4 -2
- data/lib/pwn/ai/router.rb +196 -0
- data/lib/pwn/ai/tools/README.md +5 -0
- data/lib/pwn/ai.rb +1 -0
- data/lib/pwn/config.rb +10 -0
- data/lib/pwn/engagement.rb +45 -1
- data/lib/pwn/ffi/capstone.rb +120 -0
- data/lib/pwn/ffi/keystone.rb +107 -0
- data/lib/pwn/ffi.rb +2 -0
- data/lib/pwn/migrate.rb +5 -1
- data/lib/pwn/plugins/aflplusplus.rb +238 -13
- data/lib/pwn/plugins/ai_sandbox.rb +240 -0
- data/lib/pwn/plugins/artifact_registry.rb +188 -22
- data/lib/pwn/plugins/assembly.rb +73 -2
- data/lib/pwn/plugins/basic_auth.rb +17 -4
- data/lib/pwn/plugins/binary_parser.rb +439 -38
- data/lib/pwn/plugins/exploit_dev.rb +83 -14
- data/lib/pwn/plugins/findings.rb +208 -42
- data/lib/pwn/plugins/gdbmi.rb +265 -38
- data/lib/pwn/plugins/httpx.rb +93 -0
- data/lib/pwn/plugins/jobs.rb +260 -102
- data/lib/pwn/plugins/method_catalog.rb +328 -0
- data/lib/pwn/plugins/nmap_it.rb +157 -26
- data/lib/pwn/plugins/nuclei.rb +122 -29
- data/lib/pwn/plugins/preflight_checker.rb +3 -2
- data/lib/pwn/plugins/process_tube.rb +51 -2
- data/lib/pwn/plugins/radare2.rb +120 -26
- data/lib/pwn/plugins/recon.rb +33 -0
- data/lib/pwn/plugins/repl/mesh.rb +76 -7
- data/lib/pwn/plugins/rop.rb +121 -31
- data/lib/pwn/plugins/transparent_browser.rb +212 -14
- data/lib/pwn/plugins/vault.rb +182 -24
- data/lib/pwn/plugins.rb +4 -0
- data/lib/pwn/reports/engagement.rb +8 -2
- data/lib/pwn/reports/html.rb +28 -9
- data/lib/pwn/reports/json.rb +2 -1
- data/lib/pwn/reports/markdown.rb +49 -12
- data/lib/pwn/reports/sarif.rb +17 -3
- data/lib/pwn/reports.rb +184 -34
- data/lib/pwn/version.rb +1 -1
- data/spec/integration/reports_spec.rb +93 -0
- data/spec/integration/result_condition_spec.rb +11 -8
- data/spec/lib/pwn/ai/agent/confirmation_spec.rb +59 -0
- data/spec/lib/pwn/ai/agent/dispatch_confirmation_spec.rb +52 -0
- data/spec/lib/pwn/ai/agent/dispatch_policy_spec.rb +51 -0
- data/spec/lib/pwn/ai/agent/loop_spec.rb +86 -0
- data/spec/lib/pwn/ai/agent/registry_spec.rb +1 -1
- data/spec/lib/pwn/ai/agent/result_spec.rb +84 -1
- data/spec/lib/pwn/ai/agent/task_dag_spec.rb +63 -0
- data/spec/lib/pwn/ai/agent/tool_guard_spec.rb +48 -0
- data/spec/lib/pwn/ai/agent/tools/ai_sandbox_spec.rb +36 -0
- data/spec/lib/pwn/ai/agent/tools/binary_triage_spec.rb +21 -0
- data/spec/lib/pwn/ai/agent/tools/browser_goto_spec.rb +57 -0
- data/spec/lib/pwn/ai/agent/tools/exploitdev_spec.rb +42 -0
- data/spec/lib/pwn/ai/agent/tools/finding_record_spec.rb +46 -2
- data/spec/lib/pwn/ai/agent/tools/fuzz_campaign_spec.rb +46 -0
- data/spec/lib/pwn/ai/agent/tools/job_run_spec.rb +52 -0
- data/spec/lib/pwn/ai/agent/tools/loot_query_spec.rb +46 -0
- data/spec/lib/pwn/ai/agent/tools/nmap_scan_spec.rb +26 -0
- data/spec/lib/pwn/ai/agent/tools/nuclei_scan_spec.rb +37 -0
- data/spec/lib/pwn/ai/agent/tools/pwn_eval_schema_spec.rb +27 -0
- data/spec/lib/pwn/ai/agent/tools/radare2_spec.rb +15 -0
- data/spec/lib/pwn/ai/agent/turn_finalizer_spec.rb +76 -0
- data/spec/lib/pwn/ai/cli_spec.rb +12 -1
- data/spec/lib/pwn/ai/router_spec.rb +57 -0
- data/spec/lib/pwn/ffi/capstone_spec.rb +33 -0
- data/spec/lib/pwn/ffi/keystone_spec.rb +33 -0
- data/spec/lib/pwn/migrate_spec.rb +30 -2
- data/spec/lib/pwn/plugins/aflplusplus_spec.rb +40 -0
- data/spec/lib/pwn/plugins/ai_sandbox_spec.rb +44 -0
- data/spec/lib/pwn/plugins/artifact_registry_spec.rb +116 -1
- data/spec/lib/pwn/plugins/assembly_spec.rb +12 -0
- data/spec/lib/pwn/plugins/basic_auth_spec.rb +15 -0
- data/spec/lib/pwn/plugins/binary_parser_spec.rb +59 -2
- data/spec/lib/pwn/plugins/exploit_dev_spec.rb +44 -0
- data/spec/lib/pwn/plugins/findings_structured_spec.rb +196 -1
- data/spec/lib/pwn/plugins/gdbmi_spec.rb +99 -1
- data/spec/lib/pwn/plugins/httpx_spec.rb +23 -0
- data/spec/lib/pwn/plugins/jobs_spec.rb +141 -0
- data/spec/lib/pwn/plugins/method_catalog_spec.rb +29 -0
- data/spec/lib/pwn/plugins/nmap_it_spec.rb +49 -0
- data/spec/lib/pwn/plugins/nuclei_spec.rb +33 -1
- data/spec/lib/pwn/plugins/radare2_spec.rb +115 -0
- data/spec/lib/pwn/plugins/recon_spec.rb +15 -0
- data/spec/lib/pwn/plugins/repl_mesh_channel_route_spec.rb +101 -1
- data/spec/lib/pwn/plugins/rop_spec.rb +19 -0
- data/spec/lib/pwn/plugins/transparent_browser_spec.rb +71 -0
- data/spec/lib/pwn/plugins/vault_spec.rb +41 -0
- data/spec/lib/pwn/reports/engagement_spec.rb +51 -0
- data/spec/lib/pwn/reports_spec.rb +196 -0
- data/spec/spec_helper.rb +3 -0
- data/third_party/pwn_rdoc.jsonl +230 -4
- metadata +45 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4abf337af5fb9173890e87ee2d6d8523f93f62c6d9453d1fec9431f650f04a3e
|
|
4
|
+
data.tar.gz: 2639a24b9b3b1895e392b8168a604270b9f43118c743919c7b8348ec8f4dd929
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e383699557934dab9374bef09204e3e37c0e4b255a3dd3c13ef1597c265fd46b7b71bb79dd8094d2fb42aea71512e01b5a7bce9eae08a3f74d8dfb7639f8ff00
|
|
7
|
+
data.tar.gz: 6f1aea7cd79a34738923014fbc13024797c614c33e28058ab8b565402f665ccb464aa440c148291a385f4ad6b2617412d42b3c526df5d2f6cdff349149872c9d
|
data/Gemfile
CHANGED
|
@@ -6,17 +6,17 @@ toolsets; the JSON-Schema for each tool is what the model actually sees.
|
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
9
|
-
## Toolsets to tools (
|
|
9
|
+
## Toolsets to tools (16 toolsets · 150 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
|
-
| `terminal` | `shell`
|
|
15
|
-
| `pwn` | `pwn_eval` · `sbom_scan` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard`; SBOM engines via `PWN::Plugins::SBOM` |
|
|
14
|
+
| `terminal` | `shell` · `job_run` · `job_status` · `job_tail` · `job_result` · `job_kill` | Foreground host commands plus `PWN::Plugins::Jobs` durable supervisors |
|
|
15
|
+
| `pwn` | `pwn_eval` · `sbom_scan` · `r2_functions` · `r2_disasm` · `gdb_run_to_crash` · `nmap_scan` · `nuclei_scan` · `browser_goto` · `loot_query` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard`; SBOM engines via `PWN::Plugins::SBOM`; r2pipe JSON via `PWN::Plugins::Radare2`; gdb MI3 crash reports via `PWN::Plugins::GDBMI`; nmap XML ingest/diff via `PWN::Plugins::NmapIt`; nuclei/httpx JSONL findings via `PWN::Plugins::Nuclei`; TransparentBrowser navigation captures screenshot/DOM/HAR via `browser_goto`; engagement loot via `PWN::Plugins::Vault` |
|
|
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) |
|
|
19
|
-
| `sessions` | **`session_recall`** · `sessions_list` · `sessions_view` · `sessions_current` · `sessions_delete` · `sessions_stats` · **`sessions_lean`** | `PWN::Sessions` → `~/.pwn/sessions/` |
|
|
19
|
+
| `sessions` | **`session_recall`** · `sessions_list` · `sessions_view` · `sessions_current` · `sessions_delete` · `sessions_stats` · **`sessions_lean`** · `artifact_read` · `artifact_grep` · `artifacts_list` · `artifacts_get` · `artifact_put` · `artifact_get` | `PWN::Sessions` → `~/.pwn/sessions/`; `PWN::Plugins::ArtifactRegistry` → `~/.pwn/artifacts/` |
|
|
20
20
|
| `learning` | `learning_note_outcome` · `learning_reflect` · `learning_distill_skill` · `learning_stats` · `learning_outcomes` · `learning_consolidate` · `learning_reset` · `learning_auto_introspect_toggle` · **`learning_gc_stores`** · **`learning_purge_noise`** · **`mistakes_list`** · **`mistakes_record`** · **`mistakes_resolve`** · **`mistakes_reset`** · **`mistakes_lean`** · **`reward_judge`** · **`reward_prm`** · **`reward_sentinel`** · **`reward_preferences`** · **`reward_export_dpo`** · **`reward_warm_sentinel`** · **`reward_scrub_preferences`** · **`reward_preference_balance`** · **`curriculum_practice`** · **`curriculum_train`** · **`curriculum_hindsight`** · **`curriculum_offline_judge`** · **`curriculum_preference_balance`** | `PWN::AI::Agent::Learning` + `Mistakes` + `Reward` + `Curriculum` → `~/.pwn/learning.jsonl` + `~/.pwn/mistakes.json` + `~/.pwn/preferences.jsonl` + `~/.pwn/curriculum/` + `~/.pwn/finetune/` |
|
|
21
21
|
| `reward` | **`reward_generator_mix`** | `PWN::AI::Agent::Reward.generator_mix` → online preference source-mix controller (`preferences.jsonl`) |
|
|
22
22
|
| `curriculum` | **`curriculum_practice_kpi`** | `PWN::AI::Agent::Curriculum.practice_kpi` → `~/.pwn/curriculum_kpi.jsonl` |
|
|
@@ -74,6 +74,8 @@ pool to:
|
|
|
74
74
|
CORE_TOOLS / DEFAULT_PREFERENCE (same list):
|
|
75
75
|
memory_recall · session_recall · skills_recall · pwn_eval · shell
|
|
76
76
|
mistakes_record · mistakes_resolve · learning_note_outcome · memory_remember · skills_update
|
|
77
|
+
artifact_read · artifact_grep
|
|
78
|
+
job_run · job_status · job_tail · job_result · job_kill
|
|
77
79
|
+ top-K keyword-ranked matches for THIS request
|
|
78
80
|
(ties break on Metrics per-engine success_rate, then
|
|
79
81
|
ai.agent.tool_preference)
|
|
@@ -83,13 +85,121 @@ mistakes_record · mistakes_resolve · learning_note_outcome · memory_remember
|
|
|
83
85
|
PWN::AI::Agent::Registry.definitions(relevance: 'nmap sweep 10.0.0.0/8', top_k: 10)
|
|
84
86
|
PWN::AI::Agent::Registry.rank(query: 'run a shell command') # inspect ranking
|
|
85
87
|
PWN::AI::Agent::Registry.preference_order # Env / DEFAULT_PREFERENCE
|
|
86
|
-
PWN::AI::Agent::Registry.toolsets # -> the
|
|
87
|
-
PWN::AI::Agent::Registry.all.count # ->
|
|
88
|
+
PWN::AI::Agent::Registry.toolsets # -> the 16 names above
|
|
89
|
+
PWN::AI::Agent::Registry.all.count # -> 146 (after discover)
|
|
88
90
|
```
|
|
89
91
|
|
|
90
92
|
Frontier engines leave `tool_router` off (unless you set it) and receive the
|
|
91
93
|
full set. Local engines (`ollama` / `openwebui`) default `tool_router` to on.
|
|
92
94
|
|
|
95
|
+
## Durable long-running jobs
|
|
96
|
+
|
|
97
|
+
Use `job_run(command:, max_runtime:, cwd:, env:, idempotency_key:)` for fuzzers,
|
|
98
|
+
full scans, and Ghidra headless analysis. It returns a job ID rather than holding
|
|
99
|
+
a tool call open. A separate Ruby supervisor owns the workload, persists status
|
|
100
|
+
and logs under `~/.pwn/jobs`, and remains alive when the launching agent exits.
|
|
101
|
+
`max_runtime: 21600` permits six hours; `0` means no runtime limit. The supervisor
|
|
102
|
+
enforces that deadline without requiring polls. This runtime does not enter
|
|
103
|
+
Dispatch's foreground timeout budget or its +180-second retry ladder.
|
|
104
|
+
|
|
105
|
+
Poll `job_status(id:)` for state and exit/signal. Read `job_tail(id:, offset: 0)`
|
|
106
|
+
and carry its `next_offset` into the next read; log pages are capped to the inline
|
|
107
|
+
budget. Log `eof` is only the current end of the log, not task completion.
|
|
108
|
+
Call `job_status` without an ID to rediscover recent jobs after changing sessions.
|
|
109
|
+
Use a stable `idempotency_key` for launch retries; do not rerun the command to poll
|
|
110
|
+
it. `job_kill` requests cancellation; confirm the terminal status afterward.
|
|
111
|
+
These job tools are in the default core set, subject to toolset exclusions.
|
|
112
|
+
|
|
113
|
+
`job_run(jobs: [...])` also runs its job graph inside a detached supervisor.
|
|
114
|
+
`shell(background: true, max_runtime: ...)` provides the same detached lifecycle;
|
|
115
|
+
the runtime predictor can route long shell work before Dispatch injects a timeout.
|
|
116
|
+
`fuzz_campaign(action: start, ...)` forwards runtime, working directory, environment,
|
|
117
|
+
session and idempotency settings to the same supervisor. No named-binary regex
|
|
118
|
+
is required for these routes. Host reboot/process-manager cgroup termination is
|
|
119
|
+
not session persistence: workloads are not automatically restarted after those
|
|
120
|
+
events, and lost supervision must not be reported as successful completion.
|
|
121
|
+
|
|
122
|
+
## Lossless tool-result paging
|
|
123
|
+
|
|
124
|
+
Oversized handler results are saved before redaction/quarantine to
|
|
125
|
+
`~/.pwn/artifacts/<session>/<sha8>.bin`. The inline summary carries the handle,
|
|
126
|
+
full SHA-256, byte count, serialization type, bounded preview, and execution
|
|
127
|
+
status (including nonzero exits/timeouts). Raw string results retain every byte;
|
|
128
|
+
structured results use JSON, with base64 wrappers for non-UTF-8 strings.
|
|
129
|
+
Files are private (0600, directories 0700). A short-hash collision fails rather
|
|
130
|
+
than overwriting different bytes. Spill errors are explicit tool failures.
|
|
131
|
+
|
|
132
|
+
`PWN::Env[:ai][:agent][:artifact_max_tokens]` optionally sets N. Without a
|
|
133
|
+
provider tokenizer, a byte is treated as a conservative token upper bound:
|
|
134
|
+
spill may happen early, never on the assumption that arbitrary dumps average
|
|
135
|
+
four bytes per token. The default is 6000 (local engines: 1024), with a minimum
|
|
136
|
+
of 1024 to leave room for the handle/metadata. Existing `result_max` and per-tool
|
|
137
|
+
caps can lower the default. This is a runtime fallback; existing config files
|
|
138
|
+
are not rewritten.
|
|
139
|
+
|
|
140
|
+
`artifact_read(handle, offset, length)` uses byte offsets, clamps page length
|
|
141
|
+
to the inline budget, and returns `next_offset`/`eof`. Handle pages default to
|
|
142
|
+
base64 for exact reconstruction; request `mode: text` for inspection. Legacy
|
|
143
|
+
path/ref readers remain available. `artifact_grep(handle, regex, offset)` returns
|
|
144
|
+
bounded per-line search results with byte offsets and a continuation cursor.
|
|
145
|
+
Regexes match whole binary lines (first match per line), not page fragments;
|
|
146
|
+
lines over 64 MiB raise an explicit error directing the model to `artifact_read`.
|
|
147
|
+
Regex execution is time-limited. Both readers
|
|
148
|
+
are core tools (subject to explicit toolset exclusions). Follow cursors rather
|
|
149
|
+
than assuming the requested length was returned. The loop keeps only its bounded
|
|
150
|
+
recent tool history; paging does not accumulate the full dump in context.
|
|
151
|
+
Credential redaction still applies to inline views; the saved bytes are unchanged.
|
|
152
|
+
|
|
153
|
+
## Payload validation diagnostics
|
|
154
|
+
|
|
155
|
+
`invalid_payload` responses include `rule_id`, `match`, `offset`, and `remedy`.
|
|
156
|
+
For rejected shell placeholders and syntax, `match` is the actual rejected
|
|
157
|
+
substring and `offset` is its zero-based byte position in the original decoded
|
|
158
|
+
command, including UTF-8 and base64 input. The legacy `offending_token`,
|
|
159
|
+
`byte_range` (exclusive end), `hint`, and `suggestion` fields remain available.
|
|
160
|
+
Missing fields and schema constraints have no command-text offset (`null`);
|
|
161
|
+
schema denials also identify the argument using `data_pointer`.
|
|
162
|
+
|
|
163
|
+
Ellipses in literal data pass without an escape hatch: Ruby is tokenized with
|
|
164
|
+
Ripper, and shell words are scanned with quote/escape state and queued heredoc
|
|
165
|
+
delimiters (including `<<-` tab stripping). Ruby strings, percent literals and
|
|
166
|
+
heredocs are data; parsed ranges and argument forwarding are valid code.
|
|
167
|
+
Bare elided commands and incomplete Ruby stubs such as `def foo(<3dots>)` are
|
|
168
|
+
denied with the same diagnostics. Explicit `placeholder_ok: true` still skips
|
|
169
|
+
the placeholder check, but never bypasses Ruby parsing or shell execution.
|
|
170
|
+
For quoting/transport, use `encoding: "base64"` and the encoded command in `data`.
|
|
171
|
+
Base64 is decoded before validation and is not a bypass: preserve the explicit
|
|
172
|
+
placeholder opt-in when needed. Neither option overrides shell syntax, size,
|
|
173
|
+
or policy restrictions. Each denial's `remedy` names the applicable correction.
|
|
174
|
+
|
|
175
|
+
## Required artifact contract
|
|
176
|
+
|
|
177
|
+
At intent classification, `Loop.run` precommits explicit output destinations as
|
|
178
|
+
an immutable `required_artifacts` list. Relative paths resolve against the
|
|
179
|
+
initial working directory; input/read paths are not output obligations. The
|
|
180
|
+
same list drives the prompt checklist, dispatch snapshots and final-answer gate.
|
|
181
|
+
Artifact-bearing requests cannot take greeting/how-to/recall text-only shortcuts.
|
|
182
|
+
|
|
183
|
+
A successful write-effect call must change the destination's host snapshot.
|
|
184
|
+
The host then records stat and SHA-256 readback in internal tool-message metadata,
|
|
185
|
+
bound to this turn's contract ID. Finalization rechecks the current file against
|
|
186
|
+
that evidence. Textual delivery claims, mere existence, old-turn observations,
|
|
187
|
+
and files changed after readback cannot satisfy the gate. A proven current-turn
|
|
188
|
+
write delta takes precedence over filesystem timestamp clock-tick lag.
|
|
189
|
+
Nested calls inherit the contract and restore it on return. Historical mistake
|
|
190
|
+
entries are not deleted by this enforcement.
|
|
191
|
+
|
|
192
|
+
## Retry checkpoints
|
|
193
|
+
|
|
194
|
+
The identical-payload checkpoint distinguishes retries from successful repeats.
|
|
195
|
+
A structured nonzero exit or timeout resets that payload's repeat count and
|
|
196
|
+
does not extinguish the payload through the repeated-failure guard. The command
|
|
197
|
+
can therefore be retried verbatim; timeout retries still use Dispatch's existing
|
|
198
|
+
deadline escalation and cumulative budget. Successful repeats retain the
|
|
199
|
+
checkpoint. Policy denials, exhausted budgets, checkpoint responses, and text
|
|
200
|
+
in stdout do not grant an execution-failure exemption. Actual command failures
|
|
201
|
+
remain recorded; the exemption does not erase historical mistake entries.
|
|
202
|
+
|
|
93
203
|
## Tool preference (`ai.agent.tool_preference`)
|
|
94
204
|
|
|
95
205
|
When keyword fit and other rank scores tie, the registry prefers this
|
|
@@ -98,6 +208,8 @@ default order:
|
|
|
98
208
|
```text
|
|
99
209
|
memory_recall · session_recall · skills_recall · pwn_eval · shell
|
|
100
210
|
mistakes_record · mistakes_resolve · learning_note_outcome · memory_remember · skills_update
|
|
211
|
+
artifact_read · artifact_grep
|
|
212
|
+
job_run · job_status · job_tail · job_result · job_kill
|
|
101
213
|
```
|
|
102
214
|
|
|
103
215
|
Set `ai.agent.tool_preference` in `~/.pwn/pwn.yaml`, or pass `order:` /
|
|
@@ -113,6 +225,51 @@ stable sort after the router slims the pool.
|
|
|
113
225
|
|
|
114
226
|
`Policy` uses the same list when it suggests a next action in the prompt.
|
|
115
227
|
|
|
228
|
+
## Finding evidence and reproducible reports
|
|
229
|
+
|
|
230
|
+
`finding_record` requires a command/code `poc`, ordered `reproduction_steps`
|
|
231
|
+
(setup, commands, expected observations), and an evidence-based
|
|
232
|
+
`severity_justification`, alongside its CVSS/CWE/asset/remediation fields.
|
|
233
|
+
Provide `evidence_paths` or `artifact_handles` (or both). Each handle is either
|
|
234
|
+
a string or an object containing `handle`, optional `kind` (`pcap`, `screenshot`,
|
|
235
|
+
`crash`, `poc`, `evidence`), optional display `label`, and optional expected
|
|
236
|
+
full `sha256`. Use artifact middleware handles such as `session/sha8.bin`,
|
|
237
|
+
`sha256:<64 lowercase hex digits>`, or the legacy bare full SHA-256 returned
|
|
238
|
+
by `ArtifactRegistry.put`. Handles are validated, not treated as file paths.
|
|
239
|
+
|
|
240
|
+
The host resolves each handle, computes the full SHA-256 and byte count, checks
|
|
241
|
+
any supplied digest, and preserves an engagement-owned copy. The persisted
|
|
242
|
+
finding includes `evidence_artifacts` with handle, kind, label, source `path`,
|
|
243
|
+
durable `stored` path, hash, and size. Malformed, missing, symlinked or tampered
|
|
244
|
+
handles fail recording. Verification/retest and combined-impact evidence are
|
|
245
|
+
also attached to the finding; previous evidence snapshots remain linked.
|
|
246
|
+
|
|
247
|
+
Export with `finding_record(op: 'export', engagement_id: 'fixture',
|
|
248
|
+
dir_path: '/tmp/findings-report', report_name: 'findings')`. Generated reports
|
|
249
|
+
include the supplied PoC instructions and justification with evidence hashes
|
|
250
|
+
per finding. HTML/Markdown include portable links, raster screenshots, and
|
|
251
|
+
escaped PoC previews; JSON/SARIF retain structured linkage. Distribute the
|
|
252
|
+
adjacent `attachments/` directory with the reports. Every attachment is checked
|
|
253
|
+
against its recorded digest and size; missing or changed durable copies and
|
|
254
|
+
tampered export targets fail explicitly. Active SVG/HTML is never embedded as
|
|
255
|
+
a screenshot. Full PoC text is downloadable even when its preview is bounded.
|
|
256
|
+
Evidence packaging currently reads one full attachment into memory at a time.
|
|
257
|
+
Hashes establish byte identity, not successful exploitation;
|
|
258
|
+
new records remain `not_executed` until explicitly verified. Direct legacy
|
|
259
|
+
`Findings.record_structured` callers may omit the new narrative fields (the
|
|
260
|
+
existing PoC becomes their reproduction step), but the agent tool requires
|
|
261
|
+
them. Original-source removal/tampering remains detectable by
|
|
262
|
+
`Findings.evidence_verify`; durable copies are checked too.
|
|
263
|
+
|
|
264
|
+
Findings can declare outgoing `enables: [finding_id]` links. Use
|
|
265
|
+
`finding_record(op: 'link', id: source_id, enables: [target_id])` to link
|
|
266
|
+
already recorded findings. `chain_impact` takes ordered source-to-impact
|
|
267
|
+
`ids`, combined-impact evidence, a severity justification, and reproduction
|
|
268
|
+
steps. Reports rank the resulting paths by their scoped combined-impact
|
|
269
|
+
assessment; linked constituents remain in technical details rather than
|
|
270
|
+
appearing as separate summary priorities. See
|
|
271
|
+
[Recon / Findings API](Recon-Findings-API.md#directed-attack-paths-and-combined-impact).
|
|
272
|
+
|
|
116
273
|
## Adding a tool
|
|
117
274
|
|
|
118
275
|
```ruby
|
data/documentation/Diagrams.md
CHANGED
|
@@ -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
|

|
|
70
70
|
|
|
71
|
-
### Agent Tool Registry (
|
|
71
|
+
### Agent Tool Registry (16 toolsets · 150 tools)
|
|
72
72
|
[source](diagrams/dot/agent-tool-registry.dot) · doc: [Agent Tool Registry](Agent-Tool-Registry.md)
|
|
73
73
|

|
|
74
74
|
|
data/documentation/Home.md
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
| | |
|
|
37
37
|
|---|---|
|
|
38
38
|
| [AI / LLM Integration](AI-Integration.md) | OpenAI · Anthropic · Grok (OAuth) · Gemini · Ollama · Open WebUI |
|
|
39
|
-
| [Agent Tool Registry](Agent-Tool-Registry.md) |
|
|
39
|
+
| [Agent Tool Registry](Agent-Tool-Registry.md) | 16 toolsets · **150** LLM-callable tools |
|
|
40
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 |
|
|
@@ -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
|
|
32
|
+
| `Registry` | JSON-Schema function definitions grouped into 16 **toolsets** · **150 tools** · `CORE_TOOLS` = `DEFAULT_PREFERENCE` (`memory_recall` · `session_recall` · `skills_recall` · `pwn_eval` · `shell` · `mistakes_record` · `mistakes_resolve` · `learning_note_outcome` · `memory_remember` · `skills_update` · `artifact_read` · `artifact_grep`) |
|
|
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) |
|
|
@@ -15,6 +15,10 @@ Required: `gdb`. Fallback: `PWN::Plugins::Debugger` still exposes `cyclic` helpe
|
|
|
15
15
|
|
|
16
16
|
Required: `nuclei`. Fallback: `TransparentBrowser` + `pwn_eval`.
|
|
17
17
|
|
|
18
|
+
## pwn-plugins-httpx
|
|
19
|
+
|
|
20
|
+
Required: `httpx`. Fallback: `TransparentBrowser` + `NmapIt.scan`.
|
|
21
|
+
|
|
18
22
|
## pwn-plugins-sqlmap
|
|
19
23
|
|
|
20
24
|
Required: `sqlmap`. Fallback: `pwn_eval` HTTP clients.
|
|
@@ -41,11 +45,11 @@ Required: `msfconsole`. Fallback: `exploitdev`, `pwn_eval`, `PWN::Plugins::Handl
|
|
|
41
45
|
|
|
42
46
|
## pwn-plugins-burpsuite
|
|
43
47
|
|
|
44
|
-
Required: `burpsuite`. Fallback: `TransparentBrowser`, `nuclei`, `PWN::Plugins::MitmProxy`.
|
|
48
|
+
Required: `burpsuite`. Fallback: `TransparentBrowser`, `nuclei`, `httpx`, `PWN::Plugins::MitmProxy`.
|
|
45
49
|
|
|
46
50
|
## pwn-plugins-zaproxy
|
|
47
51
|
|
|
48
|
-
Required: `zaproxy`. Fallback: `nuclei`, `TransparentBrowser`, `PWN::Plugins::MitmProxy`.
|
|
52
|
+
Required: `zaproxy`. Fallback: `nuclei`, `httpx`, `TransparentBrowser`, `PWN::Plugins::MitmProxy`.
|
|
49
53
|
|
|
50
54
|
## pwn-plugins-packet
|
|
51
55
|
|
|
@@ -28,7 +28,39 @@ Legacy `Findings.record`, query/report, chain, render, and SARIF output remain c
|
|
|
28
28
|
|
|
29
29
|
`PWN::AI::Agent::Swarm.ensure_specialists` / `agent_roster` writes recon, authz, injection, xss, and business_logic personas. SARIF export is `Findings.render`; `PWN::Plugins::Github.open_fix_pr` opens a remediation PR (tests stub the GitHub API).
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
## Directed attack paths and combined impact
|
|
32
|
+
|
|
33
|
+
`enables: [finding_id]` is an outgoing edge: this finding enables the named
|
|
34
|
+
finding. Targets must already exist in the same engagement. For findings
|
|
35
|
+
recorded earlier, use `finding_record(op: 'link', id: ssrf_id,
|
|
36
|
+
enables: [admin_id])` or `Findings.link(id: ssrf_id, enables: [admin_id])`.
|
|
37
|
+
The update replaces outgoing `enables` links; legacy `attack_chain_refs` are
|
|
38
|
+
incoming prerequisites and remain supported. Missing IDs, duplicate edges,
|
|
39
|
+
self-links, cross-engagement links, and cycles are rejected.
|
|
40
|
+
|
|
41
|
+
Record the demonstrated combined impact with ordered source-to-impact `ids`:
|
|
42
|
+
`finding_record(op: 'chain_impact', ids: [ssrf_id, admin_id],
|
|
43
|
+
combined_impact_path: '/tmp/combined-impact.txt', escalate: true,
|
|
44
|
+
combined_severity: 'critical', severity_justification: justification,
|
|
45
|
+
reproduction_steps: steps)`. The evidence file must name each ID and describe
|
|
46
|
+
the combined impact; keep actual PoC output with it. This preserves a scoped
|
|
47
|
+
`chain_assessments` entry containing the ordered IDs, justification, steps,
|
|
48
|
+
and durable evidence hashes. Different paths retain separate assessments.
|
|
49
|
+
|
|
50
|
+
Reports enumerate directed root-to-leaf paths and rank them by the assessed
|
|
51
|
+
combined severity, not by summing or averaging constituent CVSS. An evidenced
|
|
52
|
+
SSRF → internal-admin takeover can therefore be one critical priority while
|
|
53
|
+
both constituent findings retain their medium CVSS in technical details.
|
|
54
|
+
HTML/Markdown display ranked paths before details; JSON includes `priorities`
|
|
55
|
+
and `attack_chains`; SARIF emits one result per path plus standalone findings.
|
|
56
|
+
Chain evidence is exported beside the report and verified against its hash.
|
|
57
|
+
|
|
58
|
+
An assessment applies only to its exact ordered path. Linking alone never
|
|
59
|
+
creates a critical rating: unassessed paths retain maximum constituent
|
|
60
|
+
severity and are explicitly marked `unassessed`. Severity is an evidence-based
|
|
61
|
+
assessment, not an automatically calculated chain CVSS score. The report
|
|
62
|
+
rejects invalid cyclic graphs and more than 1000 reportable paths rather than
|
|
63
|
+
silently dropping paths. Hash checks prove byte identity, not exploit execution.
|
|
32
64
|
|
|
33
65
|
## Verification boundaries
|
|
34
66
|
|
|
@@ -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 | **
|
|
23
|
+
| Agent toolsets | **16** · **150 tools** | terminal · pwn · memory · skills · sessions · learning · metrics · policy · extrospection · cron · swarm · reward · curriculum · http · mcp · manifest |
|
|
24
24
|
|
|
25
25
|
## Three ways to use it
|
|
26
26
|
|
|
@@ -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
|
-
|
|
104
|
+
16 toolsets · **150 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,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-confirmation
|
|
3
|
+
description: Drive PWN::AI::Agent::Confirmation 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::Confirmation
|
|
10
|
+
source: pwn/ai/agent/confirmation.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::AI::Agent::Confirmation
|
|
14
|
+
|
|
15
|
+
Per-engagement ACK for exploit/destructive tool calls (PWN-AI-005 tiers).
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::AI::Agent::Confirmation` 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/confirmation.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::Confirmation.help
|
|
31
|
+
PWN::AI::Agent::Confirmation.required_bins(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `required_bins`
|
|
37
|
+
- `tier`
|
|
38
|
+
- `gate`
|
|
39
|
+
- `authors`
|
|
40
|
+
- `help`
|
|
41
|
+
|
|
42
|
+
## Source
|
|
43
|
+
|
|
44
|
+
`pwn/ai/agent/confirmation.rb`
|
|
45
|
+
|
|
46
|
+
## Verification
|
|
47
|
+
|
|
48
|
+
`PWN::AI::Agent::Confirmation.respond_to?(:required_bins)` after the
|
|
49
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -12,7 +12,7 @@ metadata:
|
|
|
12
12
|
|
|
13
13
|
# PWN::AI::Agent::Result
|
|
14
14
|
|
|
15
|
-
Conditioning applied to every tool result before it re-enters the conversation as a role:'tool' message:
|
|
15
|
+
Conditioning applied to every tool result before it re-enters the conversation as a role:'tool' message: lossless paging + credential redaction. Keeps the context window bounded and avoids leaking PWN::Env credentials back into the model.
|
|
16
16
|
|
|
17
17
|
## When to use
|
|
18
18
|
|
|
@@ -34,6 +34,9 @@ PWN::AI::Agent::Result.condition(opts)
|
|
|
34
34
|
## Public methods
|
|
35
35
|
|
|
36
36
|
- `condition`
|
|
37
|
+
- `page`
|
|
38
|
+
- `token_limit`
|
|
39
|
+
- `page_length`
|
|
37
40
|
- `default_max`
|
|
38
41
|
- `redact`
|
|
39
42
|
- `authors`
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-taskdag
|
|
3
|
+
description: Drive PWN::AI::Agent::TaskDAG 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::TaskDAG
|
|
10
|
+
source: pwn/ai/agent/task_dag.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::AI::Agent::TaskDAG
|
|
14
|
+
|
|
15
|
+
Planner/executor split: YAML task DAGs with per-step checkpoints.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::AI::Agent::TaskDAG` 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/task_dag.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::TaskDAG.help
|
|
31
|
+
PWN::AI::Agent::TaskDAG.required_bins(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `required_bins`
|
|
37
|
+
- `plan`
|
|
38
|
+
- `execute`
|
|
39
|
+
- `resume`
|
|
40
|
+
- `authors`
|
|
41
|
+
- `help`
|
|
42
|
+
|
|
43
|
+
## Source
|
|
44
|
+
|
|
45
|
+
`pwn/ai/agent/task_dag.rb`
|
|
46
|
+
|
|
47
|
+
## Verification
|
|
48
|
+
|
|
49
|
+
`PWN::AI::Agent::TaskDAG.respond_to?(:required_bins)` after the
|
|
50
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-tools-browsergoto
|
|
3
|
+
description: Drive PWN::Ai::Agent::Tools::BrowserGoto 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::BrowserGoto
|
|
10
|
+
source: pwn/ai/agent/tools/browser_goto.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Ai::Agent::Tools::BrowserGoto
|
|
14
|
+
|
|
15
|
+
Public API for PWN::Ai::Agent::Tools::BrowserGoto.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Ai::Agent::Tools::BrowserGoto` 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/browser_goto.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::BrowserGoto.help
|
|
31
|
+
PWN::Ai::Agent::Tools::BrowserGoto.help(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- _(no public class methods parsed)_
|
|
37
|
+
|
|
38
|
+
## Source
|
|
39
|
+
|
|
40
|
+
`pwn/ai/agent/tools/browser_goto.rb`
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
`PWN::Ai::Agent::Tools::BrowserGoto.respond_to?(:help)` after the
|
|
45
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-tools-lootquery
|
|
3
|
+
description: Drive PWN::Ai::Agent::Tools::LootQuery 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::LootQuery
|
|
10
|
+
source: pwn/ai/agent/tools/loot_query.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Ai::Agent::Tools::LootQuery
|
|
14
|
+
|
|
15
|
+
Public API for PWN::Ai::Agent::Tools::LootQuery.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Ai::Agent::Tools::LootQuery` 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/loot_query.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::LootQuery.help
|
|
31
|
+
PWN::Ai::Agent::Tools::LootQuery.help(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- _(no public class methods parsed)_
|
|
37
|
+
|
|
38
|
+
## Source
|
|
39
|
+
|
|
40
|
+
`pwn/ai/agent/tools/loot_query.rb`
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
`PWN::Ai::Agent::Tools::LootQuery.respond_to?(:help)` after the
|
|
45
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-tools-nmapscan
|
|
3
|
+
description: Drive PWN::Ai::Agent::Tools::NmapScan 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::NmapScan
|
|
10
|
+
source: pwn/ai/agent/tools/nmap_scan.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Ai::Agent::Tools::NmapScan
|
|
14
|
+
|
|
15
|
+
Public API for PWN::Ai::Agent::Tools::NmapScan.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Ai::Agent::Tools::NmapScan` 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/nmap_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::NmapScan.help
|
|
31
|
+
PWN::Ai::Agent::Tools::NmapScan.help(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- _(no public class methods parsed)_
|
|
37
|
+
|
|
38
|
+
## Source
|
|
39
|
+
|
|
40
|
+
`pwn/ai/agent/tools/nmap_scan.rb`
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
`PWN::Ai::Agent::Tools::NmapScan.respond_to?(:help)` after the
|
|
45
|
+
module is loaded. Read the source for parameter names.
|