@aegis-scan/skills 0.5.0 → 0.5.2

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 (345) hide show
  1. package/ATTRIBUTION.md +93 -0
  2. package/package.json +1 -1
  3. package/sbom.cdx.json +1 -0
  4. package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
  5. package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +878 -0
  6. package/skills/compliance/aegis-native/brutaler-anwalt/README.md +9 -3
  7. package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +93 -14
  8. package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
  9. package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
  10. package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
  11. package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
  12. package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
  13. package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
  14. package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
  15. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
  16. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
  17. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
  18. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
  19. package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
  20. package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
  21. package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +60 -5
  22. package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +745 -11
  23. package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
  24. package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +106 -30
  25. package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +247 -2
  26. package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +75 -2
  27. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
  28. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
  29. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
  30. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
  31. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
  32. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
  33. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
  34. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
  35. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
  36. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
  37. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
  38. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
  39. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
  40. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
  41. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
  42. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
  43. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
  44. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
  45. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
  46. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
  47. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
  48. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
  49. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
  50. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
  51. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
  52. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
  53. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
  54. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
  55. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
  56. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
  57. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
  58. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
  59. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
  60. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
  61. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
  62. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
  63. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
  64. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
  65. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
  66. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
  67. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
  68. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
  69. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
  70. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
  71. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
  72. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
  73. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
  74. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
  75. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
  76. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
  77. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
  78. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
  79. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
  80. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
  81. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
  82. package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +55 -8
  83. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
  84. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
  85. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
  86. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
  87. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
  88. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
  89. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
  90. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +4 -1
  91. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
  92. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
  93. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
  94. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
  95. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
  96. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
  97. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
  98. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
  99. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
  100. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
  101. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
  102. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
  103. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
  104. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
  105. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +3 -0
  106. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
  107. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
  108. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
  109. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
  110. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
  111. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
  112. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
  113. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
  114. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
  115. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
  116. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
  117. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
  118. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
  119. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
  120. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
  121. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
  122. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
  123. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
  124. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
  125. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
  126. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
  127. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
  128. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
  129. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
  130. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
  131. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
  132. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
  133. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +3 -2
  134. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
  135. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
  136. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +71 -3
  137. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
  138. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
  139. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
  140. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
  141. package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +115 -9
  142. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +1 -1
  143. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
  144. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
  145. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
  146. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
  147. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
  148. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
  149. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
  150. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
  151. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
  152. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
  153. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
  154. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
  155. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
  156. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
  157. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
  158. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
  159. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
  160. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
  161. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
  162. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
  163. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
  164. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
  165. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
  166. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
  167. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
  168. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
  169. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
  170. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
  171. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
  172. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
  173. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
  174. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
  175. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
  176. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
  177. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
  178. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
  179. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
  180. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
  181. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
  182. package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
  183. package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
  184. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +80 -0
  185. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
  186. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
  187. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
  188. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
  189. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
  190. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
  191. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
  192. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
  193. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
  194. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
  195. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
  196. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +190 -48
  197. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
  198. package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
  199. package/skills/defensive/permoon-fork/README.md +40 -0
  200. package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
  201. package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
  202. package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
  203. package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
  204. package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +1 -1
  205. package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
  206. package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
  207. package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
  208. package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
  209. package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
  210. package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
  211. package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
  212. package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
  213. package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
  214. package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
  215. package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
  216. package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
  217. package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
  218. package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
  219. package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
  220. package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
  221. package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
  222. package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
  223. package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
  224. package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
  225. package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
  226. package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
  227. package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
  228. package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
  229. package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
  230. package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
  231. package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
  232. package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
  233. package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
  234. package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
  235. package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
  236. package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
  237. package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
  238. package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
  239. package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
  240. package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
  241. package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
  242. package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
  243. package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
  244. package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
  245. package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
  246. package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
  247. package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
  248. package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
  249. package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
  250. package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
  251. package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
  252. package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
  253. package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
  254. package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
  255. package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
  256. package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
  257. package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
  258. package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
  259. package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
  260. package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
  261. package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
  262. package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
  263. package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
  264. package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
  265. package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
  266. package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
  267. package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
  268. package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
  269. package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
  270. package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
  271. package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
  272. package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
  273. package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
  274. package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
  275. package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
  276. package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
  277. package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
  278. package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
  279. package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
  280. package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
  281. package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
  282. package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
  283. package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
  284. package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
  285. package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
  286. package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
  287. package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
  288. package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
  289. package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
  290. package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
  291. package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
  292. package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
  293. package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
  294. package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
  295. package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
  296. package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
  297. package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
  298. package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
  299. package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
  300. package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
  301. package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
  302. package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
  303. package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
  304. package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
  305. package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
  306. package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
  307. package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
  308. package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
  309. package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
  310. package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
  311. package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
  312. package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
  313. package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
  314. package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
  315. package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
  316. package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
  317. package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
  318. package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
  319. package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
  320. package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
  321. package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
  322. package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
  323. package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
  324. package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
  325. package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
  326. package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
  327. package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
  328. package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
  329. package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
  330. package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
  331. package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
  332. package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
  333. package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
  334. package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
  335. package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
  336. package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
  337. package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
  338. package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
  339. package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
  340. package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
  341. package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
  342. package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
  343. package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
  344. package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
  345. package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: anwalt:simulate
3
+ description: Abmahn-Simulation auf vorhandene Findings. Generiert Streitwert-Range pro Finding + modifizierte Unterlassungserklaerung (mUE-Template) + Anwalts-Kostenrange + Risk-Score. Eingabe: bestehender Audit-Output ODER konkretes Pattern.
4
+ allowed-tools: Read, Write, Edit, Grep, Bash, WebFetch
5
+ ---
6
+
7
+ # /anwalt:simulate — Abmahn-Schadens-Simulation
8
+
9
+ > Modus SIMULATE aus `references/abmahn-templates.md`. Nimmt verifizierte
10
+ > Findings (Wahrsch. > 60%) und generiert eine realistische Abmahn-Schadens-
11
+ > Simulation: was wuerde es kosten wenn ein Abmahn-Anwalt heute auftaucht?
12
+
13
+ ---
14
+
15
+ ## Input-Modes
16
+
17
+ ### Mode A — Existing Audit
18
+
19
+ ```
20
+ /anwalt:simulate audits/BRUTALER-AUDIT-2026-05-15.md
21
+ ```
22
+
23
+ Liest Findings, filtert nach Wahrsch. > 60%, generiert mUE-Template + Kostenrange.
24
+
25
+ ### Mode B — Single Pattern
26
+
27
+ ```
28
+ /anwalt:simulate "Google Fonts wird via Google-CDN eingebunden ohne Consent"
29
+ ```
30
+
31
+ Pattern wird gegen `references/audit-patterns.md` + `references/bgh-urteile.md`
32
+ gematcht, dann simuliert.
33
+
34
+ ---
35
+
36
+ ## Schadens-Diagnose-Formel
37
+
38
+ Aus `references/audit-patterns.md` Schadens-Formel:
39
+
40
+ ```
41
+ Schaden_EUR = Base_Streitwert × Branche_Multiplikator × Schwere_Faktor × Aktor_Faktor
42
+ ```
43
+
44
+ Wobei:
45
+ - **Base_Streitwert** = strukturierter Wert aus `references/streitwerte.json` (v4.4.0+)
46
+ oder Az.-Anker aus `references/bgh-urteile.md`
47
+ - **Branche_Multiplikator** = 1.0 (Standard), 1.5 (Heilberuf/MedTech/Finance/Spa)
48
+ - **Schwere_Faktor** = LOW=0.5, MED=1.0, HIGH=2.0, CRIT=4.0
49
+ - **Aktor_Faktor** = 1.0 (Standard), 1.5 (Verbraucherzentrale), 2.0 (Wettbewerbszentrale), 2.5 (bekannter Abmahn-Anwalt Gravenreuth/RAK/etc.)
50
+
51
+ ---
52
+
53
+ ## Output-Struktur
54
+
55
+ Erzeuge `audits/ABMAHN-SIMULATION-<YYYY-MM-DD>.md`:
56
+
57
+ ```markdown
58
+ # Abmahn-Simulation — <Projekt> — <YYYY-MM-DD>
59
+
60
+ > **Haftungsausschluss**: Keine Rechtsberatung i.S.d. § 2 RDG. Diese Simulation
61
+ > ist eine **technisch-statistische Schaetzung** basierend auf historischen
62
+ > Bussgeld/Schadensersatz-Az. — KEIN Ersatz fuer anwaltliche Pruefung im
63
+ > Ernstfall.
64
+
65
+ ## Simulationen pro Finding
66
+
67
+ ### F-001 — <Titel> — Wahrscheinlichkeit 75%
68
+
69
+ **Realistic-Scenario** (50% wahrscheinlich):
70
+ - Abmahn-Anwalt: <Kategorie>
71
+ - Streitwert: 8.000 EUR
72
+ - Anwalts-Kosten (1.3-Geschaeftsgebuehr): 887,03 EUR
73
+ - Schadensersatz (DSGVO Art. 82 / UWG § 9): 0-500 EUR pro betroffene Person
74
+ - **Gesamtschaden (worst-case)**: 2.500-12.000 EUR
75
+ - **Az.-Anker**: BGH I ZR 113/20 [primary-source-verified] + LG Muenchen 3 O 17493/20 (Google Fonts)
76
+
77
+ **Best-Case**:
78
+ - Modifizierte Unterlassungserklaerung ohne Kostenuebernahme akzeptiert
79
+ - Nur Anwalts-Kosten der Gegenseite: 887 EUR
80
+ - Keine Bussgeldverfahren initiiert
81
+
82
+ **Worst-Case**:
83
+ - Wettbewerbszentrale schaltet sich ein → mehrere Abmahnungen gleichzeitig
84
+ - BfDI-Bussgeldverfahren wegen Art. 5/Art. 32 DSGVO
85
+ - Schadenshoehe: 20.000-100.000 EUR + Reputationsschaden
86
+ - Az.-Anker: BfDI-Bescheid 1&1 (9,55M EUR), Vodafone-Bescheid (15M EUR), H&M (35M EUR)
87
+
88
+ ### F-002 — ...
89
+
90
+ ...
91
+
92
+ ## Modifizierte Unterlassungserklaerung (mUE-Template)
93
+
94
+ ```markdown
95
+ # Modifizierte Unterlassungserklaerung
96
+
97
+ Hiermit verpflichte ich, <Firma>, vertreten durch <Geschaeftsfuehrer>,
98
+
99
+ 1. es zu unterlassen, im geschaeftlichen Verkehr <konkretes Pattern>
100
+ ohne vorherige nachweisbare Einwilligung der Betroffenen durchzufuehren;
101
+
102
+ 2. fuer jeden Fall der schuldhaften Zuwiderhandlung gegen die unter Ziffer 1
103
+ ausgesprochene Verpflichtung eine angemessene Vertragsstrafe, deren Hoehe
104
+ in das billige Ermessen des Beklagten gestellt wird und im Streitfall vom
105
+ zustaendigen Gericht zu ueberpruefen ist, an die Glaeubigerin zu zahlen
106
+ (Hamburger Brauch, BGH I ZR 30/93);
107
+
108
+ 3. die Berechtigung der Abmahnung — soweit ueberhaupt zugestanden — NUR
109
+ teilweise und unter Vorbehalt jeglicher Bestreitung des Verschuldens
110
+ bzw. der Wiederholungsgefahr anzuerkennen.
111
+
112
+ Mit dieser Erklaerung wird KEIN Anspruch der Klaegerseite anerkannt, der
113
+ ueber die ausdrueckliche Unterlassungspflicht hinausgeht.
114
+
115
+ <Ort>, <Datum> <Unterschrift>
116
+ ```
117
+
118
+ ## Gesamt-Risk-Score
119
+
120
+ | Metrik | Wert |
121
+ |---|---|
122
+ | Wahrscheinlichste Abmahn-Welle in den naechsten 6 Monaten | <%> |
123
+ | Erwartete Gesamtkosten (50%-Quantil) | <EUR> |
124
+ | Worst-Case (95%-Quantil) | <EUR> |
125
+ | Empfohlene Sofortaktion | <konkrete Liste> |
126
+
127
+ ---
128
+
129
+ ## Empfohlene Praeventiv-Massnahmen
130
+
131
+ Vor Eintreffen einer Abmahnung:
132
+ 1. <konkrete Mitigation pro Finding>
133
+ 2. ...
134
+
135
+ Falls bereits Abmahnung erhalten:
136
+ 1. **NICHT** die beigefuegte UE unterzeichnen — mUE-Template oben nutzen
137
+ 2. Anwalt einschalten BEVOR Antwort-Frist (typ. 3-10 Tage) ablaeuft
138
+ 3. Beweise sichern: vollstaendige Original-Abmahnung + Anlagen + Briefumschlag-Eingang archivieren
139
+ 4. Gegenseite-Anwalts-Berechtigung pruefen (Vollmacht beifuegt?)
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Halt-Conditions
145
+
146
+ - Wenn keine Findings mit Wahrsch. > 60% existieren: ABSTAND, Simulation nicht sinnvoll.
147
+ - Wenn Az.-Anker fehlt: STOP, `/anwalt:az-verify` zuerst.
148
+ - Wenn streitwerte.json fehlt (vor v4.4.0): fallback auf prose-estimates aus `references/abmahn-templates.md`.
149
+
150
+ ---
151
+
152
+ ## Disclaimer
153
+
154
+ Diese Simulation ist eine **technisch-statistische Schaetzung** basierend auf
155
+ oeffentlichen Bussgeld/Schadensersatz-Az. und historischen Abmahn-Wellen.
156
+ Sie ist KEINE Rechtsberatung i.S.d. § 2 RDG (BGH I ZR 113/20 Smartlaw) und
157
+ KEIN Ersatz fuer anwaltliche Pruefung. Im Ernstfall: zugelassenen IT-Recht-
158
+ Fachanwalt einschalten.
@@ -0,0 +1,315 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ PostToolUse-Hook fuer brutaler-anwalt (v4.3.0+).
4
+
5
+ Triggers nach Write/Edit auf Audit-Output-Files. Erzwingt 3 Quality-Gates:
6
+
7
+ 1. DISCLAIMER-BLOCK (RDG §2, blocking warning)
8
+ - "Haftungsausschluss" + "Keine Rechtsberatung" in ersten 40 Zeilen
9
+ - stderr-Warnung non-blocking (User muss bewusst entscheiden)
10
+
11
+ 2. FINDING-ID-UNIQUENESS (blocking exit 2)
12
+ - Audit-Output-Files: pro "## Finding (F-NNN)" Pattern duerfen IDs nicht dupliziert sein
13
+ - Verhindert versehentliche Dup-IDs nach Persona-Synthese
14
+
15
+ 3. AZ.-PROVENANCE-GUARD (blocking exit 2, SKILL.md §5)
16
+ - Jede Az.-Nummer im Output braucht Source-Markierung
17
+ - Akzeptierte Marker: Source-URL in selber Zeile / Folgezeile
18
+ oder "[ungeprueft, manuelle Verifikation vor Schriftsatz erforderlich]"
19
+ oder "[secondary-source-verified]"
20
+ oder "[primary-source-verified]"
21
+ - Verdaechtige Pattern (Halluzinations-Indikatoren) werden separat gemeldet:
22
+ - "1234/22", "9999/22" Placeholder-Style
23
+ - Az.-Jahr vs. Urteilsjahr divergiert > 2 Jahre
24
+ - Az. ohne jeglichen Source-Hint im Umkreis
25
+
26
+ Input: JSON auf stdin (tool_input.file_path)
27
+ Output: stderr-Warnungen + Exit-Code 0/2
28
+
29
+ Aktivierung: ueber .claude-plugin/plugin.json hookSpec
30
+ Disable: set BRUTALER_ANWALT_HOOK_DISABLE=1 in env
31
+ """
32
+ from __future__ import annotations
33
+
34
+ import json
35
+ import os
36
+ import re
37
+ import sys
38
+ from typing import Iterable
39
+
40
+
41
+ RELEVANT_PATH_PATTERNS = [
42
+ re.compile(r"audits?[\\/].+\.md$"),
43
+ re.compile(r"compliance[\\/].+\.md$"),
44
+ re.compile(r"legal-audit[\\/].+\.md$"),
45
+ re.compile(r"BRUTALER-AUDIT.*\.md$"),
46
+ re.compile(r"COMPLIANCE-AUDIT.*\.md$"),
47
+ re.compile(r".*-AUDIT-\d{4}-\d{2}-\d{2}.*\.md$"),
48
+ re.compile(r"ABMAHN-SIMULATION.*\.md$"),
49
+ re.compile(r"FINDINGS.*\.md$"),
50
+ re.compile(r"LegalAudit\.md$"),
51
+ re.compile(r"DSAR-\d{4}-\d{2}-\d{2}.*\.md$"),
52
+ re.compile(r"AVV-REDLINE.*\.md$"),
53
+ re.compile(r"references[\\/]streitwerte\.json$"),
54
+ ]
55
+
56
+
57
+ MAX_FILE_SIZE_BYTES = 5_000_000
58
+
59
+ FORBIDDEN_PATH_PREFIXES = [
60
+ "/etc/", "/var/", "/usr/", "/sys/", "/proc/", "/dev/",
61
+ "/private/etc/", "/private/var/",
62
+ "/Library/Keychains/", "/Library/Application Support/Keychain/",
63
+ ]
64
+
65
+ DISCLAIMER_HEAD = re.compile(r"Haftungsausschluss|Disclaimer", re.IGNORECASE)
66
+ DISCLAIMER_BODY = re.compile(r"Keine\s+Rechtsberatung|not\s+legal\s+advice|RDG", re.IGNORECASE)
67
+
68
+ FINDING_ID_RE = re.compile(r"^##\s+Finding\s+(F-\d{3})", re.MULTILINE)
69
+
70
+ AZ_PATTERNS = [
71
+ re.compile(r"\bBGH\s+[IVX]+\s+ZR\s+\d{1,4}/\d{2}\b"),
72
+ re.compile(r"\bBGH\s+[IVX]+\s+ZB\s+\d{1,4}/\d{2}\b"),
73
+ re.compile(r"\bBVerfG\s+\d\s+BvR\s+\d{1,4}/\d{2}\b"),
74
+ re.compile(r"\bEuGH\s+C-\d{1,4}/\d{2}\b"),
75
+ re.compile(r"\bOLG\s+\w+\s+\d{1,2}\s+U\s+\d{1,4}/\d{2}\b"),
76
+ re.compile(r"\bLG\s+\w+\s+\d{1,2}\s+O\s+\d{1,4}/\d{2}\b"),
77
+ ]
78
+
79
+ SOURCE_MARKER_RE = re.compile(
80
+ r"\["
81
+ r"(ungeprueft|secondary-source-verified|primary-source-verified|verified)"
82
+ r"[^\]]*\]"
83
+ r"|https?://(?:juris\.bundesgerichtshof\.de|bundesgerichtshof\.de|curia\.europa\.eu"
84
+ r"|eur-lex\.europa\.eu|dejure\.org|openjur\.de|rewis\.io|nrwe\.justiz\.nrw\.de"
85
+ r"|medien-internet-und-recht\.de|bundesanzeiger\.de|gesetze-im-internet\.de)",
86
+ re.IGNORECASE,
87
+ )
88
+
89
+ SUSPICIOUS_AZ_PLACEHOLDERS = [
90
+ re.compile(r"\b1234/\d{2}\b"),
91
+ re.compile(r"\b9999/\d{2}\b"),
92
+ re.compile(r"\b1111/\d{2}\b"),
93
+ re.compile(r"\b0000/\d{2}\b"),
94
+ re.compile(r"\b5678/\d{2}\b"),
95
+ re.compile(r"\b(?:0123|1234|2345|3456|4567|5678|6789)/\d{2}\b"),
96
+ re.compile(r"\b(?:1000|2000|3000|4000|5000|6000|7000|8000)/\d{2}\b"),
97
+ ]
98
+
99
+ BYPASS_AZ_CHECK_RE = re.compile(
100
+ r"<!--\s*brutaler-anwalt:\s*bypass-az-check"
101
+ r"(?:,\s*reason=(?:\"|')([^\"']+)(?:\"|'))?\s*-->",
102
+ re.IGNORECASE,
103
+ )
104
+ BYPASS_DISCLAIMER_RE = re.compile(
105
+ r"<!--\s*brutaler-anwalt:\s*bypass-disclaimer"
106
+ r"(?:,\s*reason=(?:\"|')([^\"']+)(?:\"|'))?\s*-->",
107
+ re.IGNORECASE,
108
+ )
109
+ BYPASS_ALL_RE = re.compile(
110
+ r"<!--\s*brutaler-anwalt:\s*bypass-all"
111
+ r"(?:,\s*reason=(?:\"|')([^\"']+)(?:\"|'))?\s*-->",
112
+ re.IGNORECASE,
113
+ )
114
+
115
+
116
+ def main() -> int:
117
+ if os.environ.get("BRUTALER_ANWALT_HOOK_DISABLE") == "1":
118
+ return 0
119
+
120
+ if hasattr(sys.stdout, "reconfigure"):
121
+ sys.stdout.reconfigure(encoding="utf-8")
122
+ if hasattr(sys.stderr, "reconfigure"):
123
+ sys.stderr.reconfigure(encoding="utf-8")
124
+
125
+ try:
126
+ data = json.loads(sys.stdin.read() or "{}")
127
+ except Exception:
128
+ return 0
129
+
130
+ file_path = (data.get("tool_input") or {}).get("file_path") or ""
131
+ if not file_path or not os.path.isfile(file_path):
132
+ return 0
133
+
134
+ try:
135
+ real_path = os.path.realpath(file_path)
136
+ except (OSError, ValueError):
137
+ return 0
138
+
139
+ for forbidden in FORBIDDEN_PATH_PREFIXES:
140
+ if real_path.startswith(forbidden):
141
+ print(
142
+ f"[brutaler-anwalt] SECURITY: Hook refused to read system-path {real_path!r} "
143
+ f"(matches forbidden prefix {forbidden!r}). Pfad-Traversal-Verdacht.",
144
+ file=sys.stderr,
145
+ )
146
+ return 0
147
+
148
+ normalized = real_path.replace("\\", "/")
149
+ if not any(p.search(normalized) for p in RELEVANT_PATH_PATTERNS):
150
+ return 0
151
+
152
+ try:
153
+ size = os.path.getsize(real_path)
154
+ except OSError:
155
+ return 0
156
+ if size > MAX_FILE_SIZE_BYTES:
157
+ print(
158
+ f"[brutaler-anwalt] WARNUNG: {real_path} ist {size} bytes > "
159
+ f"{MAX_FILE_SIZE_BYTES}-byte-Cap. Hook ueberspringt Validierung. "
160
+ f"Bitte File splitten oder bewusst akzeptieren.",
161
+ file=sys.stderr,
162
+ )
163
+ return 0
164
+
165
+ try:
166
+ with open(real_path, "r", encoding="utf-8") as f:
167
+ text = f.read()
168
+ except Exception:
169
+ return 0
170
+
171
+ file_path = real_path
172
+
173
+ first_lines = "\n".join(text.splitlines()[:40])
174
+ exit_code = 0
175
+
176
+ bypass_all_match = BYPASS_ALL_RE.search(text)
177
+ if bypass_all_match:
178
+ reason = bypass_all_match.group(1) or "<no reason given>"
179
+ print(
180
+ f"[brutaler-anwalt] BYPASS-ALL aktiv in {file_path}: {reason!r}. "
181
+ f"Alle Quality-Gates uebersprungen — User-eigene Verantwortung.",
182
+ file=sys.stderr,
183
+ )
184
+ return 0
185
+
186
+ bypass_disclaimer = bool(BYPASS_DISCLAIMER_RE.search(first_lines))
187
+
188
+ # Gate 1: Disclaimer (non-blocking warn)
189
+ if not bypass_disclaimer and (
190
+ not DISCLAIMER_HEAD.search(first_lines) or not DISCLAIMER_BODY.search(first_lines)
191
+ ):
192
+ print(
193
+ f"[brutaler-anwalt] WARNUNG: {file_path} fehlt der verpflichtende "
194
+ f"Disclaimer-Block (Haftungsausschluss + Keine Rechtsberatung / RDG §2) "
195
+ f"in den ersten 40 Zeilen.",
196
+ file=sys.stderr,
197
+ )
198
+ print(
199
+ "[brutaler-anwalt] Vorlage:\n"
200
+ " > **Haftungsausschluss**: Diese Analyse ist keine Rechtsberatung\n"
201
+ " > i.S.d. § 2 RDG und ersetzt keinen zugelassenen Rechtsanwalt.",
202
+ file=sys.stderr,
203
+ )
204
+
205
+ # Gate 2: Finding-ID-Uniqueness (blocking)
206
+ ids = FINDING_ID_RE.findall(text)
207
+ seen: set[str] = set()
208
+ dupes: set[str] = set()
209
+ for fid in ids:
210
+ if fid in seen:
211
+ dupes.add(fid)
212
+ seen.add(fid)
213
+ if dupes:
214
+ print(
215
+ f"[brutaler-anwalt] FEHLER: {file_path} enthaelt doppelte Finding-IDs: "
216
+ f"{sorted(dupes)}. Findings muessen eindeutig durchnummeriert sein.",
217
+ file=sys.stderr,
218
+ )
219
+ exit_code = 2
220
+
221
+ # Gate 3: Az.-Provenance (blocking)
222
+ is_json = file_path.endswith(".json")
223
+ unsourced_az = collect_unsourced_az(text, is_json=is_json)
224
+ suspicious_az = collect_suspicious_az(text)
225
+
226
+ if unsourced_az:
227
+ print(
228
+ f"[brutaler-anwalt] FEHLER: {file_path} enthaelt {len(unsourced_az)} "
229
+ f"Az. ohne Source-Marker (SKILL.md §5 Az.-Provenance-Pflicht):",
230
+ file=sys.stderr,
231
+ )
232
+ for az_str, line_no in unsourced_az[:10]:
233
+ print(f" - Zeile {line_no}: {az_str!r}", file=sys.stderr)
234
+ if len(unsourced_az) > 10:
235
+ print(f" ... ({len(unsourced_az) - 10} weitere)", file=sys.stderr)
236
+ print(
237
+ "[brutaler-anwalt] Markiere jede Az. mit einem der Tags:\n"
238
+ " [primary-source-verified] — Az. aus juris/curia/dejure-Volltext verifiziert\n"
239
+ " [secondary-source-verified] — Az. aus etablierter Sekundaerquelle (medien-internet-und-recht etc.)\n"
240
+ " [ungeprueft, manuelle Verifikation vor Schriftsatz erforderlich] — Skill konnte nicht verifizieren\n"
241
+ "Oder fuege die Source-URL in der selben oder Folgezeile ein.",
242
+ file=sys.stderr,
243
+ )
244
+ exit_code = 2
245
+
246
+ if suspicious_az:
247
+ print(
248
+ f"[brutaler-anwalt] HALLUZINATIONS-VERDACHT: {file_path} enthaelt "
249
+ f"{len(suspicious_az)} Az. mit Placeholder-Pattern (1234/22, 9999/22 etc.):",
250
+ file=sys.stderr,
251
+ )
252
+ for az_str, line_no in suspicious_az[:5]:
253
+ print(f" - Zeile {line_no}: {az_str!r}", file=sys.stderr)
254
+ print(
255
+ "[brutaler-anwalt] WebFetch zur Volltext-Verifikation pflicht "
256
+ "(SKILL.md §5c). Bei keinem Treffer: Az. aus Output entfernen.",
257
+ file=sys.stderr,
258
+ )
259
+ exit_code = 2
260
+
261
+ return exit_code
262
+
263
+
264
+ def collect_unsourced_az(text: str, is_json: bool = False) -> list[tuple[str, int]]:
265
+ """
266
+ Liefert alle Az.-Treffer, denen ein Source-Marker fehlt.
267
+ Source-Marker = explicit-tag ODER bekannte Quelle-URL ODER Reference-File-Pfad
268
+ in derselben Zeile oder den N folgenden Zeilen (markdown=3, json=8).
269
+ Per-Finding-Bypass: HTML-Comment `<!-- brutaler-anwalt: bypass-az-check -->`
270
+ in der selben Zeile oder den 2 vorausgehenden Zeilen blockt den Check.
271
+
272
+ JSON-Files: source_url-Felder liegen oft 4-6 Zeilen entfernt vom Az. (Schema-
273
+ struktur). Daher groesseres Window fuer JSON.
274
+ """
275
+ lines = text.splitlines()
276
+ findings: list[tuple[str, int]] = []
277
+ window_size = 10 if is_json else 4
278
+ for i, line in enumerate(lines):
279
+ for pat in AZ_PATTERNS:
280
+ for match in pat.finditer(line):
281
+ az_str = match.group(0)
282
+ window = "\n".join(lines[i:min(i + window_size, len(lines))])
283
+ if SOURCE_MARKER_RE.search(window):
284
+ continue
285
+ if "references/bgh-urteile.md" in window:
286
+ continue
287
+ if "bgh-urteile.md" in window:
288
+ continue
289
+ bypass_window = "\n".join(lines[max(0, i - 2):i + 2])
290
+ if BYPASS_AZ_CHECK_RE.search(bypass_window):
291
+ continue
292
+ findings.append((az_str, i + 1))
293
+ return findings
294
+
295
+
296
+ def collect_suspicious_az(text: str) -> list[tuple[str, int]]:
297
+ """Az. mit verdaechtigen Placeholder-Patterns (1234/22, 9999/22)."""
298
+ lines = text.splitlines()
299
+ findings: list[tuple[str, int]] = []
300
+ for i, line in enumerate(lines):
301
+ for pat in AZ_PATTERNS:
302
+ for match in pat.finditer(line):
303
+ az_str = match.group(0)
304
+ for suspicious in SUSPICIOUS_AZ_PLACEHOLDERS:
305
+ if suspicious.search(az_str):
306
+ bypass_window = "\n".join(lines[max(0, i - 2):i + 2])
307
+ if BYPASS_AZ_CHECK_RE.search(bypass_window):
308
+ continue
309
+ findings.append((az_str, i + 1))
310
+ break
311
+ return findings
312
+
313
+
314
+ if __name__ == "__main__":
315
+ sys.exit(main())
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ UserPromptSubmit-Hook fuer brutaler-anwalt (v4.3.0+).
4
+
5
+ Regex-matcht User-Prompt gegen Trigger aus hooks/triggers.json.
6
+ Bei Match: laedt die zugeordneten reference-Files und injiziert sie
7
+ als additionalContext. Spart vs. Vollload des References-Trees
8
+ typisch 70-90% Tokens pro Audit.
9
+
10
+ Halt-Condition: wenn KEIN Trigger matcht und der Prompt offensichtlich
11
+ ein Audit-Auftrag ist (Keywords: audit, compliance, dsgvo, abmahnung),
12
+ laed wir als Fallback `audit-patterns.md` immer.
13
+
14
+ Disable: set BRUTALER_ANWALT_HOOK_DISABLE=1 in env.
15
+ """
16
+ from __future__ import annotations
17
+
18
+ import json
19
+ import os
20
+ import re
21
+ import sys
22
+
23
+
24
+ AUDIT_FALLBACK_KEYWORDS = re.compile(
25
+ r"\b(audit|compliance|dsgvo|abmahn|datenschutz|impressum|cookie|agb|"
26
+ r"avv|drittland|consent|uwg|nis2|ai-act|dsa|tdddg|ttdsg|gobd|art-9|"
27
+ r"art-13|art-15|art-83|datenpanne|breach|brutaler|anwalt)\b",
28
+ re.IGNORECASE,
29
+ )
30
+ AUDIT_FALLBACK_FILES = ["audit-patterns.md", "dsgvo.md", "bgh-urteile.md"]
31
+
32
+ MAX_FILES_PER_PROMPT = 8
33
+ MAX_BYTES_PER_FILE = 80_000
34
+
35
+
36
+ def main() -> int:
37
+ if os.environ.get("BRUTALER_ANWALT_HOOK_DISABLE") == "1":
38
+ return 0
39
+
40
+ if hasattr(sys.stdout, "reconfigure"):
41
+ sys.stdout.reconfigure(encoding="utf-8")
42
+ if hasattr(sys.stdin, "reconfigure"):
43
+ sys.stdin.reconfigure(encoding="utf-8")
44
+
45
+ skill_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
46
+ triggers_path = os.path.join(skill_root, "hooks", "triggers.json")
47
+ refs_dir = os.path.join(skill_root, "references")
48
+
49
+ if not os.path.isfile(triggers_path):
50
+ return 0
51
+
52
+ prompt = ""
53
+ try:
54
+ raw = sys.stdin.read()
55
+ if raw.strip():
56
+ data = json.loads(raw)
57
+ prompt = data.get("prompt", "") or ""
58
+ except Exception:
59
+ return 0
60
+
61
+ if not prompt:
62
+ return 0
63
+
64
+ try:
65
+ with open(triggers_path, "r", encoding="utf-8") as f:
66
+ cfg = json.load(f)
67
+ except Exception:
68
+ return 0
69
+
70
+ matched_files: list[str] = []
71
+ seen: set[str] = set()
72
+ matched_triggers: list[str] = []
73
+
74
+ for trigger in cfg.get("triggers", []):
75
+ pattern = trigger.get("pattern", "")
76
+ name = trigger.get("name", "<unnamed>")
77
+ if not pattern:
78
+ continue
79
+ try:
80
+ if re.search(pattern, prompt, re.IGNORECASE):
81
+ matched_triggers.append(name)
82
+ for rel in trigger.get("files", []):
83
+ if rel not in seen:
84
+ seen.add(rel)
85
+ matched_files.append(rel)
86
+ except re.error:
87
+ continue
88
+
89
+ if not matched_files and AUDIT_FALLBACK_KEYWORDS.search(prompt):
90
+ for rel in AUDIT_FALLBACK_FILES:
91
+ if rel not in seen:
92
+ seen.add(rel)
93
+ matched_files.append(rel)
94
+ matched_triggers.append("<fallback-audit>")
95
+
96
+ if not matched_files:
97
+ return 0
98
+
99
+ if len(matched_files) > MAX_FILES_PER_PROMPT:
100
+ matched_files = matched_files[:MAX_FILES_PER_PROMPT]
101
+
102
+ blocks: list[str] = []
103
+ for rel in matched_files:
104
+ full = os.path.join(refs_dir, rel.replace("/", os.sep))
105
+ if not os.path.isfile(full):
106
+ blocks.append(
107
+ f"### references/{rel}\n\n"
108
+ f"> [Hinweis] Reference-File noch nicht angelegt.\n"
109
+ )
110
+ continue
111
+ try:
112
+ with open(full, "r", encoding="utf-8") as f:
113
+ content = f.read(MAX_BYTES_PER_FILE)
114
+ if os.path.getsize(full) > MAX_BYTES_PER_FILE:
115
+ content += (
116
+ f"\n\n> [Hinweis] File >{MAX_BYTES_PER_FILE} bytes — "
117
+ "Inhalt abgeschnitten. Manueller `Read`-Tool-Aufruf "
118
+ "fuer Volltext."
119
+ )
120
+ except Exception as e:
121
+ content = f"> [Lese-Fehler] {e}"
122
+ blocks.append(f"### references/{rel}\n\n{content}\n")
123
+
124
+ header = (
125
+ "# brutaler-anwalt — On-Demand-KB-Chunks (via UserPromptSubmit-Hook)\n\n"
126
+ f"Trigger gefeuert: {', '.join(matched_triggers)}\n"
127
+ f"Geladene Files: {len(matched_files)}\n\n"
128
+ "Nutze diese als Primaer-Referenz fuer den aktuellen Prompt. "
129
+ "Wenn Luecken: manueller `Read` auf weitere references/ oder "
130
+ "WebFetch (Tier-1-Allowlist in settings.json).\n\n---\n\n"
131
+ )
132
+
133
+ out = {
134
+ "hookSpecificOutput": {
135
+ "hookEventName": "UserPromptSubmit",
136
+ "additionalContext": header + "\n\n---\n\n".join(blocks),
137
+ }
138
+ }
139
+ print(json.dumps(out, ensure_ascii=False))
140
+ return 0
141
+
142
+
143
+ if __name__ == "__main__":
144
+ sys.exit(main())
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SessionStart-Hook fuer brutaler-anwalt (v4.3.0+).
4
+
5
+ Laedt einen schlanken INDEX (~5 KB) aus references/INDEX.md statt
6
+ des kompletten 5056-Zeilen-References-Trees. Volltext-Chunks werden
7
+ on-demand per UserPromptSubmit-Hook geladen, wenn Keywords matchen.
8
+
9
+ Disable: set BRUTALER_ANWALT_HOOK_DISABLE=1 in env.
10
+ """
11
+ from __future__ import annotations
12
+
13
+ import json
14
+ import os
15
+ import sys
16
+
17
+
18
+ def main() -> int:
19
+ if os.environ.get("BRUTALER_ANWALT_HOOK_DISABLE") == "1":
20
+ return 0
21
+
22
+ if hasattr(sys.stdout, "reconfigure"):
23
+ sys.stdout.reconfigure(encoding="utf-8")
24
+
25
+ skill_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
26
+ index_path = os.path.join(skill_root, "references", "INDEX.md")
27
+
28
+ if not os.path.isfile(index_path):
29
+ return 0
30
+
31
+ try:
32
+ with open(index_path, "r", encoding="utf-8") as f:
33
+ content = f.read()
34
+ except Exception:
35
+ return 0
36
+
37
+ header = (
38
+ "# brutaler-anwalt — Reference-INDEX (via SessionStart-Hook)\n\n"
39
+ "**Volltext-Inhalte werden on-demand geladen**, wenn dein Prompt "
40
+ "passende Keywords enthaelt (siehe `hooks/triggers.json`).\n"
41
+ "Manuelles Laden: `Read references/<file>.md`.\n\n"
42
+ "Bei Audit-Start IMMER zuerst `references/audit-patterns.md` laden "
43
+ "(SKILL.md Schritt 0).\n\n---\n\n"
44
+ )
45
+
46
+ out = {
47
+ "hookSpecificOutput": {
48
+ "hookEventName": "SessionStart",
49
+ "additionalContext": header + content,
50
+ }
51
+ }
52
+ print(json.dumps(out, ensure_ascii=False))
53
+ return 0
54
+
55
+
56
+ if __name__ == "__main__":
57
+ sys.exit(main())