@elizaos/skills 2.0.0-alpha.3

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 (371) hide show
  1. package/README.md +126 -0
  2. package/package.json +53 -0
  3. package/skills/1password/SKILL.md +70 -0
  4. package/skills/1password/references/cli-examples.md +29 -0
  5. package/skills/1password/references/get-started.md +17 -0
  6. package/skills/apple-notes/SKILL.md +77 -0
  7. package/skills/apple-reminders/SKILL.md +96 -0
  8. package/skills/bear-notes/SKILL.md +107 -0
  9. package/skills/bird/SKILL.md +224 -0
  10. package/skills/blogwatcher/SKILL.md +69 -0
  11. package/skills/blucli/SKILL.md +47 -0
  12. package/skills/bluebubbles/SKILL.md +131 -0
  13. package/skills/camsnap/SKILL.md +45 -0
  14. package/skills/canvas/SKILL.md +203 -0
  15. package/skills/clawhub/SKILL.md +77 -0
  16. package/skills/coding-agent/SKILL.md +284 -0
  17. package/skills/discord/SKILL.md +578 -0
  18. package/skills/eightctl/SKILL.md +50 -0
  19. package/skills/food-order/SKILL.md +48 -0
  20. package/skills/gemini/SKILL.md +43 -0
  21. package/skills/gifgrep/SKILL.md +79 -0
  22. package/skills/github/SKILL.md +77 -0
  23. package/skills/gog/SKILL.md +116 -0
  24. package/skills/goplaces/SKILL.md +52 -0
  25. package/skills/healthcheck/SKILL.md +245 -0
  26. package/skills/himalaya/SKILL.md +257 -0
  27. package/skills/himalaya/references/configuration.md +184 -0
  28. package/skills/himalaya/references/message-composition.md +199 -0
  29. package/skills/imsg/SKILL.md +74 -0
  30. package/skills/local-places/SERVER_README.md +101 -0
  31. package/skills/local-places/SKILL.md +102 -0
  32. package/skills/local-places/pyproject.toml +21 -0
  33. package/skills/local-places/src/local_places/__init__.py +2 -0
  34. package/skills/local-places/src/local_places/google_places.py +314 -0
  35. package/skills/local-places/src/local_places/main.py +65 -0
  36. package/skills/local-places/src/local_places/schemas.py +107 -0
  37. package/skills/mcporter/SKILL.md +61 -0
  38. package/skills/model-usage/SKILL.md +69 -0
  39. package/skills/model-usage/references/codexbar-cli.md +33 -0
  40. package/skills/model-usage/scripts/model_usage.py +310 -0
  41. package/skills/nano-banana-pro/SKILL.md +58 -0
  42. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  43. package/skills/nano-pdf/SKILL.md +38 -0
  44. package/skills/notion/SKILL.md +172 -0
  45. package/skills/obsidian/SKILL.md +81 -0
  46. package/skills/openai-image-gen/SKILL.md +89 -0
  47. package/skills/openai-image-gen/scripts/gen.py +240 -0
  48. package/skills/openai-whisper/SKILL.md +38 -0
  49. package/skills/openai-whisper-api/SKILL.md +52 -0
  50. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  51. package/skills/openhue/SKILL.md +51 -0
  52. package/skills/oracle/SKILL.md +125 -0
  53. package/skills/ordercli/SKILL.md +78 -0
  54. package/skills/peekaboo/SKILL.md +190 -0
  55. package/skills/sag/SKILL.md +87 -0
  56. package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
  57. package/skills/security-ask-questions-if-underspecified/README.md +24 -0
  58. package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
  59. package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
  60. package/skills/security-audit-context-building/README.md +58 -0
  61. package/skills/security-audit-context-building/commands/audit-context.md +21 -0
  62. package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
  63. package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
  64. package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
  65. package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
  66. package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
  67. package/skills/security-building-secure-contracts/README.md +241 -0
  68. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
  69. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
  70. package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
  71. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
  72. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
  73. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
  74. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
  75. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
  76. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
  77. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
  78. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
  79. package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
  80. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
  81. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
  82. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
  83. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
  84. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
  85. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
  86. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
  87. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
  88. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
  89. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
  90. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
  91. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
  92. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
  93. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
  94. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
  95. package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
  96. package/skills/security-burpsuite-project-parser/README.md +103 -0
  97. package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
  98. package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
  99. package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
  100. package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
  101. package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
  102. package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
  103. package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
  104. package/skills/security-constant-time-analysis/README.md +381 -0
  105. package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
  106. package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
  107. package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
  108. package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
  109. package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
  110. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
  111. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
  112. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
  113. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
  114. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
  115. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
  116. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
  117. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
  118. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
  119. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
  120. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
  121. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
  122. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
  123. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
  124. package/skills/security-constant-time-analysis/pyproject.toml +52 -0
  125. package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
  126. package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
  127. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
  128. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
  129. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
  130. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
  131. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
  132. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
  133. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
  134. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
  135. package/skills/security-constant-time-analysis/uv.lock +8 -0
  136. package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
  137. package/skills/security-culture-index/README.md +79 -0
  138. package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
  139. package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
  140. package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
  141. package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
  142. package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
  143. package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
  144. package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
  145. package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
  146. package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
  147. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
  148. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
  149. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
  150. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
  151. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
  152. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
  153. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
  154. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
  155. package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
  156. package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
  157. package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
  158. package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
  159. package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
  160. package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
  161. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
  162. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
  163. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
  164. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
  165. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
  166. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
  167. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
  168. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
  169. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
  170. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
  171. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
  172. package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
  173. package/skills/security-differential-review/README.md +109 -0
  174. package/skills/security-differential-review/commands/diff-review.md +21 -0
  175. package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
  176. package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
  177. package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
  178. package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
  179. package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
  180. package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
  181. package/skills/security-dwarf-expert/README.md +38 -0
  182. package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
  183. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
  184. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
  185. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
  186. package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
  187. package/skills/security-entry-point-analyzer/README.md +74 -0
  188. package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
  189. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
  190. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
  191. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
  192. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
  193. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
  194. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
  195. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
  196. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
  197. package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
  198. package/skills/security-firebase-apk-scanner/README.md +85 -0
  199. package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
  200. package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
  201. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
  202. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
  203. package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
  204. package/skills/security-fix-review/README.md +118 -0
  205. package/skills/security-fix-review/commands/fix-review.md +24 -0
  206. package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
  207. package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
  208. package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
  209. package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
  210. package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
  211. package/skills/security-insecure-defaults/README.md +45 -0
  212. package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
  213. package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
  214. package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
  215. package/skills/security-modern-python/README.md +58 -0
  216. package/skills/security-modern-python/hooks/hooks.json +16 -0
  217. package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
  218. package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
  219. package/skills/security-modern-python/hooks/test_helper.bash +75 -0
  220. package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
  221. package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
  222. package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
  223. package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
  224. package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
  225. package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
  226. package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
  227. package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
  228. package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
  229. package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
  230. package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
  231. package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
  232. package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
  233. package/skills/security-property-based-testing/README.md +47 -0
  234. package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
  235. package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
  236. package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
  237. package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
  238. package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
  239. package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
  240. package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
  241. package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
  242. package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
  243. package/skills/semgrep-rule-creator/README.md +43 -0
  244. package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
  245. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
  246. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
  247. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
  248. package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
  249. package/skills/semgrep-rule-variant-creator/README.md +86 -0
  250. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
  251. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
  252. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
  253. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
  254. package/skills/session-logs/SKILL.md +115 -0
  255. package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
  256. package/skills/sharp-edges/README.md +48 -0
  257. package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
  258. package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
  259. package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
  260. package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
  261. package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
  262. package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
  263. package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
  264. package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
  265. package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
  266. package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
  267. package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
  268. package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
  269. package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
  270. package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
  271. package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
  272. package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
  273. package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
  274. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  275. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  276. package/skills/skill-creator/SKILL.md +370 -0
  277. package/skills/skill-creator/license.txt +202 -0
  278. package/skills/skill-creator/scripts/init_skill.py +378 -0
  279. package/skills/skill-creator/scripts/package_skill.py +111 -0
  280. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  281. package/skills/slack/SKILL.md +144 -0
  282. package/skills/songsee/SKILL.md +49 -0
  283. package/skills/sonoscli/SKILL.md +46 -0
  284. package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
  285. package/skills/spec-to-code-compliance/README.md +67 -0
  286. package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
  287. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
  288. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
  289. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
  290. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
  291. package/skills/spotify-player/SKILL.md +64 -0
  292. package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
  293. package/skills/static-analysis/README.md +59 -0
  294. package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
  295. package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
  296. package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
  297. package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
  298. package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
  299. package/skills/summarize/SKILL.md +87 -0
  300. package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
  301. package/skills/testing-handbook-skills/README.md +241 -0
  302. package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
  303. package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
  304. package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
  305. package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
  306. package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
  307. package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
  308. package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
  309. package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
  310. package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
  311. package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
  312. package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
  313. package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
  314. package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
  315. package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
  316. package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
  317. package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
  318. package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
  319. package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
  320. package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
  321. package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
  322. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
  323. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
  324. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
  325. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
  326. package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
  327. package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
  328. package/skills/things-mac/SKILL.md +86 -0
  329. package/skills/tmux/SKILL.md +135 -0
  330. package/skills/tmux/scripts/find-sessions.sh +112 -0
  331. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  332. package/skills/trello/SKILL.md +95 -0
  333. package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
  334. package/skills/variant-analysis/README.md +41 -0
  335. package/skills/variant-analysis/commands/variants.md +23 -0
  336. package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
  337. package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
  338. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
  339. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
  340. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
  341. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
  342. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
  343. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
  344. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
  345. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
  346. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
  347. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
  348. package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
  349. package/skills/video-frames/SKILL.md +46 -0
  350. package/skills/video-frames/scripts/frame.sh +81 -0
  351. package/skills/voice-call/SKILL.md +45 -0
  352. package/skills/wacli/SKILL.md +72 -0
  353. package/skills/weather/SKILL.md +54 -0
  354. package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
  355. package/skills/yara-authoring/README.md +131 -0
  356. package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
  357. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
  358. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
  359. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
  360. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
  361. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
  362. package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
  363. package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
  364. package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
  365. package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
  366. package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
  367. package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
  368. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
  369. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
  370. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
  371. package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
@@ -0,0 +1,595 @@
1
+ ## 6. Vulnerability Checklist (3 Patterns)
2
+
3
+ ### 6.1 INTEGER AS BOOLEAN ⚠️ HIGH
4
+
5
+ **Description**: FunC uses integers for boolean values (0 = false, -1 = true). The bitwise NOT operator `~` on non-standard boolean values (positive integers) produces unexpected results, causing logic errors.
6
+
7
+ **Background**:
8
+ - FunC `true` = -1 (all bits set: `0xFFFFFFFF...`)
9
+ - FunC `false` = 0 (all bits clear: `0x00000000...`)
10
+ - `~` is bitwise NOT: `~0 = -1`, `~(-1) = 0`
11
+ - But `~1 = -2` (not 0!), `~2 = -3` (not 0!)
12
+
13
+ **Detection Patterns**:
14
+ ```func
15
+ ;; VULNERABLE: Using positive integers as booleans
16
+ int is_active = 1; ;; WRONG: Should be -1 for true, 0 for false
17
+
18
+ if (is_active) {
19
+ ;; This works - 1 is truthy
20
+ }
21
+
22
+ if (~ is_active) {
23
+ ;; PROBLEM: ~1 = -2, which is still truthy!
24
+ ;; This branch will ALWAYS execute, not just when is_active is false
25
+ }
26
+
27
+ ;; VULNERABLE: Returning positive integers as booleans
28
+ int is_valid(int value) {
29
+ if (value > 100) {
30
+ return 1; ;; WRONG: Should return -1
31
+ }
32
+ return 0; ;; Correct for false
33
+ }
34
+
35
+ int valid = is_valid(150); ;; Returns 1
36
+ if (~ valid) {
37
+ ;; PROBLEM: ~1 = -2 (truthy), this executes when it shouldn't!
38
+ }
39
+
40
+ ;; VULNERABLE: Boolean arithmetic
41
+ int flag1 = 1; ;; Wrong true value
42
+ int flag2 = 1; ;; Wrong true value
43
+ int both_true = flag1 & flag2; ;; 1 & 1 = 1 (works)
44
+ int neither_true = (~ flag1) & (~ flag2); ;; ~1 & ~1 = -2 & -2 = -2 (WRONG!)
45
+ ;; Expected 0 (false), got -2 (truthy)
46
+ ```
47
+
48
+ **What to Check**:
49
+ - [ ] All boolean values use 0 (false) or -1 (true)
50
+ - [ ] NO positive integers (1, 2, etc.) used as booleans
51
+ - [ ] Functions returning booleans return -1 (not 1) for true
52
+ - [ ] Boolean logic with `~`, `&`, `|` uses correct values
53
+ - [ ] Conditions test against 0 explicitly where needed
54
+
55
+ **Mitigation**:
56
+ ```func
57
+ ;; SECURE: Use correct boolean values
58
+ const int TRUE = -1; ;; All bits set
59
+ const int FALSE = 0; ;; All bits clear
60
+
61
+ int is_active = TRUE; ;; Correct
62
+
63
+ if (is_active) {
64
+ ;; Works correctly
65
+ }
66
+
67
+ if (~ is_active) {
68
+ ;; Works correctly: ~(-1) = 0 (falsy)
69
+ }
70
+
71
+ ;; SECURE: Return correct boolean values
72
+ int is_valid(int value) method_id {
73
+ if (value > 100) {
74
+ return TRUE; ;; -1 for true
75
+ }
76
+ return FALSE; ;; 0 for false
77
+ }
78
+
79
+ int valid = is_valid(150);
80
+ if (~ valid) {
81
+ ;; Correct: ~(-1) = 0 (falsy), this doesn't execute
82
+ }
83
+
84
+ ;; SECURE: Boolean operations with correct values
85
+ int flag1 = TRUE; ;; -1
86
+ int flag2 = TRUE; ;; -1
87
+ int both_true = flag1 & flag2; ;; -1 & -1 = -1 (TRUE)
88
+ int neither_true = (~ flag1) & (~ flag2); ;; 0 & 0 = 0 (FALSE)
89
+
90
+ ;; SECURE: Explicit comparisons when needed
91
+ int status_code = get_status(); ;; Returns 0, 1, 2, etc.
92
+
93
+ ;; Instead of treating as boolean:
94
+ if (status_code) { } ;; Ambiguous!
95
+
96
+ ;; Explicitly compare:
97
+ if (status_code != 0) { } ;; Clear intent
98
+ if (status_code == 1) { } ;; Even better
99
+ ```
100
+
101
+ **Common Mistake Patterns**:
102
+ ```func
103
+ ;; MISTAKE 1: Loading boolean from storage/message
104
+ slice cs = get_data().begin_parse();
105
+ int flag = cs~load_uint(1); ;; Returns 0 or 1, not 0 or -1!
106
+
107
+ ;; FIX: Convert to proper boolean
108
+ int flag_bool = flag ? TRUE : FALSE;
109
+
110
+ ;; MISTAKE 2: Comparing with 1 instead of TRUE
111
+ int is_owner = sender == owner_address; ;; Returns 0 or -1 (correct)
112
+
113
+ if (is_owner == 1) { ;; WRONG: will never match
114
+ ;; This never executes!
115
+ }
116
+
117
+ ;; FIX: Compare with TRUE or just use directly
118
+ if (is_owner == TRUE) { } ;; Correct
119
+ if (is_owner) { } ;; Also correct
120
+
121
+ ;; MISTAKE 3: Returning count as boolean
122
+ int count_items() {
123
+ return items.length; ;; Returns 0, 1, 2, 3... (not boolean!)
124
+ }
125
+
126
+ int has_items = count_items();
127
+ if (~ has_items) {
128
+ ;; WRONG: ~1 = -2 (truthy), ~2 = -3 (truthy), etc.
129
+ }
130
+
131
+ ;; FIX: Return proper boolean or use explicit comparison
132
+ int has_items() {
133
+ return items.length > 0 ? TRUE : FALSE;
134
+ }
135
+ ;; OR
136
+ int count = count_items();
137
+ if (count == 0) { } ;; Explicit comparison
138
+ ```
139
+
140
+ **Testing**:
141
+ ```func
142
+ ;; Test boolean logic
143
+ int test_boolean_logic() {
144
+ int t = TRUE;
145
+ int f = FALSE;
146
+
147
+ ;; Basic logic
148
+ throw_unless(100, t == -1);
149
+ throw_unless(101, f == 0);
150
+
151
+ ;; Negation
152
+ throw_unless(102, ~t == f);
153
+ throw_unless(103, ~f == t);
154
+
155
+ ;; AND logic
156
+ throw_unless(104, t & t == t);
157
+ throw_unless(105, t & f == f);
158
+ throw_unless(106, f & f == f);
159
+
160
+ ;; OR logic
161
+ throw_unless(107, t | t == t);
162
+ throw_unless(108, t | f == t);
163
+ throw_unless(109, f | f == f);
164
+
165
+ return TRUE;
166
+ }
167
+ ```
168
+
169
+ **References**: building-secure-contracts/not-so-smart-contracts/ton/integer_as_boolean
170
+
171
+ ---
172
+
173
+ ### 4.2 FAKE JETTON CONTRACT ⚠️ CRITICAL
174
+
175
+ **Description**: The `transfer_notification` operation can be sent by any contract. Without sender validation, attackers can send fake transfer notifications claiming to have transferred tokens that were never sent.
176
+
177
+ **Background**:
178
+ - Jetton (TON's token standard) uses `transfer_notification` to notify recipients
179
+ - Real flow: User → Jetton Wallet → Receiver (with notification)
180
+ - Attack: Attacker → Receiver (fake notification, no Jetton Wallet involved)
181
+
182
+ **Detection Patterns**:
183
+ ```func
184
+ ;; VULNERABLE: No sender validation in transfer_notification
185
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
186
+ slice cs = in_msg_full.begin_parse();
187
+ int flags = cs~load_uint(4);
188
+ slice sender_address = cs~load_msg_addr();
189
+
190
+ int op = in_msg_body~load_uint(32);
191
+
192
+ if (op == op::transfer_notification) {
193
+ ;; WRONG: No validation of sender_address!
194
+ int jetton_amount = in_msg_body~load_coins();
195
+ slice from_user = in_msg_body~load_msg_addr();
196
+ slice forward_payload = in_msg_body;
197
+
198
+ ;; Process as if jettons were received
199
+ ;; Attacker can claim any jetton_amount without actually sending tokens!
200
+ credit_user(from_user, jetton_amount);
201
+ }
202
+ }
203
+
204
+ ;; VULNERABLE: Validating user address but not Jetton wallet
205
+ if (op == op::transfer_notification) {
206
+ int jetton_amount = in_msg_body~load_coins();
207
+ slice from_user = in_msg_body~load_msg_addr();
208
+
209
+ ;; Validates from_user but not sender!
210
+ throw_unless(error::unauthorized, equal_slices(from_user, authorized_user));
211
+
212
+ ;; WRONG: Anyone can send this message claiming to be from authorized_user
213
+ credit_user(from_user, jetton_amount);
214
+ }
215
+
216
+ ;; VULNERABLE: Trusting forward_payload data
217
+ if (op == op::transfer_notification) {
218
+ int jetton_amount = in_msg_body~load_coins();
219
+ slice from_user = in_msg_body~load_msg_addr();
220
+ slice forward_payload = in_msg_body;
221
+
222
+ ;; Parse data from forward_payload
223
+ int token_id = forward_payload~load_uint(32);
224
+
225
+ ;; WRONG: Attacker controls all this data!
226
+ ;; Can claim any token_id, any jetton_amount
227
+ }
228
+ ```
229
+
230
+ **What to Check**:
231
+ - [ ] `transfer_notification` handler validates sender address
232
+ - [ ] Sender must be expected Jetton wallet address
233
+ - [ ] Jetton wallet addresses stored during initialization
234
+ - [ ] Cannot trust forward_payload without sender validation
235
+ - [ ] User address in notification is NOT sufficient validation
236
+
237
+ **Mitigation**:
238
+ ```func
239
+ ;; SECURE: Store expected Jetton wallet address at initialization
240
+ global slice jetton_wallet_address;
241
+
242
+ () load_data() impure {
243
+ slice ds = get_data().begin_parse();
244
+ jetton_wallet_address = ds~load_msg_addr();
245
+ ;; Load other data
246
+ }
247
+
248
+ () save_data() impure {
249
+ set_data(begin_cell()
250
+ .store_slice(jetton_wallet_address)
251
+ ;; Store other data
252
+ .end_cell());
253
+ }
254
+
255
+ ;; Initialize with Jetton wallet address
256
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
257
+ load_data();
258
+
259
+ slice cs = in_msg_full.begin_parse();
260
+ int flags = cs~load_uint(4);
261
+ slice sender_address = cs~load_msg_addr();
262
+
263
+ int op = in_msg_body~load_uint(32);
264
+
265
+ if (op == op::transfer_notification) {
266
+ ;; CRITICAL: Validate sender is expected Jetton wallet
267
+ throw_unless(error::wrong_jetton_wallet,
268
+ equal_slices(sender_address, jetton_wallet_address));
269
+
270
+ ;; Now safe to trust the notification
271
+ int jetton_amount = in_msg_body~load_coins();
272
+ slice from_user = in_msg_body~load_msg_addr();
273
+ slice forward_payload = in_msg_body;
274
+
275
+ ;; Can safely credit user
276
+ credit_user(from_user, jetton_amount);
277
+
278
+ ;; Can safely parse forward_payload
279
+ if (~ forward_payload.slice_empty?()) {
280
+ int token_id = forward_payload~load_uint(32);
281
+ ;; Use token_id
282
+ }
283
+ }
284
+ }
285
+
286
+ ;; SECURE: Multiple Jetton support with dictionary
287
+ global cell jetton_wallets; ;; Dictionary: jetton_type -> wallet_address
288
+
289
+ () load_data() impure {
290
+ slice ds = get_data().begin_parse();
291
+ jetton_wallets = ds~load_dict();
292
+ }
293
+
294
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
295
+ load_data();
296
+
297
+ slice cs = in_msg_full.begin_parse();
298
+ int flags = cs~load_uint(4);
299
+ slice sender_address = cs~load_msg_addr();
300
+
301
+ int op = in_msg_body~load_uint(32);
302
+
303
+ if (op == op::transfer_notification) {
304
+ int jetton_amount = in_msg_body~load_coins();
305
+ slice from_user = in_msg_body~load_msg_addr();
306
+ slice forward_payload = in_msg_body;
307
+
308
+ ;; Parse jetton type from forward_payload
309
+ int jetton_type = forward_payload~load_uint(8);
310
+
311
+ ;; Look up expected wallet address for this jetton type
312
+ (slice expected_wallet, int found) = jetton_wallets.udict_get?(256, jetton_type);
313
+
314
+ ;; Validate sender matches expected wallet
315
+ throw_unless(error::unauthorized_jetton,
316
+ found & equal_slices(sender_address, expected_wallet));
317
+
318
+ ;; Safe to process
319
+ credit_user_jetton(from_user, jetton_type, jetton_amount);
320
+ }
321
+ }
322
+ ```
323
+
324
+ **Admin Function to Set Jetton Wallet**:
325
+ ```func
326
+ ;; Only owner can set/update Jetton wallet address
327
+ if (op == op::set_jetton_wallet) {
328
+ throw_unless(error::unauthorized, equal_slices(sender_address, owner_address));
329
+
330
+ slice new_jetton_wallet = in_msg_body~load_msg_addr();
331
+ jetton_wallet_address = new_jetton_wallet;
332
+
333
+ save_data();
334
+ return ();
335
+ }
336
+ ```
337
+
338
+ **Testing**:
339
+ ```typescript
340
+ // Test fake transfer notification is rejected
341
+ it("should reject fake transfer notification", async () => {
342
+ const attacker = await blockchain.treasury("attacker");
343
+
344
+ // Attacker sends fake transfer_notification directly
345
+ const result = await contract.sendInternalMessage(attacker.getSender(), {
346
+ op: OP_CODES.TRANSFER_NOTIFICATION,
347
+ jettonAmount: toNano("1000"),
348
+ fromUser: user.address,
349
+ });
350
+
351
+ expect(result.transactions).toHaveTransaction({
352
+ from: attacker.address,
353
+ to: contract.address,
354
+ success: false, // Should be rejected
355
+ exitCode: ERROR_CODES.WRONG_JETTON_WALLET,
356
+ });
357
+ });
358
+
359
+ // Test real Jetton wallet notification is accepted
360
+ it("should accept real jetton transfer", async () => {
361
+ // Send from actual Jetton wallet
362
+ const result = await contract.sendInternalMessage(jettonWallet.address, {
363
+ op: OP_CODES.TRANSFER_NOTIFICATION,
364
+ jettonAmount: toNano("100"),
365
+ fromUser: user.address,
366
+ });
367
+
368
+ expect(result.transactions).toHaveTransaction({
369
+ from: jettonWallet.address,
370
+ to: contract.address,
371
+ success: true,
372
+ });
373
+ });
374
+ ```
375
+
376
+ **References**: building-secure-contracts/not-so-smart-contracts/ton/fake_jetton_contract
377
+
378
+ ---
379
+
380
+ ### 4.3 FORWARD TON WITHOUT GAS CHECK ⚠️ HIGH
381
+
382
+ **Description**: Allowing users to specify `forward_ton_amount` in outgoing messages without validating sufficient gas can drain the contract's TON balance. User pays small gas but specifies large forward amount from contract balance.
383
+
384
+ **Detection Patterns**:
385
+ ```func
386
+ ;; VULNERABLE: User-specified forward_ton_amount without validation
387
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
388
+ int op = in_msg_body~load_uint(32);
389
+
390
+ if (op == op::transfer) {
391
+ slice to_address = in_msg_body~load_msg_addr();
392
+ int amount = in_msg_body~load_coins();
393
+ int forward_ton_amount = in_msg_body~load_coins(); ;; USER CONTROLLED!
394
+
395
+ ;; WRONG: No check that msg_value covers forward_ton_amount
396
+ ;; Contract pays from its own balance!
397
+
398
+ var msg = begin_cell()
399
+ .store_uint(0x18, 6)
400
+ .store_slice(to_address)
401
+ .store_coins(forward_ton_amount) ;; Drains contract balance!
402
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
403
+ .end_cell();
404
+
405
+ send_raw_message(msg, 1);
406
+ }
407
+ }
408
+
409
+ ;; VULNERABLE: No gas validation for operations
410
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
411
+ int op = in_msg_body~load_uint(32);
412
+
413
+ if (op == op::claim_reward) {
414
+ slice user = in_msg_body~load_msg_addr();
415
+ int forward_amount = in_msg_body~load_coins();
416
+
417
+ ;; Calculate reward
418
+ int reward = calculate_reward(user);
419
+
420
+ ;; WRONG: Sends user-specified forward_amount
421
+ ;; No validation that msg_value >= tx_fee + forward_amount
422
+ var msg = begin_cell()
423
+ .store_uint(0x18, 6)
424
+ .store_slice(user)
425
+ .store_coins(forward_amount + reward)
426
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
427
+ .end_cell();
428
+
429
+ send_raw_message(msg, 1); ;; Contract pays gas!
430
+ }
431
+ }
432
+ ```
433
+
434
+ **What to Check**:
435
+ - [ ] User cannot specify arbitrary forward TON amounts
436
+ - [ ] IF forward amount is user-specified: validate `msg_value >= tx_fee + forward_ton_amount`
437
+ - [ ] Prefer fixed/bounded forward amounts
438
+ - [ ] Contract balance protected from drainage
439
+ - [ ] Gas costs accounted for in all operations
440
+
441
+ **Mitigation**:
442
+ ```func
443
+ ;; SECURE: Fixed forward amounts (PREFERRED)
444
+ const int FORWARD_TON_AMOUNT = 50000000; ;; 0.05 TON (fixed)
445
+ const int TX_FEE = 10000000; ;; 0.01 TON estimated fee
446
+
447
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
448
+ int op = in_msg_body~load_uint(32);
449
+
450
+ if (op == op::transfer) {
451
+ slice to_address = in_msg_body~load_msg_addr();
452
+ int amount = in_msg_body~load_coins();
453
+
454
+ ;; Use fixed forward amount
455
+ ;; No user control, no drainage risk
456
+
457
+ var msg = begin_cell()
458
+ .store_uint(0x18, 6)
459
+ .store_slice(to_address)
460
+ .store_coins(FORWARD_TON_AMOUNT) ;; Fixed amount
461
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
462
+ ;; Store message body
463
+ .end_cell();
464
+
465
+ send_raw_message(msg, 1);
466
+ }
467
+ }
468
+
469
+ ;; SECURE: Validate msg_value covers all costs (if user-specified)
470
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
471
+ int op = in_msg_body~load_uint(32);
472
+
473
+ if (op == op::transfer_with_forward) {
474
+ slice to_address = in_msg_body~load_msg_addr();
475
+ int amount = in_msg_body~load_coins();
476
+ int forward_ton_amount = in_msg_body~load_coins();
477
+
478
+ ;; CRITICAL: Validate msg_value covers tx fee + forward amount
479
+ throw_unless(error::insufficient_gas,
480
+ msg_value >= TX_FEE + forward_ton_amount);
481
+
482
+ var msg = begin_cell()
483
+ .store_uint(0x18, 6)
484
+ .store_slice(to_address)
485
+ .store_coins(forward_ton_amount)
486
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
487
+ .end_cell();
488
+
489
+ ;; Safe: user provided sufficient gas
490
+ send_raw_message(msg, 1);
491
+ }
492
+ }
493
+
494
+ ;; SECURE: Bounded forward amounts
495
+ const int MAX_FORWARD_TON = 100000000; ;; 0.1 TON maximum
496
+
497
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
498
+ int op = in_msg_body~load_uint(32);
499
+
500
+ if (op == op::claim_with_notification) {
501
+ slice user = in_msg_body~load_msg_addr();
502
+ int forward_ton_amount = in_msg_body~load_coins();
503
+
504
+ ;; Enforce maximum forward amount
505
+ throw_unless(error::forward_amount_too_high,
506
+ forward_ton_amount <= MAX_FORWARD_TON);
507
+
508
+ ;; Validate msg_value covers costs
509
+ throw_unless(error::insufficient_gas,
510
+ msg_value >= TX_FEE + forward_ton_amount);
511
+
512
+ ;; Calculate reward from contract logic
513
+ int reward = calculate_reward(user);
514
+
515
+ var msg = begin_cell()
516
+ .store_uint(0x18, 6)
517
+ .store_slice(user)
518
+ .store_coins(reward) ;; Reward from contract
519
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
520
+ ;; Message body
521
+ .end_cell();
522
+
523
+ ;; Send with user's gas
524
+ send_raw_message(msg, 64); ;; Flag 64: use all remaining gas from incoming message
525
+ }
526
+ }
527
+
528
+ ;; SECURE: Don't allow user to specify forward amount at all
529
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
530
+ int op = in_msg_body~load_uint(32);
531
+
532
+ if (op == op::withdraw) {
533
+ slice user = in_msg_body~load_msg_addr();
534
+
535
+ ;; No forward_ton_amount parameter
536
+ ;; Use contract's calculated amount only
537
+
538
+ int withdrawal_amount = calculate_withdrawal(user);
539
+
540
+ var msg = begin_cell()
541
+ .store_uint(0x18, 6)
542
+ .store_slice(user)
543
+ .store_coins(withdrawal_amount) ;; Contract controlled
544
+ .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
545
+ .end_cell();
546
+
547
+ send_raw_message(msg, 1);
548
+ }
549
+ }
550
+ ```
551
+
552
+ **Send Message Flags Reference**:
553
+ ```func
554
+ ;; send_raw_message flag values:
555
+ ;; 0 - Normal send, pay fees from message value
556
+ ;; 1 - Pay fees separately from contract balance
557
+ ;; 64 - Return remaining value from incoming message
558
+ ;; 128 - Carry all remaining balance
559
+
560
+ ;; Safe patterns:
561
+ send_raw_message(msg, 64); ;; Use incoming msg_value for fees
562
+ send_raw_message(msg, 0); ;; Fees from message value itself
563
+
564
+ ;; Dangerous with user input:
565
+ send_raw_message(msg, 1); ;; Fees from contract - validate msg_value!
566
+ send_raw_message(msg, 128); ;; Never use with user-controlled amounts!
567
+ ```
568
+
569
+ **Testing**:
570
+ ```typescript
571
+ // Test cannot drain contract with large forward amount
572
+ it("should reject large forward amount without sufficient gas", async () => {
573
+ const result = await contract.sendInternalMessage(user.getSender(), {
574
+ value: toNano("0.01"), // Only 0.01 TON provided
575
+ body: {
576
+ op: OP_CODES.TRANSFER,
577
+ toAddress: recipient.address,
578
+ amount: toNano("100"),
579
+ forwardTonAmount: toNano("10"), // Trying to forward 10 TON!
580
+ },
581
+ });
582
+
583
+ expect(result.transactions).toHaveTransaction({
584
+ success: false,
585
+ exitCode: ERROR_CODES.INSUFFICIENT_GAS,
586
+ });
587
+
588
+ // Contract balance should not decrease
589
+ expect(await contract.getBalance()).toEqual(initialBalance);
590
+ });
591
+ ```
592
+
593
+ **References**: building-secure-contracts/not-so-smart-contracts/ton/forward_value_without_check
594
+
595
+ ---
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "burpsuite-project-parser",
3
+ "version": "1.0.0",
4
+ "description": "Search and extract data from Burp Suite project files (.burp) directly from the command line for use in Claude",
5
+ "author": {
6
+ "name": "Will Vandevanter",
7
+ "email": "opensource@trailofbits.com",
8
+ "url": "https://github.com/trailofbits"
9
+ }
10
+ }
@@ -0,0 +1,103 @@
1
+ # Burp Suite Project Parser
2
+
3
+ Search and extract data from Burp Suite project files (.burp) for use in Claude
4
+
5
+ **Author:** Will Vandevanter
6
+
7
+ ## Prerequisites
8
+
9
+ - **Burp Suite Professional** - Required for project file support
10
+ - **burpsuite-project-file-parser extension** - Must be installed in Burp Suite (Available: https://github.com/BuffaloWill/burpsuite-project-file-parser)
11
+ - **jq** (optional) - Recommended for formatting/filtering JSON output
12
+
13
+ ## When to Use
14
+
15
+ Use this skill when you need to get the following from a Burp project:
16
+ - Search response headers or bodies using regex patterns
17
+ - Extract security audit findings and vulnerabilities
18
+ - Dump proxy history or site map data for analysis
19
+ - Programmatically analyze HTTP traffic captured by Burp Suite
20
+
21
+ Trigger phrases: "search the burp project", "find in burp file", "what vulnerabilities in the burp", "get audit items from burp"
22
+
23
+ ## What It Does
24
+
25
+ This skill provides CLI access to Burp Suite project files through the burpsuite-project-file-parser extension:
26
+
27
+ 1. **Search headers/bodies** - Find specific patterns in captured HTTP traffic using regex
28
+ 2. **Extract audit items** - Get all security findings with severity, confidence, and URLs
29
+ 3. **Dump traffic data** - Export proxy history and site map entries as JSON
30
+ 4. **Filter output** - Use sub-component filters to optimize performance on large projects
31
+
32
+ ## Installation
33
+
34
+ ```
35
+ /plugin install trailofbits/skills/plugins/burpsuite-project-parser
36
+ ```
37
+
38
+ ## Usage
39
+
40
+ Base command:
41
+ ```bash
42
+ scripts/burp-search.sh /path/to/project.burp [FLAGS]
43
+ ```
44
+
45
+ ### Available Commands
46
+
47
+ | Command | Description | Output |
48
+ |---------|-------------|--------|
49
+ | `auditItems` | Extract all security findings | JSON: name, severity, confidence, host, port, protocol, url |
50
+ | `proxyHistory` | Dump all captured HTTP traffic | Complete request/response data |
51
+ | `siteMap` | Dump all site map entries | Site structure |
52
+ | `responseHeader='.*regex.*'` | Search response headers | JSON: url, header |
53
+ | `responseBody='.*regex.*'` | Search response bodies | Matching content |
54
+
55
+ ### Sub-Component Filters
56
+
57
+ For large projects, filter to specific data to improve performance:
58
+
59
+ ```bash
60
+ proxyHistory.request.headers # Only request headers
61
+ proxyHistory.request.body # Only request body
62
+ proxyHistory.response.headers # Only response headers
63
+ proxyHistory.response.body # Only response body
64
+ ```
65
+
66
+ Same patterns work with `siteMap.*`
67
+
68
+ ## Examples
69
+
70
+ Search for CORS headers:
71
+ ```bash
72
+ scripts/burp-search.sh project.burp "responseHeader='.*Access-Control.*'"
73
+ ```
74
+
75
+ Get all high-severity findings:
76
+ ```bash
77
+ scripts/burp-search.sh project.burp auditItems | jq 'select(.severity == "High")'
78
+ ```
79
+
80
+ Find server signatures:
81
+ ```bash
82
+ scripts/burp-search.sh project.burp "responseHeader='.*(nginx|Apache|Servlet).*'"
83
+ ```
84
+
85
+ Extract request URLs from proxy history:
86
+ ```bash
87
+ scripts/burp-search.sh project.burp proxyHistory.request.headers | jq -r '.request.url'
88
+ ```
89
+
90
+ Search for HTML forms:
91
+ ```bash
92
+ scripts/burp-search.sh project.burp "responseBody='.*<form.*action.*'"
93
+ ```
94
+
95
+ ## Output Format
96
+
97
+ All output is JSON, one object per line. Pipe to `jq` for formatting or use `grep` for filtering:
98
+
99
+ ```bash
100
+ scripts/burp-search.sh project.burp auditItems | jq .
101
+ scripts/burp-search.sh project.burp auditItems | grep -i "sql injection"
102
+ ```
103
+