jdi-cli 0.1.0 → 0.1.1

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 (46) hide show
  1. package/core/agents/jdi-bootstrap.md +46 -7
  2. package/package.json +1 -1
  3. package/runtimes/antigravity/skills/clean-code/SKILL.md +1 -1
  4. package/runtimes/antigravity/skills/dry/SKILL.md +1 -1
  5. package/runtimes/antigravity/skills/frontend-rules/SKILL.md +1 -1
  6. package/runtimes/antigravity/skills/frontend-validator/SKILL.md +1 -1
  7. package/runtimes/antigravity/skills/jdi-adopter/SKILL.md +1 -1
  8. package/runtimes/antigravity/skills/jdi-architect/SKILL.md +1 -1
  9. package/runtimes/antigravity/skills/jdi-asker/SKILL.md +1 -1
  10. package/runtimes/antigravity/skills/jdi-planner/SKILL.md +1 -1
  11. package/runtimes/antigravity/skills/jdi-researcher/SKILL.md +1 -1
  12. package/runtimes/antigravity/skills/kiss/SKILL.md +1 -1
  13. package/runtimes/antigravity/skills/solid/SKILL.md +1 -1
  14. package/runtimes/antigravity/skills/yagni/SKILL.md +1 -1
  15. package/runtimes/claude/agents/jdi-adopter.md +1 -1
  16. package/runtimes/claude/agents/jdi-architect.md +1 -1
  17. package/runtimes/claude/agents/jdi-asker.md +1 -1
  18. package/runtimes/claude/agents/jdi-bootstrap.md +47 -8
  19. package/runtimes/claude/agents/jdi-planner.md +1 -1
  20. package/runtimes/claude/agents/jdi-researcher.md +1 -1
  21. package/runtimes/claude/skills/clean-code/SKILL.md +1 -1
  22. package/runtimes/claude/skills/dry/SKILL.md +1 -1
  23. package/runtimes/claude/skills/frontend-rules/SKILL.md +1 -1
  24. package/runtimes/claude/skills/frontend-validator/SKILL.md +1 -1
  25. package/runtimes/claude/skills/kiss/SKILL.md +1 -1
  26. package/runtimes/claude/skills/solid/SKILL.md +1 -1
  27. package/runtimes/claude/skills/yagni/SKILL.md +1 -1
  28. package/runtimes/copilot/agents/jdi-adopter.agent.md +1 -1
  29. package/runtimes/copilot/agents/jdi-architect.agent.md +1 -1
  30. package/runtimes/copilot/agents/jdi-asker.agent.md +1 -1
  31. package/runtimes/copilot/agents/jdi-bootstrap.agent.md +47 -8
  32. package/runtimes/copilot/agents/jdi-planner.agent.md +1 -1
  33. package/runtimes/copilot/agents/jdi-researcher.agent.md +1 -1
  34. package/runtimes/opencode/agents/jdi-adopter.md +1 -1
  35. package/runtimes/opencode/agents/jdi-architect.md +1 -1
  36. package/runtimes/opencode/agents/jdi-asker.md +1 -1
  37. package/runtimes/opencode/agents/jdi-bootstrap.md +47 -8
  38. package/runtimes/opencode/agents/jdi-planner.md +1 -1
  39. package/runtimes/opencode/agents/jdi-researcher.md +1 -1
  40. package/runtimes/opencode/skills/clean-code/SKILL.md +1 -1
  41. package/runtimes/opencode/skills/dry/SKILL.md +1 -1
  42. package/runtimes/opencode/skills/frontend-rules/SKILL.md +1 -1
  43. package/runtimes/opencode/skills/frontend-validator/SKILL.md +1 -1
  44. package/runtimes/opencode/skills/kiss/SKILL.md +1 -1
  45. package/runtimes/opencode/skills/solid/SKILL.md +1 -1
  46. package/runtimes/opencode/skills/yagni/SKILL.md +1 -1
@@ -110,20 +110,59 @@ Pass `adopted=$ADOPTED` and `boundary_commit=$BOUNDARY` to the architect in Step
110
110
 
111
111
  ### Step 2.7: Multi-stack? (multi-specialist support)
112
112
 
113
- AskUserQuestion:
113
+ **MANDATORY step. Never skip — even if PROJECT.md only mentions 1 language, ASK the user.**
114
+
115
+ #### Step 2.7a: Auto-detect fullstack from PROJECT.md
116
+
117
+ Before asking, parse `.jdi/PROJECT.md` Stack/Frameworks/Vision sections. Detect dual-stack patterns:
118
+
119
+ **Backend keywords (case-insensitive):**
120
+ `C#|.NET|dotnet|ASP\.NET|Java|Spring|Kotlin|Go|Rust|Python|Django|Flask|FastAPI|Node|Express|NestJS|Ruby|Rails|PHP|Laravel|Elixir|Phoenix`
121
+
122
+ **Frontend keywords (case-insensitive):**
123
+ `React|Vue|Svelte|Angular|Next\.?js|Nuxt|Remix|SvelteKit|Astro|Solid|Qwik|Preact|Blazor`
124
+
125
+ **Mobile keywords:**
126
+ `iOS|Swift|Android|Kotlin Mobile|React Native|Flutter|Dart|Xamarin|MAUI`
127
+
128
+ **Infra keywords:**
129
+ `Terraform|Pulumi|CloudFormation|Kubernetes|Helm|Ansible`
130
+
131
+ If ≥2 categories match (e.g. backend + frontend), set `SUGGESTED_COUNT=2` and `SUGGESTED_PAIRS` accordingly.
132
+
133
+ Examples of detection result from `Stack: "C# 10 + React 19"`:
134
+ - Match: `C#` (backend) + `React` (frontend) → SUGGESTED_COUNT=2
135
+ - Suggested pairs:
136
+ - `{stack_label: "Backend C#", file_glob: "**/*.{cs,csproj,sln}"}`
137
+ - `{stack_label: "Frontend React", file_glob: "**/*.{ts,tsx,jsx,css,scss}"}`
138
+
139
+ #### Step 2.7b: AskUserQuestion (always run)
140
+
141
+ If `SUGGESTED_COUNT >= 2`, the FIRST option (default-selected by AskUserQuestion) MUST be the suggested multi-stack option. Format:
142
+
143
+ > "Detected fullstack project: **{detected_categories}** (e.g. {match_keywords}).
144
+ > Stack count?"
145
+ >
146
+ > Options (when SUGGESTED_COUNT=2):
147
+ > - [Multi (2 pairs — backend + frontend) **(Recommended)**]
148
+ > - [Single (1 specialist pair)]
149
+ > - [Multi (3 pairs)]
150
+ > - [Multi (custom count)]
151
+
152
+ If `SUGGESTED_COUNT=1` (single language detected, e.g. just Python or just Go):
114
153
 
115
154
  > "Project stack count?
116
155
  > - **Single-stack:** 1 doer + 1 reviewer (90% of projects)
117
- > - **Multi-stack:** multiple doer/reviewer pairs, each owning a file glob (fullstack: backend + frontend, mobile: iOS + Android, etc.)"
156
+ > - **Multi-stack:** multiple pairs (fullstack, mobile iOS+Android, infra+app, etc.)"
118
157
  >
119
158
  > Options:
120
- > - [Single (1 specialist pair)]
121
- > - [Multi (2 pairs — e.g. backend + frontend)]
122
- > - [Multi (3 pairs — e.g. backend + frontend + infra)]
159
+ > - [Single (1 specialist pair) **(Recommended)**]
160
+ > - [Multi (2 pairs)]
161
+ > - [Multi (3 pairs)]
123
162
  > - [Multi (custom count)]
124
163
 
125
164
  If single: `SPECIALIST_COUNT=1`. Standard flow.
126
- If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times.
165
+ If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times. Pre-fill `stack_label` + `file_glob` from `SUGGESTED_PAIRS` when available (user can edit each).
127
166
 
128
167
  For multi-stack, ask glob+label per specialist BEFORE architect S1:
129
168
 
@@ -226,7 +265,7 @@ Bootstrap ok. Next: /jdi-discuss 1
226
265
  - Never create specialist without PROJECT.md present
227
266
  - Never skip architect — bootstrap is wrapper, not generator
228
267
  - Never commit if architect returned cancelled/failed
229
- - 1 doer + 1 reviewer per project (default). Multi-stack = future feature
268
+ - Single-stack (1 doer + 1 reviewer) is the default. Multi-stack (N pairs with file-glob routing) is opt-in via S2.7 — ALWAYS execute S2.7 (do not skip the question)
230
269
  </rules>
231
270
 
232
271
  <fallbacks>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jdi-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "JDI (Just Do It) — lean workflow toolkit for Claude Code, GitHub Copilot, Antigravity, and OpenCode. 10 commands (7 loop + ralph + adopt + meta), 6 core agents + N per-project specialists with file-glob routing. Optional Playwright MCP + Caveman plugin install.",
5
5
  "bin": {
6
6
  "jdi": "bin/jdi.js"
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: clean-code
3
3
  description: Clean Code. Human-readable code, optimized for reading (read 10x more than written). Names reveal intent, small functions, no redundant comments, explicit error handling, no magic numbers. Applies in any language.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: dry
3
3
  description: DRY (Don't Repeat Yourself). 1 source of truth per piece of knowledge. Detects real duplication (same decision in 2+ places) and separates from apparent duplication (same code, different reasons). Applies in any language.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-rules
3
3
  description: Universal UI/UX and accessibility rules for any web interface. Framework-agnostic - works for React, Vue, Svelte, Solid, Angular, Blazor, Razor, Twig, Jinja, ERB, Blade, and any template engine. Based on WCAG 2.2 AA, Nielsen heuristics, Material/Apple HIG.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-validator
3
3
  description: Validates live UI via Playwright + axe-core. Detects Playwright; installs if missing (with user consent). Spawns dev server, navigates critical routes on mobile+desktop, captures console errors, network failures, a11y violations, screenshots, layout shifts. Structured JSON output for the reviewer to parse.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-adopter
3
3
  description: Adopt mode for brownfield projects. Scans existing repo (manifests, layout, git, docs), infers stack/code-design, confirms with user, generates PROJECT.md + ROADMAP.md with adopted=true flag. Replaces /jdi-new for projects with code already written.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-architect
3
3
  description: Creates new JDI agents and skills. Create mode = generic agent/skill in core. Specialist mode = per-project doer/reviewer in .jdi/agents/.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-asker
3
3
  description: Adaptive question loop to capture locked decisions before the plan. Writes CONTEXT.md.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-planner
3
3
  description: Generates PLAN.md for the phase. Reads CONTEXT.md (from asker) + PROJECT.md, decomposes into tasks, maps files_modified, execution order. No fluff.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-researcher
3
3
  description: Upfront pre-roadmap research. Reads user idea, asks key questions, researches stack/domain, generates initial PROJECT.md + ROADMAP.md. Single agent instead of multiple parallel researchers to save tokens.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: kiss
3
3
  description: KISS (Keep It Simple, Stupid). The simplest solution that solves the problem wins. Complexity only justified by real measured pain. Each layer/abstraction must pay its own cost. Applies in any language.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: solid
3
3
  description: SOLID. Robert C. Martin's 5 OO design principles - SRP, OCP, LSP, ISP, DIP. Applicable in any language with types/classes/interfaces (C#, Java, TS, Python, Go, Rust, Kotlin, Swift, etc). Direct summary + anti-patterns + detection heuristics.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: yagni
3
3
  description: YAGNI (You Aren't Gonna Need It). Build only what the current requirement asks for. Generalize after the 3rd real case, never before. Code not written is code with no bug, no maintenance cost, no pending test. Applies in any language.
4
4
  triggers:
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-adopter
3
3
  description: Adopt mode for brownfield projects. Scans existing repo (manifests, layout, git, docs), infers stack/code-design, confirms with user, generates PROJECT.md + ROADMAP.md with adopted=true flag. Replaces /jdi-new for projects with code already written.
4
4
  model: opus
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-architect
3
3
  description: Creates new JDI agents and skills. Create mode = generic agent/skill in core. Specialist mode = per-project doer/reviewer in .jdi/agents/.
4
4
  model: opus
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-asker
3
3
  description: Adaptive question loop to capture locked decisions before the plan. Writes CONTEXT.md.
4
4
  model: sonnet
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-bootstrap
3
3
  description: Fires jdi-architect in specialist mode to generate doer + reviewer per-project. Reads PROJECT.md, drives architect, validates outputs, updates routing.
4
4
  model: sonnet
@@ -76,20 +76,59 @@ Pass `adopted=$ADOPTED` and `boundary_commit=$BOUNDARY` to the architect in Step
76
76
 
77
77
  ### Step 2.7: Multi-stack? (multi-specialist support)
78
78
 
79
- AskUserQuestion:
79
+ **MANDATORY step. Never skip — even if PROJECT.md only mentions 1 language, ASK the user.**
80
+
81
+ #### Step 2.7a: Auto-detect fullstack from PROJECT.md
82
+
83
+ Before asking, parse `.jdi/PROJECT.md` Stack/Frameworks/Vision sections. Detect dual-stack patterns:
84
+
85
+ **Backend keywords (case-insensitive):**
86
+ `C#|.NET|dotnet|ASP\.NET|Java|Spring|Kotlin|Go|Rust|Python|Django|Flask|FastAPI|Node|Express|NestJS|Ruby|Rails|PHP|Laravel|Elixir|Phoenix`
87
+
88
+ **Frontend keywords (case-insensitive):**
89
+ `React|Vue|Svelte|Angular|Next\.?js|Nuxt|Remix|SvelteKit|Astro|Solid|Qwik|Preact|Blazor`
90
+
91
+ **Mobile keywords:**
92
+ `iOS|Swift|Android|Kotlin Mobile|React Native|Flutter|Dart|Xamarin|MAUI`
93
+
94
+ **Infra keywords:**
95
+ `Terraform|Pulumi|CloudFormation|Kubernetes|Helm|Ansible`
96
+
97
+ If ≥2 categories match (e.g. backend + frontend), set `SUGGESTED_COUNT=2` and `SUGGESTED_PAIRS` accordingly.
98
+
99
+ Examples of detection result from `Stack: "C# 10 + React 19"`:
100
+ - Match: `C#` (backend) + `React` (frontend) → SUGGESTED_COUNT=2
101
+ - Suggested pairs:
102
+ - `{stack_label: "Backend C#", file_glob: "**/*.{cs,csproj,sln}"}`
103
+ - `{stack_label: "Frontend React", file_glob: "**/*.{ts,tsx,jsx,css,scss}"}`
104
+
105
+ #### Step 2.7b: AskUserQuestion (always run)
106
+
107
+ If `SUGGESTED_COUNT >= 2`, the FIRST option (default-selected by AskUserQuestion) MUST be the suggested multi-stack option. Format:
108
+
109
+ > "Detected fullstack project: **{detected_categories}** (e.g. {match_keywords}).
110
+ > Stack count?"
111
+ >
112
+ > Options (when SUGGESTED_COUNT=2):
113
+ > - [Multi (2 pairs — backend + frontend) **(Recommended)**]
114
+ > - [Single (1 specialist pair)]
115
+ > - [Multi (3 pairs)]
116
+ > - [Multi (custom count)]
117
+
118
+ If `SUGGESTED_COUNT=1` (single language detected, e.g. just Python or just Go):
80
119
 
81
120
  > "Project stack count?
82
121
  > - **Single-stack:** 1 doer + 1 reviewer (90% of projects)
83
- > - **Multi-stack:** multiple doer/reviewer pairs, each owning a file glob (fullstack: backend + frontend, mobile: iOS + Android, etc.)"
122
+ > - **Multi-stack:** multiple pairs (fullstack, mobile iOS+Android, infra+app, etc.)"
84
123
  >
85
124
  > Options:
86
- > - [Single (1 specialist pair)]
87
- > - [Multi (2 pairs — e.g. backend + frontend)]
88
- > - [Multi (3 pairs — e.g. backend + frontend + infra)]
125
+ > - [Single (1 specialist pair) **(Recommended)**]
126
+ > - [Multi (2 pairs)]
127
+ > - [Multi (3 pairs)]
89
128
  > - [Multi (custom count)]
90
129
 
91
130
  If single: `SPECIALIST_COUNT=1`. Standard flow.
92
- If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times.
131
+ If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times. Pre-fill `stack_label` + `file_glob` from `SUGGESTED_PAIRS` when available (user can edit each).
93
132
 
94
133
  For multi-stack, ask glob+label per specialist BEFORE architect S1:
95
134
 
@@ -192,7 +231,7 @@ Bootstrap ok. Next: /jdi-discuss 1
192
231
  - Never create specialist without PROJECT.md present
193
232
  - Never skip architect — bootstrap is wrapper, not generator
194
233
  - Never commit if architect returned cancelled/failed
195
- - 1 doer + 1 reviewer per project (default). Multi-stack = future feature
234
+ - Single-stack (1 doer + 1 reviewer) is the default. Multi-stack (N pairs with file-glob routing) is opt-in via S2.7 — ALWAYS execute S2.7 (do not skip the question)
196
235
  </rules>
197
236
 
198
237
  <fallbacks>
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-planner
3
3
  description: Generates PLAN.md for the phase. Reads CONTEXT.md (from asker) + PROJECT.md, decomposes into tasks, maps files_modified, execution order. No fluff.
4
4
  model: opus
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-researcher
3
3
  description: Upfront pre-roadmap research. Reads user idea, asks key questions, researches stack/domain, generates initial PROJECT.md + ROADMAP.md. Single agent instead of multiple parallel researchers to save tokens.
4
4
  model: opus
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: clean-code
3
3
  description: Clean Code. Human-readable code, optimized for reading (read 10x more than written). Names reveal intent, small functions, no redundant comments, explicit error handling, no magic numbers. Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: dry
3
3
  description: DRY (Don't Repeat Yourself). 1 source of truth per piece of knowledge. Detects real duplication (same decision in 2+ places) and separates from apparent duplication (same code, different reasons). Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-rules
3
3
  description: Universal UI/UX and accessibility rules for any web interface. Framework-agnostic - works for React, Vue, Svelte, Solid, Angular, Blazor, Razor, Twig, Jinja, ERB, Blade, and any template engine. Based on WCAG 2.2 AA, Nielsen heuristics, Material/Apple HIG.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-validator
3
3
  description: Validates live UI via Playwright + axe-core. Detects Playwright; installs if missing (with user consent). Spawns dev server, navigates critical routes on mobile+desktop, captures console errors, network failures, a11y violations, screenshots, layout shifts. Structured JSON output for the reviewer to parse.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: kiss
3
3
  description: KISS (Keep It Simple, Stupid). The simplest solution that solves the problem wins. Complexity only justified by real measured pain. Each layer/abstraction must pay its own cost. Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: solid
3
3
  description: SOLID. Robert C. Martin's 5 OO design principles - SRP, OCP, LSP, ISP, DIP. Applicable in any language with types/classes/interfaces (C#, Java, TS, Python, Go, Rust, Kotlin, Swift, etc). Direct summary + anti-patterns + detection heuristics.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: yagni
3
3
  description: YAGNI (You Aren't Gonna Need It). Build only what the current requirement asks for. Generalize after the 3rd real case, never before. Code not written is code with no bug, no maintenance cost, no pending test. Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-adopter
3
3
  description: Adopt mode for brownfield projects. Scans existing repo (manifests, layout, git, docs), infers stack/code-design, confirms with user, generates PROJECT.md + ROADMAP.md with adopted=true flag. Replaces /jdi-new for projects with code already written.
4
4
  model: gpt-5
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-architect
3
3
  description: Creates new JDI agents and skills. Create mode = generic agent/skill in core. Specialist mode = per-project doer/reviewer in .jdi/agents/.
4
4
  model: gpt-5
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-asker
3
3
  description: Adaptive question loop to capture locked decisions before the plan. Writes CONTEXT.md.
4
4
  model: gpt-5
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-bootstrap
3
3
  description: Fires jdi-architect in specialist mode to generate doer + reviewer per-project. Reads PROJECT.md, drives architect, validates outputs, updates routing.
4
4
  model: gpt-5
@@ -76,20 +76,59 @@ Pass `adopted=$ADOPTED` and `boundary_commit=$BOUNDARY` to the architect in Step
76
76
 
77
77
  ### Step 2.7: Multi-stack? (multi-specialist support)
78
78
 
79
- AskUserQuestion:
79
+ **MANDATORY step. Never skip — even if PROJECT.md only mentions 1 language, ASK the user.**
80
+
81
+ #### Step 2.7a: Auto-detect fullstack from PROJECT.md
82
+
83
+ Before asking, parse `.jdi/PROJECT.md` Stack/Frameworks/Vision sections. Detect dual-stack patterns:
84
+
85
+ **Backend keywords (case-insensitive):**
86
+ `C#|.NET|dotnet|ASP\.NET|Java|Spring|Kotlin|Go|Rust|Python|Django|Flask|FastAPI|Node|Express|NestJS|Ruby|Rails|PHP|Laravel|Elixir|Phoenix`
87
+
88
+ **Frontend keywords (case-insensitive):**
89
+ `React|Vue|Svelte|Angular|Next\.?js|Nuxt|Remix|SvelteKit|Astro|Solid|Qwik|Preact|Blazor`
90
+
91
+ **Mobile keywords:**
92
+ `iOS|Swift|Android|Kotlin Mobile|React Native|Flutter|Dart|Xamarin|MAUI`
93
+
94
+ **Infra keywords:**
95
+ `Terraform|Pulumi|CloudFormation|Kubernetes|Helm|Ansible`
96
+
97
+ If ≥2 categories match (e.g. backend + frontend), set `SUGGESTED_COUNT=2` and `SUGGESTED_PAIRS` accordingly.
98
+
99
+ Examples of detection result from `Stack: "C# 10 + React 19"`:
100
+ - Match: `C#` (backend) + `React` (frontend) → SUGGESTED_COUNT=2
101
+ - Suggested pairs:
102
+ - `{stack_label: "Backend C#", file_glob: "**/*.{cs,csproj,sln}"}`
103
+ - `{stack_label: "Frontend React", file_glob: "**/*.{ts,tsx,jsx,css,scss}"}`
104
+
105
+ #### Step 2.7b: AskUserQuestion (always run)
106
+
107
+ If `SUGGESTED_COUNT >= 2`, the FIRST option (default-selected by AskUserQuestion) MUST be the suggested multi-stack option. Format:
108
+
109
+ > "Detected fullstack project: **{detected_categories}** (e.g. {match_keywords}).
110
+ > Stack count?"
111
+ >
112
+ > Options (when SUGGESTED_COUNT=2):
113
+ > - [Multi (2 pairs — backend + frontend) **(Recommended)**]
114
+ > - [Single (1 specialist pair)]
115
+ > - [Multi (3 pairs)]
116
+ > - [Multi (custom count)]
117
+
118
+ If `SUGGESTED_COUNT=1` (single language detected, e.g. just Python or just Go):
80
119
 
81
120
  > "Project stack count?
82
121
  > - **Single-stack:** 1 doer + 1 reviewer (90% of projects)
83
- > - **Multi-stack:** multiple doer/reviewer pairs, each owning a file glob (fullstack: backend + frontend, mobile: iOS + Android, etc.)"
122
+ > - **Multi-stack:** multiple pairs (fullstack, mobile iOS+Android, infra+app, etc.)"
84
123
  >
85
124
  > Options:
86
- > - [Single (1 specialist pair)]
87
- > - [Multi (2 pairs — e.g. backend + frontend)]
88
- > - [Multi (3 pairs — e.g. backend + frontend + infra)]
125
+ > - [Single (1 specialist pair) **(Recommended)**]
126
+ > - [Multi (2 pairs)]
127
+ > - [Multi (3 pairs)]
89
128
  > - [Multi (custom count)]
90
129
 
91
130
  If single: `SPECIALIST_COUNT=1`. Standard flow.
92
- If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times.
131
+ If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times. Pre-fill `stack_label` + `file_glob` from `SUGGESTED_PAIRS` when available (user can edit each).
93
132
 
94
133
  For multi-stack, ask glob+label per specialist BEFORE architect S1:
95
134
 
@@ -192,7 +231,7 @@ Bootstrap ok. Next: /jdi-discuss 1
192
231
  - Never create specialist without PROJECT.md present
193
232
  - Never skip architect — bootstrap is wrapper, not generator
194
233
  - Never commit if architect returned cancelled/failed
195
- - 1 doer + 1 reviewer per project (default). Multi-stack = future feature
234
+ - Single-stack (1 doer + 1 reviewer) is the default. Multi-stack (N pairs with file-glob routing) is opt-in via S2.7 — ALWAYS execute S2.7 (do not skip the question)
196
235
  </rules>
197
236
 
198
237
  <fallbacks>
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-planner
3
3
  description: Generates PLAN.md for the phase. Reads CONTEXT.md (from asker) + PROJECT.md, decomposes into tasks, maps files_modified, execution order. No fluff.
4
4
  model: gpt-5
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: jdi-researcher
3
3
  description: Upfront pre-roadmap research. Reads user idea, asks key questions, researches stack/domain, generates initial PROJECT.md + ROADMAP.md. Single agent instead of multiple parallel researchers to save tokens.
4
4
  model: gpt-5
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Adopt mode for brownfield projects. Scans existing repo (manifests, layout, git, docs), infers stack/code-design, confirms with user, generates PROJECT.md + ROADMAP.md with adopted=true flag. Replaces /jdi-new for projects with code already written.
3
3
  mode: subagent
4
4
  model: anthropic/claude-sonnet-4-20250514
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Creates new JDI agents and skills. Create mode = generic agent/skill in core. Specialist mode = per-project doer/reviewer in .jdi/agents/.
3
3
  ---
4
4
 
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Adaptive question loop to capture locked decisions before the plan. Writes CONTEXT.md.
3
3
  mode: subagent
4
4
  model: anthropic/claude-sonnet-4-20250514
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Fires jdi-architect in specialist mode to generate doer + reviewer per-project. Reads PROJECT.md, drives architect, validates outputs, updates routing.
3
3
  mode: subagent
4
4
  model: anthropic/claude-sonnet-4-20250514
@@ -80,20 +80,59 @@ Pass `adopted=$ADOPTED` and `boundary_commit=$BOUNDARY` to the architect in Step
80
80
 
81
81
  ### Step 2.7: Multi-stack? (multi-specialist support)
82
82
 
83
- AskUserQuestion:
83
+ **MANDATORY step. Never skip — even if PROJECT.md only mentions 1 language, ASK the user.**
84
+
85
+ #### Step 2.7a: Auto-detect fullstack from PROJECT.md
86
+
87
+ Before asking, parse `.jdi/PROJECT.md` Stack/Frameworks/Vision sections. Detect dual-stack patterns:
88
+
89
+ **Backend keywords (case-insensitive):**
90
+ `C#|.NET|dotnet|ASP\.NET|Java|Spring|Kotlin|Go|Rust|Python|Django|Flask|FastAPI|Node|Express|NestJS|Ruby|Rails|PHP|Laravel|Elixir|Phoenix`
91
+
92
+ **Frontend keywords (case-insensitive):**
93
+ `React|Vue|Svelte|Angular|Next\.?js|Nuxt|Remix|SvelteKit|Astro|Solid|Qwik|Preact|Blazor`
94
+
95
+ **Mobile keywords:**
96
+ `iOS|Swift|Android|Kotlin Mobile|React Native|Flutter|Dart|Xamarin|MAUI`
97
+
98
+ **Infra keywords:**
99
+ `Terraform|Pulumi|CloudFormation|Kubernetes|Helm|Ansible`
100
+
101
+ If ≥2 categories match (e.g. backend + frontend), set `SUGGESTED_COUNT=2` and `SUGGESTED_PAIRS` accordingly.
102
+
103
+ Examples of detection result from `Stack: "C# 10 + React 19"`:
104
+ - Match: `C#` (backend) + `React` (frontend) → SUGGESTED_COUNT=2
105
+ - Suggested pairs:
106
+ - `{stack_label: "Backend C#", file_glob: "**/*.{cs,csproj,sln}"}`
107
+ - `{stack_label: "Frontend React", file_glob: "**/*.{ts,tsx,jsx,css,scss}"}`
108
+
109
+ #### Step 2.7b: AskUserQuestion (always run)
110
+
111
+ If `SUGGESTED_COUNT >= 2`, the FIRST option (default-selected by AskUserQuestion) MUST be the suggested multi-stack option. Format:
112
+
113
+ > "Detected fullstack project: **{detected_categories}** (e.g. {match_keywords}).
114
+ > Stack count?"
115
+ >
116
+ > Options (when SUGGESTED_COUNT=2):
117
+ > - [Multi (2 pairs — backend + frontend) **(Recommended)**]
118
+ > - [Single (1 specialist pair)]
119
+ > - [Multi (3 pairs)]
120
+ > - [Multi (custom count)]
121
+
122
+ If `SUGGESTED_COUNT=1` (single language detected, e.g. just Python or just Go):
84
123
 
85
124
  > "Project stack count?
86
125
  > - **Single-stack:** 1 doer + 1 reviewer (90% of projects)
87
- > - **Multi-stack:** multiple doer/reviewer pairs, each owning a file glob (fullstack: backend + frontend, mobile: iOS + Android, etc.)"
126
+ > - **Multi-stack:** multiple pairs (fullstack, mobile iOS+Android, infra+app, etc.)"
88
127
  >
89
128
  > Options:
90
- > - [Single (1 specialist pair)]
91
- > - [Multi (2 pairs — e.g. backend + frontend)]
92
- > - [Multi (3 pairs — e.g. backend + frontend + infra)]
129
+ > - [Single (1 specialist pair) **(Recommended)**]
130
+ > - [Multi (2 pairs)]
131
+ > - [Multi (3 pairs)]
93
132
  > - [Multi (custom count)]
94
133
 
95
134
  If single: `SPECIALIST_COUNT=1`. Standard flow.
96
- If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times.
135
+ If multi: `SPECIALIST_COUNT=N`. Architect loops S1-S8 N times. Pre-fill `stack_label` + `file_glob` from `SUGGESTED_PAIRS` when available (user can edit each).
97
136
 
98
137
  For multi-stack, ask glob+label per specialist BEFORE architect S1:
99
138
 
@@ -196,7 +235,7 @@ Bootstrap ok. Next: /jdi-discuss 1
196
235
  - Never create specialist without PROJECT.md present
197
236
  - Never skip architect — bootstrap is wrapper, not generator
198
237
  - Never commit if architect returned cancelled/failed
199
- - 1 doer + 1 reviewer per project (default). Multi-stack = future feature
238
+ - Single-stack (1 doer + 1 reviewer) is the default. Multi-stack (N pairs with file-glob routing) is opt-in via S2.7 — ALWAYS execute S2.7 (do not skip the question)
200
239
  </rules>
201
240
 
202
241
  <fallbacks>
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Generates PLAN.md for the phase. Reads CONTEXT.md (from asker) + PROJECT.md, decomposes into tasks, maps files_modified, execution order. No fluff.
3
3
  mode: subagent
4
4
  model: anthropic/claude-sonnet-4-20250514
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  description: Upfront pre-roadmap research. Reads user idea, asks key questions, researches stack/domain, generates initial PROJECT.md + ROADMAP.md. Single agent instead of multiple parallel researchers to save tokens.
3
3
  mode: subagent
4
4
  model: anthropic/claude-sonnet-4-20250514
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: clean-code
3
3
  description: Clean Code. Human-readable code, optimized for reading (read 10x more than written). Names reveal intent, small functions, no redundant comments, explicit error handling, no magic numbers. Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: dry
3
3
  description: DRY (Don't Repeat Yourself). 1 source of truth per piece of knowledge. Detects real duplication (same decision in 2+ places) and separates from apparent duplication (same code, different reasons). Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-rules
3
3
  description: Universal UI/UX and accessibility rules for any web interface. Framework-agnostic - works for React, Vue, Svelte, Solid, Angular, Blazor, Razor, Twig, Jinja, ERB, Blade, and any template engine. Based on WCAG 2.2 AA, Nielsen heuristics, Material/Apple HIG.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-validator
3
3
  description: Validates live UI via Playwright + axe-core. Detects Playwright; installs if missing (with user consent). Spawns dev server, navigates critical routes on mobile+desktop, captures console errors, network failures, a11y violations, screenshots, layout shifts. Structured JSON output for the reviewer to parse.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: kiss
3
3
  description: KISS (Keep It Simple, Stupid). The simplest solution that solves the problem wins. Complexity only justified by real measured pain. Each layer/abstraction must pay its own cost. Applies in any language.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: solid
3
3
  description: SOLID. Robert C. Martin's 5 OO design principles - SRP, OCP, LSP, ISP, DIP. Applicable in any language with types/classes/interfaces (C#, Java, TS, Python, Go, Rust, Kotlin, Swift, etc). Direct summary + anti-patterns + detection heuristics.
4
4
  ---
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: yagni
3
3
  description: YAGNI (You Aren't Gonna Need It). Build only what the current requirement asks for. Generalize after the 3rd real case, never before. Code not written is code with no bug, no maintenance cost, no pending test. Applies in any language.
4
4
  ---