@iloom/cli 0.6.1 → 0.7.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.
Files changed (178) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +35 -18
  3. package/dist/{BranchNamingService-B5PVRR7F.js → BranchNamingService-FLPUUFOB.js} +2 -2
  4. package/dist/ClaudeContextManager-KE5TBZVZ.js +14 -0
  5. package/dist/ClaudeService-CRSETT3A.js +13 -0
  6. package/dist/{GitHubService-S2OGUTDR.js → GitHubService-O7U4UQ7N.js} +3 -3
  7. package/dist/{LoomLauncher-5LFM4LXB.js → LoomLauncher-NL65LSKP.js} +6 -6
  8. package/dist/{MetadataManager-DFI73J3G.js → MetadataManager-XJ2YB762.js} +2 -2
  9. package/dist/PRManager-2ABCWXHW.js +16 -0
  10. package/dist/{ProjectCapabilityDetector-S5FLNCFI.js → ProjectCapabilityDetector-IA56AUE6.js} +3 -3
  11. package/dist/{PromptTemplateManager-C3DK6XZL.js → PromptTemplateManager-7L3HJQQU.js} +2 -2
  12. package/dist/README.md +35 -18
  13. package/dist/{SettingsManager-35F5RUJH.js → SettingsManager-YU4VYPTW.js} +2 -2
  14. package/dist/agents/iloom-framework-detector.md +78 -9
  15. package/dist/agents/iloom-issue-analyze-and-plan.md +42 -17
  16. package/dist/agents/iloom-issue-analyzer.md +14 -14
  17. package/dist/agents/iloom-issue-complexity-evaluator.md +38 -15
  18. package/dist/agents/iloom-issue-enhancer.md +15 -15
  19. package/dist/agents/iloom-issue-implementer.md +44 -15
  20. package/dist/agents/iloom-issue-planner.md +121 -17
  21. package/dist/agents/iloom-issue-reviewer.md +15 -15
  22. package/dist/{build-FJVYP7EV.js → build-HQ5HGA3T.js} +9 -9
  23. package/dist/{chunk-VU3QMIP2.js → chunk-453NC377.js} +91 -15
  24. package/dist/chunk-453NC377.js.map +1 -0
  25. package/dist/{chunk-UQIXZ3BA.js → chunk-5V74K5ZA.js} +2 -2
  26. package/dist/{chunk-7WANFUIK.js → chunk-6TL3BYH6.js} +2 -2
  27. package/dist/{chunk-ZPSTA5PR.js → chunk-7GLZVDPQ.js} +2 -2
  28. package/dist/{chunk-64O2UIWO.js → chunk-AFRICMSW.js} +4 -4
  29. package/dist/{chunk-5TXLVEXT.js → chunk-C3AKFAIR.js} +2 -2
  30. package/dist/{chunk-K7SEEHKO.js → chunk-CNSTXBJ3.js} +7 -419
  31. package/dist/chunk-CNSTXBJ3.js.map +1 -0
  32. package/dist/{chunk-2A7WQKBE.js → chunk-DAOS6EC3.js} +96 -6
  33. package/dist/chunk-DAOS6EC3.js.map +1 -0
  34. package/dist/{chunk-TRQ76ISK.js → chunk-ELJKYFSH.js} +9 -9
  35. package/dist/{chunk-VDA5JMB4.js → chunk-EPPPDVHD.js} +21 -8
  36. package/dist/chunk-EPPPDVHD.js.map +1 -0
  37. package/dist/{chunk-LVBRMTE6.js → chunk-FEAJR6PN.js} +6 -6
  38. package/dist/{chunk-6YSFTPKW.js → chunk-FM4KBPVA.js} +18 -13
  39. package/dist/chunk-FM4KBPVA.js.map +1 -0
  40. package/dist/{chunk-AEIMYF4P.js → chunk-FP7G7DG3.js} +6 -2
  41. package/dist/chunk-FP7G7DG3.js.map +1 -0
  42. package/dist/{chunk-LT3SGBR7.js → chunk-GCPAZSGV.js} +36 -2
  43. package/dist/{chunk-LT3SGBR7.js.map → chunk-GCPAZSGV.js.map} +1 -1
  44. package/dist/chunk-GJMEKEI5.js +517 -0
  45. package/dist/chunk-GJMEKEI5.js.map +1 -0
  46. package/dist/{chunk-7Q66W4OH.js → chunk-HBJITKSZ.js} +37 -1
  47. package/dist/chunk-HBJITKSZ.js.map +1 -0
  48. package/dist/{chunk-7HIRPCKU.js → chunk-HVQNVRAF.js} +2 -2
  49. package/dist/{chunk-6U6VI4SZ.js → chunk-KVS4XGBQ.js} +4 -4
  50. package/dist/{chunk-SN3Z6EZO.js → chunk-N7FVXZNI.js} +2 -2
  51. package/dist/{chunk-I75JMBNB.js → chunk-QQFBMCAH.js} +54 -43
  52. package/dist/chunk-QQFBMCAH.js.map +1 -0
  53. package/dist/{chunk-AXX3QIKK.js → chunk-RD7I2Q2F.js} +2 -2
  54. package/dist/chunk-TIYJEEVO.js +79 -0
  55. package/dist/chunk-TIYJEEVO.js.map +1 -0
  56. package/dist/{chunk-EK3XCAAS.js → chunk-UDRZY65Y.js} +2 -2
  57. package/dist/{chunk-3PT7RKL5.js → chunk-USJSNHGG.js} +2 -2
  58. package/dist/{chunk-CFUWQHCJ.js → chunk-VWGKGNJP.js} +114 -35
  59. package/dist/chunk-VWGKGNJP.js.map +1 -0
  60. package/dist/{chunk-F6WVM437.js → chunk-WFQ5CLTR.js} +6 -3
  61. package/dist/chunk-WFQ5CLTR.js.map +1 -0
  62. package/dist/{chunk-BXCPJJYM.js → chunk-XPKN3QWY.js} +24 -6
  63. package/dist/chunk-XPKN3QWY.js.map +1 -0
  64. package/dist/chunk-YQNSZKKT.js +822 -0
  65. package/dist/chunk-YQNSZKKT.js.map +1 -0
  66. package/dist/{chunk-GEXP5IOF.js → chunk-ZA575VLF.js} +21 -8
  67. package/dist/chunk-ZA575VLF.js.map +1 -0
  68. package/dist/{claude-H33OQMXO.js → claude-6H36IBHO.js} +4 -2
  69. package/dist/{cleanup-BRUAINKE.js → cleanup-77U5ATYI.js} +20 -16
  70. package/dist/cleanup-77U5ATYI.js.map +1 -0
  71. package/dist/cli.js +361 -954
  72. package/dist/cli.js.map +1 -1
  73. package/dist/commit-ONRXU67O.js +237 -0
  74. package/dist/commit-ONRXU67O.js.map +1 -0
  75. package/dist/{compile-ULNO5F7Q.js → compile-CT7IR7O2.js} +9 -9
  76. package/dist/{contribute-Q6GX6AXK.js → contribute-GXKOIA42.js} +5 -5
  77. package/dist/{dev-server-4RCDJ5MU.js → dev-server-UKAPBGUR.js} +22 -74
  78. package/dist/dev-server-UKAPBGUR.js.map +1 -0
  79. package/dist/{feedback-O4Q55SVS.js → feedback-K3A4QUSG.js} +10 -10
  80. package/dist/{git-FVMGBHC2.js → git-ENLT2VNI.js} +6 -4
  81. package/dist/hooks/iloom-hook.js +30 -2
  82. package/dist/{ignite-VHV65WEZ.js → ignite-YUAOJ5PP.js} +20 -20
  83. package/dist/ignite-YUAOJ5PP.js.map +1 -0
  84. package/dist/index.d.ts +71 -27
  85. package/dist/index.js +196 -266
  86. package/dist/index.js.map +1 -1
  87. package/dist/init-XQQMFDM6.js +21 -0
  88. package/dist/{lint-5JMCWE4Y.js → lint-HAVU4U34.js} +9 -9
  89. package/dist/mcp/issue-management-server.js +359 -13
  90. package/dist/mcp/issue-management-server.js.map +1 -1
  91. package/dist/mcp/recap-server.js +13 -4
  92. package/dist/mcp/recap-server.js.map +1 -1
  93. package/dist/{open-WHVUYGPY.js → open-QI63XQ4F.js} +25 -76
  94. package/dist/open-QI63XQ4F.js.map +1 -0
  95. package/dist/{projects-SA76I4TZ.js → projects-TWY4RT2Z.js} +11 -4
  96. package/dist/projects-TWY4RT2Z.js.map +1 -0
  97. package/dist/prompts/init-prompt.txt +119 -51
  98. package/dist/prompts/issue-prompt.txt +132 -63
  99. package/dist/prompts/pr-prompt.txt +3 -3
  100. package/dist/prompts/regular-prompt.txt +16 -18
  101. package/dist/prompts/session-summary-prompt.txt +13 -13
  102. package/dist/{rebase-Y4AS6LQW.js → rebase-QYCRF7JG.js} +53 -8
  103. package/dist/rebase-QYCRF7JG.js.map +1 -0
  104. package/dist/{recap-VOOUXOGP.js → recap-ZKGHZCX6.js} +6 -6
  105. package/dist/{run-NCRK5NPR.js → run-YDVYORT2.js} +25 -76
  106. package/dist/run-YDVYORT2.js.map +1 -0
  107. package/dist/schema/settings.schema.json +14 -3
  108. package/dist/{shell-SBLXVOVJ.js → shell-2NNSIU34.js} +6 -6
  109. package/dist/{summary-CVFAMDOJ.js → summary-G6L3VAKK.js} +11 -10
  110. package/dist/{summary-CVFAMDOJ.js.map → summary-G6L3VAKK.js.map} +1 -1
  111. package/dist/{test-3KIVXI6J.js → test-75WAA6DU.js} +9 -9
  112. package/dist/{test-git-ZB6AGGRW.js → test-git-E2BLXR6M.js} +4 -4
  113. package/dist/{test-prefix-FBGXKMPA.js → test-prefix-A7JGGYAA.js} +4 -4
  114. package/dist/{test-webserver-YVQD42W6.js → test-webserver-NRMGT2HB.js} +29 -8
  115. package/dist/test-webserver-NRMGT2HB.js.map +1 -0
  116. package/package.json +3 -1
  117. package/dist/ClaudeContextManager-6J2EB4QU.js +0 -14
  118. package/dist/ClaudeService-O2PB22GX.js +0 -13
  119. package/dist/PRManager-GB3FOJ2W.js +0 -14
  120. package/dist/chunk-2A7WQKBE.js.map +0 -1
  121. package/dist/chunk-6YSFTPKW.js.map +0 -1
  122. package/dist/chunk-7Q66W4OH.js.map +0 -1
  123. package/dist/chunk-AEIMYF4P.js.map +0 -1
  124. package/dist/chunk-BXCPJJYM.js.map +0 -1
  125. package/dist/chunk-CFUWQHCJ.js.map +0 -1
  126. package/dist/chunk-F6WVM437.js.map +0 -1
  127. package/dist/chunk-GEXP5IOF.js.map +0 -1
  128. package/dist/chunk-I75JMBNB.js.map +0 -1
  129. package/dist/chunk-K7SEEHKO.js.map +0 -1
  130. package/dist/chunk-VDA5JMB4.js.map +0 -1
  131. package/dist/chunk-VU3QMIP2.js.map +0 -1
  132. package/dist/chunk-W6WVRHJ6.js +0 -251
  133. package/dist/chunk-W6WVRHJ6.js.map +0 -1
  134. package/dist/cleanup-BRUAINKE.js.map +0 -1
  135. package/dist/dev-server-4RCDJ5MU.js.map +0 -1
  136. package/dist/ignite-VHV65WEZ.js.map +0 -1
  137. package/dist/init-UTYRHNJJ.js +0 -21
  138. package/dist/open-WHVUYGPY.js.map +0 -1
  139. package/dist/projects-SA76I4TZ.js.map +0 -1
  140. package/dist/rebase-Y4AS6LQW.js.map +0 -1
  141. package/dist/run-NCRK5NPR.js.map +0 -1
  142. package/dist/test-webserver-YVQD42W6.js.map +0 -1
  143. /package/dist/{BranchNamingService-B5PVRR7F.js.map → BranchNamingService-FLPUUFOB.js.map} +0 -0
  144. /package/dist/{ClaudeContextManager-6J2EB4QU.js.map → ClaudeContextManager-KE5TBZVZ.js.map} +0 -0
  145. /package/dist/{ClaudeService-O2PB22GX.js.map → ClaudeService-CRSETT3A.js.map} +0 -0
  146. /package/dist/{GitHubService-S2OGUTDR.js.map → GitHubService-O7U4UQ7N.js.map} +0 -0
  147. /package/dist/{LoomLauncher-5LFM4LXB.js.map → LoomLauncher-NL65LSKP.js.map} +0 -0
  148. /package/dist/{MetadataManager-DFI73J3G.js.map → MetadataManager-XJ2YB762.js.map} +0 -0
  149. /package/dist/{PRManager-GB3FOJ2W.js.map → PRManager-2ABCWXHW.js.map} +0 -0
  150. /package/dist/{ProjectCapabilityDetector-S5FLNCFI.js.map → ProjectCapabilityDetector-IA56AUE6.js.map} +0 -0
  151. /package/dist/{PromptTemplateManager-C3DK6XZL.js.map → PromptTemplateManager-7L3HJQQU.js.map} +0 -0
  152. /package/dist/{SettingsManager-35F5RUJH.js.map → SettingsManager-YU4VYPTW.js.map} +0 -0
  153. /package/dist/{build-FJVYP7EV.js.map → build-HQ5HGA3T.js.map} +0 -0
  154. /package/dist/{chunk-UQIXZ3BA.js.map → chunk-5V74K5ZA.js.map} +0 -0
  155. /package/dist/{chunk-7WANFUIK.js.map → chunk-6TL3BYH6.js.map} +0 -0
  156. /package/dist/{chunk-ZPSTA5PR.js.map → chunk-7GLZVDPQ.js.map} +0 -0
  157. /package/dist/{chunk-64O2UIWO.js.map → chunk-AFRICMSW.js.map} +0 -0
  158. /package/dist/{chunk-5TXLVEXT.js.map → chunk-C3AKFAIR.js.map} +0 -0
  159. /package/dist/{chunk-TRQ76ISK.js.map → chunk-ELJKYFSH.js.map} +0 -0
  160. /package/dist/{chunk-LVBRMTE6.js.map → chunk-FEAJR6PN.js.map} +0 -0
  161. /package/dist/{chunk-7HIRPCKU.js.map → chunk-HVQNVRAF.js.map} +0 -0
  162. /package/dist/{chunk-6U6VI4SZ.js.map → chunk-KVS4XGBQ.js.map} +0 -0
  163. /package/dist/{chunk-SN3Z6EZO.js.map → chunk-N7FVXZNI.js.map} +0 -0
  164. /package/dist/{chunk-AXX3QIKK.js.map → chunk-RD7I2Q2F.js.map} +0 -0
  165. /package/dist/{chunk-EK3XCAAS.js.map → chunk-UDRZY65Y.js.map} +0 -0
  166. /package/dist/{chunk-3PT7RKL5.js.map → chunk-USJSNHGG.js.map} +0 -0
  167. /package/dist/{claude-H33OQMXO.js.map → claude-6H36IBHO.js.map} +0 -0
  168. /package/dist/{compile-ULNO5F7Q.js.map → compile-CT7IR7O2.js.map} +0 -0
  169. /package/dist/{contribute-Q6GX6AXK.js.map → contribute-GXKOIA42.js.map} +0 -0
  170. /package/dist/{feedback-O4Q55SVS.js.map → feedback-K3A4QUSG.js.map} +0 -0
  171. /package/dist/{git-FVMGBHC2.js.map → git-ENLT2VNI.js.map} +0 -0
  172. /package/dist/{init-UTYRHNJJ.js.map → init-XQQMFDM6.js.map} +0 -0
  173. /package/dist/{lint-5JMCWE4Y.js.map → lint-HAVU4U34.js.map} +0 -0
  174. /package/dist/{recap-VOOUXOGP.js.map → recap-ZKGHZCX6.js.map} +0 -0
  175. /package/dist/{shell-SBLXVOVJ.js.map → shell-2NNSIU34.js.map} +0 -0
  176. /package/dist/{test-3KIVXI6J.js.map → test-75WAA6DU.js.map} +0 -0
  177. /package/dist/{test-git-ZB6AGGRW.js.map → test-git-E2BLXR6M.js.map} +0 -0
  178. /package/dist/{test-prefix-FBGXKMPA.js.map → test-prefix-A7JGGYAA.js.map} +0 -0
@@ -7,6 +7,35 @@
7
7
 
8
8
  **If NO to all → IMMEDIATELY decline and redirect to exit session**
9
9
 
10
+ ---
11
+
12
+ ## 🍴 FORK CONTRIBUTOR RULE - APPLIES TO ALL FILE DECISIONS
13
+
14
+ **CRITICAL: Check this FIRST before recommending ANY iloom configuration file.**
15
+
16
+ **Fork Detection Check:**
17
+ If BOTH "origin" AND "upstream" git remotes are detected → This is a FORK.
18
+
19
+ **When Fork Detected:**
20
+ ALL iloom configuration files should default to their `.local` variants:
21
+ - `settings.local.json` (NOT `settings.json`)
22
+ - `package.iloom.local.json` (NOT `package.iloom.json`)
23
+
24
+ **Why:**
25
+ - Local variants are globally gitignored and won't appear in PRs to upstream
26
+ - Prevents personal iloom configuration from polluting upstream repository
27
+ - Your code changes should be the only thing in your PRs - not iloom settings
28
+
29
+ **How to Apply:**
30
+ 1. At the START of any configuration session, check for fork pattern
31
+ 2. If fork detected, set mental "fork mode" flag for the entire session
32
+ 3. When ANY file creation/recommendation is made, default to `.local` variant
33
+ 4. Remind the user why local files are recommended for forks
34
+
35
+ **This rule supersedes other file location recommendations when fork is detected.**
36
+
37
+ ---
38
+
10
39
  ## 🚫 FILE ACCESS RULES - STRICTLY ENFORCE
11
40
 
12
41
  **SETTINGS FILES (.iloom/settings.json and .iloom/settings.local.json):**
@@ -67,7 +96,7 @@ When the documentation below and the settings schema conflict, ALWAYS follow the
67
96
 
68
97
  ### Main Project Documentation
69
98
 
70
- README_CONTENT
99
+ {{README_CONTENT}}
71
100
 
72
101
  ---
73
102
 
@@ -130,7 +159,7 @@ The following JSON Schema defines valid iloom settings:
130
159
  },
131
160
  "noVerify": {
132
161
  "type": "boolean",
133
- "description": "Skip pre-commit hooks (--no-verify) when committing during finish workflow"
162
+ "description": "Skip pre-commit hooks (--no-verify) when committing during commit and finish workflows"
134
163
  },
135
164
  "startIde": {
136
165
  "type": "boolean",
@@ -175,7 +204,7 @@ The following JSON Schema defines valid iloom settings:
175
204
  },
176
205
  "noVerify": {
177
206
  "type": "boolean",
178
- "description": "Skip pre-commit hooks (--no-verify) when committing during finish workflow"
207
+ "description": "Skip pre-commit hooks (--no-verify) when committing during commit and finish workflows"
179
208
  },
180
209
  "startIde": {
181
210
  "type": "boolean",
@@ -220,7 +249,7 @@ The following JSON Schema defines valid iloom settings:
220
249
  },
221
250
  "noVerify": {
222
251
  "type": "boolean",
223
- "description": "Skip pre-commit hooks (--no-verify) when committing during finish workflow"
252
+ "description": "Skip pre-commit hooks (--no-verify) when committing during commit and finish workflows"
224
253
  },
225
254
  "startIde": {
226
255
  "type": "boolean",
@@ -324,6 +353,17 @@ The following JSON Schema defines valid iloom settings:
324
353
  "capabilities": {
325
354
  "type": "object",
326
355
  "properties": {
356
+ "capabilities": {
357
+ "type": "array",
358
+ "items": {
359
+ "type": "string",
360
+ "enum": [
361
+ "cli",
362
+ "web"
363
+ ]
364
+ },
365
+ "description": "Explicitly declared project capabilities (auto-detected if not specified)"
366
+ },
327
367
  "web": {
328
368
  "type": "object",
329
369
  "properties": {
@@ -509,7 +549,7 @@ The following JSON Schema defines valid iloom settings:
509
549
  }
510
550
  ```
511
551
 
512
- {{#IF SETTINGS_JSON}}
552
+ {{#if SETTINGS_JSON}}
513
553
  ## Existing Configuration (Shared)
514
554
 
515
555
  **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.**
@@ -517,11 +557,11 @@ The following JSON Schema defines valid iloom settings:
517
557
  The user has shared configuration at `.iloom/settings.json`:
518
558
 
519
559
  ```json
520
- SETTINGS_JSON
560
+ {{SETTINGS_JSON}}
521
561
  ```
522
- {{/IF SETTINGS_JSON}}
562
+ {{/if}}
523
563
 
524
- {{#IF SETTINGS_LOCAL_JSON}}
564
+ {{#if SETTINGS_LOCAL_JSON}}
525
565
  ## Existing Configuration (Local)
526
566
 
527
567
  **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.**
@@ -529,11 +569,11 @@ SETTINGS_JSON
529
569
  The user has local configuration at `.iloom/settings.local.json`:
530
570
 
531
571
  ```json
532
- SETTINGS_LOCAL_JSON
572
+ {{SETTINGS_LOCAL_JSON}}
533
573
  ```
534
- {{/IF SETTINGS_LOCAL_JSON}}
574
+ {{/if}}
535
575
 
536
- {{#IF SETTINGS_GLOBAL_JSON}}
576
+ {{#if SETTINGS_GLOBAL_JSON}}
537
577
  ## Global Configuration (User-Level)
538
578
 
539
579
  **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.**
@@ -541,9 +581,9 @@ SETTINGS_LOCAL_JSON
541
581
  The user has global configuration at `~/.config/iloom-ai/settings.json`:
542
582
 
543
583
  ```json
544
- SETTINGS_GLOBAL_JSON
584
+ {{SETTINGS_GLOBAL_JSON}}
545
585
  ```
546
- {{/IF SETTINGS_GLOBAL_JSON}}
586
+ {{/if}}
547
587
 
548
588
  ## Settings Hierarchy & Recommendations
549
589
 
@@ -565,15 +605,15 @@ SETTINGS_GLOBAL_JSON
565
605
  - Machine-specific overrides (port conflicts, local database URLs)
566
606
  - Personal preferences that differ from team defaults
567
607
 
568
- {{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}
608
+ {{#if SETTINGS_JSON}}{{#if SETTINGS_LOCAL_JSON}}
569
609
  **Configuration Priority**: Local settings (settings.local.json) override shared settings (settings.json) when both exist.
570
- {{/IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_JSON}}
610
+ {{/if}}{{/if}}
571
611
 
572
- {{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}
612
+ {{#if SETTINGS_JSON}}{{#if SETTINGS_LOCAL_JSON}}
573
613
  You should present the combined configuration as defaults when asking questions, with local values taking precedence over shared values.
574
- {{/IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_JSON}}
614
+ {{/if}}{{/if}}
575
615
 
576
- {{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_JSON}}
616
+ {{#if SETTINGS_JSON}}{{#if SETTINGS_LOCAL_JSON}}{{/if}}{{/if}}
577
617
 
578
618
  ## Configuration Workflow
579
619
 
@@ -583,14 +623,14 @@ Follow these steps to guide the user through configuration:
583
623
 
584
624
  **BEFORE doing anything else, extract current values from existing configuration:**
585
625
 
586
- {{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}
626
+ {{#if SETTINGS_JSON}}{{#if SETTINGS_LOCAL_JSON}}
587
627
  Parse both settings.json and settings.local.json. Merge them with local taking precedence over shared.
588
- {{/IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_JSON}}
628
+ {{/if}}{{/if}}
589
629
 
590
- {{#IF SETTINGS_JSON}}{{#IF SETTINGS_LOCAL_JSON}}{{/IF SETTINGS_LOCAL_JSON}}
591
- {{#IF SETTINGS_LOCAL_JSON}}Parse settings.local.json to get current values.{{/IF SETTINGS_LOCAL_JSON}}
592
- {{#IF SETTINGS_JSON}}Parse settings.json to get current values.{{/IF SETTINGS_JSON}}
593
- {{/IF SETTINGS_JSON}}
630
+ {{#if SETTINGS_JSON}}{{#if SETTINGS_LOCAL_JSON}}{{/if}}
631
+ {{#if SETTINGS_LOCAL_JSON}}Parse settings.local.json to get current values.{{/if}}
632
+ {{#if SETTINGS_JSON}}Parse settings.json to get current values.{{/if}}
633
+ {{/if}}
594
634
 
595
635
  Extract these current values if they exist:
596
636
  - `currentMainBranch` from `mainBranch` field (default: "main")
@@ -615,7 +655,7 @@ Base Port: [currentBasePort or "3000 (default)"]
615
655
  IDE: [currentIdeType or "vscode (default)"]
616
656
  Issue Tracker: [currentIssueProvider or "github (default)"]
617
657
  Linear Team ID: [currentLinearTeamId] (only if currentIssueProvider == linear)
618
- {{#IF MULTIPLE_REMOTES}}GitHub Remote: [currentGitHubRemote] (only if currentIssueProvider == github){{/IF MULTIPLE_REMOTES}}
658
+ {{#if MULTIPLE_REMOTES}}GitHub Remote: [currentGitHubRemote] (only if currentIssueProvider == github){{/if}}
619
659
  ```
620
660
 
621
661
  **Then ask the user what they want to do:**
@@ -629,9 +669,9 @@ Linear Team ID: [currentLinearTeamId] (only if currentIssueProvider == linear)
629
669
 
630
670
  **Based on their answer:**
631
671
  - **Modify existing settings** → Proceed to Phase 1 to update settings
632
- {{#IF MULTIPLE_REMOTES}}
672
+ {{#if MULTIPLE_REMOTES}}
633
673
  - **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.
634
- {{/IF MULTIPLE_REMOTES}}
674
+ {{/if}}
635
675
  - **Add advanced configuration** → Skip to Phase 9 to help with advanced options
636
676
  - **Start fresh** → Proceed to Phase 1 to reconfigure from scratch
637
677
  - **Nothing/Exit** → Show Phase 9 wrap-up message and end session
@@ -645,7 +685,7 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
645
685
  **Create a single AskUserQuestion call with these questions:**
646
686
 
647
687
  1. **Main Branch**
648
- - Question format: "What is your main/primary branch name?{{#IF currentMainBranch}} (Currently: [currentMainBranch]){{/IF currentMainBranch}}"
688
+ - Question format: "What is your main/primary branch name?{{#if currentMainBranch}} (Currently: [currentMainBranch]){{/if}}"
649
689
  - Options (as examples, user can type "Other" to provide custom):
650
690
  - "main" - Standard default
651
691
  - "master" - Legacy default
@@ -655,7 +695,7 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
655
695
  - Store answer as: `mainBranch`
656
696
 
657
697
  2. **Worktree Prefix**
658
- - Question format: "What prefix should iloom use for worktree directories?{{#IF currentWorktreePrefix}} (Currently: [currentWorktreePrefix]){{/IF currentWorktreePrefix}} Leave empty to use default (<repo-name>-looms)."
698
+ - Question format: "What prefix should iloom use for worktree directories?{{#if currentWorktreePrefix}} (Currently: [currentWorktreePrefix]){{/if}} Leave empty to use default (<repo-name>-looms)."
659
699
  - Options (as examples):
660
700
  - Use default prefix (recommened)
661
701
  - "looms" - Simple 'looms-' prefix
@@ -666,7 +706,7 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
666
706
  - Note: If user specifies default, omit this field from settings, it they say empty, add an empty string to the settings
667
707
 
668
708
  3. **Permission Mode for Issue Workflows**
669
- - Question format: "What permission mode should Claude use when working on issues?{{#IF currentPermissionMode}} (Currently: [currentPermissionMode]){{/IF currentPermissionMode}}"
709
+ - Question format: "What permission mode should Claude use when working on issues?{{#if currentPermissionMode}} (Currently: [currentPermissionMode]){{/if}}"
670
710
  - Options:
671
711
  - "default" - Use Claude Code's default behavior
672
712
  - "acceptEdits" - Claude executes with your confirmation (recommended)
@@ -677,7 +717,7 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
677
717
  - Store answer as: `workflows.issue.permissionMode` - NOTE: this is a personal preference - recommend it be stored in the gitignored local settings file.
678
718
 
679
719
  4. **Base Port**
680
- - Question format: "What base port should web development servers use?{{#IF currentBasePort}} (Currently: [currentBasePort]){{/IF currentBasePort}}"
720
+ - Question format: "What base port should web development servers use?{{#if currentBasePort}} (Currently: [currentBasePort]){{/if}}"
681
721
  - Options (as examples):
682
722
  - "3000" - Common Node.js default
683
723
  - "8000" - Common Python default
@@ -692,11 +732,13 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
692
732
  - Users can select "Other" on any question to provide custom input
693
733
  - Process all answers at once when the user submits
694
734
 
695
- {{#IF NO_PACKAGE_JSON}}
735
+ {{#if NO_PACKAGE_JSON}}
696
736
  ### Phase 1.5: Framework Detection (Non-Node.js Project) - DO NOT SKIP
697
737
 
698
738
  iloom needs to detect the project's language and framework to configure build/test/dev scripts.
699
739
 
740
+ **IMPORTANT - Fork Mode Reminder:** If fork was detected earlier (origin + upstream remotes), pass this context to the framework detector. The detector should recommend `package.iloom.local.json` instead of `package.iloom.json` for fork contributors.
741
+
700
742
  **Invoke the framework detector agent** using the `iloom-framework-detector` agent:
701
743
 
702
744
  The agent will:
@@ -756,7 +798,7 @@ If the framework detector did not set capabilities, or if you need to ask the us
756
798
  - No clear indicators -> ask user explicitly
757
799
 
758
800
  After the framework detector agent completes (and capabilities are set), proceed to Phase 2.
759
- {{/IF NO_PACKAGE_JSON}}
801
+ {{/if}}
760
802
 
761
803
  ### Phase 2: Tooling Configuration
762
804
 
@@ -764,12 +806,12 @@ This phase configures external tooling integrations. Use AskUserQuestion to gath
764
806
 
765
807
  **Step 1: Issue Tracker Provider**
766
808
 
767
- {{#IF MULTIPLE_REMOTES}}
809
+ {{#if MULTIPLE_REMOTES}}
768
810
  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.
769
- {{/IF MULTIPLE_REMOTES}}
811
+ {{/if}}
770
812
 
771
813
  1. **Issue Tracker Provider**
772
- - Question format: "Which issue tracker do you use?{{#IF currentIssueProvider}} (Currently: [currentIssueProvider]){{/IF currentIssueProvider}}"
814
+ - Question format: "Which issue tracker do you use?{{#if currentIssueProvider}} (Currently: [currentIssueProvider]){{/if}}"
773
815
  - Options:
774
816
  - "github" - GitHub Issues (default)
775
817
  - "linear" - Linear Issues
@@ -789,11 +831,11 @@ Based on the answer to Step 1, ask the appropriate follow-up questions:
789
831
 
790
832
  **If GitHub was selected:**
791
833
 
792
- {{#IF MULTIPLE_REMOTES}}
834
+ {{#if MULTIPLE_REMOTES}}
793
835
  This repository has multiple git remotes detected. iloom needs to know which remote's GitHub repository to use for creating and reading issues.
794
836
 
795
837
  **Detected remotes:**
796
- REMOTES_INFO
838
+ {{REMOTES_INFO}}
797
839
 
798
840
  2. **GitHub Remote** (only ask if GitHub is selected)
799
841
  - Question format: "Which remote should iloom use for GitHub issue operations?"
@@ -801,20 +843,20 @@ REMOTES_INFO
801
843
  - **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."
802
844
  - For other multi-remote scenarios: Default to "origin" if it exists, otherwise the first remote
803
845
  - Store answer as: `issueManagement.github.remote`
804
- {{/IF MULTIPLE_REMOTES}}
846
+ {{/if}}
805
847
 
806
- {{#IF SINGLE_REMOTE}}
807
- **Note:** Only one remote detected (SINGLE_REMOTE_NAME pointing to SINGLE_REMOTE_URL). iloom will use this for GitHub operations. No additional configuration needed.
808
- {{/IF SINGLE_REMOTE}}
848
+ {{#if SINGLE_REMOTE}}
849
+ **Note:** Only one remote detected ({{SINGLE_REMOTE_NAME}} pointing to {{SINGLE_REMOTE_URL}}). iloom will use this for GitHub operations. No additional configuration needed.
850
+ {{/if}}
809
851
 
810
- {{#IF NO_REMOTES}}
852
+ {{#if NO_REMOTES}}
811
853
  **Warning:** No git remotes detected. The user will need to configure a remote before using iloom's GitHub features.
812
- {{/IF NO_REMOTES}}
854
+ {{/if}}
813
855
 
814
856
  **If Linear was selected:**
815
857
 
816
858
  2. **Linear Team ID** (only ask if issue provider is "linear")
817
- - Question format: "What is your Linear team ID/key?{{#IF currentLinearTeamId}} (Currently: [currentLinearTeamId]){{/IF currentLinearTeamId}}"
859
+ - Question format: "What is your Linear team ID/key?{{#if currentLinearTeamId}} (Currently: [currentLinearTeamId]){{/if}}"
818
860
  - Options (as examples):
819
861
  - "ENG" - Engineering team
820
862
  - "PLAT" - Platform team
@@ -840,7 +882,7 @@ REMOTES_INFO
840
882
  **Step 3: IDE Selection**
841
883
 
842
884
  4. **IDE Selection**
843
- - Question format: "Which IDE should iloom launch when starting a loom?{{#IF currentIdeType}} (Currently: [currentIdeType]){{/IF currentIdeType}}"
885
+ - Question format: "Which IDE should iloom launch when starting a loom?{{#if currentIdeType}} (Currently: [currentIdeType]){{/if}}"
844
886
  - Options:
845
887
  - "vscode" - Visual Studio Code (default)
846
888
  - "cursor" - Cursor AI editor
@@ -857,7 +899,7 @@ REMOTES_INFO
857
899
  **Step 4: Merge Mode** (only ask if multiple remotes detected OR user requests advanced config)
858
900
 
859
901
  5. **Merge Mode**
860
- - Question format: "How should iloom handle finishing work?{{#IF currentMergeMode}} (Currently: [currentMergeMode]){{/IF currentMergeMode}}"
902
+ - Question format: "How should iloom handle finishing work?{{#if currentMergeMode}} (Currently: [currentMergeMode]){{/if}}"
861
903
  - Options:
862
904
  - "local" - Merge changes locally (traditional workflow)
863
905
  - "github-pr" - Create GitHub PR when finishing (for PR-based workflows)
@@ -884,7 +926,7 @@ REMOTES_INFO
884
926
 
885
927
  After Phase 2, handle color settings based on gitignore status.
886
928
 
887
- Analyis of system: Is VSCode Settings ignore? VSCODE_SETTINGS_GITIGNORED
929
+ Analyis of system: Is VSCode Settings ignore? {{VSCODE_SETTINGS_GITIGNORED}}
888
930
 
889
931
  **IMPORTANT DISTINCTION:**
890
932
  - Schema defaults are: terminal=true, vscode=false (for safety)
@@ -932,7 +974,7 @@ Tooling Configuration (Phase 2):
932
974
  Issue Tracker: [value]
933
975
  Linear Team ID: [value] (only if issue tracker is Linear)
934
976
  Linear API Token: [configured/not configured] (only if issue tracker is Linear - never show actual token)
935
- {{#IF MULTIPLE_REMOTES}}GitHub Remote: [value] (only if issue tracker is GitHub){{/IF MULTIPLE_REMOTES}}
977
+ {{#if MULTIPLE_REMOTES}}GitHub Remote: [value] (only if issue tracker is GitHub){{/if}}
936
978
  IDE: [value or "vscode (default)"]
937
979
  Merge Mode: [value] (only if configured)
938
980
  ```
@@ -948,7 +990,7 @@ Then ask: "Does this configuration look correct?"
948
990
 
949
991
  ### Phase 4: Choose Configuration File
950
992
 
951
- **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."
993
+ **Fork/Contributor Check:** If "GitHub Remote Configuration" shows both "origin" and "upstream" remotes (classic fork pattern), display: "**FORK DETECTED**: You're working on a fork (origin + upstream remotes detected). **ALL configuration settings should be saved to settings.local.json** to avoid polluting the upstream repository with your personal settings. When you submit PRs to upstream, only your code changes should be included - not iloom configuration. The Local option below is strongly recommended."
952
994
 
953
995
  **CRITICAL: You MUST ask the user where to save the configuration. DO NOT make assumptions or decide for them.**
954
996
 
@@ -962,7 +1004,7 @@ Ask the user: "Where should this configuration be saved?
962
1004
  - **Recommend Project for**: Main branch, worktree prefix, base port (when standardized for the team)
963
1005
  - **Recommend Local for**: Machine-specific overrides, personal preferences that differ from team defaults
964
1006
 
965
- **Fork/Contributor Note:** For fork setups, recommend Local over Project to avoid including personal settings in PRs to upstream.
1007
+ **Fork/Contributor Note:** For fork setups, **ALL settings should go to Local (settings.local.json)**, not Project. This prevents your personal iloom configuration from being included in PRs to the upstream repository. Even settings like mainBranch or basePort should be stored locally in fork scenarios to keep your contributions clean.
966
1008
 
967
1009
  **DO NOT:**
968
1010
  - Assume what the user wants based on the type of setting
@@ -1390,6 +1432,32 @@ If users ask about specific configurations, help them add these sections to thei
1390
1432
  - Running additional commands before/after the standard npm scripts
1391
1433
  - Wrapping commands with environment variables or tools
1392
1434
 
1435
+ **Local Overrides for Fork Contributors:**
1436
+
1437
+ If you're contributing to a forked repository, save your customizations to `.iloom/package.iloom.local.json` instead of `package.iloom.json`. This file:
1438
+ - Is automatically added to global gitignore (won't appear in PRs)
1439
+ - Merges with package.iloom.json (local scripts override base scripts)
1440
+ - Is automatically copied to new looms
1441
+
1442
+ **When to use each file:**
1443
+ - `package.iloom.json` - Shared team configuration, committed to git
1444
+ - `package.iloom.local.json` - Personal overrides, never committed (gitignored globally)
1445
+
1446
+ Example `.iloom/package.iloom.local.json`:
1447
+ ```json
1448
+ {
1449
+ "scripts": {
1450
+ "test": "pytest --my-local-options",
1451
+ "dev": "python -m mymodule --debug"
1452
+ }
1453
+ }
1454
+ ```
1455
+
1456
+ This is especially useful when:
1457
+ - Working on a fork where upstream has different script requirements
1458
+ - Your local environment needs different commands than the team standard
1459
+ - You want to add debug flags or local-only tooling without affecting others
1460
+
1393
1461
  ## Important Notes
1394
1462
 
1395
1463
  - **Validate ALL inputs** against the schema before writing files