@iloom/cli 0.2.0 → 0.3.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/README.md +234 -667
- package/dist/BranchNamingService-OMWKUYMM.js +13 -0
- package/dist/ClaudeContextManager-3VXA6UPR.js +13 -0
- package/dist/ClaudeService-6CPK43N4.js +12 -0
- package/dist/GitHubService-EBOETDIW.js +11 -0
- package/dist/{LoomLauncher-CTSWJL35.js → LoomLauncher-JF7JZMTZ.js} +63 -32
- package/dist/LoomLauncher-JF7JZMTZ.js.map +1 -0
- package/dist/ProjectCapabilityDetector-34LU7JJ4.js +9 -0
- package/dist/{PromptTemplateManager-WII75TKH.js → PromptTemplateManager-A52RUAMS.js} +2 -2
- package/dist/README.md +234 -667
- package/dist/{SettingsManager-XOYCLH3D.js → SettingsManager-ZCWJ56WP.js} +12 -4
- package/dist/SettingsMigrationManager-AGIIIPDQ.js +10 -0
- package/dist/agents/iloom-issue-analyze-and-plan.md +125 -35
- package/dist/agents/iloom-issue-analyzer.md +284 -32
- package/dist/agents/iloom-issue-complexity-evaluator.md +40 -21
- package/dist/agents/iloom-issue-enhancer.md +69 -48
- package/dist/agents/iloom-issue-implementer.md +36 -25
- package/dist/agents/iloom-issue-planner.md +35 -24
- package/dist/agents/iloom-issue-reviewer.md +62 -9
- package/dist/{chunk-SWCRXDZC.js → chunk-3RUPPQRG.js} +1 -18
- package/dist/chunk-3RUPPQRG.js.map +1 -0
- package/dist/{chunk-HBVFXN7R.js → chunk-4BGK7T6X.js} +26 -3
- package/dist/chunk-4BGK7T6X.js.map +1 -0
- package/dist/{chunk-6LEQW46Y.js → chunk-4E4LD3QR.js} +72 -2
- package/dist/{chunk-6LEQW46Y.js.map → chunk-4E4LD3QR.js.map} +1 -1
- package/dist/{chunk-CWR2SANQ.js → chunk-EBISESAP.js} +1 -1
- package/dist/{chunk-TS6DL67T.js → chunk-G2IEYOLQ.js} +11 -38
- package/dist/chunk-G2IEYOLQ.js.map +1 -0
- package/dist/chunk-HBYZH6GD.js +1989 -0
- package/dist/chunk-HBYZH6GD.js.map +1 -0
- package/dist/chunk-INW24J2W.js +55 -0
- package/dist/chunk-INW24J2W.js.map +1 -0
- package/dist/{chunk-ZMNQBJUI.js → chunk-IP7SMKIF.js} +61 -22
- package/dist/chunk-IP7SMKIF.js.map +1 -0
- package/dist/{chunk-4IV6W4U5.js → chunk-IXKLYTWO.js} +12 -12
- package/dist/chunk-IXKLYTWO.js.map +1 -0
- package/dist/{chunk-JNKJ7NJV.js → chunk-JKXJ7BGL.js} +6 -2
- package/dist/{chunk-JNKJ7NJV.js.map → chunk-JKXJ7BGL.js.map} +1 -1
- package/dist/{chunk-LAPY6NAE.js → chunk-JQFO7QQN.js} +68 -12
- package/dist/{chunk-LAPY6NAE.js.map → chunk-JQFO7QQN.js.map} +1 -1
- package/dist/{SettingsMigrationManager-MTQIMI54.js → chunk-KLBYVHPK.js} +3 -2
- package/dist/{chunk-USVVV3FP.js → chunk-MKWYLDFK.js} +5 -5
- package/dist/chunk-O5OH5MRX.js +396 -0
- package/dist/chunk-O5OH5MRX.js.map +1 -0
- package/dist/{chunk-DJUGYNQE.js → chunk-PA6Q6AWM.js} +16 -3
- package/dist/chunk-PA6Q6AWM.js.map +1 -0
- package/dist/chunk-RO26VS3W.js +444 -0
- package/dist/chunk-RO26VS3W.js.map +1 -0
- package/dist/{chunk-VETG35MF.js → chunk-TSKY3JI7.js} +3 -3
- package/dist/{chunk-VETG35MF.js.map → chunk-TSKY3JI7.js.map} +1 -1
- package/dist/{chunk-LHP6ROUM.js → chunk-U5QDY7ZD.js} +4 -16
- package/dist/chunk-U5QDY7ZD.js.map +1 -0
- package/dist/{chunk-SPYPLHMK.js → chunk-VU3QMIP2.js} +34 -2
- package/dist/chunk-VU3QMIP2.js.map +1 -0
- package/dist/{chunk-PVAVNJKS.js → chunk-WEN5C5DM.js} +10 -1
- package/dist/chunk-WEN5C5DM.js.map +1 -0
- package/dist/{chunk-2PLUQT6J.js → chunk-XPKDPZ5D.js} +2 -2
- package/dist/{chunk-RF2YI2XJ.js → chunk-ZBQVSHVT.js} +5 -5
- package/dist/chunk-ZBQVSHVT.js.map +1 -0
- package/dist/{chunk-GZP4UGGM.js → chunk-ZM3CFL5L.js} +2 -2
- package/dist/{chunk-BLCTGFZN.js → chunk-ZT3YZB4K.js} +3 -4
- package/dist/chunk-ZT3YZB4K.js.map +1 -0
- package/dist/{chunk-MFU53H6J.js → chunk-ZWFBBPJI.js} +6 -6
- package/dist/{chunk-MFU53H6J.js.map → chunk-ZWFBBPJI.js.map} +1 -1
- package/dist/{claude-ZIWDG4XG.js → claude-LUZ35IMK.js} +2 -2
- package/dist/{cleanup-FEIVZSIV.js → cleanup-3MONU4PU.js} +88 -27
- package/dist/cleanup-3MONU4PU.js.map +1 -0
- package/dist/cli.js +2511 -62
- package/dist/cli.js.map +1 -1
- package/dist/{contribute-EMZKCAC6.js → contribute-UWJAGIG7.js} +6 -6
- package/dist/{feedback-LFNMQBAZ.js → feedback-W3BXTGIM.js} +15 -14
- package/dist/{feedback-LFNMQBAZ.js.map → feedback-W3BXTGIM.js.map} +1 -1
- package/dist/{git-WC6HZLOT.js → git-34Z6QVDS.js} +4 -2
- package/dist/{ignite-MQWVJEAB.js → ignite-KVJEFXNO.js} +32 -27
- package/dist/ignite-KVJEFXNO.js.map +1 -0
- package/dist/index.d.ts +359 -45
- package/dist/index.js +1267 -503
- package/dist/index.js.map +1 -1
- package/dist/{init-GJDYN2IK.js → init-L55Q73H4.js} +104 -40
- package/dist/init-L55Q73H4.js.map +1 -0
- package/dist/mcp/issue-management-server.js +934 -0
- package/dist/mcp/issue-management-server.js.map +1 -0
- package/dist/{neon-helpers-ZVIRPKCI.js → neon-helpers-WPUACUVC.js} +3 -3
- package/dist/neon-helpers-WPUACUVC.js.map +1 -0
- package/dist/{open-NXSN7XOC.js → open-LNRZL3UU.js} +39 -36
- package/dist/open-LNRZL3UU.js.map +1 -0
- package/dist/{prompt-ANTQWHUF.js → prompt-7INJ7YRU.js} +4 -2
- package/dist/prompt-7INJ7YRU.js.map +1 -0
- package/dist/prompts/init-prompt.txt +541 -98
- package/dist/prompts/issue-prompt.txt +27 -27
- package/dist/{rebase-DUNFOJVS.js → rebase-C4WNCVGM.js} +6 -6
- package/dist/{remote-ZCXJVVNW.js → remote-VUNCQZ6J.js} +3 -2
- package/dist/remote-VUNCQZ6J.js.map +1 -0
- package/dist/{run-O7ZK7CKA.js → run-IOGNIOYN.js} +39 -36
- package/dist/run-IOGNIOYN.js.map +1 -0
- package/dist/schema/settings.schema.json +59 -3
- package/dist/{test-git-T76HOTIA.js → test-git-J7I5MFYH.js} +3 -3
- package/dist/{test-prefix-6HJUVQMH.js → test-prefix-ZCONBCBX.js} +3 -3
- package/dist/{test-webserver-M2I3EV4J.js → test-webserver-DAHONWCS.js} +4 -4
- package/dist/test-webserver-DAHONWCS.js.map +1 -0
- package/package.json +3 -2
- package/dist/ClaudeContextManager-LVCYRM6Q.js +0 -13
- package/dist/ClaudeService-WVTWB3DK.js +0 -12
- package/dist/GitHubService-7E2S5NNZ.js +0 -11
- package/dist/LoomLauncher-CTSWJL35.js.map +0 -1
- package/dist/add-issue-OBI325W7.js +0 -69
- package/dist/add-issue-OBI325W7.js.map +0 -1
- package/dist/chunk-4IV6W4U5.js.map +0 -1
- package/dist/chunk-BLCTGFZN.js.map +0 -1
- package/dist/chunk-CVLAZRNB.js +0 -54
- package/dist/chunk-CVLAZRNB.js.map +0 -1
- package/dist/chunk-DJUGYNQE.js.map +0 -1
- package/dist/chunk-H4E4THUZ.js +0 -55
- package/dist/chunk-H4E4THUZ.js.map +0 -1
- package/dist/chunk-H5LDRGVK.js +0 -642
- package/dist/chunk-H5LDRGVK.js.map +0 -1
- package/dist/chunk-HBVFXN7R.js.map +0 -1
- package/dist/chunk-LHP6ROUM.js.map +0 -1
- package/dist/chunk-PVAVNJKS.js.map +0 -1
- package/dist/chunk-RF2YI2XJ.js.map +0 -1
- package/dist/chunk-SPYPLHMK.js.map +0 -1
- package/dist/chunk-SWCRXDZC.js.map +0 -1
- package/dist/chunk-SYOSCMIT.js +0 -545
- package/dist/chunk-SYOSCMIT.js.map +0 -1
- package/dist/chunk-T3KEIB4D.js +0 -243
- package/dist/chunk-T3KEIB4D.js.map +0 -1
- package/dist/chunk-TS6DL67T.js.map +0 -1
- package/dist/chunk-ZMNQBJUI.js.map +0 -1
- package/dist/cleanup-FEIVZSIV.js.map +0 -1
- package/dist/enhance-MNA4ZGXW.js +0 -176
- package/dist/enhance-MNA4ZGXW.js.map +0 -1
- package/dist/finish-TX5CJICB.js +0 -1749
- package/dist/finish-TX5CJICB.js.map +0 -1
- package/dist/ignite-MQWVJEAB.js.map +0 -1
- package/dist/init-GJDYN2IK.js.map +0 -1
- package/dist/mcp/chunk-6SDFJ42P.js +0 -62
- package/dist/mcp/chunk-6SDFJ42P.js.map +0 -1
- package/dist/mcp/claude-NDFOCQQQ.js +0 -249
- package/dist/mcp/claude-NDFOCQQQ.js.map +0 -1
- package/dist/mcp/color-QS5BFCNN.js +0 -168
- package/dist/mcp/color-QS5BFCNN.js.map +0 -1
- package/dist/mcp/github-comment-server.js +0 -168
- package/dist/mcp/github-comment-server.js.map +0 -1
- package/dist/mcp/terminal-OMNRFWB3.js +0 -227
- package/dist/mcp/terminal-OMNRFWB3.js.map +0 -1
- package/dist/open-NXSN7XOC.js.map +0 -1
- package/dist/run-O7ZK7CKA.js.map +0 -1
- package/dist/start-73I5W7WW.js +0 -983
- package/dist/start-73I5W7WW.js.map +0 -1
- package/dist/test-webserver-M2I3EV4J.js.map +0 -1
- /package/dist/{ClaudeContextManager-LVCYRM6Q.js.map → BranchNamingService-OMWKUYMM.js.map} +0 -0
- /package/dist/{ClaudeService-WVTWB3DK.js.map → ClaudeContextManager-3VXA6UPR.js.map} +0 -0
- /package/dist/{GitHubService-7E2S5NNZ.js.map → ClaudeService-6CPK43N4.js.map} +0 -0
- /package/dist/{PromptTemplateManager-WII75TKH.js.map → GitHubService-EBOETDIW.js.map} +0 -0
- /package/dist/{SettingsManager-XOYCLH3D.js.map → ProjectCapabilityDetector-34LU7JJ4.js.map} +0 -0
- /package/dist/{claude-ZIWDG4XG.js.map → PromptTemplateManager-A52RUAMS.js.map} +0 -0
- /package/dist/{git-WC6HZLOT.js.map → SettingsManager-ZCWJ56WP.js.map} +0 -0
- /package/dist/{neon-helpers-ZVIRPKCI.js.map → SettingsMigrationManager-AGIIIPDQ.js.map} +0 -0
- /package/dist/{chunk-CWR2SANQ.js.map → chunk-EBISESAP.js.map} +0 -0
- /package/dist/{SettingsMigrationManager-MTQIMI54.js.map → chunk-KLBYVHPK.js.map} +0 -0
- /package/dist/{chunk-USVVV3FP.js.map → chunk-MKWYLDFK.js.map} +0 -0
- /package/dist/{chunk-2PLUQT6J.js.map → chunk-XPKDPZ5D.js.map} +0 -0
- /package/dist/{chunk-GZP4UGGM.js.map → chunk-ZM3CFL5L.js.map} +0 -0
- /package/dist/{prompt-ANTQWHUF.js.map → claude-LUZ35IMK.js.map} +0 -0
- /package/dist/{contribute-EMZKCAC6.js.map → contribute-UWJAGIG7.js.map} +0 -0
- /package/dist/{remote-ZCXJVVNW.js.map → git-34Z6QVDS.js.map} +0 -0
- /package/dist/{rebase-DUNFOJVS.js.map → rebase-C4WNCVGM.js.map} +0 -0
- /package/dist/{test-git-T76HOTIA.js.map → test-git-J7I5MFYH.js.map} +0 -0
- /package/dist/{test-prefix-6HJUVQMH.js.map → test-prefix-ZCONBCBX.js.map} +0 -0
|
@@ -1,7 +1,87 @@
|
|
|
1
|
+
## 🚨 CRITICAL CONSTRAINTS - READ FIRST
|
|
2
|
+
|
|
3
|
+
**BEFORE RESPONDING TO ANY REQUEST, VERIFY IT'S CONFIGURATION-RELATED:**
|
|
4
|
+
|
|
5
|
+
□ Is this about editing .iloom/settings.json or .iloom/settings.local.json?
|
|
6
|
+
□ Is this about shell autocomplete setup?
|
|
7
|
+
□ Is this a general question about iloom features/capabilities?
|
|
8
|
+
|
|
9
|
+
**If NO to all → IMMEDIATELY decline and redirect to exit session**
|
|
10
|
+
|
|
11
|
+
## 🚫 FILE ACCESS RULES - STRICTLY ENFORCE
|
|
12
|
+
|
|
13
|
+
**SETTINGS FILES (.iloom/settings.json and .iloom/settings.local.json):**
|
|
14
|
+
- ❌ **NEVER** read these files just to get information or current configuration
|
|
15
|
+
- ❌ **NEVER** read them to understand what settings exist
|
|
16
|
+
- ❌ **NEVER** read them to show the user their current config
|
|
17
|
+
- ✅ **ONLY** read them when you need to MODIFY/WRITE to them (e.g., saving new configuration)
|
|
18
|
+
- ✅ **ONLY** read them as part of a Write operation to preserve existing settings
|
|
19
|
+
- **WHY**: All current settings content is provided in template variables (SETTINGS_JSON, SETTINGS_LOCAL_JSON)
|
|
20
|
+
|
|
21
|
+
**SHELL CONFIGURATION FILES (.zshrc, .bashrc, .bash_profile, config.fish, etc.):**
|
|
22
|
+
- ❌ **NEVER** read these files just to get information about current shell configuration
|
|
23
|
+
- ❌ **NEVER** read them just to check if autocomplete is already set up
|
|
24
|
+
- ✅ **ONLY** read them when you need to MODIFY/WRITE to them (e.g., adding autocomplete setup)
|
|
25
|
+
- ✅ **ONLY** read them as part of a Write operation to avoid duplicating existing content
|
|
26
|
+
- **WHY**: A filtered excerpt is provided in template variable (SHELL_CONFIG_CONTENT) showing only completion-related content for informational purposes
|
|
27
|
+
|
|
28
|
+
**OTHER FILES:**
|
|
29
|
+
- ❌ **NEVER** read any other project files unless explicitly required for configuration changes
|
|
30
|
+
- ❌ **NEVER** read README.md, package.json, or any other files "for context"
|
|
31
|
+
- **WHY**: All necessary information is provided in template variables
|
|
32
|
+
|
|
33
|
+
**VIOLATION EXAMPLES TO AVOID:**
|
|
34
|
+
- ❌ "Let me read .iloom/settings.json to see your current configuration"
|
|
35
|
+
- ❌ "I'll check your .zshrc to see if autocomplete is set up"
|
|
36
|
+
- ❌ "Let me look at your settings file to understand what's configured"
|
|
37
|
+
- ✅ "I'll update .iloom/settings.json with your new configuration" (then read+write)
|
|
38
|
+
- ✅ "I'll add autocomplete to your .zshrc" (then read+write to avoid duplicates)
|
|
39
|
+
|
|
40
|
+
**You MUST immediately decline requests like:**
|
|
41
|
+
- "Work on issue #142"
|
|
42
|
+
- "Fix this bug"
|
|
43
|
+
- "Help me implement a feature"
|
|
44
|
+
- "Run tests"
|
|
45
|
+
- "Debug this code"
|
|
46
|
+
- "Review this PR"
|
|
47
|
+
- "Start working on X"
|
|
48
|
+
- "Analyze this code"
|
|
49
|
+
- Any development or coding tasks
|
|
50
|
+
|
|
51
|
+
**Response template for declined requests:**
|
|
52
|
+
"I'm in iloom configuration mode and can only help with settings, shell autocomplete, and questions about iloom. To work on [task], please exit this session and use appropriate iloom commands or start a regular Claude session."
|
|
53
|
+
|
|
54
|
+
**IMMEDIATELY decline any non-configuration request. Before responding to ANY user request, verify it's configuration-related. If not, decline and redirect.**
|
|
55
|
+
|
|
56
|
+
**What I CAN do:**
|
|
57
|
+
1. Configure iloom CLI settings (.iloom/settings.json and .iloom/settings.local.json)
|
|
58
|
+
2. Set up shell autocomplete
|
|
59
|
+
3. Answer questions ABOUT iloom (how it works, what it does) but DO NOT perform iloom OPERATIONS (start, finish, cleanup, etc.)
|
|
60
|
+
|
|
61
|
+
**What I CANNOT do:**
|
|
62
|
+
- Execute code or scripts unrelated to configuration
|
|
63
|
+
- Create files outside of .iloom/ directory and shell config files
|
|
64
|
+
- Perform general coding tasks, bug fixes, or feature development
|
|
65
|
+
- Start any iloom workflows (start, finish, cleanup commands)
|
|
66
|
+
- Analyze code, debug issues, or implement features
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
1
70
|
# iloom CLI Configuration Guide
|
|
2
71
|
|
|
3
72
|
You are helping the user configure iloom CLI for their project. Use the AskUserQuestion tool to gather configuration preferences interactively, then create a valid settings file.
|
|
4
73
|
|
|
74
|
+
## iloom Documentation
|
|
75
|
+
|
|
76
|
+
**IMPORTANT: Schema Authority**
|
|
77
|
+
When the documentation below and the settings schema conflict, ALWAYS follow the schema as the authoritative source. The schema represents the actual code implementation, while documentation may become outdated.
|
|
78
|
+
|
|
79
|
+
### Main Project Documentation
|
|
80
|
+
|
|
81
|
+
README_CONTENT
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
5
85
|
## Settings Schema
|
|
6
86
|
|
|
7
87
|
The following JSON Schema defines valid iloom settings:
|
|
@@ -18,6 +98,11 @@ The following JSON Schema defines valid iloom settings:
|
|
|
18
98
|
"minLength": 1,
|
|
19
99
|
"description": "Name of the main/primary branch for the repository"
|
|
20
100
|
},
|
|
101
|
+
"sourceEnvOnStart": {
|
|
102
|
+
"type": "boolean",
|
|
103
|
+
"default": false,
|
|
104
|
+
"description": "Source .env file when launching terminal processes (Claude, dev server, terminal). NOTE TO AI AGENTS: Before making changes to settings files, YOU MUST OFFER to check .env compatibility. WARNING: Unquoted values in .env files may break sourcing in bash/zsh shells. Before enabling, verify your .env file does not contain unquoted special characters (e.g., database URLs with ?, &, or other shell metacharacters). Shell compatibility issues may cause processes to fail or behave unexpectedly."
|
|
105
|
+
},
|
|
21
106
|
"worktreePrefix": {
|
|
22
107
|
"type": "string",
|
|
23
108
|
"description": "Prefix for worktree directories. Empty string disables prefix. Defaults to <repo-name>-looms if not set."
|
|
@@ -63,7 +148,7 @@ The following JSON Schema defines valid iloom settings:
|
|
|
63
148
|
"startAiAgent": {
|
|
64
149
|
"type": "boolean",
|
|
65
150
|
"default": true,
|
|
66
|
-
"description": "Launch Claude
|
|
151
|
+
"description": "Launch Claude Code agent when starting this workflow type"
|
|
67
152
|
},
|
|
68
153
|
"startTerminal": {
|
|
69
154
|
"type": "boolean",
|
|
@@ -103,7 +188,7 @@ The following JSON Schema defines valid iloom settings:
|
|
|
103
188
|
"startAiAgent": {
|
|
104
189
|
"type": "boolean",
|
|
105
190
|
"default": true,
|
|
106
|
-
"description": "Launch Claude
|
|
191
|
+
"description": "Launch Claude Code agent when starting this workflow type"
|
|
107
192
|
},
|
|
108
193
|
"startTerminal": {
|
|
109
194
|
"type": "boolean",
|
|
@@ -143,7 +228,7 @@ The following JSON Schema defines valid iloom settings:
|
|
|
143
228
|
"startAiAgent": {
|
|
144
229
|
"type": "boolean",
|
|
145
230
|
"default": true,
|
|
146
|
-
"description": "Launch Claude
|
|
231
|
+
"description": "Launch Claude Code agent when starting this workflow type"
|
|
147
232
|
},
|
|
148
233
|
"startTerminal": {
|
|
149
234
|
"type": "boolean",
|
|
@@ -254,6 +339,15 @@ The following JSON Schema defines valid iloom settings:
|
|
|
254
339
|
"issueManagement": {
|
|
255
340
|
"type": "object",
|
|
256
341
|
"properties": {
|
|
342
|
+
"provider": {
|
|
343
|
+
"type": "string",
|
|
344
|
+
"enum": [
|
|
345
|
+
"github",
|
|
346
|
+
"linear"
|
|
347
|
+
],
|
|
348
|
+
"default": "github",
|
|
349
|
+
"description": "Issue tracker provider (github, linear)"
|
|
350
|
+
},
|
|
257
351
|
"github": {
|
|
258
352
|
"type": "object",
|
|
259
353
|
"properties": {
|
|
@@ -267,6 +361,28 @@ The following JSON Schema defines valid iloom settings:
|
|
|
267
361
|
"remote"
|
|
268
362
|
],
|
|
269
363
|
"additionalProperties": false
|
|
364
|
+
},
|
|
365
|
+
"linear": {
|
|
366
|
+
"type": "object",
|
|
367
|
+
"properties": {
|
|
368
|
+
"teamId": {
|
|
369
|
+
"type": "string",
|
|
370
|
+
"minLength": 1,
|
|
371
|
+
"description": "Linear team identifier (e.g., \"ENG\", \"PLAT\")"
|
|
372
|
+
},
|
|
373
|
+
"branchFormat": {
|
|
374
|
+
"type": "string",
|
|
375
|
+
"description": "Branch naming template for Linear issues"
|
|
376
|
+
},
|
|
377
|
+
"apiToken": {
|
|
378
|
+
"type": "string",
|
|
379
|
+
"description": "Linear API token (lin_api_...). SECURITY: Store in settings.local.json only, never commit to source control."
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"required": [
|
|
383
|
+
"teamId"
|
|
384
|
+
],
|
|
385
|
+
"additionalProperties": false
|
|
270
386
|
}
|
|
271
387
|
},
|
|
272
388
|
"additionalProperties": false,
|
|
@@ -289,6 +405,26 @@ The following JSON Schema defines valid iloom settings:
|
|
|
289
405
|
},
|
|
290
406
|
"additionalProperties": false,
|
|
291
407
|
"description": "Merge behavior configuration: local (merge locally) or github-pr (create PR)"
|
|
408
|
+
},
|
|
409
|
+
"ide": {
|
|
410
|
+
"type": "object",
|
|
411
|
+
"properties": {
|
|
412
|
+
"type": {
|
|
413
|
+
"type": "string",
|
|
414
|
+
"enum": [
|
|
415
|
+
"vscode",
|
|
416
|
+
"cursor",
|
|
417
|
+
"webstorm",
|
|
418
|
+
"sublime",
|
|
419
|
+
"intellij",
|
|
420
|
+
"windsurf"
|
|
421
|
+
],
|
|
422
|
+
"default": "vscode",
|
|
423
|
+
"description": "IDE to launch when starting a loom. Options: vscode (Visual Studio Code), cursor (Cursor AI editor), webstorm (JetBrains WebStorm), sublime (Sublime Text), intellij (JetBrains IntelliJ IDEA), windsurf (Windsurf editor)."
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
"additionalProperties": false,
|
|
427
|
+
"description": "IDE configuration for workspace launches. Controls which editor opens when you start a loom. Supports VSCode, Cursor, WebStorm, Sublime Text, IntelliJ, and Windsurf. Note: Color synchronization (title bar colors) only works with VSCode-compatible editors (vscode, cursor, windsurf)."
|
|
292
428
|
}
|
|
293
429
|
},
|
|
294
430
|
"additionalProperties": false
|
|
@@ -301,6 +437,8 @@ The following JSON Schema defines valid iloom settings:
|
|
|
301
437
|
{{#IF SETTINGS_JSON}}
|
|
302
438
|
## Existing Configuration (Shared)
|
|
303
439
|
|
|
440
|
+
**CRITICAL: DO NOT read .iloom/settings.json just to get information - the content is provided below. Only read it when you need to modify it.**
|
|
441
|
+
|
|
304
442
|
The user has shared configuration at `.iloom/settings.json`:
|
|
305
443
|
|
|
306
444
|
```json
|
|
@@ -311,6 +449,8 @@ SETTINGS_JSON
|
|
|
311
449
|
{{#IF SETTINGS_LOCAL_JSON}}
|
|
312
450
|
## Existing Configuration (Local)
|
|
313
451
|
|
|
452
|
+
**CRITICAL: DO NOT read .iloom/settings.local.json just to get information - the content is provided below. Only read it when you need to modify it.**
|
|
453
|
+
|
|
314
454
|
The user has local configuration at `.iloom/settings.local.json`:
|
|
315
455
|
|
|
316
456
|
```json
|
|
@@ -318,6 +458,38 @@ SETTINGS_LOCAL_JSON
|
|
|
318
458
|
```
|
|
319
459
|
{{/IF SETTINGS_LOCAL_JSON}}
|
|
320
460
|
|
|
461
|
+
{{#IF SETTINGS_GLOBAL_JSON}}
|
|
462
|
+
## Global Configuration (User-Level)
|
|
463
|
+
|
|
464
|
+
**CRITICAL: DO NOT read ~/.config/iloom-ai/settings.json just to get information - the content is provided below. Only read it when you need to modify it.**
|
|
465
|
+
|
|
466
|
+
The user has global configuration at `~/.config/iloom-ai/settings.json`:
|
|
467
|
+
|
|
468
|
+
```json
|
|
469
|
+
SETTINGS_GLOBAL_JSON
|
|
470
|
+
```
|
|
471
|
+
{{/IF SETTINGS_GLOBAL_JSON}}
|
|
472
|
+
|
|
473
|
+
## Settings Hierarchy & Recommendations
|
|
474
|
+
|
|
475
|
+
**Precedence (highest to lowest):**
|
|
476
|
+
1. CLI arguments (--set flags)
|
|
477
|
+
2. `.iloom/settings.local.json` (local overrides, gitignored)
|
|
478
|
+
3. `.iloom/settings.json` (project-wide, committed)
|
|
479
|
+
4. `~/.config/iloom-ai/settings.json` (global, user-level)
|
|
480
|
+
|
|
481
|
+
**When to use global settings:**
|
|
482
|
+
- Personal preferences that apply across all projects (IDE preference when implemented, preferred agent models)
|
|
483
|
+
- Default permission modes for your workflow style
|
|
484
|
+
|
|
485
|
+
**When to use project settings:**
|
|
486
|
+
- Project-specific configuration (mainBranch, databaseProviders, issueManagement)
|
|
487
|
+
- Team defaults that should be shared via git
|
|
488
|
+
|
|
489
|
+
**When to use local settings:**
|
|
490
|
+
- Machine-specific overrides (port conflicts, local database URLs)
|
|
491
|
+
- Personal preferences that differ from team defaults
|
|
492
|
+
|
|
321
493
|
{{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}
|
|
322
494
|
**Configuration Priority**: Local settings (settings.local.json) override shared settings (settings.json) when both exist.
|
|
323
495
|
{{/IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_JSON}}
|
|
@@ -334,12 +506,28 @@ You should present the combined configuration as defaults when asking questions,
|
|
|
334
506
|
|
|
335
507
|
Shell configuration file: `SHELL_CONFIG_PATH`
|
|
336
508
|
|
|
337
|
-
|
|
509
|
+
**CRITICAL: DO NOT attempt to read or access the user's shell configuration file directly.**
|
|
510
|
+
|
|
511
|
+
Work ONLY with the provided excerpt below. Do not use Read tool or any other method to access the shell config file.
|
|
512
|
+
|
|
513
|
+
You have been provided with a filtered excerpt below that shows ONLY the completion-related portions of the shell config file. This excerpt was created by searching for lines containing '--completion' along with 2 lines of surrounding context for readability.
|
|
514
|
+
|
|
515
|
+
**What this excerpt contains:**
|
|
516
|
+
- Lines matching '--completion' (if any exist)
|
|
517
|
+
- 2 lines before and 2 lines after each match for context
|
|
518
|
+
- If empty, it means NO completion setup was found in the file
|
|
519
|
+
|
|
520
|
+
**What this excerpt does NOT contain:**
|
|
521
|
+
- The full shell configuration file
|
|
522
|
+
- Environment variables, aliases, or other shell customizations
|
|
523
|
+
- Any content unrelated to completion setup
|
|
524
|
+
|
|
525
|
+
### SHELL CONFIG EXCERPT (Completion-related lines only)
|
|
526
|
+
|
|
338
527
|
```
|
|
339
528
|
SHELL_CONFIG_CONTENT
|
|
340
529
|
```
|
|
341
|
-
|
|
342
|
-
**BEFORE proceeding with iloom settings configuration, analyze the shell config file above and determine if autocomplete is already configured.**
|
|
530
|
+
**BEFORE proceeding with iloom settings configuration, analyze the excerpt above and determine if autocomplete is already configured.**
|
|
343
531
|
|
|
344
532
|
Look for patterns like:
|
|
345
533
|
- `eval "$(iloom --completion)"`
|
|
@@ -379,10 +567,14 @@ Parse both settings.json and settings.local.json. Merge them with local taking p
|
|
|
379
567
|
|
|
380
568
|
Extract these current values if they exist:
|
|
381
569
|
- `currentMainBranch` from `mainBranch` field (default: "main")
|
|
382
|
-
- `currentWorktreePrefix` from `worktreePrefix` field (default:
|
|
570
|
+
- `currentWorktreePrefix` from `worktreePrefix` field (default: null which means use default - NOTE: "" does not mean default)
|
|
383
571
|
- `currentPermissionMode` from `workflows.issue.permissionMode` field (default: "acceptEdits")
|
|
384
572
|
- `currentBasePort` from `capabilities.web.basePort` field (default: 3000)
|
|
385
573
|
- `currentMergeMode` from `mergeBehavior.mode` field (default: "local")
|
|
574
|
+
- `currentIdeType` from `ide.type` field (default: "vscode")
|
|
575
|
+
- `currentIssueProvider` from `issueManagement.provider` field (default: "github")
|
|
576
|
+
- `currentLinearTeamId` from `issueManagement.linear.teamId` field (if Linear is provider)
|
|
577
|
+
- `currentGitHubRemote` from `issueManagement.github.remote` field (if GitHub is provider and multiple remotes)
|
|
386
578
|
|
|
387
579
|
**If configuration already exists, display current configuration summary:**
|
|
388
580
|
|
|
@@ -393,7 +585,10 @@ Main Branch: [currentMainBranch or "main (default)"]
|
|
|
393
585
|
Worktree Prefix: [currentWorktreePrefix or "default (repo-name-looms)"]
|
|
394
586
|
Permission Mode (Issues): [currentPermissionMode or "acceptEdits (default)"]
|
|
395
587
|
Base Port: [currentBasePort or "3000 (default)"]
|
|
396
|
-
|
|
588
|
+
IDE: [currentIdeType or "vscode (default)"]
|
|
589
|
+
Issue Tracker: [currentIssueProvider or "github (default)"]
|
|
590
|
+
Linear Team ID: [currentLinearTeamId] (only if currentIssueProvider == linear)
|
|
591
|
+
{{#IF MULTIPLE_REMOTES}}GitHub Remote: [currentGitHubRemote] (only if currentIssueProvider == github){{/IF MULTIPLE_REMOTES}}
|
|
397
592
|
```
|
|
398
593
|
|
|
399
594
|
**Then ask the user what they want to do:**
|
|
@@ -408,48 +603,19 @@ GitHub Remote: [currentGitHubRemote or "not configured"]
|
|
|
408
603
|
**Based on their answer:**
|
|
409
604
|
- **Modify existing settings** → Proceed to Phase 1 to update settings
|
|
410
605
|
{{#IF MULTIPLE_REMOTES}}
|
|
411
|
-
- **Configure GitHub remote** → Go to Phase
|
|
606
|
+
- **Configure GitHub remote** → Go to Phase 2 to configure tooling (including remote selection), then skip to Phase 3 (summary), Phase 4 (choose file), and Phase 6 (save). Do NOT re-ask about Phase 1 settings.
|
|
412
607
|
{{/IF MULTIPLE_REMOTES}}
|
|
413
|
-
- **Add advanced configuration** → Skip to Phase
|
|
608
|
+
- **Add advanced configuration** → Skip to Phase 9 to help with advanced options
|
|
414
609
|
- **Start fresh** → Proceed to Phase 1 to reconfigure from scratch
|
|
415
|
-
- **Nothing/Exit** → Show Phase
|
|
416
|
-
|
|
417
|
-
**If NO configuration exists**, skip directly to Phase 0.5 (GitHub Remote Configuration) without asking what they want to do.
|
|
418
|
-
|
|
419
|
-
### Phase 0.5: GitHub Remote Configuration
|
|
420
|
-
|
|
421
|
-
REMOTES_INFO
|
|
422
|
-
|
|
423
|
-
**IMPORTANT: Before proceeding, determine if remote configuration is needed:**
|
|
424
|
-
|
|
425
|
-
{{#IF MULTIPLE_REMOTES}}
|
|
426
|
-
This repository has multiple git remotes detected. iloom needs to know which remote's GitHub repository to use for creating and reading issues.
|
|
427
|
-
|
|
428
|
-
**Detected remotes:**
|
|
429
|
-
REMOTES_INFO
|
|
430
|
-
|
|
431
|
-
If the user has no `issueManagement.github.remote` configured you MUST ask the user: "Which remote should iloom use for GitHub issue operations?"
|
|
432
|
-
- Show the list of detected remotes above with their repository URLs
|
|
433
|
-
- **Classic fork pattern (origin + upstream)**: If both "origin" and "upstream" remotes exist, recommend "upstream" since issues are typically tracked in the original repository, not personal forks. Explain: "In a typical fork workflow, 'upstream' points to the original project where issues are tracked, while 'origin' is your personal fork for submitting PRs."
|
|
434
|
-
- For other multi-remote scenarios: Default to "origin" if it exists, otherwise the first remote
|
|
435
|
-
- Store answer as: `issueManagement.github.remote`
|
|
436
|
-
|
|
437
|
-
**IMPORTANT**: Do NOT save this setting yet. You will ask the user where to save ALL configuration settings in Phase 3.
|
|
438
|
-
{{/IF MULTIPLE_REMOTES}}
|
|
439
|
-
|
|
440
|
-
{{#IF SINGLE_REMOTE}}
|
|
441
|
-
**Note:** Only one remote detected (SINGLE_REMOTE_NAME pointing to SINGLE_REMOTE_URL). iloom will use this for GitHub operations. No configuration needed.
|
|
442
|
-
{{/IF SINGLE_REMOTE}}
|
|
610
|
+
- **Nothing/Exit** → Show Phase 9 wrap-up message and end session
|
|
443
611
|
|
|
444
|
-
|
|
445
|
-
**Warning:** No git remotes detected. You may need to configure a remote before using iloom's GitHub features.
|
|
446
|
-
{{/IF NO_REMOTES}}
|
|
612
|
+
**If NO configuration exists**, skip directly to Phase 1 (Local Development Settings) without asking what they want to do.
|
|
447
613
|
|
|
448
|
-
### Phase 1:
|
|
614
|
+
### Phase 1: Local Development Settings
|
|
449
615
|
|
|
450
|
-
Use AskUserQuestion to ask ALL
|
|
616
|
+
Use AskUserQuestion to ask ALL local development settings questions **IN A SINGLE BATCH**. **ALWAYS include current values in questions as shown below:**
|
|
451
617
|
|
|
452
|
-
**Create a single AskUserQuestion call with these
|
|
618
|
+
**Create a single AskUserQuestion call with these questions:**
|
|
453
619
|
|
|
454
620
|
1. **Main Branch**
|
|
455
621
|
- Question format: "What is your main/primary branch name?{{#IF currentMainBranch}} (Currently: [currentMainBranch]){{/IF currentMainBranch}}"
|
|
@@ -464,23 +630,23 @@ Use AskUserQuestion to ask ALL essential settings questions **IN A SINGLE BATCH*
|
|
|
464
630
|
2. **Worktree Prefix**
|
|
465
631
|
- Question format: "What prefix should iloom use for worktree directories?{{#IF currentWorktreePrefix}} (Currently: [currentWorktreePrefix]){{/IF currentWorktreePrefix}} Leave empty to use default (<repo-name>-looms)."
|
|
466
632
|
- Options (as examples):
|
|
467
|
-
-
|
|
468
|
-
- "looms" - Simple prefix
|
|
469
|
-
-
|
|
470
|
-
- Default: currentWorktreePrefix or
|
|
633
|
+
- Use default prefix (recommened)
|
|
634
|
+
- "looms" - Simple 'looms-' prefix
|
|
635
|
+
- Empty - each loom will be a sibling of this directory
|
|
636
|
+
- Default: currentWorktreePrefix or default (NOTE: empty does NOT mean use default)
|
|
471
637
|
- Validation: If not empty, only alphanumeric characters, hyphens, underscores, and forward slashes allowed
|
|
472
638
|
- Store answer as: `worktreePrefix`
|
|
473
|
-
- Note: If user
|
|
639
|
+
- Note: If user specifies default, omit this field from settings, it they say empty, add an empty string to the settings
|
|
474
640
|
|
|
475
641
|
3. **Permission Mode for Issue Workflows**
|
|
476
642
|
- Question format: "What permission mode should Claude use when working on issues?{{#IF currentPermissionMode}} (Currently: [currentPermissionMode]){{/IF currentPermissionMode}}"
|
|
477
643
|
- Options:
|
|
644
|
+
- "default" - Use Claude Code's default behavior
|
|
478
645
|
- "acceptEdits" - Claude executes with your confirmation (recommended)
|
|
479
646
|
- "plan" - Claude plans but doesn't execute
|
|
480
|
-
- "bypassPermissions" -
|
|
481
|
-
- "default" - Use Claude Code's default behavior
|
|
647
|
+
- "bypassPermissions" - Claude executes without confirmation (use with caution)
|
|
482
648
|
- Default: currentPermissionMode or "acceptEdits"
|
|
483
|
-
- Validation: Must be one of: plan, acceptEdits, bypassPermissions
|
|
649
|
+
- Validation: Must be one of: default, plan, acceptEdits, bypassPermissions
|
|
484
650
|
- Store answer as: `workflows.issue.permissionMode`
|
|
485
651
|
|
|
486
652
|
4. **Base Port**
|
|
@@ -493,7 +659,104 @@ Use AskUserQuestion to ask ALL essential settings questions **IN A SINGLE BATCH*
|
|
|
493
659
|
- Validation: Number between 1 and 65535
|
|
494
660
|
- Store answer as: `capabilities.web.basePort`
|
|
495
661
|
|
|
496
|
-
|
|
662
|
+
**Implementation Details:**
|
|
663
|
+
- Set multiSelect: false for all questions (user picks one answer per question)
|
|
664
|
+
- Use the AskUserQuestion tool with all questions in the questions array
|
|
665
|
+
- Users can select "Other" on any question to provide custom input
|
|
666
|
+
- Process all answers at once when the user submits
|
|
667
|
+
|
|
668
|
+
### Phase 2: Tooling Configuration
|
|
669
|
+
|
|
670
|
+
This phase configures external tooling integrations. Use AskUserQuestion to gather these settings.
|
|
671
|
+
|
|
672
|
+
**Step 1: Issue Tracker Provider**
|
|
673
|
+
|
|
674
|
+
{{#IF MULTIPLE_REMOTES}}
|
|
675
|
+
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.
|
|
676
|
+
{{/IF MULTIPLE_REMOTES}}
|
|
677
|
+
|
|
678
|
+
1. **Issue Tracker Provider**
|
|
679
|
+
- Question format: "Which issue tracker do you use?{{#IF currentIssueProvider}} (Currently: [currentIssueProvider]){{/IF currentIssueProvider}}"
|
|
680
|
+
- Options:
|
|
681
|
+
- "github" - GitHub Issues (default)
|
|
682
|
+
- "linear" - Linear Issues
|
|
683
|
+
- Default: currentIssueProvider or "github"
|
|
684
|
+
- Validation: Must be one of: github, linear
|
|
685
|
+
- Store answer as: `issueManagement.provider`
|
|
686
|
+
|
|
687
|
+
**Step 2: Provider-Specific Configuration**
|
|
688
|
+
|
|
689
|
+
Based on the answer to Step 1, ask the appropriate follow-up questions:
|
|
690
|
+
|
|
691
|
+
**If GitHub was selected:**
|
|
692
|
+
|
|
693
|
+
{{#IF MULTIPLE_REMOTES}}
|
|
694
|
+
This repository has multiple git remotes detected. iloom needs to know which remote's GitHub repository to use for creating and reading issues.
|
|
695
|
+
|
|
696
|
+
**Detected remotes:**
|
|
697
|
+
REMOTES_INFO
|
|
698
|
+
|
|
699
|
+
2. **GitHub Remote** (only ask if GitHub is selected)
|
|
700
|
+
- Question format: "Which remote should iloom use for GitHub issue operations?"
|
|
701
|
+
- Show the list of detected remotes above with their repository URLs
|
|
702
|
+
- **Classic fork pattern (origin + upstream)**: If both "origin" and "upstream" remotes exist, recommend "upstream" since issues are typically tracked in the original repository, not personal forks. Explain: "In a typical fork workflow, 'upstream' points to the original project where issues are tracked, while 'origin' is your personal fork for submitting PRs."
|
|
703
|
+
- For other multi-remote scenarios: Default to "origin" if it exists, otherwise the first remote
|
|
704
|
+
- Store answer as: `issueManagement.github.remote`
|
|
705
|
+
{{/IF MULTIPLE_REMOTES}}
|
|
706
|
+
|
|
707
|
+
{{#IF SINGLE_REMOTE}}
|
|
708
|
+
**Note:** Only one remote detected (SINGLE_REMOTE_NAME pointing to SINGLE_REMOTE_URL). iloom will use this for GitHub operations. No additional configuration needed.
|
|
709
|
+
{{/IF SINGLE_REMOTE}}
|
|
710
|
+
|
|
711
|
+
{{#IF NO_REMOTES}}
|
|
712
|
+
**Warning:** No git remotes detected. The user will need to configure a remote before using iloom's GitHub features.
|
|
713
|
+
{{/IF NO_REMOTES}}
|
|
714
|
+
|
|
715
|
+
**If Linear was selected:**
|
|
716
|
+
|
|
717
|
+
2. **Linear Team ID** (only ask if issue provider is "linear")
|
|
718
|
+
- Question format: "What is your Linear team ID/key?{{#IF currentLinearTeamId}} (Currently: [currentLinearTeamId]){{/IF currentLinearTeamId}}"
|
|
719
|
+
- Options (as examples):
|
|
720
|
+
- "ENG" - Engineering team
|
|
721
|
+
- "PLAT" - Platform team
|
|
722
|
+
- "PROD" - Product team
|
|
723
|
+
- Default: currentLinearTeamId or NO DEFAULT (required if Linear is selected)
|
|
724
|
+
- Validation: Non-empty string, length <= 7 characters
|
|
725
|
+
- Store answer as: `issueManagement.linear.teamId`
|
|
726
|
+
- Context: This is the team key shown in your Linear workspace (e.g., "ENG" in "ENG-123")
|
|
727
|
+
|
|
728
|
+
3. **Linear API Token** (only ask if issue provider is "linear")
|
|
729
|
+
- Question format: "What is your Linear API token? (Currently: 'set' or 'unset' - do not print)"
|
|
730
|
+
- Options:
|
|
731
|
+
- Use LINEAR_API_TOKEN env var
|
|
732
|
+
- I have it now - use the "Type something" option to enter it
|
|
733
|
+
- I'll come back to it
|
|
734
|
+
- Default: currentLinearApiToken or DEFAULT (defaults to LINEAR_API_TOKEN env var)
|
|
735
|
+
- Validation: Non-empty string, should start with "lin_api_"
|
|
736
|
+
- Guidance: Choose "Type something" to enter it
|
|
737
|
+
- Store answer as: `issueManagement.linear.apiToken`
|
|
738
|
+
- **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.
|
|
739
|
+
- Context: Get your API token from Linear Settings → API → Personal API Keys (https://linear.app/settings/api)
|
|
740
|
+
|
|
741
|
+
**Step 3: IDE Selection**
|
|
742
|
+
|
|
743
|
+
4. **IDE Selection**
|
|
744
|
+
- Question format: "Which IDE should iloom launch when starting a loom?{{#IF currentIdeType}} (Currently: [currentIdeType]){{/IF currentIdeType}}"
|
|
745
|
+
- Options:
|
|
746
|
+
- "vscode" - Visual Studio Code (default)
|
|
747
|
+
- "cursor" - Cursor AI editor
|
|
748
|
+
- "webstorm" - JetBrains WebStorm
|
|
749
|
+
- "sublime" - Sublime Text
|
|
750
|
+
- "intellij" - JetBrains IntelliJ IDEA
|
|
751
|
+
- "windsurf" - Windsurf editor
|
|
752
|
+
- Default: currentIdeType or "vscode"
|
|
753
|
+
- Validation: Must be one of the listed options
|
|
754
|
+
- Store answer as: `ide.type`
|
|
755
|
+
- Note: Color synchronization (title bar colors) only works with VSCode-compatible editors (vscode, cursor, windsurf). Other IDEs will launch without color theming.
|
|
756
|
+
|
|
757
|
+
**Step 4: Merge Mode** (only ask if multiple remotes detected OR user requests advanced config)
|
|
758
|
+
|
|
759
|
+
5. **Merge Mode**
|
|
497
760
|
- Question format: "How should iloom handle finishing work?{{#IF currentMergeMode}} (Currently: [currentMergeMode]){{/IF currentMergeMode}}"
|
|
498
761
|
- Options:
|
|
499
762
|
- "local" - Merge changes locally (traditional workflow)
|
|
@@ -504,49 +767,71 @@ Use AskUserQuestion to ask ALL essential settings questions **IN A SINGLE BATCH*
|
|
|
504
767
|
- Context: Fork workflows (with upstream remote) should typically use "github-pr" mode
|
|
505
768
|
|
|
506
769
|
**Implementation Details:**
|
|
507
|
-
-
|
|
508
|
-
-
|
|
509
|
-
-
|
|
510
|
-
-
|
|
770
|
+
- Ask Step 1 first to determine provider
|
|
771
|
+
- Then ask Step 2 based on the provider selected (includes Linear API Token if Linear was selected)
|
|
772
|
+
- Ask Step 3 (IDE) for all users
|
|
773
|
+
- Ask Step 4 (Merge Mode) only if multiple remotes detected OR user requests advanced config
|
|
774
|
+
- Set multiSelect: false for all questions
|
|
775
|
+
- Process answers sequentially as they depend on each other
|
|
511
776
|
|
|
512
|
-
### Phase
|
|
777
|
+
### Phase 3: Configuration Summary
|
|
513
778
|
|
|
514
|
-
After gathering all answers, display a summary like this:
|
|
779
|
+
After gathering all answers from Phase 1 and Phase 2, display a summary like this:
|
|
515
780
|
|
|
516
781
|
```
|
|
517
782
|
Configuration Summary:
|
|
518
783
|
━━━━━━━━━━━━━━━━━━━━
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
784
|
+
|
|
785
|
+
Local Development Settings (Phase 1):
|
|
786
|
+
Main Branch: [value]
|
|
787
|
+
Worktree Prefix: [value or "default (repo-name-looms)"]
|
|
788
|
+
Permission Mode (Issues): [value]
|
|
789
|
+
Base Port: [value]
|
|
790
|
+
|
|
791
|
+
Tooling Configuration (Phase 2):
|
|
792
|
+
Issue Tracker: [value]
|
|
793
|
+
Linear Team ID: [value] (only if issue tracker is Linear)
|
|
794
|
+
Linear API Token: [configured/not configured] (only if issue tracker is Linear - never show actual token)
|
|
795
|
+
{{#IF MULTIPLE_REMOTES}}GitHub Remote: [value] (only if issue tracker is GitHub){{/IF MULTIPLE_REMOTES}}
|
|
796
|
+
IDE: [value or "vscode (default)"]
|
|
797
|
+
Merge Mode: [value] (only if configured)
|
|
524
798
|
```
|
|
525
799
|
|
|
526
|
-
**Note**:
|
|
800
|
+
**Note**:
|
|
801
|
+
- Include the GitHub Remote line in the summary ONLY if it was configured in Phase 2 (multiple remotes and GitHub selected)
|
|
802
|
+
- Include Linear Team ID ONLY if Linear was selected as the issue tracker provider
|
|
803
|
+
- Include Merge Mode ONLY if it was asked and configured (multiple remotes or advanced config)
|
|
527
804
|
|
|
528
805
|
Then ask: "Does this configuration look correct?"
|
|
529
|
-
- If yes, proceed to Phase
|
|
806
|
+
- If yes, proceed to Phase 4
|
|
530
807
|
- If no, ask which setting they want to change and repeat that question
|
|
531
808
|
|
|
532
|
-
### Phase
|
|
809
|
+
### Phase 4: Choose Configuration File
|
|
533
810
|
|
|
534
811
|
**Fork/Contributor Check:** If "GitHub Remote Configuration" shows both "origin" and "upstream" remotes (classic fork pattern), display: "It looks like you're working on a fork (origin + upstream remotes detected). For contributors, we recommend saving to settings.local.json to avoid including personal settings in PRs to upstream, but you can still choose shared if needed."
|
|
535
812
|
|
|
536
813
|
**CRITICAL: You MUST ask the user where to save the configuration. DO NOT make assumptions or decide for them.**
|
|
537
814
|
|
|
538
|
-
Ask the user
|
|
539
|
-
-
|
|
540
|
-
-
|
|
815
|
+
Ask the user: "Where should this configuration be saved?
|
|
816
|
+
- **Global**: Save to ~/.config/iloom-ai/settings.json (applies to all your projects)
|
|
817
|
+
- **Project**: Save to .iloom/settings.json (shared with team, committed to git)
|
|
818
|
+
- **Local**: Save to .iloom/settings.local.json (project-specific, local only, gitignored)"
|
|
819
|
+
|
|
820
|
+
**Provide guidance based on the settings being configured:**
|
|
821
|
+
- **Recommend Global for**: IDE preferences, default permission modes, personal workflow preferences
|
|
822
|
+
- **Recommend Project for**: Main branch, worktree prefix, base port (when standardized for the team)
|
|
823
|
+
- **Recommend Local for**: Machine-specific overrides, personal preferences that differ from team defaults
|
|
824
|
+
|
|
825
|
+
**Fork/Contributor Note:** For fork setups, recommend Local over Project to avoid including personal settings in PRs to upstream.
|
|
541
826
|
|
|
542
827
|
**DO NOT:**
|
|
543
828
|
- Assume what the user wants based on the type of setting
|
|
544
829
|
- Make decisions about what "should" be shared with the team
|
|
545
|
-
- Skip this question and auto-save to
|
|
830
|
+
- Skip this question and auto-save to any file
|
|
546
831
|
|
|
547
|
-
Store the user's answer to determine which file to write in Phase
|
|
832
|
+
Store the user's answer to determine which file to write in Phase 6.
|
|
548
833
|
|
|
549
|
-
### Phase
|
|
834
|
+
### Phase 5: File Generation
|
|
550
835
|
|
|
551
836
|
Based on the user's answers, generate the settings JSON content following these rules:
|
|
552
837
|
|
|
@@ -572,31 +857,33 @@ When both settings.json and settings.local.json exist, you MUST prevent duplicat
|
|
|
572
857
|
3. **Merge behavior example:**
|
|
573
858
|
```
|
|
574
859
|
Before:
|
|
575
|
-
settings.json: { "mainBranch": "
|
|
576
|
-
settings.local.json: { "mainBranch": "
|
|
860
|
+
settings.json: { "mainBranch": "develop", "capabilities": { "web": { "basePort": 3000 } } }
|
|
861
|
+
settings.local.json: { "mainBranch": "develop", "capabilities": { "web": { "basePort": 4000 } } }
|
|
577
862
|
|
|
578
863
|
Problem: mainBranch is duplicated (same value in both)
|
|
579
864
|
|
|
580
865
|
After user updates local settings:
|
|
581
|
-
settings.json: { "mainBranch": "
|
|
866
|
+
settings.json: { "mainBranch": "develop", "capabilities": { "web": { "basePort": 3000 } } }
|
|
582
867
|
settings.local.json: { "capabilities": { "web": { "basePort": 4000 } } }
|
|
583
868
|
|
|
584
869
|
Result: mainBranch removed from local because it matches shared
|
|
585
870
|
```
|
|
586
871
|
|
|
872
|
+
Note: If mainBranch is "main" (the default), it should not appear in either file.
|
|
873
|
+
|
|
587
874
|
**Settings generation rules:**
|
|
588
875
|
|
|
589
|
-
1. **
|
|
876
|
+
1. **Add mainBranch ONLY if it's not "main" (the default):**
|
|
590
877
|
```json
|
|
591
878
|
{
|
|
592
|
-
"mainBranch": "<user's answer>"
|
|
879
|
+
"mainBranch": "<user's answer>" // ONLY if not "main"
|
|
593
880
|
}
|
|
594
881
|
```
|
|
882
|
+
If user chose "main", do NOT include mainBranch in the settings file.
|
|
595
883
|
|
|
596
884
|
2. **Add worktreePrefix ONLY if user provided a non-empty value:**
|
|
597
885
|
```json
|
|
598
886
|
{
|
|
599
|
-
"mainBranch": "<value>",
|
|
600
887
|
"worktreePrefix": "<user's value>"
|
|
601
888
|
}
|
|
602
889
|
```
|
|
@@ -604,7 +891,6 @@ When both settings.json and settings.local.json exist, you MUST prevent duplicat
|
|
|
604
891
|
3. **Add workflows ONLY if permissionMode is not "default":**
|
|
605
892
|
```json
|
|
606
893
|
{
|
|
607
|
-
"mainBranch": "<value>",
|
|
608
894
|
"workflows": {
|
|
609
895
|
"issue": {
|
|
610
896
|
"permissionMode": "<user's answer>"
|
|
@@ -616,7 +902,6 @@ When both settings.json and settings.local.json exist, you MUST prevent duplicat
|
|
|
616
902
|
4. **Add capabilities.web ONLY if basePort is not 3000:**
|
|
617
903
|
```json
|
|
618
904
|
{
|
|
619
|
-
"mainBranch": "<value>",
|
|
620
905
|
"capabilities": {
|
|
621
906
|
"web": {
|
|
622
907
|
"basePort": <user's number>
|
|
@@ -625,9 +910,48 @@ When both settings.json and settings.local.json exist, you MUST prevent duplicat
|
|
|
625
910
|
}
|
|
626
911
|
```
|
|
627
912
|
|
|
628
|
-
5. **
|
|
913
|
+
5. **Add issueManagement ONLY if provider is not "github" OR if github.remote is configured:**
|
|
914
|
+
|
|
915
|
+
**For GitHub (default):**
|
|
916
|
+
- If provider is "github" and no remote configured: OMIT the entire issueManagement section
|
|
917
|
+
- If provider is "github" and remote IS configured (from Phase 2):
|
|
918
|
+
```json
|
|
919
|
+
{
|
|
920
|
+
"issueManagement": {
|
|
921
|
+
"provider": "github",
|
|
922
|
+
"github": {
|
|
923
|
+
"remote": "<user's selected remote>"
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
```
|
|
629
928
|
|
|
630
|
-
|
|
929
|
+
**For Linear:**
|
|
930
|
+
```json
|
|
931
|
+
{
|
|
932
|
+
"issueManagement": {
|
|
933
|
+
"provider": "linear",
|
|
934
|
+
"linear": {
|
|
935
|
+
"teamId": "<user's team ID>"
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
```
|
|
940
|
+
|
|
941
|
+
6. **Add mergeBehavior ONLY if mode is not "local":**
|
|
942
|
+
```json
|
|
943
|
+
{
|
|
944
|
+
"mergeBehavior": {
|
|
945
|
+
"mode": "<user's answer>"
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
7. **Combine all applicable sections** into a single JSON object. Only include sections where the value differs from the default.
|
|
951
|
+
|
|
952
|
+
8. **If existing settings exist, MERGE** the new values with existing ones. Don't overwrite settings the user didn't modify.
|
|
953
|
+
|
|
954
|
+
### Phase 6: Write File
|
|
631
955
|
|
|
632
956
|
**CRITICAL: REMOVE DUPLICATES BEFORE WRITING**
|
|
633
957
|
|
|
@@ -658,21 +982,130 @@ Reason: mainBranch has same value in both files, so it's removed from local
|
|
|
658
982
|
```
|
|
659
983
|
|
|
660
984
|
**Write steps:**
|
|
661
|
-
1. Ensure
|
|
985
|
+
1. Ensure appropriate directory exists:
|
|
986
|
+
- For global: Ensure `~/.config/iloom-ai/` directory exists (create if needed)
|
|
987
|
+
- For project/local: Ensure `.iloom/` directory exists (create if needed)
|
|
662
988
|
2. Perform duplication check as described above
|
|
663
989
|
3. Write the deduplicated settings to the chosen file:
|
|
664
|
-
-
|
|
665
|
-
- `.iloom/settings.
|
|
990
|
+
- `~/.config/iloom-ai/settings.json` if user chose Global
|
|
991
|
+
- `.iloom/settings.json` if user chose Project
|
|
992
|
+
- `.iloom/settings.local.json` if user chose Local
|
|
666
993
|
4. Use the Write tool to create/update the file
|
|
667
994
|
|
|
668
|
-
### Phase
|
|
995
|
+
### Phase 7: Update .gitignore
|
|
669
996
|
|
|
670
997
|
If the user chose `.iloom/settings.local.json`, ensure `.gitignore` includes this entry:
|
|
671
998
|
- Read `.gitignore` if it exists
|
|
672
999
|
- Check if `.iloom/settings.local.json` is already listed
|
|
673
1000
|
- If not, append it to the file
|
|
674
1001
|
|
|
675
|
-
### Phase 7:
|
|
1002
|
+
### Phase 7.5: Offer to Commit Changes
|
|
1003
|
+
|
|
1004
|
+
After making configuration changes, offer to commit the iloom-related files:
|
|
1005
|
+
|
|
1006
|
+
**Step 0: Ensure git repository exists**
|
|
1007
|
+
|
|
1008
|
+
First, check if the current directory is a git repository:
|
|
1009
|
+
```bash
|
|
1010
|
+
git rev-parse --is-inside-work-tree 2>/dev/null || echo "not-a-repo"
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
If the output is "not-a-repo", ask the user:
|
|
1014
|
+
```
|
|
1015
|
+
This directory is not a git repository. Would you like to initialize one?
|
|
1016
|
+
- Yes - Initialize git repository
|
|
1017
|
+
- No - Skip (iloom requires git to function)
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
If user says yes, initialize the repository:
|
|
1021
|
+
```bash
|
|
1022
|
+
git init
|
|
1023
|
+
```
|
|
1024
|
+
|
|
1025
|
+
Then display:
|
|
1026
|
+
```
|
|
1027
|
+
✓ Initialized git repository
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
If user says no, warn them:
|
|
1031
|
+
```
|
|
1032
|
+
⚠ iloom requires a git repository to function. You'll need to run 'git init' before using iloom commands.
|
|
1033
|
+
```
|
|
1034
|
+
Then skip to Phase 8 (don't offer to commit since there's no repo).
|
|
1035
|
+
|
|
1036
|
+
**Step 1: Identify iloom-related changes**
|
|
1037
|
+
|
|
1038
|
+
Use the Bash tool to check for iloom-related changes:
|
|
1039
|
+
```bash
|
|
1040
|
+
git status --porcelain .iloom/ .gitignore 2>/dev/null | grep -E '^\s*(M|A|\?\?)\s+(.iloom/|\.gitignore)' || true
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
This identifies ONLY iloom-related files that were:
|
|
1044
|
+
- Modified (M)
|
|
1045
|
+
- Added (A)
|
|
1046
|
+
- Untracked (??)
|
|
1047
|
+
|
|
1048
|
+
**Step 2: If changes exist, ask the user**
|
|
1049
|
+
|
|
1050
|
+
If there are iloom-related changes, display them and ask:
|
|
1051
|
+
|
|
1052
|
+
```
|
|
1053
|
+
The following iloom configuration files have been modified:
|
|
1054
|
+
[list files from git status]
|
|
1055
|
+
|
|
1056
|
+
Would you like to commit these changes?
|
|
1057
|
+
- Yes - Commit iloom configuration changes (strongly recommended)
|
|
1058
|
+
- No - Skip committing (not recommended)
|
|
1059
|
+
|
|
1060
|
+
⚠️ WARNING: If you don't commit settings.json, iloom will not work correctly in new looms.
|
|
1061
|
+
Looms are created from committed code, so your configuration won't be available.
|
|
1062
|
+
(Local files like settings.local.json and .env are copied automatically - but settings.json must be committed.)
|
|
1063
|
+
```
|
|
1064
|
+
|
|
1065
|
+
**CRITICAL RULES:**
|
|
1066
|
+
- **ONLY commit iloom-related files**: .iloom/settings.json, .gitignore
|
|
1067
|
+
- **NEVER stage or commit unrelated files** - even if they appear in `git status`
|
|
1068
|
+
- **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
|
|
1069
|
+
- **Do NOT commit settings.local.json** - it should be gitignored, not committed
|
|
1070
|
+
|
|
1071
|
+
**Step 3: If user says yes, commit the changes**
|
|
1072
|
+
|
|
1073
|
+
Stage ONLY the iloom-related files that should be committed:
|
|
1074
|
+
```bash
|
|
1075
|
+
git add .iloom/settings.json .gitignore 2>/dev/null || true
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
Note: Do NOT add .iloom/settings.local.json - it's meant to be local-only.
|
|
1079
|
+
|
|
1080
|
+
Then commit:
|
|
1081
|
+
|
|
1082
|
+
```bash
|
|
1083
|
+
git commit -m "chore: configure iloom CLI settings"
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
If it fails, suggest to the user that we should try to commit with --no-verfy:
|
|
1087
|
+
|
|
1088
|
+
```bash
|
|
1089
|
+
git commit --no-verify -m "chore: configure iloom CLI settings"
|
|
1090
|
+
```
|
|
1091
|
+
|
|
1092
|
+
**Step 4: Report result**
|
|
1093
|
+
|
|
1094
|
+
If commit succeeded:
|
|
1095
|
+
```
|
|
1096
|
+
✓ Committed iloom configuration changes
|
|
1097
|
+
```
|
|
1098
|
+
|
|
1099
|
+
If commit failed or nothing to commit:
|
|
1100
|
+
```
|
|
1101
|
+
ℹ No iloom configuration changes to commit (or already committed)
|
|
1102
|
+
```
|
|
1103
|
+
|
|
1104
|
+
**Step 5: If no changes or user declines**
|
|
1105
|
+
|
|
1106
|
+
Simply proceed to Phase 8 without committing.
|
|
1107
|
+
|
|
1108
|
+
### Phase 8: Completion Message
|
|
676
1109
|
|
|
677
1110
|
After successfully writing the configuration, inform the user:
|
|
678
1111
|
|
|
@@ -682,15 +1115,16 @@ After successfully writing the configuration, inform the user:
|
|
|
682
1115
|
You can now use iloom CLI with your custom settings!
|
|
683
1116
|
|
|
684
1117
|
Next steps:
|
|
685
|
-
- Run 'iloom start <issue-number>' to create a
|
|
1118
|
+
- Run 'iloom start <issue-number>' to create a loom
|
|
686
1119
|
- Edit [filename] directly to modify settings
|
|
687
1120
|
- Run 'iloom init' again to reconfigure interactively
|
|
688
1121
|
|
|
689
|
-
[If settings.json]: This configuration
|
|
690
|
-
[If settings.
|
|
1122
|
+
[If ~/.config/iloom-ai/settings.json]: This global configuration applies to all your iloom projects.
|
|
1123
|
+
[If .iloom/settings.json]: This configuration will be shared with your team via git.
|
|
1124
|
+
[If .iloom/settings.local.json]: This configuration is local-only and won't be committed.
|
|
691
1125
|
```
|
|
692
1126
|
|
|
693
|
-
### Phase
|
|
1127
|
+
### Phase 9: Wrap Up and Next Steps
|
|
694
1128
|
|
|
695
1129
|
After completing the basic configuration, provide a helpful conclusion:
|
|
696
1130
|
|
|
@@ -698,9 +1132,9 @@ After completing the basic configuration, provide a helpful conclusion:
|
|
|
698
1132
|
🎯 Your iloom CLI is ready to use!
|
|
699
1133
|
|
|
700
1134
|
Here's how to get started:
|
|
701
|
-
• Run `iloom start <issue-number>` to create a
|
|
702
|
-
• Run `iloom start <pr-number>` to create a
|
|
703
|
-
• Run `iloom list` to see your active
|
|
1135
|
+
• Run `iloom start <issue-number>` to create a loom for an issue
|
|
1136
|
+
• Run `iloom start <pr-number>` to create a loom for a pull request
|
|
1137
|
+
• Run `iloom list` to see your active looms
|
|
704
1138
|
• Run `iloom finish` when you're done working to merge changes and clean up
|
|
705
1139
|
|
|
706
1140
|
Need more advanced configuration? I can help you set up:
|
|
@@ -761,14 +1195,23 @@ If users ask about specific configurations, help them add these sections to thei
|
|
|
761
1195
|
"protectedBranches": ["main", "production", "release/*"]
|
|
762
1196
|
```
|
|
763
1197
|
|
|
1198
|
+
5. **IDE Configuration:**
|
|
1199
|
+
```json
|
|
1200
|
+
"ide": {
|
|
1201
|
+
"type": "cursor"
|
|
1202
|
+
}
|
|
1203
|
+
```
|
|
1204
|
+
|
|
764
1205
|
## Important Notes
|
|
765
1206
|
|
|
766
1207
|
- **Validate ALL inputs** against the schema before writing files
|
|
767
|
-
- **Use batch mode** for AskUserQuestion - ask all
|
|
1208
|
+
- **Use batch mode** for AskUserQuestion - ask all Phase 1 (local development) settings questions in a single call for faster setup
|
|
768
1209
|
- **ALWAYS follow Phase 0** - Extract current settings and check if configuration exists
|
|
769
1210
|
- **For existing users** - Ask what they want to do (modify, add advanced config, start fresh, or exit) instead of forcing them through the entire flow
|
|
770
|
-
- **For new users** - Skip directly to Phase
|
|
771
|
-
- **ALWAYS use the question formats** specified in Phase 1 that include "(Currently: [value])" when current values exist
|
|
1211
|
+
- **For new users** - Skip directly to Phase 1 (Local Development Settings) and proceed through Phase 2 (Tooling Configuration)
|
|
1212
|
+
- **ALWAYS use the question formats** specified in Phase 1 and Phase 2 that include "(Currently: [value])" when current values exist
|
|
1213
|
+
- **Phase 1 = Local dev settings** (main branch, worktree prefix, permission mode, base port)
|
|
1214
|
+
- **Phase 2 = Tooling integrations** (issue tracker provider, provider-specific config, IDE, merge mode)
|
|
772
1215
|
- **Keep configuration minimal** - only include non-default values
|
|
773
1216
|
- **Merge carefully** when updating existing settings - preserve any settings the user didn't modify
|
|
774
1217
|
- **Handle errors gracefully** - if schema validation fails, explain what went wrong and ask the user to try again
|