@iloom/cli 0.5.4 → 0.6.0

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 (114) hide show
  1. package/README.md +116 -4
  2. package/dist/{ClaudeContextManager-PQ46VILL.js → ClaudeContextManager-6J2EB4QU.js} +5 -5
  3. package/dist/{ClaudeService-6OMO552H.js → ClaudeService-O2PB22GX.js} +4 -4
  4. package/dist/{LoomLauncher-ZHDTPKED.js → LoomLauncher-5LFM4LXB.js} +5 -5
  5. package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
  6. package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
  7. package/dist/README.md +116 -4
  8. package/dist/{SettingsManager-CNYBGXDT.js → SettingsManager-35F5RUJH.js} +2 -2
  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-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
  16. package/dist/chunk-64O2UIWO.js.map +1 -0
  17. package/dist/{chunk-FXJKNVZW.js → chunk-6U6VI4SZ.js} +3 -3
  18. package/dist/{chunk-QPS6TZUW.js → chunk-7WANFUIK.js} +2 -2
  19. package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
  20. package/dist/chunk-AXX3QIKK.js.map +1 -0
  21. package/dist/chunk-BXCPJJYM.js +133 -0
  22. package/dist/chunk-BXCPJJYM.js.map +1 -0
  23. package/dist/{chunk-ESP2FF52.js → chunk-EK3XCAAS.js} +2 -2
  24. package/dist/{chunk-IDUICCZY.js → chunk-F6WVM437.js} +3 -1
  25. package/dist/chunk-F6WVM437.js.map +1 -0
  26. package/dist/{chunk-TKL7RBEF.js → chunk-GEXP5IOF.js} +3 -3
  27. package/dist/{chunk-J7GHNTYK.js → chunk-K7SEEHKO.js} +3 -3
  28. package/dist/{chunk-NRDY6XO3.js → chunk-PMVWQBWS.js} +73 -17
  29. package/dist/chunk-PMVWQBWS.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-ZXWTOJXA.js → chunk-UB4TFAXJ.js} +38 -9
  37. package/dist/chunk-UB4TFAXJ.js.map +1 -0
  38. package/dist/{chunk-YPOG7WY4.js → chunk-UQIXZ3BA.js} +2 -2
  39. package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
  40. package/dist/chunk-W6WVRHJ6.js.map +1 -0
  41. package/dist/{chunk-E4F7KASE.js → chunk-WIJWIKAN.js} +3 -3
  42. package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
  43. package/dist/chunk-ZPSTA5PR.js.map +1 -0
  44. package/dist/{cleanup-H5QUWBWE.js → cleanup-OU2HFOOG.js} +11 -11
  45. package/dist/cli.js +107 -69
  46. package/dist/cli.js.map +1 -1
  47. package/dist/compile-ULNO5F7Q.js +57 -0
  48. package/dist/compile-ULNO5F7Q.js.map +1 -0
  49. package/dist/{contribute-VP73TPAL.js → contribute-T7ENST5N.js} +3 -3
  50. package/dist/{dev-server-H5FFXIVX.js → dev-server-4RCDJ5MU.js} +9 -9
  51. package/dist/{feedback-567ZH2O7.js → feedback-O4Q55SVS.js} +8 -8
  52. package/dist/{git-UHUNQZBA.js → git-FVMGBHC2.js} +3 -3
  53. package/dist/{ignite-VPP4PMF4.js → ignite-VHV65WEZ.js} +12 -8
  54. package/dist/ignite-VHV65WEZ.js.map +1 -0
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.js +14 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/{init-4ZR2XXZA.js → init-HB34Q5FH.js} +8 -7
  59. package/dist/lint-5JMCWE4Y.js +27 -0
  60. package/dist/lint-5JMCWE4Y.js.map +1 -0
  61. package/dist/{open-6HBQHPUL.js → open-WHVUYGPY.js} +9 -9
  62. package/dist/prompts/init-prompt.txt +108 -0
  63. package/dist/prompts/issue-prompt.txt +12 -12
  64. package/dist/{rebase-SRBOVC4M.js → rebase-5EY3Q6XP.js} +5 -5
  65. package/dist/{recap-X7FTTKPP.js → recap-VOOUXOGP.js} +5 -5
  66. package/dist/{run-5FU76FFE.js → run-NCRK5NPR.js} +9 -9
  67. package/dist/schema/settings.schema.json +8 -0
  68. package/dist/{shell-UQJDI36V.js → shell-SBLXVOVJ.js} +5 -5
  69. package/dist/{summary-MOKN7RM2.js → summary-CVFAMDOJ.js} +6 -6
  70. package/dist/test-3KIVXI6J.js +27 -0
  71. package/dist/test-3KIVXI6J.js.map +1 -0
  72. package/dist/{test-git-GB3B6QNT.js → test-git-ZB6AGGRW.js} +3 -3
  73. package/dist/{test-prefix-YQNNTCY3.js → test-prefix-FBGXKMPA.js} +3 -3
  74. package/package.json +2 -1
  75. package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
  76. package/dist/chunk-2ZPFJQ3B.js +0 -63
  77. package/dist/chunk-2ZPFJQ3B.js.map +0 -1
  78. package/dist/chunk-EBISESAP.js.map +0 -1
  79. package/dist/chunk-IDUICCZY.js.map +0 -1
  80. package/dist/chunk-K5G5SFWY.js.map +0 -1
  81. package/dist/chunk-LVLRMP7V.js.map +0 -1
  82. package/dist/chunk-N4ZJVATC.js.map +0 -1
  83. package/dist/chunk-NKRQNER7.js.map +0 -1
  84. package/dist/chunk-NRDY6XO3.js.map +0 -1
  85. package/dist/chunk-SHVB3EFE.js.map +0 -1
  86. package/dist/chunk-ZXWTOJXA.js.map +0 -1
  87. package/dist/ignite-VPP4PMF4.js.map +0 -1
  88. /package/dist/{ClaudeContextManager-PQ46VILL.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
  89. /package/dist/{ClaudeService-6OMO552H.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
  90. /package/dist/{LoomLauncher-ZHDTPKED.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
  91. /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
  92. /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
  93. /package/dist/{SettingsManager-CNYBGXDT.js.map → SettingsManager-35F5RUJH.js.map} +0 -0
  94. /package/dist/{chunk-FXJKNVZW.js.map → chunk-6U6VI4SZ.js.map} +0 -0
  95. /package/dist/{chunk-QPS6TZUW.js.map → chunk-7WANFUIK.js.map} +0 -0
  96. /package/dist/{chunk-ESP2FF52.js.map → chunk-EK3XCAAS.js.map} +0 -0
  97. /package/dist/{chunk-TKL7RBEF.js.map → chunk-GEXP5IOF.js.map} +0 -0
  98. /package/dist/{chunk-J7GHNTYK.js.map → chunk-K7SEEHKO.js.map} +0 -0
  99. /package/dist/{chunk-YPOG7WY4.js.map → chunk-UQIXZ3BA.js.map} +0 -0
  100. /package/dist/{chunk-E4F7KASE.js.map → chunk-WIJWIKAN.js.map} +0 -0
  101. /package/dist/{cleanup-H5QUWBWE.js.map → cleanup-OU2HFOOG.js.map} +0 -0
  102. /package/dist/{contribute-VP73TPAL.js.map → contribute-T7ENST5N.js.map} +0 -0
  103. /package/dist/{dev-server-H5FFXIVX.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
  104. /package/dist/{feedback-567ZH2O7.js.map → feedback-O4Q55SVS.js.map} +0 -0
  105. /package/dist/{git-UHUNQZBA.js.map → git-FVMGBHC2.js.map} +0 -0
  106. /package/dist/{init-4ZR2XXZA.js.map → init-HB34Q5FH.js.map} +0 -0
  107. /package/dist/{open-6HBQHPUL.js.map → open-WHVUYGPY.js.map} +0 -0
  108. /package/dist/{rebase-SRBOVC4M.js.map → rebase-5EY3Q6XP.js.map} +0 -0
  109. /package/dist/{recap-X7FTTKPP.js.map → recap-VOOUXOGP.js.map} +0 -0
  110. /package/dist/{run-5FU76FFE.js.map → run-NCRK5NPR.js.map} +0 -0
  111. /package/dist/{shell-UQJDI36V.js.map → shell-SBLXVOVJ.js.map} +0 -0
  112. /package/dist/{summary-MOKN7RM2.js.map → summary-CVFAMDOJ.js.map} +0 -0
  113. /package/dist/{test-git-GB3B6QNT.js.map → test-git-ZB6AGGRW.js.map} +0 -0
  114. /package/dist/{test-prefix-YQNNTCY3.js.map → test-prefix-FBGXKMPA.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,114 @@ 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
+
306
+ ### Copying Gitignored Files to Looms
307
+
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.
309
+
310
+ **Automatically copied:** Some gitignored files are always copied to looms without configuration:
311
+ - dotenv-flow files: `.env`, `.env.local`, `.env.development`, `.env.development.local`
312
+ - `.iloom/settings.local.json`
313
+ - `.claude/settings.local.json`
314
+
315
+ For other gitignored files, use `copyGitIgnoredPatterns` to specify glob patterns for files that should be copied from your main repo to each loom.
316
+
317
+ **When to use:**
318
+ - **Local databases:** SQLite files (`*.db`, `*.sqlite`) for local development
319
+ - **Test data:** Large test fixtures that are too big to commit to git
320
+ - **Sensitive files:** Configuration files with credentials that shouldn't be in version control
321
+
322
+ **.iloom/settings.json**
323
+
324
+ ```json
325
+ {
326
+ "copyGitIgnoredPatterns": [
327
+ "*.db",
328
+ "*.sqlite",
329
+ "data/**/*.json",
330
+ "{data,fixtures}/*.sql"
331
+ ]
332
+ }
333
+ ```
334
+
335
+ **Supported patterns:**
336
+ - `*.db` - Match files with .db extension in root
337
+ - `**/*.db` - Recursively match all .db files in any directory
338
+ - `data/**/*.sqlite` - Match .sqlite files anywhere under data/
339
+ - `{data,backup}/*.db` - Match .db files in either data/ or backup/
340
+ - `*.{db,sqlite}` - Match files with either .db or .sqlite extension
341
+
342
+ **Notes:**
343
+ - Files are copied from your main workspace to each loom during `il start`
344
+ - Files are NOT copied back during `il finish` (one-way copy only)
345
+ - The patterns use [fast-glob](https://github.com/mrmlnc/fast-glob) syntax
346
+
235
347
  ### Merge Behavior
236
348
 
237
349
  Control how `il finish` handles your work. Configure in `.iloom/settings.json`:
@@ -339,10 +451,10 @@ This is an early-stage product.
339
451
  **Project Support:**
340
452
 
341
453
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
342
-
454
+
343
455
  * ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
344
-
345
- * ⚠️ **Other Stacks:** Python/Go/Rust etc. can work via generic package.json scripts, but are not natively supported yet.
456
+
457
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
346
458
 
347
459
  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...
348
460
 
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeContextManager
4
- } from "./chunk-QPS6TZUW.js";
5
- import "./chunk-FXJKNVZW.js";
6
- import "./chunk-K5G5SFWY.js";
7
- import "./chunk-IDUICCZY.js";
4
+ } from "./chunk-7WANFUIK.js";
5
+ import "./chunk-6U6VI4SZ.js";
6
+ import "./chunk-W6WVRHJ6.js";
7
+ import "./chunk-F6WVM437.js";
8
8
  import "./chunk-AEIMYF4P.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import "./chunk-VT4PDUYT.js";
11
11
  export {
12
12
  ClaudeContextManager
13
13
  };
14
- //# sourceMappingURL=ClaudeContextManager-PQ46VILL.js.map
14
+ //# sourceMappingURL=ClaudeContextManager-6J2EB4QU.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-FXJKNVZW.js";
5
- import "./chunk-K5G5SFWY.js";
6
- import "./chunk-IDUICCZY.js";
4
+ } from "./chunk-6U6VI4SZ.js";
5
+ import "./chunk-W6WVRHJ6.js";
6
+ import "./chunk-F6WVM437.js";
7
7
  import "./chunk-AEIMYF4P.js";
8
8
  import "./chunk-6MLEBAYZ.js";
9
9
  import "./chunk-VT4PDUYT.js";
10
10
  export {
11
11
  ClaudeService
12
12
  };
13
- //# sourceMappingURL=ClaudeService-6OMO552H.js.map
13
+ //# sourceMappingURL=ClaudeService-O2PB22GX.js.map
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-O7VL5N6S.js";
5
5
  import {
6
6
  ClaudeContextManager
7
- } from "./chunk-QPS6TZUW.js";
8
- import "./chunk-FXJKNVZW.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";
13
- import "./chunk-IDUICCZY.js";
13
+ import "./chunk-F6WVM437.js";
14
14
  import {
15
15
  generateColorFromBranchName,
16
16
  hexToRgb
@@ -252,4 +252,4 @@ var LoomLauncher = class {
252
252
  export {
253
253
  LoomLauncher
254
254
  };
255
- //# sourceMappingURL=LoomLauncher-ZHDTPKED.js.map
255
+ //# sourceMappingURL=LoomLauncher-5LFM4LXB.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,114 @@ 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
+
306
+ ### Copying Gitignored Files to Looms
307
+
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.
309
+
310
+ **Automatically copied:** Some gitignored files are always copied to looms without configuration:
311
+ - dotenv-flow files: `.env`, `.env.local`, `.env.development`, `.env.development.local`
312
+ - `.iloom/settings.local.json`
313
+ - `.claude/settings.local.json`
314
+
315
+ For other gitignored files, use `copyGitIgnoredPatterns` to specify glob patterns for files that should be copied from your main repo to each loom.
316
+
317
+ **When to use:**
318
+ - **Local databases:** SQLite files (`*.db`, `*.sqlite`) for local development
319
+ - **Test data:** Large test fixtures that are too big to commit to git
320
+ - **Sensitive files:** Configuration files with credentials that shouldn't be in version control
321
+
322
+ **.iloom/settings.json**
323
+
324
+ ```json
325
+ {
326
+ "copyGitIgnoredPatterns": [
327
+ "*.db",
328
+ "*.sqlite",
329
+ "data/**/*.json",
330
+ "{data,fixtures}/*.sql"
331
+ ]
332
+ }
333
+ ```
334
+
335
+ **Supported patterns:**
336
+ - `*.db` - Match files with .db extension in root
337
+ - `**/*.db` - Recursively match all .db files in any directory
338
+ - `data/**/*.sqlite` - Match .sqlite files anywhere under data/
339
+ - `{data,backup}/*.db` - Match .db files in either data/ or backup/
340
+ - `*.{db,sqlite}` - Match files with either .db or .sqlite extension
341
+
342
+ **Notes:**
343
+ - Files are copied from your main workspace to each loom during `il start`
344
+ - Files are NOT copied back during `il finish` (one-way copy only)
345
+ - The patterns use [fast-glob](https://github.com/mrmlnc/fast-glob) syntax
346
+
235
347
  ### Merge Behavior
236
348
 
237
349
  Control how `il finish` handles your work. Configure in `.iloom/settings.json`:
@@ -339,10 +451,10 @@ This is an early-stage product.
339
451
  **Project Support:**
340
452
 
341
453
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
342
-
454
+
343
455
  * ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
344
-
345
- * ⚠️ **Other Stacks:** Python/Go/Rust etc. can work via generic package.json scripts, but are not natively supported yet.
456
+
457
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
346
458
 
347
459
  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...
348
460
 
@@ -14,7 +14,7 @@ import {
14
14
  WorkflowPermissionSchemaNoDefaults,
15
15
  WorkflowsSettingsSchema,
16
16
  WorkflowsSettingsSchemaNoDefaults
17
- } from "./chunk-IDUICCZY.js";
17
+ } from "./chunk-F6WVM437.js";
18
18
  import "./chunk-VT4PDUYT.js";
19
19
  export {
20
20
  AgentSettingsSchema,
@@ -32,4 +32,4 @@ export {
32
32
  WorkflowsSettingsSchema,
33
33
  WorkflowsSettingsSchemaNoDefaults
34
34
  };
35
- //# sourceMappingURL=SettingsManager-CNYBGXDT.js.map
35
+ //# sourceMappingURL=SettingsManager-35F5RUJH.js.map