@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,518 @@
1
+ # Detailed Variant Creation Workflow
2
+
3
+ Complete step-by-step workflow for porting Semgrep rules to new languages.
4
+
5
+ ## Core Principle: Independent Cycles
6
+
7
+ Each target language goes through the complete 4-phase cycle independently:
8
+
9
+ ```
10
+ FOR EACH target language:
11
+ ┌─────────────────────────────────────────────────────────┐
12
+ │ Phase 1: Applicability Analysis │
13
+ │ └─→ APPLICABLE? Continue │
14
+ │ └─→ NOT_APPLICABLE? Skip to next language │
15
+ │ │
16
+ │ Phase 2: Test Creation (Test-First) │
17
+ │ └─→ Create test file with ruleid/ok annotations │
18
+ │ │
19
+ │ Phase 3: Rule Creation │
20
+ │ └─→ Analyze AST, write rule, update metadata │
21
+ │ │
22
+ │ Phase 4: Validation │
23
+ │ └─→ Tests pass? Complete, proceed to next language │
24
+ │ └─→ Tests fail? Iterate phases 2-4 │
25
+ └─────────────────────────────────────────────────────────┘
26
+ ```
27
+
28
+ **Do NOT batch**: Complete all phases for one language before starting the next.
29
+
30
+ ## Phase 1: Applicability Analysis
31
+
32
+ ### Step 1.1: Parse the Original Rule
33
+
34
+ Extract key components:
35
+
36
+ ```yaml
37
+ # Example original rule
38
+ rules:
39
+ - id: python-sql-injection
40
+ mode: taint
41
+ languages: [python]
42
+ severity: ERROR
43
+ message: SQL injection vulnerability
44
+ pattern-sources:
45
+ - pattern: request.args.get(...)
46
+ pattern-sinks:
47
+ - pattern: cursor.execute($QUERY, ...)
48
+ pattern-sanitizers:
49
+ - pattern: sanitize(...)
50
+ ```
51
+
52
+ Document:
53
+ - **Rule ID**: python-sql-injection
54
+ - **Mode**: taint (optional, if taint mode used via `mode: taint`)
55
+ - **Sources**: request.args.get(...) (via `pattern-sources` - if taint analysis mode used)
56
+ - **Sinks**: cursor.execute($QUERY, ...) (via `pattern-sinks` - if taint analysis mode used)
57
+ - **Sanitizers**: sanitize(...) (via `pattern-sanitizers` - optional, if taint analysis used)
58
+
59
+ ### Step 1.2: Analyze for Target Language
60
+
61
+ For each target language, determine applicability.
62
+
63
+ See [applicability-analysis.md]({baseDir}/references/applicability-analysis.md) for detailed guidance.
64
+
65
+ ### Step 1.3: Document Verdict
66
+
67
+ ```
68
+ TARGET: golang
69
+ VERDICT: APPLICABLE
70
+ REASONING: SQL injection applies to Go. database/sql package provides
71
+ Query/Exec functions that can be vulnerable to injection when string
72
+ concatenation is used instead of parameterized queries.
73
+ EQUIVALENT_CONSTRUCTS:
74
+ - Source: request.args.get → r.URL.Query().Get(), r.FormValue()
75
+ - Sink: cursor.execute → db.Query(), db.Exec()
76
+ ```
77
+
78
+ If `NOT_APPLICABLE`, document why and proceed to next target language.
79
+
80
+ ## Phase 2: Test Creation
81
+
82
+ ### Step 2.1: Create Directory Structure
83
+
84
+ ```bash
85
+ mkdir <original-rule-id>-<language>
86
+ ```
87
+
88
+ Example:
89
+ ```bash
90
+ mkdir python-sql-injection-golang
91
+ ```
92
+
93
+ ### Step 2.2: Write Test File
94
+
95
+ Create test file with target language extension:
96
+
97
+ ```go
98
+ // python-sql-injection-golang.go
99
+ package main
100
+
101
+ import (
102
+ "database/sql"
103
+ "net/http"
104
+ )
105
+
106
+ // Vulnerable cases - MUST be flagged
107
+ func vulnerable1(db *sql.DB, r *http.Request) {
108
+ userID := r.URL.Query().Get("id")
109
+ // ruleid: python-sql-injection-golang
110
+ db.Query("SELECT * FROM users WHERE id = " + userID)
111
+ }
112
+
113
+ func vulnerable2(db *sql.DB, r *http.Request) {
114
+ name := r.FormValue("name")
115
+ // ruleid: python-sql-injection-golang
116
+ db.Exec("DELETE FROM users WHERE name = '" + name + "'")
117
+ }
118
+
119
+ // Safe cases - must NOT be flagged
120
+ func safeParameterized(db *sql.DB, r *http.Request) {
121
+ userID := r.URL.Query().Get("id")
122
+ // ok: python-sql-injection-golang
123
+ db.Query("SELECT * FROM users WHERE id = ?", userID)
124
+ }
125
+
126
+ func safeHardcoded(db *sql.DB) {
127
+ // ok: python-sql-injection-golang
128
+ db.Query("SELECT * FROM users WHERE id = 1")
129
+ }
130
+ ```
131
+
132
+ ### Step 2.3: Test Case Requirements
133
+
134
+ **Minimum cases:**
135
+ - 2+ vulnerable cases (`ruleid:`)
136
+ - 2+ safe cases (`ok:`)
137
+
138
+ **Include variations:**
139
+ - Different sink functions (Query, Exec, QueryRow)
140
+ - Different source patterns (URL params, form values)
141
+ - Different string construction (concatenation, fmt.Sprintf)
142
+ - Safe patterns (parameterized queries, hardcoded values)
143
+
144
+ ### Step 2.4: Annotation Placement
145
+
146
+ **CRITICAL**: The annotation comment must be on the line IMMEDIATELY BEFORE the code:
147
+
148
+ ```go
149
+ // ruleid: my-rule
150
+ vulnerableCode() // This line gets flagged
151
+
152
+ // ok: my-rule
153
+ safeCode() // This line must NOT be flagged
154
+ ```
155
+
156
+ ## Phase 3: Rule Creation
157
+
158
+ ### Step 3.1: Analyze AST
159
+
160
+ ```bash
161
+ semgrep --dump-ast -l go python-sql-injection-golang.go
162
+ ```
163
+
164
+ Study the AST structure for:
165
+ - How function calls are represented
166
+ - How string concatenation appears
167
+ - How method calls are structured
168
+
169
+ ### Step 3.2: Write the Rule
170
+
171
+ Create rule file with adapted patterns:
172
+
173
+ ```yaml
174
+ # python-sql-injection-golang.yaml
175
+ rules:
176
+ - id: python-sql-injection-golang
177
+ mode: taint
178
+ languages: [go]
179
+ severity: ERROR
180
+ message: >-
181
+ SQL injection vulnerability. User input from $SOURCE flows to
182
+ database query without sanitization.
183
+ metadata:
184
+ original-rule: python-sql-injection
185
+ ported-from: python
186
+ pattern-sources:
187
+ - patterns:
188
+ - pattern: $R.URL.Query().Get(...)
189
+ - patterns:
190
+ - pattern: $R.FormValue(...)
191
+ pattern-sinks:
192
+ - patterns:
193
+ - pattern: $DB.Query($QUERY, ...)
194
+ - focus-metavariable: $QUERY
195
+ - patterns:
196
+ - pattern: $DB.Exec($QUERY, ...)
197
+ - focus-metavariable: $QUERY
198
+ - patterns:
199
+ - pattern: $DB.QueryRow($QUERY, ...)
200
+ - focus-metavariable: $QUERY
201
+ ```
202
+
203
+ ### Step 3.3: Update Metadata
204
+
205
+ For each ported rule:
206
+ - **id**: Append `-<language>` to original ID
207
+ - **languages**: Change to target language
208
+ - **message**: Adapt if needed for language context
209
+ - **metadata**: Add `original-rule` and `ported-from` fields
210
+
211
+ ### Step 3.4: Adapt Pattern Syntax
212
+
213
+ See [language-syntax-guide.md]({baseDir}/references/language-syntax-guide.md) for translation guidance.
214
+
215
+ ## Phase 4: Validation
216
+
217
+ ### Step 4.1: Validate YAML
218
+
219
+ ```bash
220
+ semgrep --validate --config python-sql-injection-golang.yaml
221
+ ```
222
+
223
+ Fix any syntax errors before proceeding.
224
+
225
+ ### Step 4.2: Run Tests
226
+
227
+ ```bash
228
+ semgrep --test --config python-sql-injection-golang.yaml python-sql-injection-golang.go
229
+ ```
230
+
231
+ ### Step 4.3: Check Results
232
+
233
+ **Success:**
234
+ ```
235
+ 1/1: ✓ All tests passed
236
+ ```
237
+
238
+ **Failure - missed lines:**
239
+ ```
240
+ ✗ python-sql-injection-golang
241
+ missed lines: [15, 22]
242
+ ```
243
+
244
+ Rule didn't match when it should. Check:
245
+ - Pattern too specific
246
+ - Missing pattern variant
247
+ - AST structure mismatch
248
+
249
+ **Failure - incorrect lines:**
250
+ ```
251
+ ✗ python-sql-injection-golang
252
+ incorrect lines: [30, 35]
253
+ ```
254
+
255
+ Rule matched when it shouldn't. Check:
256
+ - Pattern too broad
257
+ - Need pattern-not exclusion
258
+ - Sanitizer pattern missing
259
+
260
+ ### Step 4.4: Debug Taint Rules
261
+
262
+ If using taint mode and having issues:
263
+
264
+ ```bash
265
+ semgrep --dataflow-traces -f python-sql-injection-golang.yaml python-sql-injection-golang.go
266
+ ```
267
+
268
+ Shows:
269
+ - Where taint originates
270
+ - How taint propagates
271
+ - Where taint reaches sinks
272
+ - Why taint might not flow (sanitizers, breaks in flow)
273
+
274
+ ### Step 4.5: Iterate Until Pass
275
+
276
+ Repeat phases 2-4 as needed:
277
+ 1. Add test cases to cover edge cases
278
+ 2. Adjust patterns to match/exclude correctly
279
+ 3. Re-run tests
280
+ 4. Continue until "All tests passed"
281
+
282
+ ## Phase 5: Proceed to Next Language
283
+
284
+ Only after all tests pass for one language:
285
+ 1. Document completion
286
+ 2. Move to next target language
287
+ 3. Start fresh at Phase 1
288
+
289
+ ## Output Structure
290
+
291
+ After completing all target languages:
292
+
293
+ ```
294
+ python-sql-injection-golang/
295
+ ├── python-sql-injection-golang.yaml
296
+ └── python-sql-injection-golang.go
297
+
298
+ python-sql-injection-java/
299
+ ├── python-sql-injection-java.yaml
300
+ └── python-sql-injection-java.java
301
+
302
+ # If a language was NOT_APPLICABLE, no directory is created
303
+ # Document the reason in your response
304
+ ```
305
+
306
+ ## Troubleshooting
307
+
308
+ ### Pattern Not Matching
309
+
310
+ 1. **Dump AST**: `semgrep --dump-ast -l <lang> file`
311
+ 2. **Compare structure**: Your pattern vs actual AST
312
+ 3. **Check metavariables**: Correct binding?
313
+ 4. **Try broader pattern**: Then narrow down
314
+
315
+ ### Taint Not Propagating
316
+
317
+ 1. **Use --dataflow-traces**: See where taint stops
318
+ 2. **Check sanitizers**: Too broad?
319
+ 3. **Verify sources**: Pattern actually matching?
320
+ 4. **Check focus-metavariable**: On correct part of sink?
321
+
322
+ ### Too Many False Positives
323
+
324
+ 1. **Add pattern-not**: Exclude safe patterns
325
+ 2. **Add sanitizers**: Validation functions
326
+ 3. **Use pattern-inside**: Limit scope
327
+ 4. **Check safe test cases**: Are they actually safe?
328
+
329
+ ### YAML Syntax Errors
330
+
331
+ 1. **Run --validate**: Get specific error
332
+ 2. **Check indentation**: YAML is whitespace-sensitive
333
+ 3. **Quote strings**: If they contain special characters
334
+ 4. **Use multiline**: For complex patterns (`|` or `>-`)
335
+
336
+ ## Example: Complete Workflow
337
+
338
+ ### Original Rule
339
+
340
+ ```yaml
341
+ # python-command-injection.yaml
342
+ rules:
343
+ - id: python-command-injection
344
+ mode: taint
345
+ languages: [python]
346
+ severity: ERROR
347
+ message: Command injection vulnerability
348
+ pattern-sources:
349
+ - pattern: request.args.get(...)
350
+ pattern-sinks:
351
+ - pattern: os.system(...)
352
+ - pattern: subprocess.call($CMD, shell=True, ...)
353
+ pattern-sanitizers:
354
+ - pattern: shlex.quote(...)
355
+ ```
356
+
357
+ ### Target Languages: Go and Java
358
+
359
+ ---
360
+
361
+ ### Go Variant
362
+
363
+ **Phase 1: Applicability**
364
+ ```
365
+ TARGET: Go
366
+ VERDICT: APPLICABLE
367
+ REASONING: Command injection applies. Go's os/exec package can execute
368
+ commands. When user input is passed to exec.Command or wrapped in shell
369
+ execution, it's vulnerable.
370
+ ```
371
+
372
+ **Phase 2: Test File** (`python-command-injection-golang.go`)
373
+ ```go
374
+ package main
375
+
376
+ import (
377
+ "net/http"
378
+ "os/exec"
379
+ )
380
+
381
+ func vulnerable1(r *http.Request) {
382
+ cmd := r.URL.Query().Get("cmd")
383
+ // ruleid: python-command-injection-golang
384
+ exec.Command("bash", "-c", cmd).Run()
385
+ }
386
+
387
+ func vulnerable2(r *http.Request) {
388
+ input := r.FormValue("input")
389
+ // ruleid: python-command-injection-golang
390
+ exec.Command("sh", "-c", input).Run()
391
+ }
392
+
393
+ func safeNoShell(r *http.Request) {
394
+ arg := r.URL.Query().Get("arg")
395
+ // ok: python-command-injection-golang
396
+ exec.Command("echo", arg).Run()
397
+ }
398
+
399
+ func safeHardcoded() {
400
+ // ok: python-command-injection-golang
401
+ exec.Command("ls", "-la").Run()
402
+ }
403
+ ```
404
+
405
+ **Phase 3: Rule** (`python-command-injection-golang.yaml`)
406
+ ```yaml
407
+ rules:
408
+ - id: python-command-injection-golang
409
+ mode: taint
410
+ languages: [go]
411
+ severity: ERROR
412
+ message: Command injection via shell execution
413
+ metadata:
414
+ original-rule: python-command-injection
415
+ ported-from: python
416
+ pattern-sources:
417
+ - pattern: $R.URL.Query().Get(...)
418
+ - pattern: $R.FormValue(...)
419
+ pattern-sinks:
420
+ - patterns:
421
+ - pattern: exec.Command("bash", "-c", $CMD, ...)
422
+ - focus-metavariable: $CMD
423
+ - patterns:
424
+ - pattern: exec.Command("sh", "-c", $CMD, ...)
425
+ - focus-metavariable: $CMD
426
+ ```
427
+
428
+ **Phase 4: Validate**
429
+ ```bash
430
+ semgrep --validate --config python-command-injection-golang.yaml
431
+ semgrep --test --config python-command-injection-golang.yaml python-command-injection-golang.go
432
+ # Output: ✓ All tests passed
433
+ ```
434
+
435
+ ---
436
+
437
+ ### Java Variant
438
+
439
+ **Phase 1: Applicability**
440
+ ```
441
+ TARGET: Java
442
+ VERDICT: APPLICABLE
443
+ REASONING: Command injection applies. Java's Runtime.exec() and
444
+ ProcessBuilder can execute commands. User input passed directly is vulnerable.
445
+ ```
446
+
447
+ **Phase 2: Test File** (`python-command-injection-java.java`)
448
+ ```java
449
+ import javax.servlet.http.*;
450
+ import java.io.*;
451
+
452
+ public class CommandTest {
453
+ // ruleid: python-command-injection-java
454
+ public void vulnerable1(HttpServletRequest request) throws Exception {
455
+ String cmd = request.getParameter("cmd");
456
+ Runtime.getRuntime().exec(cmd);
457
+ }
458
+
459
+ // ruleid: python-command-injection-java
460
+ public void vulnerable2(HttpServletRequest request) throws Exception {
461
+ String cmd = request.getParameter("cmd");
462
+ new ProcessBuilder(cmd).start();
463
+ }
464
+
465
+ // ok: python-command-injection-java
466
+ public void safeHardcoded() throws Exception {
467
+ Runtime.getRuntime().exec("ls -la");
468
+ }
469
+
470
+ // ok: python-command-injection-java
471
+ public void safeArray(HttpServletRequest request) throws Exception {
472
+ String arg = request.getParameter("arg");
473
+ Runtime.getRuntime().exec(new String[]{"echo", arg});
474
+ }
475
+ }
476
+ ```
477
+
478
+ **Phase 3: Rule** (`python-command-injection-java.yaml`)
479
+ ```yaml
480
+ rules:
481
+ - id: python-command-injection-java
482
+ mode: taint
483
+ languages: [java]
484
+ severity: ERROR
485
+ message: Command injection vulnerability
486
+ metadata:
487
+ original-rule: python-command-injection
488
+ ported-from: python
489
+ pattern-sources:
490
+ - pattern: (HttpServletRequest $REQ).getParameter(...)
491
+ pattern-sinks:
492
+ - pattern: Runtime.getRuntime().exec($CMD)
493
+ focus-metavariable: $CMD
494
+ - patterns:
495
+ - pattern: new ProcessBuilder($CMD, ...).start()
496
+ - focus-metavariable: $CMD
497
+ ```
498
+
499
+ **Phase 4: Validate**
500
+ ```bash
501
+ semgrep --validate --config python-command-injection-java.yaml
502
+ semgrep --test --config python-command-injection-java.yaml python-command-injection-java.java
503
+ # Output: ✓ All tests passed
504
+ ```
505
+
506
+ ---
507
+
508
+ ### Final Output
509
+
510
+ ```
511
+ python-command-injection-golang/
512
+ ├── python-command-injection-golang.yaml
513
+ └── python-command-injection-golang.go
514
+
515
+ python-command-injection-java/
516
+ ├── python-command-injection-java.yaml
517
+ └── python-command-injection-java.java
518
+ ```
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: session-logs
3
+ description: Search and analyze your own session logs (older/parent conversations) using jq.
4
+ metadata: { "otto": { "emoji": "📜", "requires": { "bins": ["jq", "rg"] } } }
5
+ ---
6
+
7
+ # session-logs
8
+
9
+ Search your complete conversation history stored in session JSONL files. Use this when a user references older/parent conversations or asks what was said before.
10
+
11
+ ## Trigger
12
+
13
+ Use this skill when the user asks about prior chats, parent conversations, or historical context that isn't in memory files.
14
+
15
+ ## Location
16
+
17
+ Session logs live at: `~/.otto/agents/<agentId>/sessions/` (use the `agent=<id>` value from the system prompt Runtime line).
18
+
19
+ - **`sessions.json`** - Index mapping session keys to session IDs
20
+ - **`<session-id>.jsonl`** - Full conversation transcript per session
21
+
22
+ ## Structure
23
+
24
+ Each `.jsonl` file contains messages with:
25
+
26
+ - `type`: "session" (metadata) or "message"
27
+ - `timestamp`: ISO timestamp
28
+ - `message.role`: "user", "assistant", or "toolResult"
29
+ - `message.content[]`: Text, thinking, or tool calls (filter `type=="text"` for human-readable content)
30
+ - `message.usage.cost.total`: Cost per response
31
+
32
+ ## Common Queries
33
+
34
+ ### List all sessions by date and size
35
+
36
+ ```bash
37
+ for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
38
+ date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
39
+ size=$(ls -lh "$f" | awk '{print $5}')
40
+ echo "$date $size $(basename $f)"
41
+ done | sort -r
42
+ ```
43
+
44
+ ### Find sessions from a specific day
45
+
46
+ ```bash
47
+ for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
48
+ head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
49
+ done
50
+ ```
51
+
52
+ ### Extract user messages from a session
53
+
54
+ ```bash
55
+ jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl
56
+ ```
57
+
58
+ ### Search for keyword in assistant responses
59
+
60
+ ```bash
61
+ jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"
62
+ ```
63
+
64
+ ### Get total cost for a session
65
+
66
+ ```bash
67
+ jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl
68
+ ```
69
+
70
+ ### Daily cost summary
71
+
72
+ ```bash
73
+ for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
74
+ date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
75
+ cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f")
76
+ echo "$date $cost"
77
+ done | awk '{a[$1]+=$2} END {for(d in a) print d, "$"a[d]}' | sort -r
78
+ ```
79
+
80
+ ### Count messages and tokens in a session
81
+
82
+ ```bash
83
+ jq -s '{
84
+ messages: length,
85
+ user: [.[] | select(.message.role == "user")] | length,
86
+ assistant: [.[] | select(.message.role == "assistant")] | length,
87
+ first: .[0].timestamp,
88
+ last: .[-1].timestamp
89
+ }' <session>.jsonl
90
+ ```
91
+
92
+ ### Tool usage breakdown
93
+
94
+ ```bash
95
+ jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn
96
+ ```
97
+
98
+ ### Search across ALL sessions for a phrase
99
+
100
+ ```bash
101
+ rg -l "phrase" ~/.otto/agents/<agentId>/sessions/*.jsonl
102
+ ```
103
+
104
+ ## Tips
105
+
106
+ - Sessions are append-only JSONL (one JSON object per line)
107
+ - Large sessions can be several MB - use `head`/`tail` for sampling
108
+ - The `sessions.json` index maps chat providers (discord, whatsapp, etc.) to session IDs
109
+ - Deleted sessions have `.deleted.<timestamp>` suffix
110
+
111
+ ## Fast text-only hint (low noise)
112
+
113
+ ```bash
114
+ jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.otto/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'
115
+ ```
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "sharp-edges",
3
+ "version": "1.0.0",
4
+ "description": "Identify error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes",
5
+ "author": {
6
+ "name": "Trail of Bits",
7
+ "email": "opensource@trailofbits.com",
8
+ "url": "https://github.com/trailofbits"
9
+ }
10
+ }
@@ -0,0 +1,48 @@
1
+ # Sharp Edges
2
+
3
+ Identifies error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes through developer confusion, laziness, or malice.
4
+
5
+ ## When to Use
6
+
7
+ - Reviewing API designs for security-relevant interfaces
8
+ - Auditing configuration schemas that expose security choices
9
+ - Evaluating cryptographic library ergonomics
10
+ - Assessing authentication/authorization APIs
11
+ - Any code review where developers make security-critical decisions
12
+
13
+ ## What It Does
14
+
15
+ Analyzes code and designs through the lens of three adversaries:
16
+
17
+ 1. **The Scoundrel**: Can a malicious developer or attacker disable security via configuration?
18
+ 2. **The Lazy Developer**: Will copy-pasting the first example lead to insecure code?
19
+ 3. **The Confused Developer**: Can parameters be swapped without type errors?
20
+
21
+ ## Core Principle
22
+
23
+ **The pit of success**: Secure usage should be the path of least resistance. If developers must read documentation carefully or remember special rules to avoid vulnerabilities, the API has failed.
24
+
25
+ ## Installation
26
+
27
+ ```
28
+ /plugin install trailofbits/skills/plugins/sharp-edges
29
+ ```
30
+
31
+ ## Sharp Edge Categories
32
+
33
+ The skill identifies six categories of misuse-prone designs:
34
+
35
+ | Category | Example |
36
+ |----------|---------|
37
+ | Algorithm Selection | JWT `alg: none` attack; PHP `hash("crc32", $password)` |
38
+ | Dangerous Defaults | `session_timeout: 0` meaning infinite; empty password accepted |
39
+ | Primitive vs. Semantic APIs | `encrypt(msg, bytes, bytes)` where key/nonce can be swapped |
40
+ | Configuration Cliffs | `verify_ssl: false` disables all certificate validation |
41
+ | Silent Failures | Verification returns `False` instead of throwing; ignored return values |
42
+ | Stringly-Typed Security | Permissions as comma-separated strings; SQL from concatenation |
43
+
44
+ ## Related Skills
45
+
46
+ - [constant-time-analysis](../constant-time-analysis) - Detect timing side-channels in cryptographic code
47
+ - [differential-review](../differential-review) - Security-focused code change review
48
+ - [audit-context-building](../audit-context-building) - Deep architectural analysis before auditing