@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,645 @@
1
+ ---
2
+ name: yara-rule-authoring
3
+ description: >
4
+ Guides authoring of high-quality YARA-X detection rules for malware identification.
5
+ Use when writing, reviewing, or optimizing YARA rules. Covers naming conventions,
6
+ string selection, performance optimization, migration from legacy YARA, and false
7
+ positive reduction. Triggers on: YARA, YARA-X, malware detection, threat hunting,
8
+ IOC, signature, crx module, dex module.
9
+ ---
10
+
11
+ # YARA-X Rule Authoring
12
+
13
+ Write detection rules that catch malware without drowning in false positives.
14
+
15
+ > **This skill targets YARA-X**, the Rust-based successor to legacy YARA. YARA-X powers VirusTotal's production systems and is the recommended implementation. See [Migrating from Legacy YARA](#migrating-from-legacy-yara) if you have existing rules.
16
+
17
+ ## Core Principles
18
+
19
+ 1. **Strings must generate good atoms** — YARA extracts 4-byte subsequences for fast matching. Strings with repeated bytes, common sequences, or under 4 bytes force slow bytecode verification on too many files.
20
+
21
+ 2. **Target specific families, not categories** — "Detects ransomware" catches everything and nothing. "Detects LockBit 3.0 configuration extraction routine" catches what you want.
22
+
23
+ 3. **Test against goodware before deployment** — A rule that fires on Windows system files is useless. Validate against VirusTotal's goodware corpus or your own clean file set.
24
+
25
+ 4. **Short-circuit with cheap checks first** — Put `filesize < 10MB and uint16(0) == 0x5A4D` before expensive string searches or module calls.
26
+
27
+ 5. **Metadata is documentation** — Future you (and your team) need to know what this catches, why, and where the sample came from.
28
+
29
+ ## When to Use
30
+
31
+ - Writing new YARA-X rules for malware detection
32
+ - Reviewing existing rules for quality or performance issues
33
+ - Optimizing slow-running rulesets
34
+ - Converting IOCs or threat intel into detection signatures
35
+ - Debugging false positive issues
36
+ - Preparing rules for production deployment
37
+ - Migrating legacy YARA rules to YARA-X
38
+ - Analyzing Chrome extensions (crx module)
39
+ - Analyzing Android apps (dex module)
40
+
41
+ ## When NOT to Use
42
+
43
+ - Static analysis requiring disassembly → use Ghidra/IDA skills
44
+ - Dynamic malware analysis → use sandbox analysis skills
45
+ - Network-based detection → use Suricata/Snort skills
46
+ - Memory forensics with Volatility → use memory forensics skills
47
+ - Simple hash-based detection → just use hash lists
48
+
49
+ ## YARA-X Overview
50
+
51
+ YARA-X is the Rust-based successor to legacy YARA: 5-10x faster regex, better errors, built-in formatter, stricter validation, new modules (crx, dex), 99% rule compatibility.
52
+
53
+ **Install:** `brew install yara-x` (macOS) or `cargo install yara-x`
54
+
55
+ **Essential commands:** `yr scan`, `yr check`, `yr fmt`, `yr dump`
56
+
57
+ ## Platform Considerations
58
+
59
+ YARA works on any file type. Adapt patterns to your target:
60
+
61
+ | Platform | Magic Bytes | Bad Strings | Good Strings |
62
+ |----------|-------------|-------------|--------------|
63
+ | **Windows PE** | `uint16(0) == 0x5A4D` | API names, Windows paths | Mutex names, PDB paths |
64
+ | **macOS Mach-O** | `uint32(0) == 0xFEEDFACE` (32-bit), `0xFEEDFACF` (64-bit), `0xCAFEBABE` (universal) | Common Obj-C methods | Keylogger strings, persistence paths |
65
+ | **JavaScript/Node** | (none needed) | `require`, `fetch`, `axios` | Obfuscator signatures, eval+decode chains |
66
+ | **npm/pip packages** | (none needed) | `postinstall`, `dependencies` | Suspicious package names, exfil URLs |
67
+ | **Office docs** | `uint32(0) == 0x504B0304` | VBA keywords | Macro auto-exec, encoded payloads |
68
+ | **VS Code extensions** | (none needed) | `vscode.workspace` | Uncommon activationEvents, hidden file access |
69
+ | **Chrome extensions** | Use `crx` module | Common Chrome APIs | Permission abuse, manifest anomalies |
70
+ | **Android apps** | Use `dex` module | Standard DEX structure | Obfuscated classes, suspicious permissions |
71
+
72
+ ### macOS Malware Detection
73
+
74
+ No dedicated Mach-O module exists yet. Use magic byte checks + string patterns:
75
+
76
+ **Magic bytes:**
77
+ ```yara
78
+ // Mach-O 32-bit
79
+ uint32(0) == 0xFEEDFACE
80
+ // Mach-O 64-bit
81
+ uint32(0) == 0xFEEDFACF
82
+ // Universal binary (fat binary)
83
+ uint32(0) == 0xCAFEBABE or uint32(0) == 0xBEBAFECA
84
+ ```
85
+
86
+ **Good indicators for macOS malware:**
87
+ - Keylogger artifacts: `CGEventTapCreate`, `kCGEventKeyDown`
88
+ - SSH tunnel strings: `ssh -D`, `tunnel`, `socks`
89
+ - Persistence paths: `~/Library/LaunchAgents`, `/Library/LaunchDaemons`
90
+ - Credential theft: `security find-generic-password`, `keychain`
91
+
92
+ **Example pattern from Airbnb BinaryAlert:**
93
+ ```yara
94
+ rule SUSP_Mac_ProtonRAT
95
+ {
96
+ strings:
97
+ // Library indicators
98
+ $lib1 = "SRWebSocket" ascii
99
+ $lib2 = "SocketRocket" ascii
100
+
101
+ // Behavioral indicators
102
+ $behav1 = "SSH tunnel not launched" ascii
103
+ $behav2 = "Keylogger" ascii
104
+
105
+ condition:
106
+ (uint32(0) == 0xFEEDFACF or uint32(0) == 0xCAFEBABE) and
107
+ any of ($lib*) and any of ($behav*)
108
+ }
109
+ ```
110
+
111
+ ### JavaScript Detection Decision Tree
112
+
113
+ ```
114
+ Writing a JavaScript rule?
115
+ ├─ npm package?
116
+ │ ├─ Check package.json patterns
117
+ │ ├─ Look for postinstall/preinstall hooks
118
+ │ └─ Target exfil patterns: fetch + env access + credential paths
119
+ ├─ Browser extension?
120
+ │ ├─ Chrome: Use crx module
121
+ │ └─ Others: Target manifest patterns, background script behaviors
122
+ ├─ Standalone JS file?
123
+ │ ├─ Look for obfuscation markers: eval+atob, fromCharCode chains
124
+ │ ├─ Target unique function/variable names (often survive minification)
125
+ │ └─ Check for packed/encoded payloads
126
+ └─ Minified/webpack bundle?
127
+ ├─ Target unique strings that survive bundling (URLs, magic values)
128
+ └─ Avoid function names (will be mangled)
129
+ ```
130
+
131
+ **JavaScript-specific good strings:**
132
+ - Ethereum function selectors: `{ 70 a0 82 31 }` (transfer)
133
+ - Zero-width characters (steganography): `{ E2 80 8B E2 80 8C }`
134
+ - Obfuscator signatures: `_0x`, `var _0x`
135
+ - Specific C2 patterns: domain names, webhook URLs
136
+
137
+ **JavaScript-specific bad strings:**
138
+ - `require`, `fetch`, `axios` — too common
139
+ - `Buffer`, `crypto` — legitimate uses everywhere
140
+ - `process.env` alone — need specific env var names
141
+
142
+ ## Essential Toolkit
143
+
144
+ | Tool | Purpose |
145
+ |------|---------|
146
+ | **yarGen** | Extract candidate strings: `yarGen.py -m samples/ --excludegood` → validate with `yr check` |
147
+ | **FLOSS** | Extract obfuscated/stack strings: `floss sample.exe` (when yarGen fails) |
148
+ | **yr CLI** | Validate: `yr check`, scan: `yr scan -s`, inspect: `yr dump -m pe` |
149
+ | **signature-base** | Study quality examples |
150
+ | **YARA-CI** | Goodware corpus testing before deployment |
151
+
152
+ Master these five. Don't get distracted by tool catalogs.
153
+
154
+ ## Rationalizations to Reject
155
+
156
+ When you catch yourself thinking these, stop and reconsider.
157
+
158
+ | Rationalization | Expert Response |
159
+ |-----------------|-----------------|
160
+ | "This generic string is unique enough" | Test against goodware first. Your intuition is wrong. |
161
+ | "yarGen gave me these strings" | yarGen suggests, you validate. Check each one manually. |
162
+ | "It works on my 10 samples" | 10 samples ≠ production. Use VirusTotal goodware corpus. |
163
+ | "One rule to catch all variants" | Causes FP floods. Target specific families. |
164
+ | "I'll make it more specific if we get FPs" | Write tight rules upfront. FPs burn trust. |
165
+ | "This hex pattern is unique" | Unique in one sample ≠ unique across malware ecosystem. |
166
+ | "Performance doesn't matter" | One slow rule slows entire ruleset. Optimize atoms. |
167
+ | "PEiD rules still work" | Obsolete. 32-bit packers aren't relevant. |
168
+ | "I'll add more conditions later" | Weak rules deployed = damage done. |
169
+ | "This is just for hunting" | Hunting rules become detection rules. Same quality bar. |
170
+ | "The API name makes it malicious" | Legitimate software uses same APIs. Need behavioral context. |
171
+ | "any of them is fine for these common strings" | Common strings + any = FP flood. Use `any of` only for individually unique strings. |
172
+ | "This regex is specific enough" | `/fetch.*token/` matches all auth code. Add exfil destination requirement. |
173
+ | "The JavaScript looks clean" | Attackers poison legitimate code with injects. Check for eval+decode chains. |
174
+ | "I'll use .* for flexibility" | Unbounded regex = performance disaster + memory explosion. Use `.{0,30}`. |
175
+ | "I'll use --relaxed-re-syntax everywhere" | Masks real bugs. Fix the regex instead of hiding problems. |
176
+
177
+ ## Decision Trees
178
+
179
+ ### Is This String Good Enough?
180
+
181
+ ```
182
+ Is this string good enough?
183
+ ├─ Less than 4 bytes?
184
+ │ └─ NO — find longer string
185
+ ├─ Contains repeated bytes (0000, 9090)?
186
+ │ └─ NO — add surrounding context
187
+ ├─ Is an API name (VirtualAlloc, CreateRemoteThread)?
188
+ │ └─ NO — use hex pattern of call site instead
189
+ ├─ Appears in Windows system files?
190
+ │ └─ NO — too generic, find something unique
191
+ ├─ Is it a common path (C:\Windows\, cmd.exe)?
192
+ │ └─ NO — find malware-specific paths
193
+ ├─ Unique to this malware family?
194
+ │ └─ YES — use it
195
+ └─ Appears in other malware too?
196
+ └─ MAYBE — combine with family-specific marker
197
+ ```
198
+
199
+ ### When to Use "all of" vs "any of"
200
+
201
+ ```
202
+ Should I require all strings or allow any?
203
+ ├─ Strings are individually unique to malware?
204
+ │ └─ any of them (each alone is suspicious)
205
+ ├─ Strings are common but combination is suspicious?
206
+ │ └─ all of them (require the full pattern)
207
+ ├─ Strings have different confidence levels?
208
+ │ └─ Group: all of ($core_*) and any of ($variant_*)
209
+ └─ Seeing many false positives?
210
+ └─ Tighten: switch any → all, add more required strings
211
+ ```
212
+
213
+ **Lesson from production:** Rules using `any of ($network_*)` where strings included "fetch", "axios", "http" matched virtually all web applications. Switching to require credential path AND network call AND exfil destination eliminated FPs.
214
+
215
+ ### When to Abandon a Rule Approach
216
+
217
+ Stop and pivot when:
218
+
219
+ - **yarGen returns only API names and paths** → See [When Strings Fail, Pivot to Structure](#when-strings-fail-pivot-to-structure)
220
+
221
+ - **Can't find 3 unique strings** → Probably packed. Target the unpacked version or detect the packer.
222
+
223
+ - **Rule matches goodware files** → Strings aren't unique enough. 1-2 matches = investigate and tighten; 3-5 matches = find different indicators; 6+ matches = start over.
224
+
225
+ - **Performance is terrible even after optimization** → Architecture problem. Split into multiple focused rules or add strict pre-filters.
226
+
227
+ - **Description is hard to write** → The rule is too vague. If you can't explain what it catches, it catches too much.
228
+
229
+ ### Debugging False Positives
230
+
231
+ ```
232
+ FP Investigation Flow:
233
+
234
+ ├─ 1. Which string matched?
235
+ │ Run: yr scan -s rule.yar false_positive.exe
236
+
237
+ ├─ 2. Is it in a legitimate library?
238
+ │ └─ Add: not $fp_vendor_string exclusion
239
+
240
+ ├─ 3. Is it a common development pattern?
241
+ │ └─ Find more specific indicator, replace the string
242
+
243
+ ├─ 4. Are multiple generic strings matching together?
244
+ │ └─ Tighten to require all + add unique marker
245
+
246
+ └─ 5. Is the malware using common techniques?
247
+ └─ Target malware-specific implementation details, not the technique
248
+ ```
249
+
250
+ ### Hex vs Text vs Regex
251
+
252
+ ```
253
+ What string type should I use?
254
+
255
+ ├─ Exact ASCII/Unicode text?
256
+ │ └─ TEXT: $s = "MutexName" ascii wide
257
+
258
+ ├─ Specific byte sequence?
259
+ │ └─ HEX: $h = { 4D 5A 90 00 }
260
+
261
+ ├─ Byte sequence with variation?
262
+ │ └─ HEX with wildcards: { 4D 5A ?? ?? 50 45 }
263
+
264
+ ├─ Pattern with structure (URLs, paths)?
265
+ │ └─ BOUNDED REGEX: /https:\/\/[a-z]{5,20}\.onion/
266
+
267
+ └─ Unknown encoding (XOR, base64)?
268
+ └─ TEXT with modifier: $s = "config" xor(0x00-0xFF)
269
+ ```
270
+
271
+ ### Is the Sample Packed? (Check First)
272
+
273
+ Before writing any string-based rule:
274
+
275
+ ```
276
+ Is the sample packed?
277
+ ├─ Entropy > 7.0?
278
+ │ └─ Likely packed — find unpacked layer first
279
+ ├─ Few/no readable strings?
280
+ │ └─ Likely packed — use entropy, PE structure, or packer signatures
281
+ ├─ UPX/MPRESS/custom packer detected?
282
+ │ └─ Target the unpacked payload OR detect the packer itself
283
+ └─ Readable strings available?
284
+ └─ Proceed with string-based detection
285
+ ```
286
+
287
+ **Expert guidance:** Don't write rules against packed layers. The packing changes; the payload doesn't.
288
+
289
+ ### When Strings Fail, Pivot to Structure
290
+
291
+ If yarGen returns only API names and generic paths:
292
+
293
+ ```
294
+ String extraction failed — what now?
295
+ ├─ High entropy sections?
296
+ │ └─ Use math.entropy() on specific sections
297
+ ├─ Unusual imports pattern?
298
+ │ └─ Use pe.imphash() for import hash clustering
299
+ ├─ Consistent PE structure anomalies?
300
+ │ └─ Target section names, sizes, characteristics
301
+ ├─ Metadata present?
302
+ │ └─ Target version info, timestamps, resources
303
+ └─ Nothing unique?
304
+ └─ This sample may not be detectable with YARA alone
305
+ ```
306
+
307
+ **Expert guidance:** "One can try to use other file properties, such as metadata, entropy, import hashes or other data which stays constant." — Kaspersky Applied YARA Training
308
+
309
+ ## Expert Heuristics
310
+
311
+ **String selection:** Mutex names are gold; C2 paths silver; error messages bronze. Stack strings are almost always unique. If you need >6 strings, you're over-fitting.
312
+
313
+ **Condition design:** Start with `filesize <`, then magic bytes, then strings, then modules. If >5 lines, split into multiple rules.
314
+
315
+ **Quality signals:** yarGen output needs 80% filtering. Rules matching <50% of variants are too narrow; matching goodware are too broad.
316
+
317
+ **Modifier discipline:**
318
+ - **Never use `nocase` or `wide` speculatively** — only when you have confirmed evidence the case/encoding varies in samples
319
+ - `nocase` doubles atom generation; `wide` doubles string matching — both have real costs
320
+ - "If you don't have a clear reason for using those modifiers, don't do it" — Kaspersky Applied YARA
321
+
322
+ **Regex anchoring:**
323
+ - Regex without a 4+ byte literal substring **evaluates at every file offset** — catastrophic performance
324
+ - Always anchor regex to a distinctive literal: `/mshta\.exe http:\/\/.../` not `/http:\/\/.../`
325
+ - If you can't anchor, consider hex pattern with wildcards instead
326
+
327
+ **Loop discipline:**
328
+ - Always bound loops with filesize: `filesize < 100KB and for all i in (1..#a) : ...`
329
+ - Unbounded `#a` can be thousands in large files — exponential slowdown
330
+
331
+ **YARA-X tips:** `$_unused` to suppress warnings; `private $s` to hide from output; `yr check` + `yr fmt` before every commit.
332
+
333
+ ### When to Use Modules vs. Byte Checks
334
+
335
+ ```
336
+ Should I use a module or raw bytes?
337
+ ├─ Need imphash/rich header/authenticode?
338
+ │ └─ Use PE module — too complex to replicate
339
+ ├─ Just checking magic bytes or simple offsets?
340
+ │ └─ Use uint16/uint32 — faster, no module overhead
341
+ ├─ Checking section names/sizes?
342
+ │ └─ PE module is cleaner, but add magic bytes filter FIRST
343
+ ├─ Checking Chrome extension permissions?
344
+ │ └─ Use crx module — string parsing is fragile
345
+ └─ Checking LNK target paths?
346
+ └─ Use lnk module — LNK format is complex
347
+ ```
348
+
349
+ **Expert guidance:** "Avoid the magic module — use explicit hex checks instead" — Neo23x0. Apply this principle: if you can do it with uint32(), don't load a module.
350
+
351
+ ## YARA-X New Features
352
+
353
+ Key additions from recent releases:
354
+
355
+ - **Private patterns** (v1.3.0+): `private $helper = "pattern"` — matches but hidden from output
356
+ - **Warning suppression** (v1.4.0+): `// suppress: slow_pattern` inline comments
357
+ - **Numeric underscores** (v1.5.0+): `filesize < 10_000_000` for readability
358
+ - **Built-in formatter**: `yr fmt rules/` to standardize formatting
359
+ - **NDJSON output**: `yr scan --output-format ndjson` for tooling
360
+
361
+ ## YARA-X Tooling Workflow
362
+
363
+ YARA-X provides diagnostic tools legacy YARA lacks:
364
+
365
+ **Rule development cycle:**
366
+ ```bash
367
+ # 1. Write initial rule
368
+ # 2. Check syntax with detailed errors
369
+ yr check rule.yar
370
+
371
+ # 3. Format consistently
372
+ yr fmt -w rule.yar
373
+
374
+ # 4. Dump module output to inspect file structure (no dummy rule needed)
375
+ yr dump -m pe sample.exe --output-format yaml
376
+
377
+ # 5. Scan with timing info
378
+ time yr scan -s rule.yar corpus/
379
+ ```
380
+
381
+ **When to use `yr dump`:**
382
+ - Investigating what PE/ELF/Mach-O fields are available
383
+ - Debugging why module conditions aren't matching
384
+ - Exploring new modules (crx, lnk, dotnet) before writing rules
385
+
386
+ **YARA-X diagnostic advantage:** Error messages include precise source locations. If `yr check` points to line 15, the issue is actually on line 15 (unlike legacy YARA).
387
+
388
+ ## Chrome Extension Analysis (crx module)
389
+
390
+ The `crx` module enables detection of malicious Chrome extensions. Requires YARA-X v1.5.0+ (basic), v1.11.0+ for `permhash()`.
391
+
392
+ **Key APIs:** `crx.is_crx`, `crx.permissions`, `crx.permhash()`
393
+
394
+ **Red flags:** `nativeMessaging` + `downloads`, `debugger` permission, content scripts on `<all_urls>`
395
+
396
+ ```yara
397
+ import "crx"
398
+
399
+ rule SUSP_CRX_HighRiskPerms {
400
+ condition:
401
+ crx.is_crx and
402
+ for any perm in crx.permissions : (perm == "debugger")
403
+ }
404
+ ```
405
+
406
+ See [crx-module.md](references/crx-module.md) for complete API reference, permission risk assessment, and example rules.
407
+
408
+ ## Android DEX Analysis (dex module)
409
+
410
+ The `dex` module enables detection of Android malware. Requires YARA-X v1.11.0+. **Not compatible with legacy YARA's dex module** — API is completely different.
411
+
412
+ **Key APIs:** `dex.is_dex`, `dex.contains_class()`, `dex.contains_method()`, `dex.contains_string()`
413
+
414
+ **Red flags:** Single-letter class names (obfuscation), `DexClassLoader` reflection, encrypted assets
415
+
416
+ ```yara
417
+ import "dex"
418
+
419
+ rule SUSP_DEX_DynamicLoading {
420
+ condition:
421
+ dex.is_dex and
422
+ dex.contains_class("Ldalvik/system/DexClassLoader;")
423
+ }
424
+ ```
425
+
426
+ See [dex-module.md](references/dex-module.md) for complete API reference, obfuscation detection, and example rules.
427
+
428
+ ## Migrating from Legacy YARA
429
+
430
+ YARA-X has 99% rule compatibility, but enforces stricter validation.
431
+
432
+ **Quick migration:**
433
+ ```bash
434
+ yr check --relaxed-re-syntax rules/ # Identify issues
435
+ # Fix each issue, then:
436
+ yr check rules/ # Verify without relaxed mode
437
+ ```
438
+
439
+ **Common fixes:**
440
+ | Issue | Legacy | YARA-X Fix |
441
+ |-------|--------|------------|
442
+ | Literal `{` in regex | `/{/` | `/\{/` |
443
+ | Invalid escapes | `\R` silently literal | `\\R` or `R` |
444
+ | Base64 strings | Any length | 3+ chars required |
445
+ | Negative indexing | `@a[-1]` | `@a[#a - 1]` |
446
+ | Duplicate modifiers | Allowed | Remove duplicates |
447
+
448
+ > **Note:** Use `--relaxed-re-syntax` only as a diagnostic tool. Fix issues rather than relying on relaxed mode.
449
+
450
+ ## Quick Reference
451
+
452
+ ### Naming Convention
453
+
454
+ ```
455
+ {CATEGORY}_{PLATFORM}_{FAMILY}_{VARIANT}_{DATE}
456
+ ```
457
+
458
+ **Common prefixes:** `MAL_` (malware), `HKTL_` (hacking tool), `WEBSHELL_`, `EXPL_`, `SUSP_` (suspicious), `GEN_` (generic)
459
+
460
+ **Platforms:** `Win_`, `Lnx_`, `Mac_`, `Android_`, `CRX_`
461
+
462
+ **Example:** `MAL_Win_Emotet_Loader_Jan25`
463
+
464
+ See [style-guide.md](references/style-guide.md) for full conventions, metadata requirements, and naming examples.
465
+
466
+ ### Required Metadata
467
+
468
+ Every rule needs: `description` (starts with "Detects"), `author`, `reference`, `date`.
469
+
470
+ ```yara
471
+ meta:
472
+ description = "Detects Example malware via unique mutex and C2 path"
473
+ author = "Your Name <email@example.com>"
474
+ reference = "https://example.com/analysis"
475
+ date = "2025-01-29"
476
+ ```
477
+
478
+ ### String Selection
479
+
480
+ **Good:** Mutex names, PDB paths, C2 paths, stack strings, configuration markers
481
+ **Bad:** API names, common executables, format specifiers, generic paths
482
+
483
+ See [strings.md](references/strings.md) for the full decision tree and examples.
484
+
485
+ ### Condition Patterns
486
+
487
+ **Order conditions for short-circuit:**
488
+ 1. `filesize < 10MB` (instant)
489
+ 2. `uint16(0) == 0x5A4D` (nearly instant)
490
+ 3. String matches (cheap)
491
+ 4. Module checks (expensive)
492
+
493
+ See [performance.md](references/performance.md) for detailed optimization patterns.
494
+
495
+ ## Workflow
496
+
497
+ 1. **Gather samples** — Multiple samples; single-sample rules are brittle
498
+ 2. **Extract candidates** — `yarGen -m samples/ --excludegood`
499
+ 3. **Validate quality** — Use decision tree; yarGen needs 80% filtering
500
+ 4. **Write initial rule** — Follow template with proper metadata
501
+ 5. **Lint and test** — `yr check`, `yr fmt`, linter script
502
+ 6. **Goodware validation** — VirusTotal corpus or local clean files
503
+ 7. **Deploy** — Add to repo with full metadata, monitor for FPs
504
+
505
+ See [testing.md](references/testing.md) for detailed validation workflow and FP investigation.
506
+
507
+ For a comprehensive step-by-step guide covering all phases from sample collection to deployment, see [rule-development.md](workflows/rule-development.md).
508
+
509
+ ## Common Mistakes
510
+
511
+ | Mistake | Bad | Good |
512
+ |---------|-----|------|
513
+ | API names as indicators | `"VirtualAlloc"` | Hex pattern of call site + unique mutex |
514
+ | Unbounded regex | `/https?:\/\/.*/` | `/https?:\/\/[a-z0-9]{8,12}\.onion/` |
515
+ | Missing file type filter | `pe.imports(...)` first | `uint16(0) == 0x5A4D and filesize < 10MB` first |
516
+ | Short strings | `"abc"` (3 bytes) | `"abcdef"` (4+ bytes) |
517
+ | Unescaped braces (YARA-X) | `/config{key}/` | `/config\{key\}/` |
518
+
519
+ ## Performance Optimization
520
+
521
+ **Quick wins:** Put `filesize` first, avoid `nocase`, bounded regex `{1,100}`, prefer hex over regex.
522
+
523
+ **Red flags:** Strings <4 bytes, unbounded regex (`.*`), modules without file-type filter.
524
+
525
+ See [performance.md](references/performance.md) for atom theory and optimization details.
526
+
527
+ ## Reference Documents
528
+
529
+ | Topic | Document |
530
+ |-------|----------|
531
+ | Naming and metadata conventions | [style-guide.md](references/style-guide.md) |
532
+ | Performance and atom optimization | [performance.md](references/performance.md) |
533
+ | String types and judgment | [strings.md](references/strings.md) |
534
+ | Testing and validation | [testing.md](references/testing.md) |
535
+ | Chrome extension module (crx) | [crx-module.md](references/crx-module.md) |
536
+ | Android DEX module (dex) | [dex-module.md](references/dex-module.md) |
537
+
538
+ ## Workflows
539
+
540
+ | Topic | Document |
541
+ |-------|----------|
542
+ | Complete rule development process | [rule-development.md](workflows/rule-development.md) |
543
+
544
+ ## Example Rules
545
+
546
+ The `examples/` directory contains real, attributed rules demonstrating best practices:
547
+
548
+ | Example | Demonstrates | Source |
549
+ |---------|--------------|--------|
550
+ | [MAL_Win_Remcos_Jan25.yar](examples/MAL_Win_Remcos_Jan25.yar) | PE malware: graduated string counts, multiple rules per family | Elastic Security |
551
+ | [MAL_Mac_ProtonRAT_Jan25.yar](examples/MAL_Mac_ProtonRAT_Jan25.yar) | macOS: Mach-O magic bytes, multi-category grouping | Airbnb BinaryAlert |
552
+ | [MAL_NPM_SupplyChain_Jan25.yar](examples/MAL_NPM_SupplyChain_Jan25.yar) | npm supply chain: real attack patterns, ERC-20 selectors | Stairwell Research |
553
+ | [SUSP_JS_Obfuscation_Jan25.yar](examples/SUSP_JS_Obfuscation_Jan25.yar) | JavaScript: obfuscator detection, density-based matching | imp0rtp3, Nils Kuhnert |
554
+ | [SUSP_CRX_SuspiciousPermissions.yar](examples/SUSP_CRX_SuspiciousPermissions.yar) | Chrome extensions: crx module, permissions | Educational |
555
+
556
+ ## Scripts
557
+
558
+ ```bash
559
+ uv run {baseDir}/scripts/yara_lint.py rule.yar # Validate style/metadata
560
+ uv run {baseDir}/scripts/atom_analyzer.py rule.yar # Check string quality
561
+ ```
562
+
563
+ See [README.md](../../README.md#scripts) for detailed script documentation.
564
+
565
+ ## Quality Checklist
566
+
567
+ Before deploying any rule:
568
+
569
+ - [ ] Name follows `{CATEGORY}_{PLATFORM}_{FAMILY}_{VARIANT}_{DATE}` format
570
+ - [ ] Description starts with "Detects" and explains what/how
571
+ - [ ] All required metadata present (author, reference, date)
572
+ - [ ] Strings are unique (not API names, common paths, or format strings)
573
+ - [ ] All strings have 4+ bytes with good atom potential
574
+ - [ ] Base64 modifier only on strings with 3+ characters
575
+ - [ ] Regex patterns have escaped `{` and valid escape sequences
576
+ - [ ] Condition starts with cheap checks (filesize, magic bytes)
577
+ - [ ] Rule matches all target samples
578
+ - [ ] Rule produces zero matches on goodware corpus
579
+ - [ ] `yr check` passes with no errors
580
+ - [ ] `yr fmt --check` passes (consistent formatting)
581
+ - [ ] Linter passes with no errors
582
+ - [ ] Peer review completed
583
+
584
+ ## Resources
585
+
586
+ ### Quality YARA Rule Repositories
587
+
588
+ Learn from production rules. These repositories contain well-tested, properly attributed rules:
589
+
590
+ | Repository | Focus | Maintainer |
591
+ |------------|-------|------------|
592
+ | [Neo23x0/signature-base](https://github.com/Neo23x0/signature-base) | 17,000+ production rules, multi-platform | Florian Roth |
593
+ | [Elastic/protections-artifacts](https://github.com/elastic/protections-artifacts) | 1,000+ endpoint-tested rules | Elastic Security |
594
+ | [reversinglabs/reversinglabs-yara-rules](https://github.com/reversinglabs/reversinglabs-yara-rules) | Threat research rules | ReversingLabs |
595
+ | [imp0rtp3/js-yara-rules](https://github.com/imp0rtp3/js-yara-rules) | JavaScript/browser malware | imp0rtp3 |
596
+ | [InQuest/awesome-yara](https://github.com/InQuest/awesome-yara) | Curated index of resources | InQuest |
597
+
598
+ ### Style & Performance Guides
599
+
600
+ | Guide | Purpose |
601
+ |-------|---------|
602
+ | [YARA Style Guide](https://github.com/Neo23x0/YARA-Style-Guide) | Naming conventions, metadata, string prefixes |
603
+ | [YARA Performance Guidelines](https://github.com/Neo23x0/YARA-Performance-Guidelines) | Atom optimization, regex bounds |
604
+ | [Kaspersky Applied YARA Training](https://yara.readthedocs.io/) | Expert techniques from production use |
605
+
606
+ ### Tools
607
+
608
+ | Tool | Purpose |
609
+ |------|---------|
610
+ | [yarGen](https://github.com/Neo23x0/yarGen) | Extract candidate strings from samples |
611
+ | [FLOSS](https://github.com/mandiant/flare-floss) | Extract obfuscated and stack strings |
612
+ | [YARA-CI](https://yara-ci.cloud.virustotal.com/) | Automated goodware testing |
613
+ | [YaraDbg](https://yaradbg.dev) | Web-based rule debugger |
614
+
615
+ ### macOS-Specific Resources
616
+
617
+ | Resource | Purpose |
618
+ |----------|---------|
619
+ | Apple XProtect | Production macOS rules at `/System/Library/CoreServices/XProtect.bundle/` |
620
+ | [objective-see](https://objective-see.org/) | macOS malware research and samples |
621
+ | [macOS Security Tools](https://github.com/0xmachos/macos-security-tools) | Reference list |
622
+
623
+ ### Multi-Indicator Clustering Pattern
624
+
625
+ Production rules often group indicators by type:
626
+
627
+ ```yara
628
+ strings:
629
+ // Category A: Library indicators
630
+ $a1 = "SRWebSocket" ascii
631
+ $a2 = "SocketRocket" ascii
632
+
633
+ // Category B: Behavioral indicators
634
+ $b1 = "SSH tunnel" ascii
635
+ $b2 = "keylogger" ascii nocase
636
+
637
+ // Category C: C2 patterns
638
+ $c1 = /https:\/\/[a-z0-9]{8,16}\.onion/
639
+
640
+ condition:
641
+ filesize < 10MB and
642
+ any of ($a*) and any of ($b*) // Require evidence from BOTH categories
643
+ ```
644
+
645
+ **Why this works:** Different indicator types have different confidence levels. A single C2 domain might be definitive, while you need multiple library imports to be confident. Grouping by `$a*`, `$b*`, `$c*` lets you express graduated requirements.