car-runtime 0.52.0 → 0.53.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 +30 -0
- package/agent-loop.d.ts +30 -0
- package/agent-loop.js +578 -0
- package/agent-loop.mjs +4 -0
- package/docs/ASSISTANT.md +1 -0
- package/docs/CLI.md +257 -50
- package/docs/agent-ir-spec.md +40 -2
- package/index.d.ts +267 -11
- package/package.json +20 -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.52.1 (2026-09-06). 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
|
+
> 69 top-level commands, 106 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 69 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
|
|
@@ -163,15 +163,18 @@ commands on a cadence via launchd / cron / schtasks).
|
|
|
163
163
|
| Command | Description |
|
|
164
164
|
|---|---|
|
|
165
165
|
| [`car info`](#car-info) | Show runtime info |
|
|
166
|
+
| [`car capabilities`](#car-capabilities) | Print the deterministic CAR capability manifest |
|
|
166
167
|
| [`car ui`](#car-ui) | Open the browser dashboard served by the daemon |
|
|
167
168
|
| [`car verify`](#car-verify) | Statically verify a proposal |
|
|
168
169
|
| [`car simulate`](#car-simulate) | Simulate a proposal's state effects without executing |
|
|
169
170
|
| [`car optimize`](#car-optimize) | Optimize a proposal (remove phantom dependencies) |
|
|
170
171
|
| [`car replay`](#car-replay) | Replay an event journal and show reconstructed state |
|
|
172
|
+
| [`car run-cancel`](#car-run-cancel) | Cancel one active CAR run and print its deterministic durable receipt |
|
|
171
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 |
|
|
172
174
|
| [`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 |
|
|
173
175
|
| [`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) |
|
|
174
176
|
| [`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 |
|
|
177
|
+
| [`car selfheal`](#car-selfheal) | Inspect and operate the daemon's deterministic self-healing detector |
|
|
175
178
|
| [`car daemon`](#car-daemon) | Start the daemon server (delegates to car-server binary) |
|
|
176
179
|
| [`car models`](#car-models) | Manage local inference models |
|
|
177
180
|
| [`car setup`](#car-setup) | Set up the right model for this machine — detect hardware, recommend, and install. Run with no flags for an interactive walkthrough |
|
|
@@ -246,6 +249,19 @@ Options:
|
|
|
246
249
|
-h, --help Print help
|
|
247
250
|
```
|
|
248
251
|
|
|
252
|
+
### car capabilities
|
|
253
|
+
|
|
254
|
+
```text
|
|
255
|
+
Print the deterministic CAR capability manifest
|
|
256
|
+
|
|
257
|
+
Usage: car capabilities [OPTIONS]
|
|
258
|
+
|
|
259
|
+
Options:
|
|
260
|
+
--json Emit machine-readable JSON
|
|
261
|
+
--md Emit generated Markdown (the default)
|
|
262
|
+
-h, --help Print help
|
|
263
|
+
```
|
|
264
|
+
|
|
249
265
|
### car ui
|
|
250
266
|
|
|
251
267
|
```text
|
|
@@ -317,6 +333,23 @@ Options:
|
|
|
317
333
|
-h, --help Print help
|
|
318
334
|
```
|
|
319
335
|
|
|
336
|
+
### car run-cancel
|
|
337
|
+
|
|
338
|
+
```text
|
|
339
|
+
Cancel one active CAR run and print its deterministic durable receipt
|
|
340
|
+
|
|
341
|
+
Usage: car run-cancel [OPTIONS] --run-id <RUN_ID> --idempotency-key <IDEMPOTENCY_KEY> --reason
|
|
342
|
+
<REASON>
|
|
343
|
+
|
|
344
|
+
Options:
|
|
345
|
+
--run-id <RUN_ID>
|
|
346
|
+
--idempotency-key <IDEMPOTENCY_KEY>
|
|
347
|
+
--reason <REASON>
|
|
348
|
+
--url <URL> [default: ws://127.0.0.1:9100/]
|
|
349
|
+
--json
|
|
350
|
+
-h, --help Print help
|
|
351
|
+
```
|
|
352
|
+
|
|
320
353
|
### car run-task
|
|
321
354
|
|
|
322
355
|
```text
|
|
@@ -509,7 +542,7 @@ Usage: car coder-ab extract [OPTIONS] --out <OUT>
|
|
|
509
542
|
Options:
|
|
510
543
|
--repo <REPO>
|
|
511
544
|
Repo to mine (default: current dir)
|
|
512
|
-
|
|
545
|
+
|
|
513
546
|
[default: .]
|
|
514
547
|
|
|
515
548
|
--out <OUT>
|
|
@@ -520,7 +553,7 @@ Options:
|
|
|
520
553
|
rather than `python3 -m pytest -q`: `python3` does not exist on a standard Windows
|
|
521
554
|
python.org install, and `python` is often absent on macOS/Linux — pytest's console script
|
|
522
555
|
is the portable spelling
|
|
523
|
-
|
|
556
|
+
|
|
524
557
|
[default: "pytest -q"]
|
|
525
558
|
|
|
526
559
|
--path <PATH>
|
|
@@ -528,12 +561,12 @@ Options:
|
|
|
528
561
|
|
|
529
562
|
--max <MAX>
|
|
530
563
|
Limit to this many recent commits scanned
|
|
531
|
-
|
|
564
|
+
|
|
532
565
|
[default: 50]
|
|
533
566
|
|
|
534
567
|
--max-files <MAX_FILES>
|
|
535
568
|
Skip a commit whose changed-file count exceeds this (keep tasks small)
|
|
536
|
-
|
|
569
|
+
|
|
537
570
|
[default: 6]
|
|
538
571
|
|
|
539
572
|
--full-tree
|
|
@@ -543,7 +576,7 @@ Options:
|
|
|
543
576
|
|
|
544
577
|
--subject-filter <SUBJECT_FILTER>
|
|
545
578
|
Keep only commits whose subject contains this substring (e.g. `fix(`).
|
|
546
|
-
|
|
579
|
+
|
|
547
580
|
On a Rust repo this is close to required: a `feat` commit's test imports a symbol the
|
|
548
581
|
commit itself adds, so it cannot compile at the pre-fix parent. Such tasks are rejected
|
|
549
582
|
anyway, but only after a full tree materialize + build, which costs 30-200s each.
|
|
@@ -583,8 +616,8 @@ from stdin (keeps it out of shell history)
|
|
|
583
616
|
Usage: car keys set <NAME> [VALUE]
|
|
584
617
|
|
|
585
618
|
Arguments:
|
|
586
|
-
<NAME>
|
|
587
|
-
[VALUE]
|
|
619
|
+
<NAME>
|
|
620
|
+
[VALUE]
|
|
588
621
|
|
|
589
622
|
Options:
|
|
590
623
|
-h, --help Print help
|
|
@@ -609,7 +642,91 @@ Remove a stored provider key from the keychain
|
|
|
609
642
|
Usage: car keys remove <NAME>
|
|
610
643
|
|
|
611
644
|
Arguments:
|
|
612
|
-
<NAME>
|
|
645
|
+
<NAME>
|
|
646
|
+
|
|
647
|
+
Options:
|
|
648
|
+
-h, --help Print help
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
### car selfheal
|
|
652
|
+
|
|
653
|
+
```text
|
|
654
|
+
Inspect and operate the daemon's deterministic self-healing detector
|
|
655
|
+
|
|
656
|
+
Usage: car selfheal <COMMAND>
|
|
657
|
+
|
|
658
|
+
Commands:
|
|
659
|
+
status Show cadence, active counts, and the route resolved by the last tick
|
|
660
|
+
list List active detections, optionally filtered by kind, severity, or time
|
|
661
|
+
show Print the trusted local issue document for one detection
|
|
662
|
+
dismiss Dismiss one active detection by dedup key
|
|
663
|
+
run Run one deterministic detection tick now
|
|
664
|
+
help Print this message or the help of the given subcommand(s)
|
|
665
|
+
|
|
666
|
+
Options:
|
|
667
|
+
-h, --help Print help
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
#### car selfheal status
|
|
671
|
+
|
|
672
|
+
```text
|
|
673
|
+
Show cadence, active counts, and the route resolved by the last tick
|
|
674
|
+
|
|
675
|
+
Usage: car selfheal status
|
|
676
|
+
|
|
677
|
+
Options:
|
|
678
|
+
-h, --help Print help
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
#### car selfheal list
|
|
682
|
+
|
|
683
|
+
```text
|
|
684
|
+
List active detections, optionally filtered by kind, severity, or time
|
|
685
|
+
|
|
686
|
+
Usage: car selfheal list [OPTIONS]
|
|
687
|
+
|
|
688
|
+
Options:
|
|
689
|
+
--kind <KIND> Detection kind (metrics_alert, agent_gave_up, agent_log_error,
|
|
690
|
+
agent_silently_idle, recurring_tool_failure, capability_miss)
|
|
691
|
+
--severity <SEVERITY> Severity (warning or critical)
|
|
692
|
+
--since <SINCE> Only detections observed at or after this RFC3339 timestamp
|
|
693
|
+
-h, --help Print help
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
#### car selfheal show
|
|
697
|
+
|
|
698
|
+
```text
|
|
699
|
+
Print the trusted local issue document for one detection
|
|
700
|
+
|
|
701
|
+
Usage: car selfheal show <DEDUP_KEY>
|
|
702
|
+
|
|
703
|
+
Arguments:
|
|
704
|
+
<DEDUP_KEY> Detection SHA-256 dedup key
|
|
705
|
+
|
|
706
|
+
Options:
|
|
707
|
+
-h, --help Print help
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
#### car selfheal dismiss
|
|
711
|
+
|
|
712
|
+
```text
|
|
713
|
+
Dismiss one active detection by dedup key
|
|
714
|
+
|
|
715
|
+
Usage: car selfheal dismiss <DEDUP_KEY>
|
|
716
|
+
|
|
717
|
+
Arguments:
|
|
718
|
+
<DEDUP_KEY> Detection SHA-256 dedup key
|
|
719
|
+
|
|
720
|
+
Options:
|
|
721
|
+
-h, --help Print help
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
#### car selfheal run
|
|
725
|
+
|
|
726
|
+
```text
|
|
727
|
+
Run one deterministic detection tick now
|
|
728
|
+
|
|
729
|
+
Usage: car selfheal run
|
|
613
730
|
|
|
614
731
|
Options:
|
|
615
732
|
-h, --help Print help
|
|
@@ -724,7 +841,7 @@ Evaluate one local model without downloading or loading it
|
|
|
724
841
|
Usage: car models preflight [OPTIONS] <MODEL_ID>
|
|
725
842
|
|
|
726
843
|
Arguments:
|
|
727
|
-
<MODEL_ID>
|
|
844
|
+
<MODEL_ID>
|
|
728
845
|
|
|
729
846
|
Options:
|
|
730
847
|
--context-tokens <CONTEXT_TOKENS> [default: 0]
|
|
@@ -739,7 +856,7 @@ Adopt an already-usable local artifact into CAR ownership
|
|
|
739
856
|
Usage: car models adopt <MODEL_ID>
|
|
740
857
|
|
|
741
858
|
Arguments:
|
|
742
|
-
<MODEL_ID>
|
|
859
|
+
<MODEL_ID>
|
|
743
860
|
|
|
744
861
|
Options:
|
|
745
862
|
-h, --help Print help
|
|
@@ -1410,7 +1527,7 @@ Options:
|
|
|
1410
1527
|
Safety cap on agent turns. This is a backstop, not the expected stop: the loop ends on its
|
|
1411
1528
|
own when the model finishes (stops calling tools). 12 was too low for whole-project builds
|
|
1412
1529
|
— it cut real work off mid-task; raise it further for large jobs
|
|
1413
|
-
|
|
1530
|
+
|
|
1414
1531
|
[default: 50]
|
|
1415
1532
|
|
|
1416
1533
|
--until <SHELL>
|
|
@@ -1426,7 +1543,7 @@ Options:
|
|
|
1426
1543
|
--goal-max-iterations <GOAL_MAX_ITERATIONS>
|
|
1427
1544
|
In goal mode, the hard cap on re-drive iterations (the governor's turn budget). A hard
|
|
1428
1545
|
bound, not a soft prose clause
|
|
1429
|
-
|
|
1546
|
+
|
|
1430
1547
|
[default: 10]
|
|
1431
1548
|
|
|
1432
1549
|
--serve
|
|
@@ -1442,6 +1559,45 @@ Options:
|
|
|
1442
1559
|
stdout, JSONL progress events on stderr, and no human progress rendering. Needs a goal —
|
|
1443
1560
|
there is no JSON shape for an interactive REPL. See docs/car-do-json.md
|
|
1444
1561
|
|
|
1562
|
+
--response-format <MODE>
|
|
1563
|
+
Constrain the final answer to JSON. Applies to the final answer only; tool turns are
|
|
1564
|
+
unconstrained (a JSON-constrained request suppresses tool use). The loop checks the final
|
|
1565
|
+
answer itself and, if it is not a JSON object, re-asks the model ONCE with no tools and
|
|
1566
|
+
JSON mode on before returning; an answer that already parses costs no extra call.
|
|
1567
|
+
Provider-dependent on that repair turn: OpenAI-protocol and OpenRouter (which forwards it
|
|
1568
|
+
to the upstream provider) enforce it; Anthropic-protocol models reject it. Mutually
|
|
1569
|
+
exclusive with --json-schema. (Unrelated to --json, which shapes car's own output.)
|
|
1570
|
+
|
|
1571
|
+
[possible values: json_object]
|
|
1572
|
+
|
|
1573
|
+
--json-schema <FILE>
|
|
1574
|
+
Constrain the final answer to JSON matching this JSON Schema file. The schema's `title`
|
|
1575
|
+
names it for providers that want one. Applies to the final answer only, with the same
|
|
1576
|
+
one-shot tool-less repair and provider caveats as --response-format; the loop validates
|
|
1577
|
+
the final answer against the schema itself (a valid-JSON answer of the wrong shape is
|
|
1578
|
+
repaired too). Mutually exclusive with --response-format
|
|
1579
|
+
|
|
1580
|
+
--strict-model
|
|
1581
|
+
Use exactly the --model (or CAR_DO_MODEL) named, or fail. Without it `car do` substitutes
|
|
1582
|
+
a usable tool-capable model when the named one is unavailable here (and says so); with it
|
|
1583
|
+
a substitution is a startup error, and the inference layer will not fall back to an
|
|
1584
|
+
on-device model on a remote failure either. Off by default: the substitution is the right
|
|
1585
|
+
call for an interactive run
|
|
1586
|
+
|
|
1587
|
+
--context-window <TOKENS>
|
|
1588
|
+
Bound the running conversation to this many tokens instead of the model's registry window
|
|
1589
|
+
(older middle turns are compacted out to fit, as they are against the real window). Use it
|
|
1590
|
+
to tighten: a value above the model's known window is clamped back down to it, because
|
|
1591
|
+
letting the history overflow the real window is exactly the provider-side truncation
|
|
1592
|
+
compaction exists to prevent
|
|
1593
|
+
|
|
1594
|
+
--max-delegations <N>
|
|
1595
|
+
Run-level cap on `delegate` sub-agent calls. A call past the cap (or past the
|
|
1596
|
+
300-child-turn budget) returns an error result to the assistant instead of spawning, so a
|
|
1597
|
+
delegating run cannot amplify its model calls without bound
|
|
1598
|
+
|
|
1599
|
+
[default: 20]
|
|
1600
|
+
|
|
1445
1601
|
-h, --help
|
|
1446
1602
|
Print help (see a summary with '-h')
|
|
1447
1603
|
```
|
|
@@ -1664,7 +1820,7 @@ Options:
|
|
|
1664
1820
|
|
|
1665
1821
|
--max-attempts <MAX_ATTEMPTS>
|
|
1666
1822
|
Max generate→validate→repair attempts per round
|
|
1667
|
-
|
|
1823
|
+
|
|
1668
1824
|
[default: 3]
|
|
1669
1825
|
|
|
1670
1826
|
-h, --help
|
|
@@ -1765,11 +1921,11 @@ Store a secret. Value is read from --value or piped stdin
|
|
|
1765
1921
|
Usage: car secrets put [OPTIONS] <KEY>
|
|
1766
1922
|
|
|
1767
1923
|
Arguments:
|
|
1768
|
-
<KEY>
|
|
1924
|
+
<KEY>
|
|
1769
1925
|
|
|
1770
1926
|
Options:
|
|
1771
|
-
--service <SERVICE>
|
|
1772
|
-
--value <VALUE>
|
|
1927
|
+
--service <SERVICE>
|
|
1928
|
+
--value <VALUE>
|
|
1773
1929
|
-h, --help Print help
|
|
1774
1930
|
```
|
|
1775
1931
|
|
|
@@ -1781,10 +1937,10 @@ Retrieve a secret — prints the value on stdout
|
|
|
1781
1937
|
Usage: car secrets get [OPTIONS] <KEY>
|
|
1782
1938
|
|
|
1783
1939
|
Arguments:
|
|
1784
|
-
<KEY>
|
|
1940
|
+
<KEY>
|
|
1785
1941
|
|
|
1786
1942
|
Options:
|
|
1787
|
-
--service <SERVICE>
|
|
1943
|
+
--service <SERVICE>
|
|
1788
1944
|
-h, --help Print help
|
|
1789
1945
|
```
|
|
1790
1946
|
|
|
@@ -1796,10 +1952,10 @@ Delete a secret (idempotent)
|
|
|
1796
1952
|
Usage: car secrets delete [OPTIONS] <KEY>
|
|
1797
1953
|
|
|
1798
1954
|
Arguments:
|
|
1799
|
-
<KEY>
|
|
1955
|
+
<KEY>
|
|
1800
1956
|
|
|
1801
1957
|
Options:
|
|
1802
|
-
--service <SERVICE>
|
|
1958
|
+
--service <SERVICE>
|
|
1803
1959
|
-h, --help Print help
|
|
1804
1960
|
```
|
|
1805
1961
|
|
|
@@ -1811,10 +1967,10 @@ Check whether a secret exists, without returning the value
|
|
|
1811
1967
|
Usage: car secrets status [OPTIONS] <KEY>
|
|
1812
1968
|
|
|
1813
1969
|
Arguments:
|
|
1814
|
-
<KEY>
|
|
1970
|
+
<KEY>
|
|
1815
1971
|
|
|
1816
1972
|
Options:
|
|
1817
|
-
--service <SERVICE>
|
|
1973
|
+
--service <SERVICE>
|
|
1818
1974
|
-h, --help Print help
|
|
1819
1975
|
```
|
|
1820
1976
|
|
|
@@ -2004,7 +2160,7 @@ Report current grant state for a domain
|
|
|
2004
2160
|
Usage: car permissions status [OPTIONS] <DOMAIN>
|
|
2005
2161
|
|
|
2006
2162
|
Arguments:
|
|
2007
|
-
<DOMAIN>
|
|
2163
|
+
<DOMAIN>
|
|
2008
2164
|
|
|
2009
2165
|
Options:
|
|
2010
2166
|
--target <TARGET> macOS Automation only: bundle ID of the target app to control. Ignored for
|
|
@@ -2020,10 +2176,10 @@ Trigger a native prompt if the OS supports one
|
|
|
2020
2176
|
Usage: car permissions request [OPTIONS] <DOMAIN>
|
|
2021
2177
|
|
|
2022
2178
|
Arguments:
|
|
2023
|
-
<DOMAIN>
|
|
2179
|
+
<DOMAIN>
|
|
2024
2180
|
|
|
2025
2181
|
Options:
|
|
2026
|
-
--target <TARGET>
|
|
2182
|
+
--target <TARGET>
|
|
2027
2183
|
-h, --help Print help
|
|
2028
2184
|
```
|
|
2029
2185
|
|
|
@@ -2035,10 +2191,10 @@ Human-readable explanation and fix suggestion
|
|
|
2035
2191
|
Usage: car permissions explain [OPTIONS] <DOMAIN>
|
|
2036
2192
|
|
|
2037
2193
|
Arguments:
|
|
2038
|
-
<DOMAIN>
|
|
2194
|
+
<DOMAIN>
|
|
2039
2195
|
|
|
2040
2196
|
Options:
|
|
2041
|
-
--target <TARGET>
|
|
2197
|
+
--target <TARGET>
|
|
2042
2198
|
-h, --help Print help
|
|
2043
2199
|
```
|
|
2044
2200
|
|
|
@@ -2105,7 +2261,7 @@ Remove an enrolled voiceprint by label
|
|
|
2105
2261
|
Usage: car voice remove --label <LABEL>
|
|
2106
2262
|
|
|
2107
2263
|
Options:
|
|
2108
|
-
--label <LABEL>
|
|
2264
|
+
--label <LABEL>
|
|
2109
2265
|
-h, --help Print help
|
|
2110
2266
|
```
|
|
2111
2267
|
|
|
@@ -2131,10 +2287,14 @@ onboarding step)
|
|
|
2131
2287
|
Usage: car approvals <COMMAND>
|
|
2132
2288
|
|
|
2133
2289
|
Commands:
|
|
2134
|
-
default
|
|
2290
|
+
default Set the default approval preset for all agents (`cautious` asks before any
|
|
2135
2291
|
edit/full-access, `balanced` allows sandboxed edits, `trusting` allows everything without asking)
|
|
2136
|
-
get
|
|
2137
|
-
|
|
2292
|
+
get Show the current default approval posture
|
|
2293
|
+
set-tool Set an approval mode for one exact agent and exact tool. `always_allow` requires
|
|
2294
|
+
that agent to be attached with an eligible live callback
|
|
2295
|
+
evaluate-tool Show whether one exact agent/tool override is active and schema-bound
|
|
2296
|
+
reset-tool Remove one exact agent/tool approval override
|
|
2297
|
+
help Print this message or the help of the given subcommand(s)
|
|
2138
2298
|
|
|
2139
2299
|
Options:
|
|
2140
2300
|
-h, --help Print help
|
|
@@ -2166,6 +2326,53 @@ Options:
|
|
|
2166
2326
|
-h, --help Print help
|
|
2167
2327
|
```
|
|
2168
2328
|
|
|
2329
|
+
#### car approvals set-tool
|
|
2330
|
+
|
|
2331
|
+
```text
|
|
2332
|
+
Set an approval mode for one exact agent and exact tool. `always_allow` requires that agent to be
|
|
2333
|
+
attached with an eligible live callback
|
|
2334
|
+
|
|
2335
|
+
Usage: car approvals set-tool <AGENT> <TOOL> <MODE>
|
|
2336
|
+
|
|
2337
|
+
Arguments:
|
|
2338
|
+
<AGENT>
|
|
2339
|
+
<TOOL>
|
|
2340
|
+
<MODE> One of: always_allow | require_approval | deny
|
|
2341
|
+
|
|
2342
|
+
Options:
|
|
2343
|
+
-h, --help Print help
|
|
2344
|
+
```
|
|
2345
|
+
|
|
2346
|
+
#### car approvals evaluate-tool
|
|
2347
|
+
|
|
2348
|
+
```text
|
|
2349
|
+
Show whether one exact agent/tool override is active and schema-bound
|
|
2350
|
+
|
|
2351
|
+
Usage: car approvals evaluate-tool <AGENT> <TOOL>
|
|
2352
|
+
|
|
2353
|
+
Arguments:
|
|
2354
|
+
<AGENT>
|
|
2355
|
+
<TOOL>
|
|
2356
|
+
|
|
2357
|
+
Options:
|
|
2358
|
+
-h, --help Print help
|
|
2359
|
+
```
|
|
2360
|
+
|
|
2361
|
+
#### car approvals reset-tool
|
|
2362
|
+
|
|
2363
|
+
```text
|
|
2364
|
+
Remove one exact agent/tool approval override
|
|
2365
|
+
|
|
2366
|
+
Usage: car approvals reset-tool <AGENT> <TOOL>
|
|
2367
|
+
|
|
2368
|
+
Arguments:
|
|
2369
|
+
<AGENT>
|
|
2370
|
+
<TOOL>
|
|
2371
|
+
|
|
2372
|
+
Options:
|
|
2373
|
+
-h, --help Print help
|
|
2374
|
+
```
|
|
2375
|
+
|
|
2169
2376
|
### car accounts
|
|
2170
2377
|
|
|
2171
2378
|
```text
|
|
@@ -2201,7 +2408,7 @@ Open the native account-management UI
|
|
|
2201
2408
|
Usage: car accounts open [OPTIONS]
|
|
2202
2409
|
|
|
2203
2410
|
Options:
|
|
2204
|
-
--account-id <ACCOUNT_ID>
|
|
2411
|
+
--account-id <ACCOUNT_ID>
|
|
2205
2412
|
-h, --help Print help
|
|
2206
2413
|
```
|
|
2207
2414
|
|
|
@@ -2281,11 +2488,11 @@ Free-text contact search
|
|
|
2281
2488
|
Usage: car contacts find [OPTIONS] <QUERY>
|
|
2282
2489
|
|
|
2283
2490
|
Arguments:
|
|
2284
|
-
<QUERY>
|
|
2491
|
+
<QUERY>
|
|
2285
2492
|
|
|
2286
2493
|
Options:
|
|
2287
2494
|
--limit <LIMIT> [default: 50]
|
|
2288
|
-
--containers <CONTAINERS>
|
|
2495
|
+
--containers <CONTAINERS>
|
|
2289
2496
|
-h, --help Print help
|
|
2290
2497
|
```
|
|
2291
2498
|
|
|
@@ -2330,7 +2537,7 @@ Inbox summaries per account
|
|
|
2330
2537
|
Usage: car mail inbox [OPTIONS]
|
|
2331
2538
|
|
|
2332
2539
|
Options:
|
|
2333
|
-
--accounts <ACCOUNTS>
|
|
2540
|
+
--accounts <ACCOUNTS>
|
|
2334
2541
|
-h, --help Print help
|
|
2335
2542
|
```
|
|
2336
2543
|
|
|
@@ -2343,7 +2550,7 @@ bounded: depth 8, 64 requests)
|
|
|
2343
2550
|
Usage: car mail mailboxes [OPTIONS]
|
|
2344
2551
|
|
|
2345
2552
|
Options:
|
|
2346
|
-
--accounts <ACCOUNTS>
|
|
2553
|
+
--accounts <ACCOUNTS>
|
|
2347
2554
|
-h, --help Print help
|
|
2348
2555
|
```
|
|
2349
2556
|
|
|
@@ -2356,7 +2563,7 @@ account, then concatenated)
|
|
|
2356
2563
|
Usage: car mail messages [OPTIONS]
|
|
2357
2564
|
|
|
2358
2565
|
Options:
|
|
2359
|
-
--accounts <ACCOUNTS>
|
|
2566
|
+
--accounts <ACCOUNTS>
|
|
2360
2567
|
--mailbox <MAILBOX> Mailbox selector — a `full_name` from `car mail mailboxes`, or a bare
|
|
2361
2568
|
leaf name like "Travel". Defaults to INBOX
|
|
2362
2569
|
--limit <LIMIT> [default: 50]
|
|
@@ -2373,7 +2580,7 @@ Fetch one message body by the `id` from `car mail messages`
|
|
|
2373
2580
|
Usage: car mail body <ID>
|
|
2374
2581
|
|
|
2375
2582
|
Arguments:
|
|
2376
|
-
<ID>
|
|
2583
|
+
<ID>
|
|
2377
2584
|
|
|
2378
2585
|
Options:
|
|
2379
2586
|
-h, --help Print help
|
|
@@ -2476,7 +2683,7 @@ Free-text note search
|
|
|
2476
2683
|
Usage: car notes find [OPTIONS] <QUERY>
|
|
2477
2684
|
|
|
2478
2685
|
Arguments:
|
|
2479
|
-
<QUERY>
|
|
2686
|
+
<QUERY>
|
|
2480
2687
|
|
|
2481
2688
|
Options:
|
|
2482
2689
|
--limit <LIMIT> [default: 50]
|
|
@@ -2664,8 +2871,8 @@ Sleep windows in an ISO-8601 time range
|
|
|
2664
2871
|
Usage: car health sleep --start <START> --end <END>
|
|
2665
2872
|
|
|
2666
2873
|
Options:
|
|
2667
|
-
--start <START>
|
|
2668
|
-
--end <END>
|
|
2874
|
+
--start <START>
|
|
2875
|
+
--end <END>
|
|
2669
2876
|
-h, --help Print help
|
|
2670
2877
|
```
|
|
2671
2878
|
|
|
@@ -2677,8 +2884,8 @@ Workouts in an ISO-8601 time range
|
|
|
2677
2884
|
Usage: car health workouts --start <START> --end <END>
|
|
2678
2885
|
|
|
2679
2886
|
Options:
|
|
2680
|
-
--start <START>
|
|
2681
|
-
--end <END>
|
|
2887
|
+
--start <START>
|
|
2888
|
+
--end <END>
|
|
2682
2889
|
-h, --help Print help
|
|
2683
2890
|
```
|
|
2684
2891
|
|
|
@@ -2690,8 +2897,8 @@ Daily activity summaries across a date range (YYYY-MM-DD)
|
|
|
2690
2897
|
Usage: car health activity --start <START> --end <END>
|
|
2691
2898
|
|
|
2692
2899
|
Options:
|
|
2693
|
-
--start <START>
|
|
2694
|
-
--end <END>
|
|
2900
|
+
--start <START>
|
|
2901
|
+
--end <END>
|
|
2695
2902
|
-h, --help Print help
|
|
2696
2903
|
```
|
|
2697
2904
|
|
|
@@ -2720,12 +2927,12 @@ Options:
|
|
|
2720
2927
|
Registry source for `<namespace>/<name>` references: an `http(s)://…/index.json` URL or a
|
|
2721
2928
|
LOCAL registry directory (or `file://` URL). Defaults to the public mirror. The private
|
|
2722
2929
|
source needs a token — set `CAR_REGISTRY_TOKEN`
|
|
2723
|
-
|
|
2930
|
+
|
|
2724
2931
|
[default: https://raw.githubusercontent.com/Parslee-ai/car-releases/main/index.json]
|
|
2725
2932
|
|
|
2726
2933
|
--url <URL>
|
|
2727
2934
|
WebSocket URL of the running car-server daemon
|
|
2728
|
-
|
|
2935
|
+
|
|
2729
2936
|
[default: ws://127.0.0.1:9100/]
|
|
2730
2937
|
|
|
2731
2938
|
--json
|
package/docs/agent-ir-spec.md
CHANGED
|
@@ -181,6 +181,35 @@ Proposed → Validated → Executing → Succeeded
|
|
|
181
181
|
|
|
182
182
|
`ActionStatus` is observable through the event log, not part of the input contract.
|
|
183
183
|
|
|
184
|
+
#### Execution outcome event data
|
|
185
|
+
|
|
186
|
+
Every per-action `ActionFailed` event carries:
|
|
187
|
+
|
|
188
|
+
- `params_digest`: lowercase SHA-256 of the RFC 8785/JCS-canonicalized action
|
|
189
|
+
`parameters` object. The event never copies raw parameters; consumers join
|
|
190
|
+
through `proposal_id` + `action_id` to the authoritative `ProposalReceived`
|
|
191
|
+
record and can use the digest to detect a mismatch.
|
|
192
|
+
- `expected_effects`: the action's declared expected-effects object, unchanged.
|
|
193
|
+
- `error_class`: one of `timeout`, `rejected_by_policy`, `tool_error`,
|
|
194
|
+
`validation`, or `unknown`.
|
|
195
|
+
|
|
196
|
+
`ActionSucceeded` carries `params_digest` and `expected_effects` too, making the
|
|
197
|
+
success/failure join symmetric without adding an error classification to a
|
|
198
|
+
successful call.
|
|
199
|
+
|
|
200
|
+
The normalized error mapping is intentionally low-cardinality:
|
|
201
|
+
|
|
202
|
+
| `error_class` | Mapping |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `timeout` | the engine's action deadline expired, or the daemon-to-host tool callback reported its own timeout |
|
|
205
|
+
| `rejected_by_policy` | a dispatch-time tool guard returned the stable `denied by policy:` or `rejected by policy:` prefix |
|
|
206
|
+
| `validation` | post-dispatch output or callback-state JCS/I-JSON, state-key-set, or serialization validation failed |
|
|
207
|
+
| `tool_error` | any other error returned while dispatching a tool action |
|
|
208
|
+
| `unknown` | a post-dispatch failure on an action with no tool |
|
|
209
|
+
|
|
210
|
+
Normal action/schema/policy admission failures happen before execution and are
|
|
211
|
+
`ActionRejected`, not `ActionFailed`, so this mapping does not reclassify them.
|
|
212
|
+
|
|
184
213
|
---
|
|
185
214
|
|
|
186
215
|
## Precondition
|
|
@@ -220,6 +249,7 @@ Registered when a tool is added to the runtime. Carries everything the runtime n
|
|
|
220
249
|
```jsonc
|
|
221
250
|
{
|
|
222
251
|
"name": "deploy",
|
|
252
|
+
"source": "user_defined",
|
|
223
253
|
"description": "Deploys an artifact to a target environment.",
|
|
224
254
|
"parameters": {
|
|
225
255
|
"type": "object",
|
|
@@ -238,6 +268,7 @@ Registered when a tool is added to the runtime. Carries everything the runtime n
|
|
|
238
268
|
| Field | Type | Required | Default | Notes |
|
|
239
269
|
|-------|------|----------|---------|-------|
|
|
240
270
|
| `name` | string | **yes** | — | unique within a runtime |
|
|
271
|
+
| `source` | `builtin \| user_defined \| subprocess \| mcp` | no | `user_defined` | stable origin category assigned by the runtime; MCP server detail remains registry-private |
|
|
241
272
|
| `description` | string | no | `""` | human-readable; included in tool catalog |
|
|
242
273
|
| `parameters` | JSON Schema | no | `{}` | validated by the runtime before dispatch |
|
|
243
274
|
| `returns` | JSON Schema | no | none | validated against tool return value when set |
|
|
@@ -562,15 +593,21 @@ allow = ["staging", "preview"] # any other target — or none at all — is de
|
|
|
562
593
|
| `allow` | no | permitted values; defaults to empty, which denies every call |
|
|
563
594
|
|
|
564
595
|
#### `deny_tool_param_matching`
|
|
565
|
-
The content counterpart to `deny_tool_param`, for
|
|
596
|
+
The content counterpart to `deny_tool_param`, for conditions no fixed substring expresses — credential shapes, account numbers, an address family, or an open-ended trusted prefix. `matches` is a regex over the string-coerced parameter value. The match is **unanchored**, so the pattern fires anywhere in the value; anchor it with `^`/`$` when that matters.
|
|
566
597
|
|
|
567
|
-
The pattern is compiled once when the rule set is applied, not per action. A pattern that fails to compile **denies every call to that tool** rather than disappearing, matching the loader's loud-error posture.
|
|
598
|
+
By default a regex match denies and an absent parameter does not. Set `negate = true` for the "unless" form: a mismatch denies, and an absent parameter also denies because nothing proves the required pattern. The pattern is compiled once when the rule set is applied, not per action. A pattern that fails to compile **denies every call to that tool** rather than disappearing, matching the loader's loud-error posture.
|
|
568
599
|
|
|
569
600
|
```toml
|
|
570
601
|
[[deny_tool_param_matching]]
|
|
571
602
|
tool = "http_request"
|
|
572
603
|
param = "body"
|
|
573
604
|
matches = "sk-[A-Za-z0-9]{20,}" # never let an API-key-shaped string leave in a body
|
|
605
|
+
|
|
606
|
+
[[deny_tool_param_matching]]
|
|
607
|
+
tool = "docker.rm"
|
|
608
|
+
param = "name"
|
|
609
|
+
matches = "^parslee-"
|
|
610
|
+
negate = true # deny unless the name has the trusted prefix
|
|
574
611
|
```
|
|
575
612
|
|
|
576
613
|
| Param | Required | Notes |
|
|
@@ -578,6 +615,7 @@ matches = "sk-[A-Za-z0-9]{20,}" # never let an API-key-shaped string leave in
|
|
|
578
615
|
| `tool` | yes | tool name the rule applies to |
|
|
579
616
|
| `param` | yes | parameter key inspected on the action |
|
|
580
617
|
| `matches` | yes | regex source; unanchored; an uncompilable pattern denies the tool outright |
|
|
618
|
+
| `negate` | no | defaults to `false`; when `true`, deny mismatch or absence instead of match |
|
|
581
619
|
|
|
582
620
|
#### `rate_limit_tool`
|
|
583
621
|
A sliding-window cap on how often `tool` may be called. The call is denied when admitting it would make it the `max_calls + 1`-th call to `tool` within the trailing `interval_secs`. `max_calls = 0` denies every call. This bounds how much of a side effect an agent can produce in a stretch of wall-clock time, independently of whether any single call is legitimate.
|