@polymorphism-tech/morph-spec 4.10.9 → 4.11.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 (145) hide show
  1. package/CLAUDE.md +3 -3
  2. package/LICENSE +71 -71
  3. package/README.md +5 -11
  4. package/bin/morph-spec.js +23 -1
  5. package/bin/task-manager.js +5 -5
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +1 -1
  8. package/docs/QUICKSTART.md +2 -8
  9. package/framework/agents/README.md +14 -14
  10. package/framework/agents/architecture/standards-architect.md +159 -159
  11. package/framework/agents/frontend/css-specialist.md +1 -1
  12. package/framework/agents/infrastructure/azure-architect.md +149 -149
  13. package/framework/agents/infrastructure/azure-deploy-specialist.md +4 -4
  14. package/framework/agents/infrastructure/infra-architect.md +48 -48
  15. package/framework/commands/morph-apply.md +18 -18
  16. package/framework/commands/morph-preflight.md +3 -3
  17. package/framework/commands/morph-proposal.md +15 -15
  18. package/framework/commands/morph-status.md +3 -3
  19. package/framework/commands/morph-troubleshoot.md +1 -1
  20. package/framework/hooks/README.md +204 -204
  21. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +2 -2
  22. package/framework/hooks/claude-code/session-start/inject-morph-context.js +1 -1
  23. package/framework/hooks/claude-code/teammate-idle/teammate-idle.js +3 -3
  24. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +2 -2
  25. package/framework/hooks/git/pre-commit/agents.sh +1 -1
  26. package/framework/hooks/shared/phase-utils.js +139 -139
  27. package/framework/rules/csharp-standards.md +13 -13
  28. package/framework/rules/frontend-standards.md +13 -13
  29. package/framework/rules/infrastructure-standards.md +16 -16
  30. package/framework/rules/testing-standards.md +14 -14
  31. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +8 -8
  32. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +3 -3
  33. package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +254 -254
  34. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +1 -1
  35. package/framework/skills/level-0-meta/morph-init/SKILL.md +11 -11
  36. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +3 -3
  37. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +1 -1
  38. package/framework/skills/level-0-meta/morph-simulation-checklist/SKILL.md +4 -4
  39. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +25 -25
  40. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +8 -8
  41. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +7 -7
  42. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +4 -4
  43. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +23 -23
  44. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +1 -1
  45. package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +38 -0
  46. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +29 -29
  47. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -4
  48. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +9 -9
  49. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +17 -17
  50. package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +14 -0
  51. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +12 -12
  52. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +16 -16
  53. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +5 -5
  54. package/framework/standards/STANDARDS.json +2338 -2041
  55. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -17
  56. package/framework/standards/infrastructure/supabase/supabase-custom-jwt.md +206 -0
  57. package/framework/templates/.idea/morph-templates.xml +92 -0
  58. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  59. package/framework/templates/README.md +814 -814
  60. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -74
  61. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -25
  62. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -74
  63. package/framework/templates/code/dotnet/contracts/README.md +74 -74
  64. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -173
  65. package/framework/templates/code/dotnet/frontend/component.razor +239 -239
  66. package/framework/templates/code/dotnet/jobs/agent.cs +163 -163
  67. package/framework/templates/code/dotnet/jobs/job.cs +171 -171
  68. package/framework/templates/code/dotnet/test.cs +239 -239
  69. package/framework/templates/code/sql/rls-policy.sql +57 -57
  70. package/framework/templates/code/sql/supabase-migration.sql +100 -100
  71. package/framework/templates/code/sql/supabase-migration.template.sql +113 -113
  72. package/framework/templates/code/typescript/contracts.ts +168 -168
  73. package/framework/templates/context/CONTEXT.md +181 -181
  74. package/framework/templates/docs/proposal.md +182 -182
  75. package/framework/templates/docs/user-stories.md +34 -34
  76. package/framework/templates/examples/design-system-examples.md +357 -357
  77. package/framework/templates/examples/spec-examples.md +90 -90
  78. package/framework/templates/feature/decisions.md +187 -187
  79. package/framework/templates/feature/recap.md +146 -146
  80. package/framework/templates/feature/tasks.md +199 -199
  81. package/framework/templates/infrastructure/azure/README.md +286 -286
  82. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -426
  83. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -29
  84. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -29
  85. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -29
  86. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -67
  87. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  88. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  89. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -54
  90. package/framework/workflows/README.md +18 -18
  91. package/framework/workflows/docs/enforcement-pipeline.md +1 -1
  92. package/framework/workflows/docs/full-morph.md +2 -2
  93. package/package.json +1 -1
  94. package/src/commands/agents/dispatch-agents.js +17 -0
  95. package/src/commands/agents/index.js +13 -13
  96. package/src/commands/agents/project-metrics.js +74 -0
  97. package/src/commands/project/doctor.js +3 -4
  98. package/src/commands/project/install-plugin-cmd.js +28 -28
  99. package/src/commands/project/setup-infra-cmd.js +12 -12
  100. package/src/commands/project/status.js +8 -1
  101. package/src/commands/scope/escalate.js +5 -3
  102. package/src/commands/standards/context-budget.js +89 -0
  103. package/src/commands/tasks/index.js +4 -4
  104. package/src/commands/templates/index.js +5 -5
  105. package/src/commands/utils/index.js +3 -3
  106. package/src/commands/validation/index.js +4 -4
  107. package/src/commands/validation/validate-feature.js +32 -3
  108. package/src/core/state/phase-state-machine.js +217 -217
  109. package/src/lib/agents/metrics-aggregator.js +56 -0
  110. package/src/lib/generators/design-system-generator.js +298 -298
  111. package/src/lib/generators/index.js +10 -10
  112. package/src/lib/generators/metadata-extractor.js +387 -387
  113. package/src/lib/stack-filter.js +65 -65
  114. package/src/lib/standards/digest-builder.js +57 -3
  115. package/src/lib/standards/index.js +7 -7
  116. package/src/lib/standards/standards-context-injector.js +302 -302
  117. package/src/lib/validators/architecture/architecture-validator.js +387 -387
  118. package/src/lib/validators/architecture/index.js +7 -7
  119. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +316 -316
  120. package/src/lib/validators/blazor/blazor-state-validator.js +279 -279
  121. package/src/lib/validators/blazor/blazor-validator.js +369 -369
  122. package/src/lib/validators/blazor/index.js +9 -9
  123. package/src/lib/validators/content/content-validator.js +287 -287
  124. package/src/lib/validators/content/index.js +7 -7
  125. package/src/lib/validators/contracts/index.js +7 -7
  126. package/src/lib/validators/css/css-validator.js +352 -352
  127. package/src/lib/validators/css/index.js +7 -7
  128. package/src/lib/validators/design-system/design-system-validator.js +231 -231
  129. package/src/lib/validators/design-system/index.js +7 -7
  130. package/src/lib/validators/nextjs/index.js +6 -6
  131. package/src/lib/validators/nextjs/next-component-validator.js +183 -183
  132. package/src/lib/validators/packages/index.js +7 -7
  133. package/src/lib/validators/packages/package-validator.js +360 -360
  134. package/src/lib/validators/shared/index.js +12 -12
  135. package/src/lib/validators/shared/issue-counter.js +18 -18
  136. package/src/lib/validators/shared/result-formatter.js +124 -124
  137. package/src/lib/validators/ui/index.js +7 -7
  138. package/src/lib/validators/ui/ui-contrast-validator.js +422 -422
  139. package/src/scripts/global-install.js +112 -58
  140. package/src/scripts/install-plugin.js +126 -126
  141. package/src/utils/claude-md-injector.js +90 -90
  142. package/src/utils/file-copier.js +200 -200
  143. package/src/utils/logger.js +32 -32
  144. package/src/utils/skills-installer.js +178 -178
  145. package/src/utils/version-checker.js +169 -175
@@ -1,139 +1,139 @@
1
- // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
- // Source of truth: src/core/paths/output-schema.js
3
- // Regenerate with: node scripts/generate-refs.js
4
- /**
5
- * Shared phase utilities for Claude Code hooks.
6
- *
7
- * Maps phases to directories and output types.
8
- */
9
-
10
- /** Phase order */
11
- export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","plan","tasks","implement","sync"];
12
-
13
- /** Map phase → allowed output subdirectory */
14
- export const PHASE_DIRS = {
15
- proposal: '0-proposal',
16
- setup: '0-proposal',
17
- uiux: '2-ui',
18
- design: '1-design',
19
- clarify: '1-design',
20
- plan: '3-plan',
21
- tasks: '4-tasks',
22
- implement: '5-implement',
23
- sync: '5-implement',
24
- };
25
-
26
- /** Map output type (camelCase) → phase that produces it */
27
- export const OUTPUT_PHASE_MAP = {
28
- proposal: 'proposal',
29
- schemaAnalysis: 'design',
30
- spec: 'design',
31
- clarifications: 'clarify',
32
- contracts: 'design',
33
- contractsTs: 'design',
34
- contractsVsa: 'design',
35
- plan: 'plan',
36
- tasks: 'tasks',
37
- uiDesignSystem: 'uiux',
38
- uiMockups: 'uiux',
39
- uiComponents: 'uiux',
40
- uiFlows: 'uiux',
41
- decisions: 'design',
42
- recap: 'implement',
43
- };
44
-
45
- /** Map filename → output type (camelCase) */
46
- export const FILENAME_TO_OUTPUT = {
47
- 'proposal.md': 'proposal',
48
- 'schema-analysis.md': 'schemaAnalysis',
49
- 'spec.md': 'spec',
50
- 'clarifications.md': 'clarifications',
51
- 'contracts.cs': 'contracts',
52
- 'contracts.ts': 'contractsTs',
53
- 'contracts-vsa.cs': 'contractsVsa',
54
- 'plan.md': 'plan',
55
- 'tasks.md': 'tasks',
56
- 'design-system.md': 'uiDesignSystem',
57
- 'mockups.md': 'uiMockups',
58
- 'components.md': 'uiComponents',
59
- 'flows.md': 'uiFlows',
60
- 'decisions.md': 'decisions',
61
- 'recap.md': 'recap',
62
- };
63
-
64
- /** Protected spec files and the approval gate that locks them */
65
- export const PROTECTED_SPEC_FILES = {
66
- 'schema-analysis.md': 'design',
67
- 'spec.md': 'design',
68
- 'contracts.cs': 'design',
69
- 'contracts.ts': 'design',
70
- 'contracts-vsa.cs': 'design',
71
- 'plan.md': 'plan',
72
- 'tasks.md': 'tasks',
73
- 'design-system.md': 'uiux',
74
- 'mockups.md': 'uiux',
75
- 'components.md': 'uiux',
76
- 'flows.md': 'uiux',
77
- };
78
-
79
- /**
80
- * Extract feature name from a .morph/features/{feature}/... path
81
- * @param {string} filePath - File path to analyze
82
- * @returns {string|null} Feature name or null
83
- */
84
- export function extractFeatureName(filePath) {
85
- const normalized = filePath.replace(/\\/g, '/');
86
- const match = normalized.match(/\.morph\/features\/([^/]+)\//);
87
- return match ? match[1] : null;
88
- }
89
-
90
- /**
91
- * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
92
- * @param {string} filePath - File path to analyze
93
- * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
94
- */
95
- export function extractPhaseDir(filePath) {
96
- const normalized = filePath.replace(/\\/g, '/');
97
- const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
98
- return match ? match[1] : null;
99
- }
100
-
101
- /**
102
- * Check if a file path is inside .morph/features/
103
- * @param {string} filePath
104
- * @returns {boolean}
105
- */
106
- export function isFeaturePath(filePath) {
107
- const normalized = filePath.replace(/\\/g, '/');
108
- return normalized.includes('.morph/features/');
109
- }
110
-
111
- /**
112
- * Check if a file path is inside .morph/framework/ (readonly)
113
- * @param {string} filePath
114
- * @returns {boolean}
115
- */
116
- export function isFrameworkPath(filePath) {
117
- const normalized = filePath.replace(/\\/g, '/');
118
- return normalized.includes('.morph/framework/');
119
- }
120
-
121
- /**
122
- * Check if a file path is state.json
123
- * @param {string} filePath
124
- * @returns {boolean}
125
- */
126
- export function isStatePath(filePath) {
127
- const normalized = filePath.replace(/\\/g, '/');
128
- return normalized.endsWith('.morph/state.json');
129
- }
130
-
131
- /**
132
- * Get the basename of a file path
133
- * @param {string} filePath
134
- * @returns {string}
135
- */
136
- export function getBasename(filePath) {
137
- const normalized = filePath.replace(/\\/g, '/');
138
- return normalized.split('/').pop();
139
- }
1
+ // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
+ // Source of truth: src/core/paths/output-schema.js
3
+ // Regenerate with: node scripts/generate-refs.js
4
+ /**
5
+ * Shared phase utilities for Claude Code hooks.
6
+ *
7
+ * Maps phases to directories and output types.
8
+ */
9
+
10
+ /** Phase order */
11
+ export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","plan","tasks","implement","sync"];
12
+
13
+ /** Map phase → allowed output subdirectory */
14
+ export const PHASE_DIRS = {
15
+ proposal: '0-proposal',
16
+ setup: '0-proposal',
17
+ uiux: '2-ui',
18
+ design: '1-design',
19
+ clarify: '1-design',
20
+ plan: '3-plan',
21
+ tasks: '4-tasks',
22
+ implement: '5-implement',
23
+ sync: '5-implement',
24
+ };
25
+
26
+ /** Map output type (camelCase) → phase that produces it */
27
+ export const OUTPUT_PHASE_MAP = {
28
+ proposal: 'proposal',
29
+ schemaAnalysis: 'design',
30
+ spec: 'design',
31
+ clarifications: 'clarify',
32
+ contracts: 'design',
33
+ contractsTs: 'design',
34
+ contractsVsa: 'design',
35
+ plan: 'plan',
36
+ tasks: 'tasks',
37
+ uiDesignSystem: 'uiux',
38
+ uiMockups: 'uiux',
39
+ uiComponents: 'uiux',
40
+ uiFlows: 'uiux',
41
+ decisions: 'design',
42
+ recap: 'implement',
43
+ };
44
+
45
+ /** Map filename → output type (camelCase) */
46
+ export const FILENAME_TO_OUTPUT = {
47
+ 'proposal.md': 'proposal',
48
+ 'schema-analysis.md': 'schemaAnalysis',
49
+ 'spec.md': 'spec',
50
+ 'clarifications.md': 'clarifications',
51
+ 'contracts.cs': 'contracts',
52
+ 'contracts.ts': 'contractsTs',
53
+ 'contracts-vsa.cs': 'contractsVsa',
54
+ 'plan.md': 'plan',
55
+ 'tasks.md': 'tasks',
56
+ 'design-system.md': 'uiDesignSystem',
57
+ 'mockups.md': 'uiMockups',
58
+ 'components.md': 'uiComponents',
59
+ 'flows.md': 'uiFlows',
60
+ 'decisions.md': 'decisions',
61
+ 'recap.md': 'recap',
62
+ };
63
+
64
+ /** Protected spec files and the approval gate that locks them */
65
+ export const PROTECTED_SPEC_FILES = {
66
+ 'schema-analysis.md': 'design',
67
+ 'spec.md': 'design',
68
+ 'contracts.cs': 'design',
69
+ 'contracts.ts': 'design',
70
+ 'contracts-vsa.cs': 'design',
71
+ 'plan.md': 'plan',
72
+ 'tasks.md': 'tasks',
73
+ 'design-system.md': 'uiux',
74
+ 'mockups.md': 'uiux',
75
+ 'components.md': 'uiux',
76
+ 'flows.md': 'uiux',
77
+ };
78
+
79
+ /**
80
+ * Extract feature name from a .morph/features/{feature}/... path
81
+ * @param {string} filePath - File path to analyze
82
+ * @returns {string|null} Feature name or null
83
+ */
84
+ export function extractFeatureName(filePath) {
85
+ const normalized = filePath.replace(/\\/g, '/');
86
+ const match = normalized.match(/\.morph\/features\/([^/]+)\//);
87
+ return match ? match[1] : null;
88
+ }
89
+
90
+ /**
91
+ * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
92
+ * @param {string} filePath - File path to analyze
93
+ * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
94
+ */
95
+ export function extractPhaseDir(filePath) {
96
+ const normalized = filePath.replace(/\\/g, '/');
97
+ const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
98
+ return match ? match[1] : null;
99
+ }
100
+
101
+ /**
102
+ * Check if a file path is inside .morph/features/
103
+ * @param {string} filePath
104
+ * @returns {boolean}
105
+ */
106
+ export function isFeaturePath(filePath) {
107
+ const normalized = filePath.replace(/\\/g, '/');
108
+ return normalized.includes('.morph/features/');
109
+ }
110
+
111
+ /**
112
+ * Check if a file path is inside .morph/framework/ (readonly)
113
+ * @param {string} filePath
114
+ * @returns {boolean}
115
+ */
116
+ export function isFrameworkPath(filePath) {
117
+ const normalized = filePath.replace(/\\/g, '/');
118
+ return normalized.includes('.morph/framework/');
119
+ }
120
+
121
+ /**
122
+ * Check if a file path is state.json
123
+ * @param {string} filePath
124
+ * @returns {boolean}
125
+ */
126
+ export function isStatePath(filePath) {
127
+ const normalized = filePath.replace(/\\/g, '/');
128
+ return normalized.endsWith('.morph/state.json');
129
+ }
130
+
131
+ /**
132
+ * Get the basename of a file path
133
+ * @param {string} filePath
134
+ * @returns {string}
135
+ */
136
+ export function getBasename(filePath) {
137
+ const normalized = filePath.replace(/\\/g, '/');
138
+ return normalized.split('/').pop();
139
+ }
@@ -1,13 +1,13 @@
1
- ---
2
- paths:
3
- - "**/*.cs"
4
- - "**/*.csproj"
5
- stacks:
6
- - dotnet
7
- - blazor
8
- ---
9
-
10
- # C# and .NET Standards
11
-
12
- @.morph/framework/standards/core/coding.md
13
- @.morph/framework/standards/backend/dotnet/core.md
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ stacks:
6
+ - dotnet
7
+ - blazor
8
+ ---
9
+
10
+ # C# and .NET Standards
11
+
12
+ @.morph/framework/standards/core/coding.md
13
+ @.morph/framework/standards/backend/dotnet/core.md
@@ -1,13 +1,13 @@
1
- ---
2
- paths:
3
- - "**/*.razor"
4
- - "**/*.css"
5
- - "**/*.scss"
6
- stacks:
7
- - blazor
8
- ---
9
-
10
- # Frontend Standards
11
-
12
- @.morph/framework/standards/frontend/blazor/design-checklist.md
13
- @.morph/framework/standards/frontend/design-system/naming.md
1
+ ---
2
+ paths:
3
+ - "**/*.razor"
4
+ - "**/*.css"
5
+ - "**/*.scss"
6
+ stacks:
7
+ - blazor
8
+ ---
9
+
10
+ # Frontend Standards
11
+
12
+ @.morph/framework/standards/frontend/blazor/design-checklist.md
13
+ @.morph/framework/standards/frontend/design-system/naming.md
@@ -1,16 +1,16 @@
1
- ---
2
- paths:
3
- - "**/*.bicep"
4
- - "**/Dockerfile"
5
- - "**/docker-compose*.yml"
6
- - "**/pipelines/**"
7
- - "**/.github/workflows/**"
8
- stacks:
9
- - azure
10
- - docker
11
- ---
12
-
13
- # Infrastructure Standards
14
-
15
- @.morph/framework/standards/infrastructure/azure/azure.md
16
- @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md
1
+ ---
2
+ paths:
3
+ - "**/*.bicep"
4
+ - "**/Dockerfile"
5
+ - "**/docker-compose*.yml"
6
+ - "**/pipelines/**"
7
+ - "**/.github/workflows/**"
8
+ stacks:
9
+ - azure
10
+ - docker
11
+ ---
12
+
13
+ # Infrastructure Standards
14
+
15
+ @.morph/framework/standards/infrastructure/azure/azure.md
16
+ @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md
@@ -1,14 +1,14 @@
1
- ---
2
- paths:
3
- - "tests/**"
4
- - "**/*.test.*"
5
- - "**/*.spec.*"
6
- - "**/*Tests.cs"
7
- stacks:
8
- - dotnet
9
- - blazor
10
- ---
11
-
12
- # Testing Standards
13
-
14
- @.morph/framework/standards/core/testing.md
1
+ ---
2
+ paths:
3
+ - "tests/**"
4
+ - "**/*.test.*"
5
+ - "**/*.spec.*"
6
+ - "**/*Tests.cs"
7
+ stacks:
8
+ - dotnet
9
+ - blazor
10
+ ---
11
+
12
+ # Testing Standards
13
+
14
+ @.morph/framework/standards/core/testing.md
@@ -22,12 +22,12 @@ allowed-tools: Read, Bash, Glob, Grep, AskUserQuestion
22
22
 
23
23
  | Action | Tool | Alternative |
24
24
  |--------|------|-------------|
25
- | Load feature state | **Bash** `npx morph-spec state get $ARGUMENTS` | — |
25
+ | Load feature state | **Bash** `morph-spec state get $ARGUMENTS` | — |
26
26
  | Read project config | **Read** `.morph/config/config.json` | — |
27
27
  | Scan existing code | **Glob** / **Grep** | — |
28
28
  | Research libraries | **Context7 MCP** `query_docs()` | **WebSearch** |
29
29
  | Ask clarifying questions | **AskUserQuestion** (never plain text) | — |
30
- | Render proposal template | **Bash** `npx morph-spec template render docs/proposal ...` | — |
30
+ | Render proposal template | **Bash** `morph-spec template render docs/proposal ...` | — |
31
31
 
32
32
  ---
33
33
 
@@ -49,11 +49,11 @@ Update each to `in_progress` before its step and `completed` after.
49
49
 
50
50
  Gather information before generating ideas. This step is what makes morph-aware brainstorming different from generic brainstorming — it grounds your thinking in the actual project state and constraints.
51
51
 
52
- 1. **Read state** — `npx morph-spec state get $ARGUMENTS` → current phase, active agents, existing outputs, task history
52
+ 1. **Read state** — `morph-spec state get $ARGUMENTS` → current phase, active agents, existing outputs, task history
53
53
  2. **Read config** — `.morph/config/config.json` → stack, architecture style (VSA vs standard), project name, integrations
54
54
  3. **Check architecture** — `cat .morph/config/config.json | grep -A3 architecture` → determines which agents and patterns apply
55
55
  4. **Read existing outputs** — proposal.md, spec.md, decisions.md (if they exist from prior work)
56
- 5. **Check active agents** — `npx morph-spec dispatch-agents $ARGUMENTS design --table` → which specialists are available
56
+ 5. **Check active agents** — `morph-spec dispatch-agents $ARGUMENTS design --table` → which specialists are available
57
57
  6. **Scan codebase** — use Glob/Grep to understand existing patterns, domain models, and service boundaries relevant to the feature
58
58
  7. **Check MCP tools** — if Context7, GitHub, or other MCPs are available, use them for research
59
59
 
@@ -106,7 +106,7 @@ For each approach, document:
106
106
 
107
107
  **Phase 0 (Proposal):**
108
108
  ```bash
109
- npx morph-spec template render docs/proposal ".morph/features/$ARGUMENTS/0-proposal/proposal.md" '{"FEATURE_NAME":"...", "DATE":"..."}'
109
+ morph-spec template render docs/proposal ".morph/features/$ARGUMENTS/0-proposal/proposal.md" '{"FEATURE_NAME":"...", "DATE":"..."}'
110
110
  ```
111
111
  Then edit the rendered file to add the brainstorming results.
112
112
 
@@ -115,12 +115,12 @@ For each approach, document:
115
115
 
116
116
  3. **Update state** (mandatory — do not skip):
117
117
  ```bash
118
- npx morph-spec state mark-output $ARGUMENTS proposal # Phase 0
119
- npx morph-spec state mark-output $ARGUMENTS decisions # Phase 2
118
+ morph-spec state mark-output $ARGUMENTS proposal # Phase 0
119
+ morph-spec state mark-output $ARGUMENTS decisions # Phase 2
120
120
  ```
121
121
  Then verify the output was recorded:
122
122
  ```bash
123
- npx morph-spec state get $ARGUMENTS
123
+ morph-spec state get $ARGUMENTS
124
124
  ```
125
125
 
126
126
  ---
@@ -14,9 +14,9 @@ Types: `deploy`, `security`, `seo`, `performance`, `accessibility`, `legal-brazi
14
14
  ## Deploy
15
15
 
16
16
  ### MORPH-SPEC Validation (run first)
17
- - [ ] `npx morph-spec validate-feature {feature}` — passes with 100% pass rate
18
- - [ ] `npx morph-spec approval-status {feature}` — all gates approved (design, plan, tasks)
19
- - [ ] `npx morph-spec state get {feature}` — phase is `implement`, all tasks `done`
17
+ - [ ] `morph-spec validate-feature {feature}` — passes with 100% pass rate
18
+ - [ ] `morph-spec approval-status {feature}` — all gates approved (design, plan, tasks)
19
+ - [ ] `morph-spec state get {feature}` — phase is `implement`, all tasks `done`
20
20
  - [ ] Recap generated: `.morph/features/{feature}/5-implement/recap.md` exists
21
21
 
22
22
  ### Pre-Deploy