agents-can-communicate 0.8.5 → 0.9.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.
Files changed (142) hide show
  1. package/README.md +11 -7
  2. package/bin/entrypoints/acc-antigravity-relay.mjs +2 -4
  3. package/bin/entrypoints/acc-hook.mjs +33 -19
  4. package/bin/entrypoints/hook-output.mjs +14 -5
  5. package/docs/ADAPTER_AUTHORING.md +29 -0
  6. package/docs/CAPABILITIES.md +7 -6
  7. package/docs/CLI.md +5 -0
  8. package/docs/CONFIGURATION.md +41 -10
  9. package/docs/DESIGN_DECISIONS.md +0 -2
  10. package/docs/GETTING_STARTED.md +39 -6
  11. package/docs/HOW_IT_WORKS.md +13 -8
  12. package/docs/SECURITY_MODEL.md +32 -5
  13. package/docs/TROUBLESHOOTING.md +76 -8
  14. package/docs/UPGRADING.md +47 -5
  15. package/node_modules/@agents-can-communicate/adapter-antigravity/certification.json +78 -0
  16. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/certification-provenance.json +111 -0
  17. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-desktop-2.19.1-product-evidence.json +156 -0
  18. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-desktop-2.19.1-product.json +25 -0
  19. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/desktop-2.19.1.json +141 -0
  20. package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +4 -1
  21. package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +1 -1
  22. package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/skills/acc/SKILL.md +3 -0
  23. package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +13 -2
  24. package/node_modules/@agents-can-communicate/adapter-antigravity/src/agentapi.mjs +7 -5
  25. package/node_modules/@agents-can-communicate/adapter-antigravity/src/allow-rule.mjs +98 -17
  26. package/node_modules/@agents-can-communicate/adapter-antigravity/src/client-process.mjs +64 -0
  27. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-allow-rule.mjs +140 -0
  28. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-delivery.mjs +110 -0
  29. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-endpoint.mjs +203 -0
  30. package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +61 -30
  31. package/node_modules/@agents-can-communicate/adapter-antigravity/src/native-delivery.mjs +61 -24
  32. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-endpoint.mjs +30 -20
  33. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-start.mjs +2 -1
  34. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay.mjs +20 -12
  35. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relays.mjs +18 -4
  36. package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
  37. package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +3 -0
  38. package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +6 -0
  39. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-delivery.mjs +50 -37
  40. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-endpoint.mjs +44 -31
  41. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-registry.mjs +99 -14
  42. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-settings.mjs +3 -7
  43. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-socket-directories.mjs +6 -4
  44. package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +32 -7
  45. package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
  46. package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +3 -0
  47. package/node_modules/@agents-can-communicate/adapter-codex/src/allow-rule.mjs +129 -0
  48. package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +68 -3
  49. package/node_modules/@agents-can-communicate/adapter-codex/src/daemon-layouts.mjs +13 -0
  50. package/node_modules/@agents-can-communicate/adapter-codex/src/embedded-host.mjs +42 -11
  51. package/node_modules/@agents-can-communicate/adapter-codex/src/install.mjs +36 -13
  52. package/node_modules/@agents-can-communicate/adapter-codex/src/maintenance-host.mjs +68 -27
  53. package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +36 -18
  54. package/node_modules/@agents-can-communicate/adapter-codex/src/native-endpoint.mjs +39 -16
  55. package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +4 -2
  56. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
  57. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +3 -0
  58. package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
  59. package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +2 -1
  60. package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/install.mjs +15 -9
  61. package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
  62. package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +3 -0
  63. package/node_modules/@agents-can-communicate/adapter-grok/src/install.mjs +25 -14
  64. package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
  65. package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +3 -0
  66. package/node_modules/@agents-can-communicate/adapter-kimi/src/adapter.mjs +2 -1
  67. package/node_modules/@agents-can-communicate/adapter-kimi/src/install.mjs +15 -10
  68. package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
  69. package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +50 -5
  70. package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +11 -2
  71. package/node_modules/@agents-can-communicate/adapter-sdk/src/executables.mjs +149 -0
  72. package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +79 -12
  73. package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +9 -1
  74. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +65 -10
  75. package/node_modules/@agents-can-communicate/adapter-sdk/src/own-version.mjs +27 -1
  76. package/node_modules/@agents-can-communicate/adapter-sdk/src/private-files.mjs +35 -0
  77. package/node_modules/@agents-can-communicate/adapter-sdk/src/process-table.mjs +232 -0
  78. package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +8 -1
  79. package/node_modules/@agents-can-communicate/adapter-sdk/src/windows-command.mjs +69 -0
  80. package/node_modules/@agents-can-communicate/adapter-sdk/src/windows-process-chain.wsf +45 -0
  81. package/node_modules/@agents-can-communicate/cli/package.json +2 -1
  82. package/node_modules/@agents-can-communicate/cli/src/config-command.mjs +2 -1
  83. package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +60 -4
  84. package/node_modules/@agents-can-communicate/cli/src/hook-support.mjs +9 -0
  85. package/node_modules/@agents-can-communicate/cli/src/hook-workspace.mjs +12 -3
  86. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/activation.mjs +3 -2
  87. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/download.mjs +12 -3
  88. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +7 -5
  89. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/generation.mjs +7 -7
  90. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +8 -5
  91. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/maintenance.mjs +1 -1
  92. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/mutex.mjs +7 -6
  93. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/portable-fs.mjs +165 -0
  94. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/schedule.mjs +1 -1
  95. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/state.mjs +18 -8
  96. package/node_modules/@agents-can-communicate/cli/src/native-session-diagnostics.mjs +11 -3
  97. package/node_modules/@agents-can-communicate/cli/src/platform-paths.mjs +15 -10
  98. package/node_modules/@agents-can-communicate/cli/src/runtime-paths.mjs +3 -2
  99. package/node_modules/@agents-can-communicate/cli/src/update-command.mjs +11 -1
  100. package/node_modules/@agents-can-communicate/cli/src/workspace-discovery.mjs +4 -2
  101. package/node_modules/@agents-can-communicate/core/package.json +1 -1
  102. package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +7 -0
  103. package/node_modules/@agents-can-communicate/core/src/materialisation.mjs +39 -1
  104. package/node_modules/@agents-can-communicate/core/src/session-opening.mjs +11 -0
  105. package/node_modules/@agents-can-communicate/core/src/sessions.mjs +8 -2
  106. package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
  107. package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
  108. package/node_modules/@agents-can-communicate/hook-runner/src/client-pid.mjs +65 -6
  109. package/node_modules/@agents-can-communicate/hook-runner/src/client-version.mjs +80 -0
  110. package/node_modules/@agents-can-communicate/hook-runner/src/native-attempt.mjs +1 -1
  111. package/node_modules/@agents-can-communicate/hook-runner/src/owner-context.mjs +34 -6
  112. package/node_modules/@agents-can-communicate/hook-runner/src/process-table.mjs +3 -50
  113. package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +154 -28
  114. package/node_modules/@agents-can-communicate/installer/package.json +3 -2
  115. package/node_modules/@agents-can-communicate/installer/src/delivery-diagnostics.mjs +2 -1
  116. package/node_modules/@agents-can-communicate/installer/src/detect.mjs +13 -3
  117. package/node_modules/@agents-can-communicate/installer/src/hook-support.mjs +5 -0
  118. package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +6 -14
  119. package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +6 -2
  120. package/node_modules/@agents-can-communicate/installer/src/plan.mjs +14 -0
  121. package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
  122. package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
  123. package/node_modules/@agents-can-communicate/protocol/src/config.mjs +6 -2
  124. package/node_modules/@agents-can-communicate/protocol/src/resources.mjs +6 -2
  125. package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
  126. package/node_modules/@agents-can-communicate/storage-filesystem/src/active-journal.mjs +5 -2
  127. package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +41 -23
  128. package/node_modules/@agents-can-communicate/storage-filesystem/src/doomed-directory.mjs +4 -12
  129. package/node_modules/@agents-can-communicate/storage-filesystem/src/identity.mjs +7 -3
  130. package/node_modules/@agents-can-communicate/storage-filesystem/src/index.mjs +1 -0
  131. package/node_modules/@agents-can-communicate/storage-filesystem/src/journal.mjs +24 -7
  132. package/node_modules/@agents-can-communicate/storage-filesystem/src/portable-fs.mjs +165 -0
  133. package/node_modules/@agents-can-communicate/storage-filesystem/src/publication-path.mjs +8 -0
  134. package/node_modules/@agents-can-communicate/storage-filesystem/src/reclaim.mjs +26 -17
  135. package/node_modules/@agents-can-communicate/storage-filesystem/src/recovery.mjs +7 -5
  136. package/node_modules/@agents-can-communicate/storage-filesystem/src/retention.mjs +7 -16
  137. package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-directory.mjs +138 -24
  138. package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-file.mjs +3 -2
  139. package/node_modules/@agents-can-communicate/storage-filesystem/src/stage-sweep.mjs +9 -6
  140. package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +30 -8
  141. package/node_modules/@agents-can-communicate/storage-filesystem/src/writer-mutex.mjs +102 -32
  142. package/package.json +1 -5
@@ -117,8 +117,7 @@ handoff. ACC does not restart an exited client.
117
117
  supported platform, current probe and exact session binding. Under `actionable`,
118
118
  a `note` stays queued with `delivery_disabled`.
119
119
 
120
- For Codex, use your ordinary launch command with 0.152.1 or newer on Apple Silicon
121
- macOS. Its LocalDaemon infrastructure and trusted hooks must establish
120
+ For Codex, use your ordinary launch command with 0.152.1 or newer. Its LocalDaemon infrastructure and trusted hooks must establish
122
121
  the receiver's exact thread and workspace. Embedded sessions, an absent socket,
123
122
  ambiguous recipients or failed identity checks retain durable inbox access.
124
123
  `acc doctor` reports readiness, consent and the current workspace's live channel separately.
@@ -144,6 +143,11 @@ user a notice once, a sender sees the cause beside `no live transport`, and doct
144
143
  the session line. Open a new Codex chat while the service runs; start it with
145
144
  `codex app-server daemon start` if Codex does not.
146
145
 
146
+ The Codex app (inside ChatGPT.app) runs every chat this way: each window has its own app server
147
+ and never uses the shared one (openai/codex#41014, read on 26.928). Its chats join ACC through
148
+ the same hooks and get messages at their next turn; a chat started in a terminal is the one a
149
+ peer can reach live.
150
+
147
151
  Some launch options make Codex run a chat embedded even while the service runs: `-c`/`--config`,
148
152
  `--enable`, `--disable`, `--search`, `-p`/`--profile`, `--oss`, `--strict-config`,
149
153
  `--dangerously-bypass-hook-trust` and `--no-daemon`, and also the `CODEX_EXEC_SERVER_URL`
@@ -178,8 +182,7 @@ or a connected MCP server does not by itself establish automatic delivery. `life
178
182
  manual` can also mean the current version has no certified session-end hook; it does not
179
183
  prove that no hooks ran.
180
184
 
181
- For Claude Code, use version 2.1.282 or newer on Apple Silicon macOS, and start it with
182
- your ordinary command. Each Claude Code session opens its own inbox socket. ACC reads the
185
+ For Claude Code, use version 2.1.282 or newer, and start it with your ordinary command. Each Claude Code session opens its own inbox socket. ACC reads the
183
186
  socket path from `CLAUDE_CODE_MESSAGING_SOCKET` in the hook environment. ACC then checks that
184
187
  path against Claude Code's session registry `<config>/sessions/<pid>.json`, where
185
188
  `<config>` is `CLAUDE_CONFIG_DIR` or `~/.claude`. The pid and the socket must match for the
@@ -189,8 +192,8 @@ session again, so the next ordinary prompt retries a failed binding.
189
192
  - Claude Code 2.1.224 and later open the inbox, but ACC's captured minimum is 2.1.282. An
190
193
  older version reports `below_minimum_version` and keeps next-turn delivery.
191
194
  - On native Windows, Claude Code serves its inbox on a named pipe that requires an auth
192
- line. ACC has no capture of that inbox, so Windows keeps next-turn delivery.
193
- - Linux is uncaptured for live delivery. A Linux session keeps next-turn delivery.
195
+ line. ACC sends the key Claude Code publishes for other sessions of the same user; see
196
+ [On Windows](#on-windows).
194
197
  - A wake that reached the session can still wait for your approval. See
195
198
  [the next section](#a-claude-code-session-holds-or-drops-acc-wakes).
196
199
 
@@ -249,6 +252,19 @@ next-turn hook shows the body. The message arrives with the session's next turn,
249
252
  `acc inbox` shows it at any time. The sender's `acc message` output still reports
250
253
  `woke <participant> via claude-inbox`, because the wake reached the inbox.
251
254
 
255
+ ## A Codex session will not tell peers project details
256
+
257
+ With `approvals_reviewer = "auto_review"`, Codex's reviewer judges every command a session
258
+ runs outside its sandbox. It refused an ACC reply that named a branch, a commit and changed
259
+ paths as disclosure to an external party. After that, the session answered peers that it
260
+ could not share project details.
261
+
262
+ ACC's rules file lets the participant commands skip that review on macOS and Linux; see
263
+ [Codex command approval](CONFIGURATION.md#codex-command-approval). Run `acc doctor`: when the
264
+ rule is missing, it asks for `acc install --adapter codex`. If a session started before the
265
+ install still asks, start a new one. On Windows there is no rule; approve the command, or turn
266
+ off auto-review for the session.
267
+
252
268
  ## Codex plugin is listed but inactive
253
269
 
254
270
  Open `/plugins` in Codex and check ACC is enabled. Open `/hooks`, review each ACC hook,
@@ -340,8 +356,15 @@ Live delivery needs four things, and `acc doctor` shows each:
340
356
  - the session attached to ACC at all (see the section above);
341
357
  - the agent started the relay. While none is running, ACC's context asks up to three times
342
358
  in that conversation. A declined prompt and an ignored ask look the same, so the line can
343
- return after a decline; after the third ask it stays quiet. Run
344
- `sh "~/.gemini/config/acc/acc-relay.sh" start` to start it directly.
359
+ return after a decline; after the third ask it stays quiet. ACC's install allows that
360
+ command, so the agent starts it without an approval prompt; `acc doctor` names the rule when
361
+ it is missing. Run `sh "~/.gemini/config/acc/acc-relay.sh" start` to start it directly.
362
+
363
+ In Antigravity 2.0, the desktop app, there is no relay: ACC delivers through the app's own
364
+ language server, and `acc doctor` names such a session `Antigravity session`. A conversation is
365
+ reachable from its first turn after the app starts. The app runs no session start for a
366
+ conversation it reopens, so after a restart nothing reaches it live until someone sends it a
367
+ prompt; the message waits in its inbox until then.
345
368
 
346
369
  `acc doctor` reports how many relays are running and, per session, whether a live transport is
347
370
  active. A relay ends with its client; nothing is left running after the TUI exits or after
@@ -365,6 +388,12 @@ first ACC command. `acc doctor` prints an `Antigravity CLI inbound:` line with w
365
388
  - **The file cannot be read.** ACC leaves an invalid `settings.json` as it is. Repair it, then
366
389
  run `acc install --adapter antigravity` again.
367
390
 
391
+ Antigravity 2.0, the desktop app, runs the agent's commands in a sandbox where ACC's wrapper
392
+ cannot run, and the model then asks to run it outside the sandbox. The app decides that from
393
+ its own grants in `~/.gemini/config/config.json`, never from Antigravity CLI's settings. ACC's
394
+ install adds its rule there once the app has run, and `acc doctor` prints its state on a line
395
+ that names the desktop app. Restart the app after an install if it was open.
396
+
368
397
  ## Grok shows no injected message
369
398
 
370
399
  Grok discards UserPromptSubmit context. On the observed 1.0.24 client, run public
@@ -381,6 +410,41 @@ session becomes offline by presence rules rather than a clean end signal. The de
381
410
  status hides offline sessions; `acc status --all` intentionally retains attribution and
382
411
  checkout history.
383
412
 
413
+ ## On Windows
414
+
415
+ - **A session attaches only on its first prompt.** ACC reads the process tree through
416
+ PowerShell, and the first start after boot can take several seconds. A hook that runs out of
417
+ time continues without ACC, and the next user prompt attaches the session.
418
+ - **A hook reports `node` is not recognized.** Grok and Antigravity CLI hooks start `node` from
419
+ `PATH`. Add Node.js to the `PATH` the client sees, then restart the client.
420
+ - **Claude Code hooks do nothing.** ACC wires Claude Code's hooks in exec form, which needs
421
+ Claude Code 2.1.139 or later. Update Claude Code and run `acc install` again.
422
+ - **`acc install` refuses Antigravity CLI because of a space.** Antigravity CLI cannot run a
423
+ quoted hook path, so ACC writes the 8.3 short name of a path with a space. A volume with 8.3
424
+ names turned off has none; turn them on (`fsutil 8dot3name set C: 0`, as an administrator)
425
+ and run `acc install` again.
426
+ - **A write through Claude Code's PowerShell tool was not guarded.** The guard reads POSIX shell
427
+ commands only. Claims are advisory by default, and a write through Claude Code's Write, Edit or
428
+ Bash tool is still checked.
429
+ - **Codex is not woken on Windows.** Codex refuses to start its app-server daemon from an
430
+ elevated terminal ("start the Windows daemon from a non-elevated terminal"). Start Codex from a
431
+ terminal that is not running as administrator, and keep `CODEX_HOME` short: the daemon's socket
432
+ path has to fit 108 bytes, or Codex runs the chat on its own embedded server, which no peer can
433
+ reach.
434
+ - **Hooks run out of time on a cloud machine.** A Windows flush waits for the whole disk to
435
+ write out its cache. On a GitHub `windows-latest` runner, whose system disk is remote, a 4 KB
436
+ flush took 10-33 ms at the median and up to 1.5 s, against 0.5 ms and at most 27 ms on its
437
+ local disk. A session start flushes 5 to 16 times, so a disk like that can run a hook out of
438
+ its five seconds; the session then attaches on a later prompt. Point `ACC_DATA_HOME` at a
439
+ directory on a local disk that only your account can read, for every client, and restart
440
+ them.
441
+ - **A Claude Code session is not woken on Windows.** The wake authenticates with the key Claude
442
+ Code publishes beside its session record (`<config>\sessions\<pid>.<hash>.key`). Run
443
+ `acc doctor`: a session without that key, or whose pipe the machine no longer lists, waits for
444
+ its next turn. ACC trusts the key only in a configuration directory inside your user profile,
445
+ whose access list keeps it to your account. A session whose `CLAUDE_CONFIG_DIR` is elsewhere
446
+ reports `native_endpoint_unavailable` and also waits for its next turn.
447
+
384
448
  ## A write was blocked
385
449
 
386
450
  Exit code `5` names the overlapping claim and owner. Ask the owner or wait for release. If
@@ -408,6 +472,10 @@ confirming no needed coordination state remains.
408
472
  ACC removes only bytes that still match its install record. Anything edited by the user is
409
473
  reported and retained. Remove those leftovers manually if desired.
410
474
 
475
+ An uninstall also skips a client that the current data home did not install, and names it:
476
+ its wiring belongs to another ACC data home. Run `acc uninstall --adapter <client>` to remove
477
+ it from this one.
478
+
411
479
  Runtime state is outside the repository by design. `ACC_DATA_HOME` can relocate it, but ACC
412
480
  refuses a path inside any workspace root. Relocate the whole data directory; a symlink for
413
481
  that directory is supported. Install rejects a symlink that moves only the internal
package/docs/UPGRADING.md CHANGED
@@ -1,4 +1,4 @@
1
- # Upgrading to 0.5.0
1
+ # Upgrading
2
2
 
3
3
  ## From 0.8.x
4
4
 
@@ -20,8 +20,9 @@ a client's own settings:
20
20
  Start a new Codex session after the update; a session already open keeps its old policy.
21
21
  - **Antigravity CLI.** The install adds `command(<wrapper>)` to `permissions.allow` in
22
22
  `~/.gemini/antigravity-cli/settings.json`, and the skill calls the wrapper without quotes, so
23
- a woken session runs its ACC commands without an approval prompt. Restart `agy`: it reads
24
- the file only at startup. `acc uninstall` removes every copy of that rule.
23
+ a woken session runs its ACC commands without an approval prompt. It also adds the command
24
+ that starts the relay, so the agent starts live delivery without one. Restart `agy`: it reads
25
+ the file only at startup. `acc uninstall` removes every copy of each rule.
25
26
 
26
27
  `acc doctor` and `acc status` describe an idle session by what a message sent to it meets
27
28
  (`idle, wake on send`, `idle until next turn`, `idle, inbox only`), and each status row carries
@@ -74,6 +75,47 @@ This release adds no store event type or field.
74
75
  This release adds no store event type or field. A sender's delivery JSON may carry
75
76
  `nativeLaunchOption` beside `nativeReasonCode`.
76
77
 
78
+ 0.9.0 adds Windows and the Antigravity desktop app, and changes what `acc uninstall` removes:
79
+
80
+ - **Windows.** ACC installs and runs natively on Windows 10 and 11, with no WSL, and keeps its
81
+ state in `%LOCALAPPDATA%\acc`. Live delivery reaches Claude Code through its inbox pipe, Codex
82
+ through `codex app-server proxy`, and Antigravity CLI through ACC's relay. Codex starts its
83
+ daemon only from a terminal that is not elevated. On Windows the Antigravity install adds no
84
+ allow rule, so Antigravity CLI asks before each ACC command. See
85
+ [Windows](GETTING_STARTED.md#windows).
86
+ - **The Antigravity desktop app.** Antigravity 2.19.1 or later gets live delivery through the
87
+ app's own language server, with no relay and no command from the agent. The install adds
88
+ ACC's grant to `~/.gemini/config/config.json` when the app has created that file. If you
89
+ open the app for the first time after the update, `acc doctor` asks you to run
90
+ `acc install --adapter antigravity` once.
91
+ - **A session's version is the running client's.** `acc doctor` and `acc status` show the
92
+ version of the client that runs the session, which can differ from the `claude` or `codex`
93
+ on `PATH`.
94
+ - **A chat in the Codex app** is reported as `client_session_embedded`. The app runs each
95
+ window on its own app server, so its chats receive messages at their next turn.
96
+ - **`acc uninstall` without `--adapter` removes only what this data home installed.** A client
97
+ that another data home wired is skipped by name. `acc uninstall --adapter <client>` still
98
+ removes it.
99
+
100
+ This release adds no store event type or field, and `STORE_VERSION` stays 6. A journalled
101
+ transaction no longer writes a completion marker: 0.9.0 retires every journal entry that the
102
+ pointer does not name, and an older ACC's markers leave with their entries. 0.8.x keeps
103
+ working on a store that 0.9.0 wrote.
104
+
105
+ 0.9.1 changes two things around Codex and Claude Code:
106
+
107
+ - **Codex sessions answer peers without auto-review.** On macOS and Linux the update adds ACC's
108
+ own Codex rules file, `~/.codex/rules/agents-can-communicate.rules`, so the commands a
109
+ participant runs need no approval and Codex's auto-review never judges a message to a local
110
+ peer. ACC's install, uninstall, update and config commands still ask. If a Codex session
111
+ started before the update still asks, start a new one. See
112
+ [Codex command approval](CONFIGURATION.md#codex-command-approval).
113
+ - **Doctor no longer calls the Claude Code plugin edited after an update.** A running session
114
+ marks the plugin copy it still uses with `.in_use/<pid>`; doctor counted that as an edit and
115
+ advised a reinstall. An install also keeps a copy whose marker names a live process.
116
+
117
+ This release adds no store event type or field, and `STORE_VERSION` stays 6.
118
+
77
119
  ## From 0.7.x
78
120
 
79
121
  Claude Code live delivery wakes each session through the inbox socket that Claude Code opens
@@ -105,10 +147,10 @@ recorded policy. ACC ignores `ACC_NATIVE_DELIVERY_POLICY`, `ACC_BYPASS` and
105
147
  A Claude Code session that started through the old shim keeps its Channel until it exits.
106
148
  Its next turn binds the inbox. Start new sessions with your ordinary `claude` command.
107
149
 
108
- The Claude Code live-delivery minimum is now 2.1.282 on Apple Silicon macOS. With an older
150
+ The Claude Code live-delivery minimum is now 2.1.282. With an older
109
151
  Claude Code, live delivery stays off and the recorded policy is kept. Update Claude Code and
110
152
  start a new session: the recorded policy applies to it, with nothing to install again.
111
- `acc doctor` reports the state. Native Windows keeps next-turn delivery.
153
+ `acc doctor` reports the state.
112
154
 
113
155
  This release adds no new store event type or field, so a store it writes stays readable by
114
156
  0.7.x. The Channel captures remain as history in
@@ -86,6 +86,84 @@
86
86
  "The first TUI session in a folder trusted at that launch hands every hook an empty workspacePaths even with --add-dir, so that session gets no ACC context and no relay prompt; the next launch in the now-trusted folder does."
87
87
  ],
88
88
  "result": "pass"
89
+ },
90
+ {
91
+ "client": "antigravity-desktop",
92
+ "version": "2.19.1",
93
+ "platform": "darwin-arm64",
94
+ "observedAt": "2026-10-04",
95
+ "capability": "lifecycle.sessionStart",
96
+ "fixture": "fixtures/desktop-2.19.1.json",
97
+ "provenance": "fixtures/certification-provenance.json",
98
+ "provenanceId": "desktop-session-start-2-19-1",
99
+ "idleBehavior": "fires when a conversation starts",
100
+ "busyBehavior": "fires before the first model invocation",
101
+ "authorityLevel": "advisory",
102
+ "limitations": [
103
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
104
+ "the hooks ran as direct children of the app's language server; no agy process took part"
105
+ ],
106
+ "result": "pass"
107
+ },
108
+ {
109
+ "client": "antigravity-desktop",
110
+ "version": "2.19.1",
111
+ "platform": "darwin-arm64",
112
+ "observedAt": "2026-10-04",
113
+ "capability": "context.beforeTurnInjection",
114
+ "fixture": "fixtures/desktop-2.19.1.json",
115
+ "provenance": "fixtures/certification-provenance.json",
116
+ "provenanceId": "desktop-pre-invocation-2-19-1",
117
+ "idleBehavior": "waits for the next invocation",
118
+ "busyBehavior": "not observed in the desktop app",
119
+ "authorityLevel": "context",
120
+ "limitations": [
121
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
122
+ "the hooks ran as direct children of the app's language server; no agy process took part",
123
+ "requires the injectSteps ephemeralMessage envelope, as Antigravity CLI"
124
+ ],
125
+ "result": "pass"
126
+ },
127
+ {
128
+ "client": "antigravity-desktop",
129
+ "version": "2.19.1",
130
+ "platform": "darwin-arm64",
131
+ "observedAt": "2026-10-04",
132
+ "capability": "delivery.nextTurn",
133
+ "fixture": "fixtures/desktop-2.19.1.json",
134
+ "provenance": "fixtures/certification-provenance.json",
135
+ "provenanceId": "desktop-pre-invocation-2-19-1",
136
+ "idleBehavior": "offers complete peer messages at the next invocation",
137
+ "busyBehavior": "not observed in the desktop app",
138
+ "authorityLevel": "context",
139
+ "limitations": [
140
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
141
+ "the hooks ran as direct children of the app's language server; no agy process took part",
142
+ "the agent's acc reply runs only outside the app's sandbox, which the app approves by its grants in ~/.gemini/config/config.json"
143
+ ],
144
+ "result": "pass"
145
+ },
146
+ {
147
+ "client": "antigravity-desktop",
148
+ "version": "2.19.1",
149
+ "platform": "darwin-arm64",
150
+ "observedAt": "2026-10-05T04:34:55.036Z",
151
+ "capability": "delivery.livePush",
152
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product.json",
153
+ "idleBehavior": "offered",
154
+ "provenance": "fixtures/certification-provenance.json",
155
+ "provenanceId": "native-delivery-2-19-1-desktop-product",
156
+ "busyBehavior": "queued_after_turn",
157
+ "authorityLevel": "experimental",
158
+ "limitations": [
159
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
160
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
161
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
162
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
163
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
164
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
165
+ ],
166
+ "result": "pass"
89
167
  }
90
168
  ]
91
169
  }
@@ -212,6 +212,117 @@
212
212
  "sha256": "024c5c53915c0f09fac9b2ba118f1831eb97f26c6d4b28aacc4e4a2c5d7500ee"
213
213
  }
214
214
  ]
215
+ },
216
+ {
217
+ "client": "antigravity-desktop",
218
+ "version": "2.19.1",
219
+ "platform": "darwin-arm64",
220
+ "observedAt": "2026-10-04",
221
+ "id": "desktop-session-start-2-19-1",
222
+ "event": "SessionStart",
223
+ "fixture": "fixtures/desktop-2.19.1.json",
224
+ "claims": [
225
+ {
226
+ "capability": "lifecycle.sessionStart",
227
+ "result": "pass",
228
+ "outcome": {
229
+ "kind": "event-observed",
230
+ "idle": "fires when a conversation starts",
231
+ "busy": "fires before the first model invocation",
232
+ "authority": "advisory",
233
+ "limitations": [
234
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
235
+ "the hooks ran as direct children of the app's language server; no agy process took part"
236
+ ]
237
+ }
238
+ }
239
+ ],
240
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1",
241
+ "tool": null
242
+ },
243
+ {
244
+ "client": "antigravity-desktop",
245
+ "version": "2.19.1",
246
+ "platform": "darwin-arm64",
247
+ "observedAt": "2026-10-04",
248
+ "id": "desktop-pre-invocation-2-19-1",
249
+ "event": "PreInvocation",
250
+ "fixture": "fixtures/desktop-2.19.1.json",
251
+ "claims": [
252
+ {
253
+ "capability": "context.beforeTurnInjection",
254
+ "result": "pass",
255
+ "outcome": {
256
+ "kind": "model-visible",
257
+ "idle": "waits for the next invocation",
258
+ "busy": "not observed in the desktop app",
259
+ "authority": "context",
260
+ "limitations": [
261
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
262
+ "the hooks ran as direct children of the app's language server; no agy process took part",
263
+ "requires the injectSteps ephemeralMessage envelope, as Antigravity CLI"
264
+ ]
265
+ }
266
+ },
267
+ {
268
+ "capability": "delivery.nextTurn",
269
+ "result": "pass",
270
+ "outcome": {
271
+ "kind": "model-visible",
272
+ "idle": "offers complete peer messages at the next invocation",
273
+ "busy": "not observed in the desktop app",
274
+ "authority": "context",
275
+ "limitations": [
276
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
277
+ "the hooks ran as direct children of the app's language server; no agy process took part",
278
+ "the agent's acc reply runs only outside the app's sandbox, which the app approves by its grants in ~/.gemini/config/config.json"
279
+ ]
280
+ }
281
+ }
282
+ ],
283
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1",
284
+ "tool": null
285
+ },
286
+ {
287
+ "id": "native-delivery-2-19-1-desktop-product",
288
+ "client": "antigravity-desktop",
289
+ "version": "2.19.1",
290
+ "platform": "darwin-arm64",
291
+ "observedAt": "2026-10-05T04:34:55.036Z",
292
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product.json",
293
+ "sha256": "1ef1b19b9069220726a72c548353f40a38e7c2585c69c5469b30cba9286d47e3",
294
+ "event": null,
295
+ "tool": null,
296
+ "claims": [
297
+ {
298
+ "capability": "delivery.livePush",
299
+ "result": "pass",
300
+ "outcome": {
301
+ "kind": "native-delivery-observed",
302
+ "idle": "offered",
303
+ "busy": "queued_after_turn",
304
+ "authority": "experimental",
305
+ "limitations": [
306
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
307
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
308
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
309
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
310
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
311
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
312
+ ]
313
+ }
314
+ }
315
+ ],
316
+ "productEvidence": {
317
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product-evidence.json",
318
+ "sha256": "b3b0fdfd19970acd636a2ff433cd13527c9c9257efceef5c8675bca60f0888b1"
319
+ },
320
+ "historicalFixtures": [
321
+ {
322
+ "fixture": "fixtures/desktop-2.19.1.json",
323
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1"
324
+ }
325
+ ]
215
326
  }
216
327
  ]
217
328
  }
@@ -0,0 +1,156 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "source": "real-client-capture",
4
+ "client": "antigravity-desktop",
5
+ "phase": "product",
6
+ "clientVersion": "2.19.1",
7
+ "platform": "darwin-arm64",
8
+ "packageSha256": "c03096251a9efd251ecd42c6bf489e8783a9515c83d85242645a3a31fcdc0c42",
9
+ "startedAt": "2026-10-05T04:28:11.000Z",
10
+ "finishedAt": "2026-10-05T04:34:55.036Z",
11
+ "scenarioCount": 6,
12
+ "passedCount": 6,
13
+ "failedCount": 0,
14
+ "cleanup": {
15
+ "attempted": true,
16
+ "outcome": "passed",
17
+ "ownedProcesses": "stopped",
18
+ "temporaryState": "removed"
19
+ },
20
+ "scenarios": [
21
+ {
22
+ "caseId": "D01",
23
+ "outcome": "passed",
24
+ "startedAt": "2026-10-05T04:31:33.000Z",
25
+ "finishedAt": "2026-10-05T04:34:04.170Z",
26
+ "messageId": "message_xZi2izsqCNWh-2NcIIoMXg",
27
+ "observations": [
28
+ {
29
+ "kind": "delivery",
30
+ "at": "2026-10-05T04:34:04.170Z",
31
+ "outcome": "offered"
32
+ },
33
+ {
34
+ "kind": "desktop-push",
35
+ "at": "2026-10-05T04:31:35Z",
36
+ "outcome": "pushed"
37
+ },
38
+ {
39
+ "kind": "model-turn",
40
+ "at": "2026-10-05T04:31:35Z",
41
+ "outcome": "started-without-user-input"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "caseId": "D02",
47
+ "outcome": "passed",
48
+ "startedAt": "2026-10-05T04:28:11.000Z",
49
+ "finishedAt": "2026-10-05T04:28:59.690Z",
50
+ "messageId": "message__M-kSLcUzAkViQCcVZxWNA",
51
+ "observations": [
52
+ {
53
+ "kind": "delivery",
54
+ "at": "2026-10-05T04:28:59.690Z",
55
+ "outcome": "offered"
56
+ },
57
+ {
58
+ "kind": "desktop-push",
59
+ "at": "2026-10-05T04:28:31Z",
60
+ "outcome": "pushed"
61
+ },
62
+ {
63
+ "kind": "presentation",
64
+ "outcome": "after-running-turn",
65
+ "at": "2026-10-05T04:28:31.000Z"
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "caseId": "D03",
71
+ "outcome": "passed",
72
+ "startedAt": "2026-10-05T04:31:33.000Z",
73
+ "finishedAt": "2026-10-05T04:34:04.261Z",
74
+ "messageId": "message_xZi2izsqCNWh-2NcIIoMXg",
75
+ "observations": [
76
+ {
77
+ "kind": "answer",
78
+ "outcome": "recorded",
79
+ "at": "2026-10-05T04:31:51.000Z"
80
+ },
81
+ {
82
+ "kind": "receipt",
83
+ "outcome": "acknowledged",
84
+ "at": "2026-10-05T04:31:51.000Z"
85
+ },
86
+ {
87
+ "kind": "approval",
88
+ "outcome": "not-asked",
89
+ "at": "2026-10-05T04:31:45.000Z"
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "caseId": "D04",
95
+ "outcome": "passed",
96
+ "startedAt": "2026-10-05T04:34:04.000Z",
97
+ "finishedAt": "2026-10-05T04:34:41.447Z",
98
+ "messageId": "message_lhvipieTjJa-Kx3o4CgL1Q",
99
+ "observations": [
100
+ {
101
+ "kind": "desktop-push",
102
+ "at": "2026-10-05T04:34:06Z",
103
+ "outcome": "pushed-once"
104
+ },
105
+ {
106
+ "kind": "logical-message",
107
+ "outcome": "same-message-id",
108
+ "at": "2026-10-05T04:34:04.000Z"
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "caseId": "D05",
114
+ "outcome": "passed",
115
+ "startedAt": "2026-10-05T04:34:52.000Z",
116
+ "finishedAt": "2026-10-05T04:34:55.036Z",
117
+ "messageId": "message_mGC0UQYG2G23bsjsXuBI9w",
118
+ "observations": [
119
+ {
120
+ "kind": "delivery",
121
+ "at": "2026-10-05T04:34:55.036Z",
122
+ "outcome": "queued"
123
+ },
124
+ {
125
+ "kind": "client",
126
+ "outcome": "exited",
127
+ "at": "2026-10-05T04:34:54.000Z"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "caseId": "D06",
133
+ "outcome": "passed",
134
+ "startedAt": "2026-10-05T04:29:19.000Z",
135
+ "finishedAt": "2026-10-05T04:31:16.352Z",
136
+ "messageId": "message_BY540lIYRss5JXqCTgB_0Q",
137
+ "observations": [
138
+ {
139
+ "kind": "delivery",
140
+ "at": "2026-10-05T04:31:16.352Z",
141
+ "outcome": "offered"
142
+ },
143
+ {
144
+ "kind": "desktop-push",
145
+ "at": "2026-10-05T04:30:03Z",
146
+ "outcome": "pushed"
147
+ },
148
+ {
149
+ "kind": "client",
150
+ "outcome": "restarted",
151
+ "at": "2026-10-05T04:29:19.000Z"
152
+ }
153
+ ]
154
+ }
155
+ ]
156
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "client": "antigravity-desktop",
3
+ "version": "2.19.1",
4
+ "platform": "darwin-arm64",
5
+ "observedAt": "2026-10-05T04:34:55.036Z",
6
+ "capability": "native_delivery",
7
+ "result": "pass",
8
+ "fixture": "antigravity-desktop-2.19.1-product",
9
+ "launchMode": "ordinary-command-with-installed-hooks",
10
+ "protocolContract": "antigravity-desktop-agentapi-v1",
11
+ "idle": "offered",
12
+ "busy": "queued_after_turn",
13
+ "reply": "routed",
14
+ "duplicate": "same_message_id",
15
+ "fallback": "queued",
16
+ "limitations": [
17
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
18
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
19
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
20
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
21
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
22
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
23
+ ],
24
+ "packageSha256": "c03096251a9efd251ecd42c6bf489e8783a9515c83d85242645a3a31fcdc0c42"
25
+ }