devloom 1.0.0 → 1.2.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/.ai/core.dsl +44 -0
- package/.ai/skills.dsl +39 -0
- package/.ai/verify.dsl +97 -0
- package/.ai/workflow.dsl +81 -0
- package/.opencode/themes/devloom-night-owl.json +103 -0
- package/GUIDE.md +572 -115
- package/README.md +583 -109
- package/SECURITY.md +93 -0
- package/agents/devloom-developer-flash.md +31 -0
- package/agents/devloom-developer-senior.md +32 -0
- package/agents/devloom-developer.md +21 -55
- package/agents/devloom-documenter-flash.md +28 -0
- package/agents/devloom-documenter.md +17 -56
- package/agents/devloom-orchestrator.md +236 -356
- package/agents/devloom-planner-flash.md +34 -0
- package/agents/devloom-planner-senior.md +35 -0
- package/agents/devloom-planner.md +36 -0
- package/agents/devloom-qa-flash.md +32 -0
- package/agents/devloom-qa.md +21 -83
- package/agents/devloom-security-senior.md +35 -0
- package/agents/devloom-security.md +34 -0
- package/agents/devloom-verifier.md +33 -0
- package/agents/devloom-vision.md +113 -0
- package/agents/devloom-visual-critic.md +102 -0
- package/agents/devloom-visual-director.md +84 -0
- package/commands/devloom-agents.md +49 -0
- package/commands/devloom-auto.md +11 -0
- package/commands/devloom-context.md +82 -0
- package/commands/devloom-deepseek-mimo.md +11 -0
- package/commands/devloom-deepseek.md +11 -0
- package/commands/devloom-free.md +11 -0
- package/commands/devloom-go-economy.md +11 -0
- package/commands/devloom-go-flash.md +11 -0
- package/commands/devloom-go.md +11 -0
- package/commands/devloom-init.md +28 -50
- package/commands/devloom-loop-status.md +25 -0
- package/commands/devloom-loop.md +36 -0
- package/commands/devloom-mimo.md +11 -0
- package/commands/devloom-plan.md +13 -0
- package/commands/devloom-refresh.md +22 -0
- package/commands/devloom-resume.md +30 -49
- package/commands/devloom-save.md +69 -0
- package/commands/devloom-status.md +9 -18
- package/commands/devloom.md +99 -67
- package/dist/agents.d.ts +30 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +139 -0
- package/dist/agents.js.map +1 -0
- package/dist/bootstrap.d.ts +56 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +116 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/constraints.d.ts +5 -0
- package/dist/constraints.d.ts.map +1 -0
- package/dist/constraints.js +45 -0
- package/dist/constraints.js.map +1 -0
- package/dist/context.d.ts +42 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +636 -0
- package/dist/context.js.map +1 -0
- package/dist/guard.d.ts +19 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +418 -0
- package/dist/guard.js.map +1 -0
- package/dist/loop.d.ts +64 -0
- package/dist/loop.d.ts.map +1 -0
- package/dist/loop.js +164 -0
- package/dist/loop.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +101 -1
- package/dist/plugin.js.map +1 -1
- package/dist/tui-agents.d.ts +61 -0
- package/dist/tui-agents.d.ts.map +1 -0
- package/dist/tui-agents.js +89 -0
- package/dist/tui-agents.js.map +1 -0
- package/dist/tui.d.ts +6 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +92 -0
- package/dist/tui.js.map +1 -0
- package/dist/worktree.d.ts +46 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +272 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +46 -6
- package/patterns/changelog-drafter.md +38 -0
- package/patterns/ci-sweeper.md +40 -0
- package/patterns/daily-triage.md +37 -0
- package/patterns/dependency-sweeper.md +40 -0
- package/patterns/design-audit.md +63 -0
- package/patterns/issue-triage.md +37 -0
- package/patterns/post-merge-cleanup.md +34 -0
- package/patterns/pr-babysitter.md +37 -0
- package/patterns/registry.yaml +52 -0
- package/postinstall.mjs +264 -64
- package/project/README.md +29 -0
- package/protocol/agent-contracts.md +27 -0
- package/protocol/artifact-system.md +53 -0
- package/protocol/model-routing.md +194 -0
- package/protocol/orchestrator-core.md +43 -0
- package/protocol/project-system.md +45 -0
- package/protocol/rules.md +18 -0
- package/protocol/verification-policy.md +48 -0
- package/scripts/briefing.mjs +192 -0
- package/scripts/loop-run.mjs +205 -0
- package/scripts/model-capabilities.mjs +194 -0
- package/scripts/plugin-cache.mjs +269 -0
- package/scripts/profile.mjs +755 -0
- package/scripts/visual-benchmark.mjs +149 -0
- package/scripts/worktree.mjs +445 -0
- package/skills/build/development.md +33 -0
- package/skills/build/live-docs.md +38 -0
- package/skills/build/simplify.md +50 -0
- package/skills/build/vision-analysis.md +98 -0
- package/skills/design/app-design.md +31 -0
- package/skills/design/design-grounding.md +30 -0
- package/skills/design/design-system.md +27 -0
- package/skills/design/game-design.md +35 -0
- package/skills/design/motion-design.md +34 -0
- package/skills/design/visual-direction.md +32 -0
- package/skills/design/web-design.md +33 -0
- package/skills/loop/changelog-drafter.md +32 -0
- package/skills/loop/ci-sweeper.md +24 -0
- package/skills/loop/constraints.md +21 -0
- package/skills/loop/dependency-sweeper.md +24 -0
- package/skills/loop/design-audit.md +67 -0
- package/skills/loop/issue-triage.md +27 -0
- package/skills/loop/post-merge-cleanup.md +24 -0
- package/skills/loop/pr-babysitter.md +26 -0
- package/skills/loop/triage.md +25 -0
- package/skills/loop/verifier.md +20 -0
- package/skills/meta/skill-discovery.md +23 -0
- package/skills/plan/planning.md +27 -0
- package/skills/plan/verification-planning.md +40 -0
- package/skills/review/security-review.md +63 -0
- package/skills/ship/documentation.md +11 -0
- package/skills/verify/app-verification.md +19 -0
- package/skills/verify/quality-assurance.md +17 -0
- package/skills/verify/visual-critique.md +30 -0
- package/skills/verify/visual-quality-gate.md +29 -0
- package/skills/verify/visual-regression.md +25 -0
- package/agents/devloom-analyst.md +0 -83
- package/agents/devloom-architect.md +0 -88
package/GUIDE.md
CHANGED
|
@@ -29,7 +29,7 @@ and skill files to your OpenCode global config directory:
|
|
|
29
29
|
| OS | Config directory |
|
|
30
30
|
|---|---|
|
|
31
31
|
| Linux | `~/.config/opencode/` |
|
|
32
|
-
| macOS |
|
|
32
|
+
| macOS | `~/.config/opencode/` |
|
|
33
33
|
| Windows | `%APPDATA%\opencode\` |
|
|
34
34
|
|
|
35
35
|
Expected output:
|
|
@@ -40,20 +40,39 @@ DevLoom — post-install
|
|
|
40
40
|
Config dir : /home/you/.config/opencode
|
|
41
41
|
Agents dir : /home/you/.config/opencode/agents
|
|
42
42
|
Commands dir: /home/you/.config/opencode/commands
|
|
43
|
+
AI dir : /home/you/.config/opencode/devloom-ai
|
|
43
44
|
|
|
44
45
|
Installing agents:
|
|
45
46
|
- Agent: devloom-orchestrator
|
|
46
|
-
- Agent: devloom-
|
|
47
|
-
- Agent: devloom-
|
|
48
|
-
- Agent: devloom-
|
|
49
|
-
- Agent: devloom-
|
|
50
|
-
- Agent: devloom-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
- Agent: devloom-planner (+ -senior, -flash)
|
|
48
|
+
- Agent: devloom-developer (+ -senior, -flash)
|
|
49
|
+
- Agent: devloom-qa (+ -flash)
|
|
50
|
+
- Agent: devloom-verifier
|
|
51
|
+
- Agent: devloom-security (+ -senior)
|
|
52
|
+
- Agent: devloom-documenter (+ -flash)
|
|
53
|
+
- Agent: devloom-vision
|
|
54
|
+
- Agent: devloom-visual-director
|
|
55
|
+
- Agent: devloom-visual-critic
|
|
56
|
+
|
|
57
|
+
Installing commands (17 total):
|
|
58
|
+
- /devloom, /devloom-init, /devloom-status, /devloom-resume
|
|
59
|
+
- /devloom-save, /devloom-agents
|
|
60
|
+
- /devloom-go, /devloom-go-economy, /devloom-go-flash, /devloom-deepseek
|
|
61
|
+
- /devloom-mimo, /devloom-deepseek-mimo, /devloom-free, /devloom-auto
|
|
62
|
+
- /devloom-plan, /devloom-context, /devloom-loop, /devloom-loop-status
|
|
63
|
+
|
|
64
|
+
Installing skills (21 total):
|
|
65
|
+
- plan/{planning, verification-planning}
|
|
66
|
+
- build/{development, simplify, vision-analysis, live-docs}
|
|
67
|
+
- verify/{quality-assurance, app-verification, visual-critique, visual-quality-gate, visual-regression}
|
|
68
|
+
- design/{visual-direction, design-grounding, web-design, app-design, game-design, motion-design, design-system}
|
|
69
|
+
- review/security-review
|
|
70
|
+
- ship/documentation
|
|
71
|
+
- meta/skill-discovery
|
|
72
|
+
- loop/* (10 loop engineering skills)
|
|
73
|
+
|
|
74
|
+
Installing theme:
|
|
75
|
+
- DevLoom Night Owl (auto-activated)
|
|
57
76
|
|
|
58
77
|
DevLoom installed successfully!
|
|
59
78
|
```
|
|
@@ -89,6 +108,8 @@ project without a global install:
|
|
|
89
108
|
```
|
|
90
109
|
|
|
91
110
|
OpenCode loads it automatically when you open a session in that directory.
|
|
111
|
+
On load, the plugin bootstraps `.opencode/devloom/project/` and normalizes any
|
|
112
|
+
legacy DevLoom workspace files into the compact canonical format.
|
|
92
113
|
|
|
93
114
|
---
|
|
94
115
|
|
|
@@ -97,10 +118,20 @@ OpenCode loads it automatically when you open a session in that directory.
|
|
|
97
118
|
Start OpenCode and open the command palette by typing `/`:
|
|
98
119
|
|
|
99
120
|
```
|
|
100
|
-
/devloom
|
|
101
|
-
/devloom-status
|
|
102
|
-
/devloom-resume
|
|
103
|
-
/devloom-init
|
|
121
|
+
/devloom → Weave a full feature from a single prompt
|
|
122
|
+
/devloom-status → Show current weaving progress
|
|
123
|
+
/devloom-resume → Resume an interrupted execution
|
|
124
|
+
/devloom-init → Initialize a project for DevLoom
|
|
125
|
+
/devloom-save → Persist current state and pause for the next command
|
|
126
|
+
/devloom-agents → List all agents and their current model assignments
|
|
127
|
+
/devloom-go → Switch to Go premium profile
|
|
128
|
+
/devloom-go-economy → Switch to Go economy profile
|
|
129
|
+
/devloom-go-flash → Switch to Go flash profile (cheapest paid)
|
|
130
|
+
/devloom-mimo → Switch to the MiMo V2.6 Flash profile (multimodal all-role stack)
|
|
131
|
+
/devloom-deepseek-mimo → Switch to the hybrid profile (DeepSeek V4.1 general, MiMo V2.6 visual)
|
|
132
|
+
/devloom-free → Switch to free-tier profile
|
|
133
|
+
/devloom-auto → Auto-detect best profile for your environment
|
|
134
|
+
/devloom-loop → Start/stop loop engineering patterns
|
|
104
135
|
```
|
|
105
136
|
|
|
106
137
|
Or check installed files directly:
|
|
@@ -109,14 +140,23 @@ Or check installed files directly:
|
|
|
109
140
|
# Linux / macOS
|
|
110
141
|
ls ~/.config/opencode/agents/ | grep devloom
|
|
111
142
|
|
|
112
|
-
# Expected:
|
|
113
|
-
devloom-analyst.md
|
|
114
|
-
devloom-architect.md
|
|
115
|
-
devloom-developer.md
|
|
116
|
-
devloom-documenter.md
|
|
143
|
+
# Expected (17 agents):
|
|
117
144
|
devloom-orchestrator.md
|
|
118
|
-
devloom-
|
|
119
|
-
|
|
145
|
+
devloom-planner.md devloom-planner-senior.md devloom-planner-flash.md
|
|
146
|
+
devloom-developer.md devloom-developer-senior.md devloom-developer-flash.md
|
|
147
|
+
devloom-qa.md devloom-qa-flash.md
|
|
148
|
+
devloom-verifier.md
|
|
149
|
+
devloom-security.md devloom-security-senior.md
|
|
150
|
+
devloom-documenter.md devloom-documenter-flash.md
|
|
151
|
+
devloom-vision.md
|
|
152
|
+
devloom-visual-director.md devloom-visual-critic.md
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
All installed `devloom-*` subagents are callable by `devloom-orchestrator`
|
|
156
|
+
during normal autonomous runs. You may invoke them manually, but they are not
|
|
157
|
+
restricted to manual-only use.
|
|
158
|
+
The expected behavior is delegation by default: the orchestrator routes and
|
|
159
|
+
persists state, while the matching subagent executes each specialist phase.
|
|
120
160
|
|
|
121
161
|
---
|
|
122
162
|
|
|
@@ -124,45 +164,159 @@ devloom-qa.md
|
|
|
124
164
|
|
|
125
165
|
### Default (no config)
|
|
126
166
|
|
|
127
|
-
All agents default to `opencode/
|
|
167
|
+
All agents default to the best available free model via per-role candidate chains — currently led by `opencode/big-pickle` (orchestrator), `opencode/nemotron-3-ultra-free` (planner), `opencode/big-pickle` (developer/QA/verifier/security) and `opencode/muse-spark-1.2-contributor-free` (documenter).
|
|
168
|
+
|
|
169
|
+
### Model Routing — Profiles
|
|
128
170
|
|
|
129
|
-
|
|
171
|
+
DevLoom provides model profiles that trade off quality vs cost:
|
|
130
172
|
|
|
131
|
-
|
|
173
|
+
| Profile | Use case | Tier |
|
|
174
|
+
|---|---|---|
|
|
175
|
+
| `go` | Production-grade builds, maximum quality | Go (paid) |
|
|
176
|
+
| `go-economy` | Good quality at lower cost | Go (paid) |
|
|
177
|
+
| `deepseek` | DeepSeek-only stack | Go (paid) |
|
|
178
|
+
| `glm` | GLM-only stack | Go (paid) |
|
|
179
|
+
| `go-flash` | Maximum throughput, minimum cost | Go (paid) |
|
|
180
|
+
| `deepseek-mimo` | Fast general work (DeepSeek V4.1), MiMo V2.6 for graphical/complex roles | Go (paid) |
|
|
181
|
+
| `mimo` | Multimodal all-role stack incl. vision | Go/MiMo |
|
|
182
|
+
| `free` | Zero-cost experimentation | Free |
|
|
183
|
+
|
|
184
|
+
The profile determines which model is assigned to each of the 10 agent roles.
|
|
185
|
+
Premium roles (planner, QA, verifier, security) get stronger models; the
|
|
186
|
+
`vision` and `visual-critic` roles always get a multimodal model regardless of
|
|
187
|
+
profile.
|
|
188
|
+
|
|
189
|
+
#### go (max quality)
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"models": {
|
|
194
|
+
"orchestrator": "opencode-go/deepseek-v4-flash",
|
|
195
|
+
"planner": "opencode-go/qwen3.7-max",
|
|
196
|
+
"developer": "opencode-go/kimi-k2.7-code",
|
|
197
|
+
"qa": "opencode-go/deepseek-v4-pro",
|
|
198
|
+
"verifier": "opencode-go/deepseek-v4-pro",
|
|
199
|
+
"security": "opencode-go/glm-5.2",
|
|
200
|
+
"documenter": "opencode-go/qwen3.7-plus",
|
|
201
|
+
"vision": "opencode-go/qwen3.6-plus",
|
|
202
|
+
"visual-director": "opencode-go/glm-5.2",
|
|
203
|
+
"visual-critic": "opencode-go/glm-5.3-flash"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
#### go-economy
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"models": {
|
|
213
|
+
"orchestrator": "opencode-go/deepseek-v4-flash",
|
|
214
|
+
"planner": "opencode-go/deepseek-v4-pro",
|
|
215
|
+
"developer": "opencode-go/deepseek-v4-pro",
|
|
216
|
+
"qa": "opencode-go/deepseek-v4-flash",
|
|
217
|
+
"verifier": "opencode-go/deepseek-v4-flash",
|
|
218
|
+
"security": "opencode-go/deepseek-v4-pro",
|
|
219
|
+
"documenter": "opencode-go/qwen3.7-plus",
|
|
220
|
+
"vision": "opencode-go/qwen3.6-plus",
|
|
221
|
+
"visual-director": "opencode-go/deepseek-v4-pro",
|
|
222
|
+
"visual-critic": "opencode-go/glm-5.3-flash"
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
#### go-flash
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"models": {
|
|
232
|
+
"orchestrator": "opencode-go/deepseek-v4-flash",
|
|
233
|
+
"planner": "opencode-go/deepseek-v4-flash",
|
|
234
|
+
"developer": "opencode-go/deepseek-v4-flash",
|
|
235
|
+
"qa": "opencode-go/deepseek-v4-flash",
|
|
236
|
+
"verifier": "opencode-go/deepseek-v4-flash",
|
|
237
|
+
"security": "opencode-go/deepseek-v4-flash",
|
|
238
|
+
"documenter": "opencode-go/deepseek-v4-flash",
|
|
239
|
+
"vision": "opencode-go/qwen3.6-plus",
|
|
240
|
+
"visual-director": "opencode-go/deepseek-v4-flash",
|
|
241
|
+
"visual-critic": "opencode-go/glm-5.3-flash"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### deepseek
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"models": {
|
|
251
|
+
"orchestrator": "opencode-go/deepseek-v4-pro",
|
|
252
|
+
"planner": "opencode-go/deepseek-v4-pro",
|
|
253
|
+
"developer": "opencode-go/deepseek-v4-pro",
|
|
254
|
+
"qa": "opencode-go/deepseek-v4-pro",
|
|
255
|
+
"verifier": "opencode-go/deepseek-v4-flash",
|
|
256
|
+
"security": "opencode-go/deepseek-v4-pro",
|
|
257
|
+
"documenter": "opencode-go/deepseek-v4-flash",
|
|
258
|
+
"vision": "opencode-go/deepseek-v4-flash-vision-exp",
|
|
259
|
+
"visual-director": "opencode-go/deepseek-v4-pro",
|
|
260
|
+
"visual-critic": "opencode-go/deepseek-v4-flash-vision-exp"
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### free
|
|
132
266
|
|
|
133
267
|
```json
|
|
134
268
|
{
|
|
135
269
|
"models": {
|
|
136
270
|
"orchestrator": "opencode/big-pickle",
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
271
|
+
"planner": "opencode/nemotron-3-ultra-free",
|
|
272
|
+
"developer": "opencode/big-pickle",
|
|
273
|
+
"qa": "opencode/big-pickle",
|
|
274
|
+
"verifier": "opencode/big-pickle",
|
|
275
|
+
"security": "opencode/big-pickle",
|
|
276
|
+
"documenter": "opencode/muse-spark-1.2-contributor-free",
|
|
277
|
+
"vision": "opencode/mimo-v2.5-free",
|
|
278
|
+
"visual-director": "opencode/mimo-v2.5-free",
|
|
279
|
+
"visual-critic": "opencode/mimo-v2.5-free"
|
|
142
280
|
}
|
|
143
281
|
}
|
|
144
282
|
```
|
|
145
283
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
284
|
+
### Complexity tiers (name-based agent selection)
|
|
285
|
+
|
|
286
|
+
The orchestrator classifies every prompt by complexity and calls the correct
|
|
287
|
+
variant sub-agent by name — no global state switching. Each variant has a fixed
|
|
288
|
+
model, so worktrees never conflict.
|
|
149
289
|
|
|
150
|
-
|
|
290
|
+
| Tier | Classification | Agent Variants | Model |
|
|
291
|
+
|------|---------------|---------------|-------|
|
|
292
|
+
| **senior** | Complex feature, architecture, debugging, security audit | `-senior` suffix (planner, developer, security) | GLM-5.2, Kimi K3 |
|
|
293
|
+
| **standard** | Everything else (default) | Base agents (no suffix) | deepseek-v4-flash, qwen3.7-max, kimi-k2.7-code |
|
|
294
|
+
| **senior developer** | (when senior tier is selected) | devloom-developer-senior | `kimi-k3` |
|
|
151
295
|
|
|
152
|
-
|
|
296
|
+
### Per-project override
|
|
297
|
+
|
|
298
|
+
Create `.opencode/devloom/config.json` in your project root with your chosen profile above. Every DevLoom command (`/devloom`, `/devloom-init`, `/devloom-resume`) reads this file before invoking the orchestrator and applies the models to the global agent files. Local config always wins.
|
|
299
|
+
|
|
300
|
+
You can also override individual agents by providing a partial `models` map — only specified roles are changed, others keep their existing assignment.
|
|
301
|
+
|
|
302
|
+
### Provider-agnostic model IDs
|
|
303
|
+
|
|
304
|
+
Model IDs are validated as `provider/model` — any OpenCode provider works, and
|
|
305
|
+
the model segment may itself contain slashes (e.g. `lmstudio/google/gemma-...`):
|
|
153
306
|
|
|
154
307
|
| Correct | Wrong |
|
|
155
308
|
|---|---|
|
|
156
|
-
| `
|
|
309
|
+
| `mimo/mimo-v2.6-flash` | `mimo-v2.6-flash` |
|
|
157
310
|
| `opencode-go/deepseek-v4-pro` | `deepseek-v4-pro` |
|
|
158
311
|
|
|
159
|
-
|
|
312
|
+
Availability is checked against `opencode models`: a well-formed but
|
|
313
|
+
unavailable model still fails validation. Bare ids without a provider
|
|
314
|
+
(`deepseek-v4-flash`, `invalid-no-provider`) are invalid. Unavailable models
|
|
315
|
+
fail validation or fall back per profile policy.
|
|
160
316
|
|
|
161
317
|
### First-run interactive setup
|
|
162
318
|
|
|
163
|
-
If no `config.json` exists, Phase 0 detects available models (`opencode models`),
|
|
164
|
-
asks whether to use **Free** (`opencode/`) or **Go** (`opencode-go/`) tier,
|
|
165
|
-
then assigns the best available model per agent role.
|
|
319
|
+
If no `config.json` exists, Phase 0 detects available models (`opencode models`), asks which profile to use (**go**, **go-economy**, **mimo**, or **free**), then assigns models per agent role matching the selected profile.
|
|
166
320
|
|
|
167
321
|
### Available models
|
|
168
322
|
|
|
@@ -170,39 +324,83 @@ then assigns the best available model per agent role.
|
|
|
170
324
|
|
|
171
325
|
| Model string |
|
|
172
326
|
|---|
|
|
173
|
-
| `opencode/deepseek-v4-flash-free` |
|
|
174
|
-
| `opencode/minimax-m2.5-free` |
|
|
175
|
-
| `opencode/nemotron-3-super-free` |
|
|
176
327
|
| `opencode/big-pickle` |
|
|
328
|
+
| `opencode/ling-3.0-flash-fin-free` |
|
|
329
|
+
| `opencode/mimo-v2.5-free` |
|
|
330
|
+
| `opencode/muse-spark-1.2-contributor-free` |
|
|
331
|
+
| `opencode/muse-spark-1.3-contributor-free` |
|
|
332
|
+
| `opencode/nemotron-3-ultra-free` |
|
|
333
|
+
| `opencode/nemotron-3.5-lightning-free` |
|
|
177
334
|
|
|
178
|
-
**Go tier** (`opencode-go/` — higher quality):
|
|
335
|
+
**Go tier** (`opencode-go/` — higher quality, paid):
|
|
179
336
|
|
|
180
337
|
| Model string |
|
|
181
338
|
|---|
|
|
182
|
-
| `opencode-go/deepseek-v4-pro` |
|
|
183
|
-
| `opencode-go/deepseek-v4-flash` |
|
|
184
|
-
| `opencode-go/kimi-k2.5` |
|
|
185
|
-
| `opencode-go/kimi-k2.6` |
|
|
186
339
|
| `opencode-go/glm-5` |
|
|
187
340
|
| `opencode-go/glm-5.1` |
|
|
341
|
+
| `opencode-go/kimi-k2.5` |
|
|
342
|
+
| `opencode-go/kimi-k2.6` |
|
|
343
|
+
| `opencode-go/deepseek-v4-pro` |
|
|
344
|
+
| `opencode-go/deepseek-v4-flash` |
|
|
188
345
|
| `opencode-go/minimax-m2.5` |
|
|
189
346
|
| `opencode-go/minimax-m2.7` |
|
|
347
|
+
| `opencode-go/minimax-m3` |
|
|
190
348
|
| `opencode-go/mimo-v2.5` |
|
|
191
349
|
| `opencode-go/mimo-v2.5-pro` |
|
|
192
|
-
| `opencode-go/qwen3.5-plus` |
|
|
193
350
|
| `opencode-go/qwen3.6-plus` |
|
|
351
|
+
| `opencode-go/qwen3.7-plus` |
|
|
352
|
+
| `opencode-go/qwen3.7-max` |
|
|
353
|
+
|
|
354
|
+
### Checking available models
|
|
194
355
|
|
|
195
|
-
Run `opencode models` to see
|
|
356
|
+
Run `opencode models` in your terminal to see which models are currently available in your environment. Available models vary by region and subscription tier.
|
|
196
357
|
|
|
197
358
|
### Global override (advanced)
|
|
198
359
|
|
|
199
360
|
Edit the agent files at `~/.config/opencode/agents/` directly:
|
|
200
361
|
|
|
201
362
|
```bash
|
|
202
|
-
sed -i 's|^model:.*|model: opencode/deepseek-v4-
|
|
363
|
+
sed -i 's|^model:.*|model: opencode-go/deepseek-v4-pro|' \
|
|
203
364
|
~/.config/opencode/agents/devloom-*.md
|
|
204
365
|
```
|
|
205
366
|
|
|
367
|
+
### Updating global agents after config change
|
|
368
|
+
|
|
369
|
+
After modifying `.opencode/devloom/config.json` (e.g., switching profiles or overriding individual models), run `/devloom-init` or start a new weave with `/devloom`. DevLoom re-reads the config and updates the global agent files at `~/.config/opencode/agents/devloom-*.md` automatically.
|
|
370
|
+
|
|
371
|
+
If you prefer a manual refresh:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
node $(npm root -g)/devloom/postinstall.mjs
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
This re-installs agent files from the installed package. Then start a weave to apply your config models.
|
|
378
|
+
|
|
379
|
+
### Profile and agents in the sidebar
|
|
380
|
+
|
|
381
|
+
OpenCode installs npm plugins into `~/.cache/opencode/packages/` with
|
|
382
|
+
`ignoreScripts`, so the DevLoom plugin code there can go stale. When it does,
|
|
383
|
+
the plugin's `config` hook never runs and the sidebar does not reflect the
|
|
384
|
+
profile or the injected agent configs. DevLoom keeps that cache in sync:
|
|
385
|
+
|
|
386
|
+
- The package `postinstall` and the `/devloom-refresh` command re-copy the
|
|
387
|
+
current plugin code (the hook that injects all 17 agents + the active
|
|
388
|
+
profile) into the OpenCode plugin cache. The refresh rebuilds `dist/` from
|
|
389
|
+
source first, so the cache never receives stale compiled code.
|
|
390
|
+
- The sidebar header shows the active profile (`DevLoom - free`, `DevLoom - go`,
|
|
391
|
+
...) and every agent row shows its resolved model (e.g.
|
|
392
|
+
`orchestrator: opencode/big-pickle`). The active profile is also
|
|
393
|
+
visible on the orchestrator agent description:
|
|
394
|
+
`DevLoom Orchestrator: autonomous multi-agent delivery (profile: go-flash)`.
|
|
395
|
+
With a senior tier override the label is extended to
|
|
396
|
+
`(profile: go, tier: senior)`.
|
|
397
|
+
- The sidebar shows only the 10 base agents — all `-flash` and `-senior`
|
|
398
|
+
variants are hidden for every profile. All 17 agents stay registered, so the
|
|
399
|
+
orchestrator can still delegate to hidden variants via `task()`.
|
|
400
|
+
- After installing/updating DevLoom or switching profiles, **restart opencode**
|
|
401
|
+
(or continue with `opencode --continue`) to see the updated profile and
|
|
402
|
+
agents in the sidebar.
|
|
403
|
+
|
|
206
404
|
---
|
|
207
405
|
|
|
208
406
|
## Usage
|
|
@@ -216,6 +414,10 @@ cd /path/to/your/project
|
|
|
216
414
|
opencode
|
|
217
415
|
```
|
|
218
416
|
|
|
417
|
+
If this is the first time DevLoom is used in the project, or the project has an
|
|
418
|
+
older DevLoom workspace, plugin startup normalizes `.opencode/devloom/project/`
|
|
419
|
+
before command execution.
|
|
420
|
+
|
|
219
421
|
#### Option 1 — Slash command (recommended)
|
|
220
422
|
|
|
221
423
|
```
|
|
@@ -238,7 +440,12 @@ opencode run "/devloom Add OpenTelemetry tracing to all HTTP handlers"
|
|
|
238
440
|
|
|
239
441
|
### What happens after you submit the prompt
|
|
240
442
|
|
|
241
|
-
|
|
443
|
+
The orchestrator first **triages** the prompt and picks the minimal agent chain
|
|
444
|
+
for the intent (bug → developer-fix>qa-regression; docs → planner>documenter;
|
|
445
|
+
small change → developer>qa; etc. — see `workflow.dsl` CHAINS). Verifier
|
|
446
|
+
agents are added only when the work touches their surface (UI, API, CRUD/data
|
|
447
|
+
exposure, user flows). The full sequence below runs only for a feature that
|
|
448
|
+
touches all surfaces:
|
|
242
449
|
|
|
243
450
|
**Phase 0 — Model Setup**
|
|
244
451
|
|
|
@@ -248,29 +455,77 @@ preference (Free or Go tier), and assigns models per agent role.
|
|
|
248
455
|
|
|
249
456
|
**Phase 1 — Understand & Plan**
|
|
250
457
|
|
|
251
|
-
The
|
|
252
|
-
|
|
253
|
-
|
|
458
|
+
The Planner explores your codebase, writes `.opencode/devloom/requirements.md`,
|
|
459
|
+
then a CleanArch `.opencode/devloom/plan.md` with an ordered, dependency-resolved
|
|
460
|
+
task list (it can run REQ-only, PLAN-only, or both).
|
|
461
|
+
Before phase routing, the orchestrator appends the current user prompt as the
|
|
462
|
+
last item in `.opencode/devloom/project/tasks/TODO.md`, loads relevant memory
|
|
463
|
+
and skills, and keeps ticket/todo/plan artifacts synchronized.
|
|
254
464
|
|
|
255
|
-
**Phase 2 —
|
|
465
|
+
**Phase 2 — Implementation & QA Loop**
|
|
256
466
|
|
|
257
467
|
For each task in the plan:
|
|
258
|
-
1. The Developer implements the code.
|
|
259
|
-
2. QA writes tests, runs the linter, runs the full test suite,
|
|
260
|
-
`QA_PASS` or `QA_FAIL`.
|
|
261
|
-
3. On failure: the Orchestrator
|
|
262
|
-
|
|
263
|
-
|
|
468
|
+
1. The Developer implements the code (TDD, SOLID, clean architecture).
|
|
469
|
+
2. QA writes tests, runs the linter, runs the full test suite, reviews the code,
|
|
470
|
+
runs targeted regression, and reports `QA_PASS` or `QA_FAIL`.
|
|
471
|
+
3. On failure: the Orchestrator routes the defect back to the Developer for a
|
|
472
|
+
root-cause fix (no workarounds), then QA regression. Up to 3 fix cycles per
|
|
473
|
+
defect, then the ticket is marked blocked.
|
|
264
474
|
4. The Orchestrator marks the task `[x]` in `.opencode/devloom/plan.md`.
|
|
265
475
|
|
|
266
|
-
**
|
|
476
|
+
**Runtime verification (only when the change touches a surface)**
|
|
477
|
+
|
|
478
|
+
A single Verifier agent runs the requested scope(s) against the running app —
|
|
479
|
+
the running app is the source of truth, not specs. Scopes:
|
|
480
|
+
- `explore` — discover routes, pages, buttons, forms, modals, tables.
|
|
481
|
+
- `route` + `dom` — HTTP status, content, console errors, DOM integrity.
|
|
482
|
+
- `form` — valid/invalid/boundary submissions, validation, loading/error/success.
|
|
483
|
+
- `a11y` — ARIA, labels, keyboard nav, focus, contrast, semantic HTML.
|
|
484
|
+
- `api` + `contract` — auth, validation, schema, status codes; runtime vs OpenAPI.
|
|
485
|
+
- `journey` + `state` — generated user flows and state-transition coverage.
|
|
486
|
+
|
|
487
|
+
The orchestrator adds only the scopes the change requires (UI → route/form/a11y,
|
|
488
|
+
API → api/contract, user flow → journey/state).
|
|
489
|
+
|
|
490
|
+
**Security (mandatory on exposure)**
|
|
491
|
+
|
|
492
|
+
The `devloom-security` subagent is mandatory whenever a CRUD endpoint changes or
|
|
493
|
+
when a component/module starts exposing internal data through input or output
|
|
494
|
+
boundaries. It performs a forensic, evidence-based review.
|
|
495
|
+
|
|
496
|
+
**Acceptance Gate (Final)**
|
|
497
|
+
|
|
498
|
+
The Documenter updates README.md and any API docs.
|
|
499
|
+
The Orchestrator runs the final acceptance gate against the criteria relevant to
|
|
500
|
+
the chosen chain:
|
|
267
501
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
502
|
+
```
|
|
503
|
+
build: pass
|
|
504
|
+
lint: pass
|
|
505
|
+
unit_tests: pass
|
|
506
|
+
integration_tests: pass
|
|
507
|
+
e2e_tests: pass
|
|
508
|
+
all_routes_visited: pass
|
|
509
|
+
all_buttons_tested: pass
|
|
510
|
+
all_forms_tested: pass
|
|
511
|
+
all_links_verified: pass
|
|
512
|
+
all_user_journeys_passed: pass
|
|
513
|
+
all_api_endpoints_verified: pass
|
|
514
|
+
accessibility_verified: pass
|
|
515
|
+
responsive_layout_verified: pass
|
|
516
|
+
visual_validation_verified: pass
|
|
517
|
+
performance_validation_verified: pass
|
|
518
|
+
security_validation_verified: pass
|
|
519
|
+
no_open_defects: pass
|
|
520
|
+
```
|
|
271
521
|
|
|
522
|
+
If any gate fails, the Orchestrator routes back to the Developer for a
|
|
523
|
+
root-cause fix and re-verification. `DEVLOOM_DONE` is output only when all gates
|
|
524
|
+
for the chosen chain pass.
|
|
525
|
+
|
|
526
|
+
Completed output example:
|
|
272
527
|
```
|
|
273
|
-
DEVLOOM_DONE
|
|
528
|
+
DEVLOOM_DONE — ALL GATES PASSED
|
|
274
529
|
|
|
275
530
|
Completed 8 tasks:
|
|
276
531
|
- Task 1: Database schema and migration
|
|
@@ -351,17 +606,102 @@ without starting a weave:
|
|
|
351
606
|
|
|
352
607
|
---
|
|
353
608
|
|
|
609
|
+
## Incremental Briefing (token savings)
|
|
610
|
+
|
|
611
|
+
Sub-agents must not re-read the same files on every dispatch. DevLoom solves
|
|
612
|
+
this with a per-ticket briefing plus change-based invalidation:
|
|
613
|
+
|
|
614
|
+
- **Ticket start:** the orchestrator runs `briefing.mjs init <ticket>` and
|
|
615
|
+
writes `.opencode/devloom/context/briefing.md` ONCE (goal, constraints,
|
|
616
|
+
file map with `file:line` refs, decisions).
|
|
617
|
+
- **Every `task()` prompt** starts with `Read .opencode/devloom/context/briefing.md
|
|
618
|
+
first — do not re-discover` — sub-agents start from the map instead of
|
|
619
|
+
scanning the repo. A stable prompt prefix also gets provider prompt-caching.
|
|
620
|
+
- **Before each later dispatch:** `briefing.mjs changed` prints only the paths
|
|
621
|
+
whose content fingerprints differ from the last anchor (sha256, recorded at
|
|
622
|
+
`init`/`touch` — works inside or outside git and never re-flags a file that
|
|
623
|
+
was already re-read). The orchestrator re-reads ONLY those, patches the
|
|
624
|
+
briefing, runs `briefing.mjs touch`, and dispatches. Unchanged files are
|
|
625
|
+
never re-read.
|
|
626
|
+
|
|
627
|
+
Script discovery uses the same fallback chain as `profile.mjs`:
|
|
628
|
+
`~/.config/opencode/commands/briefing.mjs` → `~/.config/opencode/devloom-scripts/briefing.mjs`
|
|
629
|
+
→ `scripts/briefing.mjs`.
|
|
630
|
+
|
|
631
|
+
## Visual Pipeline
|
|
632
|
+
|
|
633
|
+
For substantial graphical work, DevLoom routes through an extra visual loop:
|
|
634
|
+
|
|
635
|
+
```
|
|
636
|
+
planner (marks VISUAL_REQUIRED=true)
|
|
637
|
+
→ visual-director (classifies visual domain + defines direction;
|
|
638
|
+
persists .opencode/devloom/context/design.md)
|
|
639
|
+
→ developer (implements against design.md as the visual contract;
|
|
640
|
+
functionality overrides aesthetics)
|
|
641
|
+
→ visual-critic (independent screenshot review — fresh context, no
|
|
642
|
+
implementation rationale)
|
|
643
|
+
→ developer correction (max 3 visual cycles, integrated with DevLoom's
|
|
644
|
+
existing defect-loop circuit breakers)
|
|
645
|
+
→ qa → verifier (visual, responsive, motion, a11y + functional scopes)
|
|
646
|
+
→ documenter
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
- **Small UI bug**: developer → qa → verifier — no visual agents. Backend work never routes through visual agents.
|
|
650
|
+
- **Design memory**: `.opencode/devloom/context/design.md` with sections Visual Concept, Personality, UX Goal, Color Roles, Typography, Spacing, Grid/Layout, Surface, Shape Language, Components, Iconography, Motion, Interaction, Responsive, Accessibility, DO/DON'T (games add HUD Information Priority + Gameplay Attention Rules). Read before subsequent visual work; updated only when direction intentionally changes.
|
|
651
|
+
- **Visual complexity** is orchestration metadata: `none` / `standard` / `high` — separate from the engineering tier (senior/standard).
|
|
652
|
+
- **New skills**: `design/visual-direction`, `design/design-grounding`, `design/web-design`, `design/app-design`, `design/game-design`, `design/motion-design`, `design/design-system`; `verify/visual-critique`, `verify/visual-quality-gate`, `verify/visual-regression`.
|
|
653
|
+
- **Verifier scopes gained**: `visual` (render + screenshot + critique integration + design-direction alignment), `responsive` (1440×1000, 1024×900, 390×844 or project targets: overflow, clipping, nav, readability, reflow, control usability), `motion` (key transitions, feedback, prefers-reduced-motion, no motion breakage).
|
|
654
|
+
- **Completion gates**: FUNCTIONAL + QA + VISUAL + RESPONSIVE + ACCESSIBILITY for graphical work. `visual_validation_verified` requires actual rendered evidence when tooling supports it; if images cannot be inspected, DevLoom reports `VISUAL_VERIFICATION_LIMITED` instead of a false pass. Backend-only changes do not require visual gates.
|
|
655
|
+
- **Chrome MCP (optional)**: browser-renderable work uses the Chrome MCP when configured (screenshots, DOM/a11y snapshot, viewport resize, device emulation, console/network, JS eval, Lighthouse). It is discovered, never assumed; Playwright MCP is not a substitute. Without it, DevLoom falls back to structural/runtime verification and says so — it never fabricates visual checks.
|
|
656
|
+
- **One-time multimodal path check**: Chrome screenshot → actual image → vision-capable model. If real images cannot reach the model (e.g. a given MiMo endpoint), screenshot validation is not marked passed.
|
|
657
|
+
- **OpenDesign MCP (optional)**: if an `opendesign` MCP is configured, visual-director may use it for design grounding (typography/spacing/density/palette/motion/interaction relationships + explicit DON'T rules). Never a hard dependency; DevLoom works normally without it, and never clones another product.
|
|
658
|
+
- **Optional max-quality visual mode (documented, NOT default)**: 3 concepts → select 1 → 2 isolated implementations → blind visual-critic comparison → winner → max 2–3 refinement cycles → verifier gates. Only for high-value deliverables.
|
|
659
|
+
- **Anti-generic-aesthetic rules**: avoid card soup, pill soup, default purple gradients, meaningless glassmorphism, arbitrary glow, decorative blobs, giant text without compositional purpose, generic cyan sci-fi HUDs/hexagons/scanlines, and dark SaaS dashboards disguised as game UI. Quality = hierarchy, composition, typography, spacing, proportion, coherence, domain fit, interaction quality.
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
## Loop Engineering
|
|
664
|
+
|
|
665
|
+
DevLoom ships a cadence-driven execution system for recurring agent tasks. Seven
|
|
666
|
+
loop patterns are available out of the box: `daily-triage`, `pr-babysitter`,
|
|
667
|
+
`ci-sweeper`, `dependency-sweeper`, `changelog-drafter`, `post-merge-cleanup`,
|
|
668
|
+
and `issue-triage`.
|
|
669
|
+
|
|
670
|
+
Each pattern has a matching skill under `skills/loop/` and a safety level:
|
|
671
|
+
|
|
672
|
+
- **L1 (report-only)** — observe and report, no modifications
|
|
673
|
+
- **L2 (assisted)** — fix in an isolated worktree with verifier approval
|
|
674
|
+
- **L3 (unattended)** — full autonomous fix-and-close cycle
|
|
675
|
+
|
|
676
|
+
Start a loop from within OpenCode:
|
|
677
|
+
|
|
678
|
+
```
|
|
679
|
+
/devloom-loop start daily-triage --cadence "0 8 * * 1-5" --level L2
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
Run a single tick manually from the terminal:
|
|
683
|
+
|
|
684
|
+
```bash
|
|
685
|
+
node scripts/loop-run.mjs --pattern daily-triage
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
The loop system includes a token budget circuit breaker: if a run exceeds its
|
|
689
|
+
allocated budget, the loop auto-pauses and logs the overage. Run
|
|
690
|
+
`/devloom-loop status` to inspect current loop state, last run, and budget
|
|
691
|
+
consumption.
|
|
692
|
+
|
|
693
|
+
---
|
|
694
|
+
|
|
354
695
|
## Skills System
|
|
355
696
|
|
|
356
|
-
Each agent loads
|
|
357
|
-
|
|
358
|
-
|
|
697
|
+
Each agent loads exactly one skill via its `LOAD:` directive. The skill folds in
|
|
698
|
+
the relevant engineering standards (SOLID, clean code, clean architecture, TDD,
|
|
699
|
+
UI/UX, forensic root-cause discipline). The `skill-discovery` meta-skill maps
|
|
700
|
+
task domains to the right agent skill.
|
|
359
701
|
|
|
360
|
-
```
|
|
361
|
-
# Each agent declares its
|
|
362
|
-
|
|
363
|
-
- skill-discovery
|
|
364
|
-
- frontend-development
|
|
702
|
+
```
|
|
703
|
+
# Each agent's body declares its skill via LOAD:
|
|
704
|
+
LOAD: ...|~/.config/opencode/skills/build/development.md
|
|
365
705
|
```
|
|
366
706
|
|
|
367
707
|
Skills are stored in `~/.config/opencode/skills/` following the
|
|
@@ -369,15 +709,39 @@ Skills are stored in `~/.config/opencode/skills/` following the
|
|
|
369
709
|
|
|
370
710
|
```
|
|
371
711
|
skills/
|
|
372
|
-
├── meta/ skill-discovery
|
|
373
|
-
├──
|
|
374
|
-
|
|
375
|
-
├── build/
|
|
376
|
-
│
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
712
|
+
├── meta/ skill-discovery (orchestrator)
|
|
713
|
+
├── plan/ planning (planner)
|
|
714
|
+
│ verification-planning (planner — evidence path)
|
|
715
|
+
├── build/ development (developer)
|
|
716
|
+
│ simplify (developer, qa)
|
|
717
|
+
│ vision-analysis (vision)
|
|
718
|
+
│ live-docs (developer)
|
|
719
|
+
├── design/ visual-direction (visual-director — always)
|
|
720
|
+
│ design-grounding (visual-director)
|
|
721
|
+
│ web-design (visual-director — WEB_CREATIVE)
|
|
722
|
+
│ app-design (visual-director — PRODUCT_APP)
|
|
723
|
+
│ game-design (visual-director — GAME_UI)
|
|
724
|
+
│ motion-design (visual-director)
|
|
725
|
+
│ design-system (visual-director — EXISTING_DESIGN_SYSTEM)
|
|
726
|
+
├── verify/ quality-assurance (qa)
|
|
727
|
+
│ app-verification (verifier)
|
|
728
|
+
│ visual-critique (visual-critic)
|
|
729
|
+
│ visual-quality-gate (verifier)
|
|
730
|
+
│ visual-regression (verifier)
|
|
731
|
+
├── review/ security-review (security)
|
|
732
|
+
├── ship/ documentation (documenter)
|
|
733
|
+
└── loop/ 10 loop engineering skills (daily-triage, pr-babysitter, ...)
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
Discovery mapping for the visual roles: `visual-director` →
|
|
737
|
+
`design/visual-direction` plus its domain design skill
|
|
738
|
+
(`web-design` / `app-design` / `game-design`); `visual-critic` →
|
|
739
|
+
`verify/visual-critique`. Visual skills load only when the orchestrator routes
|
|
740
|
+
to those roles.
|
|
741
|
+
|
|
742
|
+
Agents may load multiple skills via pipe-separated `LOAD:` directives. For example,
|
|
743
|
+
planner loads both `planning` and `verification-planning`; developer and qa both
|
|
744
|
+
load `development`/or `quality-assurance` plus `simplify`.
|
|
381
745
|
|
|
382
746
|
---
|
|
383
747
|
|
|
@@ -398,9 +762,17 @@ node $(npm root -g)/devloom/postinstall.mjs
|
|
|
398
762
|
|
|
399
763
|
### ProviderModelNotFoundError
|
|
400
764
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
765
|
+
This error means an agent file references a model that is not available in your environment. Common causes:
|
|
766
|
+
|
|
767
|
+
1. **Missing provider** — model ids must be `provider/model`; bare ids (e.g. `deepseek-v4-flash`) are invalid and fail validation. DevLoom does not add a provider automatically.
|
|
768
|
+
2. **Model not available** — some Go models may not be available in your region or subscription. Run `opencode models` to list available models.
|
|
769
|
+
3. **Outdated agent files** — global agent files may reference a model that no longer exists. Re-run the installer and apply config:
|
|
770
|
+
|
|
771
|
+
```bash
|
|
772
|
+
node $(npm root -g)/devloom/postinstall.mjs
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
Then update your `.opencode/devloom/config.json` with models from the available list and start a new weave.
|
|
404
776
|
|
|
405
777
|
### The weave stops before DEVLOOM_DONE
|
|
406
778
|
|
|
@@ -424,14 +796,37 @@ Note: this project uses bun test for testing and bun run build for builds.
|
|
|
424
796
|
|
|
425
797
|
### A task keeps failing QA
|
|
426
798
|
|
|
427
|
-
The Orchestrator
|
|
428
|
-
|
|
799
|
+
The Orchestrator routes failures to:
|
|
800
|
+
1. Root Cause Analysis — determines the root cause
|
|
801
|
+
2. Repair Agent — applies minimal fix
|
|
802
|
+
3. Regression Verification — re-runs all tests
|
|
803
|
+
|
|
804
|
+
Up to 3 repair cycles per defect, then the defect is marked `escalated` in the
|
|
805
|
+
registry and the task is skipped. To manually retry an escalated task:
|
|
429
806
|
|
|
430
807
|
1. Open `.opencode/devloom/plan.md` and change `- [x]` back to `- [ ]`
|
|
431
|
-
2.
|
|
808
|
+
2. Open `.opencode/devloom/defects.json` and remove or reset the defect
|
|
432
809
|
3. Run `/devloom-status` to confirm it is pending
|
|
433
810
|
4. Resume: `/devloom-resume`
|
|
434
811
|
|
|
812
|
+
### The acceptance gate is failing
|
|
813
|
+
|
|
814
|
+
Check `.opencode/devloom/defects.json` for open defects. Common gate failures:
|
|
815
|
+
|
|
816
|
+
| Gate | Common Cause |
|
|
817
|
+
|------|-------------|
|
|
818
|
+
| `all_routes_visited` | Explorer didn't discover all routes — check app starts correctly |
|
|
819
|
+
| `all_forms_tested` | Form verifier found validation issues — check error/success handling |
|
|
820
|
+
| `no_open_defects` | Defects in registry need repair — run RCA + Repair |
|
|
821
|
+
| `accessibility_verified` | ARIA labels or keyboard nav missing — check semantic HTML |
|
|
822
|
+
| `build` | Repair may have introduced build error — Recovery Agent auto-fixes most |
|
|
823
|
+
|
|
824
|
+
### The Recovery Agent keeps retrying
|
|
825
|
+
|
|
826
|
+
The Recovery Agent retries 3 times per failure type. If all 3 attempts fail,
|
|
827
|
+
the defect is marked `escalated`. Check `.opencode/devloom/recovery-log.md`
|
|
828
|
+
for the full recovery attempt history.
|
|
829
|
+
|
|
435
830
|
---
|
|
436
831
|
|
|
437
832
|
## Uninstalling
|
|
@@ -447,39 +842,101 @@ rm -rf ~/.config/opencode/skills/
|
|
|
447
842
|
|
|
448
843
|
---
|
|
449
844
|
|
|
845
|
+
## Security Considerations
|
|
846
|
+
|
|
847
|
+
### Permissions
|
|
848
|
+
|
|
849
|
+
DevLoom operates with your user permissions. It does not escalate privileges.
|
|
850
|
+
The agent `permission` blocks in `~/.config/opencode/agents/devloom-*.md` define
|
|
851
|
+
what each agent can do (edit files, run shell commands, fetch URLs, etc.).
|
|
852
|
+
Review these permissions and restrict them if needed.
|
|
853
|
+
|
|
854
|
+
**Hard delegation guarantees** — the orchestrator agent's `permission` block
|
|
855
|
+
sets `edit: deny`, `write: deny`, `patch: deny` at the OpenCode level. The model
|
|
856
|
+
cannot bypass this; the only way to produce code is via `task()` delegation to
|
|
857
|
+
sub-agents. Sub-agents have `task: deny`, preventing delegation chains. This is
|
|
858
|
+
enforced by OpenCode itself, not by the plugin — it survives plugin reloads.
|
|
859
|
+
|
|
860
|
+
### Prompt Sanitization
|
|
861
|
+
|
|
862
|
+
User prompts are truncated to 4000 characters and control characters are stripped
|
|
863
|
+
before they reach the orchestrator. This provides basic injection prevention.
|
|
864
|
+
However, AI agents may still follow instructions embedded in prompts — always
|
|
865
|
+
review generated output critically.
|
|
866
|
+
|
|
867
|
+
### Path Traversal Protection
|
|
868
|
+
|
|
869
|
+
The `postinstall.mjs` script validates all destination paths to ensure they stay
|
|
870
|
+
within the OpenCode config directory (`~/.config/opencode/`). Paths containing
|
|
871
|
+
`..` or absolute paths outside the config directory are rejected.
|
|
872
|
+
|
|
873
|
+
### Reporting Vulnerabilities
|
|
874
|
+
|
|
875
|
+
See [SECURITY.md](SECURITY.md) for our responsible disclosure policy.
|
|
876
|
+
|
|
877
|
+
### Best Practices
|
|
878
|
+
|
|
879
|
+
- Pin exact versions in `package.json` instead of using ranges.
|
|
880
|
+
- Review all generated code before committing or deploying.
|
|
881
|
+
- Run `npm audit` regularly to check dependency vulnerabilities.
|
|
882
|
+
- Keep DevLoom state in `.opencode/devloom/` and add it to `.gitignore` if you
|
|
883
|
+
do not want execution state tracked in version control.
|
|
884
|
+
|
|
885
|
+
---
|
|
886
|
+
|
|
450
887
|
## Architecture Reference
|
|
451
888
|
|
|
452
889
|
```
|
|
453
890
|
devloom/
|
|
454
891
|
├── src/
|
|
455
|
-
│ ├── index.ts
|
|
456
|
-
│
|
|
457
|
-
├──
|
|
458
|
-
│ ├──
|
|
459
|
-
│ ├──
|
|
460
|
-
│ ├──
|
|
461
|
-
│ ├──
|
|
462
|
-
│
|
|
463
|
-
|
|
464
|
-
├──
|
|
465
|
-
│ ├── devloom.md
|
|
466
|
-
│ ├── devloom-
|
|
467
|
-
│ ├── devloom-
|
|
468
|
-
│
|
|
469
|
-
├──
|
|
892
|
+
│ ├── index.ts # Plugin entry point (exports DevLoomPlugin)
|
|
893
|
+
│ ├── plugin.ts # Lifecycle hooks: event, chat.message, tool.execute.before/after
|
|
894
|
+
│ ├── guard.ts # Compliance guard, loop detection, state summary
|
|
895
|
+
│ ├── bootstrap.ts # Project workspace bootstrap
|
|
896
|
+
│ ├── context.ts # Architecture atlas generation
|
|
897
|
+
│ ├── loop.ts # Loop engineering state
|
|
898
|
+
│ ├── worktree.ts # Worktree management
|
|
899
|
+
│ └── constraints.ts # Loop constraints
|
|
900
|
+
├── agents/ # 17 agents — 10 base + 7 tier variants
|
|
901
|
+
│ ├── devloom-orchestrator.md # primary — triage, route, state, gate (edit/write/patch: deny)
|
|
902
|
+
│ ├── devloom-planner.md / -senior / -flash
|
|
903
|
+
│ ├── devloom-developer.md / -senior / -flash
|
|
904
|
+
│ ├── devloom-qa.md / -flash
|
|
905
|
+
│ ├── devloom-verifier.md
|
|
906
|
+
│ ├── devloom-security.md / -senior
|
|
907
|
+
│ ├── devloom-documenter.md / -flash
|
|
908
|
+
│ ├── devloom-vision.md
|
|
909
|
+
│ ├── devloom-visual-director.md
|
|
910
|
+
│ └── devloom-visual-critic.md
|
|
911
|
+
├── commands/ # 17 command files
|
|
912
|
+
│ ├── devloom.md, devloom-init.md, devloom-resume.md, devloom-status.md
|
|
913
|
+
│ ├── devloom-save.md, devloom-agents.md
|
|
914
|
+
│ ├── devloom-go.md, devloom-go-economy.md, devloom-go-flash.md
|
|
915
|
+
│ ├── devloom-deepseek.md, devloom-mimo.md, devloom-free.md, devloom-auto.md
|
|
916
|
+
│ ├── devloom-plan.md, devloom-context.md
|
|
917
|
+
│ └── devloom-loop.md, devloom-loop-status.md
|
|
918
|
+
├── skills/ # 21 skill files + 10 loop skills
|
|
470
919
|
│ ├── meta/ skill-discovery
|
|
471
|
-
│ ├──
|
|
472
|
-
│ ├──
|
|
473
|
-
│ ├──
|
|
474
|
-
│ │
|
|
475
|
-
│ ├── verify/ quality-assurance,
|
|
476
|
-
│
|
|
477
|
-
│
|
|
478
|
-
├──
|
|
920
|
+
│ ├── plan/ planning, verification-planning
|
|
921
|
+
│ ├── build/ development, simplify, vision-analysis, live-docs
|
|
922
|
+
│ ├── design/ visual-direction, design-grounding, web-design, app-design,
|
|
923
|
+
│ │ game-design, motion-design, design-system
|
|
924
|
+
│ ├── verify/ quality-assurance, app-verification,
|
|
925
|
+
│ │ visual-critique, visual-quality-gate, visual-regression
|
|
926
|
+
│ ├── review/ security-review (full audit playbook)
|
|
927
|
+
│ ├── ship/ documentation
|
|
928
|
+
│ └── loop/ 10 loop engineering skills
|
|
929
|
+
├── protocol/ # Shared protocols (orchestrator-core, agent-contracts, ...)
|
|
930
|
+
├── .opencode/themes/ # DevLoom Night Owl theme
|
|
931
|
+
├── __tests__/ # 228 unit tests (Jest)
|
|
932
|
+
├── postinstall.mjs # Installs 17 agents, 16 commands, 21 skills, theme
|
|
933
|
+
├── SECURITY.md # Security policy and disclosure
|
|
934
|
+
├── jest.config.mjs # Jest test configuration
|
|
479
935
|
├── package.json
|
|
480
936
|
├── tsconfig.json
|
|
481
937
|
├── README.md
|
|
482
|
-
|
|
938
|
+
├── GUIDE.md # This file
|
|
939
|
+
└── .github/workflows/ci.yml # CI pipeline (Node 18, 20, 22)
|
|
483
940
|
```
|
|
484
941
|
|
|
485
942
|
---
|