cfsa-antigravity 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/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aws
|
|
3
|
+
description: AWS hosting and deployment patterns covering compute (EC2, ECS, Lambda), networking (ALB, CloudFront, Route 53, API Gateway), databases (RDS, ElastiCache), infrastructure-as-code (CDK), IAM, monitoring (CloudWatch), and cost optimization. Use when deploying applications to AWS or designing cloud architecture. Triggers on AWS, EC2, ECS, Fargate, Lambda, CloudFront, CDK, API Gateway, Route 53, RDS, IAM.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AWS Hosting
|
|
8
|
+
|
|
9
|
+
AWS provides the broadest set of cloud services. This skill covers the most common hosting patterns for web applications, APIs, and background services, with infrastructure-as-code via AWS CDK.
|
|
10
|
+
|
|
11
|
+
## Architecture Decision Tree
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
What are you deploying?
|
|
15
|
+
├─ Static site (HTML/CSS/JS) ──────────> S3 + CloudFront
|
|
16
|
+
├─ Server-rendered app (Next.js, etc.) ─> ECS Fargate or Lambda
|
|
17
|
+
├─ REST/GraphQL API ───────────────────> Lambda + API Gateway OR ECS Fargate + ALB
|
|
18
|
+
├─ Long-running background workers ────> ECS Fargate (always-on) or EC2
|
|
19
|
+
├─ Event-driven functions ─────────────> Lambda (triggered by SQS, S3, EventBridge)
|
|
20
|
+
├─ Containerized microservices ────────> ECS Fargate + ALB + Service Connect
|
|
21
|
+
└─ Full control over the VM ───────────> EC2 (last resort)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## EC2 — Virtual Machines
|
|
25
|
+
|
|
26
|
+
Use EC2 only when you need full OS-level control, GPU instances, or specific hardware. For most web apps, prefer ECS Fargate or Lambda.
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// CDK: EC2 instance
|
|
30
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
31
|
+
|
|
32
|
+
const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 2 });
|
|
33
|
+
|
|
34
|
+
const instance = new ec2.Instance(this, 'WebServer', {
|
|
35
|
+
vpc,
|
|
36
|
+
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
|
|
37
|
+
machineImage: ec2.MachineImage.latestAmazonLinux2023(),
|
|
38
|
+
keyPair: ec2.KeyPair.fromKeyPairName(this, 'KeyPair', 'my-key'),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
instance.connections.allowFromAnyIpv4(ec2.Port.tcp(80));
|
|
42
|
+
instance.connections.allowFromAnyIpv4(ec2.Port.tcp(443));
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## ECS Fargate — Serverless Containers
|
|
46
|
+
|
|
47
|
+
The standard choice for containerized web applications. No servers to manage, auto-scaling built in.
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import * as ecs from 'aws-cdk-lib/aws-ecs';
|
|
51
|
+
import * as ecsPatterns from 'aws-cdk-lib/aws-ecs-patterns';
|
|
52
|
+
|
|
53
|
+
const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
|
|
54
|
+
|
|
55
|
+
// Web service with ALB (most common pattern)
|
|
56
|
+
const service = new ecsPatterns.ApplicationLoadBalancedFargateService(this, 'WebApp', {
|
|
57
|
+
cluster,
|
|
58
|
+
cpu: 512,
|
|
59
|
+
memoryLimitMiB: 1024,
|
|
60
|
+
desiredCount: 2,
|
|
61
|
+
taskImageOptions: {
|
|
62
|
+
image: ecs.ContainerImage.fromAsset('./'), // Build from Dockerfile in root
|
|
63
|
+
containerPort: 3000,
|
|
64
|
+
environment: {
|
|
65
|
+
NODE_ENV: 'production',
|
|
66
|
+
DATABASE_URL: databaseUrl,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
publicLoadBalancer: true,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Auto-scaling
|
|
73
|
+
const scaling = service.service.autoScaleTaskCount({ maxCapacity: 10 });
|
|
74
|
+
scaling.scaleOnCpuUtilization('CpuScaling', {
|
|
75
|
+
targetUtilizationPercent: 70,
|
|
76
|
+
});
|
|
77
|
+
scaling.scaleOnMemoryUtilization('MemoryScaling', {
|
|
78
|
+
targetUtilizationPercent: 80,
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### ECS with custom task definition
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
const taskDef = new ecs.FargateTaskDefinition(this, 'TaskDef', {
|
|
86
|
+
cpu: 1024,
|
|
87
|
+
memoryLimitMiB: 2048,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
taskDef.addContainer('app', {
|
|
91
|
+
image: ecs.ContainerImage.fromEcrRepository(repo, 'latest'),
|
|
92
|
+
portMappings: [{ containerPort: 3000 }],
|
|
93
|
+
logging: ecs.LogDrivers.awsLogs({ streamPrefix: 'app' }),
|
|
94
|
+
healthCheck: {
|
|
95
|
+
command: ['CMD-SHELL', 'curl -f http://localhost:3000/health || exit 1'],
|
|
96
|
+
interval: cdk.Duration.seconds(30),
|
|
97
|
+
timeout: cdk.Duration.seconds(5),
|
|
98
|
+
retries: 3,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Lambda — Serverless Functions
|
|
104
|
+
|
|
105
|
+
Best for event-driven workloads, APIs with variable traffic, and cost-sensitive projects.
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
109
|
+
import * as lambdaNode from 'aws-cdk-lib/aws-lambda-nodejs';
|
|
110
|
+
|
|
111
|
+
const handler = new lambdaNode.NodejsFunction(this, 'ApiHandler', {
|
|
112
|
+
runtime: lambda.Runtime.NODEJS_20_X,
|
|
113
|
+
entry: 'src/lambda/handler.ts',
|
|
114
|
+
handler: 'handler',
|
|
115
|
+
memorySize: 512,
|
|
116
|
+
timeout: cdk.Duration.seconds(30),
|
|
117
|
+
environment: {
|
|
118
|
+
DATABASE_URL: databaseUrl,
|
|
119
|
+
},
|
|
120
|
+
bundling: {
|
|
121
|
+
minify: true,
|
|
122
|
+
sourceMap: true,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Lambda handler pattern
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// src/lambda/handler.ts
|
|
131
|
+
import type { APIGatewayProxyHandlerV2 } from 'aws-lambda';
|
|
132
|
+
|
|
133
|
+
export const handler: APIGatewayProxyHandlerV2 = async (event) => {
|
|
134
|
+
const body = JSON.parse(event.body ?? '{}');
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
statusCode: 200,
|
|
138
|
+
headers: { 'Content-Type': 'application/json' },
|
|
139
|
+
body: JSON.stringify({ message: 'OK', data: body }),
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Lambda limitations
|
|
145
|
+
|
|
146
|
+
| Constraint | Limit |
|
|
147
|
+
|-----------|-------|
|
|
148
|
+
| Max execution time | 15 minutes |
|
|
149
|
+
| Max memory | 10,240 MB |
|
|
150
|
+
| Max payload (sync) | 6 MB |
|
|
151
|
+
| Max payload (async) | 256 KB |
|
|
152
|
+
| Cold start | 100ms-2s (depends on runtime/size) |
|
|
153
|
+
| Concurrent executions | 1,000 (default, can increase) |
|
|
154
|
+
|
|
155
|
+
## API Gateway
|
|
156
|
+
|
|
157
|
+
### HTTP API (v2) — Recommended
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import * as apigwv2 from 'aws-cdk-lib/aws-apigatewayv2';
|
|
161
|
+
import * as integrations from 'aws-cdk-lib/aws-apigatewayv2-integrations';
|
|
162
|
+
|
|
163
|
+
const httpApi = new apigwv2.HttpApi(this, 'Api', {
|
|
164
|
+
corsPreflight: {
|
|
165
|
+
allowOrigins: ['https://myapp.com'],
|
|
166
|
+
allowMethods: [apigwv2.CorsHttpMethod.GET, apigwv2.CorsHttpMethod.POST],
|
|
167
|
+
allowHeaders: ['Content-Type', 'Authorization'],
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
httpApi.addRoutes({
|
|
172
|
+
path: '/users/{id}',
|
|
173
|
+
methods: [apigwv2.HttpMethod.GET],
|
|
174
|
+
integration: new integrations.HttpLambdaIntegration('GetUser', handler),
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### REST API (v1) — When you need request validation, API keys, or usage plans
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
import * as apigw from 'aws-cdk-lib/aws-apigateway';
|
|
182
|
+
|
|
183
|
+
const api = new apigw.RestApi(this, 'RestApi', {
|
|
184
|
+
restApiName: 'MyService',
|
|
185
|
+
deployOptions: { stageName: 'prod' },
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const users = api.root.addResource('users');
|
|
189
|
+
users.addMethod('GET', new apigw.LambdaIntegration(handler));
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## CloudFront CDN
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
196
|
+
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
|
|
197
|
+
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
198
|
+
|
|
199
|
+
const siteBucket = new s3.Bucket(this, 'SiteBucket', {
|
|
200
|
+
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const distribution = new cloudfront.Distribution(this, 'CDN', {
|
|
204
|
+
defaultBehavior: {
|
|
205
|
+
origin: origins.S3BucketOrigin.withOriginAccessControl(siteBucket),
|
|
206
|
+
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
207
|
+
cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
|
|
208
|
+
},
|
|
209
|
+
defaultRootObject: 'index.html',
|
|
210
|
+
errorResponses: [
|
|
211
|
+
{
|
|
212
|
+
httpStatus: 404,
|
|
213
|
+
responsePagePath: '/index.html', // SPA fallback
|
|
214
|
+
responseHttpStatus: 200,
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Route 53 DNS
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
224
|
+
import * as targets from 'aws-cdk-lib/aws-route53-targets';
|
|
225
|
+
|
|
226
|
+
const zone = route53.HostedZone.fromLookup(this, 'Zone', {
|
|
227
|
+
domainName: 'example.com',
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
new route53.ARecord(this, 'SiteAlias', {
|
|
231
|
+
zone,
|
|
232
|
+
recordName: 'app', // app.example.com
|
|
233
|
+
target: route53.RecordTarget.fromAlias(
|
|
234
|
+
new targets.CloudFrontTarget(distribution)
|
|
235
|
+
),
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## RDS — Relational Database
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
import * as rds from 'aws-cdk-lib/aws-rds';
|
|
243
|
+
|
|
244
|
+
const database = new rds.DatabaseInstance(this, 'Database', {
|
|
245
|
+
engine: rds.DatabaseInstanceEngine.postgres({
|
|
246
|
+
version: rds.PostgresEngineVersion.VER_16_4,
|
|
247
|
+
}),
|
|
248
|
+
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
|
|
249
|
+
vpc,
|
|
250
|
+
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
|
|
251
|
+
databaseName: 'myapp',
|
|
252
|
+
credentials: rds.Credentials.fromGeneratedSecret('dbadmin'),
|
|
253
|
+
multiAz: false, // true for production
|
|
254
|
+
allocatedStorage: 20,
|
|
255
|
+
maxAllocatedStorage: 100, // Auto-scaling storage
|
|
256
|
+
backupRetention: cdk.Duration.days(7),
|
|
257
|
+
deletionProtection: true, // Prevent accidental deletion
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// Allow ECS tasks to connect
|
|
261
|
+
database.connections.allowFrom(service.service, ec2.Port.tcp(5432));
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## ElastiCache — Redis
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import * as elasticache from 'aws-cdk-lib/aws-elasticache';
|
|
268
|
+
|
|
269
|
+
const subnetGroup = new elasticache.CfnSubnetGroup(this, 'RedisSubnets', {
|
|
270
|
+
description: 'Subnets for Redis',
|
|
271
|
+
subnetIds: vpc.privateSubnets.map(s => s.subnetId),
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
const redis = new elasticache.CfnCacheCluster(this, 'Redis', {
|
|
275
|
+
cacheNodeType: 'cache.t3.micro',
|
|
276
|
+
engine: 'redis',
|
|
277
|
+
numCacheNodes: 1,
|
|
278
|
+
cacheSubnetGroupName: subnetGroup.ref,
|
|
279
|
+
vpcSecurityGroupIds: [redisSecurityGroup.securityGroupId],
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## IAM Best Practices
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
287
|
+
|
|
288
|
+
// Principle of least privilege — grant only what is needed
|
|
289
|
+
handler.addToRolePolicy(new iam.PolicyStatement({
|
|
290
|
+
actions: ['s3:GetObject', 's3:PutObject'],
|
|
291
|
+
resources: [`${bucket.bucketArn}/uploads/*`], // Scoped to prefix
|
|
292
|
+
}));
|
|
293
|
+
|
|
294
|
+
// Never use wildcards for actions in production
|
|
295
|
+
// BAD: actions: ['s3:*']
|
|
296
|
+
// GOOD: actions: ['s3:GetObject', 's3:PutObject']
|
|
297
|
+
|
|
298
|
+
// Use managed policies for common patterns
|
|
299
|
+
taskDef.taskRole.addManagedPolicy(
|
|
300
|
+
iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonS3ReadOnlyAccess')
|
|
301
|
+
);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### IAM Anti-Patterns
|
|
305
|
+
|
|
306
|
+
| Anti-Pattern | Risk | Correct Approach |
|
|
307
|
+
|-------------|------|-----------------|
|
|
308
|
+
| `Action: '*'` | Full account access | List specific actions |
|
|
309
|
+
| `Resource: '*'` | Applies to all resources | Scope to specific ARNs |
|
|
310
|
+
| Long-lived access keys | Key rotation burden, leak risk | Use IAM roles (EC2, ECS, Lambda get them automatically) |
|
|
311
|
+
| Root account for anything | Unrestricted, unauditable | Create IAM users/roles, enable MFA on root |
|
|
312
|
+
| Sharing credentials between services | Blast radius, no audit trail | One role per service |
|
|
313
|
+
|
|
314
|
+
## AWS CDK — Infrastructure as Code
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
pnpm add -D aws-cdk-lib constructs
|
|
318
|
+
npx cdk init app --language typescript
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### CDK Project Structure
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
infra/
|
|
325
|
+
bin/app.ts # Entry point — instantiates stacks
|
|
326
|
+
lib/
|
|
327
|
+
network-stack.ts # VPC, subnets, security groups
|
|
328
|
+
compute-stack.ts # ECS, Lambda
|
|
329
|
+
data-stack.ts # RDS, ElastiCache, S3
|
|
330
|
+
cdn-stack.ts # CloudFront, Route 53
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### CDK Commands
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
npx cdk synth # Generate CloudFormation template
|
|
337
|
+
npx cdk diff # Preview changes
|
|
338
|
+
npx cdk deploy # Deploy all stacks
|
|
339
|
+
npx cdk deploy ComputeStack # Deploy specific stack
|
|
340
|
+
npx cdk destroy # Tear down
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### CDK Stack Pattern
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
import * as cdk from 'aws-cdk-lib';
|
|
347
|
+
import { Construct } from 'constructs';
|
|
348
|
+
|
|
349
|
+
export class ComputeStack extends cdk.Stack {
|
|
350
|
+
public readonly serviceUrl: string;
|
|
351
|
+
|
|
352
|
+
constructor(scope: Construct, id: string, props: cdk.StackProps & {
|
|
353
|
+
vpc: ec2.IVpc;
|
|
354
|
+
databaseUrl: string;
|
|
355
|
+
}) {
|
|
356
|
+
super(scope, id, props);
|
|
357
|
+
|
|
358
|
+
// Resources defined here
|
|
359
|
+
// Export values for cross-stack references
|
|
360
|
+
this.serviceUrl = service.loadBalancer.loadBalancerDnsName;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## CloudWatch Monitoring
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
|
|
369
|
+
import * as actions from 'aws-cdk-lib/aws-cloudwatch-actions';
|
|
370
|
+
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
371
|
+
|
|
372
|
+
const alarmTopic = new sns.Topic(this, 'AlarmTopic');
|
|
373
|
+
|
|
374
|
+
// ECS CPU alarm
|
|
375
|
+
new cloudwatch.Alarm(this, 'HighCpu', {
|
|
376
|
+
metric: service.service.metricCpuUtilization(),
|
|
377
|
+
threshold: 80,
|
|
378
|
+
evaluationPeriods: 3,
|
|
379
|
+
comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
380
|
+
}).addAlarmAction(new actions.SnsAction(alarmTopic));
|
|
381
|
+
|
|
382
|
+
// Lambda error rate alarm
|
|
383
|
+
new cloudwatch.Alarm(this, 'LambdaErrors', {
|
|
384
|
+
metric: handler.metricErrors({ period: cdk.Duration.minutes(5) }),
|
|
385
|
+
threshold: 5,
|
|
386
|
+
evaluationPeriods: 1,
|
|
387
|
+
}).addAlarmAction(new actions.SnsAction(alarmTopic));
|
|
388
|
+
|
|
389
|
+
// Custom dashboard
|
|
390
|
+
const dashboard = new cloudwatch.Dashboard(this, 'AppDashboard');
|
|
391
|
+
dashboard.addWidgets(
|
|
392
|
+
new cloudwatch.GraphWidget({
|
|
393
|
+
title: 'ECS CPU & Memory',
|
|
394
|
+
left: [service.service.metricCpuUtilization()],
|
|
395
|
+
right: [service.service.metricMemoryUtilization()],
|
|
396
|
+
}),
|
|
397
|
+
);
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Cost Optimization
|
|
401
|
+
|
|
402
|
+
| Strategy | Savings | How |
|
|
403
|
+
|---------|---------|-----|
|
|
404
|
+
| Right-size instances | 30-50% | Use CloudWatch metrics to identify over-provisioned resources |
|
|
405
|
+
| Spot instances (ECS) | Up to 90% on compute | Use Fargate Spot for fault-tolerant workloads |
|
|
406
|
+
| Reserved instances | 30-60% | Commit to 1-3 year terms for steady-state workloads |
|
|
407
|
+
| S3 lifecycle rules | Variable | Move infrequent data to IA/Glacier automatically |
|
|
408
|
+
| Lambda right-sizing | 10-40% | Use AWS Lambda Power Tuning to find optimal memory |
|
|
409
|
+
| NAT Gateway alternatives | $30+/mo | Use VPC endpoints for S3/DynamoDB, reduce NAT traffic |
|
|
410
|
+
| CloudFront caching | Variable | Reduce origin requests with proper cache policies |
|
|
411
|
+
| Scheduled scaling | Variable | Scale down non-prod environments nights/weekends |
|
|
412
|
+
|
|
413
|
+
### Fargate Spot for cost savings
|
|
414
|
+
|
|
415
|
+
```typescript
|
|
416
|
+
const service = new ecsPatterns.ApplicationLoadBalancedFargateService(this, 'App', {
|
|
417
|
+
cluster,
|
|
418
|
+
capacityProviderStrategies: [
|
|
419
|
+
{ capacityProvider: 'FARGATE_SPOT', weight: 2 },
|
|
420
|
+
{ capacityProvider: 'FARGATE', weight: 1 }, // Fallback to on-demand
|
|
421
|
+
],
|
|
422
|
+
taskImageOptions: { image: ecs.ContainerImage.fromAsset('./') },
|
|
423
|
+
});
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## Common Architecture Patterns
|
|
427
|
+
|
|
428
|
+
### Static Site
|
|
429
|
+
|
|
430
|
+
```
|
|
431
|
+
Route 53 -> CloudFront -> S3 (static files)
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### API + Database
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
Route 53 -> CloudFront -> API Gateway -> Lambda -> RDS
|
|
438
|
+
-> ElastiCache (caching)
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Containerized Web App
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
Route 53 -> CloudFront -> ALB -> ECS Fargate (2+ tasks)
|
|
445
|
+
|
|
|
446
|
+
RDS (private subnet)
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Event-Driven Processing
|
|
450
|
+
|
|
451
|
+
```
|
|
452
|
+
S3 upload -> EventBridge -> Lambda -> DynamoDB
|
|
453
|
+
SQS queue -> Lambda -> External API
|
|
454
|
+
Schedule -> EventBridge -> Lambda -> SNS notification
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
## Anti-Patterns
|
|
458
|
+
|
|
459
|
+
| Anti-Pattern | Why It Fails | Correct Approach |
|
|
460
|
+
|-------------|-------------|-----------------|
|
|
461
|
+
| Public subnets for databases | Direct internet exposure | Private subnets, access only via application layer |
|
|
462
|
+
| No health checks on ALB targets | Traffic routed to dead instances | Configure `/health` endpoint, set healthy thresholds |
|
|
463
|
+
| Lambda with VPC when not needed | Cold start penalty (seconds) | Only put Lambda in VPC if it needs private resources |
|
|
464
|
+
| Hardcoding region/account IDs | Breaks multi-env deploys | Use `cdk.Stack.of(this).region` and env variables |
|
|
465
|
+
| One giant CloudFormation stack | Slow deploys, blast radius | Split into network, compute, data, CDN stacks |
|
|
466
|
+
| Not enabling deletion protection | Accidental `cdk destroy` kills DB | Set `deletionProtection: true` on RDS, `removalPolicy: RETAIN` |
|
|
467
|
+
| Storing secrets in environment variables | Visible in console, logs | Use AWS Secrets Manager or SSM Parameter Store |
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cloudflare
|
|
3
|
+
description: Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task.
|
|
4
|
+
references:
|
|
5
|
+
- workers
|
|
6
|
+
- pages
|
|
7
|
+
- d1
|
|
8
|
+
- durable-objects
|
|
9
|
+
- workers-ai
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Cloudflare Platform Skill
|
|
13
|
+
|
|
14
|
+
Consolidated skill for building on the Cloudflare platform. Use decision trees below to find the right product, then load detailed references.
|
|
15
|
+
|
|
16
|
+
## Quick Decision Trees
|
|
17
|
+
|
|
18
|
+
### "I need to run code"
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Need to run code?
|
|
22
|
+
├─ Serverless functions at the edge → workers/
|
|
23
|
+
├─ Full-stack web app with Git deploys → pages/
|
|
24
|
+
├─ Stateful coordination/real-time → durable-objects/
|
|
25
|
+
├─ Long-running multi-step jobs → workflows/
|
|
26
|
+
├─ Run containers → containers/
|
|
27
|
+
├─ Multi-tenant (customers deploy code) → workers-for-platforms/
|
|
28
|
+
├─ Scheduled tasks (cron) → cron-triggers/
|
|
29
|
+
├─ Lightweight edge logic (modify HTTP) → snippets/
|
|
30
|
+
├─ Process Worker execution events (logs/observability) → tail-workers/
|
|
31
|
+
└─ Optimize latency to backend infrastructure → smart-placement/
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### "I need to store data"
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Need storage?
|
|
38
|
+
├─ Key-value (config, sessions, cache) → kv/
|
|
39
|
+
├─ Relational SQL → d1/ (SQLite) or hyperdrive/ (existing Postgres/MySQL)
|
|
40
|
+
├─ Object/file storage (S3-compatible) → r2/
|
|
41
|
+
├─ Message queue (async processing) → queues/
|
|
42
|
+
├─ Vector embeddings (AI/semantic search) → vectorize/
|
|
43
|
+
├─ Strongly-consistent per-entity state → durable-objects/ (DO storage)
|
|
44
|
+
├─ Secrets management → secrets-store/
|
|
45
|
+
├─ Streaming ETL to R2 → pipelines/
|
|
46
|
+
└─ Persistent cache (long-term retention) → cache-reserve/
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### "I need AI/ML"
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Need AI?
|
|
53
|
+
├─ Run inference (LLMs, embeddings, images) → workers-ai/
|
|
54
|
+
├─ Vector database for RAG/search → vectorize/
|
|
55
|
+
├─ Build stateful AI agents → agents-sdk/
|
|
56
|
+
├─ Gateway for any AI provider (caching, routing) → ai-gateway/
|
|
57
|
+
└─ AI-powered search widget → ai-search/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### "I need networking/connectivity"
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Need networking?
|
|
64
|
+
├─ Expose local service to internet → tunnel/
|
|
65
|
+
├─ TCP/UDP proxy (non-HTTP) → spectrum/
|
|
66
|
+
├─ WebRTC TURN server → turn/
|
|
67
|
+
├─ Private network connectivity → network-interconnect/
|
|
68
|
+
├─ Optimize routing → argo-smart-routing/
|
|
69
|
+
├─ Optimize latency to backend (not user) → smart-placement/
|
|
70
|
+
└─ Real-time video/audio → realtimekit/ or realtime-sfu/
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### "I need security"
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Need security?
|
|
77
|
+
├─ Web Application Firewall → waf/
|
|
78
|
+
├─ DDoS protection → ddos/
|
|
79
|
+
├─ Bot detection/management → bot-management/
|
|
80
|
+
├─ API protection → api-shield/
|
|
81
|
+
├─ CAPTCHA alternative → turnstile/
|
|
82
|
+
└─ Credential leak detection → waf/ (managed ruleset)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### "I need media/content"
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Need media?
|
|
89
|
+
├─ Image optimization/transformation → images/
|
|
90
|
+
├─ Video streaming/encoding → stream/
|
|
91
|
+
├─ Browser automation/screenshots → browser-rendering/
|
|
92
|
+
└─ Third-party script management → zaraz/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### "I need infrastructure-as-code"
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Product Index
|
|
102
|
+
|
|
103
|
+
### Compute & Runtime
|
|
104
|
+
| Product | Reference |
|
|
105
|
+
|---------|-----------|
|
|
106
|
+
| Workers | `references/workers/` |
|
|
107
|
+
| Pages | `references/pages/` |
|
|
108
|
+
| Pages Functions | `references/pages-functions/` |
|
|
109
|
+
| Durable Objects | `references/durable-objects/` |
|
|
110
|
+
| Workflows | `references/workflows/` |
|
|
111
|
+
| Containers | `references/containers/` |
|
|
112
|
+
| Workers for Platforms | `references/workers-for-platforms/` |
|
|
113
|
+
| Cron Triggers | `references/cron-triggers/` |
|
|
114
|
+
| Tail Workers | `references/tail-workers/` |
|
|
115
|
+
| Snippets | `references/snippets/` |
|
|
116
|
+
| Smart Placement | `references/smart-placement/` |
|
|
117
|
+
|
|
118
|
+
### Storage & Data
|
|
119
|
+
| Product | Reference |
|
|
120
|
+
|---------|-----------|
|
|
121
|
+
| KV | `references/kv/` |
|
|
122
|
+
| D1 | `references/d1/` |
|
|
123
|
+
| R2 | `references/r2/` |
|
|
124
|
+
| Queues | `references/queues/` |
|
|
125
|
+
| Hyperdrive | `references/hyperdrive/` |
|
|
126
|
+
| DO Storage | `references/do-storage/` |
|
|
127
|
+
| Secrets Store | `references/secrets-store/` |
|
|
128
|
+
| Pipelines | `references/pipelines/` |
|
|
129
|
+
| R2 Data Catalog | `references/r2-data-catalog/` |
|
|
130
|
+
| R2 SQL | `references/r2-sql/` |
|
|
131
|
+
|
|
132
|
+
### AI & Machine Learning
|
|
133
|
+
| Product | Reference |
|
|
134
|
+
|---------|-----------|
|
|
135
|
+
| Workers AI | `references/workers-ai/` |
|
|
136
|
+
| Vectorize | `references/vectorize/` |
|
|
137
|
+
| Agents SDK | `references/agents-sdk/` |
|
|
138
|
+
| AI Gateway | `references/ai-gateway/` |
|
|
139
|
+
| AI Search | `references/ai-search/` |
|
|
140
|
+
|
|
141
|
+
### Networking & Connectivity
|
|
142
|
+
| Product | Reference |
|
|
143
|
+
|---------|-----------|
|
|
144
|
+
| Tunnel | `references/tunnel/` |
|
|
145
|
+
| Spectrum | `references/spectrum/` |
|
|
146
|
+
| TURN | `references/turn/` |
|
|
147
|
+
| Network Interconnect | `references/network-interconnect/` |
|
|
148
|
+
| Argo Smart Routing | `references/argo-smart-routing/` |
|
|
149
|
+
| Workers VPC | `references/workers-vpc/` |
|
|
150
|
+
|
|
151
|
+
### Security
|
|
152
|
+
| Product | Reference |
|
|
153
|
+
|---------|-----------|
|
|
154
|
+
| WAF | `references/waf/` |
|
|
155
|
+
| DDoS Protection | `references/ddos/` |
|
|
156
|
+
| Bot Management | `references/bot-management/` |
|
|
157
|
+
| API Shield | `references/api-shield/` |
|
|
158
|
+
| Turnstile | `references/turnstile/` |
|
|
159
|
+
|
|
160
|
+
### Media & Content
|
|
161
|
+
| Product | Reference |
|
|
162
|
+
|---------|-----------|
|
|
163
|
+
| Images | `references/images/` |
|
|
164
|
+
| Stream | `references/stream/` |
|
|
165
|
+
| Browser Rendering | `references/browser-rendering/` |
|
|
166
|
+
| Zaraz | `references/zaraz/` |
|
|
167
|
+
|
|
168
|
+
### Real-Time Communication
|
|
169
|
+
| Product | Reference |
|
|
170
|
+
|---------|-----------|
|
|
171
|
+
| RealtimeKit | `references/realtimekit/` |
|
|
172
|
+
| Realtime SFU | `references/realtime-sfu/` |
|
|
173
|
+
|
|
174
|
+
### Developer Tools
|
|
175
|
+
| Product | Reference |
|
|
176
|
+
|---------|-----------|
|
|
177
|
+
| Wrangler | `references/wrangler/` |
|
|
178
|
+
| Miniflare | `references/miniflare/` |
|
|
179
|
+
| C3 | `references/c3/` |
|
|
180
|
+
| Observability | `references/observability/` |
|
|
181
|
+
| Analytics Engine | `references/analytics-engine/` |
|
|
182
|
+
| Web Analytics | `references/web-analytics/` |
|
|
183
|
+
| Sandbox | `references/sandbox/` |
|
|
184
|
+
| Workerd | `references/workerd/` |
|
|
185
|
+
| Workers Playground | `references/workers-playground/` |
|
|
186
|
+
|
|
187
|
+
### Infrastructure as Code
|
|
188
|
+
| Product | Reference |
|
|
189
|
+
|---------|-----------|
|
|
190
|
+
| Pulumi | `references/pulumi/` |
|
|
191
|
+
| Terraform | `references/terraform/` |
|
|
192
|
+
| API | `references/api/` |
|
|
193
|
+
|
|
194
|
+
### Other Services
|
|
195
|
+
| Product | Reference |
|
|
196
|
+
|---------|-----------|
|
|
197
|
+
| Email Routing | `references/email-routing/` |
|
|
198
|
+
| Email Workers | `references/email-workers/` |
|
|
199
|
+
| Static Assets | `references/static-assets/` |
|
|
200
|
+
| Bindings | `references/bindings/` |
|
|
201
|
+
| Cache Reserve | `references/cache-reserve/` |
|