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.
Files changed (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,549 @@
1
+ ---
2
+ name: openai-sdk
3
+ description: |
4
+ Build with the OpenAI SDK — chat completions, streaming, function/tool calling, structured outputs, vision, embeddings, and moderation. Use when: integrating OpenAI models (GPT-4o, o1, o3-mini), implementing streaming chat, using function calling or tool use, generating structured JSON output, handling images with vision, creating embeddings, managing rate limits and retries, or selecting the right model for cost/quality tradeoffs.
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # OpenAI SDK
9
+
10
+ **Status**: Production Ready
11
+ **Last Updated**: 2026-02-16
12
+ **Package**: `openai@4.x`
13
+
14
+ ---
15
+
16
+ ## Setup and Configuration
17
+
18
+ ```bash
19
+ pnpm add openai
20
+ ```
21
+
22
+ ```typescript
23
+ // src/lib/openai.ts
24
+ import OpenAI from "openai";
25
+
26
+ export const openai = new OpenAI({
27
+ apiKey: process.env.OPENAI_API_KEY, // Required — never expose in client bundle
28
+ organization: process.env.OPENAI_ORG_ID, // Optional
29
+ // baseURL: "https://custom-proxy.example.com/v1", // For proxies/Azure
30
+ timeout: 60_000, // 60s timeout
31
+ maxRetries: 3, // Auto-retry on rate limits / server errors
32
+ });
33
+ ```
34
+
35
+ **Environment variables — server-side only:**
36
+ ```bash
37
+ OPENAI_API_KEY="sk-..."
38
+ OPENAI_ORG_ID="org-..." # Optional
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Chat Completions
44
+
45
+ ### Basic Request
46
+
47
+ ```typescript
48
+ const response = await openai.chat.completions.create({
49
+ model: "gpt-4o",
50
+ messages: [
51
+ { role: "system", content: "You are a helpful assistant." },
52
+ { role: "user", content: "Explain quantum computing in one paragraph." },
53
+ ],
54
+ temperature: 0.7, // 0 = deterministic, 2 = creative
55
+ max_tokens: 500,
56
+ });
57
+
58
+ const answer = response.choices[0].message.content;
59
+ const usage = response.usage; // { prompt_tokens, completion_tokens, total_tokens }
60
+ ```
61
+
62
+ ### Message Roles
63
+
64
+ ```typescript
65
+ type Message =
66
+ | { role: "system"; content: string } // Sets behavior, personality, constraints
67
+ | { role: "user"; content: string } // User input
68
+ | { role: "assistant"; content: string } // Previous model responses (for context)
69
+ | { role: "tool"; content: string; tool_call_id: string }; // Tool call results
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Streaming Responses
75
+
76
+ ### Basic Streaming
77
+
78
+ ```typescript
79
+ const stream = await openai.chat.completions.create({
80
+ model: "gpt-4o",
81
+ messages: [{ role: "user", content: "Write a poem about coding." }],
82
+ stream: true,
83
+ });
84
+
85
+ for await (const chunk of stream) {
86
+ const content = chunk.choices[0]?.delta?.content;
87
+ if (content) {
88
+ process.stdout.write(content); // Or send via SSE to client
89
+ }
90
+ }
91
+ ```
92
+
93
+ ### SSE to Browser (Next.js API Route)
94
+
95
+ ```typescript
96
+ // src/app/api/chat/route.ts
97
+ import { openai } from "@/lib/openai";
98
+
99
+ export async function POST(req: Request) {
100
+ const { messages } = await req.json();
101
+
102
+ const stream = await openai.chat.completions.create({
103
+ model: "gpt-4o",
104
+ messages,
105
+ stream: true,
106
+ });
107
+
108
+ // Convert to ReadableStream for Response
109
+ const encoder = new TextEncoder();
110
+ const readable = new ReadableStream({
111
+ async start(controller) {
112
+ for await (const chunk of stream) {
113
+ const content = chunk.choices[0]?.delta?.content;
114
+ if (content) {
115
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify({ content })}\n\n`));
116
+ }
117
+ }
118
+ controller.enqueue(encoder.encode("data: [DONE]\n\n"));
119
+ controller.close();
120
+ },
121
+ });
122
+
123
+ return new Response(readable, {
124
+ headers: {
125
+ "Content-Type": "text/event-stream",
126
+ "Cache-Control": "no-cache",
127
+ Connection: "keep-alive",
128
+ },
129
+ });
130
+ }
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Function Calling / Tool Use
136
+
137
+ ### Defining Tools
138
+
139
+ ```typescript
140
+ const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
141
+ {
142
+ type: "function",
143
+ function: {
144
+ name: "get_weather",
145
+ description: "Get the current weather for a location",
146
+ parameters: {
147
+ type: "object",
148
+ properties: {
149
+ location: { type: "string", description: "City and state, e.g. 'San Francisco, CA'" },
150
+ unit: { type: "string", enum: ["celsius", "fahrenheit"], description: "Temperature unit" },
151
+ },
152
+ required: ["location"],
153
+ },
154
+ },
155
+ },
156
+ {
157
+ type: "function",
158
+ function: {
159
+ name: "search_database",
160
+ description: "Search the product database by query",
161
+ parameters: {
162
+ type: "object",
163
+ properties: {
164
+ query: { type: "string" },
165
+ category: { type: "string", enum: ["electronics", "clothing", "food"] },
166
+ max_results: { type: "number" },
167
+ },
168
+ required: ["query"],
169
+ },
170
+ },
171
+ },
172
+ ];
173
+ ```
174
+
175
+ ### Tool Call Loop
176
+
177
+ ```typescript
178
+ async function chatWithTools(userMessage: string) {
179
+ const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [
180
+ { role: "system", content: "You are a helpful assistant with access to tools." },
181
+ { role: "user", content: userMessage },
182
+ ];
183
+
184
+ let response = await openai.chat.completions.create({
185
+ model: "gpt-4o",
186
+ messages,
187
+ tools,
188
+ tool_choice: "auto", // "auto" | "required" | "none" | { type: "function", function: { name: "..." } }
189
+ });
190
+
191
+ // Process tool calls in a loop until the model stops calling tools
192
+ while (response.choices[0].finish_reason === "tool_calls") {
193
+ const toolCalls = response.choices[0].message.tool_calls!;
194
+ messages.push(response.choices[0].message); // Include assistant's tool call message
195
+
196
+ for (const toolCall of toolCalls) {
197
+ const args = JSON.parse(toolCall.function.arguments);
198
+ let result: string;
199
+
200
+ switch (toolCall.function.name) {
201
+ case "get_weather":
202
+ result = JSON.stringify(await getWeather(args.location, args.unit));
203
+ break;
204
+ case "search_database":
205
+ result = JSON.stringify(await searchDatabase(args.query, args.category));
206
+ break;
207
+ default:
208
+ result = JSON.stringify({ error: "Unknown function" });
209
+ }
210
+
211
+ messages.push({
212
+ role: "tool",
213
+ tool_call_id: toolCall.id,
214
+ content: result,
215
+ });
216
+ }
217
+
218
+ response = await openai.chat.completions.create({
219
+ model: "gpt-4o",
220
+ messages,
221
+ tools,
222
+ });
223
+ }
224
+
225
+ return response.choices[0].message.content;
226
+ }
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Structured Outputs
232
+
233
+ ### JSON Mode
234
+
235
+ ```typescript
236
+ const response = await openai.chat.completions.create({
237
+ model: "gpt-4o",
238
+ messages: [
239
+ {
240
+ role: "system",
241
+ content: "Extract the product details. Respond in JSON with fields: name, price, category.",
242
+ },
243
+ { role: "user", content: "The new iPhone 16 Pro costs $999 in the electronics category." },
244
+ ],
245
+ response_format: { type: "json_object" },
246
+ });
247
+
248
+ const product = JSON.parse(response.choices[0].message.content!);
249
+ ```
250
+
251
+ ### Structured Outputs with JSON Schema (Guaranteed Shape)
252
+
253
+ ```typescript
254
+ const response = await openai.chat.completions.create({
255
+ model: "gpt-4o",
256
+ messages: [{ role: "user", content: "Extract: The iPhone 16 Pro is $999, electronics." }],
257
+ response_format: {
258
+ type: "json_schema",
259
+ json_schema: {
260
+ name: "product",
261
+ strict: true,
262
+ schema: {
263
+ type: "object",
264
+ properties: {
265
+ name: { type: "string" },
266
+ price: { type: "number" },
267
+ category: { type: "string", enum: ["electronics", "clothing", "food"] },
268
+ },
269
+ required: ["name", "price", "category"],
270
+ additionalProperties: false,
271
+ },
272
+ },
273
+ },
274
+ });
275
+ ```
276
+
277
+ ### Structured Outputs with Zod (SDK Helper)
278
+
279
+ ```typescript
280
+ import { zodResponseFormat } from "openai/helpers/zod";
281
+ import { z } from "zod";
282
+
283
+ const ProductSchema = z.object({
284
+ name: z.string(),
285
+ price: z.number(),
286
+ category: z.enum(["electronics", "clothing", "food"]),
287
+ features: z.array(z.string()),
288
+ });
289
+
290
+ const response = await openai.beta.chat.completions.parse({
291
+ model: "gpt-4o",
292
+ messages: [{ role: "user", content: "Extract: iPhone 16 Pro, $999, electronics, A18 chip, titanium." }],
293
+ response_format: zodResponseFormat(ProductSchema, "product"),
294
+ });
295
+
296
+ const product = response.choices[0].message.parsed; // Typed as z.infer<typeof ProductSchema>
297
+ ```
298
+
299
+ ---
300
+
301
+ ## Vision (Image Inputs)
302
+
303
+ ```typescript
304
+ const response = await openai.chat.completions.create({
305
+ model: "gpt-4o",
306
+ messages: [
307
+ {
308
+ role: "user",
309
+ content: [
310
+ { type: "text", text: "What's in this image?" },
311
+ {
312
+ type: "image_url",
313
+ image_url: {
314
+ url: "https://example.com/photo.jpg",
315
+ detail: "auto", // "low" (85 tokens) | "high" (detailed, more tokens) | "auto"
316
+ },
317
+ },
318
+ ],
319
+ },
320
+ ],
321
+ max_tokens: 300,
322
+ });
323
+
324
+ // Base64 image
325
+ {
326
+ type: "image_url",
327
+ image_url: {
328
+ url: `data:image/jpeg;base64,${base64EncodedImage}`,
329
+ },
330
+ }
331
+ ```
332
+
333
+ ---
334
+
335
+ ## Embeddings
336
+
337
+ ```typescript
338
+ const response = await openai.embeddings.create({
339
+ model: "text-embedding-3-small", // or "text-embedding-3-large"
340
+ input: "The quick brown fox jumps over the lazy dog",
341
+ dimensions: 512, // Optional: reduce dimensions (only for v3 models)
342
+ });
343
+
344
+ const embedding = response.data[0].embedding; // number[] of length 512
345
+
346
+ // Batch embeddings
347
+ const batchResponse = await openai.embeddings.create({
348
+ model: "text-embedding-3-small",
349
+ input: ["First document", "Second document", "Third document"],
350
+ });
351
+
352
+ // Cosine similarity for search
353
+ function cosineSimilarity(a: number[], b: number[]): number {
354
+ const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0);
355
+ const magA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0));
356
+ const magB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0));
357
+ return dot / (magA * magB);
358
+ }
359
+ ```
360
+
361
+ ---
362
+
363
+ ## Moderation API
364
+
365
+ ```typescript
366
+ const moderation = await openai.moderations.create({
367
+ input: userMessage,
368
+ model: "omni-moderation-latest",
369
+ });
370
+
371
+ const result = moderation.results[0];
372
+ if (result.flagged) {
373
+ console.log("Flagged categories:", result.categories);
374
+ // { hate: false, sexual: true, violence: false, ... }
375
+ throw new Error("Content violates usage policy");
376
+ }
377
+ ```
378
+
379
+ ---
380
+
381
+ ## Error Handling
382
+
383
+ ```typescript
384
+ import OpenAI from "openai";
385
+
386
+ try {
387
+ const response = await openai.chat.completions.create({ /* ... */ });
388
+ } catch (error) {
389
+ if (error instanceof OpenAI.APIError) {
390
+ switch (error.status) {
391
+ case 400:
392
+ console.error("Bad request:", error.message);
393
+ break;
394
+ case 401:
395
+ console.error("Invalid API key");
396
+ break;
397
+ case 429:
398
+ // Rate limited — SDK retries automatically (maxRetries)
399
+ console.error("Rate limited. Retry after:", error.headers?.["retry-after"]);
400
+ break;
401
+ case 500:
402
+ case 503:
403
+ console.error("OpenAI server error — retry");
404
+ break;
405
+ }
406
+ } else if (error instanceof OpenAI.APIConnectionError) {
407
+ console.error("Network error — cannot reach OpenAI");
408
+ } else if (error instanceof OpenAI.RateLimitError) {
409
+ console.error("Rate limit exceeded");
410
+ }
411
+ throw error;
412
+ }
413
+ ```
414
+
415
+ ---
416
+
417
+ ## Model Selection Guide
418
+
419
+ | Model | Best For | Speed | Cost | Context |
420
+ |---|---|---|---|---|
421
+ | `gpt-4o` | General purpose, tool use, vision, quality | Fast | Medium | 128K |
422
+ | `gpt-4o-mini` | Cost-sensitive tasks, high volume | Fastest | Low | 128K |
423
+ | `o1` | Complex reasoning, math, code | Slow | High | 200K |
424
+ | `o3-mini` | Reasoning at lower cost | Medium | Medium | 200K |
425
+
426
+ **Decision framework:**
427
+ - Default to `gpt-4o-mini` for most tasks (cost-effective, fast)
428
+ - Use `gpt-4o` when quality matters (user-facing, complex tool use)
429
+ - Use `o1` / `o3-mini` for multi-step reasoning, math proofs, code generation
430
+ - Use `text-embedding-3-small` for embeddings (unless retrieval quality critical, then `large`)
431
+
432
+ ---
433
+
434
+ ## Token Counting (Pre-Request)
435
+
436
+ ```typescript
437
+ // Use tiktoken for accurate pre-request token counting
438
+ import { encoding_for_model } from "tiktoken";
439
+
440
+ const enc = encoding_for_model("gpt-4o");
441
+ const tokens = enc.encode("Your message here");
442
+ console.log(`Token count: ${tokens.length}`);
443
+ enc.free(); // Clean up WASM memory
444
+
445
+ // Rough estimate without tiktoken: ~4 chars per token for English
446
+ const roughEstimate = Math.ceil(text.length / 4);
447
+ ```
448
+
449
+ ---
450
+
451
+ ## Streaming with Function Calls
452
+
453
+ ```typescript
454
+ const stream = await openai.chat.completions.create({
455
+ model: "gpt-4o",
456
+ messages,
457
+ tools,
458
+ stream: true,
459
+ });
460
+
461
+ let currentToolCall: { id: string; name: string; arguments: string } | null = null;
462
+
463
+ for await (const chunk of stream) {
464
+ const delta = chunk.choices[0]?.delta;
465
+
466
+ // Streaming content
467
+ if (delta?.content) {
468
+ process.stdout.write(delta.content);
469
+ }
470
+
471
+ // Streaming tool call (arguments arrive in chunks)
472
+ if (delta?.tool_calls) {
473
+ for (const tc of delta.tool_calls) {
474
+ if (tc.id) {
475
+ // New tool call started
476
+ currentToolCall = { id: tc.id, name: tc.function!.name!, arguments: "" };
477
+ }
478
+ if (tc.function?.arguments) {
479
+ currentToolCall!.arguments += tc.function.arguments;
480
+ }
481
+ }
482
+ }
483
+
484
+ // Finish reason indicates tool call complete
485
+ if (chunk.choices[0]?.finish_reason === "tool_calls" && currentToolCall) {
486
+ const args = JSON.parse(currentToolCall.arguments);
487
+ // Execute the tool and continue the conversation
488
+ }
489
+ }
490
+ ```
491
+
492
+ ---
493
+
494
+ ## Prompt Engineering Patterns
495
+
496
+ ### System Prompt Structure
497
+
498
+ ```typescript
499
+ const systemPrompt = `You are a customer support agent for Acme Corp.
500
+
501
+ ## Your Role
502
+ - Answer product questions accurately
503
+ - Escalate billing issues to human agents
504
+ - Never make up product features
505
+
506
+ ## Constraints
507
+ - Respond in 2-3 sentences maximum
508
+ - If you don't know, say "I'll connect you with a specialist"
509
+ - Never share internal pricing or roadmap
510
+
511
+ ## Output Format
512
+ Respond in plain text. No markdown unless the user asks for structured data.`;
513
+ ```
514
+
515
+ ### Few-Shot Examples
516
+
517
+ ```typescript
518
+ const messages = [
519
+ { role: "system", content: "Classify customer feedback as positive, negative, or neutral." },
520
+ { role: "user", content: "The product is amazing, I love it!" },
521
+ { role: "assistant", content: "positive" },
522
+ { role: "user", content: "It broke after two days." },
523
+ { role: "assistant", content: "negative" },
524
+ { role: "user", content: "It arrived on time." },
525
+ { role: "assistant", content: "neutral" },
526
+ { role: "user", content: actualFeedback }, // Real input
527
+ ];
528
+ ```
529
+
530
+ ---
531
+
532
+ ## Anti-Patterns
533
+
534
+ | Anti-Pattern | Why It Breaks | Correct Approach |
535
+ |---|---|---|
536
+ | Exposing API key in client-side code | Key theft, billing abuse | Server-side only, proxy API calls |
537
+ | No timeout configuration | Hung requests, resource exhaustion | Set `timeout: 60_000` on client |
538
+ | Ignoring `finish_reason` | Missing truncated responses | Check for `"length"` and handle |
539
+ | Hardcoded model names everywhere | Painful model upgrades | Centralize model config |
540
+ | Not validating tool call arguments | JSON parse errors, wrong types | Parse with Zod, handle malformed args |
541
+ | Sending PII in prompts | Privacy violations | Strip PII before sending to API |
542
+ | No rate limit handling | 429 errors crash the app | Use SDK's built-in `maxRetries` |
543
+ | Using `max_tokens` too low | Truncated, useless responses | Set based on expected output length |
544
+ | Streaming without error handling | Silent failures, stuck UI | Catch errors in stream loop |
545
+ | Not tracking token usage | Surprise bills | Log `response.usage` per request |
546
+
547
+ ---
548
+
549
+ **Last verified**: 2026-02-16 | **Skill version**: 1.0.0
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: google-analytics
3
+ description: Analyze Google Analytics data, review website performance metrics, identify traffic patterns, and suggest data-driven improvements. Use when the user asks about analytics, website metrics, traffic analysis, conversion rates, user behavior, or performance optimization.
4
+ ---
5
+
6
+ # Google Analytics Analysis
7
+
8
+ Analyze website performance using Google Analytics data to provide actionable insights and improvement recommendations.
9
+
10
+ ## Quick Start
11
+
12
+ ### 1. Setup Authentication
13
+
14
+ This Skill requires Google Analytics API credentials. Set up environment variables:
15
+
16
+ ```bash
17
+ export GOOGLE_ANALYTICS_PROPERTY_ID="your-property-id"
18
+ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
19
+ ```
20
+
21
+ Or create a `.env` file in your project root:
22
+
23
+ ```env
24
+ GOOGLE_ANALYTICS_PROPERTY_ID=123456789
25
+ GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
26
+ ```
27
+
28
+ **Never commit credentials to version control.** The service account JSON file should be stored securely outside your repository.
29
+
30
+ ### 2. Install Required Packages
31
+
32
+ ```bash
33
+ # Option 1: Install from requirements file (recommended)
34
+ pip install -r cli-tool/components/skills/analytics/google-analytics/requirements.txt
35
+
36
+ # Option 2: Install individually
37
+ pip install google-analytics-data python-dotenv pandas
38
+ ```
39
+
40
+ ### 3. Analyze Your Project
41
+
42
+ Once configured, I can:
43
+ - Review current traffic and user behavior metrics
44
+ - Identify top-performing and underperforming pages
45
+ - Analyze traffic sources and conversion funnels
46
+ - Compare performance across time periods
47
+ - Suggest data-driven improvements
48
+
49
+ ## How to Use
50
+
51
+ Ask me questions like:
52
+ - "Review our Google Analytics performance for the last 30 days"
53
+ - "What are our top traffic sources?"
54
+ - "Which pages have the highest bounce rates?"
55
+ - "Analyze user engagement and suggest improvements"
56
+ - "Compare this month's performance to last month"
57
+
58
+ ## Analysis Workflow
59
+
60
+ When you ask me to analyze Google Analytics data, I will:
61
+
62
+ 1. **Connect to the API** using the helper script
63
+ 2. **Fetch relevant metrics** based on your question
64
+ 3. **Analyze the data** looking for:
65
+ - Traffic trends and patterns
66
+ - User behavior insights
67
+ - Performance bottlenecks
68
+ - Conversion opportunities
69
+ 4. **Provide recommendations** with:
70
+ - Specific improvement suggestions
71
+ - Priority level (high/medium/low)
72
+ - Expected impact
73
+ - Implementation guidance
74
+
75
+ ## Common Metrics
76
+
77
+ For detailed metric definitions and dimensions, see [REFERENCE.md](REFERENCE.md).
78
+
79
+ ### Traffic Metrics
80
+ - Sessions, Users, New Users
81
+ - Page views, Screens per Session
82
+ - Average Session Duration
83
+
84
+ ### Engagement Metrics
85
+ - Bounce Rate, Engagement Rate
86
+ - Event Count, Conversions
87
+ - Scroll Depth, Click-through Rate
88
+
89
+ ### Acquisition Metrics
90
+ - Traffic Source/Medium
91
+ - Campaign Performance
92
+ - Channel Grouping
93
+
94
+ ### Conversion Metrics
95
+ - Goal Completions
96
+ - E-commerce Transactions
97
+ - Conversion Rate by Source
98
+
99
+ ## Analysis Examples
100
+
101
+ For complete analysis patterns and use cases, see [EXAMPLES.md](EXAMPLES.md).
102
+
103
+ ## Scripts
104
+
105
+ The Skill includes utility scripts for API interaction:
106
+
107
+ ### Fetch Current Performance
108
+ ```bash
109
+ python scripts/ga_client.py --days 30 --metrics sessions,users,bounceRate
110
+ ```
111
+
112
+ ### Analyze and Generate Report
113
+ ```bash
114
+ python scripts/analyze.py --period last-30-days --compare previous-period
115
+ ```
116
+
117
+ The scripts handle API authentication, data fetching, and basic analysis. I'll interpret the results and provide actionable recommendations.
118
+
119
+ ## Troubleshooting
120
+
121
+ **Authentication Error**: Verify that:
122
+ - `GOOGLE_APPLICATION_CREDENTIALS` points to a valid service account JSON file
123
+ - The service account has "Viewer" access to your GA4 property
124
+ - `GOOGLE_ANALYTICS_PROPERTY_ID` matches your GA4 property ID (not the measurement ID)
125
+
126
+ **No Data Returned**: Check that:
127
+ - The property ID is correct (find it in GA4 Admin > Property Settings)
128
+ - The date range contains data
129
+ - The service account has been granted access in GA4
130
+
131
+ **Import Errors**: Install required packages:
132
+ ```bash
133
+ pip install google-analytics-data python-dotenv pandas
134
+ ```
135
+
136
+ ## Security Notes
137
+
138
+ - **Never hardcode** API credentials or property IDs in code
139
+ - Store service account JSON files **outside** version control
140
+ - Use environment variables or `.env` files for configuration
141
+ - Add `.env` and credential files to `.gitignore`
142
+ - Rotate service account keys periodically
143
+ - Use least-privilege access (Viewer role only)
144
+
145
+ ## Data Privacy
146
+
147
+ This Skill accesses aggregated analytics data only. It does not:
148
+ - Access personally identifiable information (PII)
149
+ - Store analytics data persistently
150
+ - Share data with external services
151
+ - Modify your Google Analytics configuration
152
+
153
+ All data is processed locally and used only to generate recommendations during the conversation.