@compozy/cli 0.2.8 → 0.2.10

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 (2) hide show
  1. package/README.md +58 -22
  2. package/package.json +16 -16
package/README.md CHANGED
@@ -92,6 +92,7 @@ Execution runtimes are separate from skill installation. To run `compozy exec`,
92
92
  | Claude Agent | `claude` | `claude-agent-acp` |
93
93
  | Codex CLI | `codex` | `codex-acp` |
94
94
  | GitHub Copilot CLI | `copilot` | `copilot --acp` |
95
+ | Devin CLI | `devin` | `devin acp` |
95
96
  | Cursor | `cursor-agent` | `cursor-agent acp` |
96
97
  | Droid | `droid` | `droid exec --output-format acp` |
97
98
  | OpenCode | `opencode` | `opencode acp` |
@@ -118,7 +119,7 @@ Task and review issue files use YAML frontmatter for parseable metadata such as
118
119
  - `compozy daemon start|status|stop` manages the home-scoped daemon lifecycle. `daemon start` is idempotent, and task/review/exec commands auto-start the daemon when needed.
119
120
  - `compozy workspaces list|show|register|unregister|resolve` exposes the daemon workspace registry. Workspaces are also lazily registered when you run daemon-backed commands inside them.
120
121
  - `compozy tasks run <slug>` is the canonical single-workflow runner. In interactive terminals it attaches to the TUI by default; in non-interactive environments it falls back to streaming. Use `--ui`, `--stream`, `--detach`, or `--attach` to override that behavior.
121
- - `compozy tasks run --multiple alpha,beta` starts one daemon-owned queue for several task workflows. Use `tasks run --multiple` when the same flags and runtime defaults should apply to an ordered batch; keep using `tasks run <slug>` for one workflow or scripts that expect one run ID per invocation.
122
+ - `compozy tasks run --multiple alpha,beta` starts one daemon-owned queue for several task workflows. Use `tasks run --multiple` when the same flags and runtime defaults should apply to an ordered batch; keep using `tasks run <slug>` for one workflow or scripts that expect one run ID per invocation. Add `--parallel` to run the batch concurrently — each child runs in its own isolated git worktree, bounded by `--parallel-limit` (default `2`).
122
123
  - Independent `compozy tasks run` invocations from different workspaces run concurrently on the shared home-scoped daemon. When another workspace already has an active run, the CLI prints a warning with the busy workspace and run ID before starting the new run.
123
124
  - `compozy runs attach <run-id>` restores the interactive TUI for an existing daemon-managed run, while `compozy runs watch <run-id>` streams textual observation from the same snapshot-plus-stream transport.
124
125
  - `compozy reviews fetch|list|show|fix` is the canonical review command family.
@@ -176,6 +177,7 @@ types = ["frontend", "backend", "docs", "test", "infra", "refactor", "chore", "b
176
177
  [tasks.run]
177
178
  include_completed = false
178
179
  run_multiple_mode = "enqueued"
180
+ run_multiple_parallel_limit = 2
179
181
 
180
182
  [exec]
181
183
  output_format = "text"
@@ -195,7 +197,7 @@ Supported sections:
195
197
  - `[defaults]` for shared execution defaults such as `ide`, `model`, `reasoning_effort`, `access_mode`, `timeout`, `tail_lines`, `add_dirs`, `auto_commit`, `max_retries`, and `retry_backoff_multiplier`
196
198
  - `[exec]` for `output_format` plus exec-specific runtime overrides such as `ide`, `model`, `reasoning_effort`, `access_mode`, `timeout`, `tail_lines`, `add_dirs`, `max_retries`, and `retry_backoff_multiplier`
197
199
  - `[tasks]` for the allowed task `type` list used by `cy-create-tasks` and `compozy tasks validate`
198
- - `[tasks.run]` for workflow-run defaults used by `compozy tasks run`, such as `include_completed` and `run_multiple_mode`
200
+ - `[tasks.run]` for workflow-run defaults used by `compozy tasks run`, such as `include_completed`, `run_multiple_mode`, and `run_multiple_parallel_limit`
199
201
  - `[fix_reviews]` for `concurrent`, `batch_size`, and `include_resolved`
200
202
  - `[fetch_reviews]` for `provider` and `nitpicks` (controls CodeRabbit review-body comments; default is enabled when unset)
201
203
  - `[sound]` for optional run-completion audio presets or absolute file paths
@@ -206,8 +208,9 @@ Notes:
206
208
  - `.compozy/tasks` remains the fixed workflow root in this version; the config file does not change the workflow root path.
207
209
  - Unknown keys and invalid value types are rejected during config loading.
208
210
  - Relative `add_dirs` are resolved against the owning config scope: the user home directory for `~/.compozy/config.toml` and the workspace root for `.compozy/config.toml`.
209
- - `[tasks.run] run_multiple_mode` controls `tasks run --multiple` scheduling. When unset, the built-in default is `"enqueued"`.
210
- - `run_multiple_mode = "parallel"` is accepted in V1 for forward-compatible config, but Compozy prints a V2 worktree-isolation fallback message and runs the queue in enqueued order. Real parallel multi-run execution waits for git worktree isolation.
211
+ - `[tasks.run] run_multiple_mode` controls `tasks run --multiple` scheduling. Valid values are `"enqueued"` and `"parallel"`; when unset, the built-in default is `"enqueued"`.
212
+ - `run_multiple_mode = "parallel"` runs the batch concurrently, with each child in its own isolated git worktree. The CLI `--parallel` flag overrides this config value for a single invocation.
213
+ - `[tasks.run] run_multiple_parallel_limit` caps how many children run at once in parallel mode. It must be a positive integer and defaults to `2`. The CLI `--parallel-limit <n>` flag overrides it for a single invocation. The limit has no effect in enqueued mode, which always runs one child at a time.
211
214
  - `max_retries` applies to execution-stage ACP failures and inactivity timeouts for `compozy exec`, `compozy tasks run`, and `compozy reviews fix`.
212
215
  - Built-in CLI defaults retry timed-out or transient ACP failures twice; set `max_retries = 0` or pass `--max-retries 0` to opt out.
213
216
  - `retry_backoff_multiplier` only increases the next attempt timeout; retries restart immediately and do not add a sleep delay.
@@ -400,11 +403,12 @@ Generated task files use task schema v2 (`status`, `title`, `type`, `complexity`
400
403
  ```bash
401
404
  compozy tasks run user-auth --ide claude
402
405
  compozy tasks run --multiple user-auth,cleanup --ide claude
406
+ compozy tasks run --multiple user-auth,cleanup --parallel --parallel-limit 2
403
407
  ```
404
408
 
405
409
  Each pending task is processed sequentially through the shared daemon — the agent reads the spec, implements the code, validates it, and updates the task status. Use `--dry-run` to preview prompts without executing.
406
410
  `compozy tasks run` validates task metadata before execution. Use `--skip-validation` when validation already ran elsewhere, or `--force` to continue after validation failures in non-interactive environments.
407
- Use `compozy tasks run --multiple <slug-a>,<slug-b>` when you want one command to enqueue several workflows with the same runtime flags. The input is one comma-separated slug list; `compozy tasks run <slug>` remains the single-workflow command.
411
+ Use `compozy tasks run --multiple <slug-a>,<slug-b>` when you want one command to enqueue several workflows with the same runtime flags. The input is one comma-separated slug list; `compozy tasks run <slug>` remains the single-workflow command. Add `--parallel` to run independent workflows concurrently in isolated git worktrees instead of one at a time.
408
412
 
409
413
  ### 7. Review
410
414
 
@@ -497,13 +501,14 @@ The `cy-workflow-memory` skill handles all of this automatically when referenced
497
501
  | Claude Code | `claude` |
498
502
  | Codex | `codex` |
499
503
  | GitHub Copilot | `copilot` |
504
+ | Devin CLI | `devin` |
500
505
  | Cursor | `cursor-agent` |
501
506
  | Droid | `droid` |
502
507
  | OpenCode | `opencode` |
503
508
  | Pi | `pi` |
504
509
  | Gemini | `gemini` |
505
510
 
506
- **Skill installation** (`compozy setup`) — 40+ agents and editors, including Claude Code, Codex, Cursor, Droid, OpenCode, Pi, Gemini CLI, GitHub Copilot, Windsurf, Amp, Continue, Goose, Roo Code, Augment, Kiro CLI, Cline, and many more. `compozy setup` installs core workflow skills plus any setup assets shipped by enabled extensions. Run `compozy setup` to see all detected agents on your system.
511
+ **Skill installation** (`compozy setup`) — 40+ agents and editors, including Claude Code, Codex, Cursor, Devin CLI, Droid, OpenCode, Pi, Gemini CLI, GitHub Copilot, Windsurf, Amp, Continue, Goose, Roo Code, Augment, Kiro CLI, Cline, and many more. `compozy setup` installs core workflow skills plus any setup assets shipped by enabled extensions. Run `compozy setup` to see all detected agents on your system.
507
512
 
508
513
  When installing to multiple agents, Compozy offers two modes:
509
514
 
@@ -611,19 +616,21 @@ compozy tasks run <slug> [flags]
611
616
 
612
617
  The CLI resolves workspace defaults locally, validates the task metadata, auto-starts the daemon when needed, and then starts the workflow through the daemon transport.
613
618
 
614
- | Flag | Default | Description |
615
- | --------------------- | ------- | ----------------------------------------------------------------------------------- |
616
- | `--name` | | Workflow slug (defaults to the positional slug) |
617
- | `--multiple` | | Comma-separated workflow slugs to run through one daemon-owned parent queue |
618
- | `--include-completed` | `false` | Re-run completed tasks |
619
- | `--recursive`, `-r` | `false` | Discover `task_NNN.md` files in nested subdirectories of the workflow root |
620
- | `--skip-validation` | `false` | Skip task metadata preflight; use only when validation already ran elsewhere |
621
- | `--force` | `false` | Continue after task metadata validation fails in non-interactive mode |
622
- | `--attach` | `auto` | Attach mode: `auto`, `ui`, `stream`, or `detach` |
623
- | `--ui` | `false` | Force interactive TUI attach mode |
624
- | `--stream` | `false` | Force textual stream attach mode |
625
- | `--detach` | `false` | Start the run without attaching a client |
626
- | `--task-runtime` | | Per-task runtime override rule (`type=...`, `id=...`, `ide=...`, `model=...`, etc.) |
619
+ | Flag | Default | Description |
620
+ | --------------------- | ------- | ------------------------------------------------------------------------------------------------ |
621
+ | `--name` | | Workflow slug (defaults to the positional slug) |
622
+ | `--multiple` | | Comma-separated workflow slugs to run through one daemon-owned parent queue |
623
+ | `--parallel` | `false` | Run `--multiple` workflows concurrently in isolated git worktrees (valid only with `--multiple`) |
624
+ | `--parallel-limit` | `2` | Max children started at once in `--parallel` mode; must be `> 0` (valid only with `--multiple`) |
625
+ | `--include-completed` | `false` | Re-run completed tasks |
626
+ | `--recursive`, `-r` | `false` | Discover `task_NNN.md` files in nested subdirectories of the workflow root |
627
+ | `--skip-validation` | `false` | Skip task metadata preflight; use only when validation already ran elsewhere |
628
+ | `--force` | `false` | Continue after task metadata validation fails in non-interactive mode |
629
+ | `--attach` | `auto` | Attach mode: `auto`, `ui`, `stream`, or `detach` |
630
+ | `--ui` | `false` | Force interactive TUI attach mode |
631
+ | `--stream` | `false` | Force textual stream attach mode |
632
+ | `--detach` | `false` | Start the run without attaching a client |
633
+ | `--task-runtime` | | Per-task runtime override rule (`type=...`, `id=...`, `ide=...`, `model=...`, etc.) |
627
634
 
628
635
  When `--recursive` is set, tasks are grouped by directory (root tasks first, then each subdirectory in alphabetical order, numerically within), and `_`/`.`-prefixed directories, `reviews-*` rounds, `adrs/`, and `memory/` are skipped. The same setting can be persisted as `[tasks.run] recursive = true` in workspace TOML or chosen from the interactive task-runtime form.
629
636
 
@@ -637,14 +644,43 @@ compozy tasks run --multiple alpha,beta --stream
637
644
  compozy tasks run --multiple alpha,beta --detach
638
645
  ```
639
646
 
640
- Scheduling is controlled by `.compozy/config.toml` or `~/.compozy/config.toml`:
647
+ Scheduling is controlled by the `--parallel`/`--parallel-limit` flags or by `.compozy/config.toml` / `~/.compozy/config.toml`:
641
648
 
642
649
  ```toml
643
650
  [tasks.run]
644
- run_multiple_mode = "enqueued"
651
+ run_multiple_mode = "enqueued" # "enqueued" (default) or "parallel"
652
+ run_multiple_parallel_limit = 2 # max concurrent children in parallel mode
653
+ ```
654
+
655
+ `"enqueued"` (the default) runs one child workflow at a time in the requested order. `"parallel"` runs independent children concurrently, each in its own isolated git worktree, bounded by the parallel limit:
656
+
657
+ ```bash
658
+ compozy tasks run --multiple alpha,beta --parallel
659
+ compozy tasks run --multiple alpha,beta --parallel --parallel-limit 3
660
+ ```
661
+
662
+ Resolution precedence:
663
+
664
+ - Mode: `--parallel` flag > `run_multiple_mode` config > `enqueued` default.
665
+ - Limit: `--parallel-limit <n>` flag > `run_multiple_parallel_limit` config > `2` default.
666
+
667
+ `--parallel` and `--parallel-limit` are valid only with `--multiple`, and the limit must be a positive integer; invalid combinations are rejected before the daemon is contacted.
668
+
669
+ **Worktree isolation.** In parallel mode the parent workspace must be on a named git branch. Compozy resolves the current branch and `HEAD` once, then creates one detached git worktree per child under `~/.compozy/state/worktrees/`. Each child runs with its workspace root and task directory remapped into that worktree, so concurrent agents get isolated working trees, indexes, and `HEAD`s while sharing the repository object store. Worktrees do **not** isolate shared runtime resources such as ports, credentials, provider rate limits, caches, or external services — treat parallel batches as genuinely independent tasks.
670
+
671
+ **Preservation and V1 non-goals.** Every child worktree is preserved for manual review regardless of child status. Compozy does not auto-merge, auto-push, branch, or delete worktrees, and it does not predict semantic conflicts; recombining results is a manual step. Each detached worktree records its base branch and commit so you can branch or merge from it yourself.
672
+
673
+ **Fail-late aggregation.** A child failure does not cancel its siblings. The parent reaches a terminal status only after every started child settles: `completed` when all children complete, or `failed` when any child fails, crashes, or cannot start (the parent error names the failed slugs). Canceling the parent cancels running children and marks not-started children canceled. In non-TUI runs the parent command exits non-zero when the aggregate status is failed, canceled, or crashed.
674
+
675
+ **Handoff output.** After the queue settles, `--stream` runs (and the UI-settled fallback) print a final handoff that lists each child in requested order so every preserved worktree is locatable:
676
+
677
+ ```text
678
+ task multi-run handoff:
679
+ alpha completed | run=child-alpha | worktree=~/.compozy/state/worktrees/<ws>/<parent>/01-alpha | branch=main
680
+ beta failed | run=child-beta | worktree=~/.compozy/state/worktrees/<ws>/<parent>/02-beta | boom
645
681
  ```
646
682
 
647
- `"enqueued"` is the default and runs one child workflow at a time in the requested order. `"parallel"` is also accepted in V1, but Compozy prints a fallback message and still runs the queue as `"enqueued"` until V2 adds git worktree-backed isolation for concurrent agents.
683
+ Missing run ids or worktree paths render as `-`. Streamed child events also carry `worktree=<path>`, and the TUI shows a worktree status line for the selected child.
648
684
 
649
685
  Cross-workspace runs are different from `--multiple` scheduling: the home-scoped daemon accepts separate `compozy tasks run` invocations from different workspaces concurrently and does not queue or reject the second run. Before starting a non-dry-run task workflow, the CLI checks daemon status; if active runs belong to another registered workspace, it warns with the busy workspace name/path and run ID, then proceeds. The warning is skipped when the daemon is idle, when the active run belongs to the same workspace, or when `--dry-run` is set.
650
686
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@compozy/cli",
3
3
  "type": "module",
4
- "version": "0.2.8",
4
+ "version": "0.2.10",
5
5
  "description": "Compozy CLI",
6
6
  "scripts": {
7
7
  "postinstall": "node install.js",
@@ -27,63 +27,63 @@
27
27
  },
28
28
  "archives": {
29
29
  "darwin-arm64": {
30
- "name": "compozy_0.2.8_darwin_arm64.tar.gz",
31
- "url": "https://github.com/compozy/compozy/releases/download/v0.2.8/compozy_0.2.8_darwin_arm64.tar.gz",
30
+ "name": "compozy_0.2.10_darwin_arm64.tar.gz",
31
+ "url": "https://github.com/compozy/compozy/releases/download/v0.2.10/compozy_0.2.10_darwin_arm64.tar.gz",
32
32
  "bins": [
33
33
  "compozy"
34
34
  ],
35
35
  "format": "tar.gz",
36
36
  "checksum": {
37
37
  "algorithm": "sha256",
38
- "digest": "93d816955a2e36c647654c63a9969b26d40dbcef6ea0f06edbd4959e7ffc308d"
38
+ "digest": "7bc8f1c350dabd229f5ffa3f40538b3a02b6cedd67c3329de76e7365e12054b4"
39
39
  }
40
40
  },
41
41
  "darwin-x64": {
42
- "name": "compozy_0.2.8_darwin_x86_64.tar.gz",
43
- "url": "https://github.com/compozy/compozy/releases/download/v0.2.8/compozy_0.2.8_darwin_x86_64.tar.gz",
42
+ "name": "compozy_0.2.10_darwin_x86_64.tar.gz",
43
+ "url": "https://github.com/compozy/compozy/releases/download/v0.2.10/compozy_0.2.10_darwin_x86_64.tar.gz",
44
44
  "bins": [
45
45
  "compozy"
46
46
  ],
47
47
  "format": "tar.gz",
48
48
  "checksum": {
49
49
  "algorithm": "sha256",
50
- "digest": "3e993ae11d51134a164f3c848eca63eec48c50312ae557660e96dfd33a5f858b"
50
+ "digest": "d912bc15cca91336bcb20bfb2a1693f8e8558327a1893648958d3b25677068c2"
51
51
  }
52
52
  },
53
53
  "linux-arm64": {
54
- "name": "compozy_0.2.8_linux_arm64.tar.gz",
55
- "url": "https://github.com/compozy/compozy/releases/download/v0.2.8/compozy_0.2.8_linux_arm64.tar.gz",
54
+ "name": "compozy_0.2.10_linux_arm64.tar.gz",
55
+ "url": "https://github.com/compozy/compozy/releases/download/v0.2.10/compozy_0.2.10_linux_arm64.tar.gz",
56
56
  "bins": [
57
57
  "compozy"
58
58
  ],
59
59
  "format": "tar.gz",
60
60
  "checksum": {
61
61
  "algorithm": "sha256",
62
- "digest": "5ed011f4b268ce227fc80d5dd60b7b4792bd6ebf6f8b22c10e4d51f134eff5fb"
62
+ "digest": "923321db294487f03d4939fd2a71041f40fd25bb30638c15a028a554955be95e"
63
63
  }
64
64
  },
65
65
  "linux-x64": {
66
- "name": "compozy_0.2.8_linux_x86_64.tar.gz",
67
- "url": "https://github.com/compozy/compozy/releases/download/v0.2.8/compozy_0.2.8_linux_x86_64.tar.gz",
66
+ "name": "compozy_0.2.10_linux_x86_64.tar.gz",
67
+ "url": "https://github.com/compozy/compozy/releases/download/v0.2.10/compozy_0.2.10_linux_x86_64.tar.gz",
68
68
  "bins": [
69
69
  "compozy"
70
70
  ],
71
71
  "format": "tar.gz",
72
72
  "checksum": {
73
73
  "algorithm": "sha256",
74
- "digest": "cfa985f848da21a9e1fad9290fdef9c7d33bff2385b3a290b3cd2fe9617f4408"
74
+ "digest": "2811f0aa961c994ac87d1b93e819543561c362f3fac88ee883c174aa04e627ae"
75
75
  }
76
76
  },
77
77
  "win32-x64": {
78
- "name": "compozy_0.2.8_windows_x86_64.zip",
79
- "url": "https://github.com/compozy/compozy/releases/download/v0.2.8/compozy_0.2.8_windows_x86_64.zip",
78
+ "name": "compozy_0.2.10_windows_x86_64.zip",
79
+ "url": "https://github.com/compozy/compozy/releases/download/v0.2.10/compozy_0.2.10_windows_x86_64.zip",
80
80
  "bins": [
81
81
  "compozy.exe"
82
82
  ],
83
83
  "format": "zip",
84
84
  "checksum": {
85
85
  "algorithm": "sha256",
86
- "digest": "5c7f4295298cc260df727b0f103f1a9f3bf844d10c4ac5343b03ae61be5b235f"
86
+ "digest": "c72bc6e2d242e6d740714846f9ca308b4d9bec2610a55f58d50db9a3939b56a8"
87
87
  }
88
88
  }
89
89
  }