jdi-cli 0.1.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.
- package/AGENTS.md +209 -0
- package/ARCHITECTURE.md +210 -0
- package/COMMANDS.md +241 -0
- package/CREATE-EXAMPLE.md +385 -0
- package/CREATE.md +315 -0
- package/EXTENSION.md +141 -0
- package/LICENSE +21 -0
- package/MEMORY.md +471 -0
- package/PORTABILITY.md +438 -0
- package/README.md +789 -0
- package/bin/git-hooks/post-commit +16 -0
- package/bin/git-hooks/pre-commit +21 -0
- package/bin/jdi-build.ps1 +381 -0
- package/bin/jdi-build.sh +332 -0
- package/bin/jdi-doctor.ps1 +403 -0
- package/bin/jdi-doctor.sh +400 -0
- package/bin/jdi-install-caveman.ps1 +97 -0
- package/bin/jdi-install-caveman.sh +99 -0
- package/bin/jdi-install-playwright.ps1 +319 -0
- package/bin/jdi-install-playwright.sh +284 -0
- package/bin/jdi-install.ps1 +154 -0
- package/bin/jdi-install.sh +132 -0
- package/bin/jdi-uninstall.ps1 +309 -0
- package/bin/jdi-uninstall.sh +264 -0
- package/bin/jdi-update.ps1 +215 -0
- package/bin/jdi-update.sh +209 -0
- package/bin/jdi.js +460 -0
- package/bin/lib/jdi-monitor.ps1 +66 -0
- package/bin/lib/jdi-monitor.sh +74 -0
- package/bin/lib/jdi-truncate.ps1 +96 -0
- package/bin/lib/jdi-truncate.sh +99 -0
- package/bin/lib/ui.js +197 -0
- package/core/agents/jdi-adopter.md +465 -0
- package/core/agents/jdi-architect.md +894 -0
- package/core/agents/jdi-asker.md +153 -0
- package/core/agents/jdi-bootstrap.md +247 -0
- package/core/agents/jdi-planner.md +254 -0
- package/core/agents/jdi-researcher.md +303 -0
- package/core/commands/jdi-adopt.md +155 -0
- package/core/commands/jdi-bootstrap.md +81 -0
- package/core/commands/jdi-create.md +80 -0
- package/core/commands/jdi-discuss.md +80 -0
- package/core/commands/jdi-do.md +200 -0
- package/core/commands/jdi-loop.md +315 -0
- package/core/commands/jdi-new.md +131 -0
- package/core/commands/jdi-plan.md +73 -0
- package/core/commands/jdi-ship.md +146 -0
- package/core/commands/jdi-verify.md +159 -0
- package/core/skills/clean-code/SKILL.md +261 -0
- package/core/skills/dry/SKILL.md +150 -0
- package/core/skills/frontend-rules/SKILL.md +386 -0
- package/core/skills/frontend-validator/SKILL.md +567 -0
- package/core/skills/kiss/SKILL.md +178 -0
- package/core/skills/solid/SKILL.md +281 -0
- package/core/skills/yagni/SKILL.md +207 -0
- package/core/templates/agent.md +72 -0
- package/core/templates/doer-specialist.md +216 -0
- package/core/templates/reviewer-specialist.md +405 -0
- package/core/templates/skill.md +66 -0
- package/package.json +70 -0
- package/runtimes/antigravity/agents.md +74 -0
- package/runtimes/antigravity/skills/clean-code/SKILL.md +252 -0
- package/runtimes/antigravity/skills/dry/SKILL.md +141 -0
- package/runtimes/antigravity/skills/frontend-rules/SKILL.md +376 -0
- package/runtimes/antigravity/skills/frontend-validator/SKILL.md +559 -0
- package/runtimes/antigravity/skills/jdi-adopt/SKILL.md +155 -0
- package/runtimes/antigravity/skills/jdi-adopter/SKILL.md +436 -0
- package/runtimes/antigravity/skills/jdi-architect/SKILL.md +872 -0
- package/runtimes/antigravity/skills/jdi-asker/SKILL.md +125 -0
- package/runtimes/antigravity/skills/jdi-asker/references/context-template.md +34 -0
- package/runtimes/antigravity/skills/jdi-asker/references/decision-format.md +19 -0
- package/runtimes/antigravity/skills/jdi-asker/scripts/find_phase_dir.sh +25 -0
- package/runtimes/antigravity/skills/jdi-bootstrap/SKILL.md +81 -0
- package/runtimes/antigravity/skills/jdi-create/SKILL.md +80 -0
- package/runtimes/antigravity/skills/jdi-discuss/SKILL.md +80 -0
- package/runtimes/antigravity/skills/jdi-discuss/scripts/run_command.sh +62 -0
- package/runtimes/antigravity/skills/jdi-do/SKILL.md +200 -0
- package/runtimes/antigravity/skills/jdi-loop/SKILL.md +315 -0
- package/runtimes/antigravity/skills/jdi-new/SKILL.md +131 -0
- package/runtimes/antigravity/skills/jdi-plan/SKILL.md +73 -0
- package/runtimes/antigravity/skills/jdi-planner/SKILL.md +225 -0
- package/runtimes/antigravity/skills/jdi-researcher/SKILL.md +274 -0
- package/runtimes/antigravity/skills/jdi-ship/SKILL.md +146 -0
- package/runtimes/antigravity/skills/jdi-verify/SKILL.md +159 -0
- package/runtimes/antigravity/skills/kiss/SKILL.md +169 -0
- package/runtimes/antigravity/skills/solid/SKILL.md +272 -0
- package/runtimes/antigravity/skills/yagni/SKILL.md +198 -0
- package/runtimes/claude/CLAUDE.md +91 -0
- package/runtimes/claude/agents/jdi-adopter.md +430 -0
- package/runtimes/claude/agents/jdi-architect.md +864 -0
- package/runtimes/claude/agents/jdi-asker.md +119 -0
- package/runtimes/claude/agents/jdi-bootstrap.md +213 -0
- package/runtimes/claude/agents/jdi-planner.md +221 -0
- package/runtimes/claude/agents/jdi-researcher.md +269 -0
- package/runtimes/claude/commands/jdi-adopt.md +155 -0
- package/runtimes/claude/commands/jdi-bootstrap.md +81 -0
- package/runtimes/claude/commands/jdi-create.md +80 -0
- package/runtimes/claude/commands/jdi-discuss.md +80 -0
- package/runtimes/claude/commands/jdi-do.md +200 -0
- package/runtimes/claude/commands/jdi-loop.md +315 -0
- package/runtimes/claude/commands/jdi-new.md +131 -0
- package/runtimes/claude/commands/jdi-plan.md +73 -0
- package/runtimes/claude/commands/jdi-ship.md +146 -0
- package/runtimes/claude/commands/jdi-verify.md +159 -0
- package/runtimes/claude/settings.example.json +132 -0
- package/runtimes/claude/skills/clean-code/SKILL.md +247 -0
- package/runtimes/claude/skills/dry/SKILL.md +136 -0
- package/runtimes/claude/skills/frontend-rules/SKILL.md +369 -0
- package/runtimes/claude/skills/frontend-validator/SKILL.md +553 -0
- package/runtimes/claude/skills/kiss/SKILL.md +164 -0
- package/runtimes/claude/skills/solid/SKILL.md +267 -0
- package/runtimes/claude/skills/yagni/SKILL.md +193 -0
- package/runtimes/copilot/agents/jdi-adopter.agent.md +430 -0
- package/runtimes/copilot/agents/jdi-architect.agent.md +864 -0
- package/runtimes/copilot/agents/jdi-asker.agent.md +119 -0
- package/runtimes/copilot/agents/jdi-bootstrap.agent.md +213 -0
- package/runtimes/copilot/agents/jdi-planner.agent.md +221 -0
- package/runtimes/copilot/agents/jdi-researcher.agent.md +269 -0
- package/runtimes/copilot/copilot-instructions.md +80 -0
- package/runtimes/copilot/prompts/jdi-adopt.prompt.md +155 -0
- package/runtimes/copilot/prompts/jdi-bootstrap.prompt.md +81 -0
- package/runtimes/copilot/prompts/jdi-create.prompt.md +80 -0
- package/runtimes/copilot/prompts/jdi-discuss.prompt.md +80 -0
- package/runtimes/copilot/prompts/jdi-do.prompt.md +200 -0
- package/runtimes/copilot/prompts/jdi-loop.prompt.md +315 -0
- package/runtimes/copilot/prompts/jdi-new.prompt.md +131 -0
- package/runtimes/copilot/prompts/jdi-plan.prompt.md +73 -0
- package/runtimes/copilot/prompts/jdi-ship.prompt.md +146 -0
- package/runtimes/copilot/prompts/jdi-verify.prompt.md +159 -0
- package/runtimes/opencode/AGENTS.md +87 -0
- package/runtimes/opencode/agents/jdi-adopter.md +434 -0
- package/runtimes/opencode/agents/jdi-architect.md +861 -0
- package/runtimes/opencode/agents/jdi-asker.md +123 -0
- package/runtimes/opencode/agents/jdi-bootstrap.md +217 -0
- package/runtimes/opencode/agents/jdi-planner.md +225 -0
- package/runtimes/opencode/agents/jdi-researcher.md +273 -0
- package/runtimes/opencode/commands/jdi-adopt.md +155 -0
- package/runtimes/opencode/commands/jdi-bootstrap.md +81 -0
- package/runtimes/opencode/commands/jdi-create.md +80 -0
- package/runtimes/opencode/commands/jdi-discuss.md +80 -0
- package/runtimes/opencode/commands/jdi-do.md +200 -0
- package/runtimes/opencode/commands/jdi-loop.md +315 -0
- package/runtimes/opencode/commands/jdi-new.md +131 -0
- package/runtimes/opencode/commands/jdi-plan.md +73 -0
- package/runtimes/opencode/commands/jdi-ship.md +146 -0
- package/runtimes/opencode/commands/jdi-verify.md +159 -0
- package/runtimes/opencode/opencode.example.jsonc +169 -0
- package/runtimes/opencode/skills/clean-code/SKILL.md +247 -0
- package/runtimes/opencode/skills/dry/SKILL.md +136 -0
- package/runtimes/opencode/skills/frontend-rules/SKILL.md +369 -0
- package/runtimes/opencode/skills/frontend-validator/SKILL.md +553 -0
- package/runtimes/opencode/skills/kiss/SKILL.md +164 -0
- package/runtimes/opencode/skills/solid/SKILL.md +267 -0
- package/runtimes/opencode/skills/yagni/SKILL.md +193 -0
- package/templates-jdi-folder/config.json +18 -0
- package/templates-jdi-folder/registry.md +31 -0
- package/templates-jdi-folder/reviewers.md +33 -0
- package/templates-jdi-folder/skills-registry.md +32 -0
- package/templates-jdi-folder/specialists.md +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,789 @@
|
|
|
1
|
+
# JDI — Just Do It
|
|
2
|
+
|
|
3
|
+
Lean workflow toolkit for solo dev + AI assistant. Adaptive loop, atomic commits, file-based state, fresh context per agent, wave-based parallelism. Per-project specialists that already know your stack.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
Full-blown AI workflows (33+ agents, 60+ commands, 100+ subworkflows) burn tokens and ceremony in solo projects. JDI ships what matters and cuts the rest:
|
|
8
|
+
|
|
9
|
+
- **6 core agents** + **2 per-project** (doer + reviewer, generated by `/jdi-bootstrap`)
|
|
10
|
+
- **10 commands** in a fixed loop + ralph mode + brownfield entry + meta
|
|
11
|
+
- **File-based state** in `.jdi/` (Markdown + frontmatter, no DB)
|
|
12
|
+
- **Multi-runtime:** Claude Code, GitHub Copilot, Google Antigravity, OpenCode
|
|
13
|
+
- **Zero runtime deps** — Node stdlib only
|
|
14
|
+
- **Brownfield supported** — adopt existing projects, not just greenfield
|
|
15
|
+
- **Multi-stack** — N specialist pairs with file-glob routing (e.g. backend C# + frontend React)
|
|
16
|
+
- **Optional MCP** — one-shot Playwright MCP install across all 4 CLIs
|
|
17
|
+
|
|
18
|
+
## The flow
|
|
19
|
+
|
|
20
|
+
### Greenfield (new project)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
/jdi-new "<short description>" <- research + PROJECT.md + ROADMAP.md
|
|
24
|
+
/jdi-bootstrap <- doer + reviewer per project
|
|
25
|
+
/jdi-discuss <N> <- capture locked decisions (CONTEXT.md)
|
|
26
|
+
/jdi-plan <N> <- decompose into tasks + waves (PLAN.md)
|
|
27
|
+
/jdi-do <N> <- execute via doer specialist (SUMMARY.md)
|
|
28
|
+
/jdi-verify <N> <- gates via reviewer (REVIEW.md)
|
|
29
|
+
/jdi-ship <N> <- update ROADMAP, advance phase
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Brownfield (existing project)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/jdi-adopt <- scan repo, infer stack/code-design, confirm with user
|
|
36
|
+
/jdi-bootstrap <- doer + reviewer (adopted-aware: coverage only on new files)
|
|
37
|
+
/jdi-discuss <N> <- ... same as greenfield from here
|
|
38
|
+
/jdi-plan <N>
|
|
39
|
+
/jdi-do <N>
|
|
40
|
+
/jdi-verify <N>
|
|
41
|
+
/jdi-ship <N>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`/jdi-adopt` detects manifests (`package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `*.csproj`, `pom.xml`), infers layout (DDD / Vertical Slice / Clean / Hexagonal / The Method / legacy-mixed), reads `README.md` for vision hint, captures existing assets, and ALWAYS confirms code-design with you before locking (D-1). Records boundary commit hash in D-2 so reviewer enforces coverage only on files created AFTER adoption.
|
|
45
|
+
|
|
46
|
+
### Ralph mode (auto-iterate)
|
|
47
|
+
|
|
48
|
+
Instead of manually running `/jdi-do` then `/jdi-verify`, use:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
/jdi-loop <N>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Runs `/jdi-do` ↔ `/jdi-verify` in a bounded loop (default 5 iter per round, max 3 resets = 15 iter absolute). Exits when verdict is `APPROVED` or `APPROVED_WITH_WARNINGS`. Oscillation detection cuts dead loops early.
|
|
55
|
+
|
|
56
|
+
## Quickstart — `npx` in 30 seconds
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cd /path/to/your/project
|
|
60
|
+
npx jdi-cli@latest install opencode
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Done. Swap `opencode` for `claude`, `copilot`, `antigravity`, or `all` depending on your active runtime.
|
|
64
|
+
|
|
65
|
+
> No `cd` first? `npx` runs in the current directory. Always confirm with `pwd` (Linux/Mac) or `Get-Location` (Windows).
|
|
66
|
+
|
|
67
|
+
### Prerequisites
|
|
68
|
+
|
|
69
|
+
- **Node.js 18+** (for `npx`)
|
|
70
|
+
- **git**
|
|
71
|
+
- At least one runtime: Claude Code, GitHub Copilot, Antigravity, or OpenCode
|
|
72
|
+
|
|
73
|
+
## CLI subcommands
|
|
74
|
+
|
|
75
|
+
Quick reference of every flag per subcommand:
|
|
76
|
+
|
|
77
|
+
### `install <runtime>` — install JDI into the project
|
|
78
|
+
|
|
79
|
+
| Flag | Values | Default | Purpose |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| `--scope` / `-s` | `user` \| `project` | `project` | `project` writes `.claude/`/`.opencode/`/etc into the project; `user` writes to `~/.claude/`, `~/.config/opencode/`, `~/.gemini/antigravity/` |
|
|
82
|
+
| `--no-color` | flag | false | Disable ANSI colors |
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx jdi-cli@latest install claude
|
|
86
|
+
npx jdi-cli@latest install copilot
|
|
87
|
+
npx jdi-cli@latest install antigravity --scope user
|
|
88
|
+
npx jdi-cli@latest install opencode
|
|
89
|
+
npx jdi-cli@latest install all # all 4 runtimes at once
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `install-playwright` — Playwright dev dep + chromium browser + MCP config
|
|
93
|
+
|
|
94
|
+
| Flag | Values | Default | Purpose |
|
|
95
|
+
|---|---|---|---|
|
|
96
|
+
| `--skip-browser` | flag | false | Skip `npx playwright install chromium` (~170MB) |
|
|
97
|
+
| `--skip-mcp` | flag | false | Only install dep + browser, skip injecting MCP configs |
|
|
98
|
+
| `--runtime` | `claude` \| `opencode` \| `copilot` \| `antigravity` \| `all` | `all` | Limit MCP injection to one runtime |
|
|
99
|
+
| `--antigravity-scope` | `user` \| `project` | `user` | `~/.gemini/settings.json` vs `.gemini/settings.json` |
|
|
100
|
+
|
|
101
|
+
Injects MCP into all 4 detected runtimes (see Playwright section above for paths).
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx jdi-cli@latest install-playwright
|
|
105
|
+
npx jdi-cli@latest install-playwright --skip-browser
|
|
106
|
+
npx jdi-cli@latest install-playwright --runtime claude
|
|
107
|
+
npx jdi-cli@latest install-playwright --runtime copilot
|
|
108
|
+
npx jdi-cli@latest install-playwright --skip-mcp # just dep + browser
|
|
109
|
+
npx jdi-cli@latest install-playwright --antigravity-scope project
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `install-caveman` — clone Caveman plugin
|
|
113
|
+
|
|
114
|
+
| Flag | Values | Default | Purpose |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| `--repo` | git URL | `https://github.com/JuliusBrussee/caveman.git` | Override caveman source repo (fork support) |
|
|
117
|
+
| `--scope` | `user` \| `project` | `user` | `~/.claude/plugins/caveman/` vs `.claude/plugins/caveman/` |
|
|
118
|
+
| `--force` | flag | false | Overwrite existing install without prompt |
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx jdi-cli@latest install-caveman # user scope, default repo
|
|
122
|
+
npx jdi-cli@latest install-caveman --scope project
|
|
123
|
+
npx jdi-cli@latest install-caveman --repo https://github.com/forked/caveman.git --force
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### `update` — refresh runtime files, preserve state
|
|
127
|
+
|
|
128
|
+
| Flag | Values | Default | Purpose |
|
|
129
|
+
|---|---|---|---|
|
|
130
|
+
| `--dry-run` | flag | false | Show what would change without applying |
|
|
131
|
+
| `--force-specialists` | flag | false | Regenerate specialists without asking (assumes Yes) |
|
|
132
|
+
| `--skip-specialists` | flag | false | Leave specialists alone even if template changed |
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npx jdi-cli@latest update
|
|
136
|
+
npx jdi-cli@latest update --dry-run
|
|
137
|
+
npx jdi-cli@latest update --force-specialists
|
|
138
|
+
npx jdi-cli@latest update --skip-specialists
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Update does NOT refresh Playwright dep, MCP configs, or Caveman plugin. Re-run their respective subcommands to refresh.
|
|
142
|
+
|
|
143
|
+
### `uninstall [runtime]` — remove JDI files
|
|
144
|
+
|
|
145
|
+
| Flag | Values | Default | Purpose |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| `--scope` | `user` \| `project` \| `both` | `both` | Limit removal scope |
|
|
148
|
+
| `--dry-run` | flag | false | Preview without applying |
|
|
149
|
+
| `--yes` | flag | false | Skip all interactive prompts |
|
|
150
|
+
| `--purge` | flag | false | **DESTRUCTIVE:** also wipe `.jdi/` (locked decisions lost) |
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
npx jdi-cli@latest uninstall # all detected runtimes, preserves .jdi/
|
|
154
|
+
npx jdi-cli@latest uninstall claude
|
|
155
|
+
npx jdi-cli@latest uninstall opencode --scope user
|
|
156
|
+
npx jdi-cli@latest uninstall --dry-run # preview
|
|
157
|
+
npx jdi-cli@latest uninstall --yes # skip prompts
|
|
158
|
+
npx jdi-cli@latest uninstall --purge --yes # WIPE EVERYTHING including .jdi/
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### `doctor` — environment diagnostic
|
|
162
|
+
|
|
163
|
+
| Flag | Values | Default | Purpose |
|
|
164
|
+
|---|---|---|---|
|
|
165
|
+
| `--verbose` / `-v` | flag | false | Show note-level (debug) lines |
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npx jdi-cli@latest doctor
|
|
169
|
+
npx jdi-cli@latest doctor --verbose
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### `build` — regenerate runtimes/ from core/ (contributors only)
|
|
173
|
+
|
|
174
|
+
No flags. Used inside the JDI source repo after editing `core/`.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npx jdi-cli@latest build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Misc
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npx jdi-cli@latest --version
|
|
184
|
+
npx jdi-cli@latest help
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
> Use `@latest` to force a fresh pull from npm. Without it, `npx` may use a cached older version.
|
|
188
|
+
|
|
189
|
+
### Install globally (optional)
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm i -g jdi-cli
|
|
193
|
+
jdi install opencode
|
|
194
|
+
jdi doctor
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
After that, `jdi` works without `npx`.
|
|
198
|
+
|
|
199
|
+
## Optional add-ons
|
|
200
|
+
|
|
201
|
+
### Playwright MCP — live browser tool for all 4 CLIs
|
|
202
|
+
|
|
203
|
+
`npx jdi-cli install-playwright` does three things:
|
|
204
|
+
|
|
205
|
+
1. Installs `@playwright/test` as devDependency (detects pnpm/yarn/bun/npm via lockfile)
|
|
206
|
+
2. Installs Chromium browser (`npx playwright install chromium`, ~170MB) — skippable with `--skip-browser`
|
|
207
|
+
3. Injects Playwright MCP server config into all detected runtimes:
|
|
208
|
+
|
|
209
|
+
| CLI | MCP config path |
|
|
210
|
+
|---|---|
|
|
211
|
+
| Claude Code | `.claude/settings.local.json` (`mcpServers.playwright`) |
|
|
212
|
+
| OpenCode | `.opencode/opencode.jsonc` (`mcp.playwright`) |
|
|
213
|
+
| GitHub Copilot (VS Code) | `.vscode/mcp.json` (`servers.playwright`) |
|
|
214
|
+
| Antigravity (Google) | `~/.gemini/settings.json` user-scope OR `.gemini/settings.json` project-scope (`mcpServers.playwright`) |
|
|
215
|
+
|
|
216
|
+
Idempotent: skips dep if already in `package.json`, skips MCP entry if already present.
|
|
217
|
+
|
|
218
|
+
Restart your runtime to load the MCP after install.
|
|
219
|
+
|
|
220
|
+
If `frontend.has_frontend: true` is set in `PROJECT.md`, `/jdi-bootstrap` will offer this install interactively (step S9).
|
|
221
|
+
|
|
222
|
+
### Caveman plugin — token compression
|
|
223
|
+
|
|
224
|
+
`npx jdi-cli install-caveman` clones the [Caveman](https://github.com/JuliusBrussee/caveman) plugin into:
|
|
225
|
+
|
|
226
|
+
- **User scope (default):** `~/.claude/plugins/caveman/`
|
|
227
|
+
- **Project scope:** `.claude/plugins/caveman/`
|
|
228
|
+
|
|
229
|
+
Caveman is a Claude Code plugin that compresses LLM output ~75% by dropping articles/filler/pleasantries while preserving full technical accuracy. Useful for long sessions where context budget matters.
|
|
230
|
+
|
|
231
|
+
After install, restart Claude Code. Toggle with `/caveman lite|full|ultra` or disable with `stop caveman`.
|
|
232
|
+
|
|
233
|
+
`/jdi-bootstrap` offers this install interactively (step S9.5, project-agnostic).
|
|
234
|
+
|
|
235
|
+
## Frontend support — auto-detect + UI/UX gates
|
|
236
|
+
|
|
237
|
+
If your project has a web interface, JDI activates an extra set of UI/UX-focused gates. Detection runs against:
|
|
238
|
+
|
|
239
|
+
- `package.json` for React, Vue, Svelte, Solid, Angular, Astro, Next, Nuxt, Remix, SvelteKit, Qwik, Preact
|
|
240
|
+
- Razor/Blazor (`*.razor`, `*.cshtml`)
|
|
241
|
+
- Django/Flask templates (`templates/*.html`)
|
|
242
|
+
- Rails (`app/views/*.erb`)
|
|
243
|
+
- Laravel (`resources/views/*.blade.php`)
|
|
244
|
+
- Plain `index.html`
|
|
245
|
+
|
|
246
|
+
### What auto-loads
|
|
247
|
+
|
|
248
|
+
**Skill `frontend-rules`** — universal UI/UX checklist (**WCAG 2.2 AA + Nielsen + Material/Apple HIG**). Framework-agnostic. Covers:
|
|
249
|
+
|
|
250
|
+
- Accessibility (contrast 4.5:1, focus visible, keyboard nav, ARIA, semantic HTML, touch targets, labels)
|
|
251
|
+
- Mandatory states (loading / empty / error / success / disabled)
|
|
252
|
+
- Forms (validation, autocomplete, inputmode, password toggle, destructive confirmations)
|
|
253
|
+
- Performance UX (CLS < 0.1, LCP < 2.5s, INP < 200ms, optimistic UI)
|
|
254
|
+
- Mobile-first responsive
|
|
255
|
+
- i18n + l10n + RTL
|
|
256
|
+
- UI security (token never in localStorage, CSP, CSRF, `target=_blank` with noopener)
|
|
257
|
+
- BLOCK-level anti-patterns table with WCAG rule citations
|
|
258
|
+
|
|
259
|
+
Doer applies it before writing code. Reviewer uses it as a gate 5 checklist.
|
|
260
|
+
|
|
261
|
+
**Skill `frontend-validator`** — gate 7 of the reviewer. Runs Playwright + axe-core in a real browser:
|
|
262
|
+
|
|
263
|
+
1. Detects Playwright. If absent, **asks before installing** (4 options: Chromium / all browsers / skip gate 7 / cancel review)
|
|
264
|
+
2. Detects package manager via lockfile
|
|
265
|
+
3. Spawns your dev server, waits for ready (60s poll timeout)
|
|
266
|
+
4. Per critical route × **mobile (375×667)** + **desktop (1280×720)**:
|
|
267
|
+
- Captures console errors
|
|
268
|
+
- Captures network failures (4xx, 5xx, requestfailed)
|
|
269
|
+
- Runs axe-core (WCAG 2.0/2.1/2.2 AA + best-practices)
|
|
270
|
+
- Detects horizontal scroll
|
|
271
|
+
- Fullpage screenshot
|
|
272
|
+
5. Kills dev server (always, even on error)
|
|
273
|
+
6. JSON output in `.jdi/cache/ui-findings.json`
|
|
274
|
+
|
|
275
|
+
### Finding severity
|
|
276
|
+
|
|
277
|
+
| Finding | Severity |
|
|
278
|
+
|---|---|
|
|
279
|
+
| Console error on any route | BLOCK |
|
|
280
|
+
| Network 5xx on critical route | BLOCK |
|
|
281
|
+
| A11y violation `critical` or `serious` | BLOCK |
|
|
282
|
+
| Horizontal scroll on mobile | BLOCK |
|
|
283
|
+
| A11y violation `moderate`, network 4xx | WARN |
|
|
284
|
+
| A11y violation `minor`, scroll on desktop | INFO |
|
|
285
|
+
| Dev server timeout | INCONCLUSIVE (warn) |
|
|
286
|
+
| User declined Playwright install | SKIPPED (warn) |
|
|
287
|
+
|
|
288
|
+
Never BLOCK on technical failure — only on real findings. `.jdi/cache/` is auto-gitignored.
|
|
289
|
+
|
|
290
|
+
### How it turns on
|
|
291
|
+
|
|
292
|
+
You do nothing. When you run `/jdi-bootstrap` in a project with UI:
|
|
293
|
+
|
|
294
|
+
1. Auto-detect fires
|
|
295
|
+
2. Bootstrap asks: "Detected React in `package.json`. Confirm frontend?"
|
|
296
|
+
3. If yes, 3 extra questions: dev server command (default per framework), frontend URL (default per framework), critical paths (default `/`)
|
|
297
|
+
4. Persists `frontend:` section in `PROJECT.md`
|
|
298
|
+
5. Injects `<skills_to_load>` into doer + reviewer
|
|
299
|
+
|
|
300
|
+
From then on, `/jdi-do` loads `frontend-rules` when a task touches UI files; `/jdi-verify` runs gate 7 with Playwright.
|
|
301
|
+
|
|
302
|
+
### How to turn off
|
|
303
|
+
|
|
304
|
+
Edit `PROJECT.md`:
|
|
305
|
+
```yaml
|
|
306
|
+
frontend:
|
|
307
|
+
has_frontend: false
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Gate 7 returns `SKIPPED`. Skill does not load.
|
|
311
|
+
|
|
312
|
+
## Multi-stack — N specialist pairs
|
|
313
|
+
|
|
314
|
+
By default, JDI creates **1 doer + 1 reviewer per project**. For fullstack (backend + frontend), mobile (iOS + Android), or polyglot projects, opt into multi-stack at `/jdi-bootstrap`:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
Bootstrap asks: "Project stack count?"
|
|
318
|
+
- Single (1 specialist pair)
|
|
319
|
+
- Multi (2 pairs — e.g. backend + frontend)
|
|
320
|
+
- Multi (3 pairs — e.g. backend + frontend + infra)
|
|
321
|
+
- Multi (custom count)
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
For each specialist, you provide a `stack_label` + `file_glob`:
|
|
325
|
+
|
|
326
|
+
| Specialist | Stack label | File glob |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| 1 | Backend C# | `**/*.{cs,csproj,sln}` |
|
|
329
|
+
| 2 | Frontend React | `**/*.{ts,tsx,jsx,css,scss}` |
|
|
330
|
+
| 3 | Infra Terraform | `**/*.{tf,tfvars}` |
|
|
331
|
+
|
|
332
|
+
### How it routes
|
|
333
|
+
|
|
334
|
+
- `.jdi/specialists.md` + `.jdi/reviewers.md` get one row per pair (schema v2 adds `File glob` column)
|
|
335
|
+
- `/jdi-plan` matches each task's `files_modified` against globs and auto-assigns a specialist per task. Tasks spanning 2+ globs auto-split into sub-tasks
|
|
336
|
+
- `/jdi-do` reads `task.specialist` from PLAN.md and spawns the right doer per task. Within a wave, different tasks may spawn different specialists in parallel (disjoint scopes)
|
|
337
|
+
- `/jdi-verify` chains reviewers sequentially (build/test ports + locks would clash if parallel). Each reviewer scopes gates to its glob. Final verdict = worst-case (1 BLOCK = overall BLOCK)
|
|
338
|
+
|
|
339
|
+
Single-stack projects (1 row) stay unchanged — backward compatible.
|
|
340
|
+
|
|
341
|
+
## State model — `.jdi/`
|
|
342
|
+
|
|
343
|
+
```
|
|
344
|
+
your-project/
|
|
345
|
+
├── .jdi/ # state files (generated by JDI commands)
|
|
346
|
+
│ ├── PROJECT.md # vision, stack, code-design (LOCKED after /jdi-new or /jdi-adopt)
|
|
347
|
+
│ ├── ROADMAP.md # phases list (greenfield: MVP features, adopted: new features)
|
|
348
|
+
│ ├── STATE.md # current phase, adopted flag, next step
|
|
349
|
+
│ ├── DECISIONS.md # append-only D-1, D-2, ... (locked decisions)
|
|
350
|
+
│ ├── VERSION # JDI version installed
|
|
351
|
+
│ ├── specialists.md # registry of doer specialists (schema v2)
|
|
352
|
+
│ ├── reviewers.md # registry of reviewer specialists (schema v2)
|
|
353
|
+
│ ├── registry.md # append-only R-1, R-2, ... (audit trail of specialist creation)
|
|
354
|
+
│ ├── agents/ # per-project specialists
|
|
355
|
+
│ │ ├── jdi-doer-{slug}.md
|
|
356
|
+
│ │ └── jdi-reviewer-{slug}.md
|
|
357
|
+
│ ├── phases/{NN-slug}/
|
|
358
|
+
│ │ ├── CONTEXT.md # from /jdi-discuss
|
|
359
|
+
│ │ ├── PLAN.md # from /jdi-plan
|
|
360
|
+
│ │ ├── SUMMARY.md # from /jdi-do
|
|
361
|
+
│ │ ├── REVIEW.md # from /jdi-verify (verdict)
|
|
362
|
+
│ │ └── LOOP.md # only if /jdi-loop ran (ralph state)
|
|
363
|
+
│ └── cache/ # gitignored — gate 7 artifacts (screenshots, JSON findings)
|
|
364
|
+
├── .claude/ # (if runtime=claude)
|
|
365
|
+
│ ├── agents/jdi-*.md
|
|
366
|
+
│ ├── commands/jdi-*.md
|
|
367
|
+
│ └── settings.example.json
|
|
368
|
+
├── .githooks/ # no-op by default
|
|
369
|
+
├── .gitattributes # normalizes CRLF
|
|
370
|
+
├── CLAUDE.md # runtime instructions
|
|
371
|
+
└── {your code}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
For other runtimes, swap `.claude/` for `.github/`, `.gemini/antigravity/`, or `.opencode/`. See [PORTABILITY.md](PORTABILITY.md).
|
|
375
|
+
|
|
376
|
+
### Invariants
|
|
377
|
+
|
|
378
|
+
- `PROJECT.md` is **immutable** after `/jdi-new` or `/jdi-adopt`
|
|
379
|
+
- `DECISIONS.md` is **append-only** (`D-1`, `D-2`, …). Locked decisions never reverse
|
|
380
|
+
- `registry.md` is **append-only** (`R-1`, `R-2`, …) — audit trail
|
|
381
|
+
- Every command is **idempotent** — re-running prompts before overwrite
|
|
382
|
+
- Reviewer is **read-only by design** (no Write/Edit). Doer is the only writer
|
|
383
|
+
|
|
384
|
+
## Gates between commands
|
|
385
|
+
|
|
386
|
+
| From | To | Gate |
|
|
387
|
+
|---|---|---|
|
|
388
|
+
| `/jdi-discuss` | `/jdi-plan` | `CONTEXT.md` exists |
|
|
389
|
+
| `/jdi-plan` | `/jdi-do` | PLAN valid (every task has `files_modified`, `acceptance`, `dependencies`, `test`, `specialist`) |
|
|
390
|
+
| `/jdi-do` | `/jdi-verify` | `SUMMARY.md` exists |
|
|
391
|
+
| `/jdi-verify` | `/jdi-ship` | `REVIEW.md` verdict ≠ `BLOCKED` |
|
|
392
|
+
|
|
393
|
+
## Doctor — 12 sections
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
npx jdi-cli doctor
|
|
397
|
+
npx jdi-cli doctor --verbose
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
1. Dependencies (git, bash detection)
|
|
401
|
+
2. Runtimes installed (claude, copilot, antigravity, opencode)
|
|
402
|
+
3. Optional tooling (ctx7, gh CLI)
|
|
403
|
+
4. JDI repo integrity (`core/`)
|
|
404
|
+
5. Adapters built (`runtimes/`)
|
|
405
|
+
6. Current project (`.jdi/` files)
|
|
406
|
+
7. Runtime installed in project
|
|
407
|
+
8. Git hooks configured
|
|
408
|
+
9. Working tree clean
|
|
409
|
+
10. Playwright + MCP status (all 4 CLIs)
|
|
410
|
+
11. Caveman plugin status (user vs project scope)
|
|
411
|
+
12. Specialists (single vs multi-stack, reviewer chain length)
|
|
412
|
+
|
|
413
|
+
## Update
|
|
414
|
+
|
|
415
|
+
Dedicated command — detects installed runtimes, overwrites runtime files, preserves state, offers to regenerate specialists if templates changed:
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
cd /path/to/your/project
|
|
419
|
+
npx jdi-cli@latest update
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Preview without applying:
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
npx jdi-cli@latest update --dry-run
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
Force specialists regen (no prompt):
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
npx jdi-cli@latest update --force-specialists
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Skip specialists regen even if template changed:
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
npx jdi-cli@latest update --skip-specialists
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**What update touches:**
|
|
441
|
+
- Overwrites agents, commands, skills in detected runtimes
|
|
442
|
+
- Preserves `.jdi/PROJECT.md`, `DECISIONS.md`, `ROADMAP.md`, `STATE.md`, `phases/`, `registry.md`
|
|
443
|
+
- Preserves custom config (`opencode.jsonc`, `settings.json`)
|
|
444
|
+
- Updates `.jdi/VERSION`
|
|
445
|
+
- Detects old specialists (without `<skills_to_load>`) and offers `/jdi-bootstrap` regen
|
|
446
|
+
|
|
447
|
+
**What update does NOT touch:**
|
|
448
|
+
- `@playwright/test` (run `jdi install-playwright` to refresh)
|
|
449
|
+
- Chromium browser
|
|
450
|
+
- MCP configs in `.claude/settings.local.json` / `.opencode/opencode.jsonc` / `.vscode/mcp.json` / `~/.gemini/settings.json`
|
|
451
|
+
- Caveman plugin (run `jdi install-caveman --force` to refresh)
|
|
452
|
+
|
|
453
|
+
## Uninstall
|
|
454
|
+
|
|
455
|
+
```bash
|
|
456
|
+
cd /path/to/your/project
|
|
457
|
+
npx jdi-cli@latest uninstall # all detected runtimes, preserves .jdi/
|
|
458
|
+
npx jdi-cli@latest uninstall claude # one runtime
|
|
459
|
+
npx jdi-cli@latest uninstall opencode --scope user
|
|
460
|
+
npx jdi-cli@latest uninstall --dry-run # preview
|
|
461
|
+
npx jdi-cli@latest uninstall --yes # skip prompts
|
|
462
|
+
npx jdi-cli@latest uninstall --purge --yes # DESTRUCTIVE: also wipe .jdi/
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
`--purge` permanently deletes locked decisions. Back up `.jdi/DECISIONS.md` and `.jdi/ROADMAP.md` first if relevant.
|
|
466
|
+
|
|
467
|
+
Manual fallback:
|
|
468
|
+
```bash
|
|
469
|
+
rm -rf .claude/ .github/ .gemini/antigravity/ .opencode/ .githooks/ CLAUDE.md AGENTS.md
|
|
470
|
+
# .jdi/ separate — destructive
|
|
471
|
+
rm -rf .jdi/
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
## Agents inventory
|
|
475
|
+
|
|
476
|
+
**Core (6 — shipped):**
|
|
477
|
+
|
|
478
|
+
| Agent | Model | Role |
|
|
479
|
+
|---|---|---|
|
|
480
|
+
| `jdi-researcher` | Opus | Greenfield discovery — spawned by `/jdi-new` |
|
|
481
|
+
| `jdi-adopter` | Opus | Brownfield discovery — spawned by `/jdi-adopt` |
|
|
482
|
+
| `jdi-bootstrap` | Sonnet | Wrapper that generates specialists |
|
|
483
|
+
| `jdi-asker` | Sonnet | Adaptive question loop (CONTEXT.md) |
|
|
484
|
+
| `jdi-planner` | Opus | Decompose phase into tasks + waves |
|
|
485
|
+
| `jdi-architect` | Opus | Meta (create + specialist modes) |
|
|
486
|
+
|
|
487
|
+
**Per-project (generated by `/jdi-bootstrap`):**
|
|
488
|
+
|
|
489
|
+
| Agent | Model | Role |
|
|
490
|
+
|---|---|---|
|
|
491
|
+
| `jdi-doer-{slug}` | Sonnet | Executor — knows stack, conventions, test framework |
|
|
492
|
+
| `jdi-reviewer-{slug}` | Sonnet | Read-only gates (build/test/coverage/lint/security/UI) |
|
|
493
|
+
|
|
494
|
+
Every flow agent has access to web tools (WebSearch, WebFetch, MCP `context7`) for on-demand research. Limits per agent — see each agent's `<research_tools>` block.
|
|
495
|
+
|
|
496
|
+
## Skills inventory
|
|
497
|
+
|
|
498
|
+
**Universal programming principles (auto-loaded by doer + reviewer):**
|
|
499
|
+
|
|
500
|
+
| Skill | What |
|
|
501
|
+
|---|---|
|
|
502
|
+
| `dry` | Don't Repeat Yourself — knowledge duplication vs code coincidence, rule of three |
|
|
503
|
+
| `kiss` | Keep It Simple — anti over-engineering, complexity must pay its cost |
|
|
504
|
+
| `yagni` | You Aren't Gonna Need It — no speculative code, generalize after 3rd case |
|
|
505
|
+
| `solid` | SRP/OCP/LSP/ISP/DIP with detection heuristics |
|
|
506
|
+
| `clean-code` | Intentional names, small functions, explicit error handling, classic smells |
|
|
507
|
+
|
|
508
|
+
**Frontend-conditional (auto-loaded if `has_frontend: true`):**
|
|
509
|
+
|
|
510
|
+
| Skill | What |
|
|
511
|
+
|---|---|
|
|
512
|
+
| `frontend-rules` | WCAG 2.2 AA + UX checklist, framework-agnostic |
|
|
513
|
+
| `frontend-validator` | Gate 7 — Playwright + axe-core live validation |
|
|
514
|
+
|
|
515
|
+
See [AGENTS.md](AGENTS.md) for full details.
|
|
516
|
+
|
|
517
|
+
## Commands inventory
|
|
518
|
+
|
|
519
|
+
**Main loop (7):**
|
|
520
|
+
|
|
521
|
+
| Command | Args | Flags | Purpose |
|
|
522
|
+
|---|---|---|---|
|
|
523
|
+
| `/jdi-new <description>` | description (optional) | `--reset` (wipes `.jdi/` first, asks confirm) | Greenfield entry: researcher + PROJECT.md + ROADMAP.md |
|
|
524
|
+
| `/jdi-bootstrap` | — | — (idempotent: prompts Recreate/Keep/Cancel if specialists exist) | Generate doer + reviewer per project. Multi-stack opt-in via interactive question |
|
|
525
|
+
| `/jdi-discuss <N>` | phase number | — | Adaptive question loop → CONTEXT.md |
|
|
526
|
+
| `/jdi-plan <N>` | phase number | `--review` (preview PLAN.md before save, ask approve/edit/cancel) | Decompose phase into tasks + waves → PLAN.md |
|
|
527
|
+
| `/jdi-do <N>` | phase number | `--sequential` (force sequential execution even if waves permit parallel) | Execute tasks via doer specialist(s) → SUMMARY.md |
|
|
528
|
+
| `/jdi-verify <N>` | phase number | — | Run reviewer specialist gates → REVIEW.md (verdict APPROVED / APPROVED_WITH_WARNINGS / BLOCKED) |
|
|
529
|
+
| `/jdi-ship <N>` | phase number | — | Update ROADMAP, advance phase. Gates: verdict must not be BLOCKED |
|
|
530
|
+
|
|
531
|
+
**Brownfield entry (1):**
|
|
532
|
+
|
|
533
|
+
| Command | Args | Flags | Purpose |
|
|
534
|
+
|---|---|---|---|
|
|
535
|
+
| `/jdi-adopt <description>` | description (optional override; defaults to README/inferred) | — | Scan existing repo, infer stack/code-design, confirm with user, mark `adopted: true` + D-2 boundary commit |
|
|
536
|
+
|
|
537
|
+
**Ralph mode (1):**
|
|
538
|
+
|
|
539
|
+
| Command | Args | Flags | Purpose |
|
|
540
|
+
|---|---|---|---|
|
|
541
|
+
| `/jdi-loop <N>` | phase number | `--max-iter=N` (default 5), `--max-resets=N` (default 3) | Auto-iterate `/jdi-do` ↔ `/jdi-verify` until APPROVED. Oscillation detection, human gate between rounds |
|
|
542
|
+
|
|
543
|
+
**Meta (1, contributors only):**
|
|
544
|
+
|
|
545
|
+
| Command | Args | Flags | Purpose |
|
|
546
|
+
|---|---|---|---|
|
|
547
|
+
| `/jdi-create <description>` | description (optional) | — | Generate new generic agent/skill in `core/`. For contributors editing JDI source, not consumers |
|
|
548
|
+
|
|
549
|
+
See [COMMANDS.md](COMMANDS.md) for full details.
|
|
550
|
+
|
|
551
|
+
### Adding a specialist mid-project
|
|
552
|
+
|
|
553
|
+
`/jdi-bootstrap` is idempotent but its current "Recreate" mode wipes ALL specialists and regenerates. There is no `--add` mode yet (planned). To add a specialist to an existing multi-stack project today:
|
|
554
|
+
|
|
555
|
+
**Option A — Re-run bootstrap (nukes manual edits):**
|
|
556
|
+
|
|
557
|
+
```
|
|
558
|
+
/jdi-bootstrap
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
When asked "Specialist already exists. Recreate / Keep / Cancel?":
|
|
562
|
+
1. Pick **Recreate**
|
|
563
|
+
2. At the multi-stack question, pick the new total count (e.g. was single → now "Multi 2 pairs")
|
|
564
|
+
3. Provide `stack_label` + `file_glob` for each (existing + new)
|
|
565
|
+
|
|
566
|
+
**Caveat:** any hand-edits in `.jdi/agents/jdi-doer-{slug}.md` or `jdi-reviewer-{slug}.md` get overwritten. If you have customizations, back them up first.
|
|
567
|
+
|
|
568
|
+
**Option B — Manual edit (preserves customizations):**
|
|
569
|
+
|
|
570
|
+
1. Copy an existing specialist as a template:
|
|
571
|
+
```bash
|
|
572
|
+
cp .jdi/agents/jdi-doer-myapp.md .jdi/agents/jdi-doer-myapp-newstack.md
|
|
573
|
+
cp .jdi/agents/jdi-reviewer-myapp.md .jdi/agents/jdi-reviewer-myapp-newstack.md
|
|
574
|
+
```
|
|
575
|
+
2. Edit both:
|
|
576
|
+
- Rename inside `name:` and references
|
|
577
|
+
- Update `scope.file_glob` + `scope.stack_label` frontmatter
|
|
578
|
+
- Update `<role>` block (stack scope + STACK + TEST_FRAMEWORK + COVERAGE_MIN)
|
|
579
|
+
- Update build/test/lint/coverage commands in reviewer gates
|
|
580
|
+
3. Append rows to `.jdi/specialists.md` and `.jdi/reviewers.md`:
|
|
581
|
+
```markdown
|
|
582
|
+
| NewStack | jdi-doer-myapp-newstack | **/*.{ext1,ext2} | executor for files matching glob |
|
|
583
|
+
| jdi-reviewer-myapp-newstack | **/*.{ext1,ext2} | /jdi-verify | yes, if BLOCKED |
|
|
584
|
+
```
|
|
585
|
+
4. Append to `.jdi/registry.md` (audit trail):
|
|
586
|
+
```markdown
|
|
587
|
+
## R-{N+1} ({date})
|
|
588
|
+
**Type:** specialist (doer + reviewer, manual add)
|
|
589
|
+
**Slug:** myapp-newstack
|
|
590
|
+
**Stack:** NewStack
|
|
591
|
+
```
|
|
592
|
+
5. Commit:
|
|
593
|
+
```bash
|
|
594
|
+
git add .jdi/agents/ .jdi/specialists.md .jdi/reviewers.md .jdi/registry.md
|
|
595
|
+
git commit -m "chore(jdi): add NewStack specialist (manual)"
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
From the next `/jdi-plan`, the new specialist routes automatically based on its glob.
|
|
599
|
+
|
|
600
|
+
**Option C — Wait for `/jdi-bootstrap --add`** (planned next minor):
|
|
601
|
+
|
|
602
|
+
```
|
|
603
|
+
/jdi-bootstrap --add # asks 1 new specialist only, preserves existing
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
## Runtimes supported
|
|
607
|
+
|
|
608
|
+
| Runtime | Tier | npx install |
|
|
609
|
+
|---|---|---|
|
|
610
|
+
| Claude Code | tier 1 | `npx jdi-cli install claude` |
|
|
611
|
+
| GitHub Copilot | tier 1 | `npx jdi-cli install copilot` |
|
|
612
|
+
| OpenCode | tier 1 | `npx jdi-cli install opencode` |
|
|
613
|
+
| Google Antigravity | tier 2 | `npx jdi-cli install antigravity --scope user` |
|
|
614
|
+
| All | — | `npx jdi-cli install all` |
|
|
615
|
+
|
|
616
|
+
Default scope: `project`. For user-scope global: `--scope user`.
|
|
617
|
+
|
|
618
|
+
**Power users (shell scripts direct, no Node):**
|
|
619
|
+
|
|
620
|
+
| Runtime | Bash | PowerShell |
|
|
621
|
+
|---|---|---|
|
|
622
|
+
| Claude | `jdi-install.sh claude` | `jdi-install.ps1 -Runtime claude` |
|
|
623
|
+
| OpenCode | `jdi-install.sh opencode --scope user` | `jdi-install.ps1 -Runtime opencode -Scope user` |
|
|
624
|
+
|
|
625
|
+
See [PORTABILITY.md](PORTABILITY.md) for per-runtime mapping details.
|
|
626
|
+
|
|
627
|
+
## Power users — shell scripts direct
|
|
628
|
+
|
|
629
|
+
For containers, minimal environments, or no-Node setups:
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
git clone https://github.com/slipalison/jdi-cli.git
|
|
633
|
+
cd jdi-cli
|
|
634
|
+
|
|
635
|
+
# Build adapters
|
|
636
|
+
./bin/jdi-build.sh # Linux/Mac
|
|
637
|
+
.\bin\jdi-build.ps1 # Windows
|
|
638
|
+
|
|
639
|
+
# Install in your project
|
|
640
|
+
cd /path/to/your/project
|
|
641
|
+
/path/to/jdi-cli/bin/jdi-install.sh claude --scope project
|
|
642
|
+
# Windows: C:\path\to\jdi-cli\bin\jdi-install.ps1 -Runtime claude -Scope project
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
**Windows note:** if PowerShell blocks `.ps1`:
|
|
646
|
+
```powershell
|
|
647
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
648
|
+
# Or per-call:
|
|
649
|
+
pwsh -ExecutionPolicy Bypass -File .\bin\jdi-build.ps1
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
## Philosophy
|
|
653
|
+
|
|
654
|
+
1. **Fresh context per agent** — each spawn has a clean window
|
|
655
|
+
2. **Thin orchestrator** — commands load context, spawn agent, route
|
|
656
|
+
3. **File-based state** — `.jdi/` in md/json, no DB
|
|
657
|
+
4. **Locked decision = immutable** — D-XX never reverses
|
|
658
|
+
5. **1 task = 1 atomic commit**
|
|
659
|
+
6. **Per-project specialists** — doer/reviewer customized, not generic
|
|
660
|
+
7. **Wave-based parallelism** — parallel within wave, sequential between
|
|
661
|
+
8. **Security > Performance > Best Practices** (declared invariant)
|
|
662
|
+
|
|
663
|
+
## Conventions
|
|
664
|
+
|
|
665
|
+
- **Conventional Commits** everywhere. Per-task atomic commits during `/jdi-do`. Orchestrator writes final `chore(state): phase {N} executed`
|
|
666
|
+
- **Code + prompts + docs in English** (was pt-BR before v1.8)
|
|
667
|
+
- Default coverage gate: **80%** unless `PROJECT.md` overrides
|
|
668
|
+
- Adopted brownfield projects enforce coverage only on files created AFTER D-2 boundary commit
|
|
669
|
+
- Git hooks ship as **no-op** — reviewer covers quality gates, users opt-in to hooks themselves
|
|
670
|
+
- Conventional Commits scope = phase slug
|
|
671
|
+
|
|
672
|
+
## Reset (full wipe + restart)
|
|
673
|
+
|
|
674
|
+
```
|
|
675
|
+
/jdi-new --reset "<new description>"
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
Deletes `.jdi/` after confirmation. Recreates from scratch. **CAUTION** — loses DECISIONS.md, ROADMAP.md, etc.
|
|
679
|
+
|
|
680
|
+
## Troubleshooting
|
|
681
|
+
|
|
682
|
+
### Build script fails on Linux/Mac
|
|
683
|
+
|
|
684
|
+
Check deps: `bash --version`, `awk --version`, `sed --version`. Use bash >= 4.
|
|
685
|
+
|
|
686
|
+
### Windows: .sh scripts don't run in PowerShell
|
|
687
|
+
|
|
688
|
+
Use the `.ps1` equivalents:
|
|
689
|
+
- `bin/jdi-build.sh` → `bin/jdi-build.ps1`
|
|
690
|
+
- `bin/jdi-install.sh` → `bin/jdi-install.ps1`
|
|
691
|
+
- `bin/jdi-doctor.sh` → `bin/jdi-doctor.ps1`
|
|
692
|
+
|
|
693
|
+
Or run via Git Bash / WSL.
|
|
694
|
+
|
|
695
|
+
### Windows: PowerShell blocks .ps1 execution
|
|
696
|
+
|
|
697
|
+
```powershell
|
|
698
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
699
|
+
# OR
|
|
700
|
+
pwsh -ExecutionPolicy Bypass -File .\bin\jdi-build.ps1
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
After download, may need `Unblock-File`:
|
|
704
|
+
```powershell
|
|
705
|
+
Get-ChildItem .\bin\*.ps1 | Unblock-File
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
### Windows: git hooks don't fire
|
|
709
|
+
|
|
710
|
+
Hooks are bash scripts. Windows needs Git for Windows (ships `bash.exe`). Without it, hooks are silently ignored.
|
|
711
|
+
|
|
712
|
+
JDI default: hooks are no-op. If you don't customize, this blocks nothing.
|
|
713
|
+
|
|
714
|
+
### Slash command doesn't appear in runtime
|
|
715
|
+
|
|
716
|
+
```bash
|
|
717
|
+
ls .claude/commands/ # or .github/prompts/, .opencode/commands/
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
If empty, reinstall:
|
|
721
|
+
```bash
|
|
722
|
+
npx jdi-cli install <runtime> --scope project
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
### Specialist not generated by /jdi-bootstrap
|
|
726
|
+
|
|
727
|
+
Check `PROJECT.md` has stack + code-design. Edit manually if missing, then re-run bootstrap (idempotent — prompts before overwrite):
|
|
728
|
+
```
|
|
729
|
+
/jdi-bootstrap
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
### Phase BLOCKED in /jdi-verify, can't /jdi-ship
|
|
733
|
+
|
|
734
|
+
REVIEW.md lists blockers. Fix code, run `/jdi-do <N>` again (re-executes affected tasks), then `/jdi-verify <N>`. When verdict != BLOCKED, ship unblocks.
|
|
735
|
+
|
|
736
|
+
### Token budget too high in large phase
|
|
737
|
+
|
|
738
|
+
PLAN.md with >8 tasks indicates phase is too large. Split:
|
|
739
|
+
1. Edit ROADMAP.md, split current phase into 2 or 3
|
|
740
|
+
2. Run `/jdi-discuss <N>` for each (smaller CONTEXT.md each)
|
|
741
|
+
|
|
742
|
+
### MCP playwright doesn't appear after install
|
|
743
|
+
|
|
744
|
+
Restart the runtime. For Claude Code: `/mcp` to verify. For OpenCode: `opencode reload`. For Copilot: VS Code palette `MCP: List Servers`. For Antigravity: restart Antigravity.
|
|
745
|
+
|
|
746
|
+
## See also
|
|
747
|
+
|
|
748
|
+
- [ARCHITECTURE.md](ARCHITECTURE.md) — technical overview
|
|
749
|
+
- [AGENTS.md](AGENTS.md) — agents detailed
|
|
750
|
+
- [COMMANDS.md](COMMANDS.md) — commands detailed
|
|
751
|
+
- [MEMORY.md](MEMORY.md) — `.jdi/` schema
|
|
752
|
+
- [EXTENSION.md](EXTENSION.md) — create specialists/agents/skills
|
|
753
|
+
- [CREATE.md](CREATE.md) + [CREATE-EXAMPLE.md](CREATE-EXAMPLE.md) — `/jdi-create` walkthrough
|
|
754
|
+
- [PORTABILITY.md](PORTABILITY.md) — multi-runtime details
|
|
755
|
+
|
|
756
|
+
## License
|
|
757
|
+
|
|
758
|
+
MIT.
|
|
759
|
+
|
|
760
|
+
## Contributing
|
|
761
|
+
|
|
762
|
+
Run `/jdi-create` inside the JDI source repo to add generic agents/skills. It runs against `core/templates/{agent,skill}.md` with automatic integration.
|
|
763
|
+
|
|
764
|
+
Pull requests: describe the problem (who needs this? how many users?) before adding a new agent. JDI grows **carefully** — soft cap: 6 core agents, 25 core skills. See [EXTENSION.md](EXTENSION.md).
|
|
765
|
+
|
|
766
|
+
## Publishing to npm (maintainers)
|
|
767
|
+
|
|
768
|
+
Push a `v*.*.*` tag and GitHub Actions handles the rest (`.github/workflows/npm-publish.yml`):
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
# 1. Bump version in package.json
|
|
772
|
+
# 2. Rebuild runtimes/
|
|
773
|
+
node bin/jdi.js build
|
|
774
|
+
|
|
775
|
+
# 3. Commit + push main
|
|
776
|
+
git add -A && git commit -m "chore(release): X.Y.Z"
|
|
777
|
+
git push origin main
|
|
778
|
+
|
|
779
|
+
# 4. Tag + push tag (triggers workflow)
|
|
780
|
+
git tag -a vX.Y.Z -m "vX.Y.Z — short description"
|
|
781
|
+
git push origin vX.Y.Z
|
|
782
|
+
|
|
783
|
+
# 5. Watch
|
|
784
|
+
gh run watch
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
Workflow verifies tag matches `package.json`, runs `npm publish --provenance --access public`. Provenance badge appears on the npm page via sigstore OIDC.
|
|
788
|
+
|
|
789
|
+
`package.json` `files:` controls what ships in the tarball.
|