@iloom/cli 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/dist/{BranchNamingService-ECJHBB67.js → BranchNamingService-25KSZAEM.js} +2 -2
- package/dist/ClaudeContextManager-66GR4BGM.js +14 -0
- package/dist/ClaudeService-7KM5NA5Z.js +13 -0
- package/dist/{LoomLauncher-L64HHS3T.js → LoomLauncher-TDLZSYG2.js} +6 -6
- package/dist/{PromptTemplateManager-DULSVRRE.js → PromptTemplateManager-YOE2SIPG.js} +2 -2
- package/dist/README.md +2 -2
- package/dist/{SettingsManager-BQDQA3FK.js → SettingsManager-FNKCOZMQ.js} +2 -2
- package/dist/{build-5GO3XW26.js → build-VHGEMXBA.js} +6 -6
- package/dist/chunk-4E7LCFUG.js +24 -0
- package/dist/chunk-4E7LCFUG.js.map +1 -0
- package/dist/{chunk-MNHZB4Z2.js → chunk-4FGEGQW4.js} +3 -3
- package/dist/{chunk-LXLMMXXY.js → chunk-5FJWO4IT.js} +17 -12
- package/dist/chunk-5FJWO4IT.js.map +1 -0
- package/dist/{chunk-ZHPNZC75.js → chunk-5RPBYK5Q.js} +26 -21
- package/dist/chunk-5RPBYK5Q.js.map +1 -0
- package/dist/{chunk-WY4QBK43.js → chunk-63QWFWH3.js} +2 -2
- package/dist/{chunk-YYAKPQBT.js → chunk-7VHJNVLF.js} +19 -9
- package/dist/chunk-7VHJNVLF.js.map +1 -0
- package/dist/{chunk-SF2P22EE.js → chunk-C6HNNJIV.js} +2 -2
- package/dist/{chunk-5MWV33NN.js → chunk-CVCTIDDK.js} +2 -2
- package/dist/{chunk-RYWFS37M.js → chunk-E6KOWMKA.js} +2 -2
- package/dist/{chunk-6EU6TCF6.js → chunk-EVPZFV3K.js} +5 -5
- package/dist/{chunk-ZEWU5PZK.js → chunk-G5V75JD5.js} +2 -2
- package/dist/chunk-GRISNU6G.js +651 -0
- package/dist/chunk-GRISNU6G.js.map +1 -0
- package/dist/{chunk-VGGST52X.js → chunk-I5T677EA.js} +2 -2
- package/dist/{chunk-VECNX6VX.js → chunk-KIK2ZFAL.js} +2 -2
- package/dist/{chunk-FB47TIJG.js → chunk-KKV5WH5M.js} +4 -23
- package/dist/chunk-KKV5WH5M.js.map +1 -0
- package/dist/{chunk-ZW2LKWWE.js → chunk-KVHIAWVT.js} +3 -3
- package/dist/{chunk-3D7WQM7I.js → chunk-LLHXQS3C.js} +2 -2
- package/dist/{chunk-Y4YZTHZE.js → chunk-LUKXJSRI.js} +2 -2
- package/dist/{ignite-CGOV3TD4.js → chunk-OTGH2HRS.js} +105 -71
- package/dist/chunk-OTGH2HRS.js.map +1 -0
- package/dist/{chunk-J5S7DFYC.js → chunk-QVLPWNE3.js} +2 -2
- package/dist/chunk-RJ3VBUFK.js +781 -0
- package/dist/chunk-RJ3VBUFK.js.map +1 -0
- package/dist/{chunk-SN3SQCFK.js → chunk-S7PZA6IV.js} +4 -4
- package/dist/{chunk-UWGVCXRF.js → chunk-SKSYYBCU.js} +23 -1
- package/dist/chunk-SKSYYBCU.js.map +1 -0
- package/dist/{chunk-JO2LZ6EQ.js → chunk-SWSJWA2S.js} +2 -2
- package/dist/{chunk-ONQYPICO.js → chunk-UR5DGNUO.js} +60 -6
- package/dist/chunk-UR5DGNUO.js.map +1 -0
- package/dist/{chunk-4WJNIR5O.js → chunk-UUEW5KWB.js} +1 -1
- package/dist/chunk-UUEW5KWB.js.map +1 -0
- package/dist/{chunk-NRSWLOAZ.js → chunk-WXIM2WS7.js} +4 -4
- package/dist/{chunk-UD3WJDIV.js → chunk-ZNMPGMHY.js} +11 -774
- package/dist/chunk-ZNMPGMHY.js.map +1 -0
- package/dist/{claude-P3NQR6IJ.js → claude-7GGEWVEM.js} +2 -2
- package/dist/{cleanup-6UCPVMFG.js → cleanup-6PVAC4NI.js} +19 -17
- package/dist/{cleanup-6UCPVMFG.js.map → cleanup-6PVAC4NI.js.map} +1 -1
- package/dist/cli.js +154 -614
- package/dist/cli.js.map +1 -1
- package/dist/{commit-L3EPY5QG.js → commit-FZR5XDQG.js} +12 -10
- package/dist/commit-FZR5XDQG.js.map +1 -0
- package/dist/{compile-ZS4HYRX5.js → compile-7ALJHZ4N.js} +6 -6
- package/dist/{contribute-ORDDQGSL.js → contribute-5GKLK3BQ.js} +3 -3
- package/dist/{dev-server-FYZ2AQIH.js → dev-server-7SMIB7OF.js} +8 -8
- package/dist/{feedback-TMBXSCM5.js → feedback-G2GJFN2F.js} +10 -8
- package/dist/{feedback-TMBXSCM5.js.map → feedback-G2GJFN2F.js.map} +1 -1
- package/dist/{git-ET64COO3.js → git-GTLKAZRJ.js} +3 -3
- package/dist/ignite-H2O5Y5A2.js +34 -0
- package/dist/ignite-H2O5Y5A2.js.map +1 -0
- package/dist/index.d.ts +113 -18
- package/dist/index.js +177 -12
- package/dist/index.js.map +1 -1
- package/dist/{init-GFQ5W7GK.js → init-32YOKXRL.js} +8 -8
- package/dist/{issues-T4ZZSPEG.js → issues-4UUAQ5K6.js} +3 -3
- package/dist/{lint-6TQXDZ3T.js → lint-AAN2NZWG.js} +6 -6
- package/dist/mcp/harness-server.js +140 -0
- package/dist/mcp/harness-server.js.map +1 -0
- package/dist/mcp/issue-management-server.js +140 -18
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/{open-5QZGXQRF.js → open-FXWW3VI4.js} +8 -8
- package/dist/{plan-U7ZQWLFY.js → plan-RQ5FPIGF.js} +338 -36
- package/dist/plan-RQ5FPIGF.js.map +1 -0
- package/dist/prompts/CLAUDE.md +2 -2
- package/dist/prompts/init-prompt.txt +102 -27
- package/dist/prompts/issue-prompt.txt +46 -0
- package/dist/prompts/plan-prompt.txt +59 -19
- package/dist/prompts/swarm-orchestrator-prompt.txt +107 -80
- package/dist/{rebase-DWIB77KV.js → rebase-6NVLX5V7.js} +17 -8
- package/dist/rebase-6NVLX5V7.js.map +1 -0
- package/dist/{recap-MX63HAKV.js → recap-OMBOKJST.js} +6 -6
- package/dist/{run-O3TFNQFC.js → run-BBXLRIZB.js} +8 -8
- package/dist/schema/settings.schema.json +36 -2
- package/dist/{shell-G6VC2CYR.js → shell-RF7LTND5.js} +5 -5
- package/dist/{summary-FWHAX55O.js → summary-WTQZ7XG2.js} +9 -9
- package/dist/{test-F7JNJZYP.js → test-SGO6I5Z7.js} +6 -6
- package/dist/{test-git-BTAOIUE2.js → test-git-XM4TM65W.js} +3 -3
- package/dist/{test-jira-CHYNV33F.js → test-jira-LDTOYFSD.js} +3 -3
- package/dist/{test-prefix-Q6TFSU6F.js → test-prefix-GBO37XCN.js} +3 -3
- package/dist/{test-webserver-EONCG7E7.js → test-webserver-NZ3JTVLL.js} +5 -5
- package/dist/{vscode-VA5X4P25.js → vscode-6XUGHJKL.js} +5 -5
- package/package.json +1 -1
- package/dist/ClaudeContextManager-QXX6ZFST.js +0 -14
- package/dist/ClaudeService-NJNK2SUH.js +0 -13
- package/dist/chunk-4WJNIR5O.js.map +0 -1
- package/dist/chunk-FB47TIJG.js.map +0 -1
- package/dist/chunk-LXLMMXXY.js.map +0 -1
- package/dist/chunk-ONQYPICO.js.map +0 -1
- package/dist/chunk-UD3WJDIV.js.map +0 -1
- package/dist/chunk-UVD4CZKS.js +0 -101
- package/dist/chunk-UVD4CZKS.js.map +0 -1
- package/dist/chunk-UWGVCXRF.js.map +0 -1
- package/dist/chunk-YYAKPQBT.js.map +0 -1
- package/dist/chunk-ZHPNZC75.js.map +0 -1
- package/dist/commit-L3EPY5QG.js.map +0 -1
- package/dist/ignite-CGOV3TD4.js.map +0 -1
- package/dist/plan-U7ZQWLFY.js.map +0 -1
- package/dist/rebase-DWIB77KV.js.map +0 -1
- /package/dist/{BranchNamingService-ECJHBB67.js.map → BranchNamingService-25KSZAEM.js.map} +0 -0
- /package/dist/{ClaudeContextManager-QXX6ZFST.js.map → ClaudeContextManager-66GR4BGM.js.map} +0 -0
- /package/dist/{ClaudeService-NJNK2SUH.js.map → ClaudeService-7KM5NA5Z.js.map} +0 -0
- /package/dist/{LoomLauncher-L64HHS3T.js.map → LoomLauncher-TDLZSYG2.js.map} +0 -0
- /package/dist/{PromptTemplateManager-DULSVRRE.js.map → PromptTemplateManager-YOE2SIPG.js.map} +0 -0
- /package/dist/{SettingsManager-BQDQA3FK.js.map → SettingsManager-FNKCOZMQ.js.map} +0 -0
- /package/dist/{build-5GO3XW26.js.map → build-VHGEMXBA.js.map} +0 -0
- /package/dist/{chunk-MNHZB4Z2.js.map → chunk-4FGEGQW4.js.map} +0 -0
- /package/dist/{chunk-WY4QBK43.js.map → chunk-63QWFWH3.js.map} +0 -0
- /package/dist/{chunk-SF2P22EE.js.map → chunk-C6HNNJIV.js.map} +0 -0
- /package/dist/{chunk-5MWV33NN.js.map → chunk-CVCTIDDK.js.map} +0 -0
- /package/dist/{chunk-RYWFS37M.js.map → chunk-E6KOWMKA.js.map} +0 -0
- /package/dist/{chunk-6EU6TCF6.js.map → chunk-EVPZFV3K.js.map} +0 -0
- /package/dist/{chunk-ZEWU5PZK.js.map → chunk-G5V75JD5.js.map} +0 -0
- /package/dist/{chunk-VGGST52X.js.map → chunk-I5T677EA.js.map} +0 -0
- /package/dist/{chunk-VECNX6VX.js.map → chunk-KIK2ZFAL.js.map} +0 -0
- /package/dist/{chunk-ZW2LKWWE.js.map → chunk-KVHIAWVT.js.map} +0 -0
- /package/dist/{chunk-3D7WQM7I.js.map → chunk-LLHXQS3C.js.map} +0 -0
- /package/dist/{chunk-Y4YZTHZE.js.map → chunk-LUKXJSRI.js.map} +0 -0
- /package/dist/{chunk-J5S7DFYC.js.map → chunk-QVLPWNE3.js.map} +0 -0
- /package/dist/{chunk-SN3SQCFK.js.map → chunk-S7PZA6IV.js.map} +0 -0
- /package/dist/{chunk-JO2LZ6EQ.js.map → chunk-SWSJWA2S.js.map} +0 -0
- /package/dist/{chunk-NRSWLOAZ.js.map → chunk-WXIM2WS7.js.map} +0 -0
- /package/dist/{claude-P3NQR6IJ.js.map → claude-7GGEWVEM.js.map} +0 -0
- /package/dist/{compile-ZS4HYRX5.js.map → compile-7ALJHZ4N.js.map} +0 -0
- /package/dist/{contribute-ORDDQGSL.js.map → contribute-5GKLK3BQ.js.map} +0 -0
- /package/dist/{dev-server-FYZ2AQIH.js.map → dev-server-7SMIB7OF.js.map} +0 -0
- /package/dist/{git-ET64COO3.js.map → git-GTLKAZRJ.js.map} +0 -0
- /package/dist/{init-GFQ5W7GK.js.map → init-32YOKXRL.js.map} +0 -0
- /package/dist/{issues-T4ZZSPEG.js.map → issues-4UUAQ5K6.js.map} +0 -0
- /package/dist/{lint-6TQXDZ3T.js.map → lint-AAN2NZWG.js.map} +0 -0
- /package/dist/{open-5QZGXQRF.js.map → open-FXWW3VI4.js.map} +0 -0
- /package/dist/{recap-MX63HAKV.js.map → recap-OMBOKJST.js.map} +0 -0
- /package/dist/{run-O3TFNQFC.js.map → run-BBXLRIZB.js.map} +0 -0
- /package/dist/{shell-G6VC2CYR.js.map → shell-RF7LTND5.js.map} +0 -0
- /package/dist/{summary-FWHAX55O.js.map → summary-WTQZ7XG2.js.map} +0 -0
- /package/dist/{test-F7JNJZYP.js.map → test-SGO6I5Z7.js.map} +0 -0
- /package/dist/{test-git-BTAOIUE2.js.map → test-git-XM4TM65W.js.map} +0 -0
- /package/dist/{test-jira-CHYNV33F.js.map → test-jira-LDTOYFSD.js.map} +0 -0
- /package/dist/{test-prefix-Q6TFSU6F.js.map → test-prefix-GBO37XCN.js.map} +0 -0
- /package/dist/{test-webserver-EONCG7E7.js.map → test-webserver-NZ3JTVLL.js.map} +0 -0
- /package/dist/{vscode-VA5X4P25.js.map → vscode-6XUGHJKL.js.map} +0 -0
|
@@ -304,6 +304,15 @@ The following JSON Schema defines valid iloom settings:
|
|
|
304
304
|
],
|
|
305
305
|
"description": "Claude model shorthand: sonnet, opus, or haiku"
|
|
306
306
|
},
|
|
307
|
+
"swarmModel": {
|
|
308
|
+
"type": "string",
|
|
309
|
+
"enum": [
|
|
310
|
+
"sonnet",
|
|
311
|
+
"opus",
|
|
312
|
+
"haiku"
|
|
313
|
+
],
|
|
314
|
+
"description": "Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."
|
|
315
|
+
},
|
|
307
316
|
"enabled": {
|
|
308
317
|
"type": "boolean",
|
|
309
318
|
"description": "Whether this agent is enabled. Defaults to true."
|
|
@@ -340,6 +349,15 @@ The following JSON Schema defines valid iloom settings:
|
|
|
340
349
|
],
|
|
341
350
|
"description": "Claude model shorthand: sonnet, opus, or haiku"
|
|
342
351
|
},
|
|
352
|
+
"swarmModel": {
|
|
353
|
+
"type": "string",
|
|
354
|
+
"enum": [
|
|
355
|
+
"sonnet",
|
|
356
|
+
"opus",
|
|
357
|
+
"haiku"
|
|
358
|
+
],
|
|
359
|
+
"description": "Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."
|
|
360
|
+
},
|
|
343
361
|
"enabled": {
|
|
344
362
|
"type": "boolean",
|
|
345
363
|
"description": "Whether this agent is enabled. Defaults to true."
|
|
@@ -365,7 +383,14 @@ The following JSON Schema defines valid iloom settings:
|
|
|
365
383
|
},
|
|
366
384
|
"additionalProperties": false
|
|
367
385
|
},
|
|
368
|
-
"description": "Nested per-agent
|
|
386
|
+
"description": "Nested per-agent settings. Only meaningful under the iloom-swarm-worker agent entry for sub-agent timeout configuration."
|
|
387
|
+
},
|
|
388
|
+
"subAgentTimeout": {
|
|
389
|
+
"type": "number",
|
|
390
|
+
"minimum": 1,
|
|
391
|
+
"maximum": 120,
|
|
392
|
+
"default": 10,
|
|
393
|
+
"description": "Timeout in minutes for sub-agent claude -p invocations in swarm mode. Applies to each phase agent (evaluator, analyzer, planner, implementer) when invoked via the Bash tool. Default: 10 minutes. Only meaningful under the iloom-swarm-worker agent entry."
|
|
369
394
|
}
|
|
370
395
|
},
|
|
371
396
|
"additionalProperties": false
|
|
@@ -377,7 +402,7 @@ The following JSON Schema defines valid iloom settings:
|
|
|
377
402
|
"type": "null"
|
|
378
403
|
}
|
|
379
404
|
],
|
|
380
|
-
"description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-code-reviewer (reviews code changes against requirements), iloom-artifact-reviewer (reviews artifacts before posting), iloom-swarm-worker (swarm worker agent, dynamically generated).
|
|
405
|
+
"description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-code-reviewer (reviews code changes against requirements), iloom-artifact-reviewer (reviews artifacts before posting), iloom-swarm-worker (swarm worker agent, dynamically generated). Use swarmModel on any agent to override its model in swarm mode."
|
|
381
406
|
},
|
|
382
407
|
"spin": {
|
|
383
408
|
"type": "object",
|
|
@@ -391,6 +416,15 @@ The following JSON Schema defines valid iloom settings:
|
|
|
391
416
|
],
|
|
392
417
|
"default": "opus",
|
|
393
418
|
"description": "Claude model shorthand for spin orchestrator"
|
|
419
|
+
},
|
|
420
|
+
"swarmModel": {
|
|
421
|
+
"type": "string",
|
|
422
|
+
"enum": [
|
|
423
|
+
"sonnet",
|
|
424
|
+
"opus",
|
|
425
|
+
"haiku"
|
|
426
|
+
],
|
|
427
|
+
"description": "Model for the spin orchestrator when running in swarm mode. Overrides spin.model for swarm workflows."
|
|
394
428
|
}
|
|
395
429
|
},
|
|
396
430
|
"additionalProperties": false,
|
|
@@ -1256,9 +1290,32 @@ Based on the users answer:
|
|
|
1256
1290
|
|
|
1257
1291
|
**Note:** Terminal colors default to `true` (always recommend unless user explicitly disables).
|
|
1258
1292
|
|
|
1293
|
+
### Phase 2.7: Swarm Quality Preference
|
|
1294
|
+
|
|
1295
|
+
After tooling configuration (and color sync if applicable), ask the user how they want swarms to behave:
|
|
1296
|
+
|
|
1297
|
+
```
|
|
1298
|
+
Swarms are iloom's most powerful feature. Give them an epic and they'll decompose it into issues, spin up parallel AI agents — each in its own isolated workspace — and build the entire thing for you. They can ship whole features, modules, or even full products.
|
|
1299
|
+
|
|
1300
|
+
You can tune how swarms balance thinking depth versus speed:
|
|
1301
|
+
|
|
1302
|
+
🧠 Maximum Quality — Agents take more time to reason deeply, produce thorough analysis, and write more carefully considered code. Best when correctness matters most. Uses Opus for all agents, which is significantly more expensive.
|
|
1303
|
+
⚖️ Balanced (recommended) — Strong reasoning at a practical pace. The sweet spot for most work.
|
|
1304
|
+
⚡ Fast & Cheap — Agents move quickly through issues with lighter analysis. Great for rapid prototyping or if you're on a budget.
|
|
1305
|
+
```
|
|
1306
|
+
|
|
1307
|
+
Ask: "Which swarm mode would you prefer?"
|
|
1308
|
+
|
|
1309
|
+
- If the user picks **Maximum Quality**: apply the Maximum Quality rules (see Swarm Quality Mode in Phase 9 advanced config, item 2)
|
|
1310
|
+
- If the user picks **Balanced**: this is the default — no settings changes needed unless the user wants to be explicit
|
|
1311
|
+
- If the user picks **Fast & Cheap**: apply the Fast & Cheap rules
|
|
1312
|
+
- If the user says they don't use swarms or want to skip: move on without changes
|
|
1313
|
+
|
|
1314
|
+
Include the user's choice in the Phase 3 summary under a "Swarm Mode" line.
|
|
1315
|
+
|
|
1259
1316
|
### Phase 3: Configuration Summary
|
|
1260
1317
|
|
|
1261
|
-
After gathering all answers from Phase 1 and Phase 2, display a summary like this:
|
|
1318
|
+
After gathering all answers from Phase 1, Phase 2, and Phase 2.7, display a summary like this:
|
|
1262
1319
|
|
|
1263
1320
|
```
|
|
1264
1321
|
Configuration Summary:
|
|
@@ -1280,6 +1337,7 @@ Tooling Configuration (Phase 2):
|
|
|
1280
1337
|
Jira API Token: [configured/not configured] (only if issue tracker is Jira - never show actual token)
|
|
1281
1338
|
IDE: [value or "vscode (default)"]
|
|
1282
1339
|
Merge Mode: [value] (only if configured)
|
|
1340
|
+
Swarm Mode: [Maximum Quality / Balanced / Fast & Cheap] (only if configured in Phase 2.7)
|
|
1283
1341
|
```
|
|
1284
1342
|
|
|
1285
1343
|
**Note**:
|
|
@@ -1684,6 +1742,7 @@ Need more advanced configuration? I can help you set up:
|
|
|
1684
1742
|
• Plan Configuration - Use different AI providers for planning and plan review
|
|
1685
1743
|
• Agent Models - Use different Claude models for different tasks
|
|
1686
1744
|
• Swarm Agent Models - Configure different models for agents when running in swarm mode
|
|
1745
|
+
• Swarm Quality Mode - Control how deeply swarm agents reason vs how fast they move (also offered during initial setup)
|
|
1687
1746
|
• Database Settings - Configure database branching for isolated development
|
|
1688
1747
|
• Skip Pre-Commit Hooks - Bypass slow or failing hooks during commit and finish workflows
|
|
1689
1748
|
• Workflow Behavior - Control permissions, IDE launching, dev servers, and terminal behavior
|
|
@@ -1702,6 +1761,8 @@ You can ask me questions like:
|
|
|
1702
1761
|
"How do I protect my main branch from worktree creation?"
|
|
1703
1762
|
"What models are available for the different agents?"
|
|
1704
1763
|
"How do I use different models for swarm workers vs normal mode?"
|
|
1764
|
+
"How do I change the swarm quality mode?"
|
|
1765
|
+
"What's the difference between maximum quality and fast & cheap swarms?"
|
|
1705
1766
|
"How do I use custom build/test commands instead of package.json scripts?"
|
|
1706
1767
|
|
|
1707
1768
|
Just ask any of these questions and I'll help you modify your settings.
|
|
@@ -1733,36 +1794,50 @@ When configuring agents, use these model identifiers:
|
|
|
1733
1794
|
}
|
|
1734
1795
|
```
|
|
1735
1796
|
|
|
1797
|
+
**Important: Non-swarm and swarm models are independent.** Changing an agent's `model` here only affects non-swarm mode (single-issue looms via `il start`). Swarm mode has its own model configuration via `swarmModel` and the Swarm Quality Mode presets (see item 2 below). This separation is intentional — swarms run many agents in parallel and costs scale quickly, so swarm models should be an explicit choice.
|
|
1798
|
+
|
|
1736
1799
|
**Swarm-Specific Phase Agent Models:**
|
|
1737
1800
|
|
|
1738
|
-
|
|
1801
|
+
To override a specific agent's model in swarm mode, use `swarmModel`:
|
|
1739
1802
|
|
|
1740
1803
|
```json
|
|
1741
1804
|
"agents": {
|
|
1742
1805
|
"iloom-issue-implementer": {
|
|
1743
|
-
"model": "opus"
|
|
1744
|
-
},
|
|
1745
|
-
"iloom-swarm-worker": {
|
|
1746
1806
|
"model": "opus",
|
|
1747
|
-
"
|
|
1748
|
-
"iloom-issue-implementer": {
|
|
1749
|
-
"model": "sonnet"
|
|
1750
|
-
},
|
|
1751
|
-
"iloom-issue-planner": {
|
|
1752
|
-
"model": "haiku"
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1807
|
+
"swarmModel": "sonnet"
|
|
1755
1808
|
}
|
|
1756
1809
|
}
|
|
1757
1810
|
```
|
|
1758
1811
|
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1812
|
+
In this example, the implementer uses Opus in non-swarm mode but Sonnet in swarm mode. If no `swarmModel` is set, the Swarm Quality Mode defaults apply (see item 2 below) — not the agent's base `model`.
|
|
1813
|
+
|
|
1814
|
+
2. **Swarm Quality Mode:**
|
|
1815
|
+
|
|
1816
|
+
This controls the trade-off between reasoning quality and speed/cost for swarm agents. The same choice is offered proactively in Phase 2.7. Users can also change it here after initial setup.
|
|
1817
|
+
|
|
1818
|
+
| Mode | Focus | Models used | Best for |
|
|
1819
|
+
|------|-------|-------------|----------|
|
|
1820
|
+
| **Maximum Quality** | Deepest reasoning, best analysis | Opus everywhere (except complexity evaluator stays Haiku) | Complex epics, critical features |
|
|
1821
|
+
| **Balanced** (default) | Opus for analysis, Sonnet for everything else | Opus: analyzer, analyze-and-plan. Sonnet: orchestrator, worker, planner, implementer, enhancer, code-reviewer. Haiku: complexity evaluator | Most tasks |
|
|
1822
|
+
| **Fast & Cheap** | Quick iterations, lowest cost | Haiku everywhere | Simple tasks, rapid prototyping |
|
|
1823
|
+
|
|
1824
|
+
Note: The complexity evaluator always stays on Haiku regardless of mode, since it performs a simple classification task that does not benefit from a larger model.
|
|
1825
|
+
|
|
1826
|
+
**Rules for generating settings JSON:**
|
|
1827
|
+
|
|
1828
|
+
When the user selects a mode, **merge** the model values into their existing settings. Only set the `swarmModel` (or `model` for the worker) field on each agent — do not overwrite or remove other agent settings.
|
|
1829
|
+
|
|
1830
|
+
- **Maximum Quality:** Set `spin.swarmModel` to `"opus"`. Set `agents.iloom-swarm-worker.model` to `"opus"`. Set `swarmModel` to `"opus"` on all phase agents (`iloom-issue-analyzer`, `iloom-issue-planner`, `iloom-issue-implementer`, `iloom-issue-enhancer`, `iloom-issue-analyze-and-plan`, `iloom-code-reviewer`). Keep `iloom-issue-complexity-evaluator.swarmModel` as `"haiku"`.
|
|
1831
|
+
- **Balanced (default):** Set `spin.swarmModel` to `"sonnet"`. Set `agents.iloom-swarm-worker.model` to `"sonnet"`. Set `swarmModel` to `"opus"` on analysis agents (`iloom-issue-analyzer`, `iloom-issue-analyze-and-plan`). Set `swarmModel` to `"sonnet"` on all other phase agents (`iloom-issue-planner`, `iloom-issue-implementer`, `iloom-issue-enhancer`, `iloom-code-reviewer`). Keep `iloom-issue-complexity-evaluator.swarmModel` as `"haiku"`.
|
|
1832
|
+
- **Fast & Cheap:** Set `spin.swarmModel` to `"haiku"`. Set `agents.iloom-swarm-worker.model` to `"haiku"`. Set `swarmModel` to `"haiku"` on all phase agents and `iloom-issue-complexity-evaluator`.
|
|
1833
|
+
|
|
1834
|
+
**Important notes:**
|
|
1835
|
+
- These set `swarmModel` on phase agents (not `model`), so non-swarm behavior is preserved. When agents run outside of swarm mode, their base `model` setting is used.
|
|
1836
|
+
- Only merge into existing agent settings — never replace the entire agent object.
|
|
1837
|
+
- If the user has already configured per-agent models, the mode values take precedence for swarm-related model fields only.
|
|
1838
|
+
- If the user is unsure, recommend **Balanced**.
|
|
1764
1839
|
|
|
1765
|
-
|
|
1840
|
+
3. **Database Environment Variable:**
|
|
1766
1841
|
```json
|
|
1767
1842
|
"capabilities": {
|
|
1768
1843
|
"database": {
|
|
@@ -1771,7 +1846,7 @@ When configuring agents, use these model identifiers:
|
|
|
1771
1846
|
}
|
|
1772
1847
|
```
|
|
1773
1848
|
|
|
1774
|
-
|
|
1849
|
+
4. **Workflow Behavior:**
|
|
1775
1850
|
```json
|
|
1776
1851
|
"workflows": {
|
|
1777
1852
|
"pr": {
|
|
@@ -1783,26 +1858,26 @@ When configuring agents, use these model identifiers:
|
|
|
1783
1858
|
}
|
|
1784
1859
|
```
|
|
1785
1860
|
|
|
1786
|
-
|
|
1861
|
+
5. **Copy Gitignored Files:**
|
|
1787
1862
|
```json
|
|
1788
1863
|
"copyGitIgnoredPatterns": ["*.db", "data/*.sqlite", "tmp/fixtures/**"]
|
|
1789
1864
|
```
|
|
1790
1865
|
|
|
1791
1866
|
Glob patterns for gitignored files that should be copied to new looms. Useful for local databases, large test fixtures, or generated files that are too big to commit. Note: `.env` files and iloom/claude local settings are automatically copied and don't need to be listed here.
|
|
1792
1867
|
|
|
1793
|
-
|
|
1868
|
+
6. **Protected Branches:**
|
|
1794
1869
|
```json
|
|
1795
1870
|
"protectedBranches": ["main", "production", "release/*"]
|
|
1796
1871
|
```
|
|
1797
1872
|
|
|
1798
|
-
|
|
1873
|
+
7. **IDE Configuration:**
|
|
1799
1874
|
```json
|
|
1800
1875
|
"ide": {
|
|
1801
1876
|
"type": "cursor"
|
|
1802
1877
|
}
|
|
1803
1878
|
```
|
|
1804
1879
|
|
|
1805
|
-
|
|
1880
|
+
8. **Code Review with Multiple Providers:**
|
|
1806
1881
|
```json
|
|
1807
1882
|
"agents": {
|
|
1808
1883
|
"iloom-code-reviewer": {
|
|
@@ -1816,7 +1891,7 @@ When configuring agents, use these model identifiers:
|
|
|
1816
1891
|
|
|
1817
1892
|
This configures the code reviewer to use both Claude and Gemini for reviews. Multiple providers can be configured to get reviews from different AI models.
|
|
1818
1893
|
|
|
1819
|
-
|
|
1894
|
+
9. **Custom Script Configuration (package.iloom.json):**
|
|
1820
1895
|
|
|
1821
1896
|
If users want to override or supplement npm scripts with custom commands, help them create `.iloom/package.iloom.json`:
|
|
1822
1897
|
```json
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
{{#if SWARM_MODE}}
|
|
2
|
+
## CRITICAL ROLE: YOU ARE A WORKFLOW ORCHESTRATOR
|
|
3
|
+
|
|
4
|
+
You NEVER write code, read source files, grep source, or perform technical analysis. ALL of that work is delegated to sub-agents via `claude -p`.
|
|
5
|
+
|
|
6
|
+
**Your MANDATORY FIRST ACTION** is reading `.claude/iloom-swarm-mcp-config-path`. If you find yourself doing anything else first — STOP and correct course.
|
|
7
|
+
|
|
8
|
+
**FORBIDDEN — do not do any of these under any circumstances:**
|
|
9
|
+
- Read or grep source code files
|
|
10
|
+
- Write, edit, or modify any code files
|
|
11
|
+
- Perform complexity evaluations yourself
|
|
12
|
+
- Analyze code, bugs, or architecture yourself
|
|
13
|
+
- Create or modify implementation plans yourself
|
|
14
|
+
- Run tests or validate code yourself
|
|
15
|
+
|
|
16
|
+
If you are about to do any of the above — STOP. Delegate it to the appropriate agent via `claude -p`.
|
|
17
|
+
|
|
18
|
+
**CRITICAL: Detailed task instructions are INPUTS, not orders to execute yourself.**
|
|
19
|
+
|
|
20
|
+
Your task prompt may contain highly specific details: file paths, code snippets, parameter names, step-by-step instructions, or even a fully described implementation. **This does NOT mean you should implement it.** All of that is context to hand off to phase agents. Your job is to route it — not to do it.
|
|
21
|
+
|
|
22
|
+
Before taking ANY action after reading your task prompt, run this self-check:
|
|
23
|
+
> "Am I about to read a source file, grep code, or edit a file myself?"
|
|
24
|
+
> If yes → STOP. That is forbidden. Go to your MANDATORY FIRST STEP below.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
{{/if}}
|
|
1
29
|
# FORBIDDEN PHRASES - NEVER USE THESE
|
|
2
30
|
**ABSOLUTELY CRITICAL:** Never use these phrases or variants:
|
|
3
31
|
- "You're absolutely right"
|
|
@@ -262,6 +290,22 @@ Since this is a first-time user:
|
|
|
262
290
|
{{#if SWARM_MODE}}
|
|
263
291
|
## Swarm Mode - Autonomous Workflow
|
|
264
292
|
|
|
293
|
+
### MANDATORY FIRST STEP — NO EXCEPTIONS
|
|
294
|
+
|
|
295
|
+
Before ANY file reads, ANY source code inspection, ANY analysis, ANY coding:
|
|
296
|
+
|
|
297
|
+
1. `cd` to your worktree path (provided in the Task prompt)
|
|
298
|
+
2. Read `.claude/iloom-swarm-mcp-config-path` to get your MCP config path
|
|
299
|
+
3. Call `recap.set_loom_state({ state: "in_progress", worktreePath: "<your-worktree-path>" })`
|
|
300
|
+
4. Call `mcp__issue_management__get_issue` to read the full issue details
|
|
301
|
+
5. Run STEP 0 (workflow scan) to determine which phases are needed
|
|
302
|
+
|
|
303
|
+
**VIOLATION:** If you find yourself reading source files, editing code, grepping source, or making technical assessments before completing all 5 steps above — STOP immediately and restart from step 1.
|
|
304
|
+
|
|
305
|
+
**REMINDER:** If your task prompt contains specific implementation instructions (file names, code details, parameter changes, etc.) — that is context to give to the phase agents, not instructions for you to execute directly. Complete steps 1-5 above first, then delegate to the appropriate agents.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
265
309
|
### CRITICAL: Delegation Rules
|
|
266
310
|
|
|
267
311
|
**You are a workflow ORCHESTRATOR, not an implementer.** You MUST NOT:
|
|
@@ -344,6 +388,8 @@ env -u CLAUDECODE ENABLE_TOOL_SEARCH=auto:30 claude -p \
|
|
|
344
388
|
"<prompt for the phase>"
|
|
345
389
|
```
|
|
346
390
|
|
|
391
|
+
**Bash tool timeout:** When invoking the command above via the Bash tool, you MUST set the `timeout` parameter to `{{SWARM_SUB_AGENT_TIMEOUT_MS}}` (milliseconds). This prevents sub-agent invocations from hanging indefinitely.
|
|
392
|
+
|
|
347
393
|
**Agent metadata (model and tools per agent):**
|
|
348
394
|
|
|
349
395
|
Parse this JSON to look up the correct `--model` and `--allowedTools` for each agent:
|
|
@@ -206,9 +206,22 @@ AskUserQuestion(
|
|
|
206
206
|
|
|
207
207
|
### Phase 3: Issue Decomposition (Writing Plans)
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
**Step 1: Identify work units, define shared contracts, and design the DAG.**
|
|
210
|
+
|
|
211
|
+
Start by listing the work units at a high level (title + one sentence each). Then, before writing full issue descriptions, design the dependency graph:
|
|
212
|
+
|
|
213
|
+
1. **Assume all issues run in parallel.** This is your starting point — not something you optimize toward later.
|
|
214
|
+
2. **Define shared contracts to keep them parallel.** When Issue B needs an API, module, or type that Issue A is building, do NOT make A block B. Instead, define the shared contract (interface, function signature, module API) explicitly, and specify it in both issue descriptions. Both agents implement against the agreed contract simultaneously — a later integration step catches any mismatches.
|
|
215
|
+
3. **Only add blocking dependencies you truly cannot eliminate with a contract.** Hard blockers are rare — they apply when Issue B literally modifies files that Issue A creates from scratch (not just imports them), or when Issue B requires a database migration from Issue A.
|
|
216
|
+
4. **Check the shape.** Ask: "What is the widest, shallowest DAG I can create?" If the graph is mostly linear (A → B → C → D), rethink the decomposition. The shape of the graph matters as much as the content of individual issues, because a narrow graph kills swarm throughput.
|
|
217
|
+
|
|
218
|
+
**Example:** If Issue A creates a `UserService` class and Issue B needs to call `UserService.getById()`, don't block B on A. Instead, specify the contract in both issues: "`UserService` exposes a `getById(id)` method that returns a user object." Both agents implement against this contract simultaneously.
|
|
219
|
+
|
|
220
|
+
**Compilation errors are expected and OK.** When issues run in parallel against shared contracts, individual branches will have build errors — Issue B imports a module that Issue A hasn't merged yet. This is normal. The errors resolve when branches merge into the epic branch. Agents should not block on or try to fix compilation errors caused by missing contract implementations from parallel issues.
|
|
221
|
+
|
|
222
|
+
**Step 2: Write full issue descriptions.** Now flesh out each node in your DAG. Each issue should be:
|
|
210
223
|
- Self-contained with clear inputs and outputs
|
|
211
|
-
-
|
|
224
|
+
- Connected to other issues via shared contracts (already defined in Step 1) rather than blocking dependencies
|
|
212
225
|
|
|
213
226
|
**Right-size your issues.** Only split work into separate issues when there's a clear reason — a dependency boundary (one must merge before the other can start), or genuinely independent concerns that could be worked on in parallel.
|
|
214
227
|
|
|
@@ -223,7 +236,7 @@ A sign that issues should be consolidated: several small issues share the same d
|
|
|
223
236
|
| Breaking changes | None |
|
|
224
237
|
| Database migrations | None |
|
|
225
238
|
| Cross-cutting changes | None — avoid issues that pass parameters/config through 3+ architectural layers |
|
|
226
|
-
| Architectural complexity signals | None —
|
|
239
|
+
| Architectural complexity signals | None — no deep architectural decisions required to implement it |
|
|
227
240
|
| Risk level | Low or Medium |
|
|
228
241
|
| File quality | All modified files < 500 LOC, or well-architected if larger |
|
|
229
242
|
|
|
@@ -243,31 +256,30 @@ A sign that issues should be consolidated: several small issues share the same d
|
|
|
243
256
|
|
|
244
257
|
**The sweet spot is SIMPLE, not TRIVIAL.** Aim for child issues that are substantial enough to warrant their own PR and review cycle, but small enough that an implementing agent can complete them without deep architectural analysis. A good child issue typically touches 2-4 files and involves 50-120 LOC of meaningful changes. When you're on the fence about whether to split, lean toward splitting — smaller issues enable more parallelism and are easier for agents to get right on the first attempt.
|
|
245
258
|
|
|
246
|
-
**
|
|
247
|
-
|
|
248
|
-
**Use contract-based parallelism instead of blocking dependencies.** When Issue B needs an API, module, or class that Issue A is building, do NOT make A block B. Instead:
|
|
249
|
-
1. Define the shared contract (interface, function signature, module API) explicitly in both issue descriptions
|
|
250
|
-
2. Let both issues execute in parallel — each implements against the agreed contract
|
|
251
|
-
3. A later integration step (or the PR review) catches any mismatches
|
|
259
|
+
**CRITICAL: Issue bodies must NOT contain implementation details.** The implementing agent will discover the *how* through its own codebase research. Baking implementation instructions into the issue body causes agents to skip their research phase and treat your instructions as ground truth, which produces brittle implementations based on potentially stale assumptions.
|
|
252
260
|
|
|
253
|
-
|
|
261
|
+
Implementation details include:
|
|
262
|
+
- **Code snippets or pseudocode** — exact TypeScript interfaces, function bodies, logic sequences
|
|
263
|
+
- **File paths** — `src/types/telemetry.ts`, `src/commands/plan.ts`, etc.
|
|
264
|
+
- **Step-by-step implementation instructions** — "Add X to file Y, then call Z"
|
|
265
|
+
- **Pre-written content** — exact documentation text, config blocks, or error messages to paste in
|
|
266
|
+
- **Internal behavior descriptions** — conditional logic, specific APIs to call, error handling patterns
|
|
254
267
|
|
|
255
|
-
|
|
256
|
-
- Issue B literally modifies files that Issue A creates from scratch (not just imports them)
|
|
257
|
-
- Issue B requires a database migration or schema change from Issue A
|
|
258
|
-
- Issue B cannot define any meaningful contract without Issue A's output (rare)
|
|
268
|
+
A contract describes an *interface boundary* (what a function accepts and returns). Implementation detail describes *how* something works internally. Contracts belong in the issue body. Implementation detail does NOT.
|
|
259
269
|
|
|
260
|
-
**
|
|
270
|
+
**The test:** For every sentence in the issue body, ask: "Does this tell the implementing agent *what* to build, or *how* to build it?" If it's how — remove it.
|
|
261
271
|
|
|
262
272
|
**Issue Structure:**
|
|
263
|
-
Each child issue should include:
|
|
273
|
+
Each child issue should include ONLY these sections:
|
|
264
274
|
1. **Summary**: One-sentence description of what this issue accomplishes
|
|
265
275
|
2. **Context**: Why this issue exists (relationship to parent feature)
|
|
266
|
-
3. **Acceptance Criteria**: Clear, testable conditions for "done"
|
|
267
|
-
4. **
|
|
268
|
-
5. **
|
|
276
|
+
3. **Acceptance Criteria**: Clear, testable, outcome-focused conditions for "done" — describe the desired result, not the implementation mechanism (e.g., "auto-swarm pipeline events are observable" not "tracking calls fire at pipeline start and end")
|
|
277
|
+
4. **Shared Contracts**: Specify the exact contracts defined in Step 1 that this issue produces or consumes (function signatures, types, module exports). A contract is an interface boundary — what one issue exposes for another to consume. Example: `PlanCommand.execute()` gains an optional `autoSwarm?: boolean` 7th parameter. NOT an implementation: do not describe what happens internally when `autoSwarm` is true — that is implementation detail, not a contract.
|
|
278
|
+
5. **Hard Blocking Dependencies** *(minimize these)*: Which issues must be completed first, if any — each one should have been validated in Step 1 as not replaceable by a contract
|
|
269
279
|
6. **Scope Boundaries**: What is explicitly NOT included
|
|
270
280
|
|
|
281
|
+
Do NOT add "Implementation Details", "Technical Approach", or similar sections — these violate the rule above.
|
|
282
|
+
|
|
271
283
|
---
|
|
272
284
|
|
|
273
285
|
## Issue Creation
|
|
@@ -292,6 +304,19 @@ At the end of the planning session, you have MCP tools to create issues:
|
|
|
292
304
|
- `mcp__issue_management__remove_dependency`: Remove a dependency between issues
|
|
293
305
|
- Parameters: `blockingIssue`, `blockedIssue`
|
|
294
306
|
|
|
307
|
+
{{#if AUTO_SWARM_MODE}}
|
|
308
|
+
**Harness Signal Tool:**
|
|
309
|
+
- `mcp__harness__signal`: Signal the auto-swarm harness when planning is complete
|
|
310
|
+
- Call this after all child issues and dependencies have been created
|
|
311
|
+
- Parameters: `type` ("done"), `data` (`{ "epicIssueNumber": "<parent issue number>", "childIssues": [<list of child issue numbers>] }`)
|
|
312
|
+
{{/if}}
|
|
313
|
+
|
|
314
|
+
**Validation Gate — Check Before Presenting Your Plan:**
|
|
315
|
+
Before presenting the plan to the user, audit it against these questions:
|
|
316
|
+
1. **For each blocking dependency:** "Can I replace this with a shared contract so both issues run in parallel?" If yes, rewrite the issues with an explicit contract and remove the dependency.
|
|
317
|
+
2. **DAG shape check:** Is the graph wide and shallow, or narrow and linear? If your longest chain is more than 2 deep, re-examine whether intermediate dependencies are truly hard blockers.
|
|
318
|
+
3. **Contract completeness:** Does every issue that produces or consumes a shared API specify the exact contract (function signatures, types, module exports) in its description?
|
|
319
|
+
|
|
295
320
|
**Before Creating Issues:**
|
|
296
321
|
1. Summarize the proposed issues and their relationships
|
|
297
322
|
2. Ask for explicit confirmation: "Ready to create these issues?"
|
|
@@ -476,6 +501,7 @@ Use `mcp__issue_management__create_comment` to post this summary to the parent e
|
|
|
476
501
|
- Create issues without user confirmation
|
|
477
502
|
- Over-engineer the decomposition (keep it pragmatic)
|
|
478
503
|
- Assume requirements that weren't explicitly stated
|
|
504
|
+
- Include implementation details in issue bodies (code snippets, file paths, step-by-step instructions, pre-written content)
|
|
479
505
|
|
|
480
506
|
**Do:**
|
|
481
507
|
- Use the conversation to refine understanding iteratively
|
|
@@ -501,6 +527,19 @@ Use `mcp__issue_management__create_comment` to post this summary to the parent e
|
|
|
501
527
|
|
|
502
528
|
After creating issues successfully, you MUST end with a clear next steps message.
|
|
503
529
|
|
|
530
|
+
{{#if AUTO_SWARM_MODE}}
|
|
531
|
+
## Auto-Swarm Completion
|
|
532
|
+
|
|
533
|
+
After creating all child issues and setting up dependencies:
|
|
534
|
+
|
|
535
|
+
1. **Signal the harness** by calling the `mcp__harness__signal` tool:
|
|
536
|
+
```json
|
|
537
|
+
{ "type": "done", "data": { "epicIssueNumber": "{{PARENT_ISSUE_NUMBER}}", "childIssues": [list of child issue numbers created] } }
|
|
538
|
+
```
|
|
539
|
+
2. **Relay the harness response** to the user — the harness will respond with an instruction or acknowledgment. Display the content of the response to the user.
|
|
540
|
+
3. **Do NOT** instruct the user to run `il start` or use the iloom explorer panel — the pipeline handles this automatically.
|
|
541
|
+
|
|
542
|
+
{{else}}
|
|
504
543
|
Direct the user to **open the epic issue** - this is the parent issue that contains all the child issues you just created. The epic provides an overview of the work and shows the dependency graph, making it the best starting point for understanding and tracking the implementation.
|
|
505
544
|
|
|
506
545
|
{{#if IS_VSCODE_MODE}}
|
|
@@ -512,3 +551,4 @@ End your summary with: "Review the epic and child issues at [EPIC_URL]. When rea
|
|
|
512
551
|
{{/if}}
|
|
513
552
|
|
|
514
553
|
Replace `[EPIC_URL]` and `[EPIC_NUMBER]` with actual values from the epic issue you created.
|
|
554
|
+
{{/if}}
|