car-runtime 0.53.0 → 0.54.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.
- package/README.md +17 -0
- package/daemon-wrappers.js +6155 -0
- package/docs/CLI.md +366 -21
- package/docs/agent-ir-spec.md +34 -5
- package/index.d.ts +1076 -19
- package/index.js +45 -0
- package/install.js +16 -0
- package/package.json +3 -2
package/docs/CLI.md
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
> **Generated file — do not hand-edit below the task map.** Produced by
|
|
4
4
|
> `scripts/gen-cli-docs.sh` from `car --help` / `car help <command>` on car
|
|
5
|
-
> 0.
|
|
5
|
+
> 0.54.0 (2026-09-15). Every subcommand the installed binary reports is
|
|
6
6
|
> below; a new subcommand cannot ship without appearing here the next time
|
|
7
7
|
> this script runs. To regenerate: `bash scripts/gen-cli-docs.sh`.
|
|
8
8
|
>
|
|
9
|
-
>
|
|
9
|
+
> 73 top-level commands, 117 nested subcommands
|
|
10
10
|
> (one level deep) — counted from the live binary at generation time, not
|
|
11
11
|
> typed by hand.
|
|
12
12
|
|
|
13
13
|
## Finding your way around
|
|
14
14
|
|
|
15
|
-
`car` is one binary with
|
|
15
|
+
`car` is one binary with 73 subcommands spanning several different jobs:
|
|
16
16
|
running the built-in agent, coding, local model management, OS integrations,
|
|
17
17
|
and installing other people's agents on your machine. This map groups the
|
|
18
18
|
commands people actually reach for; the full alphabetical reference with every
|
|
@@ -162,7 +162,7 @@ commands on a cadence via launchd / cron / schtasks).
|
|
|
162
162
|
|
|
163
163
|
| Command | Description |
|
|
164
164
|
|---|---|
|
|
165
|
-
| [`car info`](#car-info) | Show runtime
|
|
165
|
+
| [`car info`](#car-info) | Show runtime and live machine state |
|
|
166
166
|
| [`car capabilities`](#car-capabilities) | Print the deterministic CAR capability manifest |
|
|
167
167
|
| [`car ui`](#car-ui) | Open the browser dashboard served by the daemon |
|
|
168
168
|
| [`car verify`](#car-verify) | Statically verify a proposal |
|
|
@@ -171,9 +171,11 @@ commands on a cadence via launchd / cron / schtasks).
|
|
|
171
171
|
| [`car replay`](#car-replay) | Replay an event journal and show reconstructed state |
|
|
172
172
|
| [`car run-cancel`](#car-run-cancel) | Cancel one active CAR run and print its deterministic durable receipt |
|
|
173
173
|
| [`car run-task`](#car-run-task) | Run a goal autonomously against stdio MCP tool servers, emitting a JSONL transcript. Headless entry point for external eval harnesses |
|
|
174
|
+
| [`car tools`](#car-tools) | Invoke CAR's built-in runtime tools directly, in-process and without a daemon |
|
|
174
175
|
| [`car code-task`](#car-code-task) | Run a coder session headlessly and IN THIS PROCESS: derive or accept an outcome contract, work in a git worktree until the runtime's own re-run of that contract is green, then deliver the result as a pull request |
|
|
175
176
|
| [`car coder-ab`](#car-coder-ab) | A/B-test CAR's coder against an external agent (Codex / Claude Code) over a corpus, and grow that corpus from git history — the productionized dogfooding loop (docs/proposals/coder-ab-dogfood.md) |
|
|
176
177
|
| [`car keys`](#car-keys) | Store cloud-provider API keys in the OS keychain, so a native-app user never sets an environment variable (docs/proposals/native-secrets-no-env.md). The key is read env-first, keychain-fallback by the runtime |
|
|
178
|
+
| [`car heal`](#car-heal) | Inspect and operate the daemon's self-healing REPAIR loop: it reads a configured issue tracker, runs a coder session, gates the result on a multi-model panel, and opens a pull request. It never merges |
|
|
177
179
|
| [`car selfheal`](#car-selfheal) | Inspect and operate the daemon's deterministic self-healing detector |
|
|
178
180
|
| [`car daemon`](#car-daemon) | Start the daemon server (delegates to car-server binary) |
|
|
179
181
|
| [`car models`](#car-models) | Manage local inference models |
|
|
@@ -189,6 +191,7 @@ commands on a cadence via launchd / cron / schtasks).
|
|
|
189
191
|
| [`car identity`](#car-identity) | Show or change the name your assistant answers to — in conversation, in the host apps, and as its voice wake word |
|
|
190
192
|
| [`car init`](#car-init) | Initialize a .car/ project directory for team-shared configuration |
|
|
191
193
|
| [`car doctor`](#car-doctor) | Diagnose (and optionally repair) a CAR install: corrupt model weights, unparseable `~/.car` state files, version skew, and leftover files from a previous install. Runs entirely against the local filesystem — no daemon required, so it works even when `car-server` won't start |
|
|
194
|
+
| [`car feedback`](#car-feedback) | Report a problem to Parslee. Captures a redacted diagnostic bundle (your description, the `car doctor` report, bounded log tails, and a version stamp) into the local outbox at `~/.car/feedback-outbox` — nothing is uploaded by this command; queued reports send when CAR can reach Parslee. Works with the daemon down, like `car doctor`. macOS-only in this release |
|
|
192
195
|
| [`car update`](#car-update) | Update the locally-installed `car` CLI and its sibling `car-server` daemon to the latest release (or `--version <X.Y.Z>`), in place — regardless of how they were installed. Reconciles the drift that otherwise builds up when one channel updates and another doesn't (e.g. CarHost.app auto-updates its bundled daemon via Sparkle but leaves the `/usr/local/bin/car` CLI behind). The npm/PyPI `car-runtime` client packages are separate — this command never touches them; `car doctor` reports which of your agents have drifted, and prints the exact command per environment. Both remedies pin: `npm install car-runtime@<version>` (`npm update` CANNOT cross a 0.x minor — npm reads `^0.41.0` as `>=0.41.0 <0.42.0`, so it is a no-op) and `<venv>/bin/python -m pip install -U car-runtime==<version>` (a bare `-U` can be silently defeated by the consumer's own pin, and the wrong interpreter installs into an environment that does not hold the stale wheel) |
|
|
193
196
|
| [`car purge`](#car-purge) | Remove this CAR install's own state under `~/.car` (config, logs, managed models, binaries) and reap any OS-level schedules CAR installed — for a clean slate before a reinstall. On macOS this also clears CarHost.app's user-level state and resets its privacy (TCC) permissions, so a reinstall really does re-run permission onboarding. NEVER touches the shared HuggingFace model cache (other tools use it); managed models are symlinks into it, so only the links are removed, not the multi-GB blobs. (To uninstall a single contributed agent instead, use `car uninstall <id>`.) |
|
|
194
197
|
| [`car code`](#car-code) | Built-in coding agent: state an intent, confirm the verifiable outcome contract, and CAR delivers it in an isolated git worktree — natively or via an installed frontier CLI. Results land on a `car/coder/<id>` branch after your approval; your checkout is never touched |
|
|
@@ -229,6 +232,7 @@ commands on a cadence via launchd / cron / schtasks).
|
|
|
229
232
|
| [`car uninstall`](#car-uninstall) | Uninstall a contributed agent (Parslee-ai/car#182 phase 4). Stops the running child if any, removes the manifest from `~/.car/agents/<id>/`, and reaps the legacy `agents.json` entry. Idempotent |
|
|
230
233
|
| [`car schedule`](#car-schedule) | Schedule commands to run on a cadence (launchd / cron / schtasks) |
|
|
231
234
|
| [`car registry`](#car-registry) | Registry tooling for the contributed-agents registry (Parslee-ai/car#182 phase 5): `digest` a manifest, or `validate` a registry directory (the CI gate run by Parslee-ai/car-agent-registry) |
|
|
235
|
+
| [`car fleet`](#car-fleet) | What every CAR instance you can reach can do — agents, capabilities and models across the fleet — and whether this machine takes coding subtasks farmed out by peers (`car fleet enroll`). Needs a running daemon |
|
|
232
236
|
| [`car publish`](#car-publish) | Publish a contributed agent to the registry (Parslee-ai/car#182 phase 5). Reads a local agent's `manifest.toml`, signs it for `--audience public` (ed25519 key at `$CAR_PUBLISH_KEY_PATH`), stages it at the versioned `agents/<namespace>/<name>/<version>/` path, updates `index.json` + the README catalog, re-runs the EXACT `car registry validate` CI gate locally, and opens a PR against the registry repo. Aborts (no PR) on a missing signing key or a validation failure |
|
|
233
237
|
| [`car help`](#car-help) | Print this message or the help of the given subcommand(s) |
|
|
234
238
|
|
|
@@ -241,11 +245,12 @@ Full `--help` output for every command, generated directly from the binary.
|
|
|
241
245
|
### car info
|
|
242
246
|
|
|
243
247
|
```text
|
|
244
|
-
Show runtime
|
|
248
|
+
Show runtime and live machine state
|
|
245
249
|
|
|
246
|
-
Usage: car info
|
|
250
|
+
Usage: car info [OPTIONS]
|
|
247
251
|
|
|
248
252
|
Options:
|
|
253
|
+
--json Emit machine-readable JSON
|
|
249
254
|
-h, --help Print help
|
|
250
255
|
```
|
|
251
256
|
|
|
@@ -257,9 +262,11 @@ Print the deterministic CAR capability manifest
|
|
|
257
262
|
Usage: car capabilities [OPTIONS]
|
|
258
263
|
|
|
259
264
|
Options:
|
|
260
|
-
--json
|
|
261
|
-
--md
|
|
262
|
-
|
|
265
|
+
--json Emit machine-readable JSON
|
|
266
|
+
--md Emit generated Markdown (the default)
|
|
267
|
+
--role <ROLE> Print exactly the daemon method names assigned to this caller role [possible
|
|
268
|
+
values: agent, owner, operator, host]
|
|
269
|
+
-h, --help Print help
|
|
263
270
|
```
|
|
264
271
|
|
|
265
272
|
### car ui
|
|
@@ -373,6 +380,37 @@ Options:
|
|
|
373
380
|
-h, --help Print help
|
|
374
381
|
```
|
|
375
382
|
|
|
383
|
+
### car tools
|
|
384
|
+
|
|
385
|
+
```text
|
|
386
|
+
Invoke CAR's built-in runtime tools directly, in-process and without a daemon
|
|
387
|
+
|
|
388
|
+
Usage: car tools <COMMAND>
|
|
389
|
+
|
|
390
|
+
Commands:
|
|
391
|
+
call Invoke one CAR built-in tool in this process; no daemon is contacted
|
|
392
|
+
help Print this message or the help of the given subcommand(s)
|
|
393
|
+
|
|
394
|
+
Options:
|
|
395
|
+
-h, --help Print help
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### car tools call
|
|
399
|
+
|
|
400
|
+
```text
|
|
401
|
+
Invoke one CAR built-in tool in this process; no daemon is contacted
|
|
402
|
+
|
|
403
|
+
Usage: car tools call [OPTIONS] <TOOL>
|
|
404
|
+
|
|
405
|
+
Arguments:
|
|
406
|
+
<TOOL> Built-in tool name (for example: calculate, read_file, or grep_files)
|
|
407
|
+
|
|
408
|
+
Options:
|
|
409
|
+
--params-file <PATH> Read the tool's JSON parameter object from this file
|
|
410
|
+
--params <JSON> Supply the tool's JSON parameter object inline
|
|
411
|
+
-h, --help Print help
|
|
412
|
+
```
|
|
413
|
+
|
|
376
414
|
### car code-task
|
|
377
415
|
|
|
378
416
|
```text
|
|
@@ -404,6 +442,9 @@ Options:
|
|
|
404
442
|
--pr-base <PR_BASE>
|
|
405
443
|
PR base branch. Defaults to the repo's default branch
|
|
406
444
|
|
|
445
|
+
--body-prefix <BODY_PREFIX>
|
|
446
|
+
Trusted caller-supplied text placed at the start of the pull-request body
|
|
447
|
+
|
|
407
448
|
--draft
|
|
408
449
|
Open the pull request as a draft
|
|
409
450
|
|
|
@@ -421,6 +462,10 @@ Options:
|
|
|
421
462
|
--max-iterations <MAX_ITERATIONS>
|
|
422
463
|
Override the coder config's iteration ceiling (default 8)
|
|
423
464
|
|
|
465
|
+
--browser
|
|
466
|
+
Expose the assistant's browser tools for this run. Off by default; calls remain
|
|
467
|
+
policy-gated and appear in the JSONL event stream
|
|
468
|
+
|
|
424
469
|
--max-session-wall-secs <MAX_SESSION_WALL_SECS>
|
|
425
470
|
Override the coder config's session wall clock (default 3600). 0 = unlimited
|
|
426
471
|
|
|
@@ -648,6 +693,54 @@ Options:
|
|
|
648
693
|
-h, --help Print help
|
|
649
694
|
```
|
|
650
695
|
|
|
696
|
+
### car heal
|
|
697
|
+
|
|
698
|
+
```text
|
|
699
|
+
Inspect and operate the daemon's self-healing REPAIR loop: it reads a configured issue tracker, runs
|
|
700
|
+
a coder session, gates the result on a multi-model panel, and opens a pull request. It never merges.
|
|
701
|
+
|
|
702
|
+
Configured in `<CAR_HOME>/heal.toml`; off by default, and an issue must carry an explicit opt-in
|
|
703
|
+
label. See `car selfheal` for the separate watch-only detector, which never writes.
|
|
704
|
+
|
|
705
|
+
Usage: car heal <COMMAND>
|
|
706
|
+
|
|
707
|
+
Commands:
|
|
708
|
+
status Show whether the loop is enabled — and if not, why — plus its targets, review panel, and
|
|
709
|
+
engine
|
|
710
|
+
run Run one sweep now instead of waiting for the cadence
|
|
711
|
+
help Print this message or the help of the given subcommand(s)
|
|
712
|
+
|
|
713
|
+
Options:
|
|
714
|
+
-h, --help
|
|
715
|
+
Print help (see a summary with '-h')
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
#### car heal status
|
|
719
|
+
|
|
720
|
+
```text
|
|
721
|
+
Show whether the loop is enabled — and if not, why — plus its targets, review panel, and engine
|
|
722
|
+
|
|
723
|
+
Usage: car heal status
|
|
724
|
+
|
|
725
|
+
Options:
|
|
726
|
+
-h, --help Print help
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
#### car heal run
|
|
730
|
+
|
|
731
|
+
```text
|
|
732
|
+
Run one sweep now instead of waiting for the cadence.
|
|
733
|
+
|
|
734
|
+
At most one item per configured target. This can run a real coder session and open a real pull
|
|
735
|
+
request. It never merges.
|
|
736
|
+
|
|
737
|
+
Usage: car heal run
|
|
738
|
+
|
|
739
|
+
Options:
|
|
740
|
+
-h, --help
|
|
741
|
+
Print help (see a summary with '-h')
|
|
742
|
+
```
|
|
743
|
+
|
|
651
744
|
### car selfheal
|
|
652
745
|
|
|
653
746
|
```text
|
|
@@ -660,7 +753,8 @@ Commands:
|
|
|
660
753
|
list List active detections, optionally filtered by kind, severity, or time
|
|
661
754
|
show Print the trusted local issue document for one detection
|
|
662
755
|
dismiss Dismiss one active detection by dedup key
|
|
663
|
-
|
|
756
|
+
fix Start one bounded coder round for an eligible recurring-tool key
|
|
757
|
+
run Run one deterministic detection tick and its auto-fix cadence hook now
|
|
664
758
|
help Print this message or the help of the given subcommand(s)
|
|
665
759
|
|
|
666
760
|
Options:
|
|
@@ -721,10 +815,24 @@ Options:
|
|
|
721
815
|
-h, --help Print help
|
|
722
816
|
```
|
|
723
817
|
|
|
818
|
+
#### car selfheal fix
|
|
819
|
+
|
|
820
|
+
```text
|
|
821
|
+
Start one bounded coder round for an eligible recurring-tool key
|
|
822
|
+
|
|
823
|
+
Usage: car selfheal fix <DEDUP_KEY>
|
|
824
|
+
|
|
825
|
+
Arguments:
|
|
826
|
+
<DEDUP_KEY> Detection SHA-256 dedup key
|
|
827
|
+
|
|
828
|
+
Options:
|
|
829
|
+
-h, --help Print help
|
|
830
|
+
```
|
|
831
|
+
|
|
724
832
|
#### car selfheal run
|
|
725
833
|
|
|
726
834
|
```text
|
|
727
|
-
Run one deterministic detection tick now
|
|
835
|
+
Run one deterministic detection tick and its auto-fix cadence hook now
|
|
728
836
|
|
|
729
837
|
Usage: car selfheal run
|
|
730
838
|
|
|
@@ -788,6 +896,8 @@ Options:
|
|
|
788
896
|
-c, --capability <CAPABILITY> Filter by capability (generate, embed, code, reasoning, etc.)
|
|
789
897
|
--provider <PROVIDER> Filter by provider (e.g., openai, qwen, google, vllm-mlx)
|
|
790
898
|
--local-only Only show local models
|
|
899
|
+
--all Show every row, including models that do not fit this machine and
|
|
900
|
+
deprecated ones (hidden by default), with a FIT column explaining why
|
|
791
901
|
-h, --help Print help
|
|
792
902
|
```
|
|
793
903
|
|
|
@@ -1392,6 +1502,25 @@ Options:
|
|
|
1392
1502
|
-h, --help Print help
|
|
1393
1503
|
```
|
|
1394
1504
|
|
|
1505
|
+
### car feedback
|
|
1506
|
+
|
|
1507
|
+
```text
|
|
1508
|
+
Report a problem to Parslee. Captures a redacted diagnostic bundle (your description, the `car
|
|
1509
|
+
doctor` report, bounded log tails, and a version stamp) into the local outbox at
|
|
1510
|
+
`~/.car/feedback-outbox` — nothing is uploaded by this command; queued reports send when CAR can
|
|
1511
|
+
reach Parslee. Works with the daemon down, like `car doctor`. macOS-only in this release
|
|
1512
|
+
|
|
1513
|
+
Usage: car feedback [OPTIONS]
|
|
1514
|
+
|
|
1515
|
+
Options:
|
|
1516
|
+
--description <DESCRIPTION> What went wrong (10–5000 characters). Prompts when omitted
|
|
1517
|
+
--list List your saved reports and their status in plain language
|
|
1518
|
+
--show <ID> Print exactly what a saved report will send (its redacted bundle)
|
|
1519
|
+
--export <ID|latest> <PATH> Save a report's redacted bundle to a file: `--export <ID|latest>
|
|
1520
|
+
<PATH>`
|
|
1521
|
+
-h, --help Print help
|
|
1522
|
+
```
|
|
1523
|
+
|
|
1395
1524
|
### car update
|
|
1396
1525
|
|
|
1397
1526
|
```text
|
|
@@ -1449,26 +1578,49 @@ in an isolated git worktree — natively or via an installed frontier CLI. Resul
|
|
|
1449
1578
|
Usage: car code [OPTIONS] [INTENT]...
|
|
1450
1579
|
|
|
1451
1580
|
Arguments:
|
|
1452
|
-
[INTENT]...
|
|
1581
|
+
[INTENT]...
|
|
1582
|
+
What to build or fix, in plain English
|
|
1453
1583
|
|
|
1454
1584
|
Options:
|
|
1455
1585
|
--repo <REPO>
|
|
1456
1586
|
Repository to work on. Relative paths (`.`, `../sibling`) resolve against your current
|
|
1457
1587
|
directory (default: `.`)
|
|
1588
|
+
|
|
1458
1589
|
--engine <ENGINE>
|
|
1459
|
-
Engine: auto | native | external[:agent_id] | foreman[:agent_id]
|
|
1460
|
-
to the external CLI in parallel worktrees behind a merge-verify gate; auto
|
|
1461
|
-
broad tasks
|
|
1590
|
+
Engine: `auto` | `native` | `external[:agent_id]` | `foreman[:agent_id]`. Foreman farms
|
|
1591
|
+
subtasks to the external CLI in parallel worktrees behind a merge-verify gate; auto
|
|
1592
|
+
prefers it for broad tasks
|
|
1593
|
+
|
|
1594
|
+
--distributed
|
|
1595
|
+
Spread a foreman run's subtasks across reachable CAR instances instead of this machine
|
|
1596
|
+
alone.
|
|
1597
|
+
|
|
1598
|
+
**Spends agent quota — on other machines too.** The merge-verify gate and delivery stay
|
|
1599
|
+
here: a peer returns a patch, this host gates it, so the run still ends in a pull request
|
|
1600
|
+
you approve. Requires `--engine foreman[:agent_id]`; any other engine runs locally and
|
|
1601
|
+
says so. See `car fleet peers` for who is reachable.
|
|
1602
|
+
|
|
1603
|
+
--worker <WORKERS>
|
|
1604
|
+
Restrict a distributed run to these instances. Repeatable; default is every instance that
|
|
1605
|
+
can serve this repository
|
|
1606
|
+
|
|
1462
1607
|
-y, --yes
|
|
1463
1608
|
Skip the interactive contract and merge prompts
|
|
1609
|
+
|
|
1464
1610
|
--max-iterations <MAX_ITERATIONS>
|
|
1465
1611
|
Max plan→edit→verify iterations before giving up
|
|
1612
|
+
|
|
1466
1613
|
--model <MODEL>
|
|
1467
1614
|
Pin the native loop's inference model for this session (e.g. `parslee/reasoning` for
|
|
1468
1615
|
gpt-5.5), overriding `~/.car/coder.toml`. Blank/omitted keeps the config default, then
|
|
1469
1616
|
adaptive routing
|
|
1617
|
+
|
|
1618
|
+
--browser
|
|
1619
|
+
Expose the assistant's browser tools to this coder session. Off by default; calls remain
|
|
1620
|
+
policy-gated and recorded in coder events
|
|
1621
|
+
|
|
1470
1622
|
-h, --help
|
|
1471
|
-
Print help
|
|
1623
|
+
Print help (see a summary with '-h')
|
|
1472
1624
|
```
|
|
1473
1625
|
|
|
1474
1626
|
### car board
|
|
@@ -1726,6 +1878,7 @@ Commands:
|
|
|
1726
1878
|
in-daemon
|
|
1727
1879
|
run Run a registered agent on an input
|
|
1728
1880
|
list List registered in-daemon agents
|
|
1881
|
+
where Show where a declarative or supervised agent's files live
|
|
1729
1882
|
external Show installed external agentic CLIs (Claude Code, Codex, Gemini): which binary each
|
|
1730
1883
|
resolved to, and whether it can actually run
|
|
1731
1884
|
help Print this message or the help of the given subcommand(s)
|
|
@@ -1737,16 +1890,29 @@ Options:
|
|
|
1737
1890
|
#### car agent new
|
|
1738
1891
|
|
|
1739
1892
|
```text
|
|
1740
|
-
Describe an agent in plain language; CAR builds, verifies, and registers it to run in-daemon
|
|
1893
|
+
Describe an agent in plain language; CAR builds, verifies, and registers it to run in-daemon.
|
|
1894
|
+
|
|
1895
|
+
CAR uses the complete description to generate the agent's identity, standing goal, and scenarios.
|
|
1896
|
+
Long descriptions get a bounded project directory name without truncating that build input.
|
|
1897
|
+
|
|
1898
|
+
The project's agent.json is committed build output. After approval, the daemon runs the separately
|
|
1899
|
+
registered copy in declagents.json; editing agent.json alone does not update the active agent.
|
|
1741
1900
|
|
|
1742
1901
|
Usage: car agent new [OPTIONS] [DESCRIPTION]...
|
|
1743
1902
|
|
|
1744
1903
|
Arguments:
|
|
1745
|
-
[DESCRIPTION]...
|
|
1904
|
+
[DESCRIPTION]...
|
|
1905
|
+
What the agent should do
|
|
1746
1906
|
|
|
1747
1907
|
Options:
|
|
1748
|
-
-y, --yes
|
|
1749
|
-
|
|
1908
|
+
-y, --yes
|
|
1909
|
+
Skip the interactive confirm/approve prompts
|
|
1910
|
+
|
|
1911
|
+
--json
|
|
1912
|
+
Emit one JSON object; requires --yes so prompts do not share stdout
|
|
1913
|
+
|
|
1914
|
+
-h, --help
|
|
1915
|
+
Print help (see a summary with '-h')
|
|
1750
1916
|
```
|
|
1751
1917
|
|
|
1752
1918
|
#### car agent run
|
|
@@ -1775,6 +1941,21 @@ Options:
|
|
|
1775
1941
|
-h, --help Print help
|
|
1776
1942
|
```
|
|
1777
1943
|
|
|
1944
|
+
#### car agent where
|
|
1945
|
+
|
|
1946
|
+
```text
|
|
1947
|
+
Show where a declarative or supervised agent's files live
|
|
1948
|
+
|
|
1949
|
+
Usage: car agent where [OPTIONS] <ID>
|
|
1950
|
+
|
|
1951
|
+
Arguments:
|
|
1952
|
+
<ID> The declarative or supervised agent id
|
|
1953
|
+
|
|
1954
|
+
Options:
|
|
1955
|
+
--json Emit a JSON object instead of labeled lines
|
|
1956
|
+
-h, --help Print help
|
|
1957
|
+
```
|
|
1958
|
+
|
|
1778
1959
|
#### car agent external
|
|
1779
1960
|
|
|
1780
1961
|
```text
|
|
@@ -1810,7 +1991,7 @@ Arguments:
|
|
|
1810
1991
|
|
|
1811
1992
|
Options:
|
|
1812
1993
|
-o, --output <OUTPUT>
|
|
1813
|
-
Where to write the workflow JSON (default:
|
|
1994
|
+
Where to write the workflow JSON (default: `~/.car/workflows/<id>.json`)
|
|
1814
1995
|
|
|
1815
1996
|
-u, --update <UPDATE>
|
|
1816
1997
|
Update this existing workflow file instead of creating a new one
|
|
@@ -2607,6 +2788,7 @@ Usage: car messages <COMMAND>
|
|
|
2607
2788
|
Commands:
|
|
2608
2789
|
services List Messages.app services/accounts
|
|
2609
2790
|
chats List recent Messages.app chats
|
|
2791
|
+
read Read Messages.app conversation rows, newest first
|
|
2610
2792
|
send Send a message. JSON payload on stdin matching Messages SendRequest
|
|
2611
2793
|
help Print this message or the help of the given subcommand(s)
|
|
2612
2794
|
|
|
@@ -2637,6 +2819,21 @@ Options:
|
|
|
2637
2819
|
-h, --help Print help
|
|
2638
2820
|
```
|
|
2639
2821
|
|
|
2822
|
+
#### car messages read
|
|
2823
|
+
|
|
2824
|
+
```text
|
|
2825
|
+
Read Messages.app conversation rows, newest first
|
|
2826
|
+
|
|
2827
|
+
Usage: car messages read [OPTIONS]
|
|
2828
|
+
|
|
2829
|
+
Options:
|
|
2830
|
+
--chats <CHATS> Optional comma-separated chat GUIDs from `car messages chats`
|
|
2831
|
+
--since <SINCE> Only messages at or after this RFC3339 instant
|
|
2832
|
+
--limit <LIMIT> [default: 50]
|
|
2833
|
+
--include-body Include decoded message bodies inline (bounded per message)
|
|
2834
|
+
-h, --help Print help
|
|
2835
|
+
```
|
|
2836
|
+
|
|
2640
2837
|
#### car messages send
|
|
2641
2838
|
|
|
2642
2839
|
```text
|
|
@@ -3214,6 +3411,154 @@ Options:
|
|
|
3214
3411
|
-h, --help Print help
|
|
3215
3412
|
```
|
|
3216
3413
|
|
|
3414
|
+
### car fleet
|
|
3415
|
+
|
|
3416
|
+
```text
|
|
3417
|
+
What every CAR instance you can reach can do — agents, capabilities and models across the fleet —
|
|
3418
|
+
and whether this machine takes coding subtasks farmed out by peers (`car fleet enroll`). Needs a
|
|
3419
|
+
running daemon
|
|
3420
|
+
|
|
3421
|
+
Usage: car fleet <COMMAND>
|
|
3422
|
+
|
|
3423
|
+
Commands:
|
|
3424
|
+
show Every agent, capability, and model across this daemon and every CAR instance it can
|
|
3425
|
+
reach
|
|
3426
|
+
worker Show whether this machine takes coding subtasks farmed out by peers
|
|
3427
|
+
enroll Enroll this machine as a fleet worker for the named repositories
|
|
3428
|
+
withdraw Stop taking work from peers. Keeps the repository list for next time
|
|
3429
|
+
run Run one coding goal across the fleet: decompose it, place the independent subtasks on
|
|
3430
|
+
the instances that have this repository, and gate the reassembly **here**
|
|
3431
|
+
help Print this message or the help of the given subcommand(s)
|
|
3432
|
+
|
|
3433
|
+
Options:
|
|
3434
|
+
-h, --help Print help
|
|
3435
|
+
```
|
|
3436
|
+
|
|
3437
|
+
#### car fleet show
|
|
3438
|
+
|
|
3439
|
+
```text
|
|
3440
|
+
Every agent, capability, and model across this daemon and every CAR instance it can reach
|
|
3441
|
+
|
|
3442
|
+
Usage: car fleet show [OPTIONS]
|
|
3443
|
+
|
|
3444
|
+
Options:
|
|
3445
|
+
--json Print the raw `FleetComposite` JSON instead of the summary
|
|
3446
|
+
--local Only this instance — skip the network entirely
|
|
3447
|
+
--timeout-ms <TIMEOUT_MS> Per-peer deadline in milliseconds (default 10000)
|
|
3448
|
+
-h, --help Print help
|
|
3449
|
+
```
|
|
3450
|
+
|
|
3451
|
+
#### car fleet worker
|
|
3452
|
+
|
|
3453
|
+
```text
|
|
3454
|
+
Show whether this machine takes coding subtasks farmed out by peers
|
|
3455
|
+
|
|
3456
|
+
Usage: car fleet worker
|
|
3457
|
+
|
|
3458
|
+
Options:
|
|
3459
|
+
-h, --help Print help
|
|
3460
|
+
```
|
|
3461
|
+
|
|
3462
|
+
#### car fleet enroll
|
|
3463
|
+
|
|
3464
|
+
```text
|
|
3465
|
+
Enroll this machine as a fleet worker for the named repositories.
|
|
3466
|
+
|
|
3467
|
+
A real grant: a trusted peer may then run a coding CLI against those checkouts. Peers are already
|
|
3468
|
+
limited to CAR daemons whose key this host trusts, every dispatch is audited in
|
|
3469
|
+
`~/.car/fleet-work.jsonl`, and a dispatch for any other repository is declined.
|
|
3470
|
+
|
|
3471
|
+
Usage: car fleet enroll [OPTIONS] --repo <REPOS>
|
|
3472
|
+
|
|
3473
|
+
Options:
|
|
3474
|
+
--repo <REPOS>
|
|
3475
|
+
Repository checkout to serve. Repeatable; replaces the current list
|
|
3476
|
+
|
|
3477
|
+
--max-parallel <MAX_PARALLEL>
|
|
3478
|
+
Subtasks peers may run here at once (default 2). Concurrency, not spend — see
|
|
3479
|
+
`--dispatches-per-hour` for the budget
|
|
3480
|
+
|
|
3481
|
+
--dispatches-per-hour <DISPATCHES_PER_HOUR>
|
|
3482
|
+
Subtasks ONE peer may start here per hour (default 60). A peer that dispatches serially
|
|
3483
|
+
never hits `--max-parallel` and can still drain this machine's coding-CLI quota; this is
|
|
3484
|
+
what stops that
|
|
3485
|
+
|
|
3486
|
+
--max-subtask-secs <MAX_SUBTASK_SECS>
|
|
3487
|
+
Longest a peer's subtask may occupy this machine (default 1800s). The sender proposes a
|
|
3488
|
+
timeout; this is the ceiling it is clamped to
|
|
3489
|
+
|
|
3490
|
+
--allow-tool <ALLOWED_TOOLS>
|
|
3491
|
+
Tools a peer's coding CLI may use here, intersected with whatever the dispatch asks for.
|
|
3492
|
+
Repeatable. Unset adds no restriction
|
|
3493
|
+
|
|
3494
|
+
--runner
|
|
3495
|
+
Enroll as a **runner**: a machine that is not a person's desk.
|
|
3496
|
+
|
|
3497
|
+
Instead of declining a base commit it does not hold, it fetches from its own remote and
|
|
3498
|
+
serves the subtask. That is what makes a pool useful — a runner tracking `origin` always
|
|
3499
|
+
has the commit, where a laptop on an unpushed branch declines every dispatch. Off for a
|
|
3500
|
+
laptop, where a peer should not cause a fetch in a repository someone is working in.
|
|
3501
|
+
|
|
3502
|
+
--fetch-remote <FETCH_REMOTE>
|
|
3503
|
+
Remote a runner fetches from. Defaults to `origin`
|
|
3504
|
+
|
|
3505
|
+
-h, --help
|
|
3506
|
+
Print help (see a summary with '-h')
|
|
3507
|
+
```
|
|
3508
|
+
|
|
3509
|
+
#### car fleet withdraw
|
|
3510
|
+
|
|
3511
|
+
```text
|
|
3512
|
+
Stop taking work from peers. Keeps the repository list for next time
|
|
3513
|
+
|
|
3514
|
+
Usage: car fleet withdraw
|
|
3515
|
+
|
|
3516
|
+
Options:
|
|
3517
|
+
-h, --help Print help
|
|
3518
|
+
```
|
|
3519
|
+
|
|
3520
|
+
#### car fleet run
|
|
3521
|
+
|
|
3522
|
+
```text
|
|
3523
|
+
Run one coding goal across the fleet: decompose it, place the independent subtasks on the instances
|
|
3524
|
+
that have this repository, and gate the reassembly **here**.
|
|
3525
|
+
|
|
3526
|
+
Peers edit their own worktrees and return patches; this machine applies them and runs the
|
|
3527
|
+
merge-verify gate, so a peer can never widen what gets accepted. This machine is always in the pool,
|
|
3528
|
+
so a run whose peers all decline still completes. **Spends agent quota — on other machines too.**
|
|
3529
|
+
|
|
3530
|
+
Usage: car fleet run [OPTIONS] <GOAL>
|
|
3531
|
+
|
|
3532
|
+
Arguments:
|
|
3533
|
+
<GOAL>
|
|
3534
|
+
What to build
|
|
3535
|
+
|
|
3536
|
+
Options:
|
|
3537
|
+
--repo <REPO>
|
|
3538
|
+
Repository to work in. Defaults to the daemon's working directory
|
|
3539
|
+
|
|
3540
|
+
--adapter <ADAPTER>
|
|
3541
|
+
Coding CLI to ask for (`claude-code`, `codex`, `gemini`)
|
|
3542
|
+
|
|
3543
|
+
--verify <VERIFY>
|
|
3544
|
+
Per-subtask regression check — "does this one change still build?". A goal-level test
|
|
3545
|
+
belongs on `--union-verify`, not here: a subtask implements only part of the goal, so a
|
|
3546
|
+
goal test would reject every one of them
|
|
3547
|
+
|
|
3548
|
+
--union-verify <UNION_VERIFY>
|
|
3549
|
+
Check the *integrated* result must pass. Falls back to `--verify`
|
|
3550
|
+
|
|
3551
|
+
--worker <WORKERS>
|
|
3552
|
+
Restrict placement to these instances. Repeatable; default is every instance that reports
|
|
3553
|
+
it can serve this repository
|
|
3554
|
+
|
|
3555
|
+
--json
|
|
3556
|
+
Print the raw run report JSON
|
|
3557
|
+
|
|
3558
|
+
-h, --help
|
|
3559
|
+
Print help (see a summary with '-h')
|
|
3560
|
+
```
|
|
3561
|
+
|
|
3217
3562
|
### car publish
|
|
3218
3563
|
|
|
3219
3564
|
```text
|
package/docs/agent-ir-spec.md
CHANGED
|
@@ -168,6 +168,24 @@ Snake-case enum. What happens when this action's tool returns an error or a prec
|
|
|
168
168
|
| `"retry"` | retry up to `max_retries` times before aborting |
|
|
169
169
|
| `"skip"` | mark this action skipped and continue with the rest |
|
|
170
170
|
|
|
171
|
+
### Tool failure classification
|
|
172
|
+
|
|
173
|
+
A tool executor may return a typed `ToolFailure` with classification
|
|
174
|
+
`"ordinary"` or `"terminal"`. This is evidence produced by the tool during
|
|
175
|
+
execution, not a fourth `FailureBehavior`:
|
|
176
|
+
|
|
177
|
+
- `"ordinary"` follows the action's declared failure behavior. Existing string
|
|
178
|
+
errors convert to this classification, so legacy errors keep their current
|
|
179
|
+
retry, skip, or abort behavior.
|
|
180
|
+
- `"terminal"` stops retrying immediately and aborts and rolls back the
|
|
181
|
+
proposal regardless of its declared failure behavior. The failed
|
|
182
|
+
`ActionResult` carries `"terminal": true`; the field is absent for all other
|
|
183
|
+
results and defaults to false when deserializing older results.
|
|
184
|
+
|
|
185
|
+
Terminality is strictly opt-in. CAR never infers it from words such as
|
|
186
|
+
"terminal" or "fatal" in an error message. This engine-level contract does not
|
|
187
|
+
halt a daemon session; session halting is a separate daemon-owned layer.
|
|
188
|
+
|
|
171
189
|
### Action lifecycle (informational)
|
|
172
190
|
|
|
173
191
|
The runtime tags each action with an `ActionStatus` as it moves through validation and execution:
|
|
@@ -333,12 +351,10 @@ Returned by `proposal.submit` (WebSocket), `executeProposal` (NAPI), `execute_pr
|
|
|
333
351
|
{
|
|
334
352
|
"action_id": "a1",
|
|
335
353
|
"status": "succeeded",
|
|
354
|
+
"rolled_back": true,
|
|
336
355
|
"output": { "deployed": true },
|
|
337
|
-
"error":
|
|
338
|
-
"state_changes": {
|
|
339
|
-
"deployed": { "op": "set", "value": true },
|
|
340
|
-
"obsolete_key": { "op": "delete" }
|
|
341
|
-
},
|
|
356
|
+
"error": "proposal aborted; state effects were rolled back; external effects may remain and were not undone",
|
|
357
|
+
"state_changes": {},
|
|
342
358
|
"duration_ms": 1230.0,
|
|
343
359
|
"timestamp": "2026-05-02T12:00:01Z"
|
|
344
360
|
}
|
|
@@ -349,6 +365,19 @@ Returned by `proposal.submit` (WebSocket), `executeProposal` (NAPI), `execute_pr
|
|
|
349
365
|
|
|
350
366
|
`status` is one of: `"proposed"`, `"validated"`, `"rejected"`, `"executing"`, `"succeeded"`, `"failed"`, `"skipped"`.
|
|
351
367
|
|
|
368
|
+
A failed action includes `"terminal": true` only when its tool returned
|
|
369
|
+
`ToolFailureClassification::Terminal`. The field is omitted otherwise. A
|
|
370
|
+
terminal result means the engine stopped retries and aborted this proposal; it
|
|
371
|
+
does not by itself describe daemon session state.
|
|
372
|
+
|
|
373
|
+
`rolled_back` is an independent commit marker. A successful action in an
|
|
374
|
+
aborted proposal remains `status: "succeeded"` because it executed, while
|
|
375
|
+
`rolled_back: true` reports that the enclosing state transaction was restored.
|
|
376
|
+
Its `state_changes` are empty and `error` may carry the warning that external
|
|
377
|
+
effects can remain. Consumers must use `rolled_back`, never compare that warning
|
|
378
|
+
text. The field defaults to `false` when absent and false values are omitted from
|
|
379
|
+
the serialized response for compatibility with older readers.
|
|
380
|
+
|
|
352
381
|
Each `state_changes` value is a tagged `StateMutation`: `{"op":"set","value":…}`
|
|
353
382
|
sets the key (including explicitly setting it to JSON `null`), while
|
|
354
383
|
`{"op":"delete"}` removes it. Rust consumers can encode and decode that stable
|