pwn 0.5.617 → 0.5.620

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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +101 -83
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/AI-Integration.md +42 -26
  6. data/documentation/AWS.md +57 -0
  7. data/documentation/Agent-Tool-Registry.md +56 -0
  8. data/documentation/Banner.md +17 -0
  9. data/documentation/Blockchain.md +18 -0
  10. data/documentation/Bounty.md +21 -0
  11. data/documentation/BurpSuite.md +41 -16
  12. data/documentation/CLI-Drivers.md +58 -0
  13. data/documentation/Configuration.md +66 -0
  14. data/documentation/Contributing.md +33 -19
  15. data/documentation/Cron.md +47 -0
  16. data/documentation/Diagrams.md +6 -2
  17. data/documentation/Drivers.md +43 -16
  18. data/documentation/Extrospection.md +73 -0
  19. data/documentation/FFI.md +14 -0
  20. data/documentation/Fuzzing.md +36 -0
  21. data/documentation/Hardware.md +40 -0
  22. data/documentation/Home.md +5 -4
  23. data/documentation/How-PWN-Works.md +7 -4
  24. data/documentation/Metasploit.md +34 -0
  25. data/documentation/Mistakes.md +96 -0
  26. data/documentation/NmapIt.md +18 -12
  27. data/documentation/PWN.png +0 -0
  28. data/documentation/PWN_Contributors_and_Users.png +0 -0
  29. data/documentation/Persistence.md +40 -0
  30. data/documentation/Plugins.md +97 -47
  31. data/documentation/Reporting.md +25 -18
  32. data/documentation/SAST.md +39 -22
  33. data/documentation/SDR.md +58 -0
  34. data/documentation/Sessions.md +39 -0
  35. data/documentation/Skills-Memory-Learning.md +59 -29
  36. data/documentation/Swarm.md +71 -0
  37. data/documentation/Transparent-Browser.md +26 -22
  38. data/documentation/Troubleshooting.md +44 -25
  39. data/documentation/WWW.md +32 -0
  40. data/documentation/diagrams/agent-tool-registry.svg +286 -0
  41. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  42. data/documentation/diagrams/cron-scheduling.svg +148 -0
  43. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  44. data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
  45. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  46. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  47. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  48. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  49. data/documentation/diagrams/dot/persistence-filesystem.dot +30 -0
  50. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
  51. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  52. data/documentation/diagrams/extrospection-world-awareness.svg +203 -0
  53. data/documentation/diagrams/hardware-hacking.svg +163 -0
  54. data/documentation/diagrams/memory-skills-detailed.svg +146 -97
  55. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  56. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  57. data/documentation/diagrams/persistence-filesystem.svg +189 -0
  58. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
  59. data/documentation/diagrams/sdr-radio-flow.svg +166 -0
  60. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  61. data/documentation/fax-spectrogram.png +0 -0
  62. data/documentation/fax-waveform.png +0 -0
  63. data/documentation/pwn-REPL.md +40 -24
  64. data/documentation/pwn-ai-Agent.md +72 -30
  65. data/documentation/pwn_android_war_dialer_session.png +0 -0
  66. data/documentation/pwn_install.png +0 -0
  67. data/documentation/pwn_wallpaper.jpg +0 -0
  68. data/documentation/ringing-spectrogram.png +0 -0
  69. data/documentation/ringing-waveform.png +0 -0
  70. data/lib/pwn/ai/agent/extrospection.rb +65 -6
  71. data/lib/pwn/ai/agent/learning.rb +67 -7
  72. data/lib/pwn/ai/agent/loop.rb +72 -6
  73. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  74. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  75. data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
  76. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  77. data/lib/pwn/ai/agent.rb +1 -0
  78. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  79. data/lib/pwn/sdr/decoder/adsb.rb +101 -0
  80. data/lib/pwn/sdr/decoder/apt.rb +75 -0
  81. data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
  82. data/lib/pwn/sdr/decoder/dect.rb +84 -0
  83. data/lib/pwn/sdr/decoder/gps.rb +83 -0
  84. data/lib/pwn/sdr/decoder/gsm.rb +50 -29
  85. data/lib/pwn/sdr/decoder/iridium.rb +81 -0
  86. data/lib/pwn/sdr/decoder/lora.rb +87 -0
  87. data/lib/pwn/sdr/decoder/lte.rb +88 -0
  88. data/lib/pwn/sdr/decoder/morse.rb +64 -0
  89. data/lib/pwn/sdr/decoder/p25.rb +71 -0
  90. data/lib/pwn/sdr/decoder/pager.rb +77 -0
  91. data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
  92. data/lib/pwn/sdr/decoder/rfid.rb +88 -0
  93. data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
  94. data/lib/pwn/sdr/decoder/rtty.rb +66 -0
  95. data/lib/pwn/sdr/decoder/wifi.rb +98 -0
  96. data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
  97. data/lib/pwn/sdr/decoder.rb +67 -7
  98. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  99. data/lib/pwn/sdr/gqrx.rb +186 -95
  100. data/lib/pwn/version.rb +1 -1
  101. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  102. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  103. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  105. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  106. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  107. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  108. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  109. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  110. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  111. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  112. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  113. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  114. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  115. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  116. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  117. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  118. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  119. data/third_party/pwn_rdoc.jsonl +114 -8
  120. metadata +81 -5
@@ -0,0 +1,148 @@
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_Cron Pages: 1 -->
7
+ <svg width="1248pt" height="391pt"
8
+ viewBox="0.00 0.00 1248.00 391.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(43.2 348.08)">
10
+ <title>PWN_Cron</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-348.08 1204.45,-348.08 1204.45,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="372.5" y="-282.88" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::Cron — Scheduled Autonomous Jobs</text>
13
+ <text xml:space="preserve" text-anchor="start" x="452" y="-271.43" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">prompt · ruby · script → jobs.yml → crontab → pwn&#45;ai</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_kinds</title>
16
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M775.75,-30.88C775.75,-30.88 930,-30.88 930,-30.88 936,-30.88 942,-36.88 942,-42.88 942,-42.88 942,-245.88 942,-245.88 942,-251.88 936,-257.88 930,-257.88 930,-257.88 775.75,-257.88 775.75,-257.88 769.75,-257.88 763.75,-251.88 763.75,-245.88 763.75,-245.88 763.75,-42.88 763.75,-42.88 763.75,-36.88 769.75,-30.88 775.75,-30.88"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-234.88" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Job Kinds</text>
18
+ </g>
19
+ <!-- Create -->
20
+ <g id="node1" class="node">
21
+ <title>Create</title>
22
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M102.25,-152.13C102.25,-152.13 12,-152.13 12,-152.13 6,-152.13 0,-146.13 0,-140.13 0,-140.13 0,-115.63 0,-115.63 0,-109.63 6,-103.63 12,-103.63 12,-103.63 102.25,-103.63 102.25,-103.63 108.25,-103.63 114.25,-109.63 114.25,-115.63 114.25,-115.63 114.25,-140.13 114.25,-140.13 114.25,-146.13 108.25,-152.13 102.25,-152.13"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-137.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">cron_create</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-124.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">name · schedule</text>
25
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-110.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">prompt | ruby | script</text>
26
+ </g>
27
+ <!-- Jobs -->
28
+ <g id="node2" class="node">
29
+ <title>Jobs</title>
30
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M355.88,-184.6C355.88,-186.41 330.1,-187.88 298.38,-187.88 266.65,-187.88 240.88,-186.41 240.88,-184.6 240.88,-184.6 240.88,-155.15 240.88,-155.15 240.88,-153.34 266.65,-151.88 298.38,-151.88 330.1,-151.88 355.88,-153.34 355.88,-155.15 355.88,-155.15 355.88,-184.6 355.88,-184.6"/>
31
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M355.88,-184.6C355.88,-182.8 330.1,-181.33 298.38,-181.33 266.65,-181.33 240.88,-182.8 240.88,-184.6"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-166.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/cron/jobs.yml</text>
33
+ </g>
34
+ <!-- Create&#45;&gt;Jobs -->
35
+ <g id="edge1" class="edge">
36
+ <title>Create&#45;&gt;Jobs</title>
37
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M114.82,-137.83C149.58,-143.93 194.24,-151.77 230.69,-158.17"/>
38
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="229.95,-160.88 238.32,-159.51 230.92,-155.37 229.95,-160.88"/>
39
+ <text xml:space="preserve" text-anchor="middle" x="177" y="-153.34" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">write</text>
40
+ </g>
41
+ <!-- Crontab -->
42
+ <g id="node3" class="node">
43
+ <title>Crontab</title>
44
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M345,-109.88C345,-109.88 251.75,-109.88 251.75,-109.88 245.75,-109.88 239.75,-103.88 239.75,-97.88 239.75,-97.88 239.75,-85.88 239.75,-85.88 239.75,-79.88 245.75,-73.88 251.75,-73.88 251.75,-73.88 345,-73.88 345,-73.88 351,-73.88 357,-79.88 357,-85.88 357,-85.88 357,-97.88 357,-97.88 357,-103.88 351,-109.88 345,-109.88"/>
45
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-94.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">system crontab</text>
46
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-81.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(install_crontab: true)</text>
47
+ </g>
48
+ <!-- Create&#45;&gt;Crontab -->
49
+ <g id="edge2" class="edge">
50
+ <title>Create&#45;&gt;Crontab</title>
51
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M114.83,-112.81C129.83,-109.26 146.08,-105.81 161.25,-103.38 183.28,-99.85 207.51,-97.36 229.34,-95.62"/>
52
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="229.46,-98.42 237.22,-95.03 229.03,-92.84 229.46,-98.42"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="177" y="-105.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">append</text>
54
+ </g>
55
+ <!-- Runner -->
56
+ <g id="node4" class="node">
57
+ <title>Runner</title>
58
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M611,-146.88C611,-146.88 528.25,-146.88 528.25,-146.88 522.25,-146.88 516.25,-140.88 516.25,-134.88 516.25,-134.88 516.25,-122.88 516.25,-122.88 516.25,-116.88 522.25,-110.88 528.25,-110.88 528.25,-110.88 611,-110.88 611,-110.88 617,-110.88 623,-116.88 623,-122.88 623,-122.88 623,-134.88 623,-134.88 623,-140.88 617,-146.88 611,-146.88"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="569.62" y="-125.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Cron.run(id)</text>
60
+ </g>
61
+ <!-- Jobs&#45;&gt;Runner -->
62
+ <g id="edge4" class="edge">
63
+ <title>Jobs&#45;&gt;Runner</title>
64
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M356.48,-161.18C400.34,-154.5 460.86,-145.29 506.04,-138.41"/>
65
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="506.29,-141.2 513.78,-137.23 505.45,-135.67 506.29,-141.2"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="436.62" y="-155" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">load job</text>
67
+ </g>
68
+ <!-- Crontab&#45;&gt;Runner -->
69
+ <g id="edge3" class="edge">
70
+ <title>Crontab&#45;&gt;Runner</title>
71
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M357.47,-99.86C400.88,-105.83 460.2,-113.98 504.92,-120.12"/>
72
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="504.36,-122.87 512.66,-121.19 505.12,-117.32 504.36,-122.87"/>
73
+ <text xml:space="preserve" text-anchor="middle" x="436.62" y="-116.73" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fire on schedule</text>
74
+ </g>
75
+ <!-- Prompt -->
76
+ <g id="node5" class="node">
77
+ <title>Prompt</title>
78
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M894.62,-218.88C894.62,-218.88 811.12,-218.88 811.12,-218.88 805.12,-218.88 799.12,-212.88 799.12,-206.88 799.12,-206.88 799.12,-194.88 799.12,-194.88 799.12,-188.88 805.12,-182.88 811.12,-182.88 811.12,-182.88 894.62,-182.88 894.62,-182.88 900.62,-182.88 906.62,-188.88 906.62,-194.88 906.62,-194.88 906.62,-206.88 906.62,-206.88 906.62,-212.88 900.62,-218.88 894.62,-218.88"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-203.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:prompt</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-190.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ pwn&#45;ai one&#45;shot</text>
81
+ </g>
82
+ <!-- Runner&#45;&gt;Prompt -->
83
+ <g id="edge5" class="edge">
84
+ <title>Runner&#45;&gt;Prompt</title>
85
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.65,-144.21C638.6,-148.43 654.91,-152.93 670,-156.88 709.5,-167.22 754.05,-178.01 789.18,-186.32"/>
86
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="788.48,-189.03 796.91,-188.14 789.76,-183.58 788.48,-189.03"/>
87
+ </g>
88
+ <!-- Ruby -->
89
+ <g id="node6" class="node">
90
+ <title>Ruby</title>
91
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M922,-146.88C922,-146.88 783.75,-146.88 783.75,-146.88 777.75,-146.88 771.75,-140.88 771.75,-134.88 771.75,-134.88 771.75,-122.88 771.75,-122.88 771.75,-116.88 777.75,-110.88 783.75,-110.88 783.75,-110.88 922,-110.88 922,-110.88 928,-110.88 934,-116.88 934,-122.88 934,-122.88 934,-134.88 934,-134.88 934,-140.88 928,-146.88 922,-146.88"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-131.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:ruby</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-118.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ TOPLEVEL_BINDING.eval</text>
94
+ </g>
95
+ <!-- Runner&#45;&gt;Ruby -->
96
+ <g id="edge6" class="edge">
97
+ <title>Runner&#45;&gt;Ruby</title>
98
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.53,-128.88C662.29,-128.88 715.87,-128.88 761.38,-128.88"/>
99
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="761.29,-131.68 769.29,-128.88 761.29,-126.08 761.29,-131.68"/>
100
+ </g>
101
+ <!-- Script -->
102
+ <g id="node7" class="node">
103
+ <title>Script</title>
104
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M896.12,-74.88C896.12,-74.88 809.62,-74.88 809.62,-74.88 803.62,-74.88 797.62,-68.88 797.62,-62.88 797.62,-62.88 797.62,-50.88 797.62,-50.88 797.62,-44.88 803.62,-38.88 809.62,-38.88 809.62,-38.88 896.12,-38.88 896.12,-38.88 902.12,-38.88 908.12,-44.88 908.12,-50.88 908.12,-50.88 908.12,-62.88 908.12,-62.88 908.12,-68.88 902.12,-74.88 896.12,-74.88"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-59.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:script</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-46.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ exec external file</text>
107
+ </g>
108
+ <!-- Runner&#45;&gt;Script -->
109
+ <g id="edge7" class="edge">
110
+ <title>Runner&#45;&gt;Script</title>
111
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.53,-115.33C670.17,-103.39 738.24,-85.97 787.93,-73.25"/>
112
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="788.33,-76.03 795.39,-71.34 786.94,-70.61 788.33,-76.03"/>
113
+ </g>
114
+ <!-- Log -->
115
+ <g id="node8" class="node">
116
+ <title>Log</title>
117
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1161.25,-148.56C1161.25,-150.98 1131.61,-152.94 1095.12,-152.94 1058.64,-152.94 1029,-150.98 1029,-148.56 1029,-148.56 1029,-109.19 1029,-109.19 1029,-106.78 1058.64,-104.81 1095.12,-104.81 1131.61,-104.81 1161.25,-106.78 1161.25,-109.19 1161.25,-109.19 1161.25,-148.56 1161.25,-148.56"/>
118
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1161.25,-148.56C1161.25,-146.15 1131.61,-144.19 1095.12,-144.19 1058.64,-144.19 1029,-146.15 1029,-148.56"/>
119
+ <text xml:space="preserve" text-anchor="middle" x="1095.12" y="-131.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/cron/log/&lt;id&gt;.log</text>
120
+ <text xml:space="preserve" text-anchor="middle" x="1095.12" y="-118.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">last_run · last_status</text>
121
+ </g>
122
+ <!-- Prompt&#45;&gt;Log -->
123
+ <g id="edge8" class="edge">
124
+ <title>Prompt&#45;&gt;Log</title>
125
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M907.19,-184.9C940.2,-175.01 983.08,-162.16 1019.44,-151.26"/>
126
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1019.79,-154.08 1026.65,-149.1 1018.18,-148.71 1019.79,-154.08"/>
127
+ </g>
128
+ <!-- Ruby&#45;&gt;Log -->
129
+ <g id="edge9" class="edge">
130
+ <title>Ruby&#45;&gt;Log</title>
131
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M934.54,-128.88C961.74,-128.88 991.97,-128.88 1018.74,-128.88"/>
132
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1018.47,-131.68 1026.47,-128.88 1018.47,-126.08 1018.47,-131.68"/>
133
+ </g>
134
+ <!-- Script&#45;&gt;Log -->
135
+ <g id="edge10" class="edge">
136
+ <title>Script&#45;&gt;Log</title>
137
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M908.69,-73.3C941.36,-83.1 983.3,-95.66 1019.02,-106.37"/>
138
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1018.09,-109.01 1026.55,-108.63 1019.69,-103.65 1018.09,-109.01"/>
139
+ </g>
140
+ <!-- Log&#45;&gt;Jobs -->
141
+ <g id="edge11" class="edge">
142
+ <title>Log&#45;&gt;Jobs</title>
143
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1069.63,-104.26C1041.6,-78 992.95,-38 942,-21.88 759.1,36 698.93,-34.31 516.25,-92.88 461.31,-110.49 399.34,-132.73 355.76,-148.78"/>
144
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.85,-146.13 348.32,-151.53 356.79,-151.38 354.85,-146.13"/>
145
+ <text xml:space="preserve" text-anchor="middle" x="697.38" y="-35.59" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">update status</text>
146
+ </g>
147
+ </g>
148
+ </svg>
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_Agent_Tool_Registry" {
2
2
  graph [
3
- label=<<B>PWN::AI::Agent::Registry — Toolsets exposed to the LLM</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">10 toolsets · 45+ callable tools · lib/pwn/ai/agent/tools/*</FONT>>,
3
+ label=<<B>PWN::AI::Agent::Registry — Toolsets exposed to the LLM</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">10 toolsets · 52 callable tools · lib/pwn/ai/agent/tools/*</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=LR, splines=spline, nodesep=0.35, ranksep=1.4,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
@@ -35,7 +35,7 @@ digraph "PWN_Agent_Tool_Registry" {
35
35
  t_mem [label="memory_remember\nrecall · forget · clear"];
36
36
  t_skill [label="skill_list · view\ncreate · add_reference · delete"];
37
37
  t_sess [label="sessions_list · view\ncurrent · delete · stats"];
38
- t_learn [label="learning_note_outcome\nreflect · distill_skill\nconsolidate · outcomes · reset"];
38
+ t_learn [label="learning_note_outcome\nreflect · distill_skill\nconsolidate · outcomes · reset\nmistakes_list · record\nmistakes_resolve · reset"];
39
39
  t_metric [label="metrics_summary\nmetrics_reset"];
40
40
  t_extro [label="extro_snapshot · drift\nobserve · intel · correlate\nobservations · stats · reset"];
41
41
  t_cron [label="cron_list · create · run\nenable · disable · remove"];
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_Extrospection" {
2
2
  graph [
3
- label=<<B>PWN::AI::Agent::Extrospection — World Awareness</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">snapshot · drift · observe · intel · correlate</FONT>>,
3
+ label=<<B>PWN::AI::Agent::Extrospection — World Awareness</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">snapshot · drift · observe · intel · correlate — host · net · toolchain · repo · env · rf</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=LR, splines=spline, nodesep=0.5, ranksep=1.3,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
@@ -14,23 +14,24 @@ digraph "PWN_Extrospection" {
14
14
  subgraph cluster_world {
15
15
  label="Outside World"; fontcolor="#fecaca"; style="rounded,dashed";
16
16
  color="#b91c1c"; bgcolor="#450a0a";
17
- Host [label="host\nuname · distro · arch", fillcolor="#fda4af"];
17
+ Host [label="host\nuname · distro · arch", fillcolor="#fda4af"];
18
18
  Net [label="net\ninterfaces · listening ports", fillcolor="#fda4af"];
19
19
  Tool [label="toolchain\nnmap · burp · msf · git", fillcolor="#fda4af"];
20
- Repo [label="repo\nHEAD · dirty · branch", fillcolor="#fda4af"];
20
+ Repo [label="repo · env\nHEAD · dirty · ruby/gem", fillcolor="#fda4af"];
21
+ RFhw [label="rf 📡\nrtl-sdr · hackrf · flipper\ngqrx sock · serial devs", fillcolor="#fda4af"];
21
22
  Feeds [label="intel feeds\nNVD · CIRCL · Exploit-DB", fillcolor="#fda4af"];
22
23
  }
23
- {rank=same; Host; Net; Tool; Repo; Feeds}
24
+ {rank=same; Host; Net; Tool; Repo; RFhw; Feeds}
24
25
 
25
26
  /* col 1 ─ engine */
26
27
  subgraph cluster_eng {
27
28
  label="Extrospection Engine"; fontcolor="#fde68a"; style=rounded;
28
29
  color="#a16207"; bgcolor="#422006"; penwidth=2;
29
- Snap [label="extro_snapshot\nfingerprint host", fillcolor="#fcd34d"];
30
+ Snap [label="extro_snapshot\nprobe_host/net/toolchain\nprobe_repo/env/rf", fillcolor="#fcd34d"];
30
31
  Drift [label="extro_drift\ndelta vs baseline", fillcolor="#fcd34d"];
31
- Obs [label="extro_observe\nrecord recon fact", fillcolor="#fcd34d"];
32
+ Obs [label="extro_observe\nrecon · vuln · intel\ntarget · network · env · rf", fillcolor="#fcd34d"];
32
33
  Intel [label="extro_intel\nCVE / exploit lookup", fillcolor="#fcd34d"];
33
- Corr [label="extro_correlate\njoin with Learning", fillcolor="#fcd34d", penwidth=2];
34
+ Corr [label="extro_correlate\njoin with Learning\n+ Mistakes", fillcolor="#fcd34d", penwidth=2];
34
35
  }
35
36
  {rank=same; Snap; Drift; Obs; Intel; Corr}
36
37
 
@@ -43,6 +44,7 @@ digraph "PWN_Extrospection" {
43
44
  Net -> Snap [color="#fb7185"];
44
45
  Tool -> Drift [color="#fb7185"];
45
46
  Repo -> Drift [color="#fb7185"];
47
+ RFhw -> Obs [label="probe_rf", color="#fb7185"];
46
48
  Feeds -> Intel [color="#fb7185"];
47
49
 
48
50
  Snap -> Store [color="#f59e0b"];
@@ -0,0 +1,48 @@
1
+ digraph "PWN_Hardware" {
2
+ graph [
3
+ label=<<B>Hardware &amp; Physical-Layer Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">Serial · BusPirate · MSR206 · Android · BareSIP · SDR</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.4, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ subgraph cluster_dev {
14
+ label="Physical Devices"; fontcolor="#fecaca"; style="rounded,dashed";
15
+ color="#b91c1c"; bgcolor="#450a0a";
16
+ Uart [label="UART / JTAG\nembedded target", fillcolor="#fda4af"];
17
+ Mag [label="Magstripe card", fillcolor="#fda4af"];
18
+ Phone [label="Android device", fillcolor="#fda4af"];
19
+ VoIP [label="SIP / PSTN", fillcolor="#fda4af"];
20
+ RF [label="RF spectrum", fillcolor="#fda4af"];
21
+ }
22
+ subgraph cluster_pl {
23
+ label="PWN::Plugins / SDR"; fontcolor="#a7f3d0"; style=rounded;
24
+ color="#047857"; bgcolor="#022c22";
25
+ Serial [label="Serial · BusPirate", fillcolor="#6ee7b7"];
26
+ MSR [label="MSR206", fillcolor="#6ee7b7"];
27
+ Adb [label="Android (adb)", fillcolor="#6ee7b7"];
28
+ Sip [label="BareSIP · Voice", fillcolor="#6ee7b7"];
29
+ Sdr [label="SDR::GQRX · Flipper",fillcolor="#6ee7b7"];
30
+ }
31
+ subgraph cluster_out {
32
+ label="Analysis"; fontcolor="#ddd6fe"; style=rounded;
33
+ color="#6d28d9"; bgcolor="#2e1065";
34
+ XXD [label="XXD · Assembly", fillcolor="#c4b5fd"];
35
+ Rep [label="Reports · Skills", fillcolor="#c4b5fd"];
36
+ }
37
+
38
+ Uart -> Serial [color="#fb7185"];
39
+ Mag -> MSR [color="#fb7185"];
40
+ Phone -> Adb [color="#fb7185"];
41
+ VoIP -> Sip [color="#fb7185"];
42
+ RF -> Sdr [color="#fb7185"];
43
+ Serial -> XXD [color="#a78bfa"];
44
+ MSR -> XXD [color="#a78bfa"];
45
+ Adb -> Rep [color="#a78bfa"];
46
+ Sip -> Rep [color="#a78bfa"];
47
+ Sdr -> Rep [color="#a78bfa"];
48
+ }
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_MemorySkills" {
2
2
  graph [
3
- label=<<B>Persistent Knowledge — Memory · Skills · Sessions</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">everything under ~/.pwn/ that shapes future prompts</FONT>>,
3
+ label=<<B>Persistent Knowledge — Memory · Skills · Learning · Mistakes · Sessions</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">everything under ~/.pwn/ that shapes future prompts</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=TB, splines=spline, nodesep=0.55, ranksep=0.95,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
@@ -17,8 +17,9 @@ digraph "PWN_MemorySkills" {
17
17
  Skc [label="skill_create\nskill_add_reference", fillcolor="#6ee7b7"];
18
18
  Note [label="learning_note_outcome\nlearning_reflect", fillcolor="#6ee7b7"];
19
19
  Dist [label="learning_distill_skill\n(session → skill)", fillcolor="#6ee7b7"];
20
+ Mrec [label="mistakes_record\nmistakes_resolve", fillcolor="#6ee7b7"];
20
21
  }
21
- {rank=same; Rem; Skc; Note; Dist}
22
+ {rank=same; Rem; Skc; Note; Dist; Mrec}
22
23
 
23
24
  subgraph cluster_files {
24
25
  label="~/.pwn/"; fontcolor="#fde68a"; style=rounded;
@@ -27,8 +28,9 @@ digraph "PWN_MemorySkills" {
27
28
  Fskl [label="skills/*.md\nYAML front-matter refs", shape=cylinder, fillcolor="#fcd34d"];
28
29
  Flrn [label="learning.jsonl\noutcome log", shape=cylinder, fillcolor="#fcd34d"];
29
30
  Fses [label="sessions/*.jsonl\ntranscripts", shape=cylinder, fillcolor="#fcd34d"];
31
+ Fmis [label="mistakes.json\nsig → count · fix · regressed", shape=cylinder, fillcolor="#fcd34d"];
30
32
  }
31
- {rank=same; Fmem; Fskl; Flrn; Fses}
33
+ {rank=same; Fmem; Fskl; Flrn; Fses; Fmis}
32
34
 
33
35
  subgraph cluster_read {
34
36
  label="Read-Side / Injection"; fontcolor="#ddd6fe"; style=rounded;
@@ -37,24 +39,29 @@ digraph "PWN_MemorySkills" {
37
39
  Skv [label="skill_list · view", fillcolor="#c4b5fd"];
38
40
  Out [label="learning_outcomes\nlearning_stats", fillcolor="#c4b5fd"];
39
41
  Sesv [label="sessions_view\nsessions_current", fillcolor="#c4b5fd"];
42
+ Mlst [label="mistakes_list\ncorrection_hint", fillcolor="#c4b5fd"];
40
43
  }
41
- {rank=same; Rec; Skv; Out; Sesv}
44
+ {rank=same; Rec; Skv; Out; Sesv; Mlst}
42
45
 
43
- Prompt [label="PromptBuilder\nMEMORY + SKILLS + LEARNING blocks", fillcolor="#7dd3fc", penwidth=2];
46
+ Prompt [label="PromptBuilder\nMEMORY + SKILLS + LEARNING\n+ KNOWN MISTAKES / KNOWN FIXES", fillcolor="#7dd3fc", penwidth=2];
44
47
 
45
48
  Rem -> Fmem [color="#f59e0b"];
46
49
  Skc -> Fskl [color="#f59e0b"];
47
50
  Note -> Flrn [color="#f59e0b"];
48
51
  Dist -> Fskl [color="#f59e0b"];
49
52
  Dist -> Fses [dir=back, style=dashed, color="#fbbf24", label="mine"];
53
+ Mrec -> Fmis [color="#f59e0b"];
54
+ Mrec -> Fmem [label="resolve→lesson", style=dashed, color="#fbbf24"];
50
55
 
51
56
  Fmem -> Rec [color="#a78bfa"];
52
57
  Fskl -> Skv [color="#a78bfa"];
53
58
  Flrn -> Out [color="#a78bfa"];
54
59
  Fses -> Sesv [color="#a78bfa"];
60
+ Fmis -> Mlst [color="#a78bfa"];
55
61
 
56
62
  Rec -> Prompt [color="#38bdf8"];
57
63
  Skv -> Prompt [color="#38bdf8"];
58
64
  Out -> Prompt [color="#38bdf8"];
59
65
  Sesv -> Prompt [color="#38bdf8"];
66
+ Mlst -> Prompt [label="do NOT repeat", color="#fb7185", penwidth=2];
60
67
  }
@@ -0,0 +1,93 @@
1
+ digraph "PWN_Mistakes_Negative_Feedback" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Mistakes — Negative-Feedback Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">learn from mistakes · do NOT repeat them · cross-session · self-correcting</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=TB, splines=spline, nodesep=0.6, ranksep=1.0,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ /* L0 ─ ingest sources */
14
+ subgraph cluster_in {
15
+ label="Four ingest paths"; fontcolor="#fecaca"; style="rounded,dashed";
16
+ color="#b91c1c"; bgcolor="#450a0a";
17
+ ToolFail [label=":tool\nDispatch → success:false", fillcolor="#fda4af"];
18
+ LoopFail [label=":loop\niteration budget exhausted", fillcolor="#fda4af"];
19
+ UserCorr [label=":user_correction\n\"no that's wrong\" / \"still broken\"", fillcolor="#fda4af"];
20
+ ModelRec [label=":model\nmistakes_record(tool, error)", fillcolor="#fda4af"];
21
+ }
22
+ {rank=same; ToolFail; LoopFail; UserCorr; ModelRec}
23
+
24
+ /* L1 ─ fingerprint */
25
+ subgraph cluster_fp {
26
+ label="Fingerprint (stable across sessions)"; fontcolor="#a7f3d0"; style=rounded;
27
+ color="#047857"; bgcolor="#022c22"; penwidth=2;
28
+ Norm [label="normalize_error()\nstrip paths · :LINE · 0xADDR\nport N · TIMESTAMP · UUID · pid", fillcolor="#6ee7b7"];
29
+ Sig [label="signature = sha12(tool + norm)\ncount++ (cross-session)", fillcolor="#6ee7b7", penwidth=2];
30
+ }
31
+ {rank=same; Norm; Sig}
32
+
33
+ /* L2 ─ ledger */
34
+ Store [label="~/.pwn/mistakes.json\n{sig → tool·error·count·fix\n resolved·regressed·sessions}",
35
+ shape=cylinder, fillcolor="#fcd34d", penwidth=2];
36
+
37
+ /* L3 ─ reactions */
38
+ subgraph cluster_react {
39
+ label="Reactions inside Loop.run"; fontcolor="#ddd6fe"; style=rounded;
40
+ color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
41
+ Guard [label="guard_repeated_failure\nmax(turn, PERSISTENT count) ≥ 3\n→ trips on 1st recurrence\nin a new session", fillcolor="#c4b5fd"];
42
+ Hint [label="correction_hint\nappend to failed result:\n\"seen N×, sig=…, KNOWN FIX: …\"\n→ self-correct NEXT iter", fillcolor="#c4b5fd"];
43
+ Regr [label="[REGRESSED]\nresolved sig recurs\n→ reopen + tag", fillcolor="#c4b5fd"];
44
+ }
45
+ {rank=same; Guard; Hint; Regr}
46
+
47
+ /* L4 ─ outputs */
48
+ subgraph cluster_out {
49
+ label="Injected into every future prompt"; fontcolor="#fde68a"; style=rounded;
50
+ color="#a16207"; bgcolor="#422006"; penwidth=2;
51
+ KMist [label="KNOWN MISTAKES\n✗ [sig] tool ×N [REPEATING]…", fillcolor="#fcd34d"];
52
+ KFix [label="KNOWN FIXES\n✓ [sig] tool — FIX: …", fillcolor="#fcd34d"];
53
+ Mem [label="PWN::Memory :lesson\n\"AVOID X — FIX: Y\"", fillcolor="#fcd34d"];
54
+ }
55
+ {rank=same; KMist; KFix; Mem}
56
+
57
+ Prompt [label="PromptBuilder\nsystem prompt", fillcolor="#7dd3fc", penwidth=2];
58
+
59
+ /* L0 → L1 */
60
+ ToolFail -> Norm [label="record()", color="#fb7185"];
61
+ LoopFail -> Norm [color="#fb7185"];
62
+ UserCorr -> Sig [label="+ flip_last_outcome", color="#fb7185"];
63
+ ModelRec -> Sig [color="#fb7185"];
64
+ Norm -> Sig [color="#34d399"];
65
+
66
+ /* L1 → L2 */
67
+ Sig -> Store [label="persist", color="#f59e0b", penwidth=2];
68
+
69
+ /* L2 → L3 */
70
+ Store -> Guard [label="count", color="#a78bfa"];
71
+ Store -> Hint [label="fix?", color="#a78bfa"];
72
+ Store -> Regr [label="resolved∧recur", color="#a78bfa"];
73
+
74
+ /* L3 → L4 */
75
+ Guard -> KMist [color="#f59e0b"];
76
+ Hint -> KFix [style=invis];
77
+ Regr -> KMist [color="#f59e0b"];
78
+
79
+ /* resolve path */
80
+ Resolve [label="mistakes_resolve\n(signature, fix)", fillcolor="#6ee7b7", penwidth=2];
81
+ {rank=same; Store; Resolve}
82
+ Resolve -> Store [label="resolved:true\nfix:…", color="#34d399", penwidth=2];
83
+ Resolve -> KFix [color="#f59e0b"];
84
+ Resolve -> Mem [label="promote", color="#f59e0b"];
85
+
86
+ /* L4 → prompt (feedback, dashed) */
87
+ KMist -> Prompt [label="do NOT repeat", style=dashed, color="#fb7185", constraint=false, penwidth=2];
88
+ KFix -> Prompt [label="do THIS instead", style=dashed, color="#fbbf24", constraint=false, penwidth=2];
89
+ Mem -> Prompt [label="MEMORY block", style=dashed, color="#fbbf24", constraint=false];
90
+ KMist -> Prompt [style=invis];
91
+ KFix -> Prompt [style=invis];
92
+ Mem -> Prompt [style=invis];
93
+ }
@@ -37,9 +37,9 @@ digraph "PWN_Overall_Architecture" {
37
37
  label="PWN::AI::Agent"; fontcolor="#ddd6fe";
38
38
  style=rounded; color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
39
39
  Loop [label="Loop\nplan → dispatch → observe", fillcolor="#c4b5fd"];
40
- Registry [label="Registry\n10 toolsets · 45+ tools", fillcolor="#c4b5fd"];
40
+ Registry [label="Registry\n10 toolsets · 52 tools", fillcolor="#c4b5fd"];
41
41
  Swarm [label="Swarm\npersonas · debate · bus", fillcolor="#c4b5fd"];
42
- Prompt [label="PromptBuilder\nMEMORY · SKILLS · EXTRO",fillcolor="#c4b5fd"];
42
+ Prompt [label="PromptBuilder\nMEMORY · SKILLS\nMISTAKES · EXTRO",fillcolor="#c4b5fd"];
43
43
  }
44
44
  {rank=same; Loop; Registry; Swarm; Prompt}
45
45
 
@@ -51,7 +51,7 @@ digraph "PWN_Overall_Architecture" {
51
51
  SAST [label="SAST\n48 rules", fillcolor="#6ee7b7"];
52
52
  WWW [label="WWW\n21 site drivers", fillcolor="#6ee7b7"];
53
53
  AWS [label="AWS\n90 services", fillcolor="#6ee7b7"];
54
- SDR [label="SDR\nGQRX · Flipper · RFID", fillcolor="#6ee7b7"];
54
+ SDR [label="SDR\nGQRX · Flipper · RFID\nDecoder::* (20)", fillcolor="#6ee7b7"];
55
55
  Chain [label="Blockchain\nBTC · ETH", fillcolor="#6ee7b7"];
56
56
  Bounty [label="Bounty\nlifecycle replay", fillcolor="#6ee7b7"];
57
57
  Reports [label="Reports\nHTML · JSON", fillcolor="#6ee7b7"];
@@ -66,12 +66,13 @@ digraph "PWN_Overall_Architecture" {
66
66
  Skills [label="skills/*.md", shape=cylinder, fillcolor="#fcd34d"];
67
67
  Learn [label="learning.jsonl", shape=cylinder, fillcolor="#fcd34d"];
68
68
  Metrics [label="metrics.json", shape=cylinder, fillcolor="#fcd34d"];
69
- Extro [label="extrospection.json", shape=cylinder, fillcolor="#fcd34d"];
69
+ MistF [label="mistakes.json", shape=cylinder, fillcolor="#fcd34d"];
70
+ Extro [label="extrospection.json\n+ rf snapshot", shape=cylinder, fillcolor="#fcd34d"];
70
71
  Sessions [label="sessions/*.jsonl", shape=cylinder, fillcolor="#fcd34d"];
71
72
  SwarmB [label="swarm/*/bus.jsonl", shape=cylinder, fillcolor="#fcd34d"];
72
73
  CronF [label="cron/jobs.yml", shape=cylinder, fillcolor="#fcd34d"];
73
74
  }
74
- {rank=same; Memory; Skills; Learn; Metrics; Extro; Sessions; SwarmB; CronF}
75
+ {rank=same; Memory; Skills; Learn; Metrics; MistF; Extro; Sessions; SwarmB; CronF}
75
76
 
76
77
  /* ── L0 → L1 ── */
77
78
  User -> REPL [color="#38bdf8"];
@@ -102,6 +103,7 @@ digraph "PWN_Overall_Architecture" {
102
103
  SAST -> Skills [color="#f59e0b"];
103
104
  WWW -> Learn [color="#f59e0b"];
104
105
  AWS -> Metrics [color="#f59e0b"];
106
+ SDR -> MistF [style=invis];
105
107
  SDR -> Extro [color="#f59e0b"];
106
108
  Chain -> Sessions [color="#f59e0b"];
107
109
  Bounty -> SwarmB [color="#f59e0b"];
@@ -0,0 +1,30 @@
1
+ digraph "PWN_Persistence" {
2
+ graph [
3
+ label=<<B>~/.pwn/ — Everything PWN Persists Across Sessions</B>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.3, ranksep=1.4,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [color="#94a3b8", penwidth=1.1, arrowsize=0.7];
11
+
12
+ Root [label="~/.pwn/", shape=folder, fillcolor="#7dd3fc", fontsize=13];
13
+
14
+ node [shape=cylinder, fillcolor="#fcd34d"];
15
+ cfg [label="config.yml\nengines · keys · agent opts"];
16
+ mem [label="memory.json\nfacts · prefs · lessons · env"];
17
+ skl [label="skills/*.md\nreusable procedures + refs"];
18
+ lrn [label="learning.jsonl\ntask outcomes"];
19
+ mis [label="mistakes.json\nfailure fingerprints · fixes\n[REPEATING] · [REGRESSED]"];
20
+ met [label="metrics.json\nper-tool telemetry"];
21
+ ext [label="extrospection.json\nhost snapshot + rf + observations"];
22
+ ses [label="sessions/*.jsonl\ntranscripts"];
23
+ crn [label="cron/jobs.yml\nscheduled jobs + logs"];
24
+ agt [label="agents.yml\npersona registry"];
25
+ swm [label="swarm/<id>/bus.jsonl\nmulti-agent chat"];
26
+ hist [label="~/.pwn_history\nREPL history"];
27
+
28
+ Root->cfg; Root->mem; Root->skl; Root->lrn; Root->mis; Root->met; Root->ext;
29
+ Root->ses; Root->crn; Root->agt; Root->swm; Root->hist;
30
+ }
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_AI_Feedback_Learning_Loop" {
2
2
  graph [
3
- label=<<B>pwn-ai — Closed Self-Improvement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">Introspection (self) ⟷ Extrospection (world)</FONT>>,
3
+ label=<<B>pwn-ai — Closed Self-Improvement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">Introspection (self) ⟷ Extrospection (world) · Mistakes (negative feedback)</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=TB, splines=spline, nodesep=0.6, ranksep=1.0,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
@@ -13,7 +13,7 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
13
13
  /* L0 ─ actors */
14
14
  User [label="👤 Researcher", fillcolor="#7dd3fc"];
15
15
  LLM [label="🤖 LLM Provider", fillcolor="#c4b5fd"];
16
- World [label="🌍 Host · Net · Repo\nToolchain · Intel feeds", fillcolor="#fda4af"];
16
+ World [label="🌍 Host · Net · Repo\nToolchain · RF · Intel", fillcolor="#fda4af"];
17
17
  {rank=same; User; LLM; World}
18
18
 
19
19
  /* L1 ─ agent core */
@@ -26,20 +26,21 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
26
26
  }
27
27
  {rank=same; Prompt; Dispatch; Result}
28
28
 
29
- /* L2 ─ dual engines */
29
+ /* L2 ─ triple engines */
30
30
  subgraph cluster_intro {
31
31
  label="INTROSPECTION (self)"; fontcolor="#a7f3d0";
32
32
  style=rounded; color="#047857"; bgcolor="#022c22"; penwidth=2;
33
33
  Metrics [label="Metrics\nper-tool success · avg ms", fillcolor="#6ee7b7"];
34
34
  Learning [label="Learning\nnote_outcome · reflect\nconsolidate · distill_skill", fillcolor="#6ee7b7"];
35
+ Mistakes [label="Mistakes\nrecord · resolve\nguard · correction_hint\n[REPEATING] · [REGRESSED]", fillcolor="#6ee7b7", penwidth=2];
35
36
  }
36
37
  subgraph cluster_extro {
37
38
  label="EXTROSPECTION (world)"; fontcolor="#fde68a";
38
39
  style=rounded; color="#a16207"; bgcolor="#422006"; penwidth=2;
39
- Snapshot [label="snapshot · drift\nhost/net/toolchain/repo", fillcolor="#fcd34d"];
40
- Observe [label="observe · intel\nrecon facts · CVE feed", fillcolor="#fcd34d"];
40
+ Snapshot [label="snapshot · drift\nhost/net/toolchain\nrepo/env/rf", fillcolor="#fcd34d"];
41
+ Observe [label="observe · intel\nrecon facts · CVE feed", fillcolor="#fcd34d"];
41
42
  }
42
- {rank=same; Metrics; Learning; Snapshot; Observe}
43
+ {rank=same; Metrics; Learning; Mistakes; Snapshot; Observe}
43
44
 
44
45
  /* L3 ─ correlate */
45
46
  Correlate [label="extro_correlate()\n\"I did it wrong\" vs \"the world changed\"",
@@ -51,11 +52,12 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
51
52
  style="rounded,dashed"; color="#334155"; bgcolor="#1e293b";
52
53
  Fmet [label="metrics.json", shape=cylinder, fillcolor="#fcd34d"];
53
54
  Flrn [label="learning.jsonl", shape=cylinder, fillcolor="#fcd34d"];
55
+ Fmis [label="mistakes.json", shape=cylinder, fillcolor="#fcd34d"];
54
56
  Fmem [label="memory.json", shape=cylinder, fillcolor="#fcd34d"];
55
57
  Fskl [label="skills/*.md", shape=cylinder, fillcolor="#fcd34d"];
56
58
  Fext [label="extrospection.json", shape=cylinder, fillcolor="#fcd34d"];
57
59
  }
58
- {rank=same; Fmet; Flrn; Fmem; Fskl; Fext}
60
+ {rank=same; Fmet; Flrn; Fmis; Fmem; Fskl; Fext}
59
61
 
60
62
  /* L0 → L1 */
61
63
  User -> Prompt [label="task", color="#38bdf8", penwidth=2];
@@ -69,6 +71,9 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
69
71
  /* L1 → L2 */
70
72
  Dispatch -> Metrics [label="record()", color="#34d399"];
71
73
  Result -> Learning [label="auto_reflect", color="#34d399"];
74
+ Dispatch -> Mistakes [label="on failure\nrecord()", color="#fb7185", penwidth=2];
75
+ User -> Mistakes [label="\"that's wrong\"\ncheck_user_correction", color="#fb7185",
76
+ style=dashed, constraint=false];
72
77
  Dispatch -> Snapshot [label="probe", color="#f59e0b"];
73
78
  Result -> Observe [label="auto_extrospect", color="#f59e0b"];
74
79
  World -> Snapshot [color="#fb7185", constraint=false];
@@ -77,6 +82,7 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
77
82
  /* L2 → L3 */
78
83
  Metrics -> Correlate [color="#34d399"];
79
84
  Learning -> Correlate [color="#34d399"];
85
+ Mistakes -> Correlate [color="#34d399"];
80
86
  Snapshot -> Correlate [color="#f59e0b"];
81
87
  Observe -> Correlate [color="#f59e0b"];
82
88
 
@@ -84,6 +90,8 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
84
90
  Correlate -> Fmet [style=invis];
85
91
  Metrics -> Fmet [color="#94a3b8"];
86
92
  Learning -> Flrn [color="#94a3b8"];
93
+ Mistakes -> Fmis [color="#94a3b8"];
94
+ Mistakes -> Fmem [label="resolve→lesson", color="#94a3b8"];
87
95
  Learning -> Fmem [label="lesson", color="#94a3b8"];
88
96
  Learning -> Fskl [label="skill", color="#94a3b8"];
89
97
  Observe -> Fext [color="#94a3b8"];
@@ -91,7 +99,11 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
91
99
  /* feedback (dashed, non-constraining) */
92
100
  Fmem -> Prompt [label="MEMORY block", style=dashed, color="#fbbf24", constraint=false];
93
101
  Fskl -> Prompt [label="SKILLS block", style=dashed, color="#fbbf24", constraint=false];
102
+ Fmis -> Prompt [label="KNOWN MISTAKES\n+ KNOWN FIXES", style=dashed, color="#fb7185",
103
+ constraint=false, penwidth=2];
94
104
  Fext -> Prompt [label="EXTRO block", style=dashed, color="#fbbf24", constraint=false];
105
+ Mistakes -> Dispatch [label="correction_hint\n(inline, next iter)", style=dashed,
106
+ color="#fb7185", constraint=false, penwidth=2];
95
107
  Correlate -> Prompt [label="findings → next run", style=dashed, color="#fb7185",
96
108
  constraint=false, penwidth=2];
97
109
  Result -> User [label="answer", color="#38bdf8", constraint=false, penwidth=2];