@polymorphism-tech/morph-spec 4.3.6 → 4.5.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 (375) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +44 -9
  3. package/.morph/config/config.json +2 -3
  4. package/.morph/framework/standards/STANDARDS.json +812 -0
  5. package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
  6. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  7. package/.morph/{templates → framework/templates}/README.md +17 -17
  8. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  9. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  10. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  11. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  12. package/.morph/framework/templates/docs/clarifications.md +253 -0
  13. package/.morph/framework/templates/docs/onboarding.md +123 -0
  14. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  15. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  16. package/.morph/framework/templates/docs/ui-components.md +124 -0
  17. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  18. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  19. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  20. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  21. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  22. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  23. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  24. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  25. package/.morph/logs/tool-failures.log +51 -0
  26. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +16 -0
  27. package/.morph/state.json +1 -1
  28. package/CLAUDE.md +20 -119
  29. package/README.md +20 -18
  30. package/bin/detect-agents.js +1 -1
  31. package/bin/morph-spec.js +116 -266
  32. package/bin/task-manager.cjs +2 -2
  33. package/bin/validate.js +1 -1
  34. package/claude-plugin.json +14 -0
  35. package/docs/claude-alignment-report.md +137 -0
  36. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  37. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  38. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  39. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  40. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  41. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  42. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  43. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  44. package/framework/CLAUDE.md +77 -0
  45. package/framework/commands/morph-apply.md +9 -9
  46. package/framework/commands/morph-archive.md +8 -8
  47. package/framework/commands/morph-infra.md +1 -1
  48. package/framework/commands/morph-proposal.md +9 -9
  49. package/framework/commands/morph-status.md +3 -3
  50. package/framework/commands/morph-troubleshoot.md +1 -1
  51. package/framework/hooks/README.md +201 -282
  52. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  53. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  54. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  55. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  56. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  57. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  58. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  59. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  60. package/framework/hooks/claude-code/statusline.py +239 -0
  61. package/framework/hooks/claude-code/statusline.sh +7 -0
  62. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  63. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  64. package/framework/hooks/shared/hook-response.js +45 -0
  65. package/framework/hooks/shared/phase-utils.js +129 -0
  66. package/framework/hooks/shared/state-reader.js +138 -0
  67. package/framework/hooks/shared/stdin-reader.js +26 -0
  68. package/framework/phases.json +145 -0
  69. package/framework/rules/csharp-standards.md +10 -0
  70. package/framework/rules/frontend-standards.md +14 -0
  71. package/framework/rules/infrastructure-standards.md +13 -0
  72. package/framework/rules/morph-workflow.md +86 -0
  73. package/framework/rules/testing-standards.md +11 -0
  74. package/framework/skills/level-0-meta/brainstorming.md +133 -0
  75. package/framework/skills/level-0-meta/code-review.md +12 -4
  76. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  77. package/framework/skills/level-0-meta/morph-checklist.md +9 -1
  78. package/framework/skills/level-0-meta/simulation-checklist.md +9 -1
  79. package/framework/skills/level-0-meta/tool-usage-guide.md +335 -0
  80. package/framework/skills/level-0-meta/verification-before-completion.md +145 -0
  81. package/framework/skills/level-1-workflows/morph-replicate.md +9 -1
  82. package/framework/skills/level-1-workflows/phase-clarify.md +65 -4
  83. package/framework/skills/level-1-workflows/phase-codebase-analysis.md +182 -0
  84. package/framework/skills/level-1-workflows/phase-design.md +342 -80
  85. package/framework/skills/level-1-workflows/phase-implement.md +254 -0
  86. package/framework/skills/level-1-workflows/phase-setup.md +76 -10
  87. package/framework/skills/level-1-workflows/phase-tasks.md +88 -7
  88. package/framework/skills/level-1-workflows/phase-uiux.md +95 -17
  89. package/framework/skills/level-2-domains/ai-agents/ai-system-architect.md +8 -1
  90. package/framework/skills/level-2-domains/architecture/po-pm-advisor.md +8 -1
  91. package/framework/skills/level-2-domains/architecture/prompt-engineer.md +8 -1
  92. package/framework/skills/level-2-domains/architecture/seo-growth-hacker.md +8 -1
  93. package/framework/skills/level-2-domains/architecture/standards-architect.md +11 -4
  94. package/framework/skills/level-2-domains/backend/api-designer.md +8 -1
  95. package/framework/skills/level-2-domains/backend/dotnet-senior.md +8 -1
  96. package/framework/skills/level-2-domains/backend/ef-modeler.md +8 -1
  97. package/framework/skills/level-2-domains/backend/hangfire-orchestrator.md +9 -2
  98. package/framework/skills/level-2-domains/backend/ms-agent-expert.md +8 -1
  99. package/framework/skills/level-2-domains/frontend/blazor-builder.md +8 -1
  100. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +8 -1
  101. package/framework/skills/level-2-domains/frontend/ui-ux-designer.md +9 -2
  102. package/framework/skills/level-2-domains/infrastructure/azure-architect.md +8 -1
  103. package/framework/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +8 -1
  104. package/framework/skills/level-2-domains/infrastructure/bicep-architect.md +8 -1
  105. package/framework/skills/level-2-domains/infrastructure/container-specialist.md +8 -1
  106. package/framework/skills/level-2-domains/infrastructure/devops-engineer.md +8 -1
  107. package/framework/skills/level-2-domains/integrations/asaas-financial.md +8 -1
  108. package/framework/skills/level-2-domains/integrations/azure-identity.md +8 -1
  109. package/framework/skills/level-2-domains/integrations/clerk-auth.md +8 -1
  110. package/framework/skills/level-2-domains/integrations/{hangfire-orchestrator.md → hangfire-integration.md} +8 -1
  111. package/framework/skills/level-2-domains/integrations/resend-email.md +8 -1
  112. package/framework/skills/level-2-domains/quality/code-analyzer.md +10 -3
  113. package/framework/skills/level-2-domains/quality/testing-specialist.md +8 -1
  114. package/framework/standards/STANDARDS.json +812 -0
  115. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  116. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  117. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  118. package/framework/templates/README.md +17 -17
  119. package/framework/templates/REGISTRY.json +48 -233
  120. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  121. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  122. package/framework/templates/context/CONTEXT.md +3 -3
  123. package/framework/templates/docs/clarifications.md +253 -0
  124. package/framework/templates/docs/onboarding.md +123 -0
  125. package/framework/templates/docs/schema-analysis.md +119 -0
  126. package/framework/templates/docs/spec.md +149 -149
  127. package/framework/templates/docs/ui-components.md +124 -0
  128. package/framework/templates/docs/ui-design-system.md +76 -0
  129. package/framework/templates/docs/ui-flows.md +167 -0
  130. package/framework/templates/docs/ui-mockups.md +98 -0
  131. package/framework/templates/docs/user-stories.md +34 -0
  132. package/framework/templates/examples/spec-examples.md +1 -1
  133. package/framework/templates/infrastructure/github/README.md +11 -11
  134. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  135. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  136. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  137. package/framework/workflows/configs/express.json +45 -0
  138. package/framework/workflows/configs/spec-only.json +43 -0
  139. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  140. package/framework/workflows/docs/full-morph.md +3 -3
  141. package/package.json +3 -2
  142. package/scripts/generate-refs.js +336 -0
  143. package/scripts/generate-standards-registry.js +44 -0
  144. package/scripts/validate-real.mjs +255 -0
  145. package/src/commands/feature/create-story.js +362 -361
  146. package/src/commands/feature/shard-spec.js +225 -224
  147. package/src/commands/feature/sprint-status.js +1 -1
  148. package/src/commands/generation/generate-onboarding.js +169 -0
  149. package/src/commands/generation/generate.js +2 -2
  150. package/src/commands/mcp/mcp-setup.js +315 -0
  151. package/src/commands/project/changes.js +66 -0
  152. package/src/commands/project/checkpoint.js +209 -0
  153. package/src/commands/project/cost.js +179 -0
  154. package/src/commands/project/diff.js +278 -0
  155. package/src/commands/project/doctor.js +55 -7
  156. package/src/commands/project/init.js +318 -76
  157. package/src/commands/project/revert.js +173 -0
  158. package/src/commands/project/standards.js +80 -0
  159. package/src/commands/project/status.js +376 -0
  160. package/src/commands/project/update-agents.js +23 -0
  161. package/src/commands/project/update.js +63 -30
  162. package/src/commands/state/advance-phase.js +4 -3
  163. package/src/commands/state/state.js +10 -3
  164. package/src/commands/state/validate-phase.js +19 -2
  165. package/src/commands/templates/template-customize.js +4 -4
  166. package/src/commands/templates/template-render.js +1 -1
  167. package/src/commands/templates/template-show.js +1 -1
  168. package/src/commands/validation/validate-feature.js +359 -0
  169. package/src/core/orchestrator.js +3 -38
  170. package/src/core/paths/output-schema.js +135 -0
  171. package/src/core/state/state-manager.js +831 -592
  172. package/src/core/templates/template-registry.js +2 -2
  173. package/src/core/workflows/workflow-detector.js +17 -1
  174. package/src/lib/agents/micro-agent-factory.js +1 -1
  175. package/src/lib/context/context-bundler.js +2 -1
  176. package/src/lib/detectors/claude-config-detector.js +392 -0
  177. package/src/lib/detectors/conversation-analyzer.js +4 -4
  178. package/src/lib/detectors/design-system-detector.js +6 -5
  179. package/src/lib/detectors/standards-generator.js +2 -2
  180. package/src/lib/generators/context-generator.js +539 -538
  181. package/src/lib/generators/recap-generator.js +1 -1
  182. package/src/lib/generators/settings-generator.js +210 -0
  183. package/src/lib/hooks/hook-executor.js +1 -1
  184. package/src/lib/installers/mcp-installer.js +299 -0
  185. package/src/lib/learning/learning-system.js +3 -3
  186. package/src/lib/orchestration/team-orchestrator.js +1 -1
  187. package/src/lib/standards/standards-context-injector.js +7 -7
  188. package/src/lib/threads/thread-coordinator.js +1 -1
  189. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  190. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  191. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  192. package/src/lib/validators/spec-validator.js +258 -258
  193. package/src/lib/validators/validation-runner.js +270 -269
  194. package/src/utils/agents-installer.js +206 -0
  195. package/src/utils/claude-settings-manager.js +258 -0
  196. package/src/utils/file-copier.js +1 -1
  197. package/src/utils/hooks-installer.js +354 -28
  198. package/src/utils/skills-installer.js +74 -0
  199. package/.morph/project/context/detection-log.md +0 -16
  200. package/.morph/project/standards/inferred.md +0 -59
  201. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  202. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  203. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  204. package/framework/hooks/agent-teams/dispatch.js +0 -67
  205. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  206. package/framework/hooks/agent-teams/task-completed.js +0 -76
  207. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  208. package/src/commands/agents/agents-fuse.js +0 -97
  209. package/src/commands/agents/micro-agent.js +0 -112
  210. package/src/commands/agents/spawn-team.js +0 -237
  211. package/src/commands/agents/squad-template.js +0 -146
  212. package/src/commands/analytics/analytics.js +0 -176
  213. package/src/commands/context/context-prime.js +0 -63
  214. package/src/commands/context/core-four.js +0 -54
  215. package/src/commands/generation/generate-context.js +0 -40
  216. package/src/commands/project/detect-agents.js +0 -207
  217. package/src/commands/project/detect-workflow.js +0 -174
  218. package/src/commands/threads/thread-template.js +0 -103
  219. package/src/commands/threads/threads.js +0 -261
  220. package/src/commands/utils/session-summary.js +0 -291
  221. package/src/llm/analyzer.js +0 -215
  222. package/src/llm/few-shot-examples.js +0 -216
  223. package/src/llm/project-config-schema.json +0 -188
  224. package/src/llm/prompt-builder.js +0 -96
  225. /package/.morph/{project/context → context}/README.md +0 -0
  226. /package/.morph/{config → framework}/agents.json +0 -0
  227. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  228. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  229. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  230. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  231. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  232. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  233. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  234. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  235. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  236. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  237. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  238. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  239. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  240. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  241. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  242. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  243. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  244. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  245. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  246. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  247. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  248. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  249. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  250. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  251. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  252. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  253. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  254. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  255. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  256. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  257. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  258. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  259. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  260. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  261. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  262. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  263. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  264. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  265. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  266. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  267. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  268. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  269. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  270. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  271. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  272. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +0 -0
  274. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  275. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  276. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  277. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  278. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  279. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  280. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  281. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  282. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  283. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  284. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  285. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  286. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  287. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  288. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  289. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  290. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  291. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  292. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  293. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  294. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  295. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  296. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  297. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  298. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  299. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  300. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  301. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  302. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  303. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  304. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  305. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  306. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  307. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  308. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  309. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  310. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  311. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  312. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  313. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  314. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  315. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  316. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  317. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  318. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  319. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  320. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  321. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  322. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  323. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  324. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  325. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  327. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  328. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  329. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  330. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  331. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  332. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  333. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  334. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  335. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  336. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  337. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  338. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  339. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  340. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  341. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  351. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  352. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  353. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  354. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  355. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  356. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  357. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  358. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  359. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  360. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  361. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  362. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  363. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  364. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  365. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  366. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  367. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  368. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  369. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  371. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  372. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  373. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  374. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  375. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -0,0 +1,515 @@
1
+ # Claude Code Settings & Native Subagents Alignment Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Align morph-spec with the latest Claude Code native primitives — native subagents (`.claude/agents/`), additional settings keys, and proper CLAUDE.md scoping.
6
+
7
+ **Architecture:** Add an `agentsInstaller.js` that converts morph's tier-1/tier-2 agents into native Claude Code subagent markdown files; expand `hooks-installer.js` to configure additional settings keys ($schema, env, attribution, plansDirectory, teammateMode); split CLAUDE.md into human-readable root vs. Claude-Code-runtime `.claude/CLAUDE.md`.
8
+
9
+ **Tech Stack:** Node.js ESM, fs-extra, node:test, Claude Code settings.json schema
10
+
11
+ **Plan file should be copied to:** `docs/plans/2026-02-22-claude-settings.md`
12
+
13
+ ---
14
+
15
+ ## Context
16
+
17
+ The Claude Code settings documentation reveals three native primitives morph-spec does not yet leverage:
18
+
19
+ 1. **Native Subagents** (`.claude/agents/`): Claude Code natively discovers `.md` files with YAML frontmatter in `.claude/agents/`. morph-spec has 37 agents in a custom JSON registry that are entirely invisible to this native mechanism.
20
+
21
+ 2. **Missing settings keys**: `$schema`, `env`, `attribution`, `plansDirectory`, `teammateMode`, `spinnerVerbs` — all recognized by Claude Code but not written by morph-spec's init.
22
+
23
+ 3. **CLAUDE.md scopes**: Claude Code explicitly supports `.claude/CLAUDE.md` (alongside settings). morph-spec installs only the root `CLAUDE.md`, mixing human documentation with Claude Code runtime instructions.
24
+
25
+ **Already well-aligned — no changes needed:**
26
+ - Skills flat-install to `.claude/skills/` ✓
27
+ - Commands install to `.claude/commands/` ✓
28
+ - Global statusline at `~/.claude/` ✓
29
+ - Native `permissions.deny` for state.json + framework/ ✓
30
+ - 12 lifecycle hooks with `_morph_managed` tracking ✓
31
+
32
+ ---
33
+
34
+ ## Task 1: Create `src/utils/agents-installer.js`
35
+
36
+ **Files:**
37
+ - Create: `src/utils/agents-installer.js`
38
+ - Test: `test/utils/agents-installer.test.js`
39
+
40
+ ### Step 1: Write failing test
41
+
42
+ ```js
43
+ // test/utils/agents-installer.test.js
44
+ import { test, describe, before, after } from 'node:test';
45
+ import assert from 'node:assert/strict';
46
+ import { mkdtemp, rm, readdir, readFile, mkdir } from 'node:fs/promises';
47
+ import { join } from 'path';
48
+ import { tmpdir } from 'os';
49
+ import { installAgents } from '../../src/utils/agents-installer.js';
50
+
51
+ describe('installAgents', () => {
52
+ let tmpDir;
53
+ before(async () => { tmpDir = await mkdtemp(join(tmpdir(), 'morph-agents-')); });
54
+ after(async () => { await rm(tmpDir, { recursive: true, force: true }); });
55
+
56
+ test('creates .claude/agents/ with tier-1 and tier-2 agent files', async () => {
57
+ const frameworkDir = 'framework'; // uses real agents.json
58
+ await installAgents(tmpDir, frameworkDir);
59
+ const files = await readdir(join(tmpDir, '.claude', 'agents'));
60
+ assert.ok(files.length >= 6, 'should install at least 6 agents');
61
+ assert.ok(files.every(f => f.endsWith('.md')), 'all files should be .md');
62
+ });
63
+
64
+ test('each file has valid YAML frontmatter with name and description', async () => {
65
+ await installAgents(tmpDir, 'framework');
66
+ const files = await readdir(join(tmpDir, '.claude', 'agents'));
67
+ for (const file of files) {
68
+ const content = await readFile(join(tmpDir, '.claude', 'agents', file), 'utf-8');
69
+ assert.ok(content.startsWith('---\n'), `${file} should start with YAML frontmatter`);
70
+ assert.ok(content.includes('name:'), `${file} should have name`);
71
+ assert.ok(content.includes('description:'), `${file} should have description`);
72
+ }
73
+ });
74
+
75
+ test('is idempotent — running twice does not duplicate files', async () => {
76
+ await installAgents(tmpDir, 'framework');
77
+ await installAgents(tmpDir, 'framework');
78
+ const files = await readdir(join(tmpDir, '.claude', 'agents'));
79
+ const morphFiles = files.filter(f => f.startsWith('morph-'));
80
+ const unique = new Set(morphFiles);
81
+ assert.equal(morphFiles.length, unique.size);
82
+ });
83
+ });
84
+ ```
85
+
86
+ ### Step 2: Run test to verify it fails
87
+
88
+ ```bash
89
+ npm test -- test/utils/agents-installer.test.js
90
+ ```
91
+ Expected: FAIL — `agents-installer.js` not found.
92
+
93
+ ### Step 3: Write the implementation
94
+
95
+ ```js
96
+ // src/utils/agents-installer.js
97
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
98
+ import { join } from 'path';
99
+
100
+ /**
101
+ * Installs tier-1 and tier-2 morph agents as native Claude Code subagents
102
+ * in .claude/agents/ with YAML frontmatter.
103
+ * @param {string} projectDir - Target project directory
104
+ * @param {string} frameworkDir - Path to morph-spec framework/ directory
105
+ */
106
+ export async function installAgents(projectDir, frameworkDir = 'framework') {
107
+ const agentsJsonPath = join(frameworkDir, 'agents.json');
108
+ const agentsJson = JSON.parse(readFileSync(agentsJsonPath, 'utf-8'));
109
+ const agents = agentsJson.agents ?? agentsJson;
110
+
111
+ const targetDir = join(projectDir, '.claude', 'agents');
112
+ mkdirSync(targetDir, { recursive: true });
113
+
114
+ const eligible = agents.filter(a => a.tier === 1 || a.tier === 2);
115
+
116
+ for (const agent of eligible) {
117
+ const slug = agent.id ?? agent.name?.toLowerCase().replace(/\s+/g, '-');
118
+ const filename = `morph-${slug}.md`;
119
+ const targetPath = join(targetDir, filename);
120
+
121
+ const description = buildDescription(agent);
122
+ const body = buildBody(agent);
123
+
124
+ const content = `---\nname: ${agent.title ?? agent.name}\ndescription: ${description}\n---\n\n${body}\n`;
125
+ writeFileSync(targetPath, content, 'utf-8');
126
+ }
127
+ }
128
+
129
+ function buildDescription(agent) {
130
+ const domains = (agent.domains ?? []).join(', ');
131
+ const base = agent.teammate?.role ?? `Handles ${domains}`;
132
+ // Truncate to 200 chars for settings display
133
+ return base.length > 200 ? base.slice(0, 197) + '...' : base;
134
+ }
135
+
136
+ function buildBody(agent) {
137
+ const lines = [];
138
+ if (agent.teammate?.spawn_prompt) {
139
+ lines.push(agent.teammate.spawn_prompt);
140
+ } else {
141
+ lines.push(`You are the ${agent.title} agent in the MORPH-SPEC framework.`);
142
+ if (agent.domains?.length) lines.push(`\n## Domains\n${agent.domains.map(d => `- ${d}`).join('\n')}`);
143
+ }
144
+ if (agent.standards?.length) {
145
+ lines.push(`\n## Standards to Reference\n${agent.standards.map(s => `- ${s}`).join('\n')}`);
146
+ }
147
+ return lines.join('\n');
148
+ }
149
+ ```
150
+
151
+ ### Step 4: Run test to verify it passes
152
+
153
+ ```bash
154
+ npm test -- test/utils/agents-installer.test.js
155
+ ```
156
+ Expected: PASS (3 tests pass).
157
+
158
+ ### Step 5: Commit
159
+
160
+ ```bash
161
+ git add src/utils/agents-installer.js test/utils/agents-installer.test.js
162
+ git commit -m "feat(agents): add agents-installer for native .claude/agents/ subagent discovery"
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Task 2: Integrate `installAgents` into `init.js`
168
+
169
+ **Files:**
170
+ - Modify: `src/commands/project/init.js`
171
+ - Modify: `src/utils/claude-settings-manager.js` (re-export)
172
+
173
+ ### Step 1: Add import and call in init.js
174
+
175
+ In `src/commands/project/init.js`, after the skills install block:
176
+
177
+ ```js
178
+ // After: await installSkills(targetPath);
179
+ import { installAgents } from '../../utils/agents-installer.js';
180
+ // ...
181
+ await installAgents(targetPath, FRAMEWORK_DIR);
182
+ logger.success('Native subagents installed to .claude/agents/');
183
+ ```
184
+
185
+ Find `FRAMEWORK_DIR` in init.js (or equivalent constant pointing to `framework/`).
186
+
187
+ ### Step 2: Re-export from claude-settings-manager
188
+
189
+ Add to `src/utils/claude-settings-manager.js`:
190
+ ```js
191
+ export { installAgents } from './agents-installer.js';
192
+ ```
193
+
194
+ ### Step 3: Add agent files to existing integration test
195
+
196
+ In `test/commands/init.test.js`, add assertion:
197
+ ```js
198
+ const agentFiles = await readdir(join(projectDir, '.claude', 'agents'));
199
+ assert.ok(agentFiles.some(f => f.startsWith('morph-')), 'agents should be installed');
200
+ ```
201
+
202
+ ### Step 4: Run all tests
203
+
204
+ ```bash
205
+ npm test
206
+ ```
207
+ Expected: All existing tests pass + new assertion passes.
208
+
209
+ ### Step 5: Commit
210
+
211
+ ```bash
212
+ git add src/commands/project/init.js src/utils/claude-settings-manager.js
213
+ git commit -m "feat(init): install native subagents to .claude/agents/ during init"
214
+ ```
215
+
216
+ ---
217
+
218
+ ## Task 3: Settings Enhancements — `$schema`, `env`, `attribution`, `plansDirectory`
219
+
220
+ **Files:**
221
+ - Modify: `src/utils/hooks-installer.js`
222
+ - Test: existing `test/hooks/hooks-installer.test.js`
223
+
224
+ These settings go into `.claude/settings.local.json` (same file as hooks/permissions).
225
+
226
+ ### Step 1: Write failing test
227
+
228
+ In `test/hooks/hooks-installer.test.js`, add:
229
+
230
+ ```js
231
+ test('installClaudeHooks adds $schema to settings', async () => {
232
+ await installClaudeHooks(tmpDir);
233
+ const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
234
+ assert.ok(settings['$schema'], 'should include $schema key');
235
+ assert.equal(settings['$schema'], 'https://json.schemastore.org/claude-code-settings.json');
236
+ });
237
+
238
+ test('installClaudeHooks adds env section with MORPH vars', async () => {
239
+ await installClaudeHooks(tmpDir);
240
+ const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
241
+ assert.ok(settings.env?.MORPH_SPEC_ACTIVE, 'should set MORPH_SPEC_ACTIVE');
242
+ });
243
+
244
+ test('installClaudeHooks sets attribution', async () => {
245
+ await installClaudeHooks(tmpDir);
246
+ const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
247
+ assert.ok(settings.attribution, 'should set attribution');
248
+ });
249
+ ```
250
+
251
+ ### Step 2: Run test to verify it fails
252
+
253
+ ```bash
254
+ npm test -- test/hooks/hooks-installer.test.js
255
+ ```
256
+ Expected: FAIL — schema/env/attribution not in settings.
257
+
258
+ ### Step 3: Implement in `hooks-installer.js`
259
+
260
+ In `installClaudeHooks(targetPath)`, before writing settings, merge:
261
+
262
+ ```js
263
+ // Add at top of installClaudeHooks, after loading existing settings:
264
+ settings['$schema'] = 'https://json.schemastore.org/claude-code-settings.json';
265
+
266
+ settings.env = {
267
+ ...settings.env,
268
+ MORPH_SPEC_ACTIVE: 'true',
269
+ };
270
+
271
+ if (!settings.attribution) {
272
+ settings.attribution = {
273
+ commit: '🤖 Co-authored by MORPH-SPEC',
274
+ pr: '',
275
+ };
276
+ }
277
+
278
+ if (!settings.plansDirectory) {
279
+ settings.plansDirectory = '.morph/plans';
280
+ }
281
+ ```
282
+
283
+ ### Step 4: Run test to verify it passes
284
+
285
+ ```bash
286
+ npm test -- test/hooks/hooks-installer.test.js
287
+ ```
288
+ Expected: All hooks-installer tests pass including new ones.
289
+
290
+ ### Step 5: Commit
291
+
292
+ ```bash
293
+ git add src/utils/hooks-installer.js test/hooks/hooks-installer.test.js
294
+ git commit -m "feat(settings): add \$schema, env, attribution, plansDirectory to installed settings"
295
+ ```
296
+
297
+ ---
298
+
299
+ ## Task 4: Create `.claude/CLAUDE.md` (Claude Code Runtime Instructions)
300
+
301
+ The project-root `CLAUDE.md` is for humans + Claude Code. The `.claude/CLAUDE.md` file should hold Claude Code-specific runtime instructions that don't need to be in the project root.
302
+
303
+ **Files:**
304
+ - Create: `framework/CLAUDE_runtime.md` (source template → installs as `.claude/CLAUDE.md`)
305
+ - Modify: `src/commands/project/init.js` (copy runtime CLAUDE.md)
306
+ - Test: `test/commands/init.test.js`
307
+
308
+ ### Step 1: Create runtime CLAUDE.md template
309
+
310
+ ```markdown
311
+ <!-- framework/CLAUDE_runtime.md -->
312
+ # MORPH-SPEC Runtime Instructions
313
+
314
+ This file is loaded by Claude Code at runtime. For project documentation, see `CLAUDE.md` in the project root.
315
+
316
+ ## Quick Reference
317
+
318
+ - Feature status: `/morph-status`
319
+ - Start new feature: `/morph-proposal {feature-name}`
320
+ - Implement feature: `/morph-apply {feature-name}`
321
+ - Preflight check: `/morph-preflight`
322
+
323
+ ## State & Outputs
324
+
325
+ - State file: `.morph/state.json` (READ-ONLY — use `morph-spec` CLI to update)
326
+ - Feature outputs: `.morph/features/{feature}/{phase}/`
327
+ - Framework files: `.morph/framework/` (READ-ONLY)
328
+
329
+ ## Phase Sequence
330
+
331
+ proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
332
+
333
+ Use `morph-spec state show {feature}` to see current phase and pending gates.
334
+ ```
335
+
336
+ ### Step 2: Write failing test
337
+
338
+ ```js
339
+ test('init creates .claude/CLAUDE.md', async () => {
340
+ // run init with mocks
341
+ const content = readFileSync(join(projectDir, '.claude', 'CLAUDE.md'), 'utf-8');
342
+ assert.ok(content.includes('MORPH-SPEC Runtime'), 'should have runtime header');
343
+ assert.ok(content.includes('/morph-status'), 'should reference slash commands');
344
+ });
345
+ ```
346
+
347
+ ### Step 3: Add copy in init.js
348
+
349
+ After the skills install block, add:
350
+
351
+ ```js
352
+ const runtimeClaudeMdSrc = join(FRAMEWORK_DIR, 'CLAUDE_runtime.md');
353
+ const runtimeClaudeMdDest = join(targetPath, '.claude', 'CLAUDE.md');
354
+ await copyFile(runtimeClaudeMdSrc, runtimeClaudeMdDest);
355
+ logger.success('Runtime CLAUDE.md installed to .claude/CLAUDE.md');
356
+ ```
357
+
358
+ ### Step 4: Run test to verify it passes
359
+
360
+ ```bash
361
+ npm test -- test/commands/init.test.js
362
+ ```
363
+
364
+ ### Step 5: Commit
365
+
366
+ ```bash
367
+ git add framework/CLAUDE_runtime.md src/commands/project/init.js test/commands/init.test.js
368
+ git commit -m "feat(init): install .claude/CLAUDE.md with Claude Code runtime quick reference"
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Task 5: Add `morph-spec update-agents` command
374
+
375
+ Allow users to refresh `.claude/agents/` when framework agents are updated (similar to how `morph-spec update` refreshes framework files).
376
+
377
+ **Files:**
378
+ - Create: `src/commands/project/update-agents.js`
379
+ - Modify: `bin/morph-spec.js` (register command)
380
+ - Test: `test/commands/update-agents.test.js`
381
+
382
+ ### Step 1: Write failing test
383
+
384
+ ```js
385
+ // test/commands/update-agents.test.js
386
+ import { test } from 'node:test';
387
+ import assert from 'node:assert/strict';
388
+ import { updateAgentsCommand } from '../../src/commands/project/update-agents.js';
389
+
390
+ test('updateAgentsCommand re-installs agents from framework', async () => {
391
+ // Should call installAgents with projectDir and frameworkDir
392
+ // Should log success message
393
+ assert.ok(typeof updateAgentsCommand === 'function');
394
+ });
395
+ ```
396
+
397
+ ### Step 2: Implement
398
+
399
+ ```js
400
+ // src/commands/project/update-agents.js
401
+ import { installAgents } from '../../utils/agents-installer.js';
402
+ import { logger } from '../../utils/logger.js';
403
+ import { join } from 'path';
404
+ import { fileURLToPath } from 'url';
405
+ import { dirname } from 'path';
406
+
407
+ const __dirname = dirname(fileURLToPath(import.meta.url));
408
+ const FRAMEWORK_DIR = join(__dirname, '..', '..', '..', 'framework');
409
+
410
+ export async function updateAgentsCommand(args, options) {
411
+ const projectDir = process.cwd();
412
+ logger.info('Updating native subagents in .claude/agents/...');
413
+ await installAgents(projectDir, FRAMEWORK_DIR);
414
+ logger.success('Native subagents updated. Claude Code will discover them on next session start.');
415
+ }
416
+ ```
417
+
418
+ ### Step 3: Register in `bin/morph-spec.js`
419
+
420
+ Find the agents command group and add:
421
+ ```js
422
+ program
423
+ .command('update-agents')
424
+ .description('Refresh .claude/agents/ with latest morph orchestrator and domain agents')
425
+ .action(updateAgentsCommand);
426
+ ```
427
+
428
+ ### Step 4: Run tests
429
+
430
+ ```bash
431
+ npm test -- test/commands/update-agents.test.js
432
+ npm test
433
+ ```
434
+
435
+ ### Step 5: Commit
436
+
437
+ ```bash
438
+ git add src/commands/project/update-agents.js bin/morph-spec.js test/commands/update-agents.test.js
439
+ git commit -m "feat(cli): add morph-spec update-agents command for refreshing native subagents"
440
+ ```
441
+
442
+ ---
443
+
444
+ ## Task 6: Final integration test + docs update
445
+
446
+ **Files:**
447
+ - Test: `test/integration/init-full.test.js` (if it exists) or `test/commands/init.test.js`
448
+ - Modify: `framework/CLAUDE.md` (note new .claude/CLAUDE.md)
449
+ - Modify: `docs/plans/` (save plan here)
450
+
451
+ ### Step 1: Run full test suite
452
+
453
+ ```bash
454
+ npm test
455
+ ```
456
+ Expected: All 552+ tests pass (0 regressions, new tests added).
457
+
458
+ ### Step 2: Run coverage check
459
+
460
+ ```bash
461
+ npm run test:coverage:summary
462
+ ```
463
+ Verify new modules have reasonable coverage.
464
+
465
+ ### Step 3: Manual smoke test
466
+
467
+ ```bash
468
+ node bin/morph-spec.js init --force --skip-mcp --skip-detection
469
+ ls -la .claude/agents/
470
+ ls -la .claude/CLAUDE.md
471
+ cat .claude/settings.local.json | node -e "process.stdin.on('data',d=>{ const s=JSON.parse(d); console.log('schema:', s['\$schema']); console.log('env:', s.env); console.log('attribution:', s.attribution); })"
472
+ ```
473
+ Expected: 6+ agent `.md` files, CLAUDE.md present, settings has `$schema` + `env` + `attribution`.
474
+
475
+ ### Step 4: Save plan to docs
476
+
477
+ ```bash
478
+ cp "C:\Users\Lucas\.claude\plans\magical-moseying-sutton.md" "docs/plans/2026-02-22-claude-settings.md"
479
+ git add docs/plans/2026-02-22-claude-settings.md
480
+ git commit -m "docs: save claude-settings alignment plan"
481
+ ```
482
+
483
+ ---
484
+
485
+ ## Critical Files to Modify
486
+
487
+ | File | Change |
488
+ |------|--------|
489
+ | `src/utils/agents-installer.js` | **NEW** — converts agents.json tier-1/2 to `.claude/agents/` markdown |
490
+ | `src/utils/claude-settings-manager.js` | Re-export `installAgents` |
491
+ | `src/commands/project/init.js` | Call `installAgents` + copy `.claude/CLAUDE.md` |
492
+ | `src/utils/hooks-installer.js` | Add `$schema`, `env`, `attribution`, `plansDirectory` to settings |
493
+ | `src/commands/project/update-agents.js` | **NEW** — CLI command to refresh agents |
494
+ | `bin/morph-spec.js` | Register `update-agents` command |
495
+ | `framework/CLAUDE_runtime.md` | **NEW** — source for `.claude/CLAUDE.md` |
496
+
497
+ ## Verification
498
+
499
+ ```bash
500
+ # Full suite
501
+ npm test
502
+
503
+ # Smoke test init
504
+ node bin/morph-spec.js init --force --skip-mcp --skip-detection
505
+
506
+ # Verify native agents
507
+ ls .claude/agents/
508
+ cat .claude/agents/morph-standards-architect.md # Should have YAML frontmatter
509
+
510
+ # Verify settings
511
+ cat .claude/settings.local.json | grep -A2 "schema\|env\|attribution"
512
+
513
+ # Verify .claude/CLAUDE.md
514
+ cat .claude/CLAUDE.md
515
+ ```