@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.
- package/README.md +126 -0
- package/package.json +53 -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/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/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/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-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
- package/skills/security-burpsuite-project-parser/README.md +103 -0
- package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
- package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
- package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
- package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
- package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
- package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
- package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
- package/skills/security-constant-time-analysis/README.md +381 -0
- package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
- package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
- package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
- package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
- package/skills/security-constant-time-analysis/pyproject.toml +52 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/skills/security-constant-time-analysis/uv.lock +8 -0
- package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
- package/skills/security-culture-index/README.md +79 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -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/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-dwarf-expert/.claude-plugin/plugin.json +10 -0
- package/skills/security-dwarf-expert/README.md +38 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -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/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-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
- package/skills/security-firebase-apk-scanner/README.md +85 -0
- package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
- package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -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/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/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/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/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/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/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
- package/skills/semgrep-rule-variant-creator/README.md +86 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -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/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/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/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/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/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
- package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
- package/skills/yara-authoring/README.md +131 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# Insecure Defaults: Examples and Counter-Examples
|
|
2
|
+
|
|
3
|
+
This document provides detailed examples for each category in the Quick Verification Checklist, showing both vulnerable patterns (report these) and secure patterns (skip these).
|
|
4
|
+
|
|
5
|
+
## Fallback Secrets
|
|
6
|
+
|
|
7
|
+
### ❌ VULNERABLE - Report These
|
|
8
|
+
|
|
9
|
+
**Python: Environment variable with fallback**
|
|
10
|
+
```python
|
|
11
|
+
# File: src/auth/jwt.py
|
|
12
|
+
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-123')
|
|
13
|
+
|
|
14
|
+
# Used in security context
|
|
15
|
+
def create_token(user_id):
|
|
16
|
+
return jwt.encode({'user_id': user_id}, SECRET_KEY, algorithm='HS256')
|
|
17
|
+
```
|
|
18
|
+
**Why vulnerable:** App runs with known secret if `SECRET_KEY` is missing. Attacker can forge tokens.
|
|
19
|
+
|
|
20
|
+
**JavaScript: Logical OR fallback**
|
|
21
|
+
```javascript
|
|
22
|
+
// File: config/database.js
|
|
23
|
+
const DB_PASSWORD = process.env.DB_PASSWORD || 'admin123';
|
|
24
|
+
|
|
25
|
+
const pool = new Pool({
|
|
26
|
+
user: 'admin',
|
|
27
|
+
password: DB_PASSWORD,
|
|
28
|
+
database: 'production'
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
**Why vulnerable:** Database accepts hardcoded password in production if env var missing.
|
|
32
|
+
|
|
33
|
+
**Ruby: fetch with default**
|
|
34
|
+
```ruby
|
|
35
|
+
# File: config/secrets.rb
|
|
36
|
+
Rails.application.credentials.secret_key_base =
|
|
37
|
+
ENV.fetch('SECRET_KEY_BASE', 'fallback-secret-base')
|
|
38
|
+
```
|
|
39
|
+
**Why vulnerable:** Rails session encryption uses weak known key as fallback.
|
|
40
|
+
|
|
41
|
+
### ✅ SECURE - Skip These
|
|
42
|
+
|
|
43
|
+
**Fail-secure: Crashes without config**
|
|
44
|
+
```python
|
|
45
|
+
# File: src/auth/jwt.py
|
|
46
|
+
SECRET_KEY = os.environ['SECRET_KEY'] # Raises KeyError if missing
|
|
47
|
+
|
|
48
|
+
# App won't start without SECRET_KEY - fail-secure
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Explicit validation**
|
|
52
|
+
```javascript
|
|
53
|
+
// File: config/database.js
|
|
54
|
+
if (!process.env.DB_PASSWORD) {
|
|
55
|
+
throw new Error('DB_PASSWORD environment variable required');
|
|
56
|
+
}
|
|
57
|
+
const DB_PASSWORD = process.env.DB_PASSWORD;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Test fixtures (clearly scoped)**
|
|
61
|
+
```python
|
|
62
|
+
# File: tests/fixtures/auth.py
|
|
63
|
+
TEST_SECRET = 'test-secret-key-123' # OK - test-only
|
|
64
|
+
|
|
65
|
+
# Usage in test
|
|
66
|
+
def test_token_creation():
|
|
67
|
+
token = create_token('user1', secret=TEST_SECRET)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Default Credentials
|
|
73
|
+
|
|
74
|
+
### ❌ VULNERABLE - Report These
|
|
75
|
+
|
|
76
|
+
**Hardcoded admin account**
|
|
77
|
+
```python
|
|
78
|
+
# File: src/models/user.py
|
|
79
|
+
def bootstrap_admin():
|
|
80
|
+
"""Create default admin account if none exists"""
|
|
81
|
+
if not User.query.filter_by(role='admin').first():
|
|
82
|
+
admin = User(
|
|
83
|
+
username='admin',
|
|
84
|
+
password=hash_password('admin123'),
|
|
85
|
+
role='admin'
|
|
86
|
+
)
|
|
87
|
+
db.session.add(admin)
|
|
88
|
+
db.session.commit()
|
|
89
|
+
```
|
|
90
|
+
**Why vulnerable:** Default admin account created on first run with known credentials.
|
|
91
|
+
|
|
92
|
+
**API key in code**
|
|
93
|
+
```javascript
|
|
94
|
+
// File: src/integrations/payment.js
|
|
95
|
+
const STRIPE_API_KEY = process.env.STRIPE_KEY || 'sk_tes...';
|
|
96
|
+
|
|
97
|
+
const stripe = require('stripe')(STRIPE_API_KEY);
|
|
98
|
+
```
|
|
99
|
+
**Why vulnerable:** Uses test API key if env var missing. Might reach production.
|
|
100
|
+
|
|
101
|
+
**Database connection string**
|
|
102
|
+
```java
|
|
103
|
+
// File: DatabaseConfig.java
|
|
104
|
+
private static final String DB_URL = System.getenv().getOrDefault(
|
|
105
|
+
"DATABASE_URL",
|
|
106
|
+
"postgresql://admin:password@localhost:5432/prod"
|
|
107
|
+
);
|
|
108
|
+
```
|
|
109
|
+
**Why vulnerable:** Hardcoded database credentials as fallback.
|
|
110
|
+
|
|
111
|
+
### ✅ SECURE - Skip These
|
|
112
|
+
|
|
113
|
+
**Disabled default account**
|
|
114
|
+
```python
|
|
115
|
+
# File: src/models/user.py
|
|
116
|
+
def bootstrap_admin():
|
|
117
|
+
"""Admin account MUST be configured via environment"""
|
|
118
|
+
username = os.environ['ADMIN_USERNAME']
|
|
119
|
+
password = os.environ['ADMIN_PASSWORD']
|
|
120
|
+
|
|
121
|
+
if not User.query.filter_by(username=username).first():
|
|
122
|
+
admin = User(username=username, password=hash_password(password), role='admin')
|
|
123
|
+
db.session.add(admin)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Example/documentation credentials**
|
|
127
|
+
```bash
|
|
128
|
+
# File: README.md
|
|
129
|
+
## Setup
|
|
130
|
+
|
|
131
|
+
Configure your API key:
|
|
132
|
+
```bash
|
|
133
|
+
export STRIPE_KEY='sk_tes...' # Example only
|
|
134
|
+
```
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Test fixture credentials**
|
|
138
|
+
```python
|
|
139
|
+
# File: tests/conftest.py
|
|
140
|
+
@pytest.fixture
|
|
141
|
+
def test_user():
|
|
142
|
+
return User(username='test_user', password='test_pass') # OK - test scope
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Fail-Open Security
|
|
148
|
+
|
|
149
|
+
### ❌ VULNERABLE - Report These
|
|
150
|
+
|
|
151
|
+
**Authentication disabled by default**
|
|
152
|
+
```python
|
|
153
|
+
# File: config/security.py
|
|
154
|
+
REQUIRE_AUTH = os.getenv('REQUIRE_AUTH', 'false').lower() == 'true'
|
|
155
|
+
|
|
156
|
+
@app.before_request
|
|
157
|
+
def check_auth():
|
|
158
|
+
if not REQUIRE_AUTH:
|
|
159
|
+
return # Skip auth check
|
|
160
|
+
# ... auth logic
|
|
161
|
+
```
|
|
162
|
+
**Why vulnerable:** Default is no authentication. App runs insecurely if env var missing.
|
|
163
|
+
|
|
164
|
+
**CORS allows all origins**
|
|
165
|
+
```javascript
|
|
166
|
+
// File: server.js
|
|
167
|
+
const allowedOrigins = process.env.ALLOWED_ORIGINS || '*';
|
|
168
|
+
|
|
169
|
+
app.use(cors({ origin: allowedOrigins }));
|
|
170
|
+
```
|
|
171
|
+
**Why vulnerable:** Default allows requests from any origin. XSS/CSRF risk.
|
|
172
|
+
|
|
173
|
+
**Debug mode enabled by default**
|
|
174
|
+
```python
|
|
175
|
+
# File: config.py
|
|
176
|
+
DEBUG = os.getenv('DEBUG', 'true').lower() != 'false' # Default: true
|
|
177
|
+
|
|
178
|
+
if DEBUG:
|
|
179
|
+
app.config['DEBUG'] = True
|
|
180
|
+
app.config['PROPAGATE_EXCEPTIONS'] = True
|
|
181
|
+
```
|
|
182
|
+
**Why vulnerable:** Debug mode default. Stack traces leak sensitive info in production.
|
|
183
|
+
|
|
184
|
+
### ✅ SECURE - Skip These
|
|
185
|
+
|
|
186
|
+
**Authentication required by default**
|
|
187
|
+
```python
|
|
188
|
+
# File: config/security.py
|
|
189
|
+
REQUIRE_AUTH = os.getenv('REQUIRE_AUTH', 'true').lower() == 'true' # Default: true
|
|
190
|
+
|
|
191
|
+
# Or better - crash if not explicitly configured
|
|
192
|
+
REQUIRE_AUTH = os.environ['REQUIRE_AUTH'].lower() == 'true'
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**CORS requires explicit configuration**
|
|
196
|
+
```javascript
|
|
197
|
+
// File: server.js
|
|
198
|
+
if (!process.env.ALLOWED_ORIGINS) {
|
|
199
|
+
throw new Error('ALLOWED_ORIGINS must be configured');
|
|
200
|
+
}
|
|
201
|
+
const allowedOrigins = process.env.ALLOWED_ORIGINS.split(',');
|
|
202
|
+
|
|
203
|
+
app.use(cors({ origin: allowedOrigins }));
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Debug mode disabled by default**
|
|
207
|
+
```python
|
|
208
|
+
# File: config.py
|
|
209
|
+
DEBUG = os.getenv('DEBUG', 'false').lower() == 'true' # Default: false
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Weak Crypto
|
|
215
|
+
|
|
216
|
+
### ❌ VULNERABLE - Report These
|
|
217
|
+
|
|
218
|
+
**MD5 for password hashing**
|
|
219
|
+
```python
|
|
220
|
+
# File: src/auth/passwords.py
|
|
221
|
+
import hashlib
|
|
222
|
+
|
|
223
|
+
def hash_password(password):
|
|
224
|
+
"""Hash user password"""
|
|
225
|
+
return hashlib.md5(password.encode()).hexdigest()
|
|
226
|
+
```
|
|
227
|
+
**Why vulnerable:** MD5 is cryptographically broken. Rainbow tables exist. Use bcrypt/Argon2.
|
|
228
|
+
|
|
229
|
+
**DES encryption for sensitive data**
|
|
230
|
+
```java
|
|
231
|
+
// File: Encryption.java
|
|
232
|
+
public static byte[] encrypt(String data, byte[] key) {
|
|
233
|
+
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
|
|
234
|
+
SecretKeySpec secretKey = new SecretKeySpec(key, "DES");
|
|
235
|
+
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
|
|
236
|
+
return cipher.doFinal(data.getBytes());
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
**Why vulnerable:** DES has 56-bit keys (brute-forceable). ECB mode leaks patterns.
|
|
240
|
+
|
|
241
|
+
**SHA1 for signature verification**
|
|
242
|
+
```javascript
|
|
243
|
+
// File: webhooks.js
|
|
244
|
+
function verifySignature(payload, signature) {
|
|
245
|
+
const hmac = crypto.createHmac('sha1', WEBHOOK_SECRET);
|
|
246
|
+
const computed = hmac.update(payload).digest('hex');
|
|
247
|
+
return computed === signature;
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
**Why vulnerable:** SHA1 collisions exist. Use SHA256 or better.
|
|
251
|
+
|
|
252
|
+
### ✅ SECURE - Skip These
|
|
253
|
+
|
|
254
|
+
**Weak crypto for non-security checksums**
|
|
255
|
+
```python
|
|
256
|
+
# File: src/utils/cache.py
|
|
257
|
+
import hashlib
|
|
258
|
+
|
|
259
|
+
def cache_key(data):
|
|
260
|
+
"""Generate cache key - not security-sensitive"""
|
|
261
|
+
return hashlib.md5(data.encode()).hexdigest() # OK - just for cache lookup
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Modern crypto for passwords**
|
|
265
|
+
```python
|
|
266
|
+
# File: src/auth/passwords.py
|
|
267
|
+
import bcrypt
|
|
268
|
+
|
|
269
|
+
def hash_password(password):
|
|
270
|
+
return bcrypt.hashpw(password.encode(), bcrypt.gensalt())
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Strong encryption**
|
|
274
|
+
```java
|
|
275
|
+
// File: Encryption.java
|
|
276
|
+
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
|
|
277
|
+
// 256-bit key, authenticated encryption
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Permissive Access
|
|
283
|
+
|
|
284
|
+
### ❌ VULNERABLE - Report These
|
|
285
|
+
|
|
286
|
+
**File permissions world-writable**
|
|
287
|
+
```python
|
|
288
|
+
# File: src/storage/files.py
|
|
289
|
+
def create_secure_file(path):
|
|
290
|
+
fd = os.open(path, os.O_CREAT | os.O_WRONLY, 0o666) # rw-rw-rw-
|
|
291
|
+
return fd
|
|
292
|
+
```
|
|
293
|
+
**Why vulnerable:** Any user can write to file. Should be 0o600 or 0o644.
|
|
294
|
+
|
|
295
|
+
**S3 bucket public by default**
|
|
296
|
+
```python
|
|
297
|
+
# File: infrastructure/storage.py
|
|
298
|
+
def create_storage_bucket(name):
|
|
299
|
+
bucket = s3.create_bucket(
|
|
300
|
+
Bucket=name,
|
|
301
|
+
ACL='public-read' # Publicly readable by default
|
|
302
|
+
)
|
|
303
|
+
```
|
|
304
|
+
**Why vulnerable:** Sensitive data exposed publicly. Should require explicit configuration.
|
|
305
|
+
|
|
306
|
+
**API allows any origin**
|
|
307
|
+
```python
|
|
308
|
+
# File: app.py
|
|
309
|
+
@app.after_request
|
|
310
|
+
def after_request(response):
|
|
311
|
+
response.headers['Access-Control-Allow-Origin'] = '*'
|
|
312
|
+
response.headers['Access-Control-Allow-Credentials'] = 'true'
|
|
313
|
+
return response
|
|
314
|
+
```
|
|
315
|
+
**Why vulnerable:** CORS misconfiguration. Allows credential theft from any site.
|
|
316
|
+
|
|
317
|
+
### ✅ SECURE - Skip These
|
|
318
|
+
|
|
319
|
+
**Explicitly configured permissiveness with justification**
|
|
320
|
+
```python
|
|
321
|
+
# File: src/storage/public_assets.py
|
|
322
|
+
def create_public_asset(path):
|
|
323
|
+
"""Create world-readable asset for CDN distribution"""
|
|
324
|
+
# Intentionally public - static assets only
|
|
325
|
+
fd = os.open(path, os.O_CREAT | os.O_WRONLY, 0o644)
|
|
326
|
+
return fd
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Restrictive by default**
|
|
330
|
+
```python
|
|
331
|
+
# File: infrastructure/storage.py
|
|
332
|
+
def create_storage_bucket(name, public=False):
|
|
333
|
+
acl = 'public-read' if public else 'private'
|
|
334
|
+
if public:
|
|
335
|
+
logger.warning(f'Creating PUBLIC bucket: {name}')
|
|
336
|
+
bucket = s3.create_bucket(Bucket=name, ACL=acl)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Debug Features
|
|
342
|
+
|
|
343
|
+
### ❌ VULNERABLE - Report These
|
|
344
|
+
|
|
345
|
+
**Stack traces in API responses**
|
|
346
|
+
```python
|
|
347
|
+
# File: app.py
|
|
348
|
+
@app.errorhandler(Exception)
|
|
349
|
+
def handle_error(error):
|
|
350
|
+
return jsonify({
|
|
351
|
+
'error': str(error),
|
|
352
|
+
'traceback': traceback.format_exc() # Leaks internal paths, library versions
|
|
353
|
+
}), 500
|
|
354
|
+
```
|
|
355
|
+
**Why vulnerable:** Exposes internal implementation details to attackers.
|
|
356
|
+
|
|
357
|
+
**GraphQL introspection enabled**
|
|
358
|
+
```javascript
|
|
359
|
+
// File: server.js
|
|
360
|
+
const server = new ApolloServer({
|
|
361
|
+
typeDefs,
|
|
362
|
+
resolvers,
|
|
363
|
+
introspection: true, // Enabled in production
|
|
364
|
+
playground: true
|
|
365
|
+
});
|
|
366
|
+
```
|
|
367
|
+
**Why vulnerable:** Attackers can discover entire API schema, including admin-only fields.
|
|
368
|
+
|
|
369
|
+
**Verbose error messages**
|
|
370
|
+
```java
|
|
371
|
+
// File: UserController.java
|
|
372
|
+
catch (SQLException e) {
|
|
373
|
+
return ResponseEntity.status(500).body(
|
|
374
|
+
"Database error: " + e.getMessage() // Leaks table names, constraints
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
**Why vulnerable:** SQL error messages reveal database structure.
|
|
379
|
+
|
|
380
|
+
### ✅ SECURE - Skip These
|
|
381
|
+
|
|
382
|
+
**Debug features in logging only**
|
|
383
|
+
```python
|
|
384
|
+
# File: app.py
|
|
385
|
+
@app.errorhandler(Exception)
|
|
386
|
+
def handle_error(error):
|
|
387
|
+
logger.exception('Request failed', exc_info=error) # Logs full trace
|
|
388
|
+
return jsonify({'error': 'Internal server error'}), 500 # Generic to user
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Environment-aware debug settings**
|
|
392
|
+
```javascript
|
|
393
|
+
// File: server.js
|
|
394
|
+
const server = new ApolloServer({
|
|
395
|
+
typeDefs,
|
|
396
|
+
resolvers,
|
|
397
|
+
introspection: process.env.NODE_ENV !== 'production',
|
|
398
|
+
playground: process.env.NODE_ENV !== 'production'
|
|
399
|
+
});
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Generic user-facing errors**
|
|
403
|
+
```java
|
|
404
|
+
// File: UserController.java
|
|
405
|
+
catch (SQLException e) {
|
|
406
|
+
logger.error("Database error", e); // Full details to logs
|
|
407
|
+
return ResponseEntity.status(500).body("Unable to process request"); // Generic
|
|
408
|
+
}
|
|
409
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "modern-python",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Modern Python best practices. Use when creating new Python projects, and writing Python scripts, or migrating existing projects from legacy tools.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "William Tan",
|
|
7
|
+
"email": "opensource@trailofbits.com",
|
|
8
|
+
"url": "https://github.com/trailofbits"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Modern Python
|
|
2
|
+
|
|
3
|
+
Modern Python tooling and best practices using uv, ruff, ty, and pytest. Based on patterns from [trailofbits/cookiecutter-python](https://github.com/trailofbits/cookiecutter-python).
|
|
4
|
+
|
|
5
|
+
**Author:** William Tan
|
|
6
|
+
|
|
7
|
+
## When to Use
|
|
8
|
+
|
|
9
|
+
- Setting up a new Python project with modern, fast tooling
|
|
10
|
+
- Replacing pip/virtualenv with uv for faster dependency management
|
|
11
|
+
- Replacing flake8/black/isort with ruff for unified linting and formatting
|
|
12
|
+
- Replacing mypy with ty for faster type checking
|
|
13
|
+
- Adding pre-commit hooks and security scanning to an existing project
|
|
14
|
+
|
|
15
|
+
## What It Covers
|
|
16
|
+
|
|
17
|
+
**Core Tools:**
|
|
18
|
+
- **uv** - Package/dependency management (replaces pip, virtualenv, pip-tools, pipx, pyenv)
|
|
19
|
+
- **ruff** - Linting and formatting (replaces flake8, black, isort, pyupgrade)
|
|
20
|
+
- **ty** - Type checking (replaces mypy, pyright)
|
|
21
|
+
- **pytest** - Testing with coverage enforcement
|
|
22
|
+
- **prek** - Pre-commit hooks (replaces pre-commit)
|
|
23
|
+
|
|
24
|
+
**Security Tools:**
|
|
25
|
+
- **shellcheck** - Shell script linting
|
|
26
|
+
- **detect-secrets** - Secret detection in commits
|
|
27
|
+
- **actionlint** - GitHub Actions syntax validation
|
|
28
|
+
- **zizmor** - GitHub Actions security audit
|
|
29
|
+
- **pip-audit** - Dependency vulnerability scanning
|
|
30
|
+
- **Dependabot** - Automated dependency updates with supply chain protection
|
|
31
|
+
|
|
32
|
+
**Standards:**
|
|
33
|
+
- **pyproject.toml** - Single configuration file with dependency groups (PEP 735)
|
|
34
|
+
- **PEP 723** - Inline script metadata for single-file scripts
|
|
35
|
+
- **src/ layout** - Standard package structure
|
|
36
|
+
- **Python 3.11+** - Minimum version requirement
|
|
37
|
+
|
|
38
|
+
## Hook: Legacy Command Interception
|
|
39
|
+
|
|
40
|
+
This plugin includes a `PreToolUse` hook that intercepts legacy Python/pip commands and suggests uv alternatives. When Claude attempts to run commands like `python` or `pip install`, the hook blocks the command and provides guidance:
|
|
41
|
+
|
|
42
|
+
| Legacy Command | Suggested Alternative |
|
|
43
|
+
|----------------|----------------------|
|
|
44
|
+
| `python` | `uv run python` |
|
|
45
|
+
| `python script.py` | `uv run script.py` |
|
|
46
|
+
| `pip install pkg` | `uv add pkg` or `uv run --with pkg` |
|
|
47
|
+
| `pip uninstall pkg` | `uv remove pkg` |
|
|
48
|
+
| `pip freeze` | `uv export` |
|
|
49
|
+
| `python -m pip` | `uv add`/`uv remove` |
|
|
50
|
+
| `uv pip` | `uv add`/`uv remove`/`uv sync` |
|
|
51
|
+
|
|
52
|
+
Commands using `uv run` are allowed through without interception.
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
/plugin install trailofbits/skills/plugins/modern-python
|
|
58
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Intercept legacy Python/pip commands and suggest uv alternatives",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"PreToolUse": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "Bash",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/intercept-legacy-python.sh\""
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|