@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.
- package/README.md +126 -0
- package/dist/formatter.d.ts +44 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +182 -0
- package/dist/frontmatter.d.ts +39 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +105 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/loader.d.ts +33 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +362 -0
- package/dist/resolver.d.ts +18 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +90 -0
- package/dist/types.d.ts +201 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +57 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/SKILL.md +67 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/SKILL.md +91 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/SKILL.md +104 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Semgrep Rule Creation Workflow
|
|
2
|
+
|
|
3
|
+
Detailed workflow for creating production-quality Semgrep rules.
|
|
4
|
+
|
|
5
|
+
## Step 1: Analyze the Problem
|
|
6
|
+
|
|
7
|
+
Before writing any code:
|
|
8
|
+
|
|
9
|
+
1. **Fetch external documentation**: See [Documentation](../SKILL.md#documentation) for required reading
|
|
10
|
+
2. **Understand the exact bug pattern and explain the bug for a junior developer**: What vulnerability, issue or pattern should be detected?
|
|
11
|
+
3. **Identify the target language**: What is specific about the bug and that language?
|
|
12
|
+
4. **Determine the approach**:
|
|
13
|
+
- **Pattern matching**: Syntactic patterns without data flow
|
|
14
|
+
- **Taint mode**: Data flows from untrusted source to dangerous sink
|
|
15
|
+
|
|
16
|
+
### When to Use Taint Mode
|
|
17
|
+
|
|
18
|
+
Taint mode is a powerful feature in Semgrep that can track the flow of data from one location to another. By using taint mode, you can:
|
|
19
|
+
|
|
20
|
+
- **Track data flow across multiple variables**: Trace how data moves across different variables, functions, components, and identify insecure flow paths (e.g., situations where a specific sanitizer is not used).
|
|
21
|
+
- **Find injection vulnerabilities**: Identify injection vulnerabilities such as SQL injection, command injection, and XSS attacks.
|
|
22
|
+
- **Write simple and resilient Semgrep rules**: Simplify rules that are resilient to code patterns nested in if statements, loops, and other structures.
|
|
23
|
+
|
|
24
|
+
## Step 2: Write Tests First
|
|
25
|
+
|
|
26
|
+
**Why test-first?** Writing tests before the rule forces you to think about both vulnerable AND safe cases. Rules written without tests often have hidden false positives (matching safe cases) or false negatives (missing vulnerable variants). Tests make these visible immediately.
|
|
27
|
+
|
|
28
|
+
Create directory and test file with annotations (`# ruleid:`, `# ok:` only). See [quick-reference.md]({baseDir}/references/quick-reference.md#test-file-annotations) for full syntax.
|
|
29
|
+
|
|
30
|
+
### Directory Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<rule-id>/
|
|
34
|
+
├── <rule-id>.yaml # Semgrep rule
|
|
35
|
+
└── <rule-id>.<ext> # Test file with ruleid/ok annotations
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**CRITICAL**:
|
|
39
|
+
1. The comment (`# ruleid:` or `# ok:` ) must be on the line IMMEDIATELY BEFORE the code. Semgrep reports findings on the line after the annotation.
|
|
40
|
+
2. The comment must contain ONLY the comment marker and annotation (e.g., `# ruleid: my-rule`). No other text, comments, or code on the same line.
|
|
41
|
+
|
|
42
|
+
### Test Case Design
|
|
43
|
+
|
|
44
|
+
You must include test cases for:
|
|
45
|
+
- Clear vulnerable cases (must match)
|
|
46
|
+
- Clear safe cases (must not match)
|
|
47
|
+
- Edge cases and variations
|
|
48
|
+
- Different coding styles
|
|
49
|
+
- Sanitized/validated input (must not match)
|
|
50
|
+
- Unrelated code (must not match) - normal code with no relation to the rule's target pattern
|
|
51
|
+
- Nested structures (e.g., inside if statements, loops, try/catch blocks, callbacks)
|
|
52
|
+
|
|
53
|
+
## Step 3: Analyze AST Structure
|
|
54
|
+
|
|
55
|
+
**Why analyze AST?** Semgrep matches against the AST, not raw text. Code that looks similar may parse differently (e.g., `foo.bar()` vs `foo().bar`). The AST dump shows exactly what Semgrep sees, preventing patterns that fail due to unexpected tree structure. Understanding how exactly Semgrep parses code is crucial for writing precise patterns.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
semgrep --dump-ast -l <language> <rule-id>.<ext>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Example output helps understand:
|
|
62
|
+
- How function calls are represented
|
|
63
|
+
- How variables are bound
|
|
64
|
+
- How control flow is structured
|
|
65
|
+
|
|
66
|
+
## Step 4: Write the Rule
|
|
67
|
+
|
|
68
|
+
Choose the appropriate pattern operators and write the rule.
|
|
69
|
+
|
|
70
|
+
For pattern operator syntax (basic matching, scope operators, metavariable filters, focus), see [quick-reference.md](quick-reference.md).
|
|
71
|
+
|
|
72
|
+
### Validate and Test
|
|
73
|
+
|
|
74
|
+
#### Validate YAML Syntax
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
semgrep --validate --config <rule-id>.yaml
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Run Tests
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cd <rule-directory>
|
|
84
|
+
semgrep --test --config <rule-id>.yaml <rule-id>.<ext>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### Expected Output
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
1/1: ✓ All tests passed
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Debug Failures
|
|
94
|
+
|
|
95
|
+
If tests fail, check:
|
|
96
|
+
1. **Missed lines**: Rule didn't match when it should
|
|
97
|
+
- Pattern too specific
|
|
98
|
+
- Missing pattern variant
|
|
99
|
+
2. **Incorrect lines**: Rule matched when it shouldn't
|
|
100
|
+
- Pattern too broad
|
|
101
|
+
- Need `pattern-not` exclusion
|
|
102
|
+
|
|
103
|
+
#### Debug Taint Mode Rules
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
semgrep --dataflow-traces -f <rule-id>.yaml <rule-id>.<ext>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Shows:
|
|
110
|
+
- Source locations
|
|
111
|
+
- Sink locations
|
|
112
|
+
- Data flow path
|
|
113
|
+
- Why taint didn't propagate (if applicable)
|
|
114
|
+
|
|
115
|
+
## Step 5: Iterate Until Tests Pass
|
|
116
|
+
Work on writing Semgrep rule (patterns) iteratively to ensure the Semgrep rule works correctly.
|
|
117
|
+
|
|
118
|
+
Each time when you introduce any changes, test Semgrep rule:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
semgrep --test --config <rule-id>.yaml <rule-id>.<ext>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
For debugging taint mode rules:
|
|
125
|
+
```bash
|
|
126
|
+
semgrep --dataflow-traces -f <rule-id>.yaml <rule-id>.<ext>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Verification checkpoint**: Output MUST show "All tests passed". **Only proceed when validation passes**.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
**Verification checkpoint**: Proceed to Step 6: Optimize the Rule when:
|
|
133
|
+
- "All tests passed"
|
|
134
|
+
- No "missed lines" (false negatives)
|
|
135
|
+
- No "incorrect lines" (false positives)
|
|
136
|
+
|
|
137
|
+
### Common Fixes
|
|
138
|
+
|
|
139
|
+
| Problem | Solution |
|
|
140
|
+
|---------|----------|
|
|
141
|
+
| Too many matches | Add `pattern-not` exclusions |
|
|
142
|
+
| Missing matches | Add `pattern-either` variants |
|
|
143
|
+
| Wrong line matched | Adjust `focus-metavariable` |
|
|
144
|
+
| Taint not flowing | Check sanitizers aren't too broad |
|
|
145
|
+
| Taint false positive | Add sanitizer pattern |
|
|
146
|
+
|
|
147
|
+
## Step 6: Optimize the Rule
|
|
148
|
+
|
|
149
|
+
After all tests pass, remove redundant patterns (quote variants, ellipsis subsets, redundant patterns).
|
|
150
|
+
|
|
151
|
+
### Semgrep Pattern Equivalences
|
|
152
|
+
|
|
153
|
+
Semgrep treats certain patterns as equivalent:
|
|
154
|
+
|
|
155
|
+
| Written | Also Matches | Reason |
|
|
156
|
+
|---------|--------------|--------|
|
|
157
|
+
| `"string"` | `'string'` | Quote style normalized (in languages where both are equivalent) |
|
|
158
|
+
| `func(...)` | `func()`, `func(a)`, `func(a,b)` | Ellipsis matches zero or more |
|
|
159
|
+
| `func($X, ...)` | `func($X)`, `func($X, a, b)` | Trailing ellipsis is optional |
|
|
160
|
+
|
|
161
|
+
### Common Redundancies to Remove
|
|
162
|
+
|
|
163
|
+
**1. Quote Variants** (depends on the language)
|
|
164
|
+
|
|
165
|
+
Before:
|
|
166
|
+
```yaml
|
|
167
|
+
pattern-either:
|
|
168
|
+
- pattern: hashlib.new("md5", ...)
|
|
169
|
+
- pattern: hashlib.new('md5', ...)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
After:
|
|
173
|
+
```yaml
|
|
174
|
+
pattern-either:
|
|
175
|
+
- pattern: hashlib.new("md5", ...)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**2. Ellipsis Subsets**
|
|
179
|
+
|
|
180
|
+
Before:
|
|
181
|
+
```yaml
|
|
182
|
+
pattern-either:
|
|
183
|
+
- pattern: dangerous($X, ...)
|
|
184
|
+
- pattern: dangerous($X)
|
|
185
|
+
- pattern: dangerous($X, $Y)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
After:
|
|
189
|
+
```yaml
|
|
190
|
+
pattern: dangerous($X, ...)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**3. Consolidate with Metavariables**
|
|
194
|
+
|
|
195
|
+
Before:
|
|
196
|
+
```yaml
|
|
197
|
+
pattern-either:
|
|
198
|
+
- pattern: md5($X)
|
|
199
|
+
- pattern: sha1($X)
|
|
200
|
+
- pattern: sha256($X)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
After:
|
|
204
|
+
```yaml
|
|
205
|
+
patterns:
|
|
206
|
+
- pattern: $FUNC($X)
|
|
207
|
+
- metavariable-regex:
|
|
208
|
+
metavariable: $FUNC
|
|
209
|
+
regex: ^(md5|sha1|sha256)$
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Optimization Checklist
|
|
213
|
+
|
|
214
|
+
1. Remove patterns differing only in quote style
|
|
215
|
+
2. Remove patterns that are subsets of `...` patterns
|
|
216
|
+
3. Consolidate similar patterns using metavariable-regex
|
|
217
|
+
4. Remove duplicate patterns in pattern-either
|
|
218
|
+
5. Simplify nested pattern-either when possible
|
|
219
|
+
6. Replace complex regex patterns with metavariable-comparison
|
|
220
|
+
7. **Re-run tests after each optimization**
|
|
221
|
+
|
|
222
|
+
### Verify After Optimization
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
semgrep --test --config <rule-id>.yaml <rule-id>.<ext>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**CRITICAL**: Always re-run tests after optimization. Some "redundant" patterns may actually be necessary due to AST structure differences. If any test fails, revert the optimization that caused it.
|
|
229
|
+
|
|
230
|
+
**Task complete ONLY when**: All tests pass after optimization.
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
## Step 7: Final Run
|
|
234
|
+
Run the Semgrep rule you created using: `semgrep --config <rule-id>.yaml <rule-id>.<ext>`.
|
|
235
|
+
|
|
236
|
+
Ensure that message:
|
|
237
|
+
1. Contains a short and concise explanation of the matched pattern
|
|
238
|
+
2. Has no uninterpolated metavariables (e.g., $OP, $VAR). All metavariables referenced in the message must be captured by the pattern so they interpolate to actual code.
|
|
239
|
+
|
|
240
|
+
Fix any message issues and re-run that Semgrep rule after each fix.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-logs
|
|
3
|
+
description: Search and analyze your own session logs (older/parent conversations) using jq.
|
|
4
|
+
metadata: { "otto": { "emoji": "📜", "requires": { "bins": ["jq", "rg"] } } }
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# session-logs
|
|
8
|
+
|
|
9
|
+
Search your complete conversation history stored in session JSONL files. Use this when a user references older/parent conversations or asks what was said before.
|
|
10
|
+
|
|
11
|
+
## Trigger
|
|
12
|
+
|
|
13
|
+
Use this skill when the user asks about prior chats, parent conversations, or historical context that isn't in memory files.
|
|
14
|
+
|
|
15
|
+
## Location
|
|
16
|
+
|
|
17
|
+
Session logs live at: `~/.otto/agents/<agentId>/sessions/` (use the `agent=<id>` value from the system prompt Runtime line).
|
|
18
|
+
|
|
19
|
+
- **`sessions.json`** - Index mapping session keys to session IDs
|
|
20
|
+
- **`<session-id>.jsonl`** - Full conversation transcript per session
|
|
21
|
+
|
|
22
|
+
## Structure
|
|
23
|
+
|
|
24
|
+
Each `.jsonl` file contains messages with:
|
|
25
|
+
|
|
26
|
+
- `type`: "session" (metadata) or "message"
|
|
27
|
+
- `timestamp`: ISO timestamp
|
|
28
|
+
- `message.role`: "user", "assistant", or "toolResult"
|
|
29
|
+
- `message.content[]`: Text, thinking, or tool calls (filter `type=="text"` for human-readable content)
|
|
30
|
+
- `message.usage.cost.total`: Cost per response
|
|
31
|
+
|
|
32
|
+
## Common Queries
|
|
33
|
+
|
|
34
|
+
### List all sessions by date and size
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
|
|
38
|
+
date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
|
|
39
|
+
size=$(ls -lh "$f" | awk '{print $5}')
|
|
40
|
+
echo "$date $size $(basename $f)"
|
|
41
|
+
done | sort -r
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Find sessions from a specific day
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
|
|
48
|
+
head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
|
|
49
|
+
done
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Extract user messages from a session
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Search for keyword in assistant responses
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Get total cost for a session
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Daily cost summary
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
for f in ~/.otto/agents/<agentId>/sessions/*.jsonl; do
|
|
74
|
+
date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
|
|
75
|
+
cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f")
|
|
76
|
+
echo "$date $cost"
|
|
77
|
+
done | awk '{a[$1]+=$2} END {for(d in a) print d, "$"a[d]}' | sort -r
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Count messages and tokens in a session
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
jq -s '{
|
|
84
|
+
messages: length,
|
|
85
|
+
user: [.[] | select(.message.role == "user")] | length,
|
|
86
|
+
assistant: [.[] | select(.message.role == "assistant")] | length,
|
|
87
|
+
first: .[0].timestamp,
|
|
88
|
+
last: .[-1].timestamp
|
|
89
|
+
}' <session>.jsonl
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Tool usage breakdown
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Search across ALL sessions for a phrase
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
rg -l "phrase" ~/.otto/agents/<agentId>/sessions/*.jsonl
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Tips
|
|
105
|
+
|
|
106
|
+
- Sessions are append-only JSONL (one JSON object per line)
|
|
107
|
+
- Large sessions can be several MB - use `head`/`tail` for sampling
|
|
108
|
+
- The `sessions.json` index maps chat providers (discord, whatsapp, etc.) to session IDs
|
|
109
|
+
- Deleted sessions have `.deleted.<timestamp>` suffix
|
|
110
|
+
|
|
111
|
+
## Fast text-only hint (low noise)
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.otto/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'
|
|
115
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sharp-edges",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Identify error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Trail of Bits",
|
|
7
|
+
"email": "opensource@trailofbits.com",
|
|
8
|
+
"url": "https://github.com/trailofbits"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Sharp Edges
|
|
2
|
+
|
|
3
|
+
Identifies error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes through developer confusion, laziness, or malice.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Reviewing API designs for security-relevant interfaces
|
|
8
|
+
- Auditing configuration schemas that expose security choices
|
|
9
|
+
- Evaluating cryptographic library ergonomics
|
|
10
|
+
- Assessing authentication/authorization APIs
|
|
11
|
+
- Any code review where developers make security-critical decisions
|
|
12
|
+
|
|
13
|
+
## What It Does
|
|
14
|
+
|
|
15
|
+
Analyzes code and designs through the lens of three adversaries:
|
|
16
|
+
|
|
17
|
+
1. **The Scoundrel**: Can a malicious developer or attacker disable security via configuration?
|
|
18
|
+
2. **The Lazy Developer**: Will copy-pasting the first example lead to insecure code?
|
|
19
|
+
3. **The Confused Developer**: Can parameters be swapped without type errors?
|
|
20
|
+
|
|
21
|
+
## Core Principle
|
|
22
|
+
|
|
23
|
+
**The pit of success**: Secure usage should be the path of least resistance. If developers must read documentation carefully or remember special rules to avoid vulnerabilities, the API has failed.
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/plugin install trailofbits/skills/plugins/sharp-edges
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Sharp Edge Categories
|
|
32
|
+
|
|
33
|
+
The skill identifies six categories of misuse-prone designs:
|
|
34
|
+
|
|
35
|
+
| Category | Example |
|
|
36
|
+
|----------|---------|
|
|
37
|
+
| Algorithm Selection | JWT `alg: none` attack; PHP `hash("crc32", $password)` |
|
|
38
|
+
| Dangerous Defaults | `session_timeout: 0` meaning infinite; empty password accepted |
|
|
39
|
+
| Primitive vs. Semantic APIs | `encrypt(msg, bytes, bytes)` where key/nonce can be swapped |
|
|
40
|
+
| Configuration Cliffs | `verify_ssl: false` disables all certificate validation |
|
|
41
|
+
| Silent Failures | Verification returns `False` instead of throwing; ignored return values |
|
|
42
|
+
| Stringly-Typed Security | Permissions as comma-separated strings; SQL from concatenation |
|
|
43
|
+
|
|
44
|
+
## Related Skills
|
|
45
|
+
|
|
46
|
+
- [constant-time-analysis](../constant-time-analysis) - Detect timing side-channels in cryptographic code
|
|
47
|
+
- [differential-review](../differential-review) - Security-focused code change review
|
|
48
|
+
- [audit-context-building](../audit-context-building) - Deep architectural analysis before auditing
|