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,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prometheus-grafana
|
|
3
|
+
description: |
|
|
4
|
+
Set up Prometheus for metrics collection and Grafana for visualization. Use when: defining Prometheus metric types (counter, gauge, histogram, summary), writing PromQL queries, configuring scrape targets, setting up alerting rules and Alertmanager, creating Grafana dashboards, configuring data sources, or implementing recording rules and federation.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Prometheus & Grafana
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-24
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
Prometheus is a pull-based metrics collection and alerting system. Grafana is a visualization platform that queries Prometheus (and other data sources) to build dashboards. Together they form the most widely deployed open-source monitoring stack.
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Defining Prometheus metric types (counter, gauge, histogram, summary)
|
|
22
|
+
- Writing PromQL queries for dashboards and alerts
|
|
23
|
+
- Configuring Prometheus scrape targets
|
|
24
|
+
- Setting up alerting rules and Alertmanager
|
|
25
|
+
- Creating Grafana dashboards and panels
|
|
26
|
+
- Configuring Grafana data sources
|
|
27
|
+
- Implementing visualization best practices
|
|
28
|
+
- Creating recording rules for query performance
|
|
29
|
+
- Setting up Prometheus federation or remote write
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Key Concepts
|
|
34
|
+
|
|
35
|
+
### Prometheus Metric Types
|
|
36
|
+
|
|
37
|
+
| Type | Purpose | Example |
|
|
38
|
+
|------|---------|---------|
|
|
39
|
+
| **Counter** | Monotonically increasing value | Total HTTP requests, errors |
|
|
40
|
+
| **Gauge** | Value that can go up or down | Current temperature, queue depth |
|
|
41
|
+
| **Histogram** | Distribution of values in configurable buckets | Request latency, response size |
|
|
42
|
+
| **Summary** | Distribution with pre-calculated quantiles | Request latency at p50, p90, p99 |
|
|
43
|
+
|
|
44
|
+
### PromQL
|
|
45
|
+
|
|
46
|
+
PromQL is Prometheus's query language for selecting, aggregating, and transforming time-series data.
|
|
47
|
+
|
|
48
|
+
### Scrape Model
|
|
49
|
+
|
|
50
|
+
Prometheus **pulls** metrics from targets at configured intervals. Targets expose metrics at an HTTP endpoint (typically `/metrics`) in Prometheus text format.
|
|
51
|
+
|
|
52
|
+
### Alertmanager
|
|
53
|
+
|
|
54
|
+
Alertmanager receives alerts from Prometheus, deduplicates, groups, routes, and delivers notifications via email, Slack, PagerDuty, etc.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Best Practices
|
|
59
|
+
|
|
60
|
+
1. **Use histograms over summaries** — histograms are aggregatable across instances, summaries are not
|
|
61
|
+
2. **Choose meaningful bucket boundaries** — align with SLO thresholds (e.g., 50ms, 100ms, 250ms, 500ms, 1s, 5s)
|
|
62
|
+
3. **Use recording rules for expensive queries** — pre-compute frequently used aggregations
|
|
63
|
+
4. **Label carefully** — avoid high-cardinality labels (user IDs, request IDs)
|
|
64
|
+
5. **Set up alerting on symptoms, not causes** — alert on error rate and latency, investigate causes in dashboards
|
|
65
|
+
6. **Use Grafana variables** — make dashboards reusable across services and environments
|
|
66
|
+
7. **Set scrape intervals appropriately** — 15s default; lower for critical services, higher for batch jobs
|
|
67
|
+
8. **Use federation or remote write for multi-cluster** — avoid single-Prometheus bottlenecks
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Common Patterns
|
|
72
|
+
|
|
73
|
+
### Prometheus Configuration
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
# prometheus.yml
|
|
77
|
+
global:
|
|
78
|
+
scrape_interval: 15s
|
|
79
|
+
evaluation_interval: 15s
|
|
80
|
+
|
|
81
|
+
rule_files:
|
|
82
|
+
- "rules/*.yml"
|
|
83
|
+
|
|
84
|
+
alerting:
|
|
85
|
+
alertmanagers:
|
|
86
|
+
- static_configs:
|
|
87
|
+
- targets: ["alertmanager:9093"]
|
|
88
|
+
|
|
89
|
+
scrape_configs:
|
|
90
|
+
- job_name: "my-service"
|
|
91
|
+
static_configs:
|
|
92
|
+
- targets: ["app:3000"]
|
|
93
|
+
metrics_path: /metrics
|
|
94
|
+
scrape_interval: 10s
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Alerting Rules
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
# rules/alerts.yml
|
|
101
|
+
groups:
|
|
102
|
+
- name: my-service
|
|
103
|
+
rules:
|
|
104
|
+
- alert: HighErrorRate
|
|
105
|
+
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
|
|
106
|
+
for: 5m
|
|
107
|
+
labels:
|
|
108
|
+
severity: critical
|
|
109
|
+
annotations:
|
|
110
|
+
summary: "High error rate on {{ $labels.instance }}"
|
|
111
|
+
description: "Error rate is {{ $value | humanizePercentage }} over the last 5 minutes."
|
|
112
|
+
|
|
113
|
+
- alert: HighLatency
|
|
114
|
+
expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 1.0
|
|
115
|
+
for: 5m
|
|
116
|
+
labels:
|
|
117
|
+
severity: warning
|
|
118
|
+
annotations:
|
|
119
|
+
summary: "P99 latency above 1s on {{ $labels.instance }}"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Recording Rules
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
# rules/recording.yml
|
|
126
|
+
groups:
|
|
127
|
+
- name: my-service-recording
|
|
128
|
+
rules:
|
|
129
|
+
- record: job:http_requests:rate5m
|
|
130
|
+
expr: rate(http_requests_total[5m])
|
|
131
|
+
|
|
132
|
+
- record: job:http_request_duration:p99_5m
|
|
133
|
+
expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Node.js Prometheus Client
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
import { Registry, Counter, Histogram, collectDefaultMetrics } from "prom-client";
|
|
140
|
+
|
|
141
|
+
const register = new Registry();
|
|
142
|
+
collectDefaultMetrics({ register });
|
|
143
|
+
|
|
144
|
+
const httpRequestsTotal = new Counter({
|
|
145
|
+
name: "http_requests_total",
|
|
146
|
+
help: "Total HTTP requests",
|
|
147
|
+
labelNames: ["method", "route", "status"],
|
|
148
|
+
registers: [register],
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const httpRequestDuration = new Histogram({
|
|
152
|
+
name: "http_request_duration_seconds",
|
|
153
|
+
help: "HTTP request duration in seconds",
|
|
154
|
+
labelNames: ["method", "route"],
|
|
155
|
+
buckets: [0.01, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
|
|
156
|
+
registers: [register],
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Expose /metrics endpoint
|
|
160
|
+
app.get("/metrics", async (req, res) => {
|
|
161
|
+
res.set("Content-Type", register.contentType);
|
|
162
|
+
res.end(await register.metrics());
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### PromQL Query Examples
|
|
167
|
+
|
|
168
|
+
```promql
|
|
169
|
+
# Request rate per second
|
|
170
|
+
rate(http_requests_total[5m])
|
|
171
|
+
|
|
172
|
+
# Error rate percentage
|
|
173
|
+
rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) * 100
|
|
174
|
+
|
|
175
|
+
# P99 latency
|
|
176
|
+
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
|
|
177
|
+
|
|
178
|
+
# Aggregate across instances
|
|
179
|
+
sum by (route) (rate(http_requests_total[5m]))
|
|
180
|
+
|
|
181
|
+
# Top 5 endpoints by request rate
|
|
182
|
+
topk(5, sum by (route) (rate(http_requests_total[5m])))
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Grafana Dashboard JSON (Panel)
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
{
|
|
189
|
+
"title": "Request Rate",
|
|
190
|
+
"type": "timeseries",
|
|
191
|
+
"targets": [
|
|
192
|
+
{
|
|
193
|
+
"expr": "sum by (route) (rate(http_requests_total{env=\"$env\"}[5m]))",
|
|
194
|
+
"legendFormat": "{{ route }}"
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Docker Compose Setup
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
services:
|
|
204
|
+
prometheus:
|
|
205
|
+
image: prom/prometheus:latest
|
|
206
|
+
volumes:
|
|
207
|
+
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
|
208
|
+
- ./rules:/etc/prometheus/rules
|
|
209
|
+
ports:
|
|
210
|
+
- "9090:9090"
|
|
211
|
+
|
|
212
|
+
grafana:
|
|
213
|
+
image: grafana/grafana:latest
|
|
214
|
+
environment:
|
|
215
|
+
GF_SECURITY_ADMIN_PASSWORD: "admin"
|
|
216
|
+
ports:
|
|
217
|
+
- "3001:3000"
|
|
218
|
+
volumes:
|
|
219
|
+
- grafana-data:/var/lib/grafana
|
|
220
|
+
|
|
221
|
+
alertmanager:
|
|
222
|
+
image: prom/alertmanager:latest
|
|
223
|
+
ports:
|
|
224
|
+
- "9093:9093"
|
|
225
|
+
|
|
226
|
+
volumes:
|
|
227
|
+
grafana-data:
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Anti-Patterns
|
|
233
|
+
|
|
234
|
+
| Anti-Pattern | Why It Hurts | Correct Approach |
|
|
235
|
+
|---|---|---|
|
|
236
|
+
| High-cardinality labels | Metric cardinality explosion, OOM on Prometheus | Use bounded label values (HTTP status, service name) |
|
|
237
|
+
| Using summaries when aggregation is needed | Cannot aggregate quantiles across instances | Use histograms — they are aggregatable |
|
|
238
|
+
| No recording rules for dashboard queries | Slow dashboard loads, high Prometheus CPU | Pre-compute common aggregations with recording rules |
|
|
239
|
+
| Alerting on single data points | Flapping alerts, false positives | Use `for` duration (e.g., `for: 5m`) |
|
|
240
|
+
| Unbounded scrape targets | Prometheus overloaded | Use service discovery with relabeling to filter targets |
|
|
241
|
+
| No retention policy | Disk fills up | Set `--storage.tsdb.retention.time` (15d–90d typical) |
|
|
242
|
+
| Grafana dashboards without variables | One dashboard per environment/service | Use template variables for `env`, `service`, `instance` |
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
**Last verified**: 2026-02-24 | **Skill version**: 1.0.0
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python-observability
|
|
3
|
+
description: |
|
|
4
|
+
Set up observability for Python applications with structlog, OpenTelemetry Python SDK, and Prometheus client. Use when: configuring structlog for structured logging, auto-instrumenting Flask/FastAPI/Django, creating custom spans and metrics in Python, or managing correlation IDs in async contexts.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Python Observability
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-24
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
Python observability covers structured logging with structlog, distributed tracing and metrics with the OpenTelemetry Python SDK, and metrics exposition with the Prometheus client. This skill addresses auto-instrumentation for popular frameworks and best practices for async context management.
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Setting up structlog for structured JSON logging
|
|
22
|
+
- Configuring the OpenTelemetry Python SDK
|
|
23
|
+
- Auto-instrumenting Flask, FastAPI, or Django
|
|
24
|
+
- Creating custom spans and metrics in Python
|
|
25
|
+
- Integrating the Prometheus client for Python
|
|
26
|
+
- Configuring Python logging best practices
|
|
27
|
+
- Managing correlation IDs in async (asyncio) contexts
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Key Concepts
|
|
32
|
+
|
|
33
|
+
### structlog
|
|
34
|
+
|
|
35
|
+
structlog provides structured, composable logging for Python. It wraps the standard library `logging` module and outputs JSON by default in production.
|
|
36
|
+
|
|
37
|
+
### OpenTelemetry Python SDK
|
|
38
|
+
|
|
39
|
+
The `opentelemetry-sdk` package provides tracing, metrics, and logging for Python applications. Auto-instrumentation packages exist for Flask, FastAPI, Django, SQLAlchemy, requests, and more.
|
|
40
|
+
|
|
41
|
+
### Prometheus Client
|
|
42
|
+
|
|
43
|
+
The `prometheus_client` library exposes metrics in Prometheus format via an HTTP endpoint. It supports counters, gauges, histograms, and summaries.
|
|
44
|
+
|
|
45
|
+
### Async Context
|
|
46
|
+
|
|
47
|
+
Python's `contextvars` module provides context propagation across async boundaries, which OpenTelemetry uses to maintain trace context in asyncio-based applications.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Best Practices
|
|
52
|
+
|
|
53
|
+
1. **Use structlog for all logging** — structured JSON output, composable processors, stdlib integration
|
|
54
|
+
2. **Auto-instrument before manual instrumentation** — install the relevant `opentelemetry-instrumentation-*` packages first
|
|
55
|
+
3. **Configure via environment variables** — use `OTEL_SERVICE_NAME`, `OTEL_EXPORTER_OTLP_ENDPOINT`, etc.
|
|
56
|
+
4. **Use `contextvars` for correlation IDs** — thread-safe and asyncio-compatible
|
|
57
|
+
5. **Expose Prometheus metrics at `/metrics`** — use the built-in HTTP server or framework integration
|
|
58
|
+
6. **Redact PII in log processors** — add a structlog processor that strips sensitive fields
|
|
59
|
+
7. **Set appropriate log levels** — `INFO` in production, `DEBUG` in development
|
|
60
|
+
8. **Use batch span processors** — batch export reduces overhead in production
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Common Patterns
|
|
65
|
+
|
|
66
|
+
### structlog Setup
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
import structlog
|
|
70
|
+
|
|
71
|
+
structlog.configure(
|
|
72
|
+
processors=[
|
|
73
|
+
structlog.contextvars.merge_contextvars,
|
|
74
|
+
structlog.processors.add_log_level,
|
|
75
|
+
structlog.processors.TimeStamper(fmt="iso"),
|
|
76
|
+
structlog.processors.StackInfoRenderer(),
|
|
77
|
+
structlog.processors.format_exc_info,
|
|
78
|
+
structlog.processors.JSONRenderer(),
|
|
79
|
+
],
|
|
80
|
+
wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
|
|
81
|
+
context_class=dict,
|
|
82
|
+
logger_factory=structlog.PrintLoggerFactory(),
|
|
83
|
+
cache_logger_on_first_use=True,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
logger = structlog.get_logger()
|
|
87
|
+
logger.info("order_placed", order_id="abc-123", total=49.99)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### OpenTelemetry Auto-Instrumentation (FastAPI)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install opentelemetry-sdk opentelemetry-exporter-otlp \
|
|
94
|
+
opentelemetry-instrumentation-fastapi \
|
|
95
|
+
opentelemetry-instrumentation-httpx
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
from opentelemetry import trace
|
|
100
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
101
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
102
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
103
|
+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
104
|
+
|
|
105
|
+
provider = TracerProvider()
|
|
106
|
+
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
|
|
107
|
+
trace.set_tracer_provider(provider)
|
|
108
|
+
|
|
109
|
+
app = FastAPI()
|
|
110
|
+
FastAPIInstrumentor.instrument_app(app)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Custom Span
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
from opentelemetry import trace
|
|
117
|
+
|
|
118
|
+
tracer = trace.get_tracer("my-service")
|
|
119
|
+
|
|
120
|
+
async def process_order(order_id: str):
|
|
121
|
+
with tracer.start_as_current_span("process-order") as span:
|
|
122
|
+
span.set_attribute("order.id", order_id)
|
|
123
|
+
result = await do_work(order_id)
|
|
124
|
+
return result
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Prometheus Metrics
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
from prometheus_client import Counter, Histogram, start_http_server
|
|
131
|
+
|
|
132
|
+
REQUEST_COUNT = Counter("http_requests_total", "Total HTTP requests", ["method", "endpoint"])
|
|
133
|
+
REQUEST_LATENCY = Histogram("http_request_duration_seconds", "HTTP request latency", ["method", "endpoint"])
|
|
134
|
+
|
|
135
|
+
start_http_server(9090) # Expose /metrics on port 9090
|
|
136
|
+
|
|
137
|
+
# Usage
|
|
138
|
+
REQUEST_COUNT.labels(method="GET", endpoint="/api/users").inc()
|
|
139
|
+
with REQUEST_LATENCY.labels(method="GET", endpoint="/api/users").time():
|
|
140
|
+
handle_request()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Anti-Patterns
|
|
146
|
+
|
|
147
|
+
| Anti-Pattern | Why It Hurts | Correct Approach |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| Using `print()` for logging | No structure, no levels, no redaction | Use structlog or standard logging |
|
|
150
|
+
| Manual instrumentation before auto | Duplicated effort, inconsistent coverage | Install auto-instrumentation packages first |
|
|
151
|
+
| Hardcoded OTLP endpoints | Inflexible across environments | Use `OTEL_EXPORTER_OTLP_ENDPOINT` env var |
|
|
152
|
+
| Ignoring `contextvars` in async code | Lost trace context across await boundaries | Use `contextvars`-aware context propagation |
|
|
153
|
+
| No batch processing for spans | High overhead per-span export | Use `BatchSpanProcessor` |
|
|
154
|
+
| Logging full request bodies | PII exposure, excessive volume | Log only essential fields |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
**Last verified**: 2026-02-24 | **Skill version**: 1.0.0
|