@iloom/cli 0.9.2 → 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 +160 -41
- package/dist/{BranchNamingService-K6XNWQ6C.js → BranchNamingService-25KSZAEM.js} +2 -2
- package/dist/ClaudeContextManager-66GR4BGM.js +14 -0
- package/dist/ClaudeService-7KM5NA5Z.js +13 -0
- package/dist/{GitHubService-TGWJN4V4.js → GitHubService-MEHKHUQP.js} +4 -4
- package/dist/IssueTrackerFactory-NG53YX5S.js +14 -0
- package/dist/{LoomLauncher-73NXL2CL.js → LoomLauncher-TDLZSYG2.js} +9 -9
- package/dist/{MetadataManager-W3C54UYT.js → MetadataManager-5QZSTKNN.js} +2 -2
- package/dist/{ProjectCapabilityDetector-N5L7T4IY.js → ProjectCapabilityDetector-5KSYUTBJ.js} +3 -3
- package/dist/{PromptTemplateManager-36YLQRHP.js → PromptTemplateManager-YOE2SIPG.js} +2 -2
- package/dist/README.md +160 -41
- package/dist/{SettingsManager-AW3JTJHD.js → SettingsManager-FNKCOZMQ.js} +4 -2
- package/dist/agents/iloom-artifact-reviewer.md +11 -0
- package/dist/agents/iloom-code-reviewer.md +14 -0
- package/dist/agents/iloom-issue-analyze-and-plan.md +55 -12
- package/dist/agents/iloom-issue-analyzer.md +49 -6
- package/dist/agents/iloom-issue-complexity-evaluator.md +47 -6
- package/dist/agents/iloom-issue-enhancer.md +86 -7
- package/dist/agents/iloom-issue-implementer.md +48 -7
- package/dist/agents/iloom-issue-planner.md +115 -62
- package/dist/{build-THZI572G.js → build-VHGEMXBA.js} +9 -9
- package/dist/chunk-4232AHNQ.js +35 -0
- package/dist/chunk-4232AHNQ.js.map +1 -0
- package/dist/chunk-4E7LCFUG.js +24 -0
- package/dist/chunk-4E7LCFUG.js.map +1 -0
- package/dist/{chunk-AR5QKYNE.js → chunk-4FGEGQW4.js} +4 -4
- package/dist/{chunk-R4YWBGY6.js → chunk-5FJWO4IT.js} +67 -22
- package/dist/chunk-5FJWO4IT.js.map +1 -0
- package/dist/{chunk-VPTAX5TR.js → chunk-5RPBYK5Q.js} +35 -30
- package/dist/chunk-5RPBYK5Q.js.map +1 -0
- package/dist/{chunk-YKFCCV6S.js → chunk-63QWFWH3.js} +7 -7
- package/dist/chunk-63QWFWH3.js.map +1 -0
- package/dist/{chunk-RI2YL6TK.js → chunk-7VHJNVLF.js} +80 -23
- package/dist/chunk-7VHJNVLF.js.map +1 -0
- package/dist/{chunk-B7U6OKUR.js → chunk-C6HNNJIV.js} +11 -3
- package/dist/chunk-C6HNNJIV.js.map +1 -0
- package/dist/{chunk-A7NJF73J.js → chunk-CVCTIDDK.js} +4 -4
- package/dist/{chunk-Z2TWEXR7.js → chunk-E6KOWMKA.js} +6 -6
- package/dist/chunk-E6KOWMKA.js.map +1 -0
- package/dist/{chunk-3I4ONZRT.js → chunk-EVPZFV3K.js} +10 -10
- package/dist/chunk-EVPZFV3K.js.map +1 -0
- package/dist/{chunk-IZIYLYPK.js → chunk-G5V75JD5.js} +2 -2
- package/dist/chunk-GRISNU6G.js +651 -0
- package/dist/chunk-GRISNU6G.js.map +1 -0
- package/dist/chunk-HEXKPKCK.js +1396 -0
- package/dist/chunk-HEXKPKCK.js.map +1 -0
- package/dist/{chunk-TC7APDKU.js → chunk-I5T677EA.js} +2 -2
- package/dist/{chunk-KBEIQP4G.js → chunk-KB64WNBZ.js} +43 -3
- package/dist/chunk-KB64WNBZ.js.map +1 -0
- package/dist/{chunk-NWMORW3U.js → chunk-KIK2ZFAL.js} +2 -2
- package/dist/{chunk-CWRI4JC3.js → chunk-KKV5WH5M.js} +30 -31
- package/dist/chunk-KKV5WH5M.js.map +1 -0
- package/dist/{chunk-DGG2VY7B.js → chunk-KVHIAWVT.js} +9 -9
- package/dist/chunk-KVHIAWVT.js.map +1 -0
- package/dist/{chunk-OFDN5NKS.js → chunk-KXDRI47U.js} +69 -12
- package/dist/chunk-KXDRI47U.js.map +1 -0
- package/dist/{chunk-NUACL52E.js → chunk-LLHXQS3C.js} +2 -2
- package/dist/chunk-LUKXJSRI.js +73 -0
- package/dist/chunk-LUKXJSRI.js.map +1 -0
- package/dist/{chunk-TL72BGP6.js → chunk-MORRVYPT.js} +2 -2
- package/dist/chunk-OTGH2HRS.js +1427 -0
- package/dist/chunk-OTGH2HRS.js.map +1 -0
- package/dist/{chunk-7ZEHSSUP.js → chunk-P4O6EH46.js} +4 -4
- package/dist/{chunk-KAYXR544.js → chunk-QVLPWNE3.js} +2 -2
- package/dist/chunk-QZWEJVWV.js +207 -0
- package/dist/chunk-QZWEJVWV.js.map +1 -0
- package/dist/chunk-RJ3VBUFK.js +781 -0
- package/dist/chunk-RJ3VBUFK.js.map +1 -0
- package/dist/chunk-RSYT7MVI.js +202 -0
- package/dist/chunk-RSYT7MVI.js.map +1 -0
- package/dist/{chunk-6IIL5M2L.js → chunk-S7PZA6IV.js} +10 -8
- package/dist/{chunk-6IIL5M2L.js.map → chunk-S7PZA6IV.js.map} +1 -1
- package/dist/chunk-SKSYYBCU.js +229 -0
- package/dist/chunk-SKSYYBCU.js.map +1 -0
- package/dist/{chunk-ULSWCPQG.js → chunk-SWSJWA2S.js} +476 -5
- package/dist/chunk-SWSJWA2S.js.map +1 -0
- package/dist/{chunk-KXGQYLFZ.js → chunk-UKBAJ2QQ.js} +61 -7
- package/dist/chunk-UKBAJ2QQ.js.map +1 -0
- package/dist/{chunk-FO5GGFOV.js → chunk-UR5DGNUO.js} +71 -9
- package/dist/chunk-UR5DGNUO.js.map +1 -0
- package/dist/{chunk-QN47QVBX.js → chunk-UUEW5KWB.js} +1 -1
- package/dist/chunk-UUEW5KWB.js.map +1 -0
- package/dist/{chunk-4CO6KG5S.js → chunk-VG45TUYK.js} +53 -7
- package/dist/{chunk-4CO6KG5S.js.map → chunk-VG45TUYK.js.map} +1 -1
- package/dist/{chunk-4LKGCFGG.js → chunk-WWKOVDWC.js} +2 -2
- package/dist/{chunk-KJTVU3HZ.js → chunk-WXIM2WS7.js} +8 -8
- package/dist/chunk-WXIM2WS7.js.map +1 -0
- package/dist/{chunk-VOGGLPG5.js → chunk-YQ57ORTV.js} +14 -1
- package/dist/chunk-YQ57ORTV.js.map +1 -0
- package/dist/{chunk-SOSQILHO.js → chunk-ZNMPGMHY.js} +44 -797
- package/dist/chunk-ZNMPGMHY.js.map +1 -0
- package/dist/{claude-TP2QO3BU.js → claude-7GGEWVEM.js} +2 -2
- package/dist/{cleanup-PJRIFFU4.js → cleanup-6PVAC4NI.js} +85 -34
- package/dist/cleanup-6PVAC4NI.js.map +1 -0
- package/dist/cli.js +630 -801
- package/dist/cli.js.map +1 -1
- package/dist/{commit-IVP3M4HG.js → commit-FZR5XDQG.js} +26 -23
- package/dist/commit-FZR5XDQG.js.map +1 -0
- package/dist/{compile-R2J65HBQ.js → compile-7ALJHZ4N.js} +9 -9
- package/dist/{contribute-VDZXHK5Y.js → contribute-5GKLK3BQ.js} +14 -6
- package/dist/contribute-5GKLK3BQ.js.map +1 -0
- package/dist/{dev-server-7F622OEO.js → dev-server-7SMIB7OF.js} +29 -15
- package/dist/dev-server-7SMIB7OF.js.map +1 -0
- package/dist/{feedback-E7VET7CL.js → feedback-G2GJFN2F.js} +18 -16
- package/dist/{feedback-E7VET7CL.js.map → feedback-G2GJFN2F.js.map} +1 -1
- package/dist/{git-2QDQ2X2S.js → git-GTLKAZRJ.js} +4 -4
- package/dist/hooks/iloom-hook.js +15 -0
- package/dist/ignite-H2O5Y5A2.js +34 -0
- package/dist/ignite-H2O5Y5A2.js.map +1 -0
- package/dist/index.d.ts +482 -58
- package/dist/index.js +1340 -44
- package/dist/index.js.map +1 -1
- package/dist/{init-676DHF6R.js → init-32YOKXRL.js} +57 -21
- package/dist/init-32YOKXRL.js.map +1 -0
- package/dist/{issues-PJSOLOBJ.js → issues-4UUAQ5K6.js} +61 -20
- package/dist/issues-4UUAQ5K6.js.map +1 -0
- package/dist/{lint-CJM7BAIM.js → lint-AAN2NZWG.js} +9 -9
- package/dist/mcp/harness-server.js +140 -0
- package/dist/mcp/harness-server.js.map +1 -0
- package/dist/mcp/issue-management-server.js +2599 -262
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/mcp/recap-server.js +144 -21
- package/dist/mcp/recap-server.js.map +1 -1
- package/dist/{neon-helpers-VVFFTLXE.js → neon-helpers-CQN2PB4S.js} +3 -3
- package/dist/neon-helpers-CQN2PB4S.js.map +1 -0
- package/dist/{open-544H7JF5.js → open-FXWW3VI4.js} +15 -15
- package/dist/open-FXWW3VI4.js.map +1 -0
- package/dist/{plan-Q7ELXDLC.js → plan-RQ5FPIGF.js} +358 -40
- package/dist/plan-RQ5FPIGF.js.map +1 -0
- package/dist/{projects-LH362JZQ.js → projects-2UOXFLNZ.js} +4 -4
- package/dist/prompts/CLAUDE.md +62 -0
- package/dist/prompts/init-prompt.txt +430 -34
- package/dist/prompts/issue-prompt.txt +473 -54
- package/dist/prompts/plan-prompt.txt +140 -19
- package/dist/prompts/pr-prompt.txt +44 -1
- package/dist/prompts/regular-prompt.txt +42 -1
- package/dist/prompts/session-summary-prompt.txt +14 -0
- package/dist/prompts/swarm-orchestrator-prompt.txt +464 -0
- package/dist/{rebase-YND35CIE.js → rebase-6NVLX5V7.js} +21 -12
- package/dist/rebase-6NVLX5V7.js.map +1 -0
- package/dist/{recap-3W7COH7D.js → recap-OMBOKJST.js} +47 -19
- package/dist/recap-OMBOKJST.js.map +1 -0
- package/dist/{run-QUXJKDQQ.js → run-BBXLRIZB.js} +15 -15
- package/dist/run-BBXLRIZB.js.map +1 -0
- package/dist/schema/package-iloom.schema.json +58 -0
- package/dist/schema/settings.schema.json +149 -15
- package/dist/{shell-QGECBLST.js → shell-RF7LTND5.js} +14 -7
- package/dist/shell-RF7LTND5.js.map +1 -0
- package/dist/{summary-G2T4452H.js → summary-WTQZ7XG2.js} +27 -25
- package/dist/summary-WTQZ7XG2.js.map +1 -0
- package/dist/{test-EA5NQFDC.js → test-SGO6I5Z7.js} +9 -9
- package/dist/{test-git-M7LSLEFL.js → test-git-XM4TM65W.js} +4 -4
- package/dist/test-jira-LDTOYFSD.js +96 -0
- package/dist/test-jira-LDTOYFSD.js.map +1 -0
- package/dist/{test-prefix-64NAAUON.js → test-prefix-GBO37XCN.js} +4 -4
- package/dist/{test-webserver-OK6Z5FJM.js → test-webserver-NZ3JTVLL.js} +6 -6
- package/dist/{vscode-AR5NNXXI.js → vscode-6XUGHJKL.js} +7 -7
- package/package.json +5 -1
- package/dist/ClaudeContextManager-HR5JQKAI.js +0 -14
- package/dist/ClaudeService-TK7FMC2X.js +0 -13
- package/dist/chunk-3I4ONZRT.js.map +0 -1
- package/dist/chunk-B7U6OKUR.js.map +0 -1
- package/dist/chunk-CWRI4JC3.js.map +0 -1
- package/dist/chunk-DGG2VY7B.js.map +0 -1
- package/dist/chunk-FJDRTVJX.js +0 -520
- package/dist/chunk-FJDRTVJX.js.map +0 -1
- package/dist/chunk-FO5GGFOV.js.map +0 -1
- package/dist/chunk-KBEIQP4G.js.map +0 -1
- package/dist/chunk-KJTVU3HZ.js.map +0 -1
- package/dist/chunk-KXGQYLFZ.js.map +0 -1
- package/dist/chunk-OFDN5NKS.js.map +0 -1
- package/dist/chunk-QN47QVBX.js.map +0 -1
- package/dist/chunk-R4YWBGY6.js.map +0 -1
- package/dist/chunk-RI2YL6TK.js.map +0 -1
- package/dist/chunk-SOSQILHO.js.map +0 -1
- package/dist/chunk-ULSWCPQG.js.map +0 -1
- package/dist/chunk-VOGGLPG5.js.map +0 -1
- package/dist/chunk-VPTAX5TR.js.map +0 -1
- package/dist/chunk-W6DP5RVR.js +0 -101
- package/dist/chunk-W6DP5RVR.js.map +0 -1
- package/dist/chunk-WHI5KEOX.js +0 -121
- package/dist/chunk-WHI5KEOX.js.map +0 -1
- package/dist/chunk-YKFCCV6S.js.map +0 -1
- package/dist/chunk-Z2TWEXR7.js.map +0 -1
- package/dist/cleanup-PJRIFFU4.js.map +0 -1
- package/dist/commit-IVP3M4HG.js.map +0 -1
- package/dist/contribute-VDZXHK5Y.js.map +0 -1
- package/dist/dev-server-7F622OEO.js.map +0 -1
- package/dist/ignite-IW35CDBD.js +0 -784
- package/dist/ignite-IW35CDBD.js.map +0 -1
- package/dist/init-676DHF6R.js.map +0 -1
- package/dist/issues-PJSOLOBJ.js.map +0 -1
- package/dist/open-544H7JF5.js.map +0 -1
- package/dist/plan-Q7ELXDLC.js.map +0 -1
- package/dist/rebase-YND35CIE.js.map +0 -1
- package/dist/recap-3W7COH7D.js.map +0 -1
- package/dist/run-QUXJKDQQ.js.map +0 -1
- package/dist/shell-QGECBLST.js.map +0 -1
- package/dist/summary-G2T4452H.js.map +0 -1
- /package/dist/{BranchNamingService-K6XNWQ6C.js.map → BranchNamingService-25KSZAEM.js.map} +0 -0
- /package/dist/{ClaudeContextManager-HR5JQKAI.js.map → ClaudeContextManager-66GR4BGM.js.map} +0 -0
- /package/dist/{ClaudeService-TK7FMC2X.js.map → ClaudeService-7KM5NA5Z.js.map} +0 -0
- /package/dist/{GitHubService-TGWJN4V4.js.map → GitHubService-MEHKHUQP.js.map} +0 -0
- /package/dist/{MetadataManager-W3C54UYT.js.map → IssueTrackerFactory-NG53YX5S.js.map} +0 -0
- /package/dist/{LoomLauncher-73NXL2CL.js.map → LoomLauncher-TDLZSYG2.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-N5L7T4IY.js.map → MetadataManager-5QZSTKNN.js.map} +0 -0
- /package/dist/{PromptTemplateManager-36YLQRHP.js.map → ProjectCapabilityDetector-5KSYUTBJ.js.map} +0 -0
- /package/dist/{SettingsManager-AW3JTJHD.js.map → PromptTemplateManager-YOE2SIPG.js.map} +0 -0
- /package/dist/{claude-TP2QO3BU.js.map → SettingsManager-FNKCOZMQ.js.map} +0 -0
- /package/dist/{build-THZI572G.js.map → build-VHGEMXBA.js.map} +0 -0
- /package/dist/{chunk-AR5QKYNE.js.map → chunk-4FGEGQW4.js.map} +0 -0
- /package/dist/{chunk-A7NJF73J.js.map → chunk-CVCTIDDK.js.map} +0 -0
- /package/dist/{chunk-IZIYLYPK.js.map → chunk-G5V75JD5.js.map} +0 -0
- /package/dist/{chunk-TC7APDKU.js.map → chunk-I5T677EA.js.map} +0 -0
- /package/dist/{chunk-NWMORW3U.js.map → chunk-KIK2ZFAL.js.map} +0 -0
- /package/dist/{chunk-NUACL52E.js.map → chunk-LLHXQS3C.js.map} +0 -0
- /package/dist/{chunk-TL72BGP6.js.map → chunk-MORRVYPT.js.map} +0 -0
- /package/dist/{chunk-7ZEHSSUP.js.map → chunk-P4O6EH46.js.map} +0 -0
- /package/dist/{chunk-KAYXR544.js.map → chunk-QVLPWNE3.js.map} +0 -0
- /package/dist/{chunk-4LKGCFGG.js.map → chunk-WWKOVDWC.js.map} +0 -0
- /package/dist/{git-2QDQ2X2S.js.map → claude-7GGEWVEM.js.map} +0 -0
- /package/dist/{compile-R2J65HBQ.js.map → compile-7ALJHZ4N.js.map} +0 -0
- /package/dist/{neon-helpers-VVFFTLXE.js.map → git-GTLKAZRJ.js.map} +0 -0
- /package/dist/{lint-CJM7BAIM.js.map → lint-AAN2NZWG.js.map} +0 -0
- /package/dist/{projects-LH362JZQ.js.map → projects-2UOXFLNZ.js.map} +0 -0
- /package/dist/{test-EA5NQFDC.js.map → test-SGO6I5Z7.js.map} +0 -0
- /package/dist/{test-git-M7LSLEFL.js.map → test-git-XM4TM65W.js.map} +0 -0
- /package/dist/{test-prefix-64NAAUON.js.map → test-prefix-GBO37XCN.js.map} +0 -0
- /package/dist/{test-webserver-OK6Z5FJM.js.map → test-webserver-NZ3JTVLL.js.map} +0 -0
- /package/dist/{vscode-AR5NNXXI.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."
|
|
@@ -325,6 +334,63 @@ The following JSON Schema defines valid iloom settings:
|
|
|
325
334
|
"review": {
|
|
326
335
|
"type": "boolean",
|
|
327
336
|
"description": "Whether artifacts from this agent should be reviewed before posting (defaults to false)"
|
|
337
|
+
},
|
|
338
|
+
"agents": {
|
|
339
|
+
"type": "object",
|
|
340
|
+
"additionalProperties": {
|
|
341
|
+
"type": "object",
|
|
342
|
+
"properties": {
|
|
343
|
+
"model": {
|
|
344
|
+
"type": "string",
|
|
345
|
+
"enum": [
|
|
346
|
+
"sonnet",
|
|
347
|
+
"opus",
|
|
348
|
+
"haiku"
|
|
349
|
+
],
|
|
350
|
+
"description": "Claude model shorthand: sonnet, opus, or haiku"
|
|
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
|
+
},
|
|
361
|
+
"enabled": {
|
|
362
|
+
"type": "boolean",
|
|
363
|
+
"description": "Whether this agent is enabled. Defaults to true."
|
|
364
|
+
},
|
|
365
|
+
"providers": {
|
|
366
|
+
"type": "object",
|
|
367
|
+
"additionalProperties": {
|
|
368
|
+
"type": "string"
|
|
369
|
+
},
|
|
370
|
+
"propertyNames": {
|
|
371
|
+
"enum": [
|
|
372
|
+
"claude",
|
|
373
|
+
"gemini",
|
|
374
|
+
"codex"
|
|
375
|
+
]
|
|
376
|
+
},
|
|
377
|
+
"description": "Map of review providers to model names. Keys: claude, gemini, codex. Values: model name strings (e.g., \"sonnet\", \"gemini-3-pro-preview\", \"gpt-5.2-codex\")"
|
|
378
|
+
},
|
|
379
|
+
"review": {
|
|
380
|
+
"type": "boolean",
|
|
381
|
+
"description": "Whether artifacts from this agent should be reviewed before posting (defaults to false)"
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
"additionalProperties": false
|
|
385
|
+
},
|
|
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."
|
|
328
394
|
}
|
|
329
395
|
},
|
|
330
396
|
"additionalProperties": false
|
|
@@ -336,7 +402,7 @@ The following JSON Schema defines valid iloom settings:
|
|
|
336
402
|
"type": "null"
|
|
337
403
|
}
|
|
338
404
|
],
|
|
339
|
-
"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)"
|
|
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."
|
|
340
406
|
},
|
|
341
407
|
"spin": {
|
|
342
408
|
"type": "object",
|
|
@@ -350,6 +416,15 @@ The following JSON Schema defines valid iloom settings:
|
|
|
350
416
|
],
|
|
351
417
|
"default": "opus",
|
|
352
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."
|
|
353
428
|
}
|
|
354
429
|
},
|
|
355
430
|
"additionalProperties": false,
|
|
@@ -413,17 +488,6 @@ The following JSON Schema defines valid iloom settings:
|
|
|
413
488
|
"capabilities": {
|
|
414
489
|
"type": "object",
|
|
415
490
|
"properties": {
|
|
416
|
-
"capabilities": {
|
|
417
|
-
"type": "array",
|
|
418
|
-
"items": {
|
|
419
|
-
"type": "string",
|
|
420
|
-
"enum": [
|
|
421
|
-
"cli",
|
|
422
|
-
"web"
|
|
423
|
-
]
|
|
424
|
-
},
|
|
425
|
-
"description": "Explicitly declared project capabilities (auto-detected if not specified)"
|
|
426
|
-
},
|
|
427
491
|
"web": {
|
|
428
492
|
"type": "object",
|
|
429
493
|
"properties": {
|
|
@@ -434,7 +498,8 @@ The following JSON Schema defines valid iloom settings:
|
|
|
434
498
|
"description": "Base port for web workspace port calculations (default: 3000)"
|
|
435
499
|
}
|
|
436
500
|
},
|
|
437
|
-
"additionalProperties": false
|
|
501
|
+
"additionalProperties": false,
|
|
502
|
+
"description": "Web dev server settings. To declare a project as a web project, add \"web\" to the capabilities array in .iloom/package.iloom.json or .iloom/package.iloom.local.json."
|
|
438
503
|
},
|
|
439
504
|
"database": {
|
|
440
505
|
"type": "object",
|
|
@@ -489,10 +554,11 @@ The following JSON Schema defines valid iloom settings:
|
|
|
489
554
|
"type": "string",
|
|
490
555
|
"enum": [
|
|
491
556
|
"github",
|
|
492
|
-
"linear"
|
|
557
|
+
"linear",
|
|
558
|
+
"jira"
|
|
493
559
|
],
|
|
494
560
|
"default": "github",
|
|
495
|
-
"description": "Issue tracker provider (github, linear)"
|
|
561
|
+
"description": "Issue tracker provider (github, linear, jira)"
|
|
496
562
|
},
|
|
497
563
|
"github": {
|
|
498
564
|
"type": "object",
|
|
@@ -529,6 +595,69 @@ The following JSON Schema defines valid iloom settings:
|
|
|
529
595
|
"teamId"
|
|
530
596
|
],
|
|
531
597
|
"additionalProperties": false
|
|
598
|
+
},
|
|
599
|
+
"jira": {
|
|
600
|
+
"type": "object",
|
|
601
|
+
"properties": {
|
|
602
|
+
"host": {
|
|
603
|
+
"type": "string",
|
|
604
|
+
"minLength": 1,
|
|
605
|
+
"description": "Jira instance URL (e.g., \"https://yourcompany.atlassian.net\")"
|
|
606
|
+
},
|
|
607
|
+
"username": {
|
|
608
|
+
"type": "string",
|
|
609
|
+
"minLength": 1,
|
|
610
|
+
"description": "Jira username or email address"
|
|
611
|
+
},
|
|
612
|
+
"apiToken": {
|
|
613
|
+
"type": "string",
|
|
614
|
+
"description": "Jira API token. SECURITY: Store in settings.local.json only, never commit to source control. Generate at: https://id.atlassian.com/manage-profile/security/api-tokens"
|
|
615
|
+
},
|
|
616
|
+
"projectKey": {
|
|
617
|
+
"type": "string",
|
|
618
|
+
"minLength": 1,
|
|
619
|
+
"description": "Jira project key (e.g., \"PROJ\", \"ENG\")"
|
|
620
|
+
},
|
|
621
|
+
"boardId": {
|
|
622
|
+
"type": "string",
|
|
623
|
+
"description": "Jira board ID for sprint/workflow operations (optional)"
|
|
624
|
+
},
|
|
625
|
+
"transitionMappings": {
|
|
626
|
+
"type": "object",
|
|
627
|
+
"additionalProperties": {
|
|
628
|
+
"type": "string"
|
|
629
|
+
},
|
|
630
|
+
"description": "Map iloom states to Jira transition names (e.g., {\"In Review\": \"Start Review\"})"
|
|
631
|
+
},
|
|
632
|
+
"defaultIssueType": {
|
|
633
|
+
"type": "string",
|
|
634
|
+
"minLength": 1,
|
|
635
|
+
"default": "Task",
|
|
636
|
+
"description": "Default Jira issue type name for creating issues (e.g., \"Task\", \"Story\", \"Bug\")"
|
|
637
|
+
},
|
|
638
|
+
"defaultSubtaskType": {
|
|
639
|
+
"type": "string",
|
|
640
|
+
"minLength": 1,
|
|
641
|
+
"default": "Subtask",
|
|
642
|
+
"description": "Default Jira issue type name for creating subtasks/child issues (e.g., \"Subtask\", \"Sub-task\")"
|
|
643
|
+
},
|
|
644
|
+
"doneStatuses": {
|
|
645
|
+
"type": "array",
|
|
646
|
+
"items": {
|
|
647
|
+
"type": "string"
|
|
648
|
+
},
|
|
649
|
+
"default": [
|
|
650
|
+
"Done"
|
|
651
|
+
],
|
|
652
|
+
"description": "Status names to exclude from issue lists (e.g., [\"Done\", \"Closed\", \"Verify\"])"
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
"required": [
|
|
656
|
+
"host",
|
|
657
|
+
"username",
|
|
658
|
+
"projectKey"
|
|
659
|
+
],
|
|
660
|
+
"additionalProperties": false
|
|
532
661
|
}
|
|
533
662
|
},
|
|
534
663
|
"additionalProperties": false,
|
|
@@ -552,6 +681,11 @@ The following JSON Schema defines valid iloom settings:
|
|
|
552
681
|
"autoCommitPush": {
|
|
553
682
|
"type": "boolean",
|
|
554
683
|
"description": "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is github-draft-pr."
|
|
684
|
+
},
|
|
685
|
+
"openBrowserOnFinish": {
|
|
686
|
+
"type": "boolean",
|
|
687
|
+
"default": true,
|
|
688
|
+
"description": "Open the PR in the default browser after finishing in github-pr or github-draft-pr mode. Use --no-browser flag to override."
|
|
555
689
|
}
|
|
556
690
|
},
|
|
557
691
|
"additionalProperties": false,
|
|
@@ -720,6 +854,10 @@ Extract these current values if they exist:
|
|
|
720
854
|
- `currentIssueProvider` from `issueManagement.provider` field (default: "github")
|
|
721
855
|
- `currentLinearTeamId` from `issueManagement.linear.teamId` field (if Linear is provider)
|
|
722
856
|
- `currentGitHubRemote` from `issueManagement.github.remote` field (if GitHub is provider and multiple remotes)
|
|
857
|
+
- `currentJiraHost` from `issueManagement.jira.host` field (if Jira is provider)
|
|
858
|
+
- `currentJiraUsername` from `issueManagement.jira.username` field (if Jira is provider)
|
|
859
|
+
- `currentJiraProjectKey` from `issueManagement.jira.projectKey` field (if Jira is provider)
|
|
860
|
+
- `currentJiraBoardId` from `issueManagement.jira.boardId` field (if Jira is provider, optional)
|
|
723
861
|
|
|
724
862
|
**If configuration already exists, display current configuration summary:**
|
|
725
863
|
|
|
@@ -733,6 +871,9 @@ IDE: [currentIdeType or "vscode (default)"]
|
|
|
733
871
|
Issue Tracker: [currentIssueProvider or "github (default)"]
|
|
734
872
|
Linear Team ID: [currentLinearTeamId] (only if currentIssueProvider == linear)
|
|
735
873
|
{{#if MULTIPLE_REMOTES}}GitHub Remote: [currentGitHubRemote] (only if currentIssueProvider == github){{/if}}
|
|
874
|
+
Jira Host: [currentJiraHost] (only if currentIssueProvider == jira)
|
|
875
|
+
Jira Project Key: [currentJiraProjectKey] (only if currentIssueProvider == jira)
|
|
876
|
+
Jira Board ID: [currentJiraBoardId] (only if currentIssueProvider == jira and boardId is set)
|
|
736
877
|
```
|
|
737
878
|
|
|
738
879
|
**Then ask the user what they want to do:**
|
|
@@ -814,7 +955,69 @@ The agent will:
|
|
|
814
955
|
4. Create `.iloom/package.iloom.json` with the detected configuration
|
|
815
956
|
5. Detect and set project capabilities (cli, web) based on the framework
|
|
816
957
|
|
|
817
|
-
**
|
|
958
|
+
**package.iloom.json Schema:**
|
|
959
|
+
```json
|
|
960
|
+
{
|
|
961
|
+
"$ref": "#/definitions/PackageIloom",
|
|
962
|
+
"definitions": {
|
|
963
|
+
"PackageIloom": {
|
|
964
|
+
"type": "object",
|
|
965
|
+
"properties": {
|
|
966
|
+
"capabilities": {
|
|
967
|
+
"type": "array",
|
|
968
|
+
"items": {
|
|
969
|
+
"type": "string",
|
|
970
|
+
"enum": [
|
|
971
|
+
"cli",
|
|
972
|
+
"web"
|
|
973
|
+
]
|
|
974
|
+
},
|
|
975
|
+
"description": "Project capabilities - \"cli\" for command-line tools (enables CLI isolation), \"web\" for web applications (enables port assignment and dev server)"
|
|
976
|
+
},
|
|
977
|
+
"scripts": {
|
|
978
|
+
"type": "object",
|
|
979
|
+
"properties": {
|
|
980
|
+
"install": {
|
|
981
|
+
"type": "string",
|
|
982
|
+
"description": "Install command (e.g., \"bundle install\", \"poetry install\")"
|
|
983
|
+
},
|
|
984
|
+
"build": {
|
|
985
|
+
"type": "string",
|
|
986
|
+
"description": "Build/compile command"
|
|
987
|
+
},
|
|
988
|
+
"test": {
|
|
989
|
+
"type": "string",
|
|
990
|
+
"description": "Test suite command"
|
|
991
|
+
},
|
|
992
|
+
"dev": {
|
|
993
|
+
"type": "string",
|
|
994
|
+
"description": "Dev server command"
|
|
995
|
+
},
|
|
996
|
+
"lint": {
|
|
997
|
+
"type": "string",
|
|
998
|
+
"description": "Linting command"
|
|
999
|
+
},
|
|
1000
|
+
"typecheck": {
|
|
1001
|
+
"type": "string",
|
|
1002
|
+
"description": "Type checking command"
|
|
1003
|
+
},
|
|
1004
|
+
"compile": {
|
|
1005
|
+
"type": "string",
|
|
1006
|
+
"description": "Compilation command (preferred over typecheck if both exist)"
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
1009
|
+
"additionalProperties": false,
|
|
1010
|
+
"description": "Custom shell commands for project operations. These are raw shell commands, not npm script names."
|
|
1011
|
+
}
|
|
1012
|
+
},
|
|
1013
|
+
"additionalProperties": false
|
|
1014
|
+
}
|
|
1015
|
+
},
|
|
1016
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
1017
|
+
}
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
**File Format Example:**
|
|
818
1021
|
```json
|
|
819
1022
|
{
|
|
820
1023
|
"capabilities": ["cli"],
|
|
@@ -855,7 +1058,16 @@ If the framework detector did not set capabilities, or if you need to ask the us
|
|
|
855
1058
|
- "web" - Web application with dev server
|
|
856
1059
|
- "both" - Both CLI and web capabilities
|
|
857
1060
|
- "neither" - Library or other project type
|
|
858
|
-
|
|
1061
|
+
|
|
1062
|
+
**Choose where to save package.iloom configuration:**
|
|
1063
|
+
|
|
1064
|
+
After determining the configuration, ask the user where to save it:
|
|
1065
|
+
- **Project** (`package.iloom.json`) - Shared with team, committed to git
|
|
1066
|
+
- **Local** (`package.iloom.local.json`) - Local only, gitignored, never committed
|
|
1067
|
+
|
|
1068
|
+
Default to **Local** if fork was detected (origin + upstream remotes). Otherwise default to **Project**.
|
|
1069
|
+
|
|
1070
|
+
Write the capabilities and scripts to the chosen file.
|
|
859
1071
|
|
|
860
1072
|
**When to infer capabilities:**
|
|
861
1073
|
- Flask/Django/FastAPI/Rails/Actix/Rocket detected -> include "web"
|
|
@@ -873,7 +1085,7 @@ This phase configures external tooling integrations. Use AskUserQuestion to gath
|
|
|
873
1085
|
**Step 1: Issue Tracker Provider**
|
|
874
1086
|
|
|
875
1087
|
{{#if MULTIPLE_REMOTES}}
|
|
876
|
-
Since this repository has multiple git remotes, GitHub Issues is suggested as the default since it integrates with your existing GitHub workflow. However, you can choose Linear if that's your team's issue tracker.
|
|
1088
|
+
Since this repository has multiple git remotes, GitHub Issues is suggested as the default since it integrates with your existing GitHub workflow. However, you can choose Linear or Jira if that's your team's issue tracker.
|
|
877
1089
|
{{/if}}
|
|
878
1090
|
|
|
879
1091
|
1. **Issue Tracker Provider**
|
|
@@ -881,8 +1093,9 @@ Since this repository has multiple git remotes, GitHub Issues is suggested as th
|
|
|
881
1093
|
- Options:
|
|
882
1094
|
- "github" - GitHub Issues (default)
|
|
883
1095
|
- "linear" - Linear Issues
|
|
1096
|
+
- "jira" - Jira Cloud
|
|
884
1097
|
- Default: currentIssueProvider or "github"
|
|
885
|
-
- Validation: Must be one of: github, linear
|
|
1098
|
+
- Validation: Must be one of: github, linear, jira
|
|
886
1099
|
- Store answer as: `issueManagement.provider`
|
|
887
1100
|
|
|
888
1101
|
**Note on Provider + Merge Mode Combinations:**
|
|
@@ -890,6 +1103,8 @@ Since this repository has multiple git remotes, GitHub Issues is suggested as th
|
|
|
890
1103
|
- GitHub Issues + github-pr or github-draft-pr: Requires authorized GitHub CLI (`gh`)
|
|
891
1104
|
- Linear Issues + local merge: Requires Linear API token only
|
|
892
1105
|
- Linear Issues + github-pr or github-draft-pr: Requires BOTH Linear API token AND authorized GitHub CLI (`gh`)
|
|
1106
|
+
- Jira Cloud + local merge: Requires Jira credentials (host, username, API token) only
|
|
1107
|
+
- Jira Cloud + github-pr or github-draft-pr: Requires BOTH Jira credentials AND authorized GitHub CLI (`gh`)
|
|
893
1108
|
|
|
894
1109
|
**Step 2: Provider-Specific Configuration**
|
|
895
1110
|
|
|
@@ -945,6 +1160,59 @@ This repository has multiple git remotes detected. iloom needs to know which rem
|
|
|
945
1160
|
- **CRITICAL SECURITY REQUIREMENT:** This value MUST ALWAYS be saved to `settings.local.json`, NEVER to `settings.json`, regardless of which file the user selected for other settings. This token must never be committed to source control.
|
|
946
1161
|
- Context: Get your API token from Linear Settings → API → Personal API Keys (https://linear.app/settings/api)
|
|
947
1162
|
|
|
1163
|
+
**If Jira was selected:**
|
|
1164
|
+
|
|
1165
|
+
2. **Jira Host URL** (only ask if issue provider is "jira")
|
|
1166
|
+
- Question format: "What is your Jira instance URL?{{#if currentJiraHost}} (Currently: [currentJiraHost]){{/if}}"
|
|
1167
|
+
- Options (as examples):
|
|
1168
|
+
- "https://yourcompany.atlassian.net" - Jira Cloud instance
|
|
1169
|
+
- Default: currentJiraHost or NO DEFAULT (required if Jira is selected)
|
|
1170
|
+
- Validation: Non-empty string, must be a valid URL. If the user provides a value without `https://`, automatically prepend `https://` (e.g., `yourcompany.atlassian.net` becomes `https://yourcompany.atlassian.net`). Strip any trailing slashes.
|
|
1171
|
+
- Store answer as: `issueManagement.jira.host`
|
|
1172
|
+
- Context: This is your Jira Cloud instance URL (e.g., "https://yourcompany.atlassian.net")
|
|
1173
|
+
|
|
1174
|
+
3. **Jira Username/Email** (only ask if issue provider is "jira")
|
|
1175
|
+
- Question format: "What is your Atlassian account email?{{#if currentJiraUsername}} (Currently: [currentJiraUsername]){{/if}}"
|
|
1176
|
+
- Default: currentJiraUsername or NO DEFAULT (required if Jira is selected)
|
|
1177
|
+
- Validation: Non-empty string
|
|
1178
|
+
- Store answer as: `issueManagement.jira.username`
|
|
1179
|
+
- **CRITICAL SECURITY REQUIREMENT:** This value MUST ALWAYS be saved to `settings.local.json`, NEVER to `settings.json`, regardless of which file the user selected for other settings. This is personal account information that should not be committed to source control.
|
|
1180
|
+
- Context: This is the email address associated with your Atlassian account
|
|
1181
|
+
|
|
1182
|
+
4. **Jira API Token** (only ask if issue provider is "jira")
|
|
1183
|
+
- Question format: "What is your Jira API token? (Currently: 'set' or 'unset' - do not print)"
|
|
1184
|
+
- Options:
|
|
1185
|
+
- I have it now - use the "Type something" option to enter it
|
|
1186
|
+
- I'll come back to it
|
|
1187
|
+
- Default: currentJiraApiToken or NO DEFAULT
|
|
1188
|
+
- Validation: Non-empty string
|
|
1189
|
+
- Guidance: Choose "Type something" to enter it
|
|
1190
|
+
- Store answer as: `issueManagement.jira.apiToken`
|
|
1191
|
+
- **CRITICAL SECURITY REQUIREMENT:** This value MUST ALWAYS be saved to `settings.local.json`, NEVER to `settings.json`, regardless of which file the user selected for other settings. This token must never be committed to source control.
|
|
1192
|
+
- Context: Generate an API token at https://id.atlassian.com/manage-profile/security/api-tokens
|
|
1193
|
+
|
|
1194
|
+
5. **Jira Project Key** (only ask if issue provider is "jira")
|
|
1195
|
+
- Question format: "What is your Jira project key?{{#if currentJiraProjectKey}} (Currently: [currentJiraProjectKey]){{/if}}"
|
|
1196
|
+
- Options (as examples):
|
|
1197
|
+
- "PROJ" - Project team
|
|
1198
|
+
- "ENG" - Engineering team
|
|
1199
|
+
- Default: currentJiraProjectKey or NO DEFAULT (required if Jira is selected)
|
|
1200
|
+
- Validation: Non-empty string, typically uppercase letters
|
|
1201
|
+
- Store answer as: `issueManagement.jira.projectKey`
|
|
1202
|
+
- Context: This is the project key prefix shown in your Jira issue IDs (e.g., "PROJ" in "PROJ-123")
|
|
1203
|
+
|
|
1204
|
+
6. **Jira Board ID** (only ask if issue provider is "jira")
|
|
1205
|
+
- Question format: "What is your Jira board ID? (optional, used for sprint filtering){{#if currentJiraBoardId}} (Currently: [currentJiraBoardId]){{/if}}"
|
|
1206
|
+
- Options:
|
|
1207
|
+
- Skip - Don't configure board ID now
|
|
1208
|
+
- Enter board ID - use the "Type something" option to enter it
|
|
1209
|
+
- Default: currentJiraBoardId or SKIP (optional)
|
|
1210
|
+
- Validation: If provided, must be a numeric string
|
|
1211
|
+
- Store answer as: `issueManagement.jira.boardId`
|
|
1212
|
+
- Context: The board ID can be found in the URL when viewing a Jira board (e.g., `/board/42`). This is optional and used for sprint-based filtering with `il issues --sprint`.
|
|
1213
|
+
|
|
1214
|
+
**Note:** Advanced Jira settings like `transitionMappings`, `doneStatuses`, `defaultIssueType`, and `defaultSubtaskType` can be configured later by editing the settings files directly. Mention this to the user.
|
|
1215
|
+
|
|
948
1216
|
**Step 3: IDE Selection**
|
|
949
1217
|
|
|
950
1218
|
4. **IDE Selection**
|
|
@@ -982,7 +1250,7 @@ This repository has multiple git remotes detected. iloom needs to know which rem
|
|
|
982
1250
|
|
|
983
1251
|
**Implementation Details:**
|
|
984
1252
|
- Ask Step 1 first to determine provider
|
|
985
|
-
- Then ask Step 2 based on the provider selected (includes Linear API Token if Linear was selected)
|
|
1253
|
+
- Then ask Step 2 based on the provider selected (includes Linear API Token if Linear was selected, or Jira credentials if Jira was selected)
|
|
986
1254
|
- Ask Step 3 (IDE) for all users
|
|
987
1255
|
- Ask Step 4 (Merge Mode) only if multiple remotes detected OR user requests advanced config
|
|
988
1256
|
- Set multiSelect: false for all questions
|
|
@@ -1022,9 +1290,32 @@ Based on the users answer:
|
|
|
1022
1290
|
|
|
1023
1291
|
**Note:** Terminal colors default to `true` (always recommend unless user explicitly disables).
|
|
1024
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
|
+
|
|
1025
1316
|
### Phase 3: Configuration Summary
|
|
1026
1317
|
|
|
1027
|
-
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:
|
|
1028
1319
|
|
|
1029
1320
|
```
|
|
1030
1321
|
Configuration Summary:
|
|
@@ -1040,13 +1331,19 @@ Tooling Configuration (Phase 2):
|
|
|
1040
1331
|
Linear Team ID: [value] (only if issue tracker is Linear)
|
|
1041
1332
|
Linear API Token: [configured/not configured] (only if issue tracker is Linear - never show actual token)
|
|
1042
1333
|
{{#if MULTIPLE_REMOTES}}GitHub Remote: [value] (only if issue tracker is GitHub){{/if}}
|
|
1334
|
+
Jira Host: [value] (only if issue tracker is Jira)
|
|
1335
|
+
Jira Project Key: [value] (only if issue tracker is Jira)
|
|
1336
|
+
Jira Board ID: [value or "not configured"] (only if issue tracker is Jira)
|
|
1337
|
+
Jira API Token: [configured/not configured] (only if issue tracker is Jira - never show actual token)
|
|
1043
1338
|
IDE: [value or "vscode (default)"]
|
|
1044
1339
|
Merge Mode: [value] (only if configured)
|
|
1340
|
+
Swarm Mode: [Maximum Quality / Balanced / Fast & Cheap] (only if configured in Phase 2.7)
|
|
1045
1341
|
```
|
|
1046
1342
|
|
|
1047
1343
|
**Note**:
|
|
1048
1344
|
- Include the GitHub Remote line in the summary ONLY if it was configured in Phase 2 (multiple remotes and GitHub selected)
|
|
1049
1345
|
- Include Linear Team ID ONLY if Linear was selected as the issue tracker provider
|
|
1346
|
+
- Include Jira Host, Project Key, Board ID, and API Token ONLY if Jira was selected as the issue tracker provider
|
|
1050
1347
|
- Include Merge Mode ONLY if it was asked and configured (multiple remotes or advanced config)
|
|
1051
1348
|
|
|
1052
1349
|
Then ask: "Does this configuration look correct?"
|
|
@@ -1185,6 +1482,46 @@ When both settings.json and settings.local.json exist, you MUST prevent duplicat
|
|
|
1185
1482
|
}
|
|
1186
1483
|
```
|
|
1187
1484
|
|
|
1485
|
+
**For Jira:**
|
|
1486
|
+
|
|
1487
|
+
In settings.json (committed):
|
|
1488
|
+
```json
|
|
1489
|
+
{
|
|
1490
|
+
"issueManagement": {
|
|
1491
|
+
"provider": "jira",
|
|
1492
|
+
"jira": {
|
|
1493
|
+
"host": "<user's Jira host URL>",
|
|
1494
|
+
"projectKey": "<user's project key>"
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1498
|
+
```
|
|
1499
|
+
|
|
1500
|
+
In settings.local.json (gitignored - MUST be separate from settings.json):
|
|
1501
|
+
```json
|
|
1502
|
+
{
|
|
1503
|
+
"issueManagement": {
|
|
1504
|
+
"jira": {
|
|
1505
|
+
"username": "<user's Atlassian email>",
|
|
1506
|
+
"apiToken": "<user's API token>"
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
```
|
|
1511
|
+
|
|
1512
|
+
If a boardId was provided, add it to settings.json alongside host and projectKey:
|
|
1513
|
+
```json
|
|
1514
|
+
{
|
|
1515
|
+
"issueManagement": {
|
|
1516
|
+
"jira": {
|
|
1517
|
+
"boardId": "<user's board ID>"
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
**CRITICAL:** The `username` and `apiToken` fields MUST be saved to `settings.local.json`, never to `settings.json`. The `host`, `projectKey`, and `boardId` fields are safe to commit in `settings.json`.
|
|
1524
|
+
|
|
1188
1525
|
6. **Add mergeBehavior ONLY if mode is not "local":**
|
|
1189
1526
|
```json
|
|
1190
1527
|
{
|
|
@@ -1315,16 +1652,16 @@ Would you like to commit these changes?
|
|
|
1315
1652
|
- Yes - Commit iloom configuration changes (strongly recommended)
|
|
1316
1653
|
- No - Skip committing (not recommended)
|
|
1317
1654
|
|
|
1318
|
-
⚠️ WARNING: If you don't commit settings.json, iloom will not work correctly in new looms.
|
|
1655
|
+
⚠️ WARNING: If you don't commit settings.json and package.iloom.json, iloom will not work correctly in new looms.
|
|
1319
1656
|
Looms are created from committed code, so your configuration won't be available.
|
|
1320
|
-
(Local files like settings.local.json and .env are copied automatically - but
|
|
1657
|
+
(Local files like settings.local.json, package.iloom.local.json, and .env are copied automatically - but shared files must be committed.)
|
|
1321
1658
|
```
|
|
1322
1659
|
|
|
1323
1660
|
**CRITICAL RULES:**
|
|
1324
|
-
- **ONLY commit iloom-related files**: .iloom/settings.json, .gitignore
|
|
1661
|
+
- **ONLY commit iloom-related files**: .iloom/settings.json, .iloom/package.iloom.json, .gitignore
|
|
1325
1662
|
- **NEVER stage or commit unrelated files** - even if they appear in `git status`
|
|
1326
1663
|
- **If the commit fails, you must then subsequently request to use --no-verify flag** to bypass pre-commit hooks that might fail due to unrelated codebase state
|
|
1327
|
-
- **Do NOT commit settings.local.json
|
|
1664
|
+
- **Do NOT commit local-only files** - settings.local.json and package.iloom.local.json should be gitignored, not committed
|
|
1328
1665
|
- **YOU MAY NEED TO EDIT/UPDATE MORE THAN ONE FILE if the user is changing something like API Keys (local only), permissionsMode (local only), IDE (recommened global) as well as shared settings.
|
|
1329
1666
|
|
|
1330
1667
|
**Step 3: If user says yes, commit the changes**
|
|
@@ -1333,10 +1670,10 @@ VERIFY YOU'RE NOT BUNDLING ALL CHANGES IN ONE FILE DESPITE GUIDANCE TO SPLIT ACC
|
|
|
1333
1670
|
|
|
1334
1671
|
Stage ONLY the iloom-related files that should be committed:
|
|
1335
1672
|
```bash
|
|
1336
|
-
git add .iloom/settings.json .gitignore 2>/dev/null || true
|
|
1673
|
+
git add .iloom/settings.json .iloom/package.iloom.json .gitignore 2>/dev/null || true
|
|
1337
1674
|
```
|
|
1338
1675
|
|
|
1339
|
-
Note: Do NOT add .iloom/settings.local.json -
|
|
1676
|
+
Note: Do NOT add local-only files (.iloom/settings.local.json, .iloom/package.iloom.local.json) - they should be gitignored, not committed.
|
|
1340
1677
|
|
|
1341
1678
|
Then commit:
|
|
1342
1679
|
|
|
@@ -1404,6 +1741,8 @@ Need more advanced configuration? I can help you set up:
|
|
|
1404
1741
|
• Multi-Provider Code Review - Get code reviews from Gemini or Codex alongside Claude
|
|
1405
1742
|
• Plan Configuration - Use different AI providers for planning and plan review
|
|
1406
1743
|
• Agent Models - Use different Claude models for different tasks
|
|
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)
|
|
1407
1746
|
• Database Settings - Configure database branching for isolated development
|
|
1408
1747
|
• Skip Pre-Commit Hooks - Bypass slow or failing hooks during commit and finish workflows
|
|
1409
1748
|
• Workflow Behavior - Control permissions, IDE launching, dev servers, and terminal behavior
|
|
@@ -1421,6 +1760,9 @@ You can ask me questions like:
|
|
|
1421
1760
|
"Can I disable the IDE from launching automatically?"
|
|
1422
1761
|
"How do I protect my main branch from worktree creation?"
|
|
1423
1762
|
"What models are available for the different agents?"
|
|
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?"
|
|
1424
1766
|
"How do I use custom build/test commands instead of package.json scripts?"
|
|
1425
1767
|
|
|
1426
1768
|
Just ask any of these questions and I'll help you modify your settings.
|
|
@@ -1452,7 +1794,50 @@ When configuring agents, use these model identifiers:
|
|
|
1452
1794
|
}
|
|
1453
1795
|
```
|
|
1454
1796
|
|
|
1455
|
-
2.
|
|
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
|
+
|
|
1799
|
+
**Swarm-Specific Phase Agent Models:**
|
|
1800
|
+
|
|
1801
|
+
To override a specific agent's model in swarm mode, use `swarmModel`:
|
|
1802
|
+
|
|
1803
|
+
```json
|
|
1804
|
+
"agents": {
|
|
1805
|
+
"iloom-issue-implementer": {
|
|
1806
|
+
"model": "opus",
|
|
1807
|
+
"swarmModel": "sonnet"
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
```
|
|
1811
|
+
|
|
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**.
|
|
1839
|
+
|
|
1840
|
+
3. **Database Environment Variable:**
|
|
1456
1841
|
```json
|
|
1457
1842
|
"capabilities": {
|
|
1458
1843
|
"database": {
|
|
@@ -1461,7 +1846,7 @@ When configuring agents, use these model identifiers:
|
|
|
1461
1846
|
}
|
|
1462
1847
|
```
|
|
1463
1848
|
|
|
1464
|
-
|
|
1849
|
+
4. **Workflow Behavior:**
|
|
1465
1850
|
```json
|
|
1466
1851
|
"workflows": {
|
|
1467
1852
|
"pr": {
|
|
@@ -1473,26 +1858,26 @@ When configuring agents, use these model identifiers:
|
|
|
1473
1858
|
}
|
|
1474
1859
|
```
|
|
1475
1860
|
|
|
1476
|
-
|
|
1861
|
+
5. **Copy Gitignored Files:**
|
|
1477
1862
|
```json
|
|
1478
1863
|
"copyGitIgnoredPatterns": ["*.db", "data/*.sqlite", "tmp/fixtures/**"]
|
|
1479
1864
|
```
|
|
1480
1865
|
|
|
1481
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.
|
|
1482
1867
|
|
|
1483
|
-
|
|
1868
|
+
6. **Protected Branches:**
|
|
1484
1869
|
```json
|
|
1485
1870
|
"protectedBranches": ["main", "production", "release/*"]
|
|
1486
1871
|
```
|
|
1487
1872
|
|
|
1488
|
-
|
|
1873
|
+
7. **IDE Configuration:**
|
|
1489
1874
|
```json
|
|
1490
1875
|
"ide": {
|
|
1491
1876
|
"type": "cursor"
|
|
1492
1877
|
}
|
|
1493
1878
|
```
|
|
1494
1879
|
|
|
1495
|
-
|
|
1880
|
+
8. **Code Review with Multiple Providers:**
|
|
1496
1881
|
```json
|
|
1497
1882
|
"agents": {
|
|
1498
1883
|
"iloom-code-reviewer": {
|
|
@@ -1506,7 +1891,7 @@ When configuring agents, use these model identifiers:
|
|
|
1506
1891
|
|
|
1507
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.
|
|
1508
1893
|
|
|
1509
|
-
|
|
1894
|
+
9. **Custom Script Configuration (package.iloom.json):**
|
|
1510
1895
|
|
|
1511
1896
|
If users want to override or supplement npm scripts with custom commands, help them create `.iloom/package.iloom.json`:
|
|
1512
1897
|
```json
|
|
@@ -1564,6 +1949,15 @@ When configuring agents, use these model identifiers:
|
|
|
1564
1949
|
- Your local environment needs different commands than the team standard
|
|
1565
1950
|
- You want to add debug flags or local-only tooling without affecting others
|
|
1566
1951
|
|
|
1952
|
+
## Telemetry
|
|
1953
|
+
|
|
1954
|
+
iloom collects anonymous usage data to improve the product. If the user asks about telemetry or data collection during setup:
|
|
1955
|
+
|
|
1956
|
+
- **CLI telemetry**: Managed via `il telemetry off` (disable) and `il telemetry on` (re-enable). Run `il telemetry status` to check current state.
|
|
1957
|
+
- **VS Code extension telemetry**: If the user also uses the iloom VS Code extension, its telemetry is managed separately via VS Code settings (`iloom.telemetry.enabled`). Disabling CLI telemetry does NOT affect the extension, and vice versa.
|
|
1958
|
+
- **What's collected**: Only anonymous usage events (commands run, errors). No personal information, repo names, or code.
|
|
1959
|
+
- **Distinct ID**: A random UUID stored in `~/.config/iloom-ai/telemetry.json`, shared between CLI and VS Code extension.
|
|
1960
|
+
|
|
1567
1961
|
## Important Notes
|
|
1568
1962
|
|
|
1569
1963
|
- **Validate ALL inputs** against the schema before writing files
|
|
@@ -1581,3 +1975,5 @@ When configuring agents, use these model identifiers:
|
|
|
1581
1975
|
- **CRITICAL: PREVENT DUPLICATION** - When writing settings.local.json, ONLY include settings that differ from settings.json. If a setting has the same value in both files, it MUST be removed from the local file. Local should only contain overrides, never duplicates.
|
|
1582
1976
|
- **Deep comparison required** - When comparing settings for duplication, compare nested objects deeply (e.g., capabilities.web.basePort), not just top-level keys
|
|
1583
1977
|
- **Empty local is OK** - If all local settings match shared settings after deduplication, an empty settings.local.json file is perfectly valid (or the user may choose not to create it at all)
|
|
1978
|
+
- **ALWAYS ask where to save package.iloom configuration** - When creating or modifying package.iloom.json outside of the guided wizard flow, always ask the user whether to save to `package.iloom.json` (shared, committed) or `package.iloom.local.json` (local, gitignored) before writing. Apply the same fork detection logic — if origin + upstream remotes are detected, default to the local variant.
|
|
1979
|
+
- **ALWAYS offer to commit after writing shared files** - Whenever you create or modify a committable file (settings.json, package.iloom.json, .gitignore), offer to commit it — even outside the guided wizard flow. Looms are created from committed code, so uncommitted shared configuration won't be available in new looms. Follow the same commit rules from Phase 7: only stage iloom-related files, never stage local-only files.
|