pwn 0.5.613 → 0.5.615

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -10
  3. data/README.md +110 -24
  4. data/documentation/AI-Integration.md +36 -0
  5. data/documentation/BurpSuite.md +26 -0
  6. data/documentation/Contributing.md +31 -0
  7. data/documentation/Diagrams.md +57 -0
  8. data/documentation/Drivers.md +25 -0
  9. data/documentation/General-PWN-Usage.md +40 -0
  10. data/documentation/Home.md +51 -0
  11. data/documentation/How-PWN-Works.md +60 -0
  12. data/documentation/Installation.md +50 -0
  13. data/documentation/NmapIt.md +18 -0
  14. data/documentation/Plugins.md +59 -0
  15. data/documentation/Reporting.md +28 -0
  16. data/documentation/SAST.md +32 -0
  17. data/documentation/Skills-Memory-Learning.md +44 -0
  18. data/documentation/Transparent-Browser.md +32 -0
  19. data/documentation/Troubleshooting.md +38 -0
  20. data/documentation/What-is-PWN.md +34 -0
  21. data/documentation/Why-PWN.md +18 -0
  22. data/documentation/diagrams/ai-integration-tool-calling.svg +134 -0
  23. data/documentation/diagrams/burp-vs-zap-preference.svg +84 -0
  24. data/documentation/diagrams/code-scanning-sast.svg +112 -0
  25. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +23 -0
  26. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +15 -0
  27. data/documentation/diagrams/dot/code-scanning-sast.dot +21 -0
  28. data/documentation/diagrams/dot/driver-framework.dot +17 -0
  29. data/documentation/diagrams/dot/fuzzing-workflow.dot +27 -0
  30. data/documentation/diagrams/dot/history-to-drivers.dot +20 -0
  31. data/documentation/diagrams/dot/memory-skills-detailed.dot +28 -0
  32. data/documentation/diagrams/dot/network-infra-testing.dot +22 -0
  33. data/documentation/diagrams/dot/overall-pwn-architecture.dot +49 -0
  34. data/documentation/diagrams/dot/penetration-testing-workflow.dot +29 -0
  35. data/documentation/diagrams/dot/plugin-ecosystem.dot +31 -0
  36. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +57 -0
  37. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +37 -0
  38. data/documentation/diagrams/dot/reporting-pipeline.dot +17 -0
  39. data/documentation/diagrams/dot/reverse-engineering-flow.dot +21 -0
  40. data/documentation/diagrams/dot/sessions-cron-automation.dot +17 -0
  41. data/documentation/diagrams/dot/web-application-testing.dot +27 -0
  42. data/documentation/diagrams/dot/zero-day-research-flow.dot +27 -0
  43. data/documentation/diagrams/driver-framework.svg +90 -0
  44. data/documentation/diagrams/fuzzing-workflow.svg +147 -0
  45. data/documentation/diagrams/history-to-drivers.svg +117 -0
  46. data/documentation/diagrams/memory-skills-detailed.svg +154 -0
  47. data/documentation/diagrams/network-infra-testing.svg +121 -0
  48. data/documentation/diagrams/overall-pwn-architecture.svg +234 -0
  49. data/documentation/diagrams/penetration-testing-workflow.svg +148 -0
  50. data/documentation/diagrams/plugin-ecosystem.svg +172 -0
  51. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +234 -0
  52. data/documentation/diagrams/pwn-repl-prototyping.svg +179 -0
  53. data/documentation/diagrams/reporting-pipeline.svg +91 -0
  54. data/documentation/diagrams/reverse-engineering-flow.svg +114 -0
  55. data/documentation/diagrams/sessions-cron-automation.svg +92 -0
  56. data/documentation/diagrams/web-application-testing.svg +137 -0
  57. data/documentation/diagrams/zero-day-research-flow.svg +149 -0
  58. data/documentation/pwn-REPL.md +33 -0
  59. data/documentation/pwn-ai-Agent.md +43 -0
  60. data/lib/pwn/ai/agent/learning.rb +377 -0
  61. data/lib/pwn/ai/agent/loop.rb +18 -3
  62. data/lib/pwn/ai/agent/metrics.rb +155 -0
  63. data/lib/pwn/ai/agent/prompt_builder.rb +23 -3
  64. data/lib/pwn/ai/agent/tools/learning.rb +113 -0
  65. data/lib/pwn/ai/agent/tools/skills.rb +94 -8
  66. data/lib/pwn/ai/agent.rb +2 -0
  67. data/lib/pwn/ai/grok.rb +249 -106
  68. data/lib/pwn/config.rb +86 -13
  69. data/lib/pwn/plugins/monkey_patch.rb +2 -2
  70. data/lib/pwn/plugins/repl.rb +68 -3
  71. data/lib/pwn/version.rb +1 -1
  72. data/spec/lib/pwn/ai/agent/learning_spec.rb +68 -0
  73. data/spec/lib/pwn/ai/agent/metrics_spec.rb +27 -0
  74. data/spec/lib/pwn/ai/agent/tools/learning_spec.rb +30 -0
  75. metadata +84 -34
  76. data/documentation/PWN.png +0 -0
  77. data/documentation/PWN_Contributors_and_Users.png +0 -0
  78. data/documentation/fax-spectrogram.png +0 -0
  79. data/documentation/fax-waveform.png +0 -0
  80. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +0 -54
  81. data/documentation/lifecycle_authz_replay.example.yaml +0 -27
  82. data/documentation/pwn_android_war_dialer_session.png +0 -0
  83. data/documentation/pwn_install.png +0 -0
  84. data/documentation/pwn_wallpaper.jpg +0 -0
  85. data/documentation/ringing-spectrogram.png +0 -0
  86. data/documentation/ringing-waveform.png +0 -0
  87. data/documentation/vulnerability_report_template.md +0 -37
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN Driver Framework Pages: 1 -->
7
+ <svg width="682pt" height="98pt"
8
+ viewBox="0.00 0.00 682.00 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)">
10
+ <title>PWN Driver Framework</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-94 678,-94 678,4 -4,4"/>
12
+ <!-- Parser -->
13
+ <g id="node1" class="node">
14
+ <title>Parser</title>
15
+ <path fill="none" stroke="black" d="M114.25,-63C114.25,-63 12,-63 12,-63 6,-63 0,-57 0,-51 0,-51 0,-39 0,-39 0,-33 6,-27 12,-27 12,-27 114.25,-27 114.25,-27 120.25,-27 126.25,-33 126.25,-39 126.25,-39 126.25,-51 126.25,-51 126.25,-57 120.25,-63 114.25,-63"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="63.12" y="-46.95" font-family="Arial" font-size="9.00">PWN::Driver::Parser</text>
17
+ <text xml:space="preserve" text-anchor="middle" x="63.12" y="-36.45" font-family="Arial" font-size="9.00">(OptionParser + auto_opts)</text>
18
+ </g>
19
+ <!-- Script -->
20
+ <g id="node2" class="node">
21
+ <title>Script</title>
22
+ <path fill="none" stroke="black" d="M255.5,-63C255.5,-63 174.25,-63 174.25,-63 168.25,-63 162.25,-57 162.25,-51 162.25,-51 162.25,-39 162.25,-39 162.25,-33 168.25,-27 174.25,-27 174.25,-27 255.5,-27 255.5,-27 261.5,-27 267.5,-33 267.5,-39 267.5,-39 267.5,-51 267.5,-51 267.5,-57 261.5,-63 255.5,-63"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="214.88" y="-46.95" font-family="Arial" font-size="9.00">Driver Script</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="214.88" y="-36.45" font-family="Arial" font-size="9.00">(bin/pwn_* or custom)</text>
25
+ </g>
26
+ <!-- Parser&#45;&gt;Script -->
27
+ <g id="edge2" class="edge">
28
+ <title>Parser&#45;&gt;Script</title>
29
+ <path fill="none" stroke="black" d="M126.33,-38.34C134.42,-38.23 142.7,-38.22 150.8,-38.33"/>
30
+ <polygon fill="black" stroke="black" points="150.5,-41.82 160.57,-38.51 150.64,-34.82 150.5,-41.82"/>
31
+ </g>
32
+ <!-- Script&#45;&gt;Parser -->
33
+ <g id="edge1" class="edge">
34
+ <title>Script&#45;&gt;Parser</title>
35
+ <path fill="none" stroke="black" d="M162.08,-51.46C154.16,-51.66 145.85,-51.76 137.57,-51.75"/>
36
+ <polygon fill="black" stroke="black" points="137.87,-48.25 127.85,-51.67 137.82,-55.25 137.87,-48.25"/>
37
+ </g>
38
+ <!-- PWNLoad -->
39
+ <g id="node3" class="node">
40
+ <title>PWNLoad</title>
41
+ <path fill="none" stroke="black" d="M392.62,-90C392.62,-90 335.38,-90 335.38,-90 329.38,-90 323.38,-84 323.38,-78 323.38,-78 323.38,-66 323.38,-66 323.38,-60 329.38,-54 335.38,-54 335.38,-54 392.62,-54 392.62,-54 398.62,-54 404.62,-60 404.62,-66 404.62,-66 404.62,-78 404.62,-78 404.62,-84 398.62,-90 392.62,-90"/>
42
+ <text xml:space="preserve" text-anchor="middle" x="364" y="-73.95" font-family="Arial" font-size="9.00">require &#39;pwn&#39;</text>
43
+ <text xml:space="preserve" text-anchor="middle" x="364" y="-63.45" font-family="Arial" font-size="9.00">Full namespace</text>
44
+ </g>
45
+ <!-- Script&#45;&gt;PWNLoad -->
46
+ <g id="edge3" class="edge">
47
+ <title>Script&#45;&gt;PWNLoad</title>
48
+ <path fill="none" stroke="black" d="M267.75,-54.52C282.11,-57.15 297.68,-60.01 311.99,-62.64"/>
49
+ <polygon fill="black" stroke="black" points="311.2,-66.05 321.66,-64.41 312.46,-59.17 311.2,-66.05"/>
50
+ </g>
51
+ <!-- standalone | cron | pwn&#45;ai -->
52
+ <g id="node6" class="node">
53
+ <title>standalone | cron | pwn&#45;ai</title>
54
+ <path fill="none" stroke="black" d="M412.5,-36C412.5,-36 315.5,-36 315.5,-36 309.5,-36 303.5,-30 303.5,-24 303.5,-24 303.5,-12 303.5,-12 303.5,-6 309.5,0 315.5,0 315.5,0 412.5,0 412.5,0 418.5,0 424.5,-6 424.5,-12 424.5,-12 424.5,-24 424.5,-24 424.5,-30 418.5,-36 412.5,-36"/>
55
+ <text xml:space="preserve" text-anchor="middle" x="364" y="-14.7" font-family="Arial" font-size="9.00">standalone | cron | pwn&#45;ai</text>
56
+ </g>
57
+ <!-- Script&#45;&gt;standalone | cron | pwn&#45;ai -->
58
+ <g id="edge6" class="edge">
59
+ <title>Script&#45;&gt;standalone | cron | pwn&#45;ai</title>
60
+ <path fill="none" stroke="black" d="M267.75,-35.48C275.59,-34.04 283.81,-32.53 291.97,-31.03"/>
61
+ <polygon fill="black" stroke="black" points="292.36,-34.52 301.56,-29.27 291.09,-27.64 292.36,-34.52"/>
62
+ </g>
63
+ <!-- Orchestrate -->
64
+ <g id="node4" class="node">
65
+ <title>Orchestrate</title>
66
+ <path fill="none" stroke="black" d="M550.75,-90C550.75,-90 472.5,-90 472.5,-90 466.5,-90 460.5,-84 460.5,-78 460.5,-78 460.5,-66 460.5,-66 460.5,-60 466.5,-54 472.5,-54 472.5,-54 550.75,-54 550.75,-54 556.75,-54 562.75,-60 562.75,-66 562.75,-66 562.75,-78 562.75,-78 562.75,-84 556.75,-90 550.75,-90"/>
67
+ <text xml:space="preserve" text-anchor="middle" x="511.62" y="-73.95" font-family="Arial" font-size="9.00">Orchestration Logic</text>
68
+ <text xml:space="preserve" text-anchor="middle" x="511.62" y="-63.45" font-family="Arial" font-size="9.00">(plugins + AI + loops)</text>
69
+ </g>
70
+ <!-- PWNLoad&#45;&gt;Orchestrate -->
71
+ <g id="edge4" class="edge">
72
+ <title>PWNLoad&#45;&gt;Orchestrate</title>
73
+ <path fill="none" stroke="black" d="M404.79,-72C418.42,-72 433.99,-72 448.93,-72"/>
74
+ <polygon fill="black" stroke="black" points="448.68,-75.5 458.68,-72 448.68,-68.5 448.68,-75.5"/>
75
+ </g>
76
+ <!-- Outputs -->
77
+ <g id="node5" class="node">
78
+ <title>Outputs</title>
79
+ <path fill="none" stroke="black" d="M662,-90C662,-90 610.75,-90 610.75,-90 604.75,-90 598.75,-84 598.75,-78 598.75,-78 598.75,-66 598.75,-66 598.75,-60 604.75,-54 610.75,-54 610.75,-54 662,-54 662,-54 668,-54 674,-60 674,-66 674,-66 674,-78 674,-78 674,-84 668,-90 662,-90"/>
80
+ <text xml:space="preserve" text-anchor="middle" x="636.38" y="-73.95" font-family="Arial" font-size="9.00">Reports, Logs,</text>
81
+ <text xml:space="preserve" text-anchor="middle" x="636.38" y="-63.45" font-family="Arial" font-size="9.00">Findings</text>
82
+ </g>
83
+ <!-- Orchestrate&#45;&gt;Outputs -->
84
+ <g id="edge5" class="edge">
85
+ <title>Orchestrate&#45;&gt;Outputs</title>
86
+ <path fill="none" stroke="black" d="M562.91,-72C570.91,-72 579.18,-72 587.14,-72"/>
87
+ <polygon fill="black" stroke="black" points="587,-75.5 597,-72 587,-68.5 587,-75.5"/>
88
+ </g>
89
+ </g>
90
+ </svg>
@@ -0,0 +1,147 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN Fuzzing Workflows Pages: 1 -->
7
+ <svg width="740pt" height="247pt"
8
+ viewBox="0.00 0.00 740.00 247.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 243)">
10
+ <title>PWN Fuzzing Workflows</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-243 736.32,-243 736.32,4 -4,4"/>
12
+ <!-- Input -->
13
+ <g id="node1" class="node">
14
+ <title>Input</title>
15
+ <path fill="none" stroke="black" d="M76,-36C76,-36 12,-36 12,-36 6,-36 0,-30 0,-24 0,-24 0,-12 0,-12 0,-6 6,0 12,0 12,0 76,0 76,0 82,0 88,-6 88,-12 88,-12 88,-24 88,-24 88,-30 82,-36 76,-36"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="44" y="-19.95" font-family="Arial" font-size="9.00">Input Corpus</text>
17
+ <text xml:space="preserve" text-anchor="middle" x="44" y="-9.45" font-family="Arial" font-size="9.00">(Seeds, Mutators)</text>
18
+ </g>
19
+ <!-- PWNfuzz -->
20
+ <g id="node6" class="node">
21
+ <title>PWNfuzz</title>
22
+ <ellipse fill="none" stroke="black" cx="181.1" cy="-113" rx="56.1" ry="18"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="181.1" y="-109.7" font-family="Arial" font-size="9.00">PWN::Plugins::Fuzz</text>
24
+ </g>
25
+ <!-- Input&#45;&gt;PWNfuzz -->
26
+ <g id="edge1" class="edge">
27
+ <title>Input&#45;&gt;PWNfuzz</title>
28
+ <path fill="none" stroke="black" d="M71.05,-36.32C92.88,-51.67 124.16,-73.67 147.63,-90.17"/>
29
+ <polygon fill="black" stroke="black" points="145.4,-92.88 155.6,-95.77 149.43,-87.16 145.4,-92.88"/>
30
+ </g>
31
+ <!-- FuzzProto -->
32
+ <g id="node2" class="node">
33
+ <title>FuzzProto</title>
34
+ <path fill="none" stroke="black" d="M388.45,-239C388.45,-239 286.2,-239 286.2,-239 280.2,-239 274.2,-233 274.2,-227 274.2,-227 274.2,-215 274.2,-215 274.2,-209 280.2,-203 286.2,-203 286.2,-203 388.45,-203 388.45,-203 394.45,-203 400.45,-209 400.45,-215 400.45,-215 400.45,-227 400.45,-227 400.45,-233 394.45,-239 388.45,-239"/>
35
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-222.95" font-family="Arial" font-size="9.00">Protocol Fuzz</text>
36
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-212.45" font-family="Arial" font-size="9.00">(pwn_fuzz_net_app_proto)</text>
37
+ </g>
38
+ <!-- Monitor -->
39
+ <g id="node7" class="node">
40
+ <title>Monitor</title>
41
+ <path fill="none" stroke="black" d="M547.2,-131C547.2,-131 449.45,-131 449.45,-131 443.45,-131 437.45,-125 437.45,-119 437.45,-119 437.45,-107 437.45,-107 437.45,-101 443.45,-95 449.45,-95 449.45,-95 547.2,-95 547.2,-95 553.2,-95 559.2,-101 559.2,-107 559.2,-107 559.2,-119 559.2,-119 559.2,-125 553.2,-131 547.2,-131"/>
42
+ <text xml:space="preserve" text-anchor="middle" x="498.32" y="-114.95" font-family="Arial" font-size="9.00">Monitor Crashes</text>
43
+ <text xml:space="preserve" text-anchor="middle" x="498.32" y="-104.45" font-family="Arial" font-size="9.00">(PS, logging, core dumps)</text>
44
+ </g>
45
+ <!-- FuzzProto&#45;&gt;Monitor -->
46
+ <g id="edge6" class="edge">
47
+ <title>FuzzProto&#45;&gt;Monitor</title>
48
+ <path fill="none" stroke="black" d="M384.87,-202.53C390.24,-199.89 395.55,-197.03 400.45,-194 426.05,-178.19 452.05,-156.05 470.66,-138.91"/>
49
+ <polygon fill="black" stroke="black" points="472.9,-141.61 477.81,-132.22 468.11,-136.5 472.9,-141.61"/>
50
+ </g>
51
+ <!-- FuzzFile -->
52
+ <g id="node3" class="node">
53
+ <title>FuzzFile</title>
54
+ <path fill="none" stroke="black" d="M369.32,-185C369.32,-185 305.32,-185 305.32,-185 299.32,-185 293.32,-179 293.32,-173 293.32,-173 293.32,-161 293.32,-161 293.32,-155 299.32,-149 305.32,-149 305.32,-149 369.32,-149 369.32,-149 375.32,-149 381.32,-155 381.32,-161 381.32,-161 381.32,-173 381.32,-173 381.32,-179 375.32,-185 369.32,-185"/>
55
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-163.7" font-family="Arial" font-size="9.00">File / Format Fuzz</text>
56
+ </g>
57
+ <!-- FuzzFile&#45;&gt;Monitor -->
58
+ <g id="edge7" class="edge">
59
+ <title>FuzzFile&#45;&gt;Monitor</title>
60
+ <path fill="none" stroke="black" d="M381.77,-152.24C397.46,-146.92 415.52,-140.78 432.63,-134.97"/>
61
+ <polygon fill="black" stroke="black" points="433.36,-138.42 441.7,-131.89 431.1,-131.79 433.36,-138.42"/>
62
+ </g>
63
+ <!-- FuzzNet -->
64
+ <g id="node4" class="node">
65
+ <title>FuzzNet</title>
66
+ <path fill="none" stroke="black" d="M377.57,-131C377.57,-131 297.07,-131 297.07,-131 291.07,-131 285.07,-125 285.07,-119 285.07,-119 285.07,-107 285.07,-107 285.07,-101 291.07,-95 297.07,-95 297.07,-95 377.57,-95 377.57,-95 383.57,-95 389.57,-101 389.57,-107 389.57,-107 389.57,-119 389.57,-119 389.57,-125 383.57,-131 377.57,-131"/>
67
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-109.7" font-family="Arial" font-size="9.00">Network Service Fuzz</text>
68
+ </g>
69
+ <!-- FuzzNet&#45;&gt;Monitor -->
70
+ <g id="edge8" class="edge">
71
+ <title>FuzzNet&#45;&gt;Monitor</title>
72
+ <path fill="none" stroke="black" d="M389.95,-113C401.35,-113 413.64,-113 425.68,-113"/>
73
+ <polygon fill="black" stroke="black" points="425.6,-116.5 435.6,-113 425.6,-109.5 425.6,-116.5"/>
74
+ </g>
75
+ <!-- FuzzWeb -->
76
+ <g id="node5" class="node">
77
+ <title>FuzzWeb</title>
78
+ <path fill="none" stroke="black" d="M370.45,-77C370.45,-77 304.2,-77 304.2,-77 298.2,-77 292.2,-71 292.2,-65 292.2,-65 292.2,-53 292.2,-53 292.2,-47 298.2,-41 304.2,-41 304.2,-41 370.45,-41 370.45,-41 376.45,-41 382.45,-47 382.45,-53 382.45,-53 382.45,-65 382.45,-65 382.45,-71 376.45,-77 370.45,-77"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-60.95" font-family="Arial" font-size="9.00">Web App Fuzz</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-50.45" font-family="Arial" font-size="9.00">(XSS vectors, etc.)</text>
81
+ </g>
82
+ <!-- FuzzWeb&#45;&gt;Monitor -->
83
+ <g id="edge9" class="edge">
84
+ <title>FuzzWeb&#45;&gt;Monitor</title>
85
+ <path fill="none" stroke="black" d="M382.61,-74.04C397.99,-79.26 415.57,-85.23 432.27,-90.91"/>
86
+ <polygon fill="black" stroke="black" points="431.06,-94.19 441.65,-94.09 433.31,-87.56 431.06,-94.19"/>
87
+ </g>
88
+ <!-- PWNfuzz&#45;&gt;FuzzProto -->
89
+ <g id="edge2" class="edge">
90
+ <title>PWNfuzz&#45;&gt;FuzzProto</title>
91
+ <path fill="none" stroke="black" d="M198.45,-130.26C215.93,-147.99 245.08,-175.51 274.2,-194 276.02,-195.16 277.91,-196.29 279.83,-197.39"/>
92
+ <polygon fill="black" stroke="black" points="277.89,-200.32 288.36,-201.94 281.18,-194.15 277.89,-200.32"/>
93
+ </g>
94
+ <!-- PWNfuzz&#45;&gt;FuzzFile -->
95
+ <g id="edge3" class="edge">
96
+ <title>PWNfuzz&#45;&gt;FuzzFile</title>
97
+ <path fill="none" stroke="black" d="M220.22,-126.35C238.9,-132.89 261.71,-140.88 282.16,-148.04"/>
98
+ <polygon fill="black" stroke="black" points="280.9,-151.3 291.49,-151.3 283.21,-144.69 280.9,-151.3"/>
99
+ </g>
100
+ <!-- PWNfuzz&#45;&gt;FuzzNet -->
101
+ <g id="edge4" class="edge">
102
+ <title>PWNfuzz&#45;&gt;FuzzNet</title>
103
+ <path fill="none" stroke="black" d="M237.34,-113C249.07,-113 261.53,-113 273.51,-113"/>
104
+ <polygon fill="black" stroke="black" points="273.3,-116.5 283.3,-113 273.3,-109.5 273.3,-116.5"/>
105
+ </g>
106
+ <!-- PWNfuzz&#45;&gt;FuzzWeb -->
107
+ <g id="edge5" class="edge">
108
+ <title>PWNfuzz&#45;&gt;FuzzWeb</title>
109
+ <path fill="none" stroke="black" d="M220.22,-99.65C238.6,-93.22 260.98,-85.38 281.17,-78.31"/>
110
+ <polygon fill="black" stroke="black" points="282.09,-81.7 290.38,-75.09 279.78,-75.09 282.09,-81.7"/>
111
+ </g>
112
+ <!-- Corpus -->
113
+ <g id="node8" class="node">
114
+ <title>Corpus</title>
115
+ <path fill="none" stroke="black" d="M707.88,-129.31C707.88,-131.31 688.33,-132.94 664.26,-132.94 640.19,-132.94 620.63,-131.31 620.63,-129.31 620.63,-129.31 620.63,-96.69 620.63,-96.69 620.63,-94.69 640.19,-93.06 664.26,-93.06 688.33,-93.06 707.88,-94.69 707.88,-96.69 707.88,-96.69 707.88,-129.31 707.88,-129.31"/>
116
+ <path fill="none" stroke="black" d="M707.88,-129.31C707.88,-127.31 688.33,-125.69 664.26,-125.69 640.19,-125.69 620.63,-127.31 620.63,-129.31"/>
117
+ <text xml:space="preserve" text-anchor="middle" x="664.26" y="-114.95" font-family="Arial" font-size="9.00">Interesting Inputs</text>
118
+ <text xml:space="preserve" text-anchor="middle" x="664.26" y="-104.45" font-family="Arial" font-size="9.00">(saved for replay)</text>
119
+ </g>
120
+ <!-- Monitor&#45;&gt;Corpus -->
121
+ <g id="edge10" class="edge">
122
+ <title>Monitor&#45;&gt;Corpus</title>
123
+ <path fill="none" stroke="black" d="M559.44,-113C575.69,-113 593.17,-113 609.08,-113"/>
124
+ <polygon fill="black" stroke="black" points="608.82,-116.5 618.82,-113 608.82,-109.5 608.82,-116.5"/>
125
+ </g>
126
+ <!-- Crash -->
127
+ <g id="node9" class="node">
128
+ <title>Crash</title>
129
+ <ellipse fill="none" stroke="black" cx="664.26" cy="-31" rx="68.06" ry="20.51"/>
130
+ <text xml:space="preserve" text-anchor="middle" x="664.26" y="-32.95" font-family="Arial" font-size="9.00">Crash Analysis</text>
131
+ <text xml:space="preserve" text-anchor="middle" x="664.26" y="-22.45" font-family="Arial" font-size="9.00">(identify root cause)</text>
132
+ </g>
133
+ <!-- Monitor&#45;&gt;Crash -->
134
+ <g id="edge11" class="edge">
135
+ <title>Monitor&#45;&gt;Crash</title>
136
+ <path fill="none" stroke="black" d="M536.11,-94.6C560.26,-82.52 592.01,-66.64 617.74,-53.77"/>
137
+ <polygon fill="black" stroke="black" points="619.26,-56.92 626.64,-49.31 616.13,-50.66 619.26,-56.92"/>
138
+ </g>
139
+ <!-- Crash&#45;&gt;Input -->
140
+ <g id="edge12" class="edge">
141
+ <title>Crash&#45;&gt;Input</title>
142
+ <path fill="none" stroke="black" d="M609.3,-18.57C577.48,-12.3 536.32,-6 499.32,-6 180.1,-6 180.1,-6 180.1,-6 153.57,-6 124.23,-8.32 99.69,-10.93"/>
143
+ <polygon fill="black" stroke="black" points="99.47,-7.43 89.92,-12.01 100.24,-14.39 99.47,-7.43"/>
144
+ <text xml:space="preserve" text-anchor="middle" x="337.32" y="-9.2" font-family="Times,serif" font-size="14.00">refine mutators</text>
145
+ </g>
146
+ </g>
147
+ </svg>
@@ -0,0 +1,117 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: History Command to Driver Generation Pages: 1 -->
7
+ <svg width="369pt" height="455pt"
8
+ viewBox="0.00 0.00 369.00 455.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 451.25)">
10
+ <title>History Command to Driver Generation</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-451.25 364.98,-451.25 364.98,4 -4,4"/>
12
+ <!-- User -->
13
+ <g id="node1" class="node">
14
+ <title>User</title>
15
+ <path fill="none" stroke="black" d="M125.88,-447.25C125.88,-447.25 78.38,-447.25 78.38,-447.25 72.38,-447.25 66.38,-441.25 66.38,-435.25 66.38,-435.25 66.38,-423.25 66.38,-423.25 66.38,-417.25 72.38,-411.25 78.38,-411.25 78.38,-411.25 125.88,-411.25 125.88,-411.25 131.88,-411.25 137.88,-417.25 137.88,-423.25 137.88,-423.25 137.88,-435.25 137.88,-435.25 137.88,-441.25 131.88,-447.25 125.88,-447.25"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="102.12" y="-425.95" font-family="Arial" font-size="9.00">User in REPL</text>
17
+ </g>
18
+ <!-- Pry -->
19
+ <g id="node2" class="node">
20
+ <title>Pry</title>
21
+ <path fill="none" stroke="black" d="M136.38,-358.75C136.38,-358.75 67.88,-358.75 67.88,-358.75 61.88,-358.75 55.88,-352.75 55.88,-346.75 55.88,-346.75 55.88,-334.75 55.88,-334.75 55.88,-328.75 61.88,-322.75 67.88,-322.75 67.88,-322.75 136.38,-322.75 136.38,-322.75 142.38,-322.75 148.38,-328.75 148.38,-334.75 148.38,-334.75 148.38,-346.75 148.38,-346.75 148.38,-352.75 142.38,-358.75 136.38,-358.75"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="102.12" y="-342.7" font-family="Arial" font-size="9.00">PWN REPL</text>
23
+ <text xml:space="preserve" text-anchor="middle" x="102.12" y="-332.2" font-family="Arial" font-size="9.00">(history, edit, save)</text>
24
+ </g>
25
+ <!-- User&#45;&gt;Pry -->
26
+ <g id="edge1" class="edge">
27
+ <title>User&#45;&gt;Pry</title>
28
+ <path fill="none" stroke="black" d="M102.12,-411.16C102.12,-399.51 102.12,-383.8 102.12,-370.27"/>
29
+ <polygon fill="black" stroke="black" points="105.63,-370.61 102.13,-360.61 98.63,-370.61 105.63,-370.61"/>
30
+ <text xml:space="preserve" text-anchor="middle" x="160.25" y="-379.95" font-family="Times,serif" font-size="14.00">run exploration cmds</text>
31
+ </g>
32
+ <!-- HistoryFile -->
33
+ <g id="node3" class="node">
34
+ <title>HistoryFile</title>
35
+ <path fill="none" stroke="black" d="M84.25,-250.12C84.25,-252.13 65.37,-253.75 42.12,-253.75 18.88,-253.75 0,-252.13 0,-250.12 0,-250.12 0,-217.5 0,-217.5 0,-215.5 18.88,-213.88 42.12,-213.88 65.37,-213.88 84.25,-215.5 84.25,-217.5 84.25,-217.5 84.25,-250.12 84.25,-250.12"/>
36
+ <path fill="none" stroke="black" d="M84.25,-250.12C84.25,-248.12 65.37,-246.5 42.12,-246.5 18.88,-246.5 0,-248.12 0,-250.12"/>
37
+ <text xml:space="preserve" text-anchor="middle" x="42.12" y="-235.76" font-family="Arial" font-size="9.00">~/.pry_history</text>
38
+ <text xml:space="preserve" text-anchor="middle" x="42.12" y="-225.26" font-family="Arial" font-size="9.00">(raw commands)</text>
39
+ </g>
40
+ <!-- Pry&#45;&gt;HistoryFile -->
41
+ <g id="edge2" class="edge">
42
+ <title>Pry&#45;&gt;HistoryFile</title>
43
+ <path fill="none" stroke="black" d="M60.46,-322.35C53.65,-317.64 47.49,-311.84 43.38,-304.75 36.56,-293.01 35.46,-278.19 36.38,-265.21"/>
44
+ <polygon fill="black" stroke="black" points="39.84,-265.8 37.52,-255.46 32.88,-264.99 39.84,-265.8"/>
45
+ <text xml:space="preserve" text-anchor="middle" x="91.75" y="-283.2" font-family="Times,serif" font-size="14.00">appends each line</text>
46
+ </g>
47
+ <!-- Script -->
48
+ <g id="node4" class="node">
49
+ <title>Script</title>
50
+ <path fill="none" stroke="black" d="M190.38,-251.81C190.38,-251.81 133.88,-251.81 133.88,-251.81 127.88,-251.81 121.88,-245.81 121.88,-239.81 121.88,-239.81 121.88,-227.81 121.88,-227.81 121.88,-221.81 127.88,-215.81 133.88,-215.81 133.88,-215.81 190.38,-215.81 190.38,-215.81 196.38,-215.81 202.38,-221.81 202.38,-227.81 202.38,-227.81 202.38,-239.81 202.38,-239.81 202.38,-245.81 196.38,-251.81 190.38,-251.81"/>
51
+ <text xml:space="preserve" text-anchor="middle" x="162.12" y="-235.76" font-family="Arial" font-size="9.00">Prototype Script</text>
52
+ <text xml:space="preserve" text-anchor="middle" x="162.12" y="-225.26" font-family="Arial" font-size="9.00">(.rb or bin/)</text>
53
+ </g>
54
+ <!-- Pry&#45;&gt;Script -->
55
+ <g id="edge3" class="edge">
56
+ <title>Pry&#45;&gt;Script</title>
57
+ <path fill="none" stroke="black" d="M124.67,-322.56C130.35,-317.35 135.99,-311.26 140.12,-304.75 148.09,-292.2 153.37,-276.54 156.75,-263.23"/>
58
+ <polygon fill="black" stroke="black" points="160.1,-264.27 158.92,-253.74 153.28,-262.71 160.1,-264.27"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="232.35" y="-291.45" font-family="Times,serif" font-size="14.00">history | grep &gt; my_proto.rb</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="232.35" y="-274.95" font-family="Times,serif" font-size="14.00">or edit &#45;n</text>
61
+ </g>
62
+ <!-- Driver -->
63
+ <g id="node5" class="node">
64
+ <title>Driver</title>
65
+ <path fill="none" stroke="black" d="M138.75,-144.69C138.75,-144.69 51.5,-144.69 51.5,-144.69 45.5,-144.69 39.5,-138.69 39.5,-132.69 39.5,-132.69 39.5,-117.19 39.5,-117.19 39.5,-111.19 45.5,-105.19 51.5,-105.19 51.5,-105.19 138.75,-105.19 138.75,-105.19 144.75,-105.19 150.75,-111.19 150.75,-117.19 150.75,-117.19 150.75,-132.69 150.75,-132.69 150.75,-138.69 144.75,-144.69 138.75,-144.69"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="95.12" y="-132.14" font-family="Arial" font-size="9.00">PWN Driver</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="95.12" y="-121.64" font-family="Arial" font-size="9.00">(/opt/pwn/bin/ example</text>
68
+ <text xml:space="preserve" text-anchor="middle" x="95.12" y="-111.14" font-family="Arial" font-size="9.00">or PWN::Driver::Parser)</text>
69
+ </g>
70
+ <!-- Script&#45;&gt;Driver -->
71
+ <g id="edge4" class="edge">
72
+ <title>Script&#45;&gt;Driver</title>
73
+ <path fill="none" stroke="black" d="M121.49,-221.49C109,-215.89 96.64,-207.71 89.38,-195.88 82.18,-184.15 82.45,-169.16 85,-156.07"/>
74
+ <polygon fill="black" stroke="black" points="88.33,-157.2 87.33,-146.65 81.53,-155.52 88.33,-157.2"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="151.25" y="-182.57" font-family="Times,serif" font-size="14.00">wrap in PWN::Driver</text>
76
+ <text xml:space="preserve" text-anchor="middle" x="151.25" y="-166.07" font-family="Times,serif" font-size="14.00">add opts, orchestration</text>
77
+ </g>
78
+ <!-- Skill -->
79
+ <g id="node6" class="node">
80
+ <title>Skill</title>
81
+ <path fill="none" stroke="black" d="M270,-141.25C270,-143.25 253.47,-144.88 233.12,-144.88 212.78,-144.88 196.25,-143.25 196.25,-141.25 196.25,-141.25 196.25,-108.62 196.25,-108.62 196.25,-106.62 212.78,-105 233.12,-105 253.47,-105 270,-106.62 270,-108.62 270,-108.62 270,-141.25 270,-141.25"/>
82
+ <path fill="none" stroke="black" d="M270,-141.25C270,-139.25 253.47,-137.62 233.12,-137.62 212.78,-137.62 196.25,-139.25 196.25,-141.25"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="233.12" y="-126.89" font-family="Arial" font-size="9.00">Distilled Skill</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="233.12" y="-116.39" font-family="Arial" font-size="9.00">(~/.pwn/skills/)</text>
85
+ </g>
86
+ <!-- Script&#45;&gt;Skill -->
87
+ <g id="edge5" class="edge">
88
+ <title>Script&#45;&gt;Skill</title>
89
+ <path fill="none" stroke="black" d="M193.12,-215.38C200.55,-209.96 207.85,-203.4 213.12,-195.88 221.23,-184.31 226.07,-169.52 228.95,-156.51"/>
90
+ <polygon fill="black" stroke="black" points="232.38,-157.18 230.8,-146.7 225.51,-155.88 232.38,-157.18"/>
91
+ <text xml:space="preserve" text-anchor="middle" x="293.99" y="-182.57" font-family="Times,serif" font-size="14.00">manually or via</text>
92
+ <text xml:space="preserve" text-anchor="middle" x="293.99" y="-166.07" font-family="Times,serif" font-size="14.00">distill_skill after success</text>
93
+ </g>
94
+ <!-- Agent -->
95
+ <g id="node7" class="node">
96
+ <title>Agent</title>
97
+ <path fill="none" stroke="black" d="M202.75,-36C202.75,-36 133.5,-36 133.5,-36 127.5,-36 121.5,-30 121.5,-24 121.5,-24 121.5,-12 121.5,-12 121.5,-6 127.5,0 133.5,0 133.5,0 202.75,0 202.75,0 208.75,0 214.75,-6 214.75,-12 214.75,-12 214.75,-24 214.75,-24 214.75,-30 208.75,-36 202.75,-36"/>
98
+ <text xml:space="preserve" text-anchor="middle" x="168.12" y="-19.95" font-family="Arial" font-size="9.00">pwn&#45;ai Agent</text>
99
+ <text xml:space="preserve" text-anchor="middle" x="168.12" y="-9.45" font-family="Arial" font-size="9.00">(future automation)</text>
100
+ </g>
101
+ <!-- Driver&#45;&gt;Agent -->
102
+ <g id="edge6" class="edge">
103
+ <title>Driver&#45;&gt;Agent</title>
104
+ <path fill="none" stroke="black" d="M95.29,-104.78C96.3,-89.72 99.76,-68.86 110.38,-54 113.17,-50.08 116.56,-46.52 120.27,-43.3"/>
105
+ <polygon fill="black" stroke="black" points="122.33,-46.14 128.2,-37.32 118.11,-40.55 122.33,-46.14"/>
106
+ <text xml:space="preserve" text-anchor="middle" x="157.25" y="-73.7" font-family="Times,serif" font-size="14.00">invoked by agent</text>
107
+ <text xml:space="preserve" text-anchor="middle" x="157.25" y="-57.2" font-family="Times,serif" font-size="14.00">or cron</text>
108
+ </g>
109
+ <!-- Skill&#45;&gt;Agent -->
110
+ <g id="edge7" class="edge">
111
+ <title>Skill&#45;&gt;Agent</title>
112
+ <path fill="none" stroke="black" d="M229.03,-104.61C225.27,-89.84 218.65,-69.46 208.12,-54 205.81,-50.6 203.08,-47.32 200.16,-44.22"/>
113
+ <polygon fill="black" stroke="black" points="202.85,-41.95 193.22,-37.54 198,-46.99 202.85,-41.95"/>
114
+ <text xml:space="preserve" text-anchor="middle" x="292.35" y="-65.45" font-family="Times,serif" font-size="14.00">loaded in prompt context</text>
115
+ </g>
116
+ </g>
117
+ </svg>
@@ -0,0 +1,154 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN Memory &amp; Skills Detailed Data Flow Pages: 1 -->
7
+ <svg width="368pt" height="624pt"
8
+ viewBox="0.00 0.00 368.00 624.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 619.81)">
10
+ <title>PWN Memory &amp; Skills Detailed Data Flow</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-619.81 363.73,-619.81 363.73,4 -4,4"/>
12
+ <!-- Input -->
13
+ <g id="node1" class="node">
14
+ <title>Input</title>
15
+ <path fill="none" stroke="black" d="M245.62,-615.81C245.62,-615.81 180.88,-615.81 180.88,-615.81 174.88,-615.81 168.88,-609.81 168.88,-603.81 168.88,-603.81 168.88,-591.81 168.88,-591.81 168.88,-585.81 174.88,-579.81 180.88,-579.81 180.88,-579.81 245.62,-579.81 245.62,-579.81 251.62,-579.81 257.62,-585.81 257.62,-591.81 257.62,-591.81 257.62,-603.81 257.62,-603.81 257.62,-609.81 251.62,-615.81 245.62,-615.81"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="213.25" y="-599.76" font-family="Arial" font-size="9.00">Successful Task</text>
17
+ <text xml:space="preserve" text-anchor="middle" x="213.25" y="-589.26" font-family="Arial" font-size="9.00">Outcome in Agent</text>
18
+ </g>
19
+ <!-- Learn -->
20
+ <g id="node2" class="node">
21
+ <title>Learn</title>
22
+ <path fill="none" stroke="black" d="M198,-527.31C198,-527.31 102.5,-527.31 102.5,-527.31 96.5,-527.31 90.5,-521.31 90.5,-515.31 90.5,-515.31 90.5,-503.31 90.5,-503.31 90.5,-497.31 96.5,-491.31 102.5,-491.31 102.5,-491.31 198,-491.31 198,-491.31 204,-491.31 210,-497.31 210,-503.31 210,-503.31 210,-515.31 210,-515.31 210,-521.31 204,-527.31 198,-527.31"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="150.25" y="-511.26" font-family="Arial" font-size="9.00">PWN::AI::Agent::Learning</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="150.25" y="-500.76" font-family="Arial" font-size="9.00">note_outcome</text>
25
+ </g>
26
+ <!-- Input&#45;&gt;Learn -->
27
+ <g id="edge1" class="edge">
28
+ <title>Input&#45;&gt;Learn</title>
29
+ <path fill="none" stroke="black" d="M200.8,-579.72C191.89,-567.48 179.71,-550.76 169.54,-536.8"/>
30
+ <polygon fill="black" stroke="black" points="172.49,-534.91 163.78,-528.89 166.84,-539.03 172.49,-534.91"/>
31
+ </g>
32
+ <!-- MemStore -->
33
+ <g id="node8" class="node">
34
+ <title>MemStore</title>
35
+ <path fill="none" stroke="black" d="M326.12,-524.04C326.12,-525.85 304.22,-527.31 277.25,-527.31 250.28,-527.31 228.38,-525.85 228.38,-524.04 228.38,-524.04 228.38,-494.59 228.38,-494.59 228.38,-492.78 250.28,-491.31 277.25,-491.31 304.22,-491.31 326.12,-492.78 326.12,-494.59 326.12,-494.59 326.12,-524.04 326.12,-524.04"/>
36
+ <path fill="none" stroke="black" d="M326.12,-524.04C326.12,-522.23 304.22,-520.77 277.25,-520.77 250.28,-520.77 228.38,-522.23 228.38,-524.04"/>
37
+ <text xml:space="preserve" text-anchor="middle" x="277.25" y="-506.01" font-family="Arial" font-size="9.00">~/.pwn/memory.json</text>
38
+ </g>
39
+ <!-- Input&#45;&gt;MemStore -->
40
+ <g id="edge9" class="edge">
41
+ <title>Input&#45;&gt;MemStore</title>
42
+ <path fill="none" stroke="black" d="M225.89,-579.72C234.95,-567.48 247.32,-550.76 257.65,-536.8"/>
43
+ <polygon fill="black" stroke="black" points="260.38,-539 263.51,-528.88 254.75,-534.84 260.38,-539"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="305.36" y="-548.51" font-family="Times,serif" font-size="14.00">remember key facts</text>
45
+ </g>
46
+ <!-- Metrics -->
47
+ <g id="node3" class="node">
48
+ <title>Metrics</title>
49
+ <path fill="none" stroke="black" d="M110.5,-454.31C110.5,-454.31 12,-454.31 12,-454.31 6,-454.31 0,-448.31 0,-442.31 0,-442.31 0,-430.31 0,-430.31 0,-424.31 6,-418.31 12,-418.31 12,-418.31 110.5,-418.31 110.5,-418.31 116.5,-418.31 122.5,-424.31 122.5,-430.31 122.5,-430.31 122.5,-442.31 122.5,-442.31 122.5,-448.31 116.5,-454.31 110.5,-454.31"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="61.25" y="-433.01" font-family="Arial" font-size="9.00">Metrics (success/duration)</text>
51
+ </g>
52
+ <!-- Learn&#45;&gt;Metrics -->
53
+ <g id="edge2" class="edge">
54
+ <title>Learn&#45;&gt;Metrics</title>
55
+ <path fill="none" stroke="black" d="M128.71,-491.13C117.64,-482.3 103.96,-471.38 91.82,-461.7"/>
56
+ <polygon fill="black" stroke="black" points="94.09,-459.03 84.09,-455.53 89.72,-464.5 94.09,-459.03"/>
57
+ </g>
58
+ <!-- Introspect -->
59
+ <g id="node4" class="node">
60
+ <title>Introspect</title>
61
+ <path fill="none" stroke="black" d="M224.38,-454.31C224.38,-454.31 152.12,-454.31 152.12,-454.31 146.12,-454.31 140.12,-448.31 140.12,-442.31 140.12,-442.31 140.12,-430.31 140.12,-430.31 140.12,-424.31 146.12,-418.31 152.12,-418.31 152.12,-418.31 224.38,-418.31 224.38,-418.31 230.38,-418.31 236.38,-424.31 236.38,-430.31 236.38,-430.31 236.38,-442.31 236.38,-442.31 236.38,-448.31 230.38,-454.31 224.38,-454.31"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-438.26" font-family="Arial" font-size="9.00">learning_reflect</text>
63
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-427.76" font-family="Arial" font-size="9.00">+ LLM introspection</text>
64
+ </g>
65
+ <!-- Learn&#45;&gt;Introspect -->
66
+ <g id="edge3" class="edge">
67
+ <title>Learn&#45;&gt;Introspect</title>
68
+ <path fill="none" stroke="black" d="M159.45,-491.13C163.74,-483.1 168.96,-473.36 173.76,-464.38"/>
69
+ <polygon fill="black" stroke="black" points="176.79,-466.14 178.42,-455.68 170.62,-462.84 176.79,-466.14"/>
70
+ </g>
71
+ <!-- Distill -->
72
+ <g id="node5" class="node">
73
+ <title>Distill</title>
74
+ <path fill="none" stroke="black" d="M224.75,-346.31C224.75,-346.31 151.75,-346.31 151.75,-346.31 145.75,-346.31 139.75,-340.31 139.75,-334.31 139.75,-334.31 139.75,-322.31 139.75,-322.31 139.75,-316.31 145.75,-310.31 151.75,-310.31 151.75,-310.31 224.75,-310.31 224.75,-310.31 230.75,-310.31 236.75,-316.31 236.75,-322.31 236.75,-322.31 236.75,-334.31 236.75,-334.31 236.75,-340.31 230.75,-346.31 224.75,-346.31"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-325.01" font-family="Arial" font-size="9.00">learning_distill_skill</text>
76
+ </g>
77
+ <!-- Introspect&#45;&gt;Distill -->
78
+ <g id="edge4" class="edge">
79
+ <title>Introspect&#45;&gt;Distill</title>
80
+ <path fill="none" stroke="black" d="M188.25,-418.28C188.25,-402.07 188.25,-377.37 188.25,-358.1"/>
81
+ <polygon fill="black" stroke="black" points="191.75,-358.17 188.25,-348.17 184.75,-358.17 191.75,-358.17"/>
82
+ </g>
83
+ <!-- SkillCreate -->
84
+ <g id="node6" class="node">
85
+ <title>SkillCreate</title>
86
+ <path fill="none" stroke="black" d="M218.38,-273.31C218.38,-273.31 158.12,-273.31 158.12,-273.31 152.12,-273.31 146.12,-267.31 146.12,-261.31 146.12,-261.31 146.12,-249.31 146.12,-249.31 146.12,-243.31 152.12,-237.31 158.12,-237.31 158.12,-237.31 218.38,-237.31 218.38,-237.31 224.38,-237.31 230.38,-243.31 230.38,-249.31 230.38,-249.31 230.38,-261.31 230.38,-261.31 230.38,-267.31 224.38,-273.31 218.38,-273.31"/>
87
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-252.01" font-family="Arial" font-size="9.00">skill_create / edit</text>
88
+ </g>
89
+ <!-- Distill&#45;&gt;SkillCreate -->
90
+ <g id="edge5" class="edge">
91
+ <title>Distill&#45;&gt;SkillCreate</title>
92
+ <path fill="none" stroke="black" d="M188.25,-310.13C188.25,-302.54 188.25,-293.41 188.25,-284.85"/>
93
+ <polygon fill="black" stroke="black" points="191.75,-284.85 188.25,-274.85 184.75,-284.85 191.75,-284.85"/>
94
+ </g>
95
+ <!-- SkillStore -->
96
+ <g id="node7" class="node">
97
+ <title>SkillStore</title>
98
+ <path fill="none" stroke="black" d="M249.5,-195.38C249.5,-198.1 222.05,-200.31 188.25,-200.31 154.45,-200.31 127,-198.1 127,-195.38 127,-195.38 127,-150.94 127,-150.94 127,-148.21 154.45,-146 188.25,-146 222.05,-146 249.5,-148.21 249.5,-150.94 249.5,-150.94 249.5,-195.38 249.5,-195.38"/>
99
+ <path fill="none" stroke="black" d="M249.5,-195.38C249.5,-192.65 222.05,-190.44 188.25,-190.44 154.45,-190.44 127,-192.65 127,-195.38"/>
100
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-180.36" font-family="Arial" font-size="9.00">~/.pwn/skills/*.md</text>
101
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-169.86" font-family="Arial" font-size="9.00">(YAML frontmatter</text>
102
+ <text xml:space="preserve" text-anchor="middle" x="188.25" y="-159.36" font-family="Arial" font-size="9.00">+ markdown + references)</text>
103
+ </g>
104
+ <!-- SkillCreate&#45;&gt;SkillStore -->
105
+ <g id="edge6" class="edge">
106
+ <title>SkillCreate&#45;&gt;SkillStore</title>
107
+ <path fill="none" stroke="black" d="M188.25,-236.92C188.25,-229.56 188.25,-220.67 188.25,-211.93"/>
108
+ <polygon fill="black" stroke="black" points="191.75,-212.18 188.25,-202.18 184.75,-212.18 191.75,-212.18"/>
109
+ </g>
110
+ <!-- SkillList -->
111
+ <g id="node9" class="node">
112
+ <title>SkillList</title>
113
+ <path fill="none" stroke="black" d="M234.62,-109C234.62,-109 163.88,-109 163.88,-109 157.88,-109 151.88,-103 151.88,-97 151.88,-97 151.88,-85 151.88,-85 151.88,-79 157.88,-73 163.88,-73 163.88,-73 234.62,-73 234.62,-73 240.62,-73 246.62,-79 246.62,-85 246.62,-85 246.62,-97 246.62,-97 246.62,-103 240.62,-109 234.62,-109"/>
114
+ <text xml:space="preserve" text-anchor="middle" x="199.25" y="-87.7" font-family="Arial" font-size="9.00">skill_list / skill_view</text>
115
+ </g>
116
+ <!-- SkillStore&#45;&gt;SkillList -->
117
+ <g id="edge7" class="edge">
118
+ <title>SkillStore&#45;&gt;SkillList</title>
119
+ <path fill="none" stroke="black" d="M191.85,-145.91C192.96,-137.81 194.19,-128.85 195.32,-120.6"/>
120
+ <polygon fill="black" stroke="black" points="198.79,-121.09 196.68,-110.71 191.86,-120.14 198.79,-121.09"/>
121
+ </g>
122
+ <!-- Recall -->
123
+ <g id="node11" class="node">
124
+ <title>Recall</title>
125
+ <path fill="none" stroke="black" d="M303.62,-400.31C303.62,-400.31 250.88,-400.31 250.88,-400.31 244.88,-400.31 238.88,-394.31 238.88,-388.31 238.88,-388.31 238.88,-376.31 238.88,-376.31 238.88,-370.31 244.88,-364.31 250.88,-364.31 250.88,-364.31 303.62,-364.31 303.62,-364.31 309.62,-364.31 315.62,-370.31 315.62,-376.31 315.62,-376.31 315.62,-388.31 315.62,-388.31 315.62,-394.31 309.62,-400.31 303.62,-400.31"/>
126
+ <text xml:space="preserve" text-anchor="middle" x="277.25" y="-379.01" font-family="Arial" font-size="9.00">memory_recall</text>
127
+ </g>
128
+ <!-- MemStore&#45;&gt;Recall -->
129
+ <g id="edge11" class="edge">
130
+ <title>MemStore&#45;&gt;Recall</title>
131
+ <path fill="none" stroke="black" d="M277.25,-490.93C277.25,-470.5 277.25,-436.3 277.25,-411.94"/>
132
+ <polygon fill="black" stroke="black" points="280.75,-412.06 277.25,-402.06 273.75,-412.06 280.75,-412.06"/>
133
+ </g>
134
+ <!-- AgentPrompt -->
135
+ <g id="node10" class="node">
136
+ <title>AgentPrompt</title>
137
+ <path fill="none" stroke="black" d="M283,-36C283,-36 193.5,-36 193.5,-36 187.5,-36 181.5,-30 181.5,-24 181.5,-24 181.5,-12 181.5,-12 181.5,-6 187.5,0 193.5,0 193.5,0 283,0 283,0 289,0 295,-6 295,-12 295,-12 295,-24 295,-24 295,-30 289,-36 283,-36"/>
138
+ <text xml:space="preserve" text-anchor="middle" x="238.25" y="-19.95" font-family="Arial" font-size="9.00">Agent System Prompt</text>
139
+ <text xml:space="preserve" text-anchor="middle" x="238.25" y="-9.45" font-family="Arial" font-size="9.00">(injects skills + memory)</text>
140
+ </g>
141
+ <!-- SkillList&#45;&gt;AgentPrompt -->
142
+ <g id="edge8" class="edge">
143
+ <title>SkillList&#45;&gt;AgentPrompt</title>
144
+ <path fill="none" stroke="black" d="M208.69,-72.81C213.1,-64.79 218.45,-55.05 223.38,-46.07"/>
145
+ <polygon fill="black" stroke="black" points="226.42,-47.81 228.17,-37.36 220.29,-44.44 226.42,-47.81"/>
146
+ </g>
147
+ <!-- Recall&#45;&gt;AgentPrompt -->
148
+ <g id="edge10" class="edge">
149
+ <title>Recall&#45;&gt;AgentPrompt</title>
150
+ <path fill="none" stroke="black" d="M277.25,-363.92C277.25,-345.98 277.25,-317.19 277.25,-292.31 277.25,-292.31 277.25,-292.31 277.25,-90 277.25,-73.86 269.41,-57.93 260.77,-45.25"/>
151
+ <polygon fill="black" stroke="black" points="263.77,-43.43 255.01,-37.47 258.14,-47.59 263.77,-43.43"/>
152
+ </g>
153
+ </g>
154
+ </svg>