agents-can-communicate 0.8.0 → 0.8.2
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/bin/entrypoints/acc-mcp.mjs +0 -1
- package/bin/entrypoints/acc.mjs +0 -1
- package/docs/ADAPTER_AUTHORING.md +50 -17
- package/docs/ARCHITECTURE.md +9 -6
- package/docs/CAPABILITIES.md +24 -14
- package/docs/CLI.md +22 -3
- package/docs/CONFIGURATION.md +73 -8
- package/docs/GETTING_STARTED.md +6 -3
- package/docs/HOW_IT_WORKS.md +3 -1
- package/docs/PROTOCOL.md +2 -2
- package/docs/RELEASING.md +6 -4
- package/docs/SECURITY_MODEL.md +12 -1
- package/docs/TROUBLESHOOTING.md +34 -7
- package/docs/UPGRADING.md +29 -1
- 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/plugin/skills/acc/SKILL.md +7 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +5 -4
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/allow-rule.mjs +204 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +45 -10
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +14 -4
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-delivery.mjs +12 -17
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-endpoint.mjs +5 -3
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-observed-directories.mjs +62 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-socket-directories.mjs +41 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +6 -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/install.mjs +5 -4
- package/node_modules/@agents-can-communicate/adapter-codex/src/live-permissions.mjs +69 -17
- 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/capabilities.mjs +7 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +2 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +16 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +4 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +85 -77
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +4 -4
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +9 -4
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +11 -4
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +49 -12
- 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/native-session-diagnostics.mjs +20 -10
- 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/status.mjs +26 -2
- 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 +9 -41
- 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-binding.mjs +3 -4
- 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 +12 -1
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/delivery-diagnostics.mjs +0 -2
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +13 -7
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/installer/src/receiver-sockets.mjs +19 -0
- 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 +30 -4
- package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-directory.mjs +56 -25
- package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +6 -2
- package/package.json +1 -1
|
@@ -54,7 +54,6 @@ await serve({
|
|
|
54
54
|
context: {
|
|
55
55
|
service,
|
|
56
56
|
deliveryRouter: createDeliveryRouter({ service, adapters, clock,
|
|
57
|
-
platform: `${process.platform}-${process.arch}`,
|
|
58
57
|
readLivePolicy: ({ adapter }) => readInstalledLivePolicy({ dataHome,
|
|
59
58
|
adapterId: adapter.id }) }),
|
|
60
59
|
workspaceId: descriptor.id,
|
package/bin/entrypoints/acc.mjs
CHANGED
|
@@ -25,7 +25,6 @@ const runtime = {
|
|
|
25
25
|
ids: { next: kind => createId(kind, randomBytes) },
|
|
26
26
|
createDeliveryRouter: ({ service, clock, dataHome }) =>
|
|
27
27
|
createDeliveryRouter({ service, adapters, clock,
|
|
28
|
-
platform: `${process.platform}-${process.arch}`,
|
|
29
28
|
readLivePolicy: ({ adapter }) => readInstalledLivePolicy({ dataHome,
|
|
30
29
|
adapterId: adapter.id }) }),
|
|
31
30
|
// Asked only by `acc config init`, and only when stdout is a terminal. There
|
|
@@ -29,6 +29,7 @@ export function createExampleAdapter() {
|
|
|
29
29
|
detect, install, uninstall, doctor,
|
|
30
30
|
planInstall, // what install would write
|
|
31
31
|
preflightUninstall, // optional read-only removal validation
|
|
32
|
+
inboundSockets, // optional: socket paths a live sender connects to
|
|
32
33
|
normalizeHook, // client payload -> normalised event
|
|
33
34
|
renderContext, // SyncResult -> text
|
|
34
35
|
renderContextResult, // text + ids of complete rendered groups
|
|
@@ -81,10 +82,15 @@ is not evidence for compaction. Counts add no ids to `offeredMessageIds` or
|
|
|
81
82
|
|
|
82
83
|
`client.command` does double duty. `detect.mjs` uses it as the version-probe binary, and
|
|
83
84
|
presence liveness separately walks the hook's process ancestry for the first ancestor whose
|
|
84
|
-
executable basename matches it, to learn the client's own pid.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
executable basename matches it, to learn the client's own pid. A client shipped as a node
|
|
86
|
+
script, such as Gemini CLI, runs as `node`; for a `node` ancestor the walk also matches the
|
|
87
|
+
script it runs: the first argument after any interpreter options, by basename, with a
|
|
88
|
+
`.js`, `.mjs` or `.cjs` extension ignored. A word right after an option written without `=`
|
|
89
|
+
may be that option's value (`--require ./preload.cjs`), so it is also tried and the script
|
|
90
|
+
after it still counts. Declare the name the client actually runs as. A
|
|
91
|
+
command that matches neither resolves nothing, and the failure is silent: the session gets
|
|
92
|
+
`pid: null`, falls back to reading presence by age alone, and is not pinned to its
|
|
93
|
+
generation, with nothing telling you why.
|
|
88
94
|
|
|
89
95
|
## Declare only proven capabilities
|
|
90
96
|
|
|
@@ -148,9 +154,8 @@ to its capabilities:
|
|
|
148
154
|
|
|
149
155
|
```js
|
|
150
156
|
nativeDelivery: {
|
|
151
|
-
|
|
152
|
-
anchors: [{
|
|
153
|
-
protocolContract: "claude-code-inbox-socket-v1" }],
|
|
157
|
+
minimum: "2.1.282",
|
|
158
|
+
anchors: [{ version: "2.1.282", protocolContract: "claude-code-inbox-socket-v1" }],
|
|
154
159
|
knownBad: [],
|
|
155
160
|
activationKinds: ["native-service"],
|
|
156
161
|
offerKind: "wake",
|
|
@@ -159,17 +164,32 @@ nativeDelivery: {
|
|
|
159
164
|
|
|
160
165
|
The rules `defineAdapter` enforces, and the ones the runtime applies:
|
|
161
166
|
|
|
162
|
-
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
`
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-
|
|
167
|
+
- The minimum is the **first passing capture**, never a guessed first vendor release. Every
|
|
168
|
+
anchor must have passing `delivery.livePush` evidence for the same client and version, and
|
|
169
|
+
the minimum must itself be an anchor. The platform an evidence row names is where the
|
|
170
|
+
capture was taken; it is provenance, and the anchor names no platform.
|
|
171
|
+
- There is intentionally **no maximum version** and **no platform**. A newer release is
|
|
172
|
+
admitted, on every platform, only when a current read-only feature probe
|
|
173
|
+
(`probeNativeDelivery()`) and a per-session handshake (`bindNativeSession()`) both report
|
|
174
|
+
the anchored `protocolContract`; `evaluateNativeEligibility()` and
|
|
175
|
+
`validateNativeHandshake()` are those two checks.
|
|
176
|
+
- A prerelease is judged by its release triple, as hook capabilities are: `2.2.0-beta.1` is
|
|
177
|
+
`2.2.0` against the minimum and `knownBad`. `knownBad` names exact versions or inclusive
|
|
178
|
+
intervals. A version that cannot be read at all is `version_unavailable`.
|
|
179
|
+
- Certification evidence still governs every non-native capability;
|
|
172
180
|
`effectiveCapabilities()` is unchanged. The native rule is used for live delivery alone.
|
|
181
|
+
|
|
182
|
+
What may refuse live delivery is exactly three things:
|
|
183
|
+
|
|
184
|
+
- the machine's own probe or per-session handshake failing;
|
|
185
|
+
- a client older than the first passing capture;
|
|
186
|
+
- a regression recorded in `knownBad`.
|
|
187
|
+
|
|
188
|
+
Nothing else: not the platform, not a prerelease suffix, not where the evidence was taken. A
|
|
189
|
+
transport that is technically different on some platform is the probe's fact to report, as
|
|
190
|
+
`native_delivery_unsupported`, never a gap in the captures. The 0.8.0 shape,
|
|
191
|
+
`minimumByPlatform` with a platform on each anchor, is refused by name; the design record is
|
|
192
|
+
`docs/design/2026-09-26-native-delivery-across-platforms.md` in the repository.
|
|
173
193
|
- Native methods return closed facts (`validateNativeActivationPlan()` closes the
|
|
174
194
|
activation plan) and never put vendor data - endpoints, sockets, raw errors - into core.
|
|
175
195
|
|
|
@@ -208,6 +228,19 @@ the refreshed lease. Refresh is not a heartbeat and cannot extend presence beyon
|
|
|
208
228
|
its own expiry. Optional `retireNativeSession()` cleans adapter-owned endpoint state
|
|
209
229
|
after confirmed core retirement; it must remain bounded and fail open for hooks.
|
|
210
230
|
|
|
231
|
+
An adapter whose `offerMessage()` connects to a Unix socket in the recipient's session
|
|
232
|
+
declares where those sockets live with the optional `inboundSockets(context)`. It returns
|
|
233
|
+
absolute paths, directories or sockets, derived from `context.env`, `context.platform` and
|
|
234
|
+
the client homes in the context. It runs synchronously, once per install, doctor or refresh
|
|
235
|
+
command, and must never throw. It may read the adapter's own records under
|
|
236
|
+
`context.stateRoot` when a session can bind outside what the environment implies. Claude Code
|
|
237
|
+
reads its endpoint records there, and keeps each read bounded. The installer
|
|
238
|
+
composes every known adapter's declaration into `context.receiverSockets`. An adapter whose
|
|
239
|
+
client sandboxes the sender's shell allows exactly that list, and reports its outgoing
|
|
240
|
+
permissions configured only while every entry is allowed. It never names another vendor's
|
|
241
|
+
paths itself. Codex does this in its permission profile. Declare a new receiving transport
|
|
242
|
+
here, or every Codex sender gets `transport_permission_denied` against it.
|
|
243
|
+
|
|
211
244
|
A package-shipped passing Codex installed-hook capture additionally references its
|
|
212
245
|
complete real product matrix through the selected provenance record's
|
|
213
246
|
`productEvidence: { fixture, sha256 }`. Package verification checks the actual file,
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -107,8 +107,9 @@ turn.
|
|
|
107
107
|
|
|
108
108
|
The Claude Code inbox wake has installed-client evidence on 2.1.282. Codex LocalDaemon
|
|
109
109
|
has it on 0.152.1 and 0.153.4. Antigravity CLI has it on 1.2.7 and later through a relay
|
|
110
|
-
the agent starts in its own shell. All three use a captured
|
|
111
|
-
current probe and exact session handshake
|
|
110
|
+
the agent starts in its own shell. All three use a captured minimum that applies on every
|
|
111
|
+
platform, a current probe and an exact session handshake; a prerelease is judged by its
|
|
112
|
+
release triple. Claude Code and Codex preserve the ordinary
|
|
112
113
|
client launch. Claude Code verifies its session registry, and Codex verifies its registered
|
|
113
114
|
thread and workspace. Native delivery owns no vendor daemon lifecycle. Gemini CLI and Kimi
|
|
114
115
|
Code have exact-version next-turn evidence only. Grok and generic MCP use inbox polling.
|
|
@@ -226,10 +227,12 @@ modes. It preserves explicit declarations and does not rewrite live leases. Miss
|
|
|
226
227
|
changed generation files and unknown native bindings remain unverified holds.
|
|
227
228
|
A session is also pinned to the generation
|
|
228
229
|
it started with: its hooks delegate to that generation while the pin declares the same
|
|
229
|
-
store contract this one does, and run the active generation otherwise.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
store contract this one does, and run the active generation otherwise. Apart from
|
|
231
|
+
`SessionEnd`, only the client's confirmed death releases a pin, so a session whose client
|
|
232
|
+
process cannot be found is not pinned, and a pin that names no client is reaped. A
|
|
233
|
+
generation directory is reclaimed once no control pointer, live lease, live pin or staging
|
|
234
|
+
hold names it. Parsed help, version, and update recovery remain available when workspace
|
|
235
|
+
admission is unavailable.
|
|
233
236
|
|
|
234
237
|
An independent worker downloads npm packages with lifecycle scripts disabled, checks exact
|
|
235
238
|
stable package identity and the discovered integrity, and health-checks the staged runtime.
|
package/docs/CAPABILITIES.md
CHANGED
|
@@ -20,9 +20,9 @@ Capability honesty separates four questions that are easy to collapse:
|
|
|
20
20
|
A source method or vendor documentation is not certification. A capture applies forward: from
|
|
21
21
|
the version that recorded it until a later capture changes that capability, and to every
|
|
22
22
|
platform until one of them records something of its own. A client older than every capture
|
|
23
|
-
degrades to false, and so does a capability a capture recorded as failing. Native
|
|
24
|
-
minimum
|
|
25
|
-
stronger peer's capability.
|
|
23
|
+
degrades to false, and so does a capability a capture recorded as failing. Native live
|
|
24
|
+
delivery reads its captured minimum the same way: on every platform, with a prerelease judged
|
|
25
|
+
by its release triple. No weaker session inherits a stronger peer's capability.
|
|
26
26
|
|
|
27
27
|
Run `acc doctor` in the project when observed behavior differs from this page. It reports
|
|
28
28
|
the installed client version, platform, effective capability, and fallback instead of
|
|
@@ -53,18 +53,27 @@ The native rows are `no` at the hook versions this matrix names.
|
|
|
53
53
|
Separate installed-client captures establish Codex `livePush` on 0.152.1 and
|
|
54
54
|
0.153.4, Claude Code `livePush` on 2.1.282 through the session inbox, and
|
|
55
55
|
Antigravity CLI `livePush` on 1.2.7 and later through a relay the agent starts in its own shell.
|
|
56
|
-
Native eligibility uses the captured
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
Native eligibility uses the captured minimum, a current feature probe, and an exact
|
|
57
|
+
per-session handshake. It is experimental and requires recipient opt-in.
|
|
58
|
+
|
|
59
|
+
What may refuse live delivery is exactly three things:
|
|
60
|
+
|
|
61
|
+
- the machine's own probe or per-session handshake failing;
|
|
62
|
+
- a client older than the first passing capture;
|
|
63
|
+
- a regression recorded in `knownBad`.
|
|
64
|
+
|
|
65
|
+
Nothing else: not the platform, not a prerelease suffix, not where the evidence was taken.
|
|
66
|
+
A platform whose transport is technically different is refused by the probe as a fact about
|
|
67
|
+
that transport, which is what Claude Code's named pipe on native Windows is. Codex, Claude Code and Antigravity CLI reply through `acc reply`. Their native
|
|
59
68
|
`replyRoute` remains false.
|
|
60
69
|
|
|
61
70
|
The limitations belong next to the adapters they affect:
|
|
62
71
|
|
|
63
72
|
| Adapter | Exact limitation and evidence |
|
|
64
73
|
|---|---|
|
|
65
|
-
| Antigravity CLI | 1.2.7 on darwin-arm64, captured in print mode, and every later release by the forward rule. Only `SessionStart`, `PreInvocation`, `PostInvocation` and `Stop` load; `SessionEnd`, `PreToolUse` and `PostToolUse` are accepted into the config file and silently dropped, so there is no tool guard and no session-end deregistration - a session goes offline by presence age or an explicit `acc finish`. Payloads carry no `hook_event_name`, so each registered command passes its own event name. The end-of-turn `Stop` continuation reaches the model and is a bounded nudge, not a gate: ACC continues a turn at most once and fails open, and the client caps consecutive continuations itself (vendor 1.1.9). `agy agentapi send-message` can wake an idle session - captured - but only with that session's language-server address and CSRF token, which exist in the agent's own shell and in no hook. ACC does not take that token, so live push and reply routing are false. A peer message that arrives while the model writes its last answer is carried by the `Stop` continuation instead. A write that parses can register nothing, so install and doctor read `agy -p "/hooks"` back instead of trusting the file. Live push (1.2.7, darwin-arm64, TUI only, experimental, recorded opt-in) runs through a relay the agent starts once per conversation from its own shell - the only process holding the session endpoint - after ACC's context asks it to, up to three times while none is serving; the operator approves that command at the client's permission prompt. An idle session wakes; a busy one sees the message after its running answer, or at the next model invocation when the turn waits on a tool. Print mode and the first session in a folder trusted at that launch get no relay. |
|
|
74
|
+
| Antigravity CLI | 1.2.7 on darwin-arm64, captured in print mode, and every later release by the forward rule. Only `SessionStart`, `PreInvocation`, `PostInvocation` and `Stop` load; `SessionEnd`, `PreToolUse` and `PostToolUse` are accepted into the config file and silently dropped, so there is no tool guard and no session-end deregistration - a session goes offline by presence age or an explicit `acc finish`. Payloads carry no `hook_event_name`, so each registered command passes its own event name. The end-of-turn `Stop` continuation reaches the model and is a bounded nudge, not a gate: ACC continues a turn at most once and fails open, and the client caps consecutive continuations itself (vendor 1.1.9). `agy agentapi send-message` can wake an idle session - captured - but only with that session's language-server address and CSRF token, which exist in the agent's own shell and in no hook. ACC does not take that token, so live push and reply routing are false. A peer message that arrives while the model writes its last answer is carried by the `Stop` continuation instead. A write that parses can register nothing, so install and doctor read `agy -p "/hooks"` back instead of trusting the file. Live push (1.2.7, darwin-arm64, TUI only, experimental, recorded opt-in) runs through a relay the agent starts once per conversation from its own shell - the only process holding the session endpoint - after ACC's context asks it to, up to three times while none is serving; the operator approves that command at the client's permission prompt. An idle session wakes; a busy one sees the message after its running answer, or at the next model invocation when the turn waits on a tool. Print mode and the first session in a folder trusted at that launch get no relay. The client asks before every shell command (1.2.12), so install always adds the prefix rule `command(<wrapper>)` to the client's settings to let the woken agent's ACC commands run without that prompt. A woken session answered with no prompt under that rule on 1.2.12 (2026-09-28); print mode with it has not been captured. |
|
|
66
75
|
| Codex | Next-turn context, captured on 0.147.0, requires plugin trust. The observed stock 0.153.4 upgrade from ACC 0.3.1 to 0.4 required fresh review of five modified hook definitions; a subsequent restart retained all five active (activation evidence, not new event certification). LocalDaemon native delivery was captured through the installed package on 0.152.1 and 0.153.4, darwin-arm64; minimum 0.152.1, recorded opt-in, current feature probe and exact thread/cwd/process/version/protocol checks are required. Ordinary launch preserves the receiver workspace without ACC arguments or daemon ownership. Embedded or unreachable sessions keep their inbox. Native `replyRoute` remains false. |
|
|
67
|
-
| Claude Code | 2.1.233 next-turn delivery waits for the next user prompt. From 2.1.282 on darwin-arm64, `delivery.livePush` is a live capability behind the native contract (experimental, off until opted in). ACC wakes the session through the inbox socket that Claude Code opens for every session, with one line of fixed ACC text and the message id. An idle session starts a turn. A busy session takes the wake between two tool calls. Each delivered wake fires `UserPromptSubmit`, so the next-turn hook shows the body and records the receipt `offered` via `next-turn`. The model answers with `acc reply`, so `delivery.replyRoute` stays false. A session in `bypassPermissions` mode holds each wake for approval unless `crossSessionInbound` is `accept`, and `refuse` drops wakes. Native Windows keeps next-turn delivery: its inbox is a named pipe that requires an auth line, and it is uncaptured. Linux is uncaptured. |
|
|
76
|
+
| Claude Code | 2.1.233 next-turn delivery waits for the next user prompt. From 2.1.282, captured on darwin-arm64 and applied on every platform whose inbox is a Unix socket, `delivery.livePush` is a live capability behind the native contract (experimental, off until opted in). ACC wakes the session through the inbox socket that Claude Code opens for every session, with one line of fixed ACC text and the message id. An idle session starts a turn. A busy session takes the wake between two tool calls. Each delivered wake fires `UserPromptSubmit`, so the next-turn hook shows the body and records the receipt `offered` via `next-turn`. The model answers with `acc reply`, so `delivery.replyRoute` stays false. A session in `bypassPermissions` mode holds each wake for approval unless `crossSessionInbound` is `accept`, and `refuse` drops wakes. Native Windows keeps next-turn delivery: its inbox is a named pipe that requires an auth line, and it is uncaptured. Linux is uncaptured. |
|
|
68
77
|
| Gemini CLI | Package-shipped next-turn certification starts at 0.57.0. Its TUI has no captured external wake or queue interface and `--acp` changes launch ownership, so native delivery is fallback-only; live push and reply routing remain false. |
|
|
69
78
|
| Grok | The Grok 1.0.24 installed-client check observed own CLI arguments after a terminal result, followed by owned work, message, and finish calls. This identity-only path does not certify peer-context injection. Documentation-shaped payloads do not count as real captures. The public leader surface exposed no proven addressed injection into an ordinary TUI session, so native delivery is `awaiting_compatibility_capture`; all capabilities remain false. |
|
|
70
79
|
| Kimi Code | Next-turn and guard evidence was captured on 0.36.1, plus a 60-second heartbeat. Its server/queue APIs do not prove a transparent binding to an independently opened session, so native delivery is fallback-only. |
|
|
@@ -93,10 +102,11 @@ demand without a client heartbeat. Retirement is final: neither route may revive
|
|
|
93
102
|
retired binding, a closed session or an old generation. Delivery lease refresh does
|
|
94
103
|
not renew participant presence.
|
|
95
104
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
Codex LocalDaemon, the Claude Code inbox wake and the Antigravity CLI relay have captured
|
|
106
|
+
experimental live delivery, on darwin-arm64. Those captures set the minimum that applies on
|
|
107
|
+
every platform; on a host they never named, the probe and the per-session handshake decide,
|
|
108
|
+
and a transport that does not answer keeps the durable inbox. Other adapters retain their
|
|
109
|
+
separately certified next-turn paths or inbox polling.
|
|
100
110
|
|
|
101
111
|
Codex's 120-second delivery lease can refresh on demand for the same live endpoint;
|
|
102
112
|
it does not extend the 24-hour participant presence limit. A TUI exit can leave its
|
|
@@ -116,8 +126,8 @@ policy:
|
|
|
116
126
|
| `all` | every addressed message kind may use live push |
|
|
117
127
|
|
|
118
128
|
The default is `off`. `acc install --delivery actionable|all` records recipient consent.
|
|
119
|
-
Current activation remains off when the
|
|
120
|
-
|
|
129
|
+
Current activation remains off when the captured minimum or the feature probe does not
|
|
130
|
+
qualify; that temporary failure does not erase the requested policy. Each
|
|
121
131
|
session must pass its own generation-bound handshake. Every adapter reads consent from the
|
|
122
132
|
installation record and rereads it at hooks and before offers, so a long-running vendor
|
|
123
133
|
process cannot retain permission through an old binding snapshot.
|
package/docs/CLI.md
CHANGED
|
@@ -104,9 +104,23 @@ got. Two sessions of one participant show the same numbers, so read the workspac
|
|
|
104
104
|
`<n> offered, not retrieved` when that number is above zero. Offered is not read: a
|
|
105
105
|
transport took the bytes, and the model may or may not have looked.
|
|
106
106
|
|
|
107
|
-
A
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
A session is `stale` when no turn has sent a heartbeat for three heartbeat cadences. Each
|
|
108
|
+
session row says what a message to such a session meets. `processTracked` is true when ACC
|
|
109
|
+
knows the client process. A dead process makes the session `offline`, so a stale session with
|
|
110
|
+
a tracked process is idle. `liveDelivery` is true when the session has a live delivery
|
|
111
|
+
binding, and `liveLeaseCurrent` says whether the binding's lease is still valid. A stale
|
|
112
|
+
session wakes on send when the lease is valid, or when its adapter can verify the receiver
|
|
113
|
+
again: the router does that for a lapsed lease before it offers. The text line counts stale
|
|
114
|
+
sessions by that result:
|
|
115
|
+
`5 live (2 idle, wake on send; 1 idle until next turn; 1 idle, inbox only)`. `not answering`
|
|
116
|
+
is kept for a stale session whose process ACC does not know.
|
|
117
|
+
|
|
118
|
+
A participant with no open session is left out, unless messages still wait for it: queued,
|
|
119
|
+
or offered by a live transport and not yet shown again, so that its next turn would show
|
|
120
|
+
them. A message the next-turn hook already showed does not wait, since nothing will reach the
|
|
121
|
+
participant for it again. A waiting participant's latest session stays listed as `offline`,
|
|
122
|
+
with that number as `waiting`, and with `endReason` when the client said why the session
|
|
123
|
+
ended, such as `"clear"` for Claude Code's `/clear`. The text line names each one:
|
|
110
124
|
`waiting for a closed session: claude_code-b (cleared, 2)`. `acc status --all` lists every
|
|
111
125
|
session. Default `sync` reads
|
|
112
126
|
events after a 16-digit event cursor (100 by
|
|
@@ -370,6 +384,11 @@ Your existing npm or Homebrew command and shell profiles remain unchanged.
|
|
|
370
384
|
An older consent that covered service start receives one expanded choice for the download.
|
|
371
385
|
An accepted or declined answer persists. To change a declined answer, use
|
|
372
386
|
`acc install --adapter codex --delivery actionable` (or `all` for that policy).
|
|
387
|
+
Installing the Antigravity adapter always adds one prefix rule for ACC's wrapper to
|
|
388
|
+
`~/.gemini/antigravity-cli/settings.json`, so ACC's commands run there without an approval
|
|
389
|
+
prompt; nothing asks about it and the delivery policy does not change it. Uninstall removes
|
|
390
|
+
exactly that rule. See
|
|
391
|
+
[Antigravity CLI command approval](CONFIGURATION.md#antigravity-cli-command-approval).
|
|
373
392
|
Explicit `--delivery actionable|all` also approves a required download on supported clients.
|
|
374
393
|
Dry runs, delivery off, doctor, automatic refresh, and message delivery do not download
|
|
375
394
|
Codex or start its service. Uninstall does not remove Codex or stop the shared vendor daemon.
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -131,8 +131,9 @@ The allowed values are `off`, `actionable`, and `all`; the default is `off`. Thi
|
|
|
131
131
|
does not belong in `acc.workspace.json`, where a pull request could opt someone else into
|
|
132
132
|
spending a turn. It also cannot create a capability. Every adapter reads live-delivery
|
|
133
133
|
consent from this installation record, and only from it. Exact-version evidence governs
|
|
134
|
-
ordinary hook features. Claude Code live delivery separately requires
|
|
135
|
-
|
|
134
|
+
ordinary hook features. Claude Code live delivery separately requires version 2.1.282 or
|
|
135
|
+
newer on macOS or Linux (on native Windows its inbox is a named pipe, so delivery stays
|
|
136
|
+
next-turn), and a current feature probe before installation applies the requested
|
|
136
137
|
policy. If those install-time checks fail, effective policy remains `off` and the installer
|
|
137
138
|
reports next-turn or inbox fallback. Each later session must also pass its own
|
|
138
139
|
generation-bound handshake. A failed session handshake clears or refuses that binding and
|
|
@@ -146,7 +147,7 @@ each wake for your approval unless its `crossSessionInbound` setting is `accept`
|
|
|
146
147
|
never overrides them. See
|
|
147
148
|
[held or dropped wakes](TROUBLESHOOTING.md#a-claude-code-session-holds-or-drops-acc-wakes).
|
|
148
149
|
|
|
149
|
-
Codex LocalDaemon delivery separately requires
|
|
150
|
+
Codex LocalDaemon delivery separately requires Codex 0.152.1 or newer, a
|
|
150
151
|
current feature probe, and exact thread, canonical cwd, process, version and protocol
|
|
151
152
|
checks. On Codex 0.154.0 or newer, explicit complete setup can download a missing matching
|
|
152
153
|
standalone package and prepare a definitely absent service. The setup choice names the
|
|
@@ -160,15 +161,47 @@ Unavailable or ineligible sessions retain durable inbox fallback. Use
|
|
|
160
161
|
### Codex outgoing permissions
|
|
161
162
|
|
|
162
163
|
Receiving a native message and sending from the agent's sandbox are separate operations.
|
|
163
|
-
On Codex 0.153.4 or newer
|
|
164
|
+
On Codex 0.153.4 or newer, live opt-in also configures outgoing access
|
|
164
165
|
for default workspace permissions. This happens even when the daemon is not yet available.
|
|
165
166
|
Installation, its preview, and the interactive consent question disclose this change.
|
|
166
167
|
|
|
167
168
|
ACC selects a permission profile named `acc-workspace`, extending `:workspace`. It grants
|
|
168
|
-
write access to the ACC state directory and allows only the
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
write access to the ACC state directory and allows only the Unix sockets ACC delivers to.
|
|
170
|
+
Each receiving adapter declares its own, and the profile lists all of them even when an
|
|
171
|
+
install names Codex alone:
|
|
172
|
+
|
|
173
|
+
| Receiver | Allowed path |
|
|
174
|
+
|---|---|
|
|
175
|
+
| Codex | the control socket, `<CODEX_HOME>/app-server-control/app-server-control.sock` |
|
|
176
|
+
| Antigravity CLI relay | the ACC channel directory, `/tmp/acc-ch-<uid>` on macOS |
|
|
177
|
+
| Claude Code inbox | `/tmp/cc-socks`, `/tmp/cc-socks-<uid>`, `$XDG_RUNTIME_DIR/cc-socks` or else `$CLAUDE_CODE_TMPDIR/cc-socks` when set, `/run/user/<uid>/cc-socks` on Linux, and the directory of every Claude Code inbox ACC has bound on this machine |
|
|
178
|
+
|
|
179
|
+
ACC writes each path with its existing parent resolved, so on macOS the entries read
|
|
180
|
+
`/private/tmp/...`. Codex resolves a granted path only if it exists when Codex builds the
|
|
181
|
+
sandbox policy, and the sandbox compares resolved paths: a `/tmp/cc-socks-<uid>` entry
|
|
182
|
+
written before that directory existed never matched. A socket that is a link, such as the
|
|
183
|
+
Codex control socket, keeps its own name.
|
|
184
|
+
|
|
185
|
+
A command in the Codex sandbox can therefore connect to any of your Claude Code sessions'
|
|
186
|
+
inbox sockets. Claude Code's own inbound settings still decide what a received frame may do,
|
|
187
|
+
and ACC checks Claude Code's session registry before each wake it sends.
|
|
188
|
+
|
|
189
|
+
The profile enables networking through `features.network_proxy = true`, with no external
|
|
190
|
+
domains allowed. The proxy and socket grants must stay together: enabling networking
|
|
191
|
+
without the proxy changes its scope.
|
|
192
|
+
|
|
193
|
+
Doctor reports outgoing delivery as configured only while the profile allows every socket
|
|
194
|
+
above. A profile that ACC 0.8.0 or 0.8.1 wrote lacks the Claude Code inbox directories;
|
|
195
|
+
doctor names the missing paths and `acc install --adapter codex`. That command and
|
|
196
|
+
`acc update` rewrite ACC's own profile under the recorded delivery policy, `off` included.
|
|
197
|
+
Start a new Codex session afterwards.
|
|
198
|
+
|
|
199
|
+
The environment variables above are read from the process that runs `acc install` or
|
|
200
|
+
`acc doctor`. A Claude Code session started with its own `CLAUDE_CODE_TMPDIR` or
|
|
201
|
+
`XDG_RUNTIME_DIR` binds its inbox elsewhere. ACC learns that directory when its hooks first
|
|
202
|
+
bind the session, from its own endpoint record. From then on doctor names the directory
|
|
203
|
+
until `acc install --adapter codex` or `acc update` adds it. Only a directory named as Claude
|
|
204
|
+
Code names its inboxes, `cc-socks` or `cc-socks-<uid>`, is taken from a record.
|
|
172
205
|
|
|
173
206
|
An existing legacy workspace-write configuration is migrated only when its sole writable
|
|
174
207
|
root is ACC's state directory. Custom permission/configuration profiles, additional roots,
|
|
@@ -184,6 +217,38 @@ generated permission component is unchanged.
|
|
|
184
217
|
If any component was edited or another setting depends on it, ACC preserves the entire
|
|
185
218
|
bundle and reports it for review. Plugin registration can still be removed independently.
|
|
186
219
|
|
|
220
|
+
### Antigravity CLI command approval
|
|
221
|
+
|
|
222
|
+
Antigravity CLI asks for approval before each shell command, ACC's included. A session that
|
|
223
|
+
live delivery wakes while you are away would therefore stop at the agent's first ACC command,
|
|
224
|
+
and the peer would get no answer until someone approved it. So when `acc install` installs
|
|
225
|
+
the Antigravity adapter, it always adds one rule to the client's own settings:
|
|
226
|
+
|
|
227
|
+
```text
|
|
228
|
+
~/.gemini/antigravity-cli/settings.json
|
|
229
|
+
permissions.allow: command(<home>/.gemini/config/acc/acc-cli.sh)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
A one-word rule is a prefix: every command that starts with that path runs without asking.
|
|
233
|
+
The agent then runs every ACC command without asking you, including one a peer's message
|
|
234
|
+
prompts; every other command still asks. Install does not ask about the rule, and the
|
|
235
|
+
delivery policy does not change it: it is part of ACC's Antigravity integration, as its hooks
|
|
236
|
+
are.
|
|
237
|
+
|
|
238
|
+
ACC keeps every other key and rule in the file, leaves a rule you already had as yours, and
|
|
239
|
+
records what it added in its own data home. `acc uninstall` removes every copy of that rule (one
|
|
240
|
+
in the same words cannot be told from ACC's), and a
|
|
241
|
+
container or file ACC created only if nothing else is in it. A rule removed by hand comes back
|
|
242
|
+
at the next `acc install` or automatic refresh; uninstall is what keeps it out. A file that is
|
|
243
|
+
not valid JSON, or whose `permissions.allow` is not a list, is left as it is and reported. The
|
|
244
|
+
client reads the file when it starts, so restart `agy` after install.
|
|
245
|
+
|
|
246
|
+
The rule matches only a command whose first word is the path without quotes, so ACC's skill
|
|
247
|
+
for this client writes the path without quotes. When your home path contains a space or a
|
|
248
|
+
shell metacharacter, the path needs quotes, no rule can match it, and ACC adds none.
|
|
249
|
+
`acc doctor` reports the rule as present, absent, or unable to apply, and asks for
|
|
250
|
+
`acc install --adapter antigravity` when ACC's rule is missing.
|
|
251
|
+
|
|
187
252
|
## Override local paths and identity
|
|
188
253
|
|
|
189
254
|
Nothing in `acc.workspace.json` says where state is stored, and nothing there can — that is
|
package/docs/GETTING_STARTED.md
CHANGED
|
@@ -43,7 +43,7 @@ session after that review; changed hook definitions may require trust again.
|
|
|
43
43
|
|
|
44
44
|
For Codex live delivery, follow the outgoing-permission and local-service instructions
|
|
45
45
|
from install/doctor, then start a new session. Default workspace permissions can be
|
|
46
|
-
configured automatically on Codex 0.153.4 or newer
|
|
46
|
+
configured automatically on Codex 0.153.4 or newer. Custom settings are
|
|
47
47
|
preserved; see [outgoing permissions](CONFIGURATION.md#codex-outgoing-permissions).
|
|
48
48
|
With legacy sandbox settings, the named ACC state directory must also be in
|
|
49
49
|
`sandbox_workspace_write.writable_roots` in the config the installer identifies.
|
|
@@ -58,7 +58,7 @@ hooks wherever the client is at or after a captured version.
|
|
|
58
58
|
An interactive install asks one default-No question for all selected clients that need a
|
|
59
59
|
choice. Use `--delivery actionable|all` for explicit noninteractive consent. Use
|
|
60
60
|
`--delivery off` to disable incoming automatic requests. A dry run does not ask, write
|
|
61
|
-
configuration, download Codex, or start a service. On macOS
|
|
61
|
+
configuration, download Codex, or start a service. On macOS or Linux with Codex 0.154.0 or newer,
|
|
62
62
|
the choice includes downloading a missing standalone package from OpenAI. ACC selects the
|
|
63
63
|
matching version and keeps your existing npm or Homebrew command and shell profiles.
|
|
64
64
|
When supported Codex service preparation succeeds, it
|
|
@@ -150,7 +150,10 @@ infrastructure, recorded opt-in, and a verified session. Supported explicit setu
|
|
|
150
150
|
prepare a missing service. Start the client with your normal command. A loaded daemon thread can receive
|
|
151
151
|
messages after its terminal exits. Antigravity CLI 1.2.7 and later has one too: with delivery enabled,
|
|
152
152
|
ACC's context asks the agent to start a relay from its own shell, up to three times while
|
|
153
|
-
none is running, and you approve that command at the client's prompt.
|
|
153
|
+
none is running, and you approve that command at the client's prompt. Antigravity also asks
|
|
154
|
+
before each shell command, so install adds a rule that lets ACC's own commands run without
|
|
155
|
+
that prompt, and a woken session can answer while you are away; see
|
|
156
|
+
[Antigravity CLI command approval](CONFIGURATION.md#antigravity-cli-command-approval).
|
|
154
157
|
[Capabilities](CAPABILITIES.md) explains policy, versions and fallback.
|
|
155
158
|
|
|
156
159
|
Delivery evidence is deliberately narrow: `queued -> offered -> retrieved -> acknowledged`.
|
package/docs/HOW_IT_WORKS.md
CHANGED
|
@@ -123,7 +123,9 @@ All recipients have the same durable record, but adapters expose different accel
|
|
|
123
123
|
endpoint exists only in the agent's own shell, so ACC's context asks the agent once per
|
|
124
124
|
conversation to start a relay; the user approves that command. The relay keeps the endpoint
|
|
125
125
|
in memory, wakes an idle session with a fenced peer message, holds one for a busy session,
|
|
126
|
-
and ends with the client. It is experimental, off by default, and can spend tokens.
|
|
126
|
+
and ends with the client. It is experimental, off by default, and can spend tokens. The
|
|
127
|
+
woken agent's ACC commands run without the client's approval prompt because install adds
|
|
128
|
+
one allow rule for ACC's wrapper.
|
|
127
129
|
|
|
128
130
|
Grok, generic MCP, unsupported versions and uncaptured platforms use inbox polling.
|
|
129
131
|
[Capabilities](CAPABILITIES.md) lists evidence and fallback.
|
package/docs/PROTOCOL.md
CHANGED
|
@@ -316,8 +316,8 @@ The recipient owns `livePolicy` because native push may start a model turn:
|
|
|
316
316
|
|
|
317
317
|
Default is `off`. Policy never creates a capability. The router requires one
|
|
318
318
|
current eligible recipient generation, supported client evidence, a verified
|
|
319
|
-
binding and adapter acceptance. The Claude Code inbox wake uses a
|
|
320
|
-
|
|
319
|
+
binding and adapter acceptance. The Claude Code inbox wake uses a 2.1.282 minimum,
|
|
320
|
+
captured on darwin-arm64 and applied on every platform. Its binding requires the same pid and socket in Claude Code's
|
|
321
321
|
session registry, and every refresh and wake also requires the same session id. Codex LocalDaemon uses a 0.152.1 minimum, confirmed
|
|
322
322
|
through installed-product captures on 0.152.1 and 0.153.4. Recorded consent and
|
|
323
323
|
exact thread, cwd, process, version and protocol verification govern every Codex session.
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Releasing
|
|
2
2
|
|
|
3
3
|
Use this procedure to build one auditable npm artifact, verify that exact tarball, and keep
|
|
4
|
-
its evidence tied to the commit that supplied its bytes. The
|
|
5
|
-
|
|
4
|
+
its evidence tied to the commit that supplied its bytes. The commands derive the version
|
|
5
|
+
from `package.json` so the filename cannot drift.
|
|
6
6
|
|
|
7
7
|
```mermaid
|
|
8
8
|
graph LR
|
|
@@ -118,8 +118,10 @@ work belongs under `Unreleased` and gets a new candidate record.
|
|
|
118
118
|
## Capture only capabilities you observed
|
|
119
119
|
|
|
120
120
|
Run native real-client checks on the exact versions and platforms recorded in
|
|
121
|
-
retained fixtures.
|
|
122
|
-
|
|
121
|
+
retained fixtures. A capture records evidence, and it never gates beyond that floor: what it
|
|
122
|
+
proves applies from its version onward and on every platform, and what refuses a client is
|
|
123
|
+
the machine's own probe or handshake, an older client, or a recorded regression.
|
|
124
|
+
The Claude Code inbox wake uses its captured minimum plus a current probe and
|
|
123
125
|
per-session handshake. Its passing capture is a real-client product run of the packed
|
|
124
126
|
candidate, launched with the ordinary command and installed hooks. Codex LocalDaemon
|
|
125
127
|
uses a separate 0.152.1 minimum with installed-product captures on 0.152.1 and
|
package/docs/SECURITY_MODEL.md
CHANGED
|
@@ -94,12 +94,22 @@ user's: a session in `bypassPermissions` mode holds each wake for approval unles
|
|
|
94
94
|
`crossSessionInbound` is `accept`, and `refuse` drops wakes.
|
|
95
95
|
|
|
96
96
|
On captured Codex/macOS configurations, live opt-in also grants outgoing access to ACC's
|
|
97
|
-
state and local Unix sockets through a deny-by-default network proxy.
|
|
97
|
+
state and local Unix sockets through a deny-by-default network proxy. The sockets are the
|
|
98
|
+
ones ACC delivers to, which include the directories where Claude Code binds each session's
|
|
99
|
+
inbox: a command in the Codex sandbox can connect to those sockets, and Claude Code's own
|
|
100
|
+
inbound settings decide what a received frame may do. Custom permission
|
|
98
101
|
policies remain user-owned. Selection, proxy and grants are restored together only while
|
|
99
102
|
unchanged; edited or newly referenced settings remain intact. See
|
|
100
103
|
[Codex outgoing permissions](CONFIGURATION.md#codex-outgoing-permissions). Configuration
|
|
101
104
|
readiness does not prove that an active session's overrides permit a live offer.
|
|
102
105
|
|
|
106
|
+
Antigravity CLI asks before each shell command. Installing its adapter adds one prefix rule
|
|
107
|
+
to that client's `permissions.allow`, for ACC's own wrapper path only. The agent then runs
|
|
108
|
+
every ACC command without a prompt, including one that a peer's message prompts. Every other
|
|
109
|
+
command still asks. ACC records the one rule it added and uninstall removes only that rule.
|
|
110
|
+
It never writes a settings file that it cannot parse. See
|
|
111
|
+
[Antigravity CLI command approval](CONFIGURATION.md#antigravity-cli-command-approval).
|
|
112
|
+
|
|
103
113
|
## Claims
|
|
104
114
|
|
|
105
115
|
CLI claims default to advisory. Guarded enforcement must be requested explicitly and
|
|
@@ -175,6 +185,7 @@ caller chooses to send. The sender remains responsible for that content.
|
|
|
175
185
|
| Symlink or traversal escapes a managed root | Per-segment containment, no-follow reads, closed config schema | Host filesystem compromise is out of scope |
|
|
176
186
|
| Claim denial of service | Leases, visible owner, explicit authority release | Deliberate abuse by a trusted local peer is social |
|
|
177
187
|
| Installer removes user configuration | Content-hashed ownership and byte comparison | User must remove modified leftovers manually |
|
|
188
|
+
| Peer message leads an Antigravity agent to run ACC commands unasked | Allow rule scoped to ACC's wrapper; every other command still asks; uninstall removes it | A peer can still prompt ACC actions, such as a reply or a claim, that nobody approves one by one |
|
|
178
189
|
| False delivery claim | Record-first order, transport-owned `offered`, recipient-owned retrieval/ack, mutation tests | Crash after offer before commit can cause duplicate display |
|
|
179
190
|
| Native endpoint leaks | Ephemeral opaque reference, user-only local endpoint, status redaction | Same-user local processes are outside the trust boundary |
|
|
180
191
|
| MCP client impersonates another session | Identity fixed by launch env, closed tool schemas | A compromised launch config already controls that client |
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -138,8 +138,16 @@ client-owned hook and trust review.
|
|
|
138
138
|
If a reply stays queued with `transport_permission_denied`, the sender's permissions
|
|
139
139
|
blocked local transport. This is distinct from an unavailable recipient. The message was
|
|
140
140
|
recorded successfully; the error does not mean it was read or acknowledged.
|
|
141
|
-
On Codex 0.153.4 or newer
|
|
141
|
+
On Codex 0.153.4 or newer, rerun `acc install --adapter codex` with existing
|
|
142
142
|
live consent. Add `--delivery actionable` when new consent is required, then start a new session.
|
|
143
|
+
With ACC 0.8.0 or 0.8.1, every live offer from a Codex session to Claude Code failed this way:
|
|
144
|
+
the Codex profile did not allow Claude Code's inbox directories, and doctor still reported it
|
|
145
|
+
configured. Doctor now names the missing paths. `acc install --adapter codex` or `acc update`
|
|
146
|
+
rewrites the profile; start a new Codex session so it runs under the new one.
|
|
147
|
+
A Claude Code session started with its own `CLAUDE_CODE_TMPDIR` or `XDG_RUNTIME_DIR` binds its
|
|
148
|
+
inbox outside the directories your shell's environment implies. After ACC first binds that
|
|
149
|
+
session, doctor names its directory. Run `acc install --adapter codex` again, then start a new
|
|
150
|
+
Codex session.
|
|
143
151
|
Doctor's `outgoingDelivery` reports the installed permission configuration separately
|
|
144
152
|
from `nativeDelivery.runtime`: an active receiving channel does not establish outgoing
|
|
145
153
|
access. Custom policies and active-session overrides remain unverified; inspect the config
|
|
@@ -240,8 +248,8 @@ local socket permissions as well; a writable state directory alone is insufficie
|
|
|
240
248
|
## Gemini does not guard a write
|
|
241
249
|
|
|
242
250
|
Default and `plan` modes expose no write tool to the model. `auto_edit` exposes edit tools;
|
|
243
|
-
shell availability depends on approval mode.
|
|
244
|
-
|
|
251
|
+
shell availability depends on approval mode. Gemini CLI next-turn delivery is certified from
|
|
252
|
+
0.57.0 onward, on every platform; an older client still uses inbox.
|
|
245
253
|
|
|
246
254
|
From 0.55 onwards there is a quieter cause with the same symptom: an untrusted folder. The
|
|
247
255
|
client prints `Approval mode overridden to "default" because the current folder is not
|
|
@@ -301,10 +309,11 @@ agy -p "/skills" --output-format json
|
|
|
301
309
|
|
|
302
310
|
An agent that receives a peer message in print mode (`agy -p`) cannot answer it on its own.
|
|
303
311
|
It forms the right `acc reply` command from the skill, and print mode denies every command
|
|
304
|
-
because it cannot ask for approval; the client says so on stderr
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
312
|
+
because it cannot ask for approval; the client says so on stderr and names
|
|
313
|
+
`permissions.allow` in its settings. The TUI asks instead. The one rule ACC's install adds
|
|
314
|
+
there is described in
|
|
315
|
+
[Antigravity CLI command approval](CONFIGURATION.md#antigravity-cli-command-approval); it was
|
|
316
|
+
captured in the TUI, and print mode with it has not been captured.
|
|
308
317
|
|
|
309
318
|
## Antigravity never wakes while idle
|
|
310
319
|
|
|
@@ -322,6 +331,24 @@ Live delivery needs four things, and `acc doctor` shows each:
|
|
|
322
331
|
active. A relay ends with its client; nothing is left running after the TUI exits or after
|
|
323
332
|
`acc uninstall`.
|
|
324
333
|
|
|
334
|
+
## Antigravity wakes and never answers
|
|
335
|
+
|
|
336
|
+
A woken session that stops at an approval prompt answers only once someone approves its
|
|
337
|
+
first ACC command. `acc doctor` prints an `Antigravity CLI inbound:` line with what it found in
|
|
338
|
+
`~/.gemini/antigravity-cli/settings.json`:
|
|
339
|
+
|
|
340
|
+
- **No rule.** Each ACC command waits for approval. ACC's install writes the rule, so it was
|
|
341
|
+
removed since or the install did not reach this file: run `acc install --adapter antigravity`,
|
|
342
|
+
then restart `agy`. Doctor lists this under what to run next.
|
|
343
|
+
- **The rule is present.** The client reads it at startup, so a session started before it was
|
|
344
|
+
added still asks; restart `agy`. If a prompt still appears, check the command the agent
|
|
345
|
+
ran: a path in quotes, or a command wrapped in `sh -c`, matches no rule.
|
|
346
|
+
- **The rule cannot apply.** The path to ACC's wrapper contains a space or a shell
|
|
347
|
+
metacharacter, so it needs quotes, and a quoted first word matches no rule. ACC adds no
|
|
348
|
+
rule and approvals stay manual.
|
|
349
|
+
- **The file cannot be read.** ACC leaves an invalid `settings.json` as it is. Repair it, then
|
|
350
|
+
run `acc install --adapter antigravity` again.
|
|
351
|
+
|
|
325
352
|
## Grok shows no injected message
|
|
326
353
|
|
|
327
354
|
Grok discards UserPromptSubmit context. On the observed 1.0.24 client, run public
|