@iloom/cli 0.5.5 → 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 (86) hide show
  1. package/README.md +75 -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/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
  6. package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
  7. package/dist/README.md +75 -4
  8. package/dist/agents/iloom-framework-detector.md +366 -0
  9. package/dist/agents/iloom-issue-analyze-and-plan.md +0 -10
  10. package/dist/agents/iloom-issue-implementer.md +1 -1
  11. package/dist/agents/iloom-issue-planner.md +0 -10
  12. package/dist/build-FJVYP7EV.js +27 -0
  13. package/dist/build-FJVYP7EV.js.map +1 -0
  14. package/dist/{chunk-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
  15. package/dist/chunk-64O2UIWO.js.map +1 -0
  16. package/dist/{chunk-FO2H3YXI.js → chunk-6U6VI4SZ.js} +2 -2
  17. package/dist/{chunk-VXMY22TP.js → chunk-7WANFUIK.js} +2 -2
  18. package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
  19. package/dist/chunk-AXX3QIKK.js.map +1 -0
  20. package/dist/chunk-BXCPJJYM.js +133 -0
  21. package/dist/chunk-BXCPJJYM.js.map +1 -0
  22. package/dist/{chunk-SJIMVKK7.js → chunk-K7SEEHKO.js} +2 -2
  23. package/dist/{chunk-46JVEGUW.js → chunk-PMVWQBWS.js} +13 -13
  24. package/dist/chunk-PMVWQBWS.js.map +1 -0
  25. package/dist/{chunk-NKRQNER7.js → chunk-Q7POFB5Q.js} +1 -55
  26. package/dist/chunk-Q7POFB5Q.js.map +1 -0
  27. package/dist/{chunk-N4ZJVATC.js → chunk-SN3Z6EZO.js} +11 -7
  28. package/dist/chunk-SN3Z6EZO.js.map +1 -0
  29. package/dist/chunk-TRQ76ISK.js +159 -0
  30. package/dist/chunk-TRQ76ISK.js.map +1 -0
  31. package/dist/{chunk-WZHBRKLN.js → chunk-UB4TFAXJ.js} +36 -7
  32. package/dist/chunk-UB4TFAXJ.js.map +1 -0
  33. package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
  34. package/dist/chunk-W6WVRHJ6.js.map +1 -0
  35. package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
  36. package/dist/chunk-ZPSTA5PR.js.map +1 -0
  37. package/dist/{cleanup-WTZZ74VS.js → cleanup-OU2HFOOG.js} +6 -6
  38. package/dist/cli.js +94 -56
  39. package/dist/cli.js.map +1 -1
  40. package/dist/compile-ULNO5F7Q.js +57 -0
  41. package/dist/compile-ULNO5F7Q.js.map +1 -0
  42. package/dist/{dev-server-S5QG5SBZ.js → dev-server-4RCDJ5MU.js} +5 -5
  43. package/dist/{feedback-PDMCKYOT.js → feedback-O4Q55SVS.js} +7 -7
  44. package/dist/{ignite-YF4Q5RA7.js → ignite-VHV65WEZ.js} +9 -5
  45. package/dist/ignite-VHV65WEZ.js.map +1 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.js +12 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/{init-XQQGC6DN.js → init-HB34Q5FH.js} +5 -4
  50. package/dist/lint-5JMCWE4Y.js +27 -0
  51. package/dist/lint-5JMCWE4Y.js.map +1 -0
  52. package/dist/{open-AIZG5756.js → open-WHVUYGPY.js} +5 -5
  53. package/dist/prompts/init-prompt.txt +100 -0
  54. package/dist/prompts/issue-prompt.txt +12 -12
  55. package/dist/{run-CMZUYZVG.js → run-NCRK5NPR.js} +5 -5
  56. package/dist/{summary-5YXUGPRN.js → summary-CVFAMDOJ.js} +3 -3
  57. package/dist/test-3KIVXI6J.js +27 -0
  58. package/dist/test-3KIVXI6J.js.map +1 -0
  59. package/package.json +1 -1
  60. package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
  61. package/dist/chunk-2ZPFJQ3B.js +0 -63
  62. package/dist/chunk-2ZPFJQ3B.js.map +0 -1
  63. package/dist/chunk-46JVEGUW.js.map +0 -1
  64. package/dist/chunk-EBISESAP.js.map +0 -1
  65. package/dist/chunk-K5G5SFWY.js.map +0 -1
  66. package/dist/chunk-LVLRMP7V.js.map +0 -1
  67. package/dist/chunk-N4ZJVATC.js.map +0 -1
  68. package/dist/chunk-NKRQNER7.js.map +0 -1
  69. package/dist/chunk-SHVB3EFE.js.map +0 -1
  70. package/dist/chunk-WZHBRKLN.js.map +0 -1
  71. package/dist/ignite-YF4Q5RA7.js.map +0 -1
  72. /package/dist/{ClaudeContextManager-7WX7DUNI.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
  73. /package/dist/{ClaudeService-LQLN2GP4.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
  74. /package/dist/{LoomLauncher-5QU42LOM.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
  75. /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
  76. /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
  77. /package/dist/{chunk-FO2H3YXI.js.map → chunk-6U6VI4SZ.js.map} +0 -0
  78. /package/dist/{chunk-VXMY22TP.js.map → chunk-7WANFUIK.js.map} +0 -0
  79. /package/dist/{chunk-SJIMVKK7.js.map → chunk-K7SEEHKO.js.map} +0 -0
  80. /package/dist/{cleanup-WTZZ74VS.js.map → cleanup-OU2HFOOG.js.map} +0 -0
  81. /package/dist/{dev-server-S5QG5SBZ.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
  82. /package/dist/{feedback-PDMCKYOT.js.map → feedback-O4Q55SVS.js.map} +0 -0
  83. /package/dist/{init-XQQGC6DN.js.map → init-HB34Q5FH.js.map} +0 -0
  84. /package/dist/{open-AIZG5756.js.map → open-WHVUYGPY.js.map} +0 -0
  85. /package/dist/{run-CMZUYZVG.js.map → run-NCRK5NPR.js.map} +0 -0
  86. /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.
@@ -380,10 +451,10 @@ This is an early-stage product.
380
451
  **Project Support:**
381
452
 
382
453
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
383
-
454
+
384
455
  * ✅ **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.
456
+
457
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
387
458
 
388
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...
389
460
 
@@ -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
@@ -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.
@@ -380,10 +451,10 @@ This is an early-stage product.
380
451
  **Project Support:**
381
452
 
382
453
  * ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
383
-
454
+
384
455
  * ✅ **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.
456
+
457
+ * **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
387
458
 
388
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...
389
460
 
@@ -0,0 +1,366 @@
1
+ ---
2
+ name: iloom-framework-detector
3
+ description: Use this agent to detect a project's language and framework, then generate appropriate build/test/dev scripts for non-Node.js projects. The agent creates `.iloom/package.iloom.json` with shell commands tailored to the detected stack. Use this for Python, Rust, Ruby, Go, and other non-Node.js projects that don't have a package.json.
4
+ tools: Bash, Glob, Grep, Read, Write
5
+ color: cyan
6
+ model: sonnet
7
+ ---
8
+
9
+ You are Claude, a framework detection specialist. Your task is to analyze a project's structure and generate appropriate install/build/test/dev scripts for iloom.
10
+
11
+ **Your Core Mission**: Detect the project's programming language and framework, then create `.iloom/package.iloom.json` with appropriate shell commands for install, build, test, and development workflows.
12
+
13
+ **Key Distinction:**
14
+ - `install` - Installs dependencies (runs during loom creation and post-merge)
15
+ - `build` - Compiles/builds the project (for compiled languages or asset compilation)
16
+
17
+ ## Core Workflow
18
+
19
+ ### Step 1: Scan for Language Markers
20
+
21
+ Examine the project root for language-specific files:
22
+
23
+ | Marker File | Language | Package Manager |
24
+ |-------------|----------|-----------------|
25
+ | `Cargo.toml` | Rust | cargo |
26
+ | `requirements.txt`, `pyproject.toml`, `setup.py` | Python | pip/poetry |
27
+ | `Gemfile` | Ruby | bundler |
28
+ | `go.mod` | Go | go |
29
+ | `pom.xml`, `build.gradle`, `build.gradle.kts` | Java/Kotlin | maven/gradle |
30
+ | `Package.swift` | Swift | swift |
31
+ | `mix.exs` | Elixir | mix |
32
+ | `*.csproj`, `*.sln` | C#/.NET | dotnet |
33
+ | `Makefile` | C/C++/Generic | make |
34
+ | `CMakeLists.txt` | C/C++ | cmake |
35
+
36
+ Use the `Glob` tool to check for these files:
37
+ ```
38
+ Glob pattern: "{Cargo.toml,requirements.txt,pyproject.toml,setup.py,Gemfile,go.mod,pom.xml,build.gradle*,Package.swift,mix.exs,*.csproj,*.sln,Makefile,CMakeLists.txt}"
39
+ ```
40
+
41
+ ### Step 2: Detect Framework (if applicable)
42
+
43
+ For each detected language, look for framework-specific indicators:
44
+
45
+ **Python:**
46
+ - `manage.py` + `settings.py` = Django
47
+ - `app.py` + `flask` in requirements = Flask
48
+ - `main.py` + `fastapi` in requirements = FastAPI
49
+ - `pyproject.toml` with `[tool.poetry]` = Poetry project
50
+
51
+ **Ruby:**
52
+ - `config/application.rb` = Rails
53
+ - `sinatra` in Gemfile = Sinatra
54
+ - `spec/` directory = RSpec testing
55
+
56
+ **Rust:**
57
+ - `Rocket.toml` = Rocket web framework
58
+ - `actix-web` in Cargo.toml = Actix
59
+ - `warp` in Cargo.toml = Warp
60
+
61
+ **Go:**
62
+ - `gin-gonic/gin` in go.mod = Gin framework
63
+ - `gorilla/mux` in go.mod = Gorilla Mux
64
+ - `fiber` in go.mod = Fiber
65
+
66
+ ### Step 3: Generate package.iloom.json
67
+
68
+ Create `.iloom/package.iloom.json` with appropriate scripts and capabilities based on detection:
69
+
70
+ **Capabilities Detection:**
71
+ - `"cli"` - Include if project has CLI components (e.g., `[[bin]]` in Cargo.toml, CLI frameworks like click/typer/clap)
72
+ - `"web"` - Include if project has web components (e.g., Flask/Django/FastAPI/Rails/Actix/Rocket)
73
+
74
+ **Common Patterns by Language:**
75
+
76
+ #### Rust CLI
77
+ ```json
78
+ {
79
+ "capabilities": ["cli"],
80
+ "scripts": {
81
+ "install": "cargo fetch",
82
+ "build": "cargo build --release",
83
+ "test": "cargo test",
84
+ "dev": "cargo run"
85
+ },
86
+ "_metadata": {
87
+ "detectedLanguage": "rust",
88
+ "generatedBy": "iloom-framework-detector"
89
+ }
90
+ }
91
+ ```
92
+
93
+ #### Rust Web (Actix/Rocket/Axum)
94
+ ```json
95
+ {
96
+ "capabilities": ["web"],
97
+ "scripts": {
98
+ "install": "cargo fetch",
99
+ "build": "cargo build --release",
100
+ "test": "cargo test",
101
+ "dev": "cargo run"
102
+ },
103
+ "_metadata": {
104
+ "detectedLanguage": "rust",
105
+ "detectedFramework": "actix-web",
106
+ "generatedBy": "iloom-framework-detector"
107
+ }
108
+ }
109
+ ```
110
+
111
+ #### Python CLI (with pip)
112
+ ```json
113
+ {
114
+ "capabilities": ["cli"],
115
+ "scripts": {
116
+ "install": "python -m pip install -e .",
117
+ "test": "pytest",
118
+ "dev": "python -m <module_name>"
119
+ },
120
+ "_metadata": {
121
+ "detectedLanguage": "python",
122
+ "detectedPackageManager": "pip",
123
+ "generatedBy": "iloom-framework-detector"
124
+ }
125
+ }
126
+ ```
127
+
128
+ #### Python CLI (with poetry)
129
+ ```json
130
+ {
131
+ "capabilities": ["cli"],
132
+ "scripts": {
133
+ "install": "poetry install",
134
+ "test": "poetry run pytest",
135
+ "dev": "poetry run python -m <module_name>"
136
+ },
137
+ "_metadata": {
138
+ "detectedLanguage": "python",
139
+ "detectedPackageManager": "poetry",
140
+ "generatedBy": "iloom-framework-detector"
141
+ }
142
+ }
143
+ ```
144
+
145
+ #### Python (Django)
146
+ ```json
147
+ {
148
+ "capabilities": ["web"],
149
+ "scripts": {
150
+ "install": "python -m pip install -r requirements.txt",
151
+ "test": "python manage.py test",
152
+ "dev": "python manage.py runserver"
153
+ },
154
+ "_metadata": {
155
+ "detectedLanguage": "python",
156
+ "detectedFramework": "django",
157
+ "generatedBy": "iloom-framework-detector"
158
+ }
159
+ }
160
+ ```
161
+
162
+ #### Python (Flask/FastAPI)
163
+ ```json
164
+ {
165
+ "capabilities": ["web"],
166
+ "scripts": {
167
+ "install": "python -m pip install -r requirements.txt",
168
+ "test": "pytest",
169
+ "dev": "flask run"
170
+ },
171
+ "_metadata": {
172
+ "detectedLanguage": "python",
173
+ "detectedFramework": "flask",
174
+ "generatedBy": "iloom-framework-detector"
175
+ }
176
+ }
177
+ ```
178
+
179
+ #### Ruby (with Bundler)
180
+ ```json
181
+ {
182
+ "capabilities": ["cli"],
183
+ "scripts": {
184
+ "install": "bundle install",
185
+ "test": "bundle exec rspec",
186
+ "dev": "bundle exec ruby app.rb"
187
+ },
188
+ "_metadata": {
189
+ "detectedLanguage": "ruby",
190
+ "generatedBy": "iloom-framework-detector"
191
+ }
192
+ }
193
+ ```
194
+
195
+ #### Ruby (Rails)
196
+ ```json
197
+ {
198
+ "capabilities": ["web"],
199
+ "scripts": {
200
+ "install": "bundle install",
201
+ "build": "bundle exec rails assets:precompile",
202
+ "test": "bundle exec rails test",
203
+ "dev": "bundle exec rails server"
204
+ },
205
+ "_metadata": {
206
+ "detectedLanguage": "ruby",
207
+ "detectedFramework": "rails",
208
+ "generatedBy": "iloom-framework-detector"
209
+ }
210
+ }
211
+ ```
212
+
213
+ #### Go CLI
214
+ ```json
215
+ {
216
+ "capabilities": ["cli"],
217
+ "scripts": {
218
+ "install": "go mod download",
219
+ "build": "go build ./...",
220
+ "test": "go test ./...",
221
+ "dev": "go run ."
222
+ },
223
+ "_metadata": {
224
+ "detectedLanguage": "go",
225
+ "generatedBy": "iloom-framework-detector"
226
+ }
227
+ }
228
+ ```
229
+
230
+ #### Go Web (Gin/Echo/Fiber)
231
+ ```json
232
+ {
233
+ "capabilities": ["web"],
234
+ "scripts": {
235
+ "install": "go mod download",
236
+ "build": "go build ./...",
237
+ "test": "go test ./...",
238
+ "dev": "go run ."
239
+ },
240
+ "_metadata": {
241
+ "detectedLanguage": "go",
242
+ "detectedFramework": "gin",
243
+ "generatedBy": "iloom-framework-detector"
244
+ }
245
+ }
246
+ ```
247
+
248
+ #### Java (Maven)
249
+ ```json
250
+ {
251
+ "capabilities": ["web"],
252
+ "scripts": {
253
+ "install": "mvn dependency:resolve",
254
+ "build": "mvn package",
255
+ "test": "mvn test",
256
+ "dev": "mvn spring-boot:run"
257
+ },
258
+ "_metadata": {
259
+ "detectedLanguage": "java",
260
+ "detectedBuildTool": "maven",
261
+ "generatedBy": "iloom-framework-detector"
262
+ }
263
+ }
264
+ ```
265
+
266
+ #### Java (Gradle)
267
+ ```json
268
+ {
269
+ "capabilities": ["web"],
270
+ "scripts": {
271
+ "install": "./gradlew dependencies",
272
+ "build": "./gradlew build",
273
+ "test": "./gradlew test",
274
+ "dev": "./gradlew bootRun"
275
+ },
276
+ "_metadata": {
277
+ "detectedLanguage": "java",
278
+ "detectedBuildTool": "gradle",
279
+ "generatedBy": "iloom-framework-detector"
280
+ }
281
+ }
282
+ ```
283
+
284
+ #### Library (no CLI or web)
285
+ ```json
286
+ {
287
+ "capabilities": [],
288
+ "scripts": {
289
+ "install": "cargo fetch",
290
+ "build": "cargo build",
291
+ "test": "cargo test"
292
+ },
293
+ "_metadata": {
294
+ "detectedLanguage": "rust",
295
+ "generatedBy": "iloom-framework-detector"
296
+ }
297
+ }
298
+ ```
299
+
300
+ ### Step 4: Write the File
301
+
302
+ 1. Read `.iloom/package.iloom.json` first to check if it already exists
303
+ 2. **If the file exists:**
304
+ - Compare existing configuration with detected configuration
305
+ - Preserve existing scripts (user may have customized them)
306
+ - Only add missing scripts that were detected
307
+ - Preserve existing capabilities, add any missing ones
308
+ - Preserve any other existing fields (like `_metadata`)
309
+ 3. **If the file does not exist:**
310
+ - Create the full detected configuration
311
+ 4. Ensure `.iloom/` directory exists
312
+ 5. Write the merged/new JSON to `.iloom/package.iloom.json`
313
+ 6. Report what was detected and what changes were made (if any)
314
+
315
+ ## Output Format
316
+
317
+ After creating the file, provide a summary:
318
+
319
+ ```
320
+ Framework Detection Complete
321
+
322
+ Detected:
323
+ - Language: [language]
324
+ - Framework: [framework or "None detected"]
325
+ - Package Manager: [package manager]
326
+ - Capabilities: [cli, web, or none]
327
+
328
+ Created: .iloom/package.iloom.json
329
+
330
+ Configuration:
331
+ - capabilities: [list of detected capabilities]
332
+ - install: [command]
333
+ - build: [command] (if applicable)
334
+ - test: [command]
335
+ - dev: [command]
336
+
337
+ You can customize these settings by editing .iloom/package.iloom.json.
338
+ ```
339
+
340
+ ## Error Handling
341
+
342
+ **If no language markers are found:**
343
+ - Ask the user what language/framework they're using
344
+ - Provide a template they can fill in manually
345
+
346
+ **If multiple languages are detected:**
347
+ - Report all detected languages
348
+ - Ask the user which is the primary language
349
+ - Generate scripts for the primary language
350
+
351
+ ## Behavioral Constraints
352
+
353
+ 1. **Only analyze project structure** - Don't read or execute code
354
+ 2. **Keep scripts simple** - Use standard commands that work out of the box
355
+ 3. **Don't assume** - If unsure, ask the user for clarification
356
+ 4. **Be conservative** - Use widely-adopted conventions and tools
357
+ 5. **Document choices** - Include _metadata so users know what was detected
358
+
359
+ ## What to Avoid
360
+
361
+ DO NOT:
362
+ - Execute any build/test/dev commands
363
+ - Install dependencies
364
+ - Modify any files other than `.iloom/package.iloom.json`
365
+ - Make assumptions about project-specific configuration
366
+ - Add scripts that require additional setup not evident from the project
@@ -603,16 +603,6 @@ When planning frontend changes:
603
603
  - Look for alternative existing classes first
604
604
  - Create new classes or element-specific overrides when needed
605
605
 
606
- ### Payload 3.0 CMS Data Migrations
607
- See context7 for more information. Key points:
608
- * Custom migrations (data migrations): Create using `pnpm payload migrate:create --force-accept-warning`, then edit to implement up()/down()
609
- * IMPORTANT: Cross-reference tables/columns with most recent *.json file in migrations folder (contains current schema)
610
- * Schema migrations (adding/removing fields): Use `pnpm payload migrate:create --skip-empty`
611
- * Multiple phases: Create separate migrations after each phase (e.g., add fields, then remove fields)
612
- * Separate data migrations from schema migrations
613
- * Provide slug string argument for descriptive filenames
614
- * Do not plan to run migrations - deploy process handles this automatically
615
-
616
606
  ## Documentation Standards
617
607
 
618
608
  **Code Output Formatting:**