@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,625 @@
1
+ ---
2
+ name: libafl
3
+ type: fuzzer
4
+ description: >
5
+ LibAFL is a modular fuzzing library for building custom fuzzers. Use for
6
+ advanced fuzzing needs, custom mutators, or non-standard fuzzing targets.
7
+ ---
8
+
9
+ # LibAFL
10
+
11
+ LibAFL is a modular fuzzing library that implements features from AFL-based fuzzers like AFL++. Unlike traditional fuzzers, LibAFL provides all functionality in a modular and customizable way as a Rust library. It can be used as a drop-in replacement for libFuzzer or as a library to build custom fuzzers from scratch.
12
+
13
+ ## When to Use
14
+
15
+ | Fuzzer | Best For | Complexity |
16
+ |--------|----------|------------|
17
+ | libFuzzer | Quick setup, single-threaded | Low |
18
+ | AFL++ | Multi-core, general purpose | Medium |
19
+ | LibAFL | Custom fuzzers, advanced features, research | High |
20
+
21
+ **Choose LibAFL when:**
22
+ - You need custom mutation strategies or feedback mechanisms
23
+ - Standard fuzzers don't support your target architecture
24
+ - You want to implement novel fuzzing techniques
25
+ - You need fine-grained control over fuzzing components
26
+ - You're conducting fuzzing research
27
+
28
+ ## Quick Start
29
+
30
+ LibAFL can be used as a drop-in replacement for libFuzzer with minimal setup:
31
+
32
+ ```c++
33
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
34
+ // Call your code with fuzzer-provided data
35
+ my_function(data, size);
36
+ return 0;
37
+ }
38
+ ```
39
+
40
+ Build LibAFL's libFuzzer compatibility layer:
41
+ ```bash
42
+ git clone https://github.com/AFLplusplus/LibAFL
43
+ cd LibAFL/libafl_libfuzzer_runtime
44
+ ./build.sh
45
+ ```
46
+
47
+ Compile and run:
48
+ ```bash
49
+ clang++ -DNO_MAIN -g -O2 -fsanitize=fuzzer-no-link libFuzzer.a harness.cc main.cc -o fuzz
50
+ ./fuzz corpus/
51
+ ```
52
+
53
+ ## Installation
54
+
55
+ ### Prerequisites
56
+
57
+ - Clang/LLVM 15-18
58
+ - Rust (via rustup)
59
+ - Additional system dependencies
60
+
61
+ ### Linux/macOS
62
+
63
+ Install Clang:
64
+ ```bash
65
+ apt install clang
66
+ ```
67
+
68
+ Or install a specific version via apt.llvm.org:
69
+ ```bash
70
+ wget https://apt.llvm.org/llvm.sh
71
+ chmod +x llvm.sh
72
+ sudo ./llvm.sh 15
73
+ ```
74
+
75
+ Configure environment for Rust:
76
+ ```bash
77
+ export RUSTFLAGS="-C linker=/usr/bin/clang-15"
78
+ export CC="clang-15"
79
+ export CXX="clang++-15"
80
+ ```
81
+
82
+ Install Rust:
83
+ ```bash
84
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
85
+ ```
86
+
87
+ Install additional dependencies:
88
+ ```bash
89
+ apt install libssl-dev pkg-config
90
+ ```
91
+
92
+ For libFuzzer compatibility mode, install nightly Rust:
93
+ ```bash
94
+ rustup toolchain install nightly --component llvm-tools
95
+ ```
96
+
97
+ ### Verification
98
+
99
+ Build LibAFL to verify installation:
100
+ ```bash
101
+ cd LibAFL/libafl_libfuzzer_runtime
102
+ ./build.sh
103
+ # Should produce libFuzzer.a
104
+ ```
105
+
106
+ ## Writing a Harness
107
+
108
+ LibAFL harnesses follow the same pattern as libFuzzer when using drop-in replacement mode:
109
+
110
+ ```c++
111
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
112
+ // Your fuzzing target code here
113
+ return 0;
114
+ }
115
+ ```
116
+
117
+ When building custom fuzzers with LibAFL as a Rust library, harness logic is integrated directly into the fuzzer. See the "Writing a Custom Fuzzer" section below for the full pattern.
118
+
119
+ > **See Also:** For detailed harness writing techniques, see the **harness-writing** technique skill.
120
+
121
+ ## Usage Modes
122
+
123
+ LibAFL supports two primary usage modes:
124
+
125
+ ### 1. libFuzzer Drop-in Replacement
126
+
127
+ Use LibAFL as a replacement for libFuzzer with existing harnesses.
128
+
129
+ **Compilation:**
130
+ ```bash
131
+ clang++ -DNO_MAIN -g -O2 -fsanitize=fuzzer-no-link libFuzzer.a harness.cc main.cc -o fuzz
132
+ ```
133
+
134
+ **Running:**
135
+ ```bash
136
+ ./fuzz corpus/
137
+ ```
138
+
139
+ **Recommended for long campaigns:**
140
+ ```bash
141
+ ./fuzz -fork=1 -ignore_crashes=1 corpus/
142
+ ```
143
+
144
+ ### 2. Custom Fuzzer as Rust Library
145
+
146
+ Build a fully customized fuzzer using LibAFL components.
147
+
148
+ **Create project:**
149
+ ```bash
150
+ cargo init --lib my_fuzzer
151
+ cd my_fuzzer
152
+ cargo add libafl@0.13 libafl_targets@0.13 libafl_bolts@0.13 libafl_cc@0.13 \
153
+ --features "libafl_targets@0.13/libfuzzer,libafl_targets@0.13/sancov_pcguard_hitcounts"
154
+ ```
155
+
156
+ **Configure Cargo.toml:**
157
+ ```toml
158
+ [lib]
159
+ crate-type = ["staticlib"]
160
+ ```
161
+
162
+ ## Writing a Custom Fuzzer
163
+
164
+ > **See Also:** For detailed harness writing techniques, patterns for handling complex inputs,
165
+ > and advanced strategies, see the **fuzz-harness-writing** technique skill.
166
+
167
+ ### Fuzzer Components
168
+
169
+ A LibAFL fuzzer consists of modular components:
170
+
171
+ 1. **Observers** - Collect execution feedback (coverage, timing)
172
+ 2. **Feedback** - Determine if inputs are interesting
173
+ 3. **Objective** - Define fuzzing goals (crashes, timeouts)
174
+ 4. **State** - Maintain corpus and metadata
175
+ 5. **Mutators** - Generate new inputs
176
+ 6. **Scheduler** - Select which inputs to mutate
177
+ 7. **Executor** - Run the target with inputs
178
+
179
+ ### Basic Fuzzer Structure
180
+
181
+ ```rust
182
+ use libafl::prelude::*;
183
+ use libafl_bolts::prelude::*;
184
+ use libafl_targets::{libfuzzer_test_one_input, std_edges_map_observer};
185
+
186
+ #[no_mangle]
187
+ pub extern "C" fn libafl_main() {
188
+ let mut run_client = |state: Option<_>, mut restarting_mgr, _core_id| {
189
+ // 1. Setup observers
190
+ let edges_observer = HitcountsMapObserver::new(
191
+ unsafe { std_edges_map_observer("edges") }
192
+ ).track_indices();
193
+ let time_observer = TimeObserver::new("time");
194
+
195
+ // 2. Define feedback
196
+ let mut feedback = feedback_or!(
197
+ MaxMapFeedback::new(&edges_observer),
198
+ TimeFeedback::new(&time_observer)
199
+ );
200
+
201
+ // 3. Define objective
202
+ let mut objective = feedback_or_fast!(
203
+ CrashFeedback::new(),
204
+ TimeoutFeedback::new()
205
+ );
206
+
207
+ // 4. Create or restore state
208
+ let mut state = state.unwrap_or_else(|| {
209
+ StdState::new(
210
+ StdRand::new(),
211
+ InMemoryCorpus::new(),
212
+ OnDiskCorpus::new(&output_dir).unwrap(),
213
+ &mut feedback,
214
+ &mut objective,
215
+ ).unwrap()
216
+ });
217
+
218
+ // 5. Setup mutator
219
+ let mutator = StdScheduledMutator::new(havoc_mutations());
220
+ let mut stages = tuple_list!(StdMutationalStage::new(mutator));
221
+
222
+ // 6. Setup scheduler
223
+ let scheduler = IndexesLenTimeMinimizerScheduler::new(
224
+ &edges_observer,
225
+ QueueScheduler::new()
226
+ );
227
+
228
+ // 7. Create fuzzer
229
+ let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);
230
+
231
+ // 8. Define harness
232
+ let mut harness = |input: &BytesInput| {
233
+ let buf = input.target_bytes().as_slice();
234
+ libfuzzer_test_one_input(buf);
235
+ ExitKind::Ok
236
+ };
237
+
238
+ // 9. Setup executor
239
+ let mut executor = InProcessExecutor::with_timeout(
240
+ &mut harness,
241
+ tuple_list!(edges_observer, time_observer),
242
+ &mut fuzzer,
243
+ &mut state,
244
+ &mut restarting_mgr,
245
+ timeout,
246
+ )?;
247
+
248
+ // 10. Load initial inputs
249
+ if state.must_load_initial_inputs() {
250
+ state.load_initial_inputs(
251
+ &mut fuzzer,
252
+ &mut executor,
253
+ &mut restarting_mgr,
254
+ &input_dir
255
+ )?;
256
+ }
257
+
258
+ // 11. Start fuzzing
259
+ fuzzer.fuzz_loop(&mut stages, &mut executor, &mut state, &mut restarting_mgr)?;
260
+ Ok(())
261
+ };
262
+
263
+ // Launch fuzzer
264
+ Launcher::builder()
265
+ .run_client(&mut run_client)
266
+ .cores(&cores)
267
+ .build()
268
+ .launch()
269
+ .unwrap();
270
+ }
271
+ ```
272
+
273
+ ## Compilation
274
+
275
+ ### Verbose Mode
276
+
277
+ Manually specify all instrumentation flags:
278
+
279
+ ```bash
280
+ clang++-15 -DNO_MAIN -g -O2 \
281
+ -fsanitize-coverage=trace-pc-guard \
282
+ -fsanitize=address \
283
+ -Wl,--whole-archive target/release/libmy_fuzzer.a -Wl,--no-whole-archive \
284
+ main.cc harness.cc -o fuzz
285
+ ```
286
+
287
+ ### Compiler Wrapper (Recommended)
288
+
289
+ Create a LibAFL compiler wrapper to handle instrumentation automatically.
290
+
291
+ **Create `src/bin/libafl_cc.rs`:**
292
+ ```rust
293
+ use libafl_cc::{ClangWrapper, CompilerWrapper, Configuration, ToolWrapper};
294
+
295
+ pub fn main() {
296
+ let args: Vec<String> = env::args().collect();
297
+ let mut cc = ClangWrapper::new();
298
+ cc.cpp(is_cpp)
299
+ .parse_args(&args)
300
+ .link_staticlib(&dir, "my_fuzzer")
301
+ .add_args(&Configuration::GenerateCoverageMap.to_flags().unwrap())
302
+ .add_args(&Configuration::AddressSanitizer.to_flags().unwrap())
303
+ .run()
304
+ .unwrap();
305
+ }
306
+ ```
307
+
308
+ **Compile and use:**
309
+ ```bash
310
+ cargo build --release
311
+ target/release/libafl_cxx -DNO_MAIN -g -O2 main.cc harness.cc -o fuzz
312
+ ```
313
+
314
+ > **See Also:** For detailed sanitizer configuration, common issues, and advanced flags,
315
+ > see the **address-sanitizer** and **undefined-behavior-sanitizer** technique skills.
316
+
317
+ ## Running Campaigns
318
+
319
+ ### Basic Run
320
+
321
+ ```bash
322
+ ./fuzz --cores 0 --input corpus/
323
+ ```
324
+
325
+ ### Multi-Core Fuzzing
326
+
327
+ ```bash
328
+ ./fuzz --cores 0,8-15 --input corpus/
329
+ ```
330
+
331
+ This runs 9 clients: one on core 0, and 8 on cores 8-15.
332
+
333
+ ### With Options
334
+
335
+ ```bash
336
+ ./fuzz --cores 0-7 --input corpus/ --output crashes/ --timeout 1000
337
+ ```
338
+
339
+ ### Text User Interface (TUI)
340
+
341
+ Enable graphical statistics view:
342
+
343
+ ```bash
344
+ ./fuzz -tui=1 corpus/
345
+ ```
346
+
347
+ ### Interpreting Output
348
+
349
+ | Output | Meaning |
350
+ |--------|---------|
351
+ | `corpus: N` | Number of interesting test cases found |
352
+ | `objectives: N` | Number of crashes/timeouts found |
353
+ | `executions: N` | Total number of target invocations |
354
+ | `exec/sec: N` | Current execution throughput |
355
+ | `edges: X%` | Code coverage percentage |
356
+ | `clients: N` | Number of parallel fuzzing processes |
357
+
358
+ The fuzzer emits two main event types:
359
+ - **UserStats** - Regular heartbeat with current statistics
360
+ - **Testcase** - New interesting input discovered
361
+
362
+ ## Advanced Usage
363
+
364
+ ### Tips and Tricks
365
+
366
+ | Tip | Why It Helps |
367
+ |-----|--------------|
368
+ | Use `-fork=1 -ignore_crashes=1` | Continue fuzzing after first crash |
369
+ | Use `InMemoryOnDiskCorpus` | Persist corpus across restarts |
370
+ | Enable TUI with `-tui=1` | Better visualization of progress |
371
+ | Use specific LLVM version | Avoid compatibility issues |
372
+ | Set `RUSTFLAGS` correctly | Prevent linking errors |
373
+
374
+ ### Crash Deduplication
375
+
376
+ Avoid storing duplicate crashes from the same bug:
377
+
378
+ **Add backtrace observer:**
379
+ ```rust
380
+ let backtrace_observer = BacktraceObserver::owned(
381
+ "BacktraceObserver",
382
+ libafl::observers::HarnessType::InProcess
383
+ );
384
+ ```
385
+
386
+ **Update executor:**
387
+ ```rust
388
+ let mut executor = InProcessExecutor::with_timeout(
389
+ &mut harness,
390
+ tuple_list!(edges_observer, time_observer, backtrace_observer),
391
+ &mut fuzzer,
392
+ &mut state,
393
+ &mut restarting_mgr,
394
+ timeout,
395
+ )?;
396
+ ```
397
+
398
+ **Update objective with hash feedback:**
399
+ ```rust
400
+ let mut objective = feedback_and!(
401
+ feedback_or_fast!(CrashFeedback::new(), TimeoutFeedback::new()),
402
+ NewHashFeedback::new(&backtrace_observer)
403
+ );
404
+ ```
405
+
406
+ This ensures only crashes with unique backtraces are saved.
407
+
408
+ ### Dictionary Fuzzing
409
+
410
+ Use dictionaries to guide fuzzing toward specific tokens:
411
+
412
+ **Add tokens from file:**
413
+ ```rust
414
+ let mut tokens = Tokens::new();
415
+ if let Some(tokenfile) = &tokenfile {
416
+ tokens.add_from_file(tokenfile)?;
417
+ }
418
+ state.add_metadata(tokens);
419
+ ```
420
+
421
+ **Update mutator:**
422
+ ```rust
423
+ let mutator = StdScheduledMutator::new(
424
+ havoc_mutations().merge(tokens_mutations())
425
+ );
426
+ ```
427
+
428
+ **Hard-coded tokens example (PNG):**
429
+ ```rust
430
+ state.add_metadata(Tokens::from([
431
+ vec![137, 80, 78, 71, 13, 10, 26, 10], // PNG header
432
+ "IHDR".as_bytes().to_vec(),
433
+ "IDAT".as_bytes().to_vec(),
434
+ "PLTE".as_bytes().to_vec(),
435
+ "IEND".as_bytes().to_vec(),
436
+ ]));
437
+ ```
438
+
439
+ > **See Also:** For detailed dictionary creation strategies and format-specific dictionaries,
440
+ > see the **fuzzing-dictionaries** technique skill.
441
+
442
+ ### Auto Tokens
443
+
444
+ Automatically extract magic values and checksums from the program:
445
+
446
+ **Enable in compiler wrapper:**
447
+ ```rust
448
+ cc.add_pass(LLVMPasses::AutoTokens)
449
+ ```
450
+
451
+ **Load auto tokens in fuzzer:**
452
+ ```rust
453
+ tokens += libafl_targets::autotokens()?;
454
+ ```
455
+
456
+ **Verify tokens section:**
457
+ ```bash
458
+ echo "p (uint8_t *)__token_start" | gdb fuzz
459
+ ```
460
+
461
+ ### Performance Tuning
462
+
463
+ | Setting | Impact |
464
+ |---------|--------|
465
+ | Multi-core fuzzing | Linear speedup with cores |
466
+ | `InMemoryCorpus` | Faster but non-persistent |
467
+ | `InMemoryOnDiskCorpus` | Balanced speed and persistence |
468
+ | Sanitizers | 2-5x slowdown, essential for bugs |
469
+ | Optimization level `-O2` | Balance between speed and coverage |
470
+
471
+ ### Debugging Fuzzer
472
+
473
+ Run fuzzer in single-process mode for easier debugging:
474
+
475
+ ```rust
476
+ // Replace launcher with direct call
477
+ run_client(None, SimpleEventManager::new(monitor), 0).unwrap();
478
+
479
+ // Comment out:
480
+ // Launcher::builder()
481
+ // .run_client(&mut run_client)
482
+ // ...
483
+ // .launch()
484
+ ```
485
+
486
+ Then debug with GDB:
487
+ ```bash
488
+ gdb --args ./fuzz --cores 0 --input corpus/
489
+ ```
490
+
491
+ ## Real-World Examples
492
+
493
+ ### Example: libpng
494
+
495
+ Fuzzing libpng using LibAFL:
496
+
497
+ **1. Get source code:**
498
+ ```bash
499
+ curl -L -O https://downloads.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.xz
500
+ tar xf libpng-1.6.37.tar.xz
501
+ cd libpng-1.6.37/
502
+ apt install zlib1g-dev
503
+ ```
504
+
505
+ **2. Set compiler wrapper:**
506
+ ```bash
507
+ export FUZZER_CARGO_DIR="/path/to/libafl/project"
508
+ export CC=$FUZZER_CARGO_DIR/target/release/libafl_cc
509
+ export CXX=$FUZZER_CARGO_DIR/target/release/libafl_cxx
510
+ ```
511
+
512
+ **3. Build static library:**
513
+ ```bash
514
+ ./configure --enable-shared=no
515
+ make
516
+ ```
517
+
518
+ **4. Get harness:**
519
+ ```bash
520
+ curl -O https://raw.githubusercontent.com/glennrp/libpng/f8e5fa92b0e37ab597616f554bee254157998227/contrib/oss-fuzz/libpng_read_fuzzer.cc
521
+ ```
522
+
523
+ **5. Link fuzzer:**
524
+ ```bash
525
+ $CXX libpng_read_fuzzer.cc .libs/libpng16.a -lz -o fuzz
526
+ ```
527
+
528
+ **6. Prepare seeds:**
529
+ ```bash
530
+ mkdir seeds/
531
+ curl -o seeds/input.png https://raw.githubusercontent.com/glennrp/libpng/acfd50ae0ba3198ad734e5d4dec2b05341e50924/contrib/pngsuite/iftp1n3p08.png
532
+ ```
533
+
534
+ **7. Get dictionary (optional):**
535
+ ```bash
536
+ curl -O https://raw.githubusercontent.com/glennrp/libpng/2fff013a6935967960a5ae626fc21432807933dd/contrib/oss-fuzz/png.dict
537
+ ```
538
+
539
+ **8. Start fuzzing:**
540
+ ```bash
541
+ ./fuzz --input seeds/ --cores 0 -x png.dict
542
+ ```
543
+
544
+ ### Example: CMake Project
545
+
546
+ Integrate LibAFL with CMake build system:
547
+
548
+ **CMakeLists.txt:**
549
+ ```cmake
550
+ project(BuggyProgram)
551
+ cmake_minimum_required(VERSION 3.0)
552
+
553
+ add_executable(buggy_program main.cc)
554
+
555
+ add_executable(fuzz main.cc harness.cc)
556
+ target_compile_definitions(fuzz PRIVATE NO_MAIN=1)
557
+ target_compile_options(fuzz PRIVATE -g -O2)
558
+ ```
559
+
560
+ **Build non-instrumented binary:**
561
+ ```bash
562
+ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .
563
+ cmake --build . --target buggy_program
564
+ ```
565
+
566
+ **Build fuzzer:**
567
+ ```bash
568
+ export FUZZER_CARGO_DIR="/path/to/libafl/project"
569
+ cmake -DCMAKE_C_COMPILER=$FUZZER_CARGO_DIR/target/release/libafl_cc \
570
+ -DCMAKE_CXX_COMPILER=$FUZZER_CARGO_DIR/target/release/libafl_cxx .
571
+ cmake --build . --target fuzz
572
+ ```
573
+
574
+ **Run fuzzing:**
575
+ ```bash
576
+ ./fuzz --input seeds/ --cores 0
577
+ ```
578
+
579
+ ## Troubleshooting
580
+
581
+ | Problem | Cause | Solution |
582
+ |---------|-------|----------|
583
+ | No coverage increases | Instrumentation failed | Verify compiler wrapper used, check for `-fsanitize-coverage` |
584
+ | Fuzzer won't start | Empty corpus with no interesting inputs | Provide seed inputs that trigger code paths |
585
+ | Linker errors with `libafl_main` | Runtime not linked | Use `-Wl,--whole-archive` or `-u libafl_main` |
586
+ | LLVM version mismatch | LibAFL requires LLVM 15-18 | Install compatible LLVM version, set environment variables |
587
+ | Rust compilation fails | Outdated Rust or Cargo | Update Rust with `rustup update` |
588
+ | Slow fuzzing | Sanitizers enabled | Expected 2-5x slowdown, necessary for finding bugs |
589
+ | Environment variable interference | `CC`, `CXX`, `RUSTFLAGS` set | Unset after building LibAFL project |
590
+ | Cannot attach debugger | Multi-process fuzzing | Run in single-process mode (see Debugging section) |
591
+
592
+ ## Related Skills
593
+
594
+ ### Technique Skills
595
+
596
+ | Skill | Use Case |
597
+ |-------|----------|
598
+ | **fuzz-harness-writing** | Detailed guidance on writing effective harnesses |
599
+ | **address-sanitizer** | Memory error detection during fuzzing |
600
+ | **undefined-behavior-sanitizer** | Undefined behavior detection |
601
+ | **coverage-analysis** | Measuring and improving code coverage |
602
+ | **fuzzing-corpus** | Building and managing seed corpora |
603
+ | **fuzzing-dictionaries** | Creating dictionaries for format-aware fuzzing |
604
+
605
+ ### Related Fuzzers
606
+
607
+ | Skill | When to Consider |
608
+ |-------|------------------|
609
+ | **libfuzzer** | Simpler setup, don't need LibAFL's advanced features |
610
+ | **aflpp** | Multi-core fuzzing without custom fuzzer development |
611
+ | **cargo-fuzz** | Fuzzing Rust projects with less setup |
612
+
613
+ ## Resources
614
+
615
+ ### Official Documentation
616
+
617
+ - [LibAFL Book](https://aflplus.plus/libafl-book/) - Official handbook with comprehensive documentation
618
+ - [LibAFL GitHub](https://github.com/AFLplusplus/LibAFL) - Source code and examples
619
+ - [LibAFL API Documentation](https://docs.rs/libafl/latest/libafl/) - Rust API reference
620
+
621
+ ### Examples and Tutorials
622
+
623
+ - [LibAFL Examples](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers) - Collection of example fuzzers
624
+ - [cargo-fuzz with LibAFL](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/fuzz_anything/cargo_fuzz) - Using LibAFL as cargo-fuzz backend
625
+ - [Testing Handbook LibAFL Examples](https://github.com/trailofbits/testing-handbook/tree/main/materials/fuzzing/libafl) - Complete working examples from this handbook