@ruaruababa/vibe-kit 1.0.0
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/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
# Attack Tree Construction Implementation Playbook
|
|
2
|
+
|
|
3
|
+
This file contains detailed patterns, checklists, and code samples referenced by the skill.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
### 1. Attack Tree Structure
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
[Root Goal]
|
|
11
|
+
|
|
|
12
|
+
┌────────────┴────────────┐
|
|
13
|
+
│ │
|
|
14
|
+
[Sub-goal 1] [Sub-goal 2]
|
|
15
|
+
(OR node) (AND node)
|
|
16
|
+
│ │
|
|
17
|
+
┌─────┴─────┐ ┌─────┴─────┐
|
|
18
|
+
│ │ │ │
|
|
19
|
+
[Attack] [Attack] [Attack] [Attack]
|
|
20
|
+
(leaf) (leaf) (leaf) (leaf)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Node Types
|
|
24
|
+
|
|
25
|
+
| Type | Symbol | Description |
|
|
26
|
+
|------|--------|-------------|
|
|
27
|
+
| **OR** | Oval | Any child achieves goal |
|
|
28
|
+
| **AND** | Rectangle | All children required |
|
|
29
|
+
| **Leaf** | Box | Atomic attack step |
|
|
30
|
+
|
|
31
|
+
### 3. Attack Attributes
|
|
32
|
+
|
|
33
|
+
| Attribute | Description | Values |
|
|
34
|
+
|-----------|-------------|--------|
|
|
35
|
+
| **Cost** | Resources needed | $, $$, $$$ |
|
|
36
|
+
| **Time** | Duration to execute | Hours, Days, Weeks |
|
|
37
|
+
| **Skill** | Expertise required | Low, Medium, High |
|
|
38
|
+
| **Detection** | Likelihood of detection | Low, Medium, High |
|
|
39
|
+
|
|
40
|
+
## Templates
|
|
41
|
+
|
|
42
|
+
### Template 1: Attack Tree Data Model
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
from dataclasses import dataclass, field
|
|
46
|
+
from enum import Enum
|
|
47
|
+
from typing import List, Dict, Optional, Union
|
|
48
|
+
import json
|
|
49
|
+
|
|
50
|
+
class NodeType(Enum):
|
|
51
|
+
OR = "or"
|
|
52
|
+
AND = "and"
|
|
53
|
+
LEAF = "leaf"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class Difficulty(Enum):
|
|
57
|
+
TRIVIAL = 1
|
|
58
|
+
LOW = 2
|
|
59
|
+
MEDIUM = 3
|
|
60
|
+
HIGH = 4
|
|
61
|
+
EXPERT = 5
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class Cost(Enum):
|
|
65
|
+
FREE = 0
|
|
66
|
+
LOW = 1
|
|
67
|
+
MEDIUM = 2
|
|
68
|
+
HIGH = 3
|
|
69
|
+
VERY_HIGH = 4
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class DetectionRisk(Enum):
|
|
73
|
+
NONE = 0
|
|
74
|
+
LOW = 1
|
|
75
|
+
MEDIUM = 2
|
|
76
|
+
HIGH = 3
|
|
77
|
+
CERTAIN = 4
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@dataclass
|
|
81
|
+
class AttackAttributes:
|
|
82
|
+
difficulty: Difficulty = Difficulty.MEDIUM
|
|
83
|
+
cost: Cost = Cost.MEDIUM
|
|
84
|
+
detection_risk: DetectionRisk = DetectionRisk.MEDIUM
|
|
85
|
+
time_hours: float = 8.0
|
|
86
|
+
requires_insider: bool = False
|
|
87
|
+
requires_physical: bool = False
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@dataclass
|
|
91
|
+
class AttackNode:
|
|
92
|
+
id: str
|
|
93
|
+
name: str
|
|
94
|
+
description: str
|
|
95
|
+
node_type: NodeType
|
|
96
|
+
attributes: AttackAttributes = field(default_factory=AttackAttributes)
|
|
97
|
+
children: List['AttackNode'] = field(default_factory=list)
|
|
98
|
+
mitigations: List[str] = field(default_factory=list)
|
|
99
|
+
cve_refs: List[str] = field(default_factory=list)
|
|
100
|
+
|
|
101
|
+
def add_child(self, child: 'AttackNode') -> None:
|
|
102
|
+
self.children.append(child)
|
|
103
|
+
|
|
104
|
+
def calculate_path_difficulty(self) -> float:
|
|
105
|
+
"""Calculate aggregate difficulty for this path."""
|
|
106
|
+
if self.node_type == NodeType.LEAF:
|
|
107
|
+
return self.attributes.difficulty.value
|
|
108
|
+
|
|
109
|
+
if not self.children:
|
|
110
|
+
return 0
|
|
111
|
+
|
|
112
|
+
child_difficulties = [c.calculate_path_difficulty() for c in self.children]
|
|
113
|
+
|
|
114
|
+
if self.node_type == NodeType.OR:
|
|
115
|
+
return min(child_difficulties)
|
|
116
|
+
else: # AND
|
|
117
|
+
return max(child_difficulties)
|
|
118
|
+
|
|
119
|
+
def calculate_path_cost(self) -> float:
|
|
120
|
+
"""Calculate aggregate cost for this path."""
|
|
121
|
+
if self.node_type == NodeType.LEAF:
|
|
122
|
+
return self.attributes.cost.value
|
|
123
|
+
|
|
124
|
+
if not self.children:
|
|
125
|
+
return 0
|
|
126
|
+
|
|
127
|
+
child_costs = [c.calculate_path_cost() for c in self.children]
|
|
128
|
+
|
|
129
|
+
if self.node_type == NodeType.OR:
|
|
130
|
+
return min(child_costs)
|
|
131
|
+
else: # AND
|
|
132
|
+
return sum(child_costs)
|
|
133
|
+
|
|
134
|
+
def to_dict(self) -> Dict:
|
|
135
|
+
"""Convert to dictionary for serialization."""
|
|
136
|
+
return {
|
|
137
|
+
"id": self.id,
|
|
138
|
+
"name": self.name,
|
|
139
|
+
"description": self.description,
|
|
140
|
+
"type": self.node_type.value,
|
|
141
|
+
"attributes": {
|
|
142
|
+
"difficulty": self.attributes.difficulty.name,
|
|
143
|
+
"cost": self.attributes.cost.name,
|
|
144
|
+
"detection_risk": self.attributes.detection_risk.name,
|
|
145
|
+
"time_hours": self.attributes.time_hours,
|
|
146
|
+
},
|
|
147
|
+
"mitigations": self.mitigations,
|
|
148
|
+
"children": [c.to_dict() for c in self.children]
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@dataclass
|
|
153
|
+
class AttackTree:
|
|
154
|
+
name: str
|
|
155
|
+
description: str
|
|
156
|
+
root: AttackNode
|
|
157
|
+
version: str = "1.0"
|
|
158
|
+
|
|
159
|
+
def find_easiest_path(self) -> List[AttackNode]:
|
|
160
|
+
"""Find the path with lowest difficulty."""
|
|
161
|
+
return self._find_path(self.root, minimize="difficulty")
|
|
162
|
+
|
|
163
|
+
def find_cheapest_path(self) -> List[AttackNode]:
|
|
164
|
+
"""Find the path with lowest cost."""
|
|
165
|
+
return self._find_path(self.root, minimize="cost")
|
|
166
|
+
|
|
167
|
+
def find_stealthiest_path(self) -> List[AttackNode]:
|
|
168
|
+
"""Find the path with lowest detection risk."""
|
|
169
|
+
return self._find_path(self.root, minimize="detection")
|
|
170
|
+
|
|
171
|
+
def _find_path(
|
|
172
|
+
self,
|
|
173
|
+
node: AttackNode,
|
|
174
|
+
minimize: str
|
|
175
|
+
) -> List[AttackNode]:
|
|
176
|
+
"""Recursive path finding."""
|
|
177
|
+
if node.node_type == NodeType.LEAF:
|
|
178
|
+
return [node]
|
|
179
|
+
|
|
180
|
+
if not node.children:
|
|
181
|
+
return [node]
|
|
182
|
+
|
|
183
|
+
if node.node_type == NodeType.OR:
|
|
184
|
+
# Pick the best child path
|
|
185
|
+
best_path = None
|
|
186
|
+
best_score = float('inf')
|
|
187
|
+
|
|
188
|
+
for child in node.children:
|
|
189
|
+
child_path = self._find_path(child, minimize)
|
|
190
|
+
score = self._path_score(child_path, minimize)
|
|
191
|
+
if score < best_score:
|
|
192
|
+
best_score = score
|
|
193
|
+
best_path = child_path
|
|
194
|
+
|
|
195
|
+
return [node] + (best_path or [])
|
|
196
|
+
else: # AND
|
|
197
|
+
# Must traverse all children
|
|
198
|
+
path = [node]
|
|
199
|
+
for child in node.children:
|
|
200
|
+
path.extend(self._find_path(child, minimize))
|
|
201
|
+
return path
|
|
202
|
+
|
|
203
|
+
def _path_score(self, path: List[AttackNode], metric: str) -> float:
|
|
204
|
+
"""Calculate score for a path."""
|
|
205
|
+
if metric == "difficulty":
|
|
206
|
+
return sum(n.attributes.difficulty.value for n in path if n.node_type == NodeType.LEAF)
|
|
207
|
+
elif metric == "cost":
|
|
208
|
+
return sum(n.attributes.cost.value for n in path if n.node_type == NodeType.LEAF)
|
|
209
|
+
elif metric == "detection":
|
|
210
|
+
return sum(n.attributes.detection_risk.value for n in path if n.node_type == NodeType.LEAF)
|
|
211
|
+
return 0
|
|
212
|
+
|
|
213
|
+
def get_all_leaf_attacks(self) -> List[AttackNode]:
|
|
214
|
+
"""Get all leaf attack nodes."""
|
|
215
|
+
leaves = []
|
|
216
|
+
self._collect_leaves(self.root, leaves)
|
|
217
|
+
return leaves
|
|
218
|
+
|
|
219
|
+
def _collect_leaves(self, node: AttackNode, leaves: List[AttackNode]) -> None:
|
|
220
|
+
if node.node_type == NodeType.LEAF:
|
|
221
|
+
leaves.append(node)
|
|
222
|
+
for child in node.children:
|
|
223
|
+
self._collect_leaves(child, leaves)
|
|
224
|
+
|
|
225
|
+
def get_unmitigated_attacks(self) -> List[AttackNode]:
|
|
226
|
+
"""Find attacks without mitigations."""
|
|
227
|
+
return [n for n in self.get_all_leaf_attacks() if not n.mitigations]
|
|
228
|
+
|
|
229
|
+
def export_json(self) -> str:
|
|
230
|
+
"""Export tree to JSON."""
|
|
231
|
+
return json.dumps({
|
|
232
|
+
"name": self.name,
|
|
233
|
+
"description": self.description,
|
|
234
|
+
"version": self.version,
|
|
235
|
+
"root": self.root.to_dict()
|
|
236
|
+
}, indent=2)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Template 2: Attack Tree Builder
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
class AttackTreeBuilder:
|
|
243
|
+
"""Fluent builder for attack trees."""
|
|
244
|
+
|
|
245
|
+
def __init__(self, name: str, description: str):
|
|
246
|
+
self.name = name
|
|
247
|
+
self.description = description
|
|
248
|
+
self._node_stack: List[AttackNode] = []
|
|
249
|
+
self._root: Optional[AttackNode] = None
|
|
250
|
+
|
|
251
|
+
def goal(self, id: str, name: str, description: str = "") -> 'AttackTreeBuilder':
|
|
252
|
+
"""Set the root goal (OR node by default)."""
|
|
253
|
+
self._root = AttackNode(
|
|
254
|
+
id=id,
|
|
255
|
+
name=name,
|
|
256
|
+
description=description,
|
|
257
|
+
node_type=NodeType.OR
|
|
258
|
+
)
|
|
259
|
+
self._node_stack = [self._root]
|
|
260
|
+
return self
|
|
261
|
+
|
|
262
|
+
def or_node(self, id: str, name: str, description: str = "") -> 'AttackTreeBuilder':
|
|
263
|
+
"""Add an OR sub-goal."""
|
|
264
|
+
node = AttackNode(
|
|
265
|
+
id=id,
|
|
266
|
+
name=name,
|
|
267
|
+
description=description,
|
|
268
|
+
node_type=NodeType.OR
|
|
269
|
+
)
|
|
270
|
+
self._current().add_child(node)
|
|
271
|
+
self._node_stack.append(node)
|
|
272
|
+
return self
|
|
273
|
+
|
|
274
|
+
def and_node(self, id: str, name: str, description: str = "") -> 'AttackTreeBuilder':
|
|
275
|
+
"""Add an AND sub-goal (all children required)."""
|
|
276
|
+
node = AttackNode(
|
|
277
|
+
id=id,
|
|
278
|
+
name=name,
|
|
279
|
+
description=description,
|
|
280
|
+
node_type=NodeType.AND
|
|
281
|
+
)
|
|
282
|
+
self._current().add_child(node)
|
|
283
|
+
self._node_stack.append(node)
|
|
284
|
+
return self
|
|
285
|
+
|
|
286
|
+
def attack(
|
|
287
|
+
self,
|
|
288
|
+
id: str,
|
|
289
|
+
name: str,
|
|
290
|
+
description: str = "",
|
|
291
|
+
difficulty: Difficulty = Difficulty.MEDIUM,
|
|
292
|
+
cost: Cost = Cost.MEDIUM,
|
|
293
|
+
detection: DetectionRisk = DetectionRisk.MEDIUM,
|
|
294
|
+
time_hours: float = 8.0,
|
|
295
|
+
mitigations: List[str] = None
|
|
296
|
+
) -> 'AttackTreeBuilder':
|
|
297
|
+
"""Add a leaf attack node."""
|
|
298
|
+
node = AttackNode(
|
|
299
|
+
id=id,
|
|
300
|
+
name=name,
|
|
301
|
+
description=description,
|
|
302
|
+
node_type=NodeType.LEAF,
|
|
303
|
+
attributes=AttackAttributes(
|
|
304
|
+
difficulty=difficulty,
|
|
305
|
+
cost=cost,
|
|
306
|
+
detection_risk=detection,
|
|
307
|
+
time_hours=time_hours
|
|
308
|
+
),
|
|
309
|
+
mitigations=mitigations or []
|
|
310
|
+
)
|
|
311
|
+
self._current().add_child(node)
|
|
312
|
+
return self
|
|
313
|
+
|
|
314
|
+
def end(self) -> 'AttackTreeBuilder':
|
|
315
|
+
"""Close current node, return to parent."""
|
|
316
|
+
if len(self._node_stack) > 1:
|
|
317
|
+
self._node_stack.pop()
|
|
318
|
+
return self
|
|
319
|
+
|
|
320
|
+
def build(self) -> AttackTree:
|
|
321
|
+
"""Build the attack tree."""
|
|
322
|
+
if not self._root:
|
|
323
|
+
raise ValueError("No root goal defined")
|
|
324
|
+
return AttackTree(
|
|
325
|
+
name=self.name,
|
|
326
|
+
description=self.description,
|
|
327
|
+
root=self._root
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
def _current(self) -> AttackNode:
|
|
331
|
+
if not self._node_stack:
|
|
332
|
+
raise ValueError("No current node")
|
|
333
|
+
return self._node_stack[-1]
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
# Example usage
|
|
337
|
+
def build_account_takeover_tree() -> AttackTree:
|
|
338
|
+
"""Build attack tree for account takeover scenario."""
|
|
339
|
+
return (
|
|
340
|
+
AttackTreeBuilder("Account Takeover", "Gain unauthorized access to user account")
|
|
341
|
+
.goal("G1", "Take Over User Account")
|
|
342
|
+
|
|
343
|
+
.or_node("S1", "Steal Credentials")
|
|
344
|
+
.attack(
|
|
345
|
+
"A1", "Phishing Attack",
|
|
346
|
+
difficulty=Difficulty.LOW,
|
|
347
|
+
cost=Cost.LOW,
|
|
348
|
+
detection=DetectionRisk.MEDIUM,
|
|
349
|
+
mitigations=["Security awareness training", "Email filtering"]
|
|
350
|
+
)
|
|
351
|
+
.attack(
|
|
352
|
+
"A2", "Credential Stuffing",
|
|
353
|
+
difficulty=Difficulty.TRIVIAL,
|
|
354
|
+
cost=Cost.LOW,
|
|
355
|
+
detection=DetectionRisk.HIGH,
|
|
356
|
+
mitigations=["Rate limiting", "MFA", "Password breach monitoring"]
|
|
357
|
+
)
|
|
358
|
+
.attack(
|
|
359
|
+
"A3", "Keylogger Malware",
|
|
360
|
+
difficulty=Difficulty.MEDIUM,
|
|
361
|
+
cost=Cost.MEDIUM,
|
|
362
|
+
detection=DetectionRisk.MEDIUM,
|
|
363
|
+
mitigations=["Endpoint protection", "MFA"]
|
|
364
|
+
)
|
|
365
|
+
.end()
|
|
366
|
+
|
|
367
|
+
.or_node("S2", "Bypass Authentication")
|
|
368
|
+
.attack(
|
|
369
|
+
"A4", "Session Hijacking",
|
|
370
|
+
difficulty=Difficulty.MEDIUM,
|
|
371
|
+
cost=Cost.LOW,
|
|
372
|
+
detection=DetectionRisk.LOW,
|
|
373
|
+
mitigations=["Secure session management", "HTTPS only"]
|
|
374
|
+
)
|
|
375
|
+
.attack(
|
|
376
|
+
"A5", "Authentication Bypass Vulnerability",
|
|
377
|
+
difficulty=Difficulty.HIGH,
|
|
378
|
+
cost=Cost.LOW,
|
|
379
|
+
detection=DetectionRisk.LOW,
|
|
380
|
+
mitigations=["Security testing", "Code review", "WAF"]
|
|
381
|
+
)
|
|
382
|
+
.end()
|
|
383
|
+
|
|
384
|
+
.or_node("S3", "Social Engineering")
|
|
385
|
+
.and_node("S3.1", "Account Recovery Attack")
|
|
386
|
+
.attack(
|
|
387
|
+
"A6", "Gather Personal Information",
|
|
388
|
+
difficulty=Difficulty.LOW,
|
|
389
|
+
cost=Cost.FREE,
|
|
390
|
+
detection=DetectionRisk.NONE
|
|
391
|
+
)
|
|
392
|
+
.attack(
|
|
393
|
+
"A7", "Call Support Desk",
|
|
394
|
+
difficulty=Difficulty.MEDIUM,
|
|
395
|
+
cost=Cost.FREE,
|
|
396
|
+
detection=DetectionRisk.MEDIUM,
|
|
397
|
+
mitigations=["Support verification procedures", "Security questions"]
|
|
398
|
+
)
|
|
399
|
+
.end()
|
|
400
|
+
.end()
|
|
401
|
+
|
|
402
|
+
.build()
|
|
403
|
+
)
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Template 3: Mermaid Diagram Generator
|
|
407
|
+
|
|
408
|
+
```python
|
|
409
|
+
class MermaidExporter:
|
|
410
|
+
"""Export attack trees to Mermaid diagram format."""
|
|
411
|
+
|
|
412
|
+
def __init__(self, tree: AttackTree):
|
|
413
|
+
self.tree = tree
|
|
414
|
+
self._lines: List[str] = []
|
|
415
|
+
self._node_count = 0
|
|
416
|
+
|
|
417
|
+
def export(self) -> str:
|
|
418
|
+
"""Export tree to Mermaid flowchart."""
|
|
419
|
+
self._lines = ["flowchart TD"]
|
|
420
|
+
self._export_node(self.tree.root, None)
|
|
421
|
+
return "\n".join(self._lines)
|
|
422
|
+
|
|
423
|
+
def _export_node(self, node: AttackNode, parent_id: Optional[str]) -> str:
|
|
424
|
+
"""Recursively export nodes."""
|
|
425
|
+
node_id = f"N{self._node_count}"
|
|
426
|
+
self._node_count += 1
|
|
427
|
+
|
|
428
|
+
# Node shape based on type
|
|
429
|
+
if node.node_type == NodeType.OR:
|
|
430
|
+
shape = f"{node_id}(({node.name}))"
|
|
431
|
+
elif node.node_type == NodeType.AND:
|
|
432
|
+
shape = f"{node_id}[{node.name}]"
|
|
433
|
+
else: # LEAF
|
|
434
|
+
# Color based on difficulty
|
|
435
|
+
style = self._get_leaf_style(node)
|
|
436
|
+
shape = f"{node_id}[/{node.name}/]"
|
|
437
|
+
self._lines.append(f" style {node_id} {style}")
|
|
438
|
+
|
|
439
|
+
self._lines.append(f" {shape}")
|
|
440
|
+
|
|
441
|
+
if parent_id:
|
|
442
|
+
connector = "-->" if node.node_type != NodeType.AND else "==>"
|
|
443
|
+
self._lines.append(f" {parent_id} {connector} {node_id}")
|
|
444
|
+
|
|
445
|
+
for child in node.children:
|
|
446
|
+
self._export_node(child, node_id)
|
|
447
|
+
|
|
448
|
+
return node_id
|
|
449
|
+
|
|
450
|
+
def _get_leaf_style(self, node: AttackNode) -> str:
|
|
451
|
+
"""Get style based on attack attributes."""
|
|
452
|
+
colors = {
|
|
453
|
+
Difficulty.TRIVIAL: "fill:#ff6b6b", # Red - easy attack
|
|
454
|
+
Difficulty.LOW: "fill:#ffa06b",
|
|
455
|
+
Difficulty.MEDIUM: "fill:#ffd93d",
|
|
456
|
+
Difficulty.HIGH: "fill:#6bcb77",
|
|
457
|
+
Difficulty.EXPERT: "fill:#4d96ff", # Blue - hard attack
|
|
458
|
+
}
|
|
459
|
+
color = colors.get(node.attributes.difficulty, "fill:#gray")
|
|
460
|
+
return color
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
class PlantUMLExporter:
|
|
464
|
+
"""Export attack trees to PlantUML format."""
|
|
465
|
+
|
|
466
|
+
def __init__(self, tree: AttackTree):
|
|
467
|
+
self.tree = tree
|
|
468
|
+
|
|
469
|
+
def export(self) -> str:
|
|
470
|
+
"""Export tree to PlantUML."""
|
|
471
|
+
lines = [
|
|
472
|
+
"@startmindmap",
|
|
473
|
+
f"* {self.tree.name}",
|
|
474
|
+
]
|
|
475
|
+
self._export_node(self.tree.root, lines, 1)
|
|
476
|
+
lines.append("@endmindmap")
|
|
477
|
+
return "\n".join(lines)
|
|
478
|
+
|
|
479
|
+
def _export_node(self, node: AttackNode, lines: List[str], depth: int) -> None:
|
|
480
|
+
"""Recursively export nodes."""
|
|
481
|
+
prefix = "*" * (depth + 1)
|
|
482
|
+
|
|
483
|
+
if node.node_type == NodeType.OR:
|
|
484
|
+
marker = "[OR]"
|
|
485
|
+
elif node.node_type == NodeType.AND:
|
|
486
|
+
marker = "[AND]"
|
|
487
|
+
else:
|
|
488
|
+
diff = node.attributes.difficulty.name
|
|
489
|
+
marker = f"<<{diff}>>"
|
|
490
|
+
|
|
491
|
+
lines.append(f"{prefix} {marker} {node.name}")
|
|
492
|
+
|
|
493
|
+
for child in node.children:
|
|
494
|
+
self._export_node(child, lines, depth + 1)
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### Template 4: Attack Path Analysis
|
|
498
|
+
|
|
499
|
+
```python
|
|
500
|
+
from typing import Set, Tuple
|
|
501
|
+
|
|
502
|
+
class AttackPathAnalyzer:
|
|
503
|
+
"""Analyze attack paths and coverage."""
|
|
504
|
+
|
|
505
|
+
def __init__(self, tree: AttackTree):
|
|
506
|
+
self.tree = tree
|
|
507
|
+
|
|
508
|
+
def get_all_paths(self) -> List[List[AttackNode]]:
|
|
509
|
+
"""Get all possible attack paths."""
|
|
510
|
+
paths = []
|
|
511
|
+
self._collect_paths(self.tree.root, [], paths)
|
|
512
|
+
return paths
|
|
513
|
+
|
|
514
|
+
def _collect_paths(
|
|
515
|
+
self,
|
|
516
|
+
node: AttackNode,
|
|
517
|
+
current_path: List[AttackNode],
|
|
518
|
+
all_paths: List[List[AttackNode]]
|
|
519
|
+
) -> None:
|
|
520
|
+
"""Recursively collect all paths."""
|
|
521
|
+
current_path = current_path + [node]
|
|
522
|
+
|
|
523
|
+
if node.node_type == NodeType.LEAF:
|
|
524
|
+
all_paths.append(current_path)
|
|
525
|
+
return
|
|
526
|
+
|
|
527
|
+
if not node.children:
|
|
528
|
+
all_paths.append(current_path)
|
|
529
|
+
return
|
|
530
|
+
|
|
531
|
+
if node.node_type == NodeType.OR:
|
|
532
|
+
# Each child is a separate path
|
|
533
|
+
for child in node.children:
|
|
534
|
+
self._collect_paths(child, current_path, all_paths)
|
|
535
|
+
else: # AND
|
|
536
|
+
# Must combine all children
|
|
537
|
+
child_paths = []
|
|
538
|
+
for child in node.children:
|
|
539
|
+
child_sub_paths = []
|
|
540
|
+
self._collect_paths(child, [], child_sub_paths)
|
|
541
|
+
child_paths.append(child_sub_paths)
|
|
542
|
+
|
|
543
|
+
# Combine paths from all AND children
|
|
544
|
+
combined = self._combine_and_paths(child_paths)
|
|
545
|
+
for combo in combined:
|
|
546
|
+
all_paths.append(current_path + combo)
|
|
547
|
+
|
|
548
|
+
def _combine_and_paths(
|
|
549
|
+
self,
|
|
550
|
+
child_paths: List[List[List[AttackNode]]]
|
|
551
|
+
) -> List[List[AttackNode]]:
|
|
552
|
+
"""Combine paths from AND node children."""
|
|
553
|
+
if not child_paths:
|
|
554
|
+
return [[]]
|
|
555
|
+
|
|
556
|
+
if len(child_paths) == 1:
|
|
557
|
+
return [path for paths in child_paths for path in paths]
|
|
558
|
+
|
|
559
|
+
# Cartesian product of all child path combinations
|
|
560
|
+
result = [[]]
|
|
561
|
+
for paths in child_paths:
|
|
562
|
+
new_result = []
|
|
563
|
+
for existing in result:
|
|
564
|
+
for path in paths:
|
|
565
|
+
new_result.append(existing + path)
|
|
566
|
+
result = new_result
|
|
567
|
+
return result
|
|
568
|
+
|
|
569
|
+
def calculate_path_metrics(self, path: List[AttackNode]) -> Dict:
|
|
570
|
+
"""Calculate metrics for a specific path."""
|
|
571
|
+
leaves = [n for n in path if n.node_type == NodeType.LEAF]
|
|
572
|
+
|
|
573
|
+
total_difficulty = sum(n.attributes.difficulty.value for n in leaves)
|
|
574
|
+
total_cost = sum(n.attributes.cost.value for n in leaves)
|
|
575
|
+
total_time = sum(n.attributes.time_hours for n in leaves)
|
|
576
|
+
max_detection = max((n.attributes.detection_risk.value for n in leaves), default=0)
|
|
577
|
+
|
|
578
|
+
return {
|
|
579
|
+
"steps": len(leaves),
|
|
580
|
+
"total_difficulty": total_difficulty,
|
|
581
|
+
"avg_difficulty": total_difficulty / len(leaves) if leaves else 0,
|
|
582
|
+
"total_cost": total_cost,
|
|
583
|
+
"total_time_hours": total_time,
|
|
584
|
+
"max_detection_risk": max_detection,
|
|
585
|
+
"requires_insider": any(n.attributes.requires_insider for n in leaves),
|
|
586
|
+
"requires_physical": any(n.attributes.requires_physical for n in leaves),
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
def identify_critical_nodes(self) -> List[Tuple[AttackNode, int]]:
|
|
590
|
+
"""Find nodes that appear in the most paths."""
|
|
591
|
+
paths = self.get_all_paths()
|
|
592
|
+
node_counts: Dict[str, Tuple[AttackNode, int]] = {}
|
|
593
|
+
|
|
594
|
+
for path in paths:
|
|
595
|
+
for node in path:
|
|
596
|
+
if node.id not in node_counts:
|
|
597
|
+
node_counts[node.id] = (node, 0)
|
|
598
|
+
node_counts[node.id] = (node, node_counts[node.id][1] + 1)
|
|
599
|
+
|
|
600
|
+
return sorted(
|
|
601
|
+
node_counts.values(),
|
|
602
|
+
key=lambda x: x[1],
|
|
603
|
+
reverse=True
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
def coverage_analysis(self, mitigated_attacks: Set[str]) -> Dict:
|
|
607
|
+
"""Analyze how mitigations affect attack coverage."""
|
|
608
|
+
all_paths = self.get_all_paths()
|
|
609
|
+
blocked_paths = []
|
|
610
|
+
open_paths = []
|
|
611
|
+
|
|
612
|
+
for path in all_paths:
|
|
613
|
+
path_attacks = {n.id for n in path if n.node_type == NodeType.LEAF}
|
|
614
|
+
if path_attacks & mitigated_attacks:
|
|
615
|
+
blocked_paths.append(path)
|
|
616
|
+
else:
|
|
617
|
+
open_paths.append(path)
|
|
618
|
+
|
|
619
|
+
return {
|
|
620
|
+
"total_paths": len(all_paths),
|
|
621
|
+
"blocked_paths": len(blocked_paths),
|
|
622
|
+
"open_paths": len(open_paths),
|
|
623
|
+
"coverage_percentage": len(blocked_paths) / len(all_paths) * 100 if all_paths else 0,
|
|
624
|
+
"open_path_details": [
|
|
625
|
+
{"path": [n.name for n in p], "metrics": self.calculate_path_metrics(p)}
|
|
626
|
+
for p in open_paths[:5] # Top 5 open paths
|
|
627
|
+
]
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
def prioritize_mitigations(self) -> List[Dict]:
|
|
631
|
+
"""Prioritize mitigations by impact."""
|
|
632
|
+
critical_nodes = self.identify_critical_nodes()
|
|
633
|
+
paths = self.get_all_paths()
|
|
634
|
+
total_paths = len(paths)
|
|
635
|
+
|
|
636
|
+
recommendations = []
|
|
637
|
+
for node, count in critical_nodes:
|
|
638
|
+
if node.node_type == NodeType.LEAF and node.mitigations:
|
|
639
|
+
recommendations.append({
|
|
640
|
+
"attack": node.name,
|
|
641
|
+
"attack_id": node.id,
|
|
642
|
+
"paths_blocked": count,
|
|
643
|
+
"coverage_impact": count / total_paths * 100,
|
|
644
|
+
"difficulty": node.attributes.difficulty.name,
|
|
645
|
+
"mitigations": node.mitigations,
|
|
646
|
+
})
|
|
647
|
+
|
|
648
|
+
return sorted(recommendations, key=lambda x: x["coverage_impact"], reverse=True)
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
## Best Practices
|
|
652
|
+
|
|
653
|
+
### Do's
|
|
654
|
+
- **Start with clear goals** - Define what attacker wants
|
|
655
|
+
- **Be exhaustive** - Consider all attack vectors
|
|
656
|
+
- **Attribute attacks** - Cost, skill, and detection
|
|
657
|
+
- **Update regularly** - New threats emerge
|
|
658
|
+
- **Validate with experts** - Red team review
|
|
659
|
+
|
|
660
|
+
### Don'ts
|
|
661
|
+
- **Don't oversimplify** - Real attacks are complex
|
|
662
|
+
- **Don't ignore dependencies** - AND nodes matter
|
|
663
|
+
- **Don't forget insider threats** - Not all attackers are external
|
|
664
|
+
- **Don't skip mitigations** - Trees are for defense planning
|
|
665
|
+
- **Don't make it static** - Threat landscape evolves
|
|
666
|
+
|
|
667
|
+
## Resources
|
|
668
|
+
|
|
669
|
+
- [Attack Trees by Bruce Schneier](https://www.schneier.com/academic/archives/1999/12/attack_trees.html)
|
|
670
|
+
- [MITRE ATT&CK Framework](https://attack.mitre.org/)
|
|
671
|
+
- [OWASP Attack Surface Analysis](https://owasp.org/www-community/controls/Attack_Surface_Analysis_Cheat_Sheet)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: auth-implementation-patterns
|
|
3
|
+
description: Master authentication and authorization patterns including JWT, OAuth2, session management, and RBAC to build secure, scalable access control systems. Use when implementing auth systems, securing APIs, or debugging security issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Authentication & Authorization Implementation Patterns
|
|
7
|
+
|
|
8
|
+
Build secure, scalable authentication and authorization systems using industry-standard patterns and modern best practices.
|
|
9
|
+
|
|
10
|
+
## Use this skill when
|
|
11
|
+
|
|
12
|
+
- Implementing user authentication systems
|
|
13
|
+
- Securing REST or GraphQL APIs
|
|
14
|
+
- Adding OAuth2/social login or SSO
|
|
15
|
+
- Designing session management or RBAC
|
|
16
|
+
- Debugging authentication or authorization issues
|
|
17
|
+
|
|
18
|
+
## Do not use this skill when
|
|
19
|
+
|
|
20
|
+
- You only need UI copy or login page styling
|
|
21
|
+
- The task is infrastructure-only without identity concerns
|
|
22
|
+
- You cannot change auth policies or credential storage
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
- Define users, tenants, flows, and threat model constraints.
|
|
27
|
+
- Choose auth strategy (session, JWT, OIDC) and token lifecycle.
|
|
28
|
+
- Design authorization model and policy enforcement points.
|
|
29
|
+
- Plan secrets storage, rotation, logging, and audit requirements.
|
|
30
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
31
|
+
|
|
32
|
+
## Safety
|
|
33
|
+
|
|
34
|
+
- Never log secrets, tokens, or credentials.
|
|
35
|
+
- Enforce least privilege and secure storage for keys.
|
|
36
|
+
|
|
37
|
+
## Resources
|
|
38
|
+
|
|
39
|
+
- `resources/implementation-playbook.md` for detailed patterns and examples.
|