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