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,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: distributed-tracing
|
|
3
|
+
description: |
|
|
4
|
+
Implement distributed tracing across microservices with Jaeger, Zipkin, and W3C TraceContext. Use when: setting up trace propagation, configuring Jaeger or Zipkin, understanding span relationships, choosing sampling strategies, or correlating traces with logs and metrics.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Distributed Tracing
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-24
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
Distributed tracing tracks requests as they flow through multiple services, providing end-to-end visibility into latency, errors, and dependencies. It is essential for debugging and performance optimization in microservice architectures.
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Setting up trace propagation (W3C TraceContext, B3)
|
|
22
|
+
- Configuring Jaeger for trace collection and visualization
|
|
23
|
+
- Configuring Zipkin for trace collection and visualization
|
|
24
|
+
- Understanding span relationships (parent/child, follows-from)
|
|
25
|
+
- Choosing between head-based and tail-based sampling
|
|
26
|
+
- Planning trace storage and retention policies
|
|
27
|
+
- Correlating traces with logs and metrics
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Key Concepts
|
|
32
|
+
|
|
33
|
+
### Trace Propagation Formats
|
|
34
|
+
|
|
35
|
+
| Format | Standard | Use Case |
|
|
36
|
+
|--------|----------|----------|
|
|
37
|
+
| **W3C TraceContext** | W3C Recommendation | Default for OpenTelemetry, broadly supported |
|
|
38
|
+
| **B3** | Zipkin | Legacy Zipkin ecosystems, broad language support |
|
|
39
|
+
| **Jaeger** | Jaeger-specific | Jaeger-native environments (being deprecated in favor of W3C) |
|
|
40
|
+
|
|
41
|
+
### Span Relationships
|
|
42
|
+
|
|
43
|
+
| Relationship | Meaning |
|
|
44
|
+
|---|---|
|
|
45
|
+
| **ChildOf** | The parent span depends on the child span's result |
|
|
46
|
+
| **FollowsFrom** | The parent span does not depend on the child (fire-and-forget) |
|
|
47
|
+
|
|
48
|
+
### Sampling Strategies
|
|
49
|
+
|
|
50
|
+
| Strategy | Description | Trade-off |
|
|
51
|
+
|----------|-------------|-----------|
|
|
52
|
+
| **Head-based** | Decision made at trace start | Simple, but may miss interesting traces |
|
|
53
|
+
| **Tail-based** | Decision made after trace completes | Captures errors/slow traces, but requires buffering |
|
|
54
|
+
| **Adaptive** | Adjusts rate based on traffic volume | Balances cost and coverage |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Best Practices
|
|
59
|
+
|
|
60
|
+
1. **Use W3C TraceContext** — it is the industry standard and supported by all major tracing backends
|
|
61
|
+
2. **Propagate context through all transport layers** — HTTP headers, message queue metadata, gRPC metadata
|
|
62
|
+
3. **Set span names to describe the operation** — `POST /api/orders` not `handler`
|
|
63
|
+
4. **Record errors on spans** — set span status to ERROR and call `recordException`
|
|
64
|
+
5. **Use tail-based sampling for production** — capture all error and high-latency traces while sampling normal traffic
|
|
65
|
+
6. **Correlate traces with logs** — inject `trace_id` and `span_id` into log records for cross-signal navigation
|
|
66
|
+
7. **Set retention policies** — keep error traces longer than normal traces to support incident investigation
|
|
67
|
+
8. **Monitor trace pipeline health** — alert on dropped spans, exporter failures, and collector queue depth
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Common Patterns
|
|
72
|
+
|
|
73
|
+
### Jaeger Setup (Docker Compose)
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
services:
|
|
77
|
+
jaeger:
|
|
78
|
+
image: jaegertracing/all-in-one:latest
|
|
79
|
+
ports:
|
|
80
|
+
- "16686:16686" # Jaeger UI
|
|
81
|
+
- "4317:4317" # OTLP gRPC
|
|
82
|
+
- "4318:4318" # OTLP HTTP
|
|
83
|
+
environment:
|
|
84
|
+
COLLECTOR_OTLP_ENABLED: "true"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Zipkin Setup (Docker Compose)
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
services:
|
|
91
|
+
zipkin:
|
|
92
|
+
image: openzipkin/zipkin:latest
|
|
93
|
+
ports:
|
|
94
|
+
- "9411:9411" # Zipkin UI + API
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### W3C TraceContext Header
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Format: `version-traceId-spanId-traceFlags`
|
|
104
|
+
|
|
105
|
+
### Correlating Traces with Logs
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { trace, context } from "@opentelemetry/api";
|
|
109
|
+
|
|
110
|
+
function getTraceContext() {
|
|
111
|
+
const span = trace.getActiveSpan();
|
|
112
|
+
if (!span) return {};
|
|
113
|
+
const ctx = span.spanContext();
|
|
114
|
+
return {
|
|
115
|
+
trace_id: ctx.traceId,
|
|
116
|
+
span_id: ctx.spanId,
|
|
117
|
+
trace_flags: ctx.traceFlags,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Inject into structured logs
|
|
122
|
+
logger.info({ ...getTraceContext(), message: "Order processed", orderId });
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Anti-Patterns
|
|
128
|
+
|
|
129
|
+
| Anti-Pattern | Why It Hurts | Correct Approach |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Not propagating context across async boundaries | Broken traces, orphan spans | Use context-aware async utilities |
|
|
132
|
+
| Sampling at 100% in production | Storage costs explode, performance impact | Use 5–20% head-based or tail-based sampling |
|
|
133
|
+
| Generic span names | Cannot filter or search effectively | Use descriptive, route-based span names |
|
|
134
|
+
| Ignoring span status on errors | Errors invisible in trace UI | Always set ERROR status and record exception |
|
|
135
|
+
| No trace-log correlation | Cannot jump from trace to logs | Inject trace_id into all structured logs |
|
|
136
|
+
| Unbounded trace retention | Storage grows without limit | Set retention policies (7–30 days typical) |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
**Last verified**: 2026-02-24 | **Skill version**: 1.0.0
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: logging-best-practices
|
|
3
|
+
description: |
|
|
4
|
+
Implement structured logging with JSON output, log levels, correlation IDs, and log aggregation. Use when: setting up Pino or Winston, configuring log levels (trace/debug/info/warn/error/fatal), adding request tracing, implementing sensitive data redaction, or integrating with ELK or Loki.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Logging Best Practices
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-24
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
Production-grade logging requires structured output, consistent log levels, request correlation, and PII redaction. This skill covers best practices for Node.js logging with Pino and Winston, log aggregation with ELK and Loki, and performance-conscious logging patterns.
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Setting up JSON structured logging
|
|
22
|
+
- Choosing and configuring log levels (trace/debug/info/warn/error/fatal)
|
|
23
|
+
- Adding correlation IDs and request tracing
|
|
24
|
+
- Configuring Pino for high-performance logging
|
|
25
|
+
- Configuring Winston for flexible logging
|
|
26
|
+
- Integrating with log aggregation (ELK stack, Grafana Loki)
|
|
27
|
+
- Implementing sensitive data redaction
|
|
28
|
+
- Optimizing async logging and log sampling for performance
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Key Concepts
|
|
33
|
+
|
|
34
|
+
### Log Levels
|
|
35
|
+
|
|
36
|
+
| Level | When to Use |
|
|
37
|
+
|-------|-------------|
|
|
38
|
+
| **trace** | Extremely detailed diagnostic info (function entry/exit) |
|
|
39
|
+
| **debug** | Diagnostic info useful during development |
|
|
40
|
+
| **info** | Normal operational events (request completed, job finished) |
|
|
41
|
+
| **warn** | Unexpected but recoverable situations (deprecation, retry) |
|
|
42
|
+
| **error** | Failures that need attention (unhandled exception, external service down) |
|
|
43
|
+
| **fatal** | Process cannot continue (missing critical config, OOM) |
|
|
44
|
+
|
|
45
|
+
### Structured Logging
|
|
46
|
+
|
|
47
|
+
Always log as structured JSON objects, never string-interpolated messages:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// Good — structured, searchable, parseable
|
|
51
|
+
logger.info({ orderId, userId, total: 49.99 }, "Order placed");
|
|
52
|
+
|
|
53
|
+
// Bad — string interpolation, not searchable
|
|
54
|
+
logger.info(`Order ${orderId} placed by user ${userId} for $49.99`);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Correlation IDs
|
|
58
|
+
|
|
59
|
+
Every request should carry a unique correlation ID (often called `requestId` or `traceId`) that appears in all log entries for that request. This enables tracing a single request across all log lines.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Best Practices
|
|
64
|
+
|
|
65
|
+
1. **Use structured JSON output** — every log entry is a JSON object with consistent fields
|
|
66
|
+
2. **Set log level via environment variable** — `LOG_LEVEL=info` in production, `LOG_LEVEL=debug` in development
|
|
67
|
+
3. **Include correlation IDs** — generate a UUID per request and inject it into every log entry
|
|
68
|
+
4. **Redact sensitive data** — never log passwords, tokens, PII, or full credit card numbers
|
|
69
|
+
5. **Log at the right level** — `info` for business events, `error` for failures, `debug` for diagnostics
|
|
70
|
+
6. **Use child loggers** — create child loggers with request-scoped context to avoid passing IDs everywhere
|
|
71
|
+
7. **Avoid logging in hot loops** — log sampling or rate-limiting prevents performance degradation
|
|
72
|
+
8. **Set up log rotation** — prevent disk exhaustion with size or time-based rotation
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Common Patterns
|
|
77
|
+
|
|
78
|
+
### Pino Setup
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import pino from "pino";
|
|
82
|
+
|
|
83
|
+
const logger = pino({
|
|
84
|
+
level: process.env.LOG_LEVEL || "info",
|
|
85
|
+
formatters: {
|
|
86
|
+
level(label) {
|
|
87
|
+
return { level: label };
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
redact: {
|
|
91
|
+
paths: ["req.headers.authorization", "req.headers.cookie", "body.password"],
|
|
92
|
+
censor: "[REDACTED]",
|
|
93
|
+
},
|
|
94
|
+
transport:
|
|
95
|
+
process.env.NODE_ENV !== "production"
|
|
96
|
+
? { target: "pino-pretty", options: { colorize: true } }
|
|
97
|
+
: undefined,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
export default logger;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Winston Setup
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import winston from "winston";
|
|
107
|
+
|
|
108
|
+
const logger = winston.createLogger({
|
|
109
|
+
level: process.env.LOG_LEVEL || "info",
|
|
110
|
+
format: winston.format.combine(
|
|
111
|
+
winston.format.timestamp(),
|
|
112
|
+
winston.format.errors({ stack: true }),
|
|
113
|
+
winston.format.json()
|
|
114
|
+
),
|
|
115
|
+
defaultMeta: { service: "my-service" },
|
|
116
|
+
transports: [new winston.transports.Console()],
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
export default logger;
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Request Correlation Middleware
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { randomUUID } from "node:crypto";
|
|
126
|
+
|
|
127
|
+
function correlationMiddleware(req, res, next) {
|
|
128
|
+
const requestId = req.headers["x-request-id"] || randomUUID();
|
|
129
|
+
req.log = logger.child({ requestId });
|
|
130
|
+
res.setHeader("x-request-id", requestId);
|
|
131
|
+
next();
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Sensitive Data Redaction
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
const redactPaths = [
|
|
139
|
+
"password",
|
|
140
|
+
"token",
|
|
141
|
+
"authorization",
|
|
142
|
+
"cookie",
|
|
143
|
+
"ssn",
|
|
144
|
+
"creditCard",
|
|
145
|
+
"*.password",
|
|
146
|
+
"*.token",
|
|
147
|
+
];
|
|
148
|
+
|
|
149
|
+
const logger = pino({ redact: { paths: redactPaths, censor: "[REDACTED]" } });
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Anti-Patterns
|
|
155
|
+
|
|
156
|
+
| Anti-Pattern | Why It Hurts | Correct Approach |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| `console.log` in production | No structure, no levels, no redaction | Use a structured logger (Pino, Winston) |
|
|
159
|
+
| Logging full request/response bodies | PII leaks, huge log volume | Log only essential fields, redact sensitive data |
|
|
160
|
+
| String-interpolated messages | Not searchable, not parseable | Use structured key-value pairs |
|
|
161
|
+
| No correlation IDs | Cannot trace a request across log lines | Generate and propagate requestId |
|
|
162
|
+
| `debug` level in production | Enormous log volume, cost explosion | Use `info` in production, configure via env var |
|
|
163
|
+
| Synchronous file writes | Blocks event loop, degrades performance | Use async transports or stdout piping |
|
|
164
|
+
| No log rotation | Disk fills up, service crashes | Use logrotate or size-based rotation |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
**Last verified**: 2026-02-24 | **Skill version**: 1.0.0
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opentelemetry
|
|
3
|
+
description: |
|
|
4
|
+
Set up OpenTelemetry for distributed tracing, metrics, and structured logging with trace correlation. Use when: configuring OpenTelemetry SDK for Node.js/Python/Go/Rust, setting up OTLP exporters, integrating with Jaeger or Zipkin, implementing auto or manual instrumentation, context propagation, or choosing sampling strategies.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OpenTelemetry
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-24
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
OpenTelemetry (OTel) is the vendor-neutral observability framework for generating, collecting, and exporting telemetry data — traces, metrics, and logs. It provides a single set of APIs, SDKs, and tooling across languages.
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Setting up distributed tracing with spans and traces
|
|
22
|
+
- Collecting application metrics (counters, histograms, gauges)
|
|
23
|
+
- Implementing structured logging with trace correlation
|
|
24
|
+
- Configuring the OTel SDK for Node.js, Python, Go, or Rust
|
|
25
|
+
- Setting up exporters (OTLP, Jaeger, Zipkin)
|
|
26
|
+
- Deciding between auto and manual instrumentation
|
|
27
|
+
- Implementing context propagation across service boundaries
|
|
28
|
+
- Choosing head-based vs tail-based sampling strategies
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Key Concepts
|
|
33
|
+
|
|
34
|
+
### Signals
|
|
35
|
+
|
|
36
|
+
| Signal | Purpose | Examples |
|
|
37
|
+
|--------|---------|----------|
|
|
38
|
+
| **Traces** | Request flow across services | HTTP requests, database queries, RPC calls |
|
|
39
|
+
| **Metrics** | Quantitative measurements over time | Request count, latency histogram, CPU gauge |
|
|
40
|
+
| **Logs** | Discrete event records with trace context | Structured JSON logs correlated to spans |
|
|
41
|
+
|
|
42
|
+
### Core Components
|
|
43
|
+
|
|
44
|
+
- **API** — Stable, vendor-neutral interface for instrumentation
|
|
45
|
+
- **SDK** — Configurable implementation of the API (sampling, export, processing)
|
|
46
|
+
- **Exporters** — Send telemetry to backends (OTLP, Jaeger, Zipkin, Prometheus)
|
|
47
|
+
- **Collector** — Vendor-agnostic proxy for receiving, processing, and exporting telemetry
|
|
48
|
+
- **Instrumentation Libraries** — Auto-instrument common frameworks and libraries
|
|
49
|
+
|
|
50
|
+
### Context Propagation
|
|
51
|
+
|
|
52
|
+
- W3C TraceContext (default, recommended)
|
|
53
|
+
- B3 (Zipkin compatibility)
|
|
54
|
+
- Baggage for cross-service key-value pairs
|
|
55
|
+
|
|
56
|
+
### Sampling Strategies
|
|
57
|
+
|
|
58
|
+
| Strategy | When to Use |
|
|
59
|
+
|----------|-------------|
|
|
60
|
+
| **AlwaysOn** | Development, low-traffic services |
|
|
61
|
+
| **AlwaysOff** | Disable tracing entirely |
|
|
62
|
+
| **TraceIdRatioBased** | Production — sample a percentage of traces |
|
|
63
|
+
| **ParentBased** | Respect upstream sampling decisions |
|
|
64
|
+
| **Tail-based (Collector)** | Sample based on completed trace attributes (errors, latency) |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Best Practices
|
|
69
|
+
|
|
70
|
+
1. **Start with auto-instrumentation** — instrument frameworks and libraries automatically, add manual spans only where needed
|
|
71
|
+
2. **Use OTLP as the export protocol** — it is the native OTel protocol and supports all three signals
|
|
72
|
+
3. **Propagate context** — ensure W3C TraceContext headers flow across all service boundaries
|
|
73
|
+
4. **Set meaningful span names** — use `HTTP GET /api/users` not `span-1`
|
|
74
|
+
5. **Add semantic attributes** — follow OpenTelemetry semantic conventions for consistent metadata
|
|
75
|
+
6. **Sample wisely in production** — 5–20% trace sampling is typical; keep error sampling at 100%
|
|
76
|
+
7. **Use the Collector** — deploy the OTel Collector as a sidecar or gateway to decouple instrumentation from export
|
|
77
|
+
8. **Correlate logs with traces** — inject `trace_id` and `span_id` into structured log records
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Common Patterns
|
|
82
|
+
|
|
83
|
+
### Node.js SDK Setup
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
87
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
88
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
89
|
+
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
|
|
90
|
+
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
91
|
+
|
|
92
|
+
const sdk = new NodeSDK({
|
|
93
|
+
serviceName: "my-service",
|
|
94
|
+
traceExporter: new OTLPTraceExporter({ url: "http://localhost:4318/v1/traces" }),
|
|
95
|
+
metricReader: new PeriodicExportingMetricReader({
|
|
96
|
+
exporter: new OTLPMetricExporter({ url: "http://localhost:4318/v1/metrics" }),
|
|
97
|
+
}),
|
|
98
|
+
instrumentations: [getNodeAutoInstrumentations()],
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
sdk.start();
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Custom Span
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { trace } from "@opentelemetry/api";
|
|
108
|
+
|
|
109
|
+
const tracer = trace.getTracer("my-service");
|
|
110
|
+
|
|
111
|
+
async function processOrder(orderId: string) {
|
|
112
|
+
return tracer.startActiveSpan("process-order", async (span) => {
|
|
113
|
+
span.setAttribute("order.id", orderId);
|
|
114
|
+
try {
|
|
115
|
+
const result = await doWork(orderId);
|
|
116
|
+
span.setStatus({ code: 1 }); // OK
|
|
117
|
+
return result;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
span.setStatus({ code: 2, message: String(error) }); // ERROR
|
|
120
|
+
span.recordException(error as Error);
|
|
121
|
+
throw error;
|
|
122
|
+
} finally {
|
|
123
|
+
span.end();
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Custom Metrics
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { metrics } from "@opentelemetry/api";
|
|
133
|
+
|
|
134
|
+
const meter = metrics.getMeter("my-service");
|
|
135
|
+
|
|
136
|
+
const requestCounter = meter.createCounter("http.requests.total", {
|
|
137
|
+
description: "Total HTTP requests",
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const latencyHistogram = meter.createHistogram("http.request.duration_ms", {
|
|
141
|
+
description: "HTTP request latency in milliseconds",
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Usage
|
|
145
|
+
requestCounter.add(1, { method: "GET", route: "/api/users" });
|
|
146
|
+
latencyHistogram.record(42, { method: "GET", route: "/api/users" });
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Anti-Patterns
|
|
152
|
+
|
|
153
|
+
| Anti-Pattern | Why It Hurts | Correct Approach |
|
|
154
|
+
|---|---|---|
|
|
155
|
+
| No sampling in production | Enormous data volume, high cost | Use ratio-based or tail-based sampling |
|
|
156
|
+
| Ignoring context propagation | Broken traces across services | Ensure W3C headers propagate everywhere |
|
|
157
|
+
| Too many custom spans | Noisy traces, performance overhead | Instrument meaningful operations only |
|
|
158
|
+
| Hardcoded exporter URLs | Inflexible deployments | Use environment variables (`OTEL_EXPORTER_OTLP_ENDPOINT`) |
|
|
159
|
+
| Skipping semantic conventions | Inconsistent attribute names | Follow OTel semantic conventions |
|
|
160
|
+
| Not ending spans | Memory leaks, orphan spans | Always call `span.end()` in a `finally` block |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
**Last verified**: 2026-02-24 | **Skill version**: 1.0.0
|