@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,795 @@
1
+ ---
2
+ name: libfuzzer
3
+ type: fuzzer
4
+ description: >
5
+ Coverage-guided fuzzer built into LLVM for C/C++ projects. Use for fuzzing
6
+ C/C++ code that can be compiled with Clang.
7
+ ---
8
+
9
+ # libFuzzer
10
+
11
+ libFuzzer is an in-process, coverage-guided fuzzer that is part of the LLVM project. It's the recommended starting point for fuzzing C/C++ projects due to its simplicity and integration with the LLVM toolchain. While libFuzzer has been in maintenance-only mode since late 2022, it is easier to install and use than its alternatives, has wide support, and will be maintained for the foreseeable future.
12
+
13
+ ## When to Use
14
+
15
+ | Fuzzer | Best For | Complexity |
16
+ |--------|----------|------------|
17
+ | libFuzzer | Quick setup, single-project fuzzing | Low |
18
+ | AFL++ | Multi-core fuzzing, diverse mutations | Medium |
19
+ | LibAFL | Custom fuzzers, research projects | High |
20
+ | Honggfuzz | Hardware-based coverage | Medium |
21
+
22
+ **Choose libFuzzer when:**
23
+ - You need a simple, quick setup for C/C++ code
24
+ - Project uses Clang for compilation
25
+ - Single-core fuzzing is sufficient initially
26
+ - Transitioning to AFL++ later is an option (harnesses are compatible)
27
+
28
+ **Note:** Fuzzing harnesses written for libFuzzer are compatible with AFL++, making it easy to transition if you need more advanced features like better multi-core support.
29
+
30
+ ## Quick Start
31
+
32
+ ```c++
33
+ #include <stdint.h>
34
+ #include <stddef.h>
35
+
36
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
37
+ // Validate input if needed
38
+ if (size < 1) return 0;
39
+
40
+ // Call your target function with fuzzer-provided data
41
+ my_target_function(data, size);
42
+
43
+ return 0;
44
+ }
45
+ ```
46
+
47
+ Compile and run:
48
+ ```bash
49
+ clang++ -fsanitize=fuzzer,address -g -O2 harness.cc target.cc -o fuzz
50
+ mkdir corpus/
51
+ ./fuzz corpus/
52
+ ```
53
+
54
+ ## Installation
55
+
56
+ ### Prerequisites
57
+
58
+ - LLVM/Clang compiler (includes libFuzzer)
59
+ - LLVM tools for coverage analysis (optional)
60
+
61
+ ### Linux (Ubuntu/Debian)
62
+
63
+ ```bash
64
+ apt install clang llvm
65
+ ```
66
+
67
+ For the latest LLVM version:
68
+ ```bash
69
+ # Add LLVM repository from apt.llvm.org
70
+ # Then install specific version, e.g.:
71
+ apt install clang-18 llvm-18
72
+ ```
73
+
74
+ ### macOS
75
+
76
+ ```bash
77
+ # Using Homebrew
78
+ brew install llvm
79
+
80
+ # Or using Nix
81
+ nix-env -i clang
82
+ ```
83
+
84
+ ### Windows
85
+
86
+ Install Clang through Visual Studio. Refer to [Microsoft's documentation](https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild?view=msvc-170) for setup instructions.
87
+
88
+ **Recommendation:** If possible, fuzz on a local x86_64 VM or rent one on DigitalOcean, AWS, or Hetzner. Linux provides the best support for libFuzzer.
89
+
90
+ ### Verification
91
+
92
+ ```bash
93
+ clang++ --version
94
+ # Should show LLVM version information
95
+ ```
96
+
97
+ ## Writing a Harness
98
+
99
+ ### Harness Structure
100
+
101
+ The harness is the entry point for the fuzzer. libFuzzer calls the `LLVMFuzzerTestOneInput` function repeatedly with different inputs.
102
+
103
+ ```c++
104
+ #include <stdint.h>
105
+ #include <stddef.h>
106
+
107
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
108
+ // 1. Optional: Validate input size
109
+ if (size < MIN_REQUIRED_SIZE) {
110
+ return 0; // Reject inputs that are too small
111
+ }
112
+
113
+ // 2. Optional: Convert raw bytes to structured data
114
+ // Example: Parse two integers from byte array
115
+ if (size >= 2 * sizeof(uint32_t)) {
116
+ uint32_t a = *(uint32_t*)(data);
117
+ uint32_t b = *(uint32_t*)(data + sizeof(uint32_t));
118
+ my_function(a, b);
119
+ }
120
+
121
+ // 3. Call target function
122
+ target_function(data, size);
123
+
124
+ // 4. Always return 0 (non-zero reserved for future use)
125
+ return 0;
126
+ }
127
+ ```
128
+
129
+ ### Harness Rules
130
+
131
+ | Do | Don't |
132
+ |----|-------|
133
+ | Handle all input types (empty, huge, malformed) | Call `exit()` - stops fuzzing process |
134
+ | Join all threads before returning | Leave threads running |
135
+ | Keep harness fast and simple | Add excessive logging or complexity |
136
+ | Maintain determinism | Use random number generators or read `/dev/random` |
137
+ | Reset global state between runs | Rely on state from previous executions |
138
+ | Use narrow, focused targets | Mix unrelated data formats (PNG + TCP) in one harness |
139
+
140
+ **Rationale:**
141
+ - **Speed matters:** Aim for 100s-1000s executions per second per core
142
+ - **Reproducibility:** Crashes must be reproducible after fuzzing completes
143
+ - **Isolation:** Each execution should be independent
144
+
145
+ ### Using FuzzedDataProvider for Complex Inputs
146
+
147
+ For complex inputs (strings, multiple parameters), use the `FuzzedDataProvider` helper:
148
+
149
+ ```c++
150
+ #include <stdint.h>
151
+ #include <stddef.h>
152
+ #include "FuzzedDataProvider.h" // From LLVM project
153
+
154
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
155
+ FuzzedDataProvider fuzzed_data(data, size);
156
+
157
+ // Extract structured data
158
+ size_t allocation_size = fuzzed_data.ConsumeIntegral<size_t>();
159
+ std::vector<char> str1 = fuzzed_data.ConsumeBytesWithTerminator<char>(32, 0xFF);
160
+ std::vector<char> str2 = fuzzed_data.ConsumeBytesWithTerminator<char>(32, 0xFF);
161
+
162
+ // Call target with extracted data
163
+ char* result = concat(&str1[0], str1.size(), &str2[0], str2.size(), allocation_size);
164
+ if (result != NULL) {
165
+ free(result);
166
+ }
167
+
168
+ return 0;
169
+ }
170
+ ```
171
+
172
+ Download `FuzzedDataProvider.h` from the [LLVM repository](https://github.com/llvm/llvm-project/blob/main/compiler-rt/include/fuzzer/FuzzedDataProvider.h).
173
+
174
+ ### Interleaved Fuzzing
175
+
176
+ Use a single harness to test multiple related functions:
177
+
178
+ ```c++
179
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
180
+ if (size < 1 + 2 * sizeof(int32_t)) {
181
+ return 0;
182
+ }
183
+
184
+ uint8_t mode = data[0];
185
+ int32_t numbers[2];
186
+ memcpy(numbers, data + 1, 2 * sizeof(int32_t));
187
+
188
+ // Select function based on first byte
189
+ switch (mode % 4) {
190
+ case 0: add(numbers[0], numbers[1]); break;
191
+ case 1: subtract(numbers[0], numbers[1]); break;
192
+ case 2: multiply(numbers[0], numbers[1]); break;
193
+ case 3: divide(numbers[0], numbers[1]); break;
194
+ }
195
+
196
+ return 0;
197
+ }
198
+ ```
199
+
200
+ > **See Also:** For detailed harness writing techniques, patterns for handling complex inputs,
201
+ > structure-aware fuzzing, and protobuf-based fuzzing, see the **fuzz-harness-writing** technique skill.
202
+
203
+ ## Compilation
204
+
205
+ ### Basic Compilation
206
+
207
+ The key flag is `-fsanitize=fuzzer`, which:
208
+ - Links the libFuzzer runtime (provides `main` function)
209
+ - Enables SanitizerCoverage instrumentation for coverage tracking
210
+ - Disables built-in functions like `memcmp`
211
+
212
+ ```bash
213
+ clang++ -fsanitize=fuzzer -g -O2 harness.cc target.cc -o fuzz
214
+ ```
215
+
216
+ **Flags explained:**
217
+ - `-fsanitize=fuzzer`: Enable libFuzzer
218
+ - `-g`: Add debug symbols (helpful for crash analysis)
219
+ - `-O2`: Production-level optimizations (recommended for fuzzing)
220
+ - `-DNO_MAIN`: Define macro if your code has a `main` function
221
+
222
+ ### With Sanitizers
223
+
224
+ **AddressSanitizer (recommended):**
225
+ ```bash
226
+ clang++ -fsanitize=fuzzer,address -g -O2 -U_FORTIFY_SOURCE harness.cc target.cc -o fuzz
227
+ ```
228
+
229
+ **Multiple sanitizers:**
230
+ ```bash
231
+ clang++ -fsanitize=fuzzer,address,undefined -g -O2 harness.cc target.cc -o fuzz
232
+ ```
233
+
234
+ > **See Also:** For detailed sanitizer configuration, common issues, ASAN_OPTIONS flags,
235
+ > and advanced sanitizer usage, see the **address-sanitizer** and **undefined-behavior-sanitizer**
236
+ > technique skills.
237
+
238
+ ### Build Flags
239
+
240
+ | Flag | Purpose |
241
+ |------|---------|
242
+ | `-fsanitize=fuzzer` | Enable libFuzzer runtime and instrumentation |
243
+ | `-fsanitize=address` | Enable AddressSanitizer (memory error detection) |
244
+ | `-fsanitize=undefined` | Enable UndefinedBehaviorSanitizer |
245
+ | `-fsanitize=fuzzer-no-link` | Instrument without linking fuzzer (for libraries) |
246
+ | `-g` | Include debug symbols |
247
+ | `-O2` | Production optimization level |
248
+ | `-U_FORTIFY_SOURCE` | Disable fortification (can interfere with ASan) |
249
+
250
+ ### Building Static Libraries
251
+
252
+ For projects that produce static libraries:
253
+
254
+ 1. Build the library with fuzzing instrumentation:
255
+ ```bash
256
+ export CC=clang CFLAGS="-fsanitize=fuzzer-no-link -fsanitize=address"
257
+ export CXX=clang++ CXXFLAGS="$CFLAGS"
258
+ ./configure --enable-shared=no
259
+ make
260
+ ```
261
+
262
+ 2. Link the static library with your harness:
263
+ ```bash
264
+ clang++ -fsanitize=fuzzer -fsanitize=address harness.cc libmylib.a -o fuzz
265
+ ```
266
+
267
+ ### CMake Integration
268
+
269
+ ```cmake
270
+ project(FuzzTarget)
271
+ cmake_minimum_required(VERSION 3.0)
272
+
273
+ add_executable(fuzz main.cc harness.cc)
274
+ target_compile_definitions(fuzz PRIVATE NO_MAIN=1)
275
+ target_compile_options(fuzz PRIVATE -g -O2 -fsanitize=fuzzer -fsanitize=address)
276
+ target_link_libraries(fuzz -fsanitize=fuzzer -fsanitize=address)
277
+ ```
278
+
279
+ Build with:
280
+ ```bash
281
+ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .
282
+ cmake --build .
283
+ ```
284
+
285
+ ## Corpus Management
286
+
287
+ ### Creating Initial Corpus
288
+
289
+ Create a directory for the corpus (can start empty):
290
+
291
+ ```bash
292
+ mkdir corpus/
293
+ ```
294
+
295
+ **Optional but recommended:** Provide seed inputs (valid example files):
296
+
297
+ ```bash
298
+ # For a PNG parser:
299
+ cp examples/*.png corpus/
300
+
301
+ # For a protocol parser:
302
+ cp test_packets/*.bin corpus/
303
+ ```
304
+
305
+ **Benefits of seed inputs:**
306
+ - Fuzzer doesn't start from scratch
307
+ - Reaches valid code paths faster
308
+ - Significantly improves effectiveness
309
+
310
+ ### Corpus Structure
311
+
312
+ The corpus directory contains:
313
+ - Input files that trigger unique code paths
314
+ - Minimized versions (libFuzzer automatically minimizes)
315
+ - Named by content hash (e.g., `a9993e364706816aba3e25717850c26c9cd0d89d`)
316
+
317
+ ### Corpus Minimization
318
+
319
+ libFuzzer automatically minimizes corpus entries during fuzzing. To explicitly minimize:
320
+
321
+ ```bash
322
+ mkdir minimized_corpus/
323
+ ./fuzz -merge=1 minimized_corpus/ corpus/
324
+ ```
325
+
326
+ This creates a deduplicated, minimized corpus in `minimized_corpus/`.
327
+
328
+ > **See Also:** For corpus creation strategies, seed selection, format-specific corpus building,
329
+ > and corpus maintenance, see the **fuzzing-corpus** technique skill.
330
+
331
+ ## Running Campaigns
332
+
333
+ ### Basic Run
334
+
335
+ ```bash
336
+ ./fuzz corpus/
337
+ ```
338
+
339
+ This runs until a crash is found or you stop it (Ctrl+C).
340
+
341
+ ### Recommended: Continue After Crashes
342
+
343
+ ```bash
344
+ ./fuzz -fork=1 -ignore_crashes=1 corpus/
345
+ ```
346
+
347
+ The `-fork` and `-ignore_crashes` flags (experimental but widely used) allow fuzzing to continue after finding crashes.
348
+
349
+ ### Common Options
350
+
351
+ **Control input size:**
352
+ ```bash
353
+ ./fuzz -max_len=4000 corpus/
354
+ ```
355
+ Rule of thumb: 2x the size of minimal realistic input.
356
+
357
+ **Set timeout:**
358
+ ```bash
359
+ ./fuzz -timeout=2 corpus/
360
+ ```
361
+ Abort test cases that run longer than 2 seconds.
362
+
363
+ **Use a dictionary:**
364
+ ```bash
365
+ ./fuzz -dict=./format.dict corpus/
366
+ ```
367
+
368
+ **Close stdout/stderr (speed up fuzzing):**
369
+ ```bash
370
+ ./fuzz -close_fd_mask=3 corpus/
371
+ ```
372
+
373
+ **See all options:**
374
+ ```bash
375
+ ./fuzz -help=1
376
+ ```
377
+
378
+ ### Multi-Core Fuzzing
379
+
380
+ **Option 1: Jobs and workers (recommended):**
381
+ ```bash
382
+ ./fuzz -jobs=4 -workers=4 -fork=1 -ignore_crashes=1 corpus/
383
+ ```
384
+ - `-jobs=4`: Run 4 sequential campaigns
385
+ - `-workers=4`: Process jobs in parallel with 4 processes
386
+ - Test cases are shared between jobs
387
+
388
+ **Option 2: Fork mode:**
389
+ ```bash
390
+ ./fuzz -fork=4 -ignore_crashes=1 corpus/
391
+ ```
392
+
393
+ **Note:** For serious multi-core fuzzing, consider switching to AFL++, Honggfuzz, or LibAFL.
394
+
395
+ ### Re-executing Test Cases
396
+
397
+ **Re-run a single crash:**
398
+ ```bash
399
+ ./fuzz ./crash-a9993e364706816aba3e25717850c26c9cd0d89d
400
+ ```
401
+
402
+ **Test all inputs in a directory without fuzzing:**
403
+ ```bash
404
+ ./fuzz -runs=0 corpus/
405
+ ```
406
+
407
+ ### Interpreting Output
408
+
409
+ When fuzzing runs, you'll see statistics like:
410
+
411
+ ```
412
+ INFO: Seed: 3517090860
413
+ INFO: Loaded 1 modules (9 inline 8-bit counters)
414
+ #2 INITED cov: 3 ft: 4 corp: 1/1b exec/s: 0 rss: 26Mb
415
+ #57 NEW cov: 4 ft: 5 corp: 2/4b lim: 4 exec/s: 0 rss: 26Mb
416
+ ```
417
+
418
+ | Output | Meaning |
419
+ |--------|---------|
420
+ | `INITED` | Fuzzing initialized |
421
+ | `NEW` | New coverage found, added to corpus |
422
+ | `REDUCE` | Input minimized while keeping coverage |
423
+ | `cov: N` | Number of coverage edges hit |
424
+ | `corp: X/Yb` | Corpus size: X entries, Y total bytes |
425
+ | `exec/s: N` | Executions per second |
426
+ | `rss: NMb` | Resident memory usage |
427
+
428
+ **On crash:**
429
+ ```
430
+ ==11672== ERROR: libFuzzer: deadly signal
431
+ artifact_prefix='./'; Test unit written to ./crash-a9993e364706816aba3e25717850c26c9cd0d89d
432
+ 0x61,0x62,0x63,
433
+ abc
434
+ Base64: YWJj
435
+ ```
436
+
437
+ The crash is saved to `./crash-<hash>` with the input shown in hex, UTF-8, and Base64.
438
+
439
+ **Reproducibility:** Use `-seed=<value>` to reproduce a fuzzing campaign (single-core only).
440
+
441
+ ## Fuzzing Dictionary
442
+
443
+ Dictionaries help the fuzzer discover interesting inputs faster by providing hints about the input format.
444
+
445
+ ### Dictionary Format
446
+
447
+ Create a text file with quoted strings (one per line):
448
+
449
+ ```conf
450
+ # Lines starting with '#' are comments
451
+
452
+ # Magic bytes
453
+ magic="\x89PNG"
454
+ magic2="IEND"
455
+
456
+ # Keywords
457
+ "GET"
458
+ "POST"
459
+ "Content-Type"
460
+
461
+ # Hex sequences
462
+ delimiter="\xFF\xD8\xFF"
463
+ ```
464
+
465
+ ### Using a Dictionary
466
+
467
+ ```bash
468
+ ./fuzz -dict=./format.dict corpus/
469
+ ```
470
+
471
+ ### Generating a Dictionary
472
+
473
+ **From header files:**
474
+ ```bash
475
+ grep -o '".*"' header.h > header.dict
476
+ ```
477
+
478
+ **From man pages:**
479
+ ```bash
480
+ man curl | grep -oP '^\s*(--|-)\K\S+' | sed 's/[,.]$//' | sed 's/^/"&/; s/$/&"/' | sort -u > man.dict
481
+ ```
482
+
483
+ **From binary strings:**
484
+ ```bash
485
+ strings ./binary | sed 's/^/"&/; s/$/&"/' > strings.dict
486
+ ```
487
+
488
+ **Using LLMs:** Ask ChatGPT or similar to generate a dictionary for your format (e.g., "Generate a libFuzzer dictionary for a JSON parser").
489
+
490
+ > **See Also:** For advanced dictionary generation, format-specific dictionaries, and
491
+ > dictionary optimization strategies, see the **fuzzing-dictionaries** technique skill.
492
+
493
+ ## Coverage Analysis
494
+
495
+ While libFuzzer shows basic coverage stats (`cov: N`), detailed coverage analysis requires additional tools.
496
+
497
+ ### Source-Based Coverage
498
+
499
+ **1. Recompile with coverage instrumentation:**
500
+ ```bash
501
+ clang++ -fsanitize=fuzzer -fprofile-instr-generate -fcoverage-mapping harness.cc target.cc -o fuzz
502
+ ```
503
+
504
+ **2. Run fuzzer to collect coverage:**
505
+ ```bash
506
+ LLVM_PROFILE_FILE="coverage-%p.profraw" ./fuzz -runs=10000 corpus/
507
+ ```
508
+
509
+ **3. Merge coverage data:**
510
+ ```bash
511
+ llvm-profdata merge -sparse coverage-*.profraw -o coverage.profdata
512
+ ```
513
+
514
+ **4. Generate coverage report:**
515
+ ```bash
516
+ llvm-cov show ./fuzz -instr-profile=coverage.profdata
517
+ ```
518
+
519
+ **5. Generate HTML report:**
520
+ ```bash
521
+ llvm-cov show ./fuzz -instr-profile=coverage.profdata -format=html > coverage.html
522
+ ```
523
+
524
+ ### Improving Coverage
525
+
526
+ **Tips:**
527
+ - Provide better seed inputs in corpus
528
+ - Use dictionaries for format-aware fuzzing
529
+ - Check if harness properly exercises target
530
+ - Consider structure-aware fuzzing for complex formats
531
+ - Run longer campaigns (days/weeks)
532
+
533
+ > **See Also:** For detailed coverage analysis techniques, identifying coverage gaps,
534
+ > systematic coverage improvement, and comparing coverage across fuzzers, see the
535
+ > **coverage-analysis** technique skill.
536
+
537
+ ## Sanitizer Integration
538
+
539
+ ### AddressSanitizer (ASan)
540
+
541
+ ASan detects memory errors like buffer overflows and use-after-free bugs. **Highly recommended for fuzzing.**
542
+
543
+ **Enable ASan:**
544
+ ```bash
545
+ clang++ -fsanitize=fuzzer,address -g -O2 -U_FORTIFY_SOURCE harness.cc target.cc -o fuzz
546
+ ```
547
+
548
+ **Example ASan output:**
549
+ ```
550
+ ==1276163==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000c4ab1
551
+ WRITE of size 1 at 0x6020000c4ab1 thread T0
552
+ #0 0x55555568631a in check_buf(char*, unsigned long) main.cc:13:25
553
+ #1 0x5555556860bf in LLVMFuzzerTestOneInput harness.cc:7:3
554
+ ```
555
+
556
+ **Configure ASan with environment variables:**
557
+ ```bash
558
+ ASAN_OPTIONS=verbosity=1:abort_on_error=1 ./fuzz corpus/
559
+ ```
560
+
561
+ **Important flags:**
562
+ - `verbosity=1`: Show ASan is active
563
+ - `detect_leaks=0`: Disable leak detection (leaks reported at end)
564
+ - `abort_on_error=1`: Call `abort()` instead of `_exit()` on errors
565
+
566
+ **Drawbacks:**
567
+ - 2-4x slowdown
568
+ - Requires ~20TB virtual memory (disable memory limits: `-rss_limit_mb=0`)
569
+ - Best supported on Linux
570
+
571
+ > **See Also:** For comprehensive ASan configuration, common pitfalls, symbolization,
572
+ > and combining with other sanitizers, see the **address-sanitizer** technique skill.
573
+
574
+ ### UndefinedBehaviorSanitizer (UBSan)
575
+
576
+ UBSan detects undefined behavior like integer overflow, null pointer dereference, etc.
577
+
578
+ **Enable UBSan:**
579
+ ```bash
580
+ clang++ -fsanitize=fuzzer,undefined -g -O2 harness.cc target.cc -o fuzz
581
+ ```
582
+
583
+ **Combine with ASan:**
584
+ ```bash
585
+ clang++ -fsanitize=fuzzer,address,undefined -g -O2 harness.cc target.cc -o fuzz
586
+ ```
587
+
588
+ ### MemorySanitizer (MSan)
589
+
590
+ MSan detects uninitialized memory reads. More complex to use (requires rebuilding all dependencies).
591
+
592
+ ```bash
593
+ clang++ -fsanitize=fuzzer,memory -g -O2 harness.cc target.cc -o fuzz
594
+ ```
595
+
596
+ ### Common Sanitizer Issues
597
+
598
+ | Issue | Solution |
599
+ |-------|----------|
600
+ | ASan slows fuzzing too much | Use `-fsanitize-recover=address` for non-fatal errors |
601
+ | Out of memory | Set `ASAN_OPTIONS=rss_limit_mb=0` or `-rss_limit_mb=0` |
602
+ | Stack exhaustion | Increase stack size: `ASAN_OPTIONS=stack_size=8388608` |
603
+ | False positives with `_FORTIFY_SOURCE` | Use `-U_FORTIFY_SOURCE` flag |
604
+ | MSan reports in dependencies | Rebuild all dependencies with `-fsanitize=memory` |
605
+
606
+ ## Real-World Examples
607
+
608
+ ### Example 1: Fuzzing libpng
609
+
610
+ libpng is a widely-used library for reading/writing PNG images. Bugs can lead to security issues.
611
+
612
+ **1. Get source code:**
613
+ ```bash
614
+ curl -L -O https://downloads.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.xz
615
+ tar xf libpng-1.6.37.tar.xz
616
+ cd libpng-1.6.37/
617
+ ```
618
+
619
+ **2. Install dependencies:**
620
+ ```bash
621
+ apt install zlib1g-dev
622
+ ```
623
+
624
+ **3. Compile with fuzzing instrumentation:**
625
+ ```bash
626
+ export CC=clang CFLAGS="-fsanitize=fuzzer-no-link -fsanitize=address"
627
+ export CXX=clang++ CXXFLAGS="$CFLAGS"
628
+ ./configure --enable-shared=no
629
+ make
630
+ ```
631
+
632
+ **4. Get a harness (or write your own):**
633
+ ```bash
634
+ curl -O https://raw.githubusercontent.com/glennrp/libpng/f8e5fa92b0e37ab597616f554bee254157998227/contrib/oss-fuzz/libpng_read_fuzzer.cc
635
+ ```
636
+
637
+ **5. Prepare corpus and dictionary:**
638
+ ```bash
639
+ mkdir corpus/
640
+ curl -o corpus/input.png https://raw.githubusercontent.com/glennrp/libpng/acfd50ae0ba3198ad734e5d4dec2b05341e50924/contrib/pngsuite/iftp1n3p08.png
641
+ curl -O https://raw.githubusercontent.com/glennrp/libpng/2fff013a6935967960a5ae626fc21432807933dd/contrib/oss-fuzz/png.dict
642
+ ```
643
+
644
+ **6. Link and compile fuzzer:**
645
+ ```bash
646
+ clang++ -fsanitize=fuzzer -fsanitize=address libpng_read_fuzzer.cc .libs/libpng16.a -lz -o fuzz
647
+ ```
648
+
649
+ **7. Run fuzzing campaign:**
650
+ ```bash
651
+ ./fuzz -close_fd_mask=3 -dict=./png.dict corpus/
652
+ ```
653
+
654
+ ### Example 2: Simple Division Bug
655
+
656
+ Harness that finds a division-by-zero bug:
657
+
658
+ ```c++
659
+ #include <stdint.h>
660
+ #include <stddef.h>
661
+
662
+ double divide(uint32_t numerator, uint32_t denominator) {
663
+ // Bug: No check if denominator is zero
664
+ return numerator / denominator;
665
+ }
666
+
667
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
668
+ if(size != 2 * sizeof(uint32_t)) {
669
+ return 0;
670
+ }
671
+
672
+ uint32_t numerator = *(uint32_t*)(data);
673
+ uint32_t denominator = *(uint32_t*)(data + sizeof(uint32_t));
674
+
675
+ divide(numerator, denominator);
676
+
677
+ return 0;
678
+ }
679
+ ```
680
+
681
+ Compile and fuzz:
682
+ ```bash
683
+ clang++ -fsanitize=fuzzer harness.cc -o fuzz
684
+ ./fuzz
685
+ ```
686
+
687
+ The fuzzer will quickly find inputs causing a crash.
688
+
689
+ ## Advanced Usage
690
+
691
+ ### Tips and Tricks
692
+
693
+ | Tip | Why It Helps |
694
+ |-----|--------------|
695
+ | Start with single-core, switch to AFL++ for multi-core | libFuzzer harnesses work with AFL++ |
696
+ | Use dictionaries for structured formats | 10-100x faster bug discovery |
697
+ | Close file descriptors with `-close_fd_mask=3` | Speed boost if SUT writes output |
698
+ | Set reasonable `-max_len` | Prevents wasted time on huge inputs |
699
+ | Run for days/weeks, not minutes | Coverage plateaus take time to break |
700
+ | Use seed corpus from test suites | Starts fuzzing from valid inputs |
701
+
702
+ ### Structure-Aware Fuzzing
703
+
704
+ For highly structured inputs (e.g., complex protocols, file formats), use libprotobuf-mutator:
705
+
706
+ - Define input structure using Protocol Buffers
707
+ - libFuzzer mutates protobuf messages (structure-preserving mutations)
708
+ - Harness converts protobuf to native format
709
+
710
+ See [structure-aware fuzzing documentation](https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md) for details.
711
+
712
+ ### Custom Mutators
713
+
714
+ libFuzzer allows custom mutators for specialized fuzzing:
715
+
716
+ ```c++
717
+ extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,
718
+ size_t MaxSize, unsigned int Seed) {
719
+ // Custom mutation logic
720
+ return new_size;
721
+ }
722
+
723
+ extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,
724
+ const uint8_t *Data2, size_t Size2,
725
+ uint8_t *Out, size_t MaxOutSize,
726
+ unsigned int Seed) {
727
+ // Custom crossover logic
728
+ return new_size;
729
+ }
730
+ ```
731
+
732
+ ### Performance Tuning
733
+
734
+ | Setting | Impact |
735
+ |---------|--------|
736
+ | `-close_fd_mask=3` | Closes stdout/stderr, speeds up fuzzing |
737
+ | `-max_len=<reasonable_size>` | Avoids wasting time on huge inputs |
738
+ | `-timeout=<seconds>` | Detects hangs, prevents stuck executions |
739
+ | Disable ASan for baseline | 2-4x speed boost (but misses memory bugs) |
740
+ | Use `-jobs` and `-workers` | Limited multi-core support |
741
+ | Run on Linux | Best platform support and performance |
742
+
743
+ ## Troubleshooting
744
+
745
+ | Problem | Cause | Solution |
746
+ |---------|-------|----------|
747
+ | No crashes found after hours | Poor corpus, low coverage | Add seed inputs, use dictionary, check harness |
748
+ | Very slow executions/sec (<100) | Target too complex, excessive logging | Optimize target, use `-close_fd_mask=3`, reduce logging |
749
+ | Out of memory | ASan's 20TB virtual memory | Set `-rss_limit_mb=0` to disable RSS limit |
750
+ | Fuzzer stops after first crash | Default behavior | Use `-fork=1 -ignore_crashes=1` to continue |
751
+ | Can't reproduce crash | Non-determinism in harness/target | Remove random number generation, global state |
752
+ | Linking errors with `-fsanitize=fuzzer` | Missing libFuzzer runtime | Ensure using Clang, check LLVM installation |
753
+ | GCC project won't compile with Clang | GCC-specific code | Switch to AFL++ with `gcc_plugin` instead |
754
+ | Coverage not improving | Corpus plateau | Run longer, add dictionary, improve seeds, check coverage report |
755
+ | Crashes but ASan doesn't trigger | Memory error not detected without ASan | Recompile with `-fsanitize=address` |
756
+
757
+ ## Related Skills
758
+
759
+ ### Technique Skills
760
+
761
+ | Skill | Use Case |
762
+ |-------|----------|
763
+ | **fuzz-harness-writing** | Detailed guidance on writing effective harnesses, structure-aware fuzzing, and FuzzedDataProvider usage |
764
+ | **address-sanitizer** | Memory error detection configuration, ASAN_OPTIONS, and troubleshooting |
765
+ | **undefined-behavior-sanitizer** | Detecting undefined behavior during fuzzing |
766
+ | **coverage-analysis** | Measuring fuzzing effectiveness and identifying untested code paths |
767
+ | **fuzzing-corpus** | Building and managing seed corpora, corpus minimization strategies |
768
+ | **fuzzing-dictionaries** | Creating format-specific dictionaries for faster bug discovery |
769
+
770
+ ### Related Fuzzers
771
+
772
+ | Skill | When to Consider |
773
+ |-------|------------------|
774
+ | **aflpp** | When you need serious multi-core fuzzing, or when libFuzzer coverage plateaus |
775
+ | **honggfuzz** | When you want hardware-based coverage feedback on Linux |
776
+ | **libafl** | When building custom fuzzers or conducting fuzzing research |
777
+
778
+ ## Resources
779
+
780
+ ### Official Documentation
781
+
782
+ - [LLVM libFuzzer Documentation](https://llvm.org/docs/LibFuzzer.html) - Official reference
783
+ - [libFuzzer Tutorial by Google](https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md) - Step-by-step guide
784
+ - [SanitizerCoverage](https://clang.llvm.org/docs/SanitizerCoverage.html) - Coverage instrumentation details
785
+
786
+ ### Advanced Topics
787
+
788
+ - [Structure-Aware Fuzzing with libprotobuf-mutator](https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md)
789
+ - [Split Inputs in libFuzzer](https://github.com/google/fuzzing/blob/master/docs/split-inputs.md)
790
+ - [FuzzedDataProvider Header](https://github.com/llvm/llvm-project/blob/main/compiler-rt/include/fuzzer/FuzzedDataProvider.h)
791
+
792
+ ### Example Projects
793
+
794
+ - [OSS-Fuzz](https://github.com/google/oss-fuzz) - Continuous fuzzing for open-source projects (many libFuzzer examples)
795
+ - [AFL++ Dictionary Collection](https://github.com/AFLplusplus/AFLplusplus/tree/stable/dictionaries) - Reusable dictionaries