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,515 @@
1
+ ---
2
+ name: cli-error-diagnostics
3
+ description: Error handling and diagnostic patterns for CLI tools covering structured error messages, actionable suggestions, verbose mode, diagnostic commands, log files, and crash reports. Use when building CLI tools that need clear, helpful error output.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # CLI Error Diagnostics
8
+
9
+ Build CLI tools that produce clear, actionable error messages and provide diagnostic capabilities for troubleshooting.
10
+
11
+ ## Structured Error Messages
12
+
13
+ Every error message must answer three questions: What happened? Why did it happen? What can the user do about it?
14
+
15
+ ```
16
+ Error: Failed to deploy to production.
17
+ Cause: Authentication token expired 2 hours ago.
18
+ Fix: Run `mycli auth login` to refresh your credentials.
19
+ ```
20
+
21
+ ```typescript
22
+ import chalk from 'chalk';
23
+
24
+ interface CliError {
25
+ message: string;
26
+ cause?: string;
27
+ fix?: string;
28
+ code?: string;
29
+ details?: string;
30
+ }
31
+
32
+ function formatError(error: CliError): string {
33
+ const lines: string[] = [];
34
+
35
+ lines.push(chalk.red(`Error${error.code ? ` [${error.code}]` : ''}: ${error.message}`));
36
+
37
+ if (error.cause) {
38
+ lines.push(chalk.dim(` Cause: ${error.cause}`));
39
+ }
40
+
41
+ if (error.details) {
42
+ lines.push(chalk.dim(` Details: ${error.details}`));
43
+ }
44
+
45
+ if (error.fix) {
46
+ lines.push(chalk.cyan(` Fix: ${error.fix}`));
47
+ }
48
+
49
+ return lines.join('\n');
50
+ }
51
+
52
+ // Usage
53
+ function handleDeployError(error: unknown): never {
54
+ if (error instanceof AuthExpiredError) {
55
+ console.error(formatError({
56
+ message: 'Failed to deploy to production.',
57
+ cause: `Authentication token expired ${error.expiredAgo}.`,
58
+ fix: 'Run `mycli auth login` to refresh your credentials.',
59
+ code: 'AUTH_EXPIRED',
60
+ }));
61
+ process.exit(77);
62
+ }
63
+
64
+ if (error instanceof ConfigNotFoundError) {
65
+ console.error(formatError({
66
+ message: 'No configuration file found.',
67
+ cause: `Searched in ${error.searchedPaths.join(', ')}.`,
68
+ fix: 'Run `mycli init` to create a configuration file.',
69
+ code: 'CONFIG_NOT_FOUND',
70
+ }));
71
+ process.exit(65);
72
+ }
73
+
74
+ // Unknown error
75
+ console.error(formatError({
76
+ message: 'An unexpected error occurred.',
77
+ cause: (error as Error).message,
78
+ fix: 'Run with --verbose for more details, or file an issue at https://github.com/example/mycli/issues',
79
+ code: 'INTERNAL',
80
+ }));
81
+ process.exit(70);
82
+ }
83
+ ```
84
+
85
+ **Anti-pattern**: `Error: Something went wrong` -- no context, no cause, no fix.
86
+ **Anti-pattern**: Printing a raw stack trace to users. Stack traces belong in `--verbose` mode or log files.
87
+
88
+ ## Actionable Suggestions
89
+
90
+ ### "Did You Mean?" for Typos
91
+
92
+ ```typescript
93
+ import { distance } from 'fastest-levenshtein';
94
+
95
+ function suggestCommand(input: string, validCommands: string[]): string | null {
96
+ const MAX_DISTANCE = 3;
97
+
98
+ const suggestions = validCommands
99
+ .map((cmd) => ({ cmd, dist: distance(input, cmd) }))
100
+ .filter(({ dist }) => dist <= MAX_DISTANCE)
101
+ .sort((a, b) => a.dist - b.dist);
102
+
103
+ return suggestions.length > 0 ? suggestions[0].cmd : null;
104
+ }
105
+
106
+ // Usage
107
+ function handleUnknownCommand(input: string): never {
108
+ const suggestion = suggestCommand(input, ['deploy', 'status', 'logs', 'config', 'auth']);
109
+
110
+ const error: CliError = {
111
+ message: `Unknown command: ${input}`,
112
+ code: 'UNKNOWN_COMMAND',
113
+ };
114
+
115
+ if (suggestion) {
116
+ error.fix = `Did you mean \`mycli ${suggestion}\`?`;
117
+ } else {
118
+ error.fix = 'Run `mycli --help` to see available commands.';
119
+ }
120
+
121
+ console.error(formatError(error));
122
+ process.exit(2);
123
+ }
124
+ ```
125
+
126
+ ### Context-Aware Suggestions
127
+
128
+ ```typescript
129
+ // Suggest fixes based on common error patterns
130
+ function suggestFix(error: Error): string | undefined {
131
+ const msg = error.message.toLowerCase();
132
+
133
+ if (msg.includes('eacces') || msg.includes('permission denied')) {
134
+ return process.platform === 'win32'
135
+ ? 'Try running the terminal as Administrator.'
136
+ : 'Try running with `sudo` or check file permissions with `ls -la`.';
137
+ }
138
+
139
+ if (msg.includes('econnrefused')) {
140
+ return 'The server may be down. Check your network connection or verify the API URL in your config.';
141
+ }
142
+
143
+ if (msg.includes('enotfound') || msg.includes('getaddrinfo')) {
144
+ return 'DNS resolution failed. Check your internet connection or verify the hostname.';
145
+ }
146
+
147
+ if (msg.includes('certificate') || msg.includes('ssl') || msg.includes('tls')) {
148
+ return 'TLS certificate validation failed. If behind a corporate proxy, set NODE_EXTRA_CA_CERTS.';
149
+ }
150
+
151
+ if (msg.includes('out of memory') || msg.includes('heap')) {
152
+ return 'Try increasing memory with NODE_OPTIONS="--max-old-space-size=4096".';
153
+ }
154
+
155
+ return undefined;
156
+ }
157
+ ```
158
+
159
+ ## Verbose / Debug Mode
160
+
161
+ ```typescript
162
+ enum LogLevel {
163
+ Quiet = 0,
164
+ Normal = 1,
165
+ Verbose = 2,
166
+ Debug = 3,
167
+ }
168
+
169
+ class Logger {
170
+ constructor(private level: LogLevel) {}
171
+
172
+ error(msg: string, details?: string): void {
173
+ console.error(chalk.red(`Error: ${msg}`));
174
+ if (details && this.level >= LogLevel.Verbose) {
175
+ console.error(chalk.dim(details));
176
+ }
177
+ }
178
+
179
+ warn(msg: string): void {
180
+ if (this.level >= LogLevel.Normal) {
181
+ console.error(chalk.yellow(`Warning: ${msg}`));
182
+ }
183
+ }
184
+
185
+ info(msg: string): void {
186
+ if (this.level >= LogLevel.Normal) {
187
+ console.error(msg);
188
+ }
189
+ }
190
+
191
+ verbose(msg: string): void {
192
+ if (this.level >= LogLevel.Verbose) {
193
+ console.error(chalk.dim(` ${msg}`));
194
+ }
195
+ }
196
+
197
+ debug(msg: string): void {
198
+ if (this.level >= LogLevel.Debug) {
199
+ console.error(chalk.gray(`[debug] ${msg}`));
200
+ }
201
+ }
202
+
203
+ // Structured debug: show timing, context
204
+ debugTiming(label: string, startTime: number): void {
205
+ if (this.level >= LogLevel.Debug) {
206
+ const elapsed = Date.now() - startTime;
207
+ console.error(chalk.gray(`[debug] ${label}: ${elapsed}ms`));
208
+ }
209
+ }
210
+ }
211
+
212
+ // Initialize from flags
213
+ function createLogger(options: { verbose?: boolean; quiet?: boolean; debug?: boolean }): Logger {
214
+ if (options.debug) return new Logger(LogLevel.Debug);
215
+ if (options.verbose) return new Logger(LogLevel.Verbose);
216
+ if (options.quiet) return new Logger(LogLevel.Quiet);
217
+ return new Logger(LogLevel.Normal);
218
+ }
219
+ ```
220
+
221
+ ```
222
+ # Normal output
223
+ $ mycli deploy staging
224
+ Deploying to staging...
225
+ ✓ Deployed v1.2.0 to staging
226
+
227
+ # Verbose output
228
+ $ mycli deploy staging --verbose
229
+ Loading config from /home/user/.config/mycli/config.toml
230
+ Resolved environment: staging (from argument)
231
+ Authenticating with token from keyring
232
+ Building from tag v1.2.0
233
+ Deploying to staging...
234
+ Creating deployment manifest
235
+ Uploading 3 artifacts (12.4 MB)
236
+ Running health checks (attempt 1/3)
237
+ ✓ Deployed v1.2.0 to staging in 34s
238
+
239
+ # Debug output
240
+ $ mycli deploy staging --debug
241
+ [debug] Config paths searched: .mycli.toml, /home/user/.config/mycli/config.toml
242
+ [debug] Config loaded: { environment: 'staging', replicas: 1 }
243
+ [debug] Auth token expires in 3420s
244
+ [debug] API request: POST https://api.example.com/deployments
245
+ [debug] API response: 201 Created (234ms)
246
+ [debug] Health check: GET https://staging.example.com/healthz -> 200 (89ms)
247
+ ```
248
+
249
+ ## Diagnostic Commands
250
+
251
+ ### `mycli doctor` / `mycli check`
252
+
253
+ ```typescript
254
+ interface Check {
255
+ name: string;
256
+ check: () => Promise<CheckResult>;
257
+ }
258
+
259
+ interface CheckResult {
260
+ status: 'ok' | 'warn' | 'fail';
261
+ message: string;
262
+ fix?: string;
263
+ }
264
+
265
+ const diagnosticChecks: Check[] = [
266
+ {
267
+ name: 'Configuration file',
268
+ check: async () => {
269
+ const configPath = getConfigPath();
270
+ if (fs.existsSync(configPath)) {
271
+ return { status: 'ok', message: `Found at ${configPath}` };
272
+ }
273
+ return {
274
+ status: 'warn',
275
+ message: 'No config file found',
276
+ fix: 'Run `mycli init` to create one',
277
+ };
278
+ },
279
+ },
280
+ {
281
+ name: 'Authentication',
282
+ check: async () => {
283
+ const token = await getStoredToken();
284
+ if (!token) {
285
+ return { status: 'fail', message: 'Not authenticated', fix: 'Run `mycli auth login`' };
286
+ }
287
+ if (isTokenExpired(token)) {
288
+ return { status: 'fail', message: 'Token expired', fix: 'Run `mycli auth login`' };
289
+ }
290
+ return { status: 'ok', message: `Authenticated as ${token.user}` };
291
+ },
292
+ },
293
+ {
294
+ name: 'API connectivity',
295
+ check: async () => {
296
+ try {
297
+ const start = Date.now();
298
+ await fetch(`${getApiUrl()}/health`);
299
+ const elapsed = Date.now() - start;
300
+ return { status: 'ok', message: `Reachable (${elapsed}ms)` };
301
+ } catch (error) {
302
+ return {
303
+ status: 'fail',
304
+ message: `Cannot reach API: ${(error as Error).message}`,
305
+ fix: 'Check your network connection and API URL in config',
306
+ };
307
+ }
308
+ },
309
+ },
310
+ {
311
+ name: 'Required tools',
312
+ check: async () => {
313
+ const missing: string[] = [];
314
+ for (const tool of ['git', 'docker']) {
315
+ try {
316
+ execFileSync('which', [tool], { stdio: 'pipe' });
317
+ } catch {
318
+ missing.push(tool);
319
+ }
320
+ }
321
+ if (missing.length > 0) {
322
+ return { status: 'fail', message: `Missing: ${missing.join(', ')}`, fix: `Install ${missing.join(' and ')}` };
323
+ }
324
+ return { status: 'ok', message: 'git, docker found' };
325
+ },
326
+ },
327
+ ];
328
+
329
+ async function runDoctor(): Promise<void> {
330
+ console.log(chalk.bold('\nDiagnostics\n'));
331
+
332
+ let hasFailures = false;
333
+
334
+ for (const check of diagnosticChecks) {
335
+ const result = await check.check();
336
+ const icon = result.status === 'ok' ? chalk.green('✓')
337
+ : result.status === 'warn' ? chalk.yellow('⚠')
338
+ : chalk.red('✗');
339
+
340
+ console.log(` ${icon} ${check.name}: ${result.message}`);
341
+ if (result.fix) {
342
+ console.log(chalk.cyan(` Fix: ${result.fix}`));
343
+ }
344
+
345
+ if (result.status === 'fail') hasFailures = true;
346
+ }
347
+
348
+ console.log('');
349
+ process.exit(hasFailures ? 1 : 0);
350
+ }
351
+ ```
352
+
353
+ ```
354
+ $ mycli doctor
355
+
356
+ Diagnostics
357
+
358
+ ✓ Configuration file: Found at /home/user/.config/mycli/config.toml
359
+ ✗ Authentication: Token expired
360
+ Fix: Run `mycli auth login`
361
+ ✓ API connectivity: Reachable (89ms)
362
+ ✓ Required tools: git, docker found
363
+ ```
364
+
365
+ ## Log File Locations
366
+
367
+ ```typescript
368
+ import path from 'path';
369
+ import os from 'os';
370
+ import fs from 'fs';
371
+
372
+ function getLogDir(appName: string): string {
373
+ if (process.platform === 'win32') {
374
+ return path.join(process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local'), appName, 'logs');
375
+ }
376
+ const stateDir = process.env.XDG_STATE_HOME || path.join(os.homedir(), '.local', 'state');
377
+ return path.join(stateDir, appName);
378
+ }
379
+
380
+ function writeLogFile(appName: string, content: string): string {
381
+ const logDir = getLogDir(appName);
382
+ fs.mkdirSync(logDir, { recursive: true });
383
+
384
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
385
+ const logPath = path.join(logDir, `${appName}-${timestamp}.log`);
386
+
387
+ fs.writeFileSync(logPath, content, 'utf-8');
388
+
389
+ // Rotate: keep only last 10 log files
390
+ const files = fs.readdirSync(logDir)
391
+ .filter((f) => f.endsWith('.log'))
392
+ .sort()
393
+ .reverse();
394
+
395
+ for (const file of files.slice(10)) {
396
+ fs.unlinkSync(path.join(logDir, file));
397
+ }
398
+
399
+ return logPath;
400
+ }
401
+ ```
402
+
403
+ ## Crash Report Formatting
404
+
405
+ ```typescript
406
+ function generateCrashReport(error: Error): string {
407
+ const report = [
408
+ `mycli crash report`,
409
+ `==================`,
410
+ ``,
411
+ `Date: ${new Date().toISOString()}`,
412
+ `Version: ${getVersion()}`,
413
+ `Node.js: ${process.version}`,
414
+ `OS: ${os.platform()} ${os.release()} (${os.arch()})`,
415
+ `Shell: ${process.env.SHELL || process.env.ComSpec || 'unknown'}`,
416
+ ``,
417
+ `Error: ${error.message}`,
418
+ ``,
419
+ `Stack trace:`,
420
+ error.stack || ' (no stack trace available)',
421
+ ``,
422
+ `Configuration:`,
423
+ ` Config path: ${getConfigPath() || 'not found'}`,
424
+ ` API URL: ${getApiUrl()}`,
425
+ ``,
426
+ `Environment:`,
427
+ ` MYCLI_* vars: ${Object.keys(process.env).filter((k) => k.startsWith('MYCLI_')).join(', ') || 'none'}`,
428
+ ` NODE_ENV: ${process.env.NODE_ENV || 'not set'}`,
429
+ ` CI: ${process.env.CI || 'not set'}`,
430
+ ].join('\n');
431
+
432
+ return report;
433
+ }
434
+
435
+ function handleUnexpectedError(error: Error): never {
436
+ const report = generateCrashReport(error);
437
+ const logPath = writeLogFile('mycli', report);
438
+
439
+ console.error(formatError({
440
+ message: 'An unexpected error occurred.',
441
+ code: 'CRASH',
442
+ fix: [
443
+ `A crash report has been saved to: ${logPath}`,
444
+ `Please file an issue at https://github.com/example/mycli/issues`,
445
+ `and include the crash report.`,
446
+ ].join('\n '),
447
+ }));
448
+
449
+ process.exit(70);
450
+ }
451
+
452
+ // Global error handlers
453
+ process.on('uncaughtException', handleUnexpectedError);
454
+ process.on('unhandledRejection', (reason) => {
455
+ handleUnexpectedError(reason instanceof Error ? reason : new Error(String(reason)));
456
+ });
457
+ ```
458
+
459
+ ## Error Codes
460
+
461
+ ```typescript
462
+ // Define a complete error code catalog
463
+ const ERROR_CODES = {
464
+ // Authentication (100-199)
465
+ AUTH_EXPIRED: { code: 100, exit: 77, message: 'Authentication token has expired' },
466
+ AUTH_INVALID: { code: 101, exit: 77, message: 'Invalid authentication credentials' },
467
+ AUTH_MISSING: { code: 102, exit: 77, message: 'No authentication credentials found' },
468
+
469
+ // Configuration (200-299)
470
+ CONFIG_NOT_FOUND: { code: 200, exit: 65, message: 'Configuration file not found' },
471
+ CONFIG_INVALID: { code: 201, exit: 65, message: 'Configuration file is invalid' },
472
+ CONFIG_VERSION: { code: 202, exit: 65, message: 'Configuration version not supported' },
473
+
474
+ // Network (300-399)
475
+ NET_UNREACHABLE: { code: 300, exit: 69, message: 'API server is unreachable' },
476
+ NET_TIMEOUT: { code: 301, exit: 69, message: 'Request timed out' },
477
+ NET_SSL: { code: 302, exit: 69, message: 'TLS certificate verification failed' },
478
+
479
+ // Input (400-499)
480
+ INPUT_INVALID: { code: 400, exit: 65, message: 'Invalid input data' },
481
+ INPUT_MISSING: { code: 401, exit: 64, message: 'Required input not provided' },
482
+ } as const;
483
+ ```
484
+
485
+ **Rule**: Error codes should be documented in `mycli --help` or `mycli help errors` so users and scripts can handle specific failures.
486
+
487
+ ## Colored Error Output
488
+
489
+ ```typescript
490
+ // Error output respects NO_COLOR and non-TTY
491
+ function printError(error: CliError): void {
492
+ const useColor = process.stderr.isTTY && process.env.NO_COLOR === undefined;
493
+
494
+ const red = useColor ? (s: string) => `\x1b[31m${s}\x1b[0m` : (s: string) => s;
495
+ const dim = useColor ? (s: string) => `\x1b[2m${s}\x1b[0m` : (s: string) => s;
496
+ const cyan = useColor ? (s: string) => `\x1b[36m${s}\x1b[0m` : (s: string) => s;
497
+
498
+ process.stderr.write(red(`Error: ${error.message}`) + '\n');
499
+ if (error.cause) process.stderr.write(dim(` Cause: ${error.cause}`) + '\n');
500
+ if (error.fix) process.stderr.write(cyan(` Fix: ${error.fix}`) + '\n');
501
+ }
502
+ ```
503
+
504
+ ## Output Checklist
505
+
506
+ - [ ] Every error message includes what happened, why, and how to fix it
507
+ - [ ] "Did you mean?" suggestions for typos in commands and flags
508
+ - [ ] `--verbose` flag shows detailed progress and context
509
+ - [ ] `--debug` flag shows raw API requests, timing, and internal state
510
+ - [ ] `mycli doctor` command checks all prerequisites and dependencies
511
+ - [ ] Log files written to XDG state directory with automatic rotation
512
+ - [ ] Crash reports include version, OS, Node.js version, and sanitized config
513
+ - [ ] Defined error codes documented and machine-readable
514
+ - [ ] Errors go to stderr, never stdout
515
+ - [ ] Colors degrade gracefully with NO_COLOR and non-TTY