agents-can-communicate 0.7.1 → 0.8.1
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 +3 -1
- package/bin/entrypoints/acc-bootstrap.mjs +6 -48
- package/bin/entrypoints/acc-claude-channel.mjs +47 -157
- package/bin/entrypoints/acc-mcp.mjs +0 -1
- package/bin/entrypoints/acc.mjs +0 -1
- package/docs/ADAPTER_AUTHORING.md +74 -24
- package/docs/ARCHITECTURE.md +31 -18
- package/docs/CAPABILITIES.md +38 -25
- package/docs/CLI.md +51 -13
- package/docs/CONCEPTS.md +5 -4
- package/docs/CONFIGURATION.md +18 -11
- package/docs/GETTING_STARTED.md +15 -12
- package/docs/GLOSSARY.md +2 -1
- package/docs/HOW_IT_WORKS.md +8 -4
- package/docs/PROTOCOL.md +25 -6
- package/docs/RELEASING.md +8 -5
- package/docs/SECURITY_MODEL.md +14 -1
- package/docs/TROUBLESHOOTING.md +66 -29
- package/docs/UPGRADING.md +49 -8
- package/docs/WHY_ACC.md +5 -3
- package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +2 -3
- package/node_modules/@agents-can-communicate/adapter-claude-code/certification.json +14 -73
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/certification-provenance.json +29 -71
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.282-product-evidence.json +161 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.282.json +28 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/inbox-wake-2.1.282.json +44 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +5 -2
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +26 -30
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/hooks.mjs +6 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-contract.mjs +10 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-delivery.mjs +249 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-endpoint.mjs +166 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-registry.mjs +71 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-settings.mjs +109 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +25 -31
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +3 -4
- package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +10 -13
- package/node_modules/@agents-can-communicate/adapter-codex/src/live-permissions.mjs +5 -5
- package/node_modules/@agents-can-communicate/adapter-codex/src/maintenance-host.mjs +46 -10
- package/node_modules/@agents-can-communicate/adapter-codex/src/maintenance.mjs +5 -7
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +16 -12
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-endpoint.mjs +12 -2
- package/node_modules/@agents-can-communicate/adapter-codex/src/service-setup.mjs +26 -9
- package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +12 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +2 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/events.mjs +16 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +4 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +4 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-activation.mjs +4 -14
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +104 -84
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +8 -4
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +8 -6
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +8 -23
- package/node_modules/@agents-can-communicate/cli/src/install-delivery-consent.mjs +3 -4
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +24 -3
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +7 -43
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +5 -3
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/maintenance.mjs +9 -15
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/pins.mjs +13 -4
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/refresh.mjs +3 -4
- package/node_modules/@agents-can-communicate/cli/src/native-delivery-status.mjs +2 -2
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/receipts.mjs +17 -2
- package/node_modules/@agents-can-communicate/core/src/sessions.mjs +25 -2
- package/node_modules/@agents-can-communicate/core/src/status.mjs +31 -1
- package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/delivery-router/src/refresh-binding.mjs +2 -2
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +33 -48
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/client-pid.mjs +30 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/native-attempt.mjs +6 -8
- package/node_modules/@agents-can-communicate/hook-runner/src/native-binding.mjs +27 -15
- package/node_modules/@agents-can-communicate/hook-runner/src/process-table.mjs +30 -14
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +4 -2
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +19 -5
- package/node_modules/@agents-can-communicate/installer/src/delivery-diagnostics.mjs +0 -2
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +6 -11
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +4 -7
- package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +23 -61
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +7 -1
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +15 -5
- package/node_modules/@agents-can-communicate/installer/src/shell-bootstrap.mjs +10 -133
- package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
- package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +6 -1
- package/package.json +1 -1
- package/bin/acc-bootstrap.mjs +0 -7
- package/bin/acc-claude-channel.mjs +0 -10
- package/bin/entrypoints/claude-channel-binding.mjs +0 -46
- package/bin/entrypoints/claude-channel-stdio.mjs +0 -29
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/.mcp.json +0 -8
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/channel.mjs +0 -381
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/native-delivery.mjs +0 -232
- package/node_modules/@agents-can-communicate/installer/src/bootstrap-runtime.mjs +0 -150
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -154,31 +154,35 @@ or a connected MCP server does not by itself establish automatic delivery. `life
|
|
|
154
154
|
manual` can also mean the current version has no certified session-end hook; it does not
|
|
155
155
|
prove that no hooks ran.
|
|
156
156
|
|
|
157
|
-
For Claude Code,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
the
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
157
|
+
For Claude Code, use version 2.1.282 or newer on Apple Silicon macOS, and start it with
|
|
158
|
+
your ordinary command. Each Claude Code session opens its own inbox socket. ACC reads the
|
|
159
|
+
socket path from `CLAUDE_CODE_MESSAGING_SOCKET` in the hook environment. ACC then checks that
|
|
160
|
+
path against Claude Code's session registry `<config>/sessions/<pid>.json`, where
|
|
161
|
+
`<config>` is `CLAUDE_CONFIG_DIR` or `~/.claude`. The pid and the socket must match for the
|
|
162
|
+
binding, and the session id must match too before each wake. Each turn hook binds the
|
|
163
|
+
session again, so the next ordinary prompt retries a failed binding.
|
|
164
|
+
|
|
165
|
+
- Claude Code 2.1.224 and later open the inbox, but ACC's captured minimum is 2.1.282. An
|
|
166
|
+
older version reports `below_minimum_version` and keeps next-turn delivery.
|
|
167
|
+
- On native Windows, Claude Code serves its inbox on a named pipe that requires an auth
|
|
168
|
+
line. ACC has no capture of that inbox, so Windows keeps next-turn delivery.
|
|
169
|
+
- Linux is uncaptured for live delivery. A Linux session keeps next-turn delivery.
|
|
170
|
+
- A wake that reached the session can still wait for your approval. See
|
|
171
|
+
[the next section](#a-claude-code-session-holds-or-drops-acc-wakes).
|
|
172
|
+
|
|
173
|
+
If `deliveryBindings` is empty, ACC has not bound a local transport. Read the
|
|
173
174
|
per-session lines in `acc doctor`, or `nativeDelivery.sessions[].lastAttempt` in JSON:
|
|
174
175
|
|
|
175
|
-
- An absent
|
|
176
|
-
|
|
177
|
-
the installed launcher.
|
|
176
|
+
- An absent or `off` policy means the installation record has no live-delivery consent
|
|
177
|
+
for that client. Run `acc install --adapter <adapter> --delivery actionable` (or `all`).
|
|
178
178
|
- `client_process_unknown` means ACC could not identify the client process. A new client
|
|
179
179
|
session repeats that lookup.
|
|
180
|
-
-
|
|
181
|
-
|
|
180
|
+
- For Claude Code, `native_endpoint_unavailable` means the hook environment had no
|
|
181
|
+
`CLAUDE_CODE_MESSAGING_SOCKET`, or the socket failed ACC's safety checks.
|
|
182
|
+
`native_session_unavailable` means the session registry is missing or names another
|
|
183
|
+
session or socket.
|
|
184
|
+
- `handshake_failed` or `handshake_timeout` means the session could not bind its local
|
|
185
|
+
transport. Check the client's integration. The next ordinary turn retries.
|
|
182
186
|
- No attempt observed can mean no native hook ran, an older runtime wrote the owner, or
|
|
183
187
|
diagnostic persistence failed. Check hook activation and the runtime versions in doctor.
|
|
184
188
|
|
|
@@ -190,6 +194,37 @@ Closing a Codex terminal can leave its daemon thread loaded and eligible. Use
|
|
|
190
194
|
Already accepted queue entries remain with the vendor. Actual thread archive
|
|
191
195
|
requires Codex's confirmation and produces `SessionEnd`.
|
|
192
196
|
|
|
197
|
+
## A Claude Code session holds or drops ACC wakes
|
|
198
|
+
|
|
199
|
+
Claude Code applies its own inbound controls to each ACC wake. These controls stay yours.
|
|
200
|
+
ACC never attests a permission mode, never reads the session's messaging token or key file,
|
|
201
|
+
and sends no auth line.
|
|
202
|
+
|
|
203
|
+
- A session in a prompting mode (`default`, `auto`, `acceptEdits` or `dontAsk`) takes each
|
|
204
|
+
wake.
|
|
205
|
+
- A session in `bypassPermissions` mode holds each wake for your approval. To let such a
|
|
206
|
+
session take wakes without approval, set Claude Code's `crossSessionInbound` setting to
|
|
207
|
+
`accept`.
|
|
208
|
+
- A session with `crossSessionInbound` set to `refuse` drops each wake. ACC then sends
|
|
209
|
+
none: the message stays `queued` with `delivery_disabled` and arrives with the next turn.
|
|
210
|
+
|
|
211
|
+
ACC reads the same inputs Claude Code reads: the hook's permission mode; before the first
|
|
212
|
+
prompt, whose hook carries none, the `--permission-mode` or `--dangerously-skip-permissions`
|
|
213
|
+
flag the session was started with, then `permissions.defaultMode`; and `crossSessionInbound`
|
|
214
|
+
from managed, local, project and user settings in that order. A held wake is still sent, because Claude
|
|
215
|
+
Code's approval dialog tells you a message is waiting, and the sender reads
|
|
216
|
+
`sent a wake to <participant> via claude-inbox, which its session holds for approval`.
|
|
217
|
+
|
|
218
|
+
The product re-run on 2.1.283 observed both the prompting case and a `bypassPermissions`
|
|
219
|
+
session holding the wake. When live delivery is on and your user or managed settings do not
|
|
220
|
+
say `accept`, `acc doctor` prints a `Claude Code inbound:` line naming the setting and the
|
|
221
|
+
file.
|
|
222
|
+
|
|
223
|
+
In every case the message stays durable. The receipt stays `queued` until the session's
|
|
224
|
+
next-turn hook shows the body. The message arrives with the session's next turn, and
|
|
225
|
+
`acc inbox` shows it at any time. The sender's `acc message` output still reports
|
|
226
|
+
`woke <participant> via claude-inbox`, because the wake reached the inbox.
|
|
227
|
+
|
|
193
228
|
## Codex plugin is listed but inactive
|
|
194
229
|
|
|
195
230
|
Open `/plugins` in Codex and check ACC is enabled. Open `/hooks`, review each ACC hook,
|
|
@@ -205,8 +240,8 @@ local socket permissions as well; a writable state directory alone is insufficie
|
|
|
205
240
|
## Gemini does not guard a write
|
|
206
241
|
|
|
207
242
|
Default and `plan` modes expose no write tool to the model. `auto_edit` exposes edit tools;
|
|
208
|
-
shell availability depends on approval mode.
|
|
209
|
-
|
|
243
|
+
shell availability depends on approval mode. Gemini CLI next-turn delivery is certified from
|
|
244
|
+
0.57.0 onward, on every platform; an older client still uses inbox.
|
|
210
245
|
|
|
211
246
|
From 0.55 onwards there is a quieter cause with the same symptom: an untrusted folder. The
|
|
212
247
|
client prints `Approval mode overridden to "default" because the current folder is not
|
|
@@ -333,7 +368,7 @@ reported and retained. Remove those leftovers manually if desired.
|
|
|
333
368
|
Runtime state is outside the repository by design. `ACC_DATA_HOME` can relocate it, but ACC
|
|
334
369
|
refuses a path inside any workspace root. Relocate the whole data directory; a symlink for
|
|
335
370
|
that directory is supported. Install rejects a symlink that moves only the internal
|
|
336
|
-
`acc/runtime` tree, because runtime
|
|
371
|
+
`acc/runtime` tree, because the runtime launchers and their leases need the same data home.
|
|
337
372
|
|
|
338
373
|
Next: [Getting started](GETTING_STARTED.md) · [Capabilities](CAPABILITIES.md) ·
|
|
339
374
|
[Configuration](CONFIGURATION.md)
|
|
@@ -355,10 +390,11 @@ unrelated holds still require lifecycle cleanup or confirmed process exit; safet
|
|
|
355
390
|
do not expire merely by elapsed time. See
|
|
356
391
|
[maintenance and recovery](UPGRADING.md#confirmed-client-service-maintenance).
|
|
357
392
|
|
|
358
|
-
If ACC 0.5.3 or 0.5.4 reports `
|
|
359
|
-
0.4.x upgrade, its active pointer may have lost the contract field. This can
|
|
360
|
-
opened
|
|
361
|
-
for a newer fix. Install the current global CLI, then use
|
|
393
|
+
If ACC 0.5.3 or 0.5.4 reports a Claude Code Channel process with `contract unknown` after
|
|
394
|
+
an earlier 0.4.x upgrade, its active pointer may have lost the contract field. This can
|
|
395
|
+
affect Channel processes opened after that upgrade too. A pending old updater retries its
|
|
396
|
+
downloaded release without looking for a newer fix. Install the current global CLI, then use
|
|
397
|
+
that CLI to complete the update:
|
|
362
398
|
|
|
363
399
|
```bash
|
|
364
400
|
npm install -g agents-can-communicate@latest
|
|
@@ -366,9 +402,10 @@ acc update
|
|
|
366
402
|
acc doctor
|
|
367
403
|
```
|
|
368
404
|
|
|
369
|
-
The new reader can activate a compatible release while those
|
|
405
|
+
The new reader can activate a compatible release while those processes remain open.
|
|
370
406
|
It still waits for different contracts, unknown native bindings, or generation files it
|
|
371
407
|
cannot verify. See [legacy contract recovery](UPGRADING.md#recover-missing-runtime-contracts).
|
|
408
|
+
Current releases retire the Channel path. See [upgrading from 0.7.x](UPGRADING.md#from-07x).
|
|
372
409
|
|
|
373
410
|
Use `acc update` to retry a failed download or finish an interrupted integration refresh.
|
|
374
411
|
A download failure keeps the working version. A partial integration refresh blocks
|
package/docs/UPGRADING.md
CHANGED
|
@@ -1,11 +1,52 @@
|
|
|
1
1
|
# Upgrading to 0.5.0
|
|
2
2
|
|
|
3
|
+
## From 0.7.x
|
|
4
|
+
|
|
5
|
+
Claude Code live delivery wakes each session through the inbox socket that Claude Code opens
|
|
6
|
+
for every session. The research-preview Channels path of 0.7.x is retired. Update as usual:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
acc update
|
|
10
|
+
acc version
|
|
11
|
+
acc doctor
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`acc update` and `acc install` retire these 0.7.x parts automatically:
|
|
15
|
+
|
|
16
|
+
- the `claude` shim that 0.7.x put early on `PATH`, and its PATH block in `~/.zshrc`
|
|
17
|
+
- the Channel entry `acc-channel` in the plugin `.mcp.json`, from every kept plugin copy
|
|
18
|
+
- the `acc-bootstrap` and `acc-claude-channel` launchers
|
|
19
|
+
- the bootstrap cache
|
|
20
|
+
|
|
21
|
+
The shim and the `~/.zshrc` block are hash-checked. An edited shim or block is kept, and
|
|
22
|
+
the command reports it. Remove a kept one by hand when you no longer need it. An old shim
|
|
23
|
+
that is still on `PATH` launches the plain `claude` command, without
|
|
24
|
+
`--dangerously-load-development-channels`.
|
|
25
|
+
|
|
26
|
+
Live-delivery consent comes only from the installation record, and upgrading keeps the
|
|
27
|
+
recorded policy. ACC ignores `ACC_NATIVE_DELIVERY_POLICY`, `ACC_BYPASS` and
|
|
28
|
+
`ACC_BOOTSTRAP_DEBUG`. For Claude Code, the consent question now says that a session in
|
|
29
|
+
`bypassPermissions` mode asks before each ACC wake.
|
|
30
|
+
|
|
31
|
+
A Claude Code session that started through the old shim keeps its Channel until it exits.
|
|
32
|
+
Its next turn binds the inbox. Start new sessions with your ordinary `claude` command.
|
|
33
|
+
|
|
34
|
+
The Claude Code live-delivery minimum is now 2.1.282 on Apple Silicon macOS. With an older
|
|
35
|
+
Claude Code, live delivery stays off and the recorded policy is kept. Update Claude Code and
|
|
36
|
+
start a new session: the recorded policy applies to it, with nothing to install again.
|
|
37
|
+
`acc doctor` reports the state. Native Windows keeps next-turn delivery.
|
|
38
|
+
|
|
39
|
+
This release adds no new store event type or field, so a store it writes stays readable by
|
|
40
|
+
0.7.x. The Channel captures remain as history in
|
|
41
|
+
`packages/adapter-claude-code/COMPATIBILITY.md`.
|
|
42
|
+
|
|
3
43
|
## Recover missing runtime contracts
|
|
4
44
|
|
|
5
45
|
ACC 0.5.5 fixes an upgrade defect that can leave 0.5.3 or 0.5.4 waiting for
|
|
6
46
|
`acc-claude-channel` processes with `contract unknown`. The 0.4.x updater can activate
|
|
7
|
-
a newer generation without copying its store contract into the active pointer.
|
|
8
|
-
started afterward copy that incomplete pointer even though their runtime
|
|
47
|
+
a newer generation without copying its store contract into the active pointer. Claude Code
|
|
48
|
+
Channel processes started afterward copy that incomplete pointer even though their runtime
|
|
49
|
+
declares a contract.
|
|
9
50
|
|
|
10
51
|
For an installation already waiting on an older pending release, run:
|
|
11
52
|
|
|
@@ -21,8 +62,8 @@ needed because the older updater retries its pending release before checking npm
|
|
|
21
62
|
version. If a version pin selects an older release, clear it or select 0.5.5 first.
|
|
22
63
|
|
|
23
64
|
The reader verifies the referenced generation's package identity, complete contents and
|
|
24
|
-
file modes before recovering a missing contract. Compatible
|
|
25
|
-
their original generation during activation. Explicit differing contracts and unknown
|
|
65
|
+
file modes before recovering a missing contract. Compatible Channel processes can keep
|
|
66
|
+
running on their original generation during activation. Explicit differing contracts and unknown
|
|
26
67
|
native bindings still block. A generation without a contract, missing files, or changed
|
|
27
68
|
contents remains unknown. ACC does not terminate these processes or edit their lease records.
|
|
28
69
|
|
|
@@ -51,15 +92,15 @@ policy is default or contains only ACC's legacy state root. Custom policies are
|
|
|
51
92
|
and reported as unverified. See [outgoing permissions](CONFIGURATION.md#codex-outgoing-permissions).
|
|
52
93
|
If doctor names a missing local service, follow its prerequisite or explicit install action
|
|
53
94
|
before opening the new session. A supported explicit install can prepare the service. It
|
|
54
|
-
does not make a session-bound
|
|
95
|
+
does not make a session-bound transport ready.
|
|
55
96
|
|
|
56
97
|
Run `acc doctor` in the project after the new clients have started (or submitted a normal
|
|
57
|
-
turn). Its per-session lines now explain missing
|
|
98
|
+
turn). Its per-session lines now explain missing consent, an unidentified client
|
|
58
99
|
process and a failed or timed-out handshake. `nativeDelivery.sessions[].lastAttempt` in
|
|
59
100
|
`acc doctor --json` provides the same closed metadata and timestamp. Existing owners may
|
|
60
101
|
have no attempt record until a new hook runs; missing metadata does not prove hooks are
|
|
61
|
-
disabled. A previous successful handshake
|
|
62
|
-
|
|
102
|
+
disabled. A previous successful handshake does not prove that the session is reachable
|
|
103
|
+
now. See [delivery troubleshooting](TROUBLESHOOTING.md#i-enabled-live-delivery-but-got-fallback).
|
|
63
104
|
|
|
64
105
|
Upgrading preserves delivery consent. If doctor reports native delivery off and you want
|
|
65
106
|
automatic peer requests, use `acc install --adapter codex --delivery actionable` (or the
|
package/docs/WHY_ACC.md
CHANGED
|
@@ -53,9 +53,11 @@ coordinate across machines.
|
|
|
53
53
|
ACC also does not merge model memory, read raw conversations, guarantee agent choices,
|
|
54
54
|
approve tools, operate CI,
|
|
55
55
|
or make guarded claims immune to unrelated local processes. Experimental live delivery is
|
|
56
|
-
available through Claude Code
|
|
57
|
-
platforms, behind recipient opt-in and with possible token spend.
|
|
58
|
-
|
|
56
|
+
available through the Claude Code inbox wake and Codex LocalDaemon on supported versions and
|
|
57
|
+
platforms, behind recipient opt-in and with possible token spend. Both work inside the
|
|
58
|
+
session you opened with your ordinary command, and Claude Code needs no launcher shim.
|
|
59
|
+
Neither interrupts a turn in progress. A busy Claude Code session takes the message between
|
|
60
|
+
two tool calls, and Codex waits for the turn to finish. See [Capabilities](CAPABILITIES.md).
|
|
59
61
|
|
|
60
62
|
If the sessions should remain yours and simply stop working in isolation, that is the
|
|
61
63
|
product ACC is designed to be.
|
|
@@ -76,9 +76,8 @@ export function createAntigravityAdapter() {
|
|
|
76
76
|
// no retireNativeSession here: the hook runner retires and re-publishes the
|
|
77
77
|
// binding on every turn, and must not take the relay with it.
|
|
78
78
|
nativeDelivery: {
|
|
79
|
-
|
|
80
|
-
anchors: [{
|
|
81
|
-
protocolContract: PROTOCOL_CONTRACT }],
|
|
79
|
+
minimum: ANTIGRAVITY_CLI_VERSION,
|
|
80
|
+
anchors: [{ version: ANTIGRAVITY_CLI_VERSION, protocolContract: PROTOCOL_CONTRACT }],
|
|
82
81
|
knownBad: [], activationKinds: ["native-config"], policySource: "installation-record",
|
|
83
82
|
},
|
|
84
83
|
probeNativeDelivery, planNativeActivation, bindNativeSession, refreshNativeSession,
|
|
@@ -142,85 +142,26 @@
|
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
"client": "claude-code",
|
|
145
|
-
"version": "2.1.
|
|
145
|
+
"version": "2.1.282",
|
|
146
146
|
"platform": "darwin-arm64",
|
|
147
|
-
"observedAt": "2026-09-
|
|
147
|
+
"observedAt": "2026-09-25T21:35:56.792Z",
|
|
148
148
|
"capability": "delivery.livePush",
|
|
149
|
-
"fixture": "fixtures/delivery/claude-code-2.1.
|
|
149
|
+
"fixture": "fixtures/delivery/claude-code-2.1.282.json",
|
|
150
150
|
"idleBehavior": "offered",
|
|
151
151
|
"provenance": "fixtures/certification-provenance.json",
|
|
152
|
-
"provenanceId": "native-delivery-2-1-
|
|
153
|
-
"busyBehavior": "
|
|
152
|
+
"provenanceId": "native-delivery-2-1-282-inbox",
|
|
153
|
+
"busyBehavior": "presented_between_tool_calls",
|
|
154
154
|
"authorityLevel": "experimental",
|
|
155
155
|
"limitations": [
|
|
156
|
-
"
|
|
157
|
-
"the
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
"client": "claude-code",
|
|
166
|
-
"version": "2.1.258",
|
|
167
|
-
"platform": "darwin-arm64",
|
|
168
|
-
"observedAt": "2026-09-02T21:20:11.676Z",
|
|
169
|
-
"capability": "delivery.replyRoute",
|
|
170
|
-
"fixture": "fixtures/delivery/claude-code-2.1.258.json",
|
|
171
|
-
"idleBehavior": "offered",
|
|
172
|
-
"provenance": "fixtures/certification-provenance.json",
|
|
173
|
-
"provenanceId": "native-delivery-2-1-258",
|
|
174
|
-
"busyBehavior": "queued_after_turn",
|
|
175
|
-
"authorityLevel": "experimental",
|
|
176
|
-
"limitations": [
|
|
177
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
178
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
179
|
-
"the plugin .mcp.json must live in the marketplace source copy; the plugin cache copy alone is not read",
|
|
180
|
-
"acc_reply routed through the spike's explicit tool call; the spike created no durable ACC answer record",
|
|
181
|
-
"presentation after the busy turn was observed by the operator; the channel log records the write at 21:18:45Z and the explicit reply at 21:19:21Z"
|
|
182
|
-
],
|
|
183
|
-
"result": "pass"
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
"client": "claude-code",
|
|
187
|
-
"version": "2.1.260",
|
|
188
|
-
"platform": "darwin-arm64",
|
|
189
|
-
"observedAt": "2026-09-04T03:41:29.688Z",
|
|
190
|
-
"capability": "delivery.livePush",
|
|
191
|
-
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
192
|
-
"idleBehavior": "offered",
|
|
193
|
-
"provenance": "fixtures/certification-provenance.json",
|
|
194
|
-
"provenanceId": "native-delivery-2-1-260",
|
|
195
|
-
"busyBehavior": "queued_after_turn",
|
|
196
|
-
"authorityLevel": "experimental",
|
|
197
|
-
"limitations": [
|
|
198
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
199
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
200
|
-
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
201
|
-
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
202
|
-
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
203
|
-
],
|
|
204
|
-
"result": "pass"
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
"client": "claude-code",
|
|
208
|
-
"version": "2.1.260",
|
|
209
|
-
"platform": "darwin-arm64",
|
|
210
|
-
"observedAt": "2026-09-04T03:41:29.688Z",
|
|
211
|
-
"capability": "delivery.replyRoute",
|
|
212
|
-
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
213
|
-
"idleBehavior": "offered",
|
|
214
|
-
"provenance": "fixtures/certification-provenance.json",
|
|
215
|
-
"provenanceId": "native-delivery-2-1-260",
|
|
216
|
-
"busyBehavior": "queued_after_turn",
|
|
217
|
-
"authorityLevel": "experimental",
|
|
218
|
-
"limitations": [
|
|
219
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
220
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
221
|
-
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
222
|
-
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
223
|
-
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
156
|
+
"Observed on darwin-arm64 with Claude Code 2.1.282 in the TUI, model Sonnet 5, auto permission mode, through a private candidate built from this branch and installed with an isolated ACC data home; the plugin registration in the real Claude config directory was restored byte for byte afterwards.",
|
|
157
|
+
"Every wake carried ACC wording and the message id only. The body reached the model through the UserPromptSubmit projection that each delivered wake fired, inside the untrusted acc-peer-message block.",
|
|
158
|
+
"An idle session started a turn with no user input. A wake sent while a Bash tool call ran was taken after that call returned and before the next one, and the turn continued.",
|
|
159
|
+
"The observed reply loop uses the installed acc reply CLI; native delivery.replyRoute remains false. The router reports a wake as outcome woken via claude-inbox and leaves the receipt queued until the hook's output carried the body, which records it offered via next-turn.",
|
|
160
|
+
"A repeated logical send kept its message id, took the durable path because the receipt was already acknowledged, and produced exactly one wake.",
|
|
161
|
+
"Two sessions in one workspace each bound their own inbox; a message addressed to one never woke the other.",
|
|
162
|
+
"An exited session left no registry entry; the next message stayed queued as recipient_unavailable.",
|
|
163
|
+
"A receiving session in bypassPermissions mode was not captured; Claude Code documents that such a session holds each wake whose sender does not attest bypass, and ACC never attests a mode.",
|
|
164
|
+
"Linux and native Windows remain uncaptured."
|
|
224
165
|
],
|
|
225
166
|
"result": "pass"
|
|
226
167
|
}
|
|
@@ -172,13 +172,13 @@
|
|
|
172
172
|
]
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
|
-
"id": "native-delivery-2-1-
|
|
175
|
+
"id": "native-delivery-2-1-282-inbox",
|
|
176
176
|
"client": "claude-code",
|
|
177
|
-
"version": "2.1.
|
|
177
|
+
"version": "2.1.282",
|
|
178
178
|
"platform": "darwin-arm64",
|
|
179
|
-
"observedAt": "2026-09-
|
|
180
|
-
"fixture": "fixtures/delivery/claude-code-2.1.
|
|
181
|
-
"sha256": "
|
|
179
|
+
"observedAt": "2026-09-25T21:35:56.792Z",
|
|
180
|
+
"fixture": "fixtures/delivery/claude-code-2.1.282.json",
|
|
181
|
+
"sha256": "7e335f61df97edbd08304227be7335931dae3bc71e3dc639804b656ea2dae66a",
|
|
182
182
|
"event": null,
|
|
183
183
|
"tool": null,
|
|
184
184
|
"claims": [
|
|
@@ -188,80 +188,38 @@
|
|
|
188
188
|
"outcome": {
|
|
189
189
|
"kind": "native-delivery-observed",
|
|
190
190
|
"idle": "offered",
|
|
191
|
-
"busy": "
|
|
191
|
+
"busy": "presented_between_tool_calls",
|
|
192
192
|
"authority": "experimental",
|
|
193
193
|
"limitations": [
|
|
194
|
-
"
|
|
195
|
-
"the
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
"capability": "delivery.replyRoute",
|
|
204
|
-
"result": "pass",
|
|
205
|
-
"outcome": {
|
|
206
|
-
"kind": "native-delivery-observed",
|
|
207
|
-
"idle": "offered",
|
|
208
|
-
"busy": "queued_after_turn",
|
|
209
|
-
"authority": "experimental",
|
|
210
|
-
"limitations": [
|
|
211
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
212
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
213
|
-
"the plugin .mcp.json must live in the marketplace source copy; the plugin cache copy alone is not read",
|
|
214
|
-
"acc_reply routed through the spike's explicit tool call; the spike created no durable ACC answer record",
|
|
215
|
-
"presentation after the busy turn was observed by the operator; the channel log records the write at 21:18:45Z and the explicit reply at 21:19:21Z"
|
|
194
|
+
"Observed on darwin-arm64 with Claude Code 2.1.282 in the TUI, model Sonnet 5, auto permission mode, through a private candidate built from this branch and installed with an isolated ACC data home; the plugin registration in the real Claude config directory was restored byte for byte afterwards.",
|
|
195
|
+
"Every wake carried ACC wording and the message id only. The body reached the model through the UserPromptSubmit projection that each delivered wake fired, inside the untrusted acc-peer-message block.",
|
|
196
|
+
"An idle session started a turn with no user input. A wake sent while a Bash tool call ran was taken after that call returned and before the next one, and the turn continued.",
|
|
197
|
+
"The observed reply loop uses the installed acc reply CLI; native delivery.replyRoute remains false. The router reports a wake as outcome woken via claude-inbox and leaves the receipt queued until the hook's output carried the body, which records it offered via next-turn.",
|
|
198
|
+
"A repeated logical send kept its message id, took the durable path because the receipt was already acknowledged, and produced exactly one wake.",
|
|
199
|
+
"Two sessions in one workspace each bound their own inbox; a message addressed to one never woke the other.",
|
|
200
|
+
"An exited session left no registry entry; the next message stayed queued as recipient_unavailable.",
|
|
201
|
+
"A receiving session in bypassPermissions mode was not captured; Claude Code documents that such a session holds each wake whose sender does not attest bypass, and ACC never attests a mode.",
|
|
202
|
+
"Linux and native Windows remain uncaptured."
|
|
216
203
|
]
|
|
217
204
|
}
|
|
218
205
|
}
|
|
219
|
-
]
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
"
|
|
225
|
-
"platform": "darwin-arm64",
|
|
226
|
-
"observedAt": "2026-09-04T03:41:29.688Z",
|
|
227
|
-
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
228
|
-
"sha256": "7513d13b6dc1c6b485d899550f43ae3577cd99fca108f06691f7ad07daf06f03",
|
|
229
|
-
"event": null,
|
|
230
|
-
"tool": null,
|
|
231
|
-
"claims": [
|
|
206
|
+
],
|
|
207
|
+
"productEvidence": {
|
|
208
|
+
"fixture": "fixtures/delivery/claude-code-2.1.282-product-evidence.json",
|
|
209
|
+
"sha256": "1ac87ee547c6fdb38e0bdd62830f1fbd23bca51219a7ba906c7a0a1b2efd1346"
|
|
210
|
+
},
|
|
211
|
+
"historicalFixtures": [
|
|
232
212
|
{
|
|
233
|
-
"
|
|
234
|
-
"
|
|
235
|
-
"outcome": {
|
|
236
|
-
"kind": "native-delivery-observed",
|
|
237
|
-
"idle": "offered",
|
|
238
|
-
"busy": "queued_after_turn",
|
|
239
|
-
"authority": "experimental",
|
|
240
|
-
"limitations": [
|
|
241
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
242
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
243
|
-
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
244
|
-
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
245
|
-
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
246
|
-
]
|
|
247
|
-
}
|
|
213
|
+
"fixture": "fixtures/inbox-wake-2.1.282.json",
|
|
214
|
+
"sha256": "247836aefd6e446670f53e63ed3a29483a9124bfc7b38fc69ba7cd5e866fa2e1"
|
|
248
215
|
},
|
|
249
216
|
{
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
"authority": "experimental",
|
|
257
|
-
"limitations": [
|
|
258
|
-
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
259
|
-
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
260
|
-
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
261
|
-
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
262
|
-
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
263
|
-
]
|
|
264
|
-
}
|
|
217
|
+
"fixture": "fixtures/delivery/claude-code-2.1.258.json",
|
|
218
|
+
"sha256": "c68e84989c02fa0657d0a8669a774ab1e301088d8c7856346cc9739d0fbad228"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
222
|
+
"sha256": "7513d13b6dc1c6b485d899550f43ae3577cd99fca108f06691f7ad07daf06f03"
|
|
265
223
|
}
|
|
266
224
|
]
|
|
267
225
|
}
|