@iloom/cli 0.5.5 → 0.6.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 (97) hide show
  1. package/README.md +100 -4
  2. package/dist/{ClaudeContextManager-7WX7DUNI.js → ClaudeContextManager-6J2EB4QU.js} +4 -4
  3. package/dist/{ClaudeService-LQLN2GP4.js → ClaudeService-O2PB22GX.js} +3 -3
  4. package/dist/{LoomLauncher-5QU42LOM.js → LoomLauncher-5LFM4LXB.js} +4 -4
  5. package/dist/{PRManager-OCSB2HPT.js → PRManager-GB3FOJ2W.js} +2 -2
  6. package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
  7. package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
  8. package/dist/README.md +100 -4
  9. package/dist/agents/iloom-framework-detector.md +366 -0
  10. package/dist/agents/iloom-issue-analyze-and-plan.md +0 -10
  11. package/dist/agents/iloom-issue-implementer.md +1 -1
  12. package/dist/agents/iloom-issue-planner.md +0 -10
  13. package/dist/build-FJVYP7EV.js +27 -0
  14. package/dist/build-FJVYP7EV.js.map +1 -0
  15. package/dist/{chunk-WIJWIKAN.js → chunk-2A7WQKBE.js} +10 -2
  16. package/dist/{chunk-WIJWIKAN.js.map → chunk-2A7WQKBE.js.map} +1 -1
  17. package/dist/{chunk-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
  18. package/dist/chunk-64O2UIWO.js.map +1 -0
  19. package/dist/{chunk-FO2H3YXI.js → chunk-6U6VI4SZ.js} +2 -2
  20. package/dist/{chunk-VXMY22TP.js → chunk-7WANFUIK.js} +2 -2
  21. package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
  22. package/dist/chunk-AXX3QIKK.js.map +1 -0
  23. package/dist/chunk-BXCPJJYM.js +133 -0
  24. package/dist/chunk-BXCPJJYM.js.map +1 -0
  25. package/dist/{chunk-46JVEGUW.js → chunk-I75JMBNB.js} +14 -16
  26. package/dist/chunk-I75JMBNB.js.map +1 -0
  27. package/dist/{chunk-SJIMVKK7.js → chunk-K7SEEHKO.js} +2 -2
  28. package/dist/{chunk-WZHBRKLN.js → chunk-LVBRMTE6.js} +39 -56
  29. package/dist/chunk-LVBRMTE6.js.map +1 -0
  30. package/dist/{chunk-NKRQNER7.js → chunk-Q7POFB5Q.js} +1 -55
  31. package/dist/chunk-Q7POFB5Q.js.map +1 -0
  32. package/dist/{chunk-N4ZJVATC.js → chunk-SN3Z6EZO.js} +11 -7
  33. package/dist/chunk-SN3Z6EZO.js.map +1 -0
  34. package/dist/chunk-TRQ76ISK.js +159 -0
  35. package/dist/chunk-TRQ76ISK.js.map +1 -0
  36. package/dist/{chunk-5IWU3HXE.js → chunk-VDA5JMB4.js} +3 -4
  37. package/dist/{chunk-5IWU3HXE.js.map → chunk-VDA5JMB4.js.map} +1 -1
  38. package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
  39. package/dist/chunk-W6WVRHJ6.js.map +1 -0
  40. package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
  41. package/dist/chunk-ZPSTA5PR.js.map +1 -0
  42. package/dist/{cleanup-WTZZ74VS.js → cleanup-BRUAINKE.js} +6 -6
  43. package/dist/cli.js +268 -65
  44. package/dist/cli.js.map +1 -1
  45. package/dist/compile-ULNO5F7Q.js +57 -0
  46. package/dist/compile-ULNO5F7Q.js.map +1 -0
  47. package/dist/{contribute-T7ENST5N.js → contribute-Q6GX6AXK.js} +95 -27
  48. package/dist/contribute-Q6GX6AXK.js.map +1 -0
  49. package/dist/{dev-server-S5QG5SBZ.js → dev-server-4RCDJ5MU.js} +5 -5
  50. package/dist/{feedback-PDMCKYOT.js → feedback-O4Q55SVS.js} +7 -7
  51. package/dist/{ignite-YF4Q5RA7.js → ignite-VHV65WEZ.js} +9 -5
  52. package/dist/ignite-VHV65WEZ.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +12 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/{init-XQQGC6DN.js → init-UTYRHNJJ.js} +5 -4
  57. package/dist/lint-5JMCWE4Y.js +27 -0
  58. package/dist/lint-5JMCWE4Y.js.map +1 -0
  59. package/dist/{open-AIZG5756.js → open-WHVUYGPY.js} +5 -5
  60. package/dist/prompts/init-prompt.txt +101 -8
  61. package/dist/prompts/issue-prompt.txt +12 -12
  62. package/dist/{rebase-5EY3Q6XP.js → rebase-Y4AS6LQW.js} +2 -2
  63. package/dist/{run-CMZUYZVG.js → run-NCRK5NPR.js} +5 -5
  64. package/dist/{summary-5YXUGPRN.js → summary-CVFAMDOJ.js} +3 -3
  65. package/dist/test-3KIVXI6J.js +27 -0
  66. package/dist/test-3KIVXI6J.js.map +1 -0
  67. package/package.json +1 -1
  68. package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
  69. package/dist/chunk-2ZPFJQ3B.js +0 -63
  70. package/dist/chunk-2ZPFJQ3B.js.map +0 -1
  71. package/dist/chunk-46JVEGUW.js.map +0 -1
  72. package/dist/chunk-EBISESAP.js.map +0 -1
  73. package/dist/chunk-K5G5SFWY.js.map +0 -1
  74. package/dist/chunk-LVLRMP7V.js.map +0 -1
  75. package/dist/chunk-N4ZJVATC.js.map +0 -1
  76. package/dist/chunk-NKRQNER7.js.map +0 -1
  77. package/dist/chunk-SHVB3EFE.js.map +0 -1
  78. package/dist/chunk-WZHBRKLN.js.map +0 -1
  79. package/dist/contribute-T7ENST5N.js.map +0 -1
  80. package/dist/ignite-YF4Q5RA7.js.map +0 -1
  81. /package/dist/{ClaudeContextManager-7WX7DUNI.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
  82. /package/dist/{ClaudeService-LQLN2GP4.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
  83. /package/dist/{LoomLauncher-5QU42LOM.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
  84. /package/dist/{PRManager-OCSB2HPT.js.map → PRManager-GB3FOJ2W.js.map} +0 -0
  85. /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
  86. /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
  87. /package/dist/{chunk-FO2H3YXI.js.map → chunk-6U6VI4SZ.js.map} +0 -0
  88. /package/dist/{chunk-VXMY22TP.js.map → chunk-7WANFUIK.js.map} +0 -0
  89. /package/dist/{chunk-SJIMVKK7.js.map → chunk-K7SEEHKO.js.map} +0 -0
  90. /package/dist/{cleanup-WTZZ74VS.js.map → cleanup-BRUAINKE.js.map} +0 -0
  91. /package/dist/{dev-server-S5QG5SBZ.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
  92. /package/dist/{feedback-PDMCKYOT.js.map → feedback-O4Q55SVS.js.map} +0 -0
  93. /package/dist/{init-XQQGC6DN.js.map → init-UTYRHNJJ.js.map} +0 -0
  94. /package/dist/{open-AIZG5756.js.map → open-WHVUYGPY.js.map} +0 -0
  95. /package/dist/{rebase-5EY3Q6XP.js.map → rebase-Y4AS6LQW.js.map} +0 -0
  96. /package/dist/{run-CMZUYZVG.js.map → run-NCRK5NPR.js.map} +0 -0
  97. /package/dist/{summary-5YXUGPRN.js.map → summary-CVFAMDOJ.js.map} +0 -0
package/README.md CHANGED
@@ -120,7 +120,7 @@ Each loom is a fully isolated container for your work:
120
120
 
121
121
  * **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
122
122
 
123
- * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`.
123
+ * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
124
124
 
125
125
  * **Unique Runtime:**
126
126
 
@@ -144,6 +144,10 @@ Command Reference
144
144
  | `il spin` | | Launch Claude inside the current loom with context auto-detected. |
145
145
  | `il open` | `run` | Open loom in browser (web) or run your CLI tool. |
146
146
  | `il dev-server` | `dev` | Start dev server in foreground for a workspace. |
147
+ | `il build` | | Run the build script for a workspace. |
148
+ | `il lint` | | Run the lint script for a workspace. |
149
+ | `il test` | | Run the test script for a workspace. |
150
+ | `il compile` | `typecheck` | Run the compile or typecheck script for a workspace. |
147
151
  | `il add-issue` | `a` | Create and AI-enhance a new issue without starting work yet. |
148
152
  | `il init` | `config` | Interactive configuration wizard. |
149
153
  | `il feedback` | `f` | Submit bug reports/feedback directly from the CLI. |
@@ -232,6 +236,73 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
232
236
  }
233
237
  ```
234
238
 
239
+ ### Multi-Language/Framework Project Support
240
+
241
+ iloom supports projects in any programming language through `.iloom/package.iloom.json`. This file defines scripts using raw shell commands instead of npm scripts.
242
+
243
+ **File Location:** `.iloom/package.iloom.json`
244
+
245
+ **Format:**
246
+ ```json
247
+ {
248
+ "scripts": {
249
+ "install": "bundle install",
250
+ "build": "cargo build --release",
251
+ "test": "cargo test",
252
+ "dev": "cargo run",
253
+ "lint": "cargo clippy",
254
+ "typecheck": "cargo check"
255
+ }
256
+ }
257
+ ```
258
+
259
+ **Supported Scripts:**
260
+
261
+ | Script | Purpose | When Used |
262
+ |--------|---------|-----------|
263
+ | `install` | Install dependencies | `il start` (loom creation), `il finish` (post-merge) |
264
+ | `build` | Compile/build project | `il build`, `il finish` (CLI projects, post-merge) |
265
+ | `test` | Run test suite | `il test`, `il finish` validation |
266
+ | `dev` | Start dev server | `il dev-server` |
267
+ | `lint` | Run linter | `il lint`, `il finish` validation |
268
+ | `typecheck` | Type checking | `il typecheck`, `il finish` validation |
269
+ | `compile` | Alternative to typecheck | `il compile`, `il finish` validation (preferred over typecheck if both exist) |
270
+
271
+ All scripts are optional. If not defined, that step is skipped.
272
+
273
+ **Language Examples:**
274
+
275
+ | Language | Install | Build | Test | Dev | Lint | Typecheck |
276
+ |----------|---------|-------|------|-----|------|-----------|
277
+ | Rust | `cargo fetch` | `cargo build` | `cargo test` | `cargo run` | `cargo clippy` | `cargo check` |
278
+ | Python (pip) | `pip install -e .` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
279
+ | Python (poetry) | `poetry install` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
280
+ | Ruby | `bundle install` | - | `bundle exec rspec` | `rails server` | `bundle exec rubocop` | - |
281
+ | Go | `go mod download` | `go build ./...` | `go test ./...` | `go run .` | `golangci-lint run` | `go vet ./...` |
282
+
283
+ **Precedence Rules:**
284
+ 1. `.iloom/package.iloom.json` (if exists) - highest priority
285
+ 2. `package.json` (if exists) - fallback for Node.js projects
286
+
287
+ **Key Differences from package.json:**
288
+ - Scripts are raw shell commands, executed directly (not via npm/pnpm)
289
+ - No package manager prefix is added to commands
290
+ - Works with any language's toolchain
291
+
292
+ **Automatic Detection:** When running `il init` on a non-Node.js project, iloom will offer to detect your project's language and generate an appropriate `package.iloom.json`.
293
+
294
+ **→ [Complete Multi-Language Project Guide](docs/multi-language-projects.md)** - Detailed setup instructions, more language examples, and troubleshooting.
295
+
296
+ **Secret Storage Limitations:** iloom manages environment variables through standard `.env` files (via dotenv-flow). The following encrypted/proprietary secret storage formats are **not supported**:
297
+
298
+ | Format | Why Unsupported |
299
+ |--------|-----------------|
300
+ | Rails encrypted credentials (`config/credentials.yml.enc`) | Requires Rails internals + master key |
301
+ | ASP.NET Core User Secrets | Stored outside project at `~/.microsoft/usersecrets/<guid>/` |
302
+ | SOPS/Sealed Secrets | Requires external decryption keys |
303
+
304
+ **Recommendation:** If you want to use database isolation features (or anything else that requires updating env variables), use standard `.env` files for iloom compatibility. For Rails, consider [dotenv-rails](https://github.com/bkeepers/dotenv). For ASP.NET, use a local `.env` file alongside User Secrets.
305
+
235
306
  ### Copying Gitignored Files to Looms
236
307
 
237
308
  By default, looms only contain files tracked by Git. If you have local files that are gitignored (like SQLite databases, test data, or sensitive configuration), they won't be available in your looms.
@@ -291,6 +362,18 @@ Control how `il finish` handles your work. Configure in `.iloom/settings.json`:
291
362
  | `github-pr` | Push branch and create a GitHub PR on `il finish`. Worktree cleanup is optional. |
292
363
  | `github-draft-pr` | Create a draft PR immediately on `il start`. On `il finish`, the PR is marked ready for review. **Recommended for contributions to forked repos.** |
293
364
 
365
+ ### Rebase Conflict Resolution
366
+
367
+ When `il finish` or `il rebase` encounter rebase conflicts, iloom automatically launches Claude to help resolve them. During conflict resolution, the following git commands are **auto-approved** so Claude can work efficiently without requiring manual permission for each command:
368
+
369
+ - `git status` - View current rebase state
370
+ - `git diff` - Examine conflicts
371
+ - `git log` - Understand branch history
372
+ - `git add` - Stage resolved files
373
+ - `git rebase` - Continue or abort rebase
374
+
375
+ Note: Potentially destructive commands like `git reset` and `git checkout` are intentionally not auto-approved to prevent accidental data loss.
376
+
294
377
  **When to use `github-draft-pr`:**
295
378
  - **Contributing to forks:** When you don't are contributing to a forked repo use this mode to create the PR from your fork immediately, allowing iloom's agents to post workflow comments directly to the PR instead of writing to the upstream repo's issues (which may not be appreciated by the repo owners).
296
379
  - CI runs on your branch during development (draft PRs trigger CI on most repos)
@@ -380,10 +463,10 @@ This is an early-stage product.
380
463
  **Project Support:**
381
464
 
382
465
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
383
-
466
+
384
467
  * ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
385
-
386
- * ⚠️ **Other Stacks:** Python/Go/Rust etc. can work via generic package.json scripts, but are not natively supported yet.
468
+
469
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
387
470
 
388
471
  See all [known limitations](https://github.com/iloom-ai/iloom-cli/issues?q=is:issue+is:open+label:known-limitation) on GitHub. If you're feeling left out - you're absolutely right! The best way to complain about something is to fix it. So...
389
472
 
@@ -396,6 +479,19 @@ We (Claude and I) welcome contributions! We've made it easy to get started — i
396
479
  iloom contribute # Handles forking, cloning, and setting up the dev environment automatically.
397
480
  ```
398
481
 
482
+ You can also use `iloom contribute` to set up any GitHub repository for contribution:
483
+
484
+ ```bash
485
+ # Full URL format
486
+ iloom contribute "https://github.com/n8n-io/n8n"
487
+
488
+ # Shortened URL format
489
+ iloom contribute "github.com/n8n-io/n8n"
490
+
491
+ # owner/repo format
492
+ iloom contribute "n8n-io/n8n"
493
+ ```
494
+
399
495
  **All PRs should be created with iloom or include detailed context.** When you run `iloom contribute`, it configures iloom to create a draft PR as soon as you start work. As you work, iloom posts the AI's analysis, implementation plan, and progress directly to that draft PR—giving reviewers full context before the code is even ready for review. If you're not using iloom, please provide equivalent detail in your PR.
400
496
 
401
497
  New contributors should start with issues labeled [starter-task](https://github.com/iloom-ai/iloom-cli/issues?q=is%3Aissue+is%3Aopen+label%3Astarter-task). For details, see our [Contributing Guide](CONTRIBUTING.md).
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeContextManager
4
- } from "./chunk-VXMY22TP.js";
5
- import "./chunk-FO2H3YXI.js";
6
- import "./chunk-K5G5SFWY.js";
4
+ } from "./chunk-7WANFUIK.js";
5
+ import "./chunk-6U6VI4SZ.js";
6
+ import "./chunk-W6WVRHJ6.js";
7
7
  import "./chunk-F6WVM437.js";
8
8
  import "./chunk-AEIMYF4P.js";
9
9
  import "./chunk-6MLEBAYZ.js";
@@ -11,4 +11,4 @@ import "./chunk-VT4PDUYT.js";
11
11
  export {
12
12
  ClaudeContextManager
13
13
  };
14
- //# sourceMappingURL=ClaudeContextManager-7WX7DUNI.js.map
14
+ //# sourceMappingURL=ClaudeContextManager-6J2EB4QU.js.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-FO2H3YXI.js";
5
- import "./chunk-K5G5SFWY.js";
4
+ } from "./chunk-6U6VI4SZ.js";
5
+ import "./chunk-W6WVRHJ6.js";
6
6
  import "./chunk-F6WVM437.js";
7
7
  import "./chunk-AEIMYF4P.js";
8
8
  import "./chunk-6MLEBAYZ.js";
@@ -10,4 +10,4 @@ import "./chunk-VT4PDUYT.js";
10
10
  export {
11
11
  ClaudeService
12
12
  };
13
- //# sourceMappingURL=ClaudeService-LQLN2GP4.js.map
13
+ //# sourceMappingURL=ClaudeService-O2PB22GX.js.map
@@ -4,9 +4,9 @@ import {
4
4
  } from "./chunk-O7VL5N6S.js";
5
5
  import {
6
6
  ClaudeContextManager
7
- } from "./chunk-VXMY22TP.js";
8
- import "./chunk-FO2H3YXI.js";
9
- import "./chunk-K5G5SFWY.js";
7
+ } from "./chunk-7WANFUIK.js";
8
+ import "./chunk-6U6VI4SZ.js";
9
+ import "./chunk-W6WVRHJ6.js";
10
10
  import {
11
11
  getExecutablePath
12
12
  } from "./chunk-GYCR2LOU.js";
@@ -252,4 +252,4 @@ var LoomLauncher = class {
252
252
  export {
253
253
  LoomLauncher
254
254
  };
255
- //# sourceMappingURL=LoomLauncher-5QU42LOM.js.map
255
+ //# sourceMappingURL=LoomLauncher-5LFM4LXB.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  PRManager
4
- } from "./chunk-5IWU3HXE.js";
4
+ } from "./chunk-VDA5JMB4.js";
5
5
  import "./chunk-YETJNRQM.js";
6
6
  import "./chunk-FXDYIV3K.js";
7
7
  import "./chunk-LT3SGBR7.js";
@@ -11,4 +11,4 @@ import "./chunk-VT4PDUYT.js";
11
11
  export {
12
12
  PRManager
13
13
  };
14
- //# sourceMappingURL=PRManager-OCSB2HPT.js.map
14
+ //# sourceMappingURL=PRManager-GB3FOJ2W.js.map
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ProjectCapabilityDetector
4
+ } from "./chunk-ZPSTA5PR.js";
5
+ import "./chunk-BXCPJJYM.js";
6
+ import "./chunk-6MLEBAYZ.js";
7
+ import "./chunk-VT4PDUYT.js";
8
+ export {
9
+ ProjectCapabilityDetector
10
+ };
11
+ //# sourceMappingURL=ProjectCapabilityDetector-S5FLNCFI.js.map
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  PromptTemplateManager
4
- } from "./chunk-K5G5SFWY.js";
4
+ } from "./chunk-W6WVRHJ6.js";
5
5
  import "./chunk-VT4PDUYT.js";
6
6
  export {
7
7
  PromptTemplateManager
8
8
  };
9
- //# sourceMappingURL=PromptTemplateManager-5GNF7FCP.js.map
9
+ //# sourceMappingURL=PromptTemplateManager-C3DK6XZL.js.map
package/dist/README.md CHANGED
@@ -120,7 +120,7 @@ Each loom is a fully isolated container for your work:
120
120
 
121
121
  * **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
122
122
 
123
- * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`.
123
+ * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
124
124
 
125
125
  * **Unique Runtime:**
126
126
 
@@ -144,6 +144,10 @@ Command Reference
144
144
  | `il spin` | | Launch Claude inside the current loom with context auto-detected. |
145
145
  | `il open` | `run` | Open loom in browser (web) or run your CLI tool. |
146
146
  | `il dev-server` | `dev` | Start dev server in foreground for a workspace. |
147
+ | `il build` | | Run the build script for a workspace. |
148
+ | `il lint` | | Run the lint script for a workspace. |
149
+ | `il test` | | Run the test script for a workspace. |
150
+ | `il compile` | `typecheck` | Run the compile or typecheck script for a workspace. |
147
151
  | `il add-issue` | `a` | Create and AI-enhance a new issue without starting work yet. |
148
152
  | `il init` | `config` | Interactive configuration wizard. |
149
153
  | `il feedback` | `f` | Submit bug reports/feedback directly from the CLI. |
@@ -232,6 +236,73 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
232
236
  }
233
237
  ```
234
238
 
239
+ ### Multi-Language/Framework Project Support
240
+
241
+ iloom supports projects in any programming language through `.iloom/package.iloom.json`. This file defines scripts using raw shell commands instead of npm scripts.
242
+
243
+ **File Location:** `.iloom/package.iloom.json`
244
+
245
+ **Format:**
246
+ ```json
247
+ {
248
+ "scripts": {
249
+ "install": "bundle install",
250
+ "build": "cargo build --release",
251
+ "test": "cargo test",
252
+ "dev": "cargo run",
253
+ "lint": "cargo clippy",
254
+ "typecheck": "cargo check"
255
+ }
256
+ }
257
+ ```
258
+
259
+ **Supported Scripts:**
260
+
261
+ | Script | Purpose | When Used |
262
+ |--------|---------|-----------|
263
+ | `install` | Install dependencies | `il start` (loom creation), `il finish` (post-merge) |
264
+ | `build` | Compile/build project | `il build`, `il finish` (CLI projects, post-merge) |
265
+ | `test` | Run test suite | `il test`, `il finish` validation |
266
+ | `dev` | Start dev server | `il dev-server` |
267
+ | `lint` | Run linter | `il lint`, `il finish` validation |
268
+ | `typecheck` | Type checking | `il typecheck`, `il finish` validation |
269
+ | `compile` | Alternative to typecheck | `il compile`, `il finish` validation (preferred over typecheck if both exist) |
270
+
271
+ All scripts are optional. If not defined, that step is skipped.
272
+
273
+ **Language Examples:**
274
+
275
+ | Language | Install | Build | Test | Dev | Lint | Typecheck |
276
+ |----------|---------|-------|------|-----|------|-----------|
277
+ | Rust | `cargo fetch` | `cargo build` | `cargo test` | `cargo run` | `cargo clippy` | `cargo check` |
278
+ | Python (pip) | `pip install -e .` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
279
+ | Python (poetry) | `poetry install` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
280
+ | Ruby | `bundle install` | - | `bundle exec rspec` | `rails server` | `bundle exec rubocop` | - |
281
+ | Go | `go mod download` | `go build ./...` | `go test ./...` | `go run .` | `golangci-lint run` | `go vet ./...` |
282
+
283
+ **Precedence Rules:**
284
+ 1. `.iloom/package.iloom.json` (if exists) - highest priority
285
+ 2. `package.json` (if exists) - fallback for Node.js projects
286
+
287
+ **Key Differences from package.json:**
288
+ - Scripts are raw shell commands, executed directly (not via npm/pnpm)
289
+ - No package manager prefix is added to commands
290
+ - Works with any language's toolchain
291
+
292
+ **Automatic Detection:** When running `il init` on a non-Node.js project, iloom will offer to detect your project's language and generate an appropriate `package.iloom.json`.
293
+
294
+ **→ [Complete Multi-Language Project Guide](docs/multi-language-projects.md)** - Detailed setup instructions, more language examples, and troubleshooting.
295
+
296
+ **Secret Storage Limitations:** iloom manages environment variables through standard `.env` files (via dotenv-flow). The following encrypted/proprietary secret storage formats are **not supported**:
297
+
298
+ | Format | Why Unsupported |
299
+ |--------|-----------------|
300
+ | Rails encrypted credentials (`config/credentials.yml.enc`) | Requires Rails internals + master key |
301
+ | ASP.NET Core User Secrets | Stored outside project at `~/.microsoft/usersecrets/<guid>/` |
302
+ | SOPS/Sealed Secrets | Requires external decryption keys |
303
+
304
+ **Recommendation:** If you want to use database isolation features (or anything else that requires updating env variables), use standard `.env` files for iloom compatibility. For Rails, consider [dotenv-rails](https://github.com/bkeepers/dotenv). For ASP.NET, use a local `.env` file alongside User Secrets.
305
+
235
306
  ### Copying Gitignored Files to Looms
236
307
 
237
308
  By default, looms only contain files tracked by Git. If you have local files that are gitignored (like SQLite databases, test data, or sensitive configuration), they won't be available in your looms.
@@ -291,6 +362,18 @@ Control how `il finish` handles your work. Configure in `.iloom/settings.json`:
291
362
  | `github-pr` | Push branch and create a GitHub PR on `il finish`. Worktree cleanup is optional. |
292
363
  | `github-draft-pr` | Create a draft PR immediately on `il start`. On `il finish`, the PR is marked ready for review. **Recommended for contributions to forked repos.** |
293
364
 
365
+ ### Rebase Conflict Resolution
366
+
367
+ When `il finish` or `il rebase` encounter rebase conflicts, iloom automatically launches Claude to help resolve them. During conflict resolution, the following git commands are **auto-approved** so Claude can work efficiently without requiring manual permission for each command:
368
+
369
+ - `git status` - View current rebase state
370
+ - `git diff` - Examine conflicts
371
+ - `git log` - Understand branch history
372
+ - `git add` - Stage resolved files
373
+ - `git rebase` - Continue or abort rebase
374
+
375
+ Note: Potentially destructive commands like `git reset` and `git checkout` are intentionally not auto-approved to prevent accidental data loss.
376
+
294
377
  **When to use `github-draft-pr`:**
295
378
  - **Contributing to forks:** When you don't are contributing to a forked repo use this mode to create the PR from your fork immediately, allowing iloom's agents to post workflow comments directly to the PR instead of writing to the upstream repo's issues (which may not be appreciated by the repo owners).
296
379
  - CI runs on your branch during development (draft PRs trigger CI on most repos)
@@ -380,10 +463,10 @@ This is an early-stage product.
380
463
  **Project Support:**
381
464
 
382
465
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
383
-
466
+
384
467
  * ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
385
-
386
- * ⚠️ **Other Stacks:** Python/Go/Rust etc. can work via generic package.json scripts, but are not natively supported yet.
468
+
469
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
387
470
 
388
471
  See all [known limitations](https://github.com/iloom-ai/iloom-cli/issues?q=is:issue+is:open+label:known-limitation) on GitHub. If you're feeling left out - you're absolutely right! The best way to complain about something is to fix it. So...
389
472
 
@@ -396,6 +479,19 @@ We (Claude and I) welcome contributions! We've made it easy to get started — i
396
479
  iloom contribute # Handles forking, cloning, and setting up the dev environment automatically.
397
480
  ```
398
481
 
482
+ You can also use `iloom contribute` to set up any GitHub repository for contribution:
483
+
484
+ ```bash
485
+ # Full URL format
486
+ iloom contribute "https://github.com/n8n-io/n8n"
487
+
488
+ # Shortened URL format
489
+ iloom contribute "github.com/n8n-io/n8n"
490
+
491
+ # owner/repo format
492
+ iloom contribute "n8n-io/n8n"
493
+ ```
494
+
399
495
  **All PRs should be created with iloom or include detailed context.** When you run `iloom contribute`, it configures iloom to create a draft PR as soon as you start work. As you work, iloom posts the AI's analysis, implementation plan, and progress directly to that draft PR—giving reviewers full context before the code is even ready for review. If you're not using iloom, please provide equivalent detail in your PR.
400
496
 
401
497
  New contributors should start with issues labeled [starter-task](https://github.com/iloom-ai/iloom-cli/issues?q=is%3Aissue+is%3Aopen+label%3Astarter-task). For details, see our [Contributing Guide](CONTRIBUTING.md).