@elizaos/skills 2.0.0-alpha.10

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 (291) hide show
  1. package/README.md +126 -0
  2. package/dist/formatter.d.ts +44 -0
  3. package/dist/formatter.d.ts.map +1 -0
  4. package/dist/formatter.js +182 -0
  5. package/dist/frontmatter.d.ts +39 -0
  6. package/dist/frontmatter.d.ts.map +1 -0
  7. package/dist/frontmatter.js +105 -0
  8. package/dist/index.d.ts +29 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +31 -0
  11. package/dist/loader.d.ts +33 -0
  12. package/dist/loader.d.ts.map +1 -0
  13. package/dist/loader.js +362 -0
  14. package/dist/resolver.d.ts +18 -0
  15. package/dist/resolver.d.ts.map +1 -0
  16. package/dist/resolver.js +90 -0
  17. package/dist/types.d.ts +201 -0
  18. package/dist/types.d.ts.map +1 -0
  19. package/dist/types.js +1 -0
  20. package/package.json +57 -0
  21. package/skills/1password/SKILL.md +70 -0
  22. package/skills/1password/references/cli-examples.md +29 -0
  23. package/skills/1password/references/get-started.md +17 -0
  24. package/skills/apple-notes/SKILL.md +77 -0
  25. package/skills/apple-reminders/SKILL.md +96 -0
  26. package/skills/bear-notes/SKILL.md +107 -0
  27. package/skills/bird/SKILL.md +224 -0
  28. package/skills/blogwatcher/SKILL.md +69 -0
  29. package/skills/blucli/SKILL.md +47 -0
  30. package/skills/bluebubbles/SKILL.md +131 -0
  31. package/skills/camsnap/SKILL.md +45 -0
  32. package/skills/canvas/SKILL.md +203 -0
  33. package/skills/clawhub/SKILL.md +77 -0
  34. package/skills/coding-agent/SKILL.md +284 -0
  35. package/skills/discord/SKILL.md +578 -0
  36. package/skills/eightctl/SKILL.md +50 -0
  37. package/skills/food-order/SKILL.md +48 -0
  38. package/skills/gemini/SKILL.md +43 -0
  39. package/skills/gifgrep/SKILL.md +79 -0
  40. package/skills/github/SKILL.md +77 -0
  41. package/skills/gog/SKILL.md +116 -0
  42. package/skills/goplaces/SKILL.md +52 -0
  43. package/skills/healthcheck/SKILL.md +245 -0
  44. package/skills/himalaya/SKILL.md +257 -0
  45. package/skills/himalaya/references/configuration.md +184 -0
  46. package/skills/himalaya/references/message-composition.md +199 -0
  47. package/skills/imsg/SKILL.md +74 -0
  48. package/skills/local-places/SERVER_README.md +101 -0
  49. package/skills/local-places/SKILL.md +102 -0
  50. package/skills/local-places/pyproject.toml +21 -0
  51. package/skills/local-places/src/local_places/__init__.py +2 -0
  52. package/skills/local-places/src/local_places/google_places.py +314 -0
  53. package/skills/local-places/src/local_places/main.py +65 -0
  54. package/skills/local-places/src/local_places/schemas.py +107 -0
  55. package/skills/mcporter/SKILL.md +61 -0
  56. package/skills/model-usage/SKILL.md +69 -0
  57. package/skills/model-usage/references/codexbar-cli.md +33 -0
  58. package/skills/model-usage/scripts/model_usage.py +310 -0
  59. package/skills/nano-banana-pro/SKILL.md +58 -0
  60. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  61. package/skills/nano-pdf/SKILL.md +38 -0
  62. package/skills/notion/SKILL.md +172 -0
  63. package/skills/obsidian/SKILL.md +81 -0
  64. package/skills/openai-image-gen/SKILL.md +89 -0
  65. package/skills/openai-image-gen/scripts/gen.py +240 -0
  66. package/skills/openai-whisper/SKILL.md +38 -0
  67. package/skills/openai-whisper-api/SKILL.md +52 -0
  68. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  69. package/skills/openhue/SKILL.md +51 -0
  70. package/skills/oracle/SKILL.md +125 -0
  71. package/skills/ordercli/SKILL.md +78 -0
  72. package/skills/peekaboo/SKILL.md +190 -0
  73. package/skills/sag/SKILL.md +87 -0
  74. package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
  75. package/skills/security-ask-questions-if-underspecified/README.md +24 -0
  76. package/skills/security-ask-questions-if-underspecified/SKILL.md +85 -0
  77. package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
  78. package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
  79. package/skills/security-audit-context-building/README.md +58 -0
  80. package/skills/security-audit-context-building/SKILL.md +297 -0
  81. package/skills/security-audit-context-building/commands/audit-context.md +21 -0
  82. package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
  83. package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
  84. package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
  85. package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
  86. package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
  87. package/skills/security-building-secure-contracts/README.md +241 -0
  88. package/skills/security-building-secure-contracts/SKILL.md +67 -0
  89. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
  90. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
  91. package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
  92. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
  93. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
  94. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
  95. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
  96. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
  97. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
  98. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
  99. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
  100. package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
  101. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
  102. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
  103. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
  104. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
  105. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
  106. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
  107. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
  108. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
  109. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
  110. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
  111. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
  112. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
  113. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
  114. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
  115. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
  116. package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
  117. package/skills/security-differential-review/README.md +109 -0
  118. package/skills/security-differential-review/SKILL.md +220 -0
  119. package/skills/security-differential-review/commands/diff-review.md +21 -0
  120. package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
  121. package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
  122. package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
  123. package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
  124. package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
  125. package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
  126. package/skills/security-entry-point-analyzer/README.md +74 -0
  127. package/skills/security-entry-point-analyzer/SKILL.md +251 -0
  128. package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
  129. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
  130. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
  131. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
  132. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
  133. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
  134. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
  135. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
  136. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
  137. package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
  138. package/skills/security-fix-review/README.md +118 -0
  139. package/skills/security-fix-review/SKILL.md +264 -0
  140. package/skills/security-fix-review/commands/fix-review.md +24 -0
  141. package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
  142. package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
  143. package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
  144. package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
  145. package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
  146. package/skills/security-insecure-defaults/README.md +45 -0
  147. package/skills/security-insecure-defaults/SKILL.md +117 -0
  148. package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
  149. package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
  150. package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
  151. package/skills/security-modern-python/README.md +58 -0
  152. package/skills/security-modern-python/SKILL.md +333 -0
  153. package/skills/security-modern-python/hooks/hooks.json +16 -0
  154. package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
  155. package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
  156. package/skills/security-modern-python/hooks/test_helper.bash +75 -0
  157. package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
  158. package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
  159. package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
  160. package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
  161. package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
  162. package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
  163. package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
  164. package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
  165. package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
  166. package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
  167. package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
  168. package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
  169. package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
  170. package/skills/security-property-based-testing/README.md +47 -0
  171. package/skills/security-property-based-testing/SKILL.md +109 -0
  172. package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
  173. package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
  174. package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
  175. package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
  176. package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
  177. package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
  178. package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
  179. package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
  180. package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
  181. package/skills/semgrep-rule-creator/README.md +43 -0
  182. package/skills/semgrep-rule-creator/SKILL.md +168 -0
  183. package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
  184. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
  185. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
  186. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
  187. package/skills/session-logs/SKILL.md +115 -0
  188. package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
  189. package/skills/sharp-edges/README.md +48 -0
  190. package/skills/sharp-edges/SKILL.md +292 -0
  191. package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
  192. package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
  193. package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
  194. package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
  195. package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
  196. package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
  197. package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
  198. package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
  199. package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
  200. package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
  201. package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
  202. package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
  203. package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
  204. package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
  205. package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
  206. package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
  207. package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
  208. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  209. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  210. package/skills/skill-creator/SKILL.md +370 -0
  211. package/skills/skill-creator/license.txt +202 -0
  212. package/skills/skill-creator/scripts/init_skill.py +378 -0
  213. package/skills/skill-creator/scripts/package_skill.py +111 -0
  214. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  215. package/skills/slack/SKILL.md +144 -0
  216. package/skills/songsee/SKILL.md +49 -0
  217. package/skills/sonoscli/SKILL.md +46 -0
  218. package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
  219. package/skills/spec-to-code-compliance/README.md +67 -0
  220. package/skills/spec-to-code-compliance/SKILL.md +349 -0
  221. package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
  222. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
  223. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
  224. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
  225. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
  226. package/skills/spotify-player/SKILL.md +64 -0
  227. package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
  228. package/skills/static-analysis/README.md +59 -0
  229. package/skills/static-analysis/SKILL.md +91 -0
  230. package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
  231. package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
  232. package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
  233. package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
  234. package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
  235. package/skills/summarize/SKILL.md +87 -0
  236. package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
  237. package/skills/testing-handbook-skills/README.md +241 -0
  238. package/skills/testing-handbook-skills/SKILL.md +104 -0
  239. package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
  240. package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
  241. package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
  242. package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
  243. package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
  244. package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
  245. package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
  246. package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
  247. package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
  248. package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
  249. package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
  250. package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
  251. package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
  252. package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
  253. package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
  254. package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
  255. package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
  256. package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
  257. package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
  258. package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
  259. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
  260. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
  261. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
  262. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
  263. package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
  264. package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
  265. package/skills/things-mac/SKILL.md +86 -0
  266. package/skills/tmux/SKILL.md +135 -0
  267. package/skills/tmux/scripts/find-sessions.sh +112 -0
  268. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  269. package/skills/trello/SKILL.md +95 -0
  270. package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
  271. package/skills/variant-analysis/README.md +41 -0
  272. package/skills/variant-analysis/SKILL.md +142 -0
  273. package/skills/variant-analysis/commands/variants.md +23 -0
  274. package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
  275. package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
  276. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
  277. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
  278. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
  279. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
  280. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
  281. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
  282. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
  283. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
  284. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
  285. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
  286. package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
  287. package/skills/video-frames/SKILL.md +46 -0
  288. package/skills/video-frames/scripts/frame.sh +81 -0
  289. package/skills/voice-call/SKILL.md +45 -0
  290. package/skills/wacli/SKILL.md +72 -0
  291. package/skills/weather/SKILL.md +54 -0
@@ -0,0 +1,155 @@
1
+ # Solana Entry Point Detection
2
+
3
+ ## Entry Point Identification (State-Changing Only)
4
+
5
+ In Solana, most program instructions modify state. **Exclude** view-only patterns:
6
+ - Instructions that only read account data without `mut` references
7
+ - Pure computation functions that don't write to accounts
8
+
9
+ ### Native Solana Programs
10
+ ```rust
11
+ // Single entrypoint macro
12
+ entrypoint!(process_instruction);
13
+
14
+ pub fn process_instruction(
15
+ program_id: &Pubkey,
16
+ accounts: &[AccountInfo],
17
+ instruction_data: &[u8],
18
+ ) -> ProgramResult {
19
+ // Dispatch to handlers based on instruction_data
20
+ }
21
+ ```
22
+
23
+ ### Anchor Framework
24
+ ```rust
25
+ #[program]
26
+ mod my_program {
27
+ use super::*;
28
+
29
+ // Each pub fn is an entry point
30
+ pub fn initialize(ctx: Context<Initialize>) -> Result<()> { }
31
+ pub fn transfer(ctx: Context<Transfer>, amount: u64) -> Result<()> { }
32
+ }
33
+ ```
34
+
35
+ ### Entry Point Detection Rules
36
+ | Pattern | Include? | Notes |
37
+ |---------|----------|-------|
38
+ | `entrypoint!(fn_name)` | **Yes** | Native program entry |
39
+ | `pub fn` inside `#[program]` mod with `mut` accounts | **Yes** | Anchor state-changing |
40
+ | `pub fn` inside `#[program]` mod (view-only) | No | Exclude if no `mut` accounts |
41
+ | Functions in `processor.rs` matching instruction enum | **Yes** | Native pattern |
42
+ | Internal helper functions | No | Not externally callable |
43
+
44
+ ## Access Control Patterns
45
+
46
+ ### Anchor Constraints
47
+ ```rust
48
+ #[derive(Accounts)]
49
+ pub struct AdminOnly<'info> {
50
+ #[account(mut)]
51
+ pub admin: Signer<'info>,
52
+
53
+ #[account(
54
+ constraint = config.admin == admin.key() @ ErrorCode::Unauthorized
55
+ )]
56
+ pub config: Account<'info, Config>,
57
+ }
58
+ ```
59
+
60
+ ### Common Access Control Patterns
61
+ | Pattern | Classification |
62
+ |---------|----------------|
63
+ | `constraint = X.admin == signer.key()` | Admin |
64
+ | `constraint = X.owner == signer.key()` | Owner |
65
+ | `constraint = X.authority == signer.key()` | Authority (Admin-level) |
66
+ | `constraint = X.governance == signer.key()` | Governance |
67
+ | `constraint = X.guardian == signer.key()` | Guardian |
68
+ | `has_one = admin` | Admin |
69
+ | `has_one = owner` | Owner |
70
+ | `has_one = authority` | Authority |
71
+ | `Signer` account with no constraints | Review Required |
72
+
73
+ ### Native Access Control
74
+ ```rust
75
+ // Check signer
76
+ if !accounts[0].is_signer {
77
+ return Err(ProgramError::MissingRequiredSignature);
78
+ }
79
+
80
+ // Check specific authority
81
+ if accounts[0].key != &expected_authority {
82
+ return Err(ProgramError::InvalidAccountData);
83
+ }
84
+ ```
85
+
86
+ ### Access Control Macros (Anchor)
87
+ ```rust
88
+ #[access_control(is_admin(&ctx))]
89
+ pub fn admin_function(ctx: Context<AdminAction>) -> Result<()> { }
90
+
91
+ fn is_admin(ctx: &Context<AdminAction>) -> Result<()> {
92
+ require!(ctx.accounts.admin.key() == ADMIN_PUBKEY, Unauthorized);
93
+ Ok(())
94
+ }
95
+ ```
96
+
97
+ ## Contract-Only Detection (CPI Patterns)
98
+
99
+ ### Cross-Program Invocation Sources
100
+ ```rust
101
+ // Functions expected to be called via CPI
102
+ pub fn on_token_transfer(ctx: Context<TokenCallback>, amount: u64) -> Result<()> {
103
+ // Should verify calling program
104
+ require!(
105
+ ctx.accounts.calling_program.key() == expected_program::ID,
106
+ ErrorCode::InvalidCaller
107
+ );
108
+ }
109
+ ```
110
+
111
+ ### CPI Verification Patterns
112
+ ```rust
113
+ // Verify CPI caller
114
+ let calling_program = ctx.accounts.calling_program.key();
115
+ require!(calling_program == &spl_token::ID, InvalidCaller);
116
+
117
+ // Check instruction sysvar for CPI
118
+ let ix = load_current_index_checked(&ctx.accounts.instruction_sysvar)?;
119
+ ```
120
+
121
+ ## Extraction Strategy
122
+
123
+ 1. **Detect Framework**:
124
+ - Check `Cargo.toml` for `anchor-lang` → Anchor
125
+ - Check for `entrypoint!` macro → Native
126
+
127
+ 2. **For Anchor**:
128
+ - Find `#[program]` module
129
+ - Extract all `pub fn` within it
130
+ - Parse `#[derive(Accounts)]` structs for constraints
131
+
132
+ 3. **For Native**:
133
+ - Find instruction enum (usually in `instruction.rs`)
134
+ - Map variants to handler functions in `processor.rs`
135
+ - Check each handler for signer/authority checks
136
+
137
+ 4. **Classify**:
138
+ - No authority constraints → Public (Unrestricted)
139
+ - `has_one`, `constraint` with authority → Role-based
140
+ - CPI-only patterns → Contract-Only
141
+
142
+ ## Solana-Specific Considerations
143
+
144
+ 1. **Account Validation**: Access control often via account constraints, not function-level
145
+ 2. **PDA Authority**: Program Derived Addresses can act as authorities
146
+ 3. **Signer vs Authority**: `Signer` alone doesn't mean admin—check what the signer controls
147
+ 4. **Instruction Data**: Native programs dispatch based on instruction discriminator
148
+
149
+ ## Common Gotchas
150
+
151
+ 1. **Initialize Patterns**: `is_initialized` checks—first caller may set authority
152
+ 2. **Upgrade Authority**: Programs can be upgraded—check upgrade authority
153
+ 3. **Multisig**: Some operations require multiple signers
154
+ 4. **CPI Safety**: Functions callable via CPI should verify calling program
155
+ 5. **Freeze Authority**: Token accounts may have freeze authority
@@ -0,0 +1,135 @@
1
+ # Solidity Entry Point Detection
2
+
3
+ ## Entry Point Identification (State-Changing Only)
4
+
5
+ ### Include: State-Changing Functions
6
+ ```solidity
7
+ function name() external { } // State-changing entry point
8
+ function name() external payable { } // State-changing, receives ETH
9
+ function name() public { } // State-changing entry point
10
+ ```
11
+
12
+ ### Exclude: Read-Only Functions
13
+ ```solidity
14
+ function name() external view { } // EXCLUDE - cannot modify state
15
+ function name() external pure { } // EXCLUDE - no state access
16
+ function name() public view { } // EXCLUDE - cannot modify state
17
+ ```
18
+
19
+ ### Visibility and Mutability Matrix
20
+ | Visibility | Mutability | Include? | Notes |
21
+ |------------|------------|----------|-------|
22
+ | `external` | (none) | **Yes** | State-changing entry point |
23
+ | `external` | `payable` | **Yes** | State-changing, receives ETH |
24
+ | `external` | `view` | No | Read-only, exclude |
25
+ | `external` | `pure` | No | No state access, exclude |
26
+ | `public` | (none) | **Yes** | State-changing entry point |
27
+ | `public` | `payable` | **Yes** | State-changing, receives ETH |
28
+ | `public` | `view` | No | Read-only, exclude |
29
+ | `public` | `pure` | No | No state access, exclude |
30
+ | `internal` | any | No | Not externally callable |
31
+ | `private` | any | No | Not externally callable |
32
+
33
+ ### Special Entry Points
34
+ - `receive() external payable` — Receives plain ETH transfers
35
+ - `fallback() external` — Catches unmatched function calls
36
+ - `constructor()` — One-time initialization (not recurring entry point)
37
+
38
+ ## Access Control Patterns
39
+
40
+ ### OpenZeppelin Patterns
41
+ ```solidity
42
+ // Ownable
43
+ modifier onlyOwner() { require(msg.sender == owner); }
44
+
45
+ // AccessControl
46
+ modifier onlyRole(bytes32 role) { require(hasRole(role, msg.sender)); }
47
+
48
+ // Common role constants
49
+ bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
50
+ bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
51
+ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
52
+ ```
53
+
54
+ ### Common Modifier Names → Role Classification
55
+ | Modifier Pattern | Classification |
56
+ |------------------|----------------|
57
+ | `onlyOwner` | Admin/Owner |
58
+ | `onlyAdmin` | Admin |
59
+ | `onlyRole(ADMIN_ROLE)` | Admin |
60
+ | `onlyRole(GOVERNANCE_ROLE)` | Governance |
61
+ | `onlyGovernance` | Governance |
62
+ | `onlyGuardian` | Guardian |
63
+ | `onlyPauser`, `whenNotPaused` | Guardian/Pauser |
64
+ | `onlyMinter` | Minter |
65
+ | `onlyOperator` | Operator |
66
+ | `onlyKeeper` | Keeper |
67
+ | `onlyRelayer` | Relayer |
68
+ | `onlyStrategy`, `onlyStrategist` | Strategist |
69
+ | `onlyVault` | Contract-Only |
70
+
71
+ ### Inline Access Control (Flag for Review)
72
+ ```solidity
73
+ require(msg.sender == someAddress, "..."); // Check who someAddress is
74
+ require(authorized[msg.sender], "..."); // Dynamic authorization
75
+ require(whitelist[msg.sender], "..."); // Whitelist pattern
76
+ if (msg.sender != admin) revert(); // Inline admin check
77
+ ```
78
+
79
+ ## Contract-Only Detection
80
+
81
+ ### Callback Functions
82
+ ```solidity
83
+ // ERC token callbacks
84
+ function onERC721Received(...) external returns (bytes4)
85
+ function onERC1155Received(...) external returns (bytes4)
86
+ function onERC1155BatchReceived(...) external returns (bytes4)
87
+
88
+ // DeFi callbacks
89
+ function uniswapV3SwapCallback(...) external
90
+ function uniswapV3MintCallback(...) external
91
+ function pancakeV3SwapCallback(...) external
92
+ function algebraSwapCallback(...) external
93
+
94
+ // Flash loan callbacks
95
+ function onFlashLoan(...) external returns (bytes32)
96
+ function executeOperation(...) external returns (bool) // Aave
97
+ function receiveFlashLoan(...) external // Balancer
98
+ ```
99
+
100
+ ### Contract-Caller Checks
101
+ ```solidity
102
+ require(msg.sender == address(pool), "..."); // Specific contract
103
+ require(msg.sender != tx.origin, "..."); // Must be contract
104
+ require(tx.origin != msg.sender); // No EOA calls
105
+ ```
106
+
107
+ ## Extraction Strategy
108
+
109
+ 1. Parse all `.sol` files
110
+ 2. For each contract/interface/abstract:
111
+ - Extract `external` and `public` functions
112
+ - **Skip** functions with `view` or `pure` modifiers
113
+ - Record function signature: `name(paramTypes)`
114
+ - Record line number
115
+ - Extract all modifiers applied
116
+ 3. Classify by modifiers:
117
+ - No access modifiers → Public (Unrestricted)
118
+ - Known role modifier → Appropriate role category
119
+ - Inline `require(msg.sender...)` → Review Required
120
+ - Callback pattern → Contract-Only
121
+
122
+ ## Inheritance Considerations
123
+
124
+ - Check parent contracts for modifier definitions
125
+ - A function may inherit access control from overridden function
126
+ - Abstract contracts may define modifiers used by children
127
+ - Interfaces define signatures but not access control
128
+
129
+ ## Common Gotchas
130
+
131
+ 1. **Initializers**: `initialize()` often has `initializer` modifier but may be unrestricted on first call
132
+ 2. **Proxies**: Implementation contracts may have different access patterns than proxies
133
+ 3. **Upgrades**: `upgradeTo()`, `upgradeToAndCall()` are high-privilege
134
+ 4. **Multicall**: `multicall(bytes[])` allows batching—check what it can call
135
+ 5. **Permit**: `permit()` functions enable gasless approvals—check EIP-2612 compliance
@@ -0,0 +1,185 @@
1
+ # TON Entry Point Detection (FunC/Tact)
2
+
3
+ ## Entry Point Identification (State-Changing Only)
4
+
5
+ Focus on message handlers that modify state. **Exclude** read-only patterns:
6
+ - `get` methods in FunC (pure getters)
7
+ - Receivers that only return data without state changes
8
+
9
+ ### FunC Entry Points
10
+ ```func
11
+ ;; Main entry point - receives all external messages
12
+ () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
13
+ ;; Dispatch based on op code
14
+ int op = in_msg_body~load_uint(32);
15
+ if (op == op::transfer) { handle_transfer(); }
16
+ }
17
+
18
+ ;; External messages (from outside blockchain)
19
+ () recv_external(slice in_msg) impure {
20
+ ;; Usually for wallet operations
21
+ }
22
+
23
+ ;; Tick-tock for special contracts
24
+ () run_ticktock(cell full_state, int is_tock) impure {
25
+ }
26
+ ```
27
+
28
+ ### Tact Entry Points
29
+ ```tact
30
+ contract MyContract {
31
+ // Receivers are entry points
32
+ receive(msg: Transfer) {
33
+ // Handle Transfer message
34
+ }
35
+
36
+ receive("increment") {
37
+ // Handle text message
38
+ }
39
+
40
+ // External receiver
41
+ external(msg: Deploy) {
42
+ // Handle external message
43
+ }
44
+
45
+ // Bounce handler
46
+ bounced(src: bounced<Transfer>) {
47
+ // Handle bounced message
48
+ }
49
+ }
50
+ ```
51
+
52
+ ### Entry Point Types
53
+ | Pattern | Include? | Notes |
54
+ |---------|----------|-------|
55
+ | `recv_internal` | **Yes** | All internal messages (state-changing) |
56
+ | `recv_external` | **Yes** | External (off-chain) messages |
57
+ | `receive(MsgType)` | **Yes** | Tact message handler |
58
+ | `external(MsgType)` | **Yes** | Tact external handler |
59
+ | `bounced(...)` | **Yes** | Bounce handler |
60
+ | `get` methods (FunC) | No | EXCLUDE - read-only getters |
61
+ | `get fun` (Tact) | No | EXCLUDE - read-only getters |
62
+ | Helper functions | No | Internal only |
63
+
64
+ ## Access Control Patterns
65
+
66
+ ### FunC Access Control
67
+ ```func
68
+ ;; Owner check
69
+ () check_owner() impure inline {
70
+ throw_unless(401, equal_slices(sender_address, owner_address));
71
+ }
72
+
73
+ ;; Admin check via stored address
74
+ () require_admin() impure inline {
75
+ var ds = get_data().begin_parse();
76
+ slice admin = ds~load_msg_addr();
77
+ throw_unless(403, equal_slices(sender_address, admin));
78
+ }
79
+ ```
80
+
81
+ ### Tact Access Control
82
+ ```tact
83
+ contract Owned {
84
+ owner: Address;
85
+
86
+ receive(msg: AdminAction) {
87
+ require(sender() == self.owner, "Not owner");
88
+ // ...
89
+ }
90
+
91
+ // Using traits
92
+ receive(msg: Transfer) {
93
+ self.requireOwner(); // From Ownable trait
94
+ // ...
95
+ }
96
+ }
97
+ ```
98
+
99
+ ### Op Code Dispatch Pattern (FunC)
100
+ ```func
101
+ () recv_internal(...) impure {
102
+ int op = in_msg_body~load_uint(32);
103
+
104
+ ;; Public operations
105
+ if (op == op::transfer) { return handle_transfer(); }
106
+ if (op == op::swap) { return handle_swap(); }
107
+
108
+ ;; Admin operations
109
+ if (op == op::set_fee) {
110
+ check_owner();
111
+ return handle_set_fee();
112
+ }
113
+ }
114
+ ```
115
+
116
+ ### Access Control Classification
117
+ | Pattern | Classification |
118
+ |---------|----------------|
119
+ | `equal_slices(sender, owner)` | Owner |
120
+ | `equal_slices(sender, admin)` | Admin |
121
+ | `require(sender() == self.owner)` | Owner |
122
+ | `self.requireOwner()` | Owner |
123
+ | `throw_unless(X, equal_slices(...))` | Check error code context |
124
+ | No sender check for op code | Public (Unrestricted) |
125
+
126
+ ## Contract-Only Detection
127
+
128
+ ### Callback Patterns
129
+ ```func
130
+ ;; Jetton transfer notification
131
+ () on_jetton_transfer(...) impure {
132
+ ;; Should verify sender is jetton wallet
133
+ }
134
+
135
+ ;; NFT callbacks
136
+ () on_nft_transfer(...) impure {
137
+ }
138
+ ```
139
+
140
+ ### Contract Verification
141
+ ```func
142
+ ;; Verify caller is expected contract
143
+ () verify_caller(slice expected) impure inline {
144
+ throw_unless(402, equal_slices(sender_address, expected));
145
+ }
146
+ ```
147
+
148
+ ## Extraction Strategy
149
+
150
+ ### FunC
151
+ 1. Parse `.fc` / `.func` files
152
+ 2. Find `recv_internal` and `recv_external` functions
153
+ 3. Extract op code dispatch table:
154
+ - Map op codes to handler functions
155
+ - Check each handler for owner/admin checks
156
+ 4. Classify:
157
+ - Op codes with no access check → Public
158
+ - Op codes with `check_owner`/similar → Role-based
159
+ - Callbacks → Contract-Only
160
+
161
+ ### Tact
162
+ 1. Parse `.tact` files
163
+ 2. Find `contract` declarations
164
+ 3. Extract all `receive`, `external`, `bounced` handlers
165
+ - **Skip** `get fun` declarations (read-only getters)
166
+ 4. Check handler body for:
167
+ - `require(sender() == self.X)` → Role-based
168
+ - `self.requireOwner()` → Owner
169
+ - No sender validation → Public (Unrestricted)
170
+
171
+ ## TON-Specific Considerations
172
+
173
+ 1. **Message-Based**: All interactions are via messages with op codes
174
+ 2. **Workchains**: Check if contract operates on specific workchain
175
+ 3. **Bounced Messages**: Handle bounced messages appropriately
176
+ 4. **Gas Management**: `accept_message()` in FunC accepts gas payment
177
+ 5. **State Init**: Initial deployment may set owner/admin
178
+
179
+ ## Common Gotchas
180
+
181
+ 1. **Op Code Collisions**: Different contracts may use same op codes
182
+ 2. **Proxy Patterns**: Some contracts forward messages
183
+ 3. **Wallet Contracts**: Special access control for wallet operations
184
+ 4. **Masterchain**: Some operations require masterchain deployment
185
+ 5. **Query ID**: Track request/response with query_id
@@ -0,0 +1,141 @@
1
+ # Vyper Entry Point Detection
2
+
3
+ ## Entry Point Identification (State-Changing Only)
4
+
5
+ ### Include: State-Changing Functions
6
+ ```vyper
7
+ @external # State-changing entry point
8
+ def function_name():
9
+ pass
10
+
11
+ @external
12
+ @payable # State-changing, receives ETH
13
+ def payable_function():
14
+ pass
15
+
16
+ @external
17
+ @nonreentrant("lock") # State-changing with reentrancy protection
18
+ def protected():
19
+ pass
20
+ ```
21
+
22
+ ### Exclude: Read-Only Functions
23
+ ```vyper
24
+ @external
25
+ @view # EXCLUDE - cannot modify state
26
+ def read_only():
27
+ pass
28
+
29
+ @external
30
+ @pure # EXCLUDE - no state access
31
+ def pure_function():
32
+ pass
33
+ ```
34
+
35
+ ### Decorator Matrix
36
+ | Decorators | Include? | Notes |
37
+ |------------|----------|-------|
38
+ | `@external` | **Yes** | State-changing entry point |
39
+ | `@external @payable` | **Yes** | State-changing, receives ETH |
40
+ | `@external @nonreentrant` | **Yes** | State-changing with protection |
41
+ | `@external @view` | No | Read-only, exclude |
42
+ | `@external @pure` | No | No state access, exclude |
43
+ | `@internal` | No | Not externally callable |
44
+ | `@deploy` | No | Constructor (Vyper 0.4+) |
45
+
46
+ ### Special Entry Points
47
+ ```vyper
48
+ @external
49
+ @payable
50
+ def __default__(): # Fallback function (receives ETH + unmatched calls)
51
+ pass
52
+ ```
53
+
54
+ ## Access Control Patterns
55
+
56
+ ### Owner Pattern
57
+ ```vyper
58
+ owner: public(address)
59
+
60
+ @external
61
+ def restricted_function():
62
+ assert msg.sender == self.owner, "Not owner"
63
+ # ...
64
+ ```
65
+
66
+ ### Role-Based Patterns
67
+ ```vyper
68
+ # Common patterns
69
+ admin: public(address)
70
+ governance: public(address)
71
+ guardian: public(address)
72
+ operator: public(address)
73
+
74
+ # Mapping-based roles
75
+ authorized: public(HashMap[address, bool])
76
+ minters: public(HashMap[address, bool])
77
+
78
+ @external
79
+ def mint(to: address, amount: uint256):
80
+ assert self.minters[msg.sender], "Not minter"
81
+ # ...
82
+ ```
83
+
84
+ ### Access Control Classification
85
+ | Pattern | Classification |
86
+ |---------|----------------|
87
+ | `assert msg.sender == self.owner` | Admin/Owner |
88
+ | `assert msg.sender == self.admin` | Admin |
89
+ | `assert msg.sender == self.governance` | Governance |
90
+ | `assert msg.sender == self.guardian` | Guardian |
91
+ | `assert self.authorized[msg.sender]` | Review Required |
92
+ | `assert self.whitelist[msg.sender]` | Review Required |
93
+
94
+ ## Contract-Only Detection
95
+
96
+ ### Callback Functions
97
+ ```vyper
98
+ @external
99
+ def onERC721Received(...) -> bytes4:
100
+ return method_id("onERC721Received(address,address,uint256,bytes)")
101
+
102
+ @external
103
+ def uniswapV3SwapCallback(amount0: int256, amount1: int256, data: Bytes[...]):
104
+ # Must verify caller is the pool
105
+ pass
106
+ ```
107
+
108
+ ### Contract-Caller Checks
109
+ ```vyper
110
+ assert msg.sender == self.pool, "Only pool"
111
+ assert msg.sender != tx.origin, "No EOA" # Vyper 0.3.7+
112
+ ```
113
+
114
+ ## Extraction Strategy
115
+
116
+ 1. Parse all `.vy` files
117
+ 2. For each function:
118
+ - Check for `@external` decorator
119
+ - **Skip** functions with `@view` or `@pure` decorators
120
+ - Record function name and parameters
121
+ - Record line number
122
+ - Check for access control assertions in function body
123
+ 3. Classify:
124
+ - No access assertions → Public (Unrestricted)
125
+ - `msg.sender == self.X` → Check what X is
126
+ - `self.mapping[msg.sender]` → Review Required
127
+ - Known callback name → Contract-Only
128
+
129
+ ## Vyper-Specific Considerations
130
+
131
+ 1. **No Modifiers**: Vyper doesn't have modifiers—access control is inline `assert` statements
132
+ 2. **No Inheritance**: Each contract is standalone (interfaces only)
133
+ 3. **Explicit is Better**: All visibility must be declared explicitly
134
+ 4. **Default Internal**: Functions without decorators are internal
135
+
136
+ ## Common Gotchas
137
+
138
+ 1. **Initializer Pattern**: Look for `initialized: bool` flag with one-time setup
139
+ 2. **Raw Calls**: `raw_call()` can delegate to other contracts
140
+ 3. **Create Functions**: `create_minimal_proxy_to()`, `create_copy_of()` are factory patterns
141
+ 4. **Reentrancy**: `@nonreentrant` protects against reentrancy but function is still entry point
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "fix-review",
3
+ "version": "0.1.0",
4
+ "description": "Verifies that code changes address security audit findings without introducing bugs",
5
+ "author": {
6
+ "name": "Trail of Bits",
7
+ "email": "opensource@trailofbits.com",
8
+ "url": "https://www.trailofbits.com"
9
+ },
10
+ "repository": "https://github.com/trailofbits/skills",
11
+ "license": "CC-BY-SA-4.0",
12
+ "keywords": ["security", "audit", "remediation", "fix-review"]
13
+ }