agents-can-communicate 0.5.9 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +2 -1
  2. package/bin/acc-antigravity-relay.mjs +7 -0
  3. package/bin/entrypoints/acc-antigravity-relay.mjs +116 -0
  4. package/bin/entrypoints/acc-bootstrap.mjs +4 -0
  5. package/bin/entrypoints/acc-hook.mjs +11 -7
  6. package/bin/entrypoints/antigravity-relay-binding.mjs +43 -0
  7. package/docs/ADAPTER_AUTHORING.md +33 -0
  8. package/docs/ARCHITECTURE.md +27 -4
  9. package/docs/CAPABILITIES.md +22 -16
  10. package/docs/CLI.md +21 -3
  11. package/docs/CONCEPTS.md +7 -0
  12. package/docs/CONFIGURATION.md +1 -0
  13. package/docs/GETTING_STARTED.md +10 -4
  14. package/docs/HOW_IT_WORKS.md +7 -1
  15. package/docs/TROUBLESHOOTING.md +99 -0
  16. package/node_modules/@agents-can-communicate/adapter-antigravity/certification.json +91 -0
  17. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/PreInvocation-1.2.7.json +11 -0
  18. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/SessionStart-1.2.7.json +9 -0
  19. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/agentapi-error-answers-1.2.7.json +19 -0
  20. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/agentapi-live-push-1.2.7.json +31 -0
  21. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/certification-provenance.json +217 -0
  22. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-cli-1.2.7-relay-product-evidence.json +132 -0
  23. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-cli-1.2.7-relay-product.json +29 -0
  24. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/hooks-first-trust-no-workspace-1.2.7.json +37 -0
  25. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/live-push-surfaces-1.2.7.json +38 -0
  26. package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +28 -0
  27. package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +5 -0
  28. package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/skills/acc/SKILL.md +329 -0
  29. package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +119 -0
  30. package/node_modules/@agents-can-communicate/adapter-antigravity/src/agentapi.mjs +98 -0
  31. package/node_modules/@agents-can-communicate/adapter-antigravity/src/hooks.mjs +201 -0
  32. package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +708 -0
  33. package/node_modules/@agents-can-communicate/adapter-antigravity/src/native-delivery.mjs +170 -0
  34. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-endpoint.mjs +116 -0
  35. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-start.mjs +123 -0
  36. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay.mjs +195 -0
  37. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relays.mjs +64 -0
  38. package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
  39. package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +14 -2
  40. package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +2 -1
  41. package/node_modules/@agents-can-communicate/adapter-claude-code/src/hooks.mjs +5 -0
  42. package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
  43. package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +14 -2
  44. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
  45. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +14 -2
  46. package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
  47. package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
  48. package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +14 -2
  49. package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
  50. package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +14 -2
  51. package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
  52. package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +37 -1
  53. package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +25 -5
  54. package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +1 -0
  55. package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +1 -1
  56. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-attempt.mjs +1 -1
  57. package/node_modules/@agents-can-communicate/cli/package.json +1 -1
  58. package/node_modules/@agents-can-communicate/cli/src/args.mjs +6 -2
  59. package/node_modules/@agents-can-communicate/cli/src/help.mjs +1 -1
  60. package/node_modules/@agents-can-communicate/cli/src/hook-workspace.mjs +118 -0
  61. package/node_modules/@agents-can-communicate/cli/src/index.mjs +1 -0
  62. package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +17 -3
  63. package/node_modules/@agents-can-communicate/cli/src/main.mjs +8 -4
  64. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/command-prefix.mjs +26 -0
  65. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +6 -4
  66. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +3 -1
  67. package/node_modules/@agents-can-communicate/cli/src/session-owner.mjs +27 -6
  68. package/node_modules/@agents-can-communicate/core/package.json +1 -1
  69. package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
  70. package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
  71. package/node_modules/@agents-can-communicate/hook-runner/src/native-attempt.mjs +31 -0
  72. package/node_modules/@agents-can-communicate/hook-runner/src/owner-context.mjs +16 -3
  73. package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +70 -17
  74. package/node_modules/@agents-can-communicate/installer/package.json +1 -1
  75. package/node_modules/@agents-can-communicate/installer/src/detect.mjs +4 -0
  76. package/node_modules/@agents-can-communicate/installer/src/plan.mjs +10 -0
  77. package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
  78. package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
  79. package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
  80. package/package.json +3 -1
@@ -24,6 +24,33 @@ requires plugin trust.
24
24
  ACC does not launch a missing session. Open it normally after fixing the installation or
25
25
  workspace path.
26
26
 
27
+ Native sessions launched from the same parent directory keep that room when their
28
+ agents enter different subdirectories or nested repositories. Hooks retain the launch
29
+ directory across compaction and native conversation resume. Use the hook header's
30
+ complete arguments, including `--cwd` and `--workspace`, after a shell changes directory.
31
+ The `acc://` workspace reference selects the saved room even if Git discovery changes.
32
+
33
+ Separate sessions launched directly in different repositories still select different
34
+ initial rooms; a repository and its own worktrees share one. To give those separate
35
+ launches a common room, use an explicit workspace configuration or `ACC_WORKSPACE_ROOT`
36
+ at startup. This does not merge histories or move messages between participant IDs.
37
+ Existing sessions from an older integration have no saved launch directory: their next
38
+ startup or user-turn hook establishes it. Return such a session to its original
39
+ directory before that hook, or start a fresh native conversation there.
40
+
41
+ ## The owner arguments disappeared after compaction
42
+
43
+ Claude Code's `SessionStart` restores the original session's owner header after
44
+ compaction. Use its complete `--session`, `--generation`, `--cwd`, and `--workspace` arguments.
45
+ The hook retains the generation outside the model context; compaction does not require
46
+ manual attachment or a new participant. An older installed integration may need updating.
47
+
48
+ If the header is unavailable, use this session's ACC MCP tools when they own the
49
+ addressed participant, or report the limitation and continue the user's work. Do not
50
+ create a replacement participant just to recover context: it cannot inherit another
51
+ participant's inbox. `caller_workspace_mismatch` means the named session is absent from
52
+ the selected workspace; check the original directory before concluding there are no peers.
53
+
27
54
  ## A hook says `workspace contains ACC runtime state`
28
55
 
29
56
  The current directory contains ACC's own state, so ACC cannot use it as a workspace.
@@ -187,6 +214,78 @@ trusted` and keeps going, and the default mode has no write or shell tool to gua
187
214
  guard never fires and the mode you passed appears to have been ignored. Trust the folder,
188
215
  or start the session somewhere trusted.
189
216
 
217
+ ## Antigravity is installed and nothing happens
218
+
219
+ The most likely cause is that the session has no open workspace. Antigravity CLI gives its
220
+ hooks a project directory only through `workspacePaths`, and that array is empty unless the
221
+ session has one. The interactive TUI started in a project directory has one; a print-mode
222
+ `agy -p "..."` started in the same directory does not. The
223
+ hook then has no workspace to join, fails open as every ACC hook must, and this client shows
224
+ no hook output, so nothing anywhere says why.
225
+
226
+ Open the project as an Antigravity workspace, or pass it explicitly:
227
+
228
+ ```
229
+ agy -p "..." --add-dir /path/to/project
230
+ ```
231
+
232
+ The first TUI session in a folder you trusted at that same launch has no workspace either,
233
+ even with `--add-dir`; start the TUI again once the folder is trusted.
234
+
235
+ `acc doctor` names this state. Nothing else in the payload can substitute for it:
236
+ `transcriptPath` and `artifactDirectoryPath` both point inside the client's own
237
+ per-conversation directory, and the hook process does not inherit the directory the client
238
+ was started in.
239
+
240
+ If the session does have a workspace and ACC is still absent, check that the registration
241
+ actually loaded rather than that the file exists:
242
+
243
+ ```
244
+ agy -p "/hooks" --output-format json
245
+ ```
246
+
247
+ This client accepts a hook configuration it will not load and reports nothing. A file on
248
+ disk is not a registration: the Gemini CLI hook shape loads nothing here, an unsupported
249
+ event name is dropped out of an otherwise valid namespace, and one top-level key that is not
250
+ an integration namespace drops the whole file. The command above is the only answer that
251
+ counts.
252
+
253
+ The agent may see two ACC skills: `acc:acc`, which `acc install` puts there, and
254
+ `agents-can-communicate:acc`. The second is this client's own copy of ACC's Gemini CLI
255
+ extension, made on its first authenticated run into `~/.gemini/antigravity-cli/plugins/`. Its
256
+ skill loads, but none of its hooks do, and every command in it runs the Gemini CLI extension's
257
+ shim - so it works only while Gemini CLI is wired. `acc:acc` is the one to rely on; check what
258
+ the client actually loaded with:
259
+
260
+ ```
261
+ agy -p "/skills" --output-format json
262
+ ```
263
+
264
+ `agy plugin list` is not that check: it lists only plugins installed through
265
+ `agy plugin install`, and reports none while the imported skill above is loaded.
266
+
267
+ An agent that receives a peer message in print mode (`agy -p`) cannot answer it on its own.
268
+ It forms the right `acc reply` command from the skill, and print mode denies every command
269
+ because it cannot ask for approval; the client says so on stderr. The TUI asks instead.
270
+ ACC does not grant itself that permission. To let headless agents answer, allow the ACC
271
+ command yourself under `permissions.allow` in the client's settings, in the `command(...)`
272
+ form its message names.
273
+
274
+ ## Antigravity never wakes while idle
275
+
276
+ Live delivery needs four things, and `acc doctor` shows each:
277
+
278
+ - the live policy is on: `acc install --adapter antigravity --delivery actionable` (or `all`);
279
+ - the session is interactive - print mode ends with its turn and never runs a relay;
280
+ - the session attached to ACC at all (see the section above);
281
+ - the agent started the relay. ACC's context asks once per conversation; if the command was
282
+ declined, or never approved at the permission prompt, nothing asks again. Ask the agent to
283
+ run `sh "~/.gemini/config/acc/acc-relay.sh" start`, or start a new conversation.
284
+
285
+ `acc doctor` reports how many relays are running and, per session, whether a live transport is
286
+ active. A relay ends with its client; nothing is left running after the TUI exits or after
287
+ `acc uninstall`.
288
+
190
289
  ## Grok shows no injected message
191
290
 
192
291
  Grok discards UserPromptSubmit context. On the observed 1.0.24 client, run public
@@ -0,0 +1,91 @@
1
+ {
2
+ "evidence": [
3
+ {
4
+ "client": "antigravity-cli",
5
+ "version": "1.2.7",
6
+ "platform": "darwin-arm64",
7
+ "observedAt": "2026-09-20",
8
+ "capability": "lifecycle.sessionStart",
9
+ "fixture": "fixtures/SessionStart-1.2.7.json",
10
+ "provenance": "fixtures/certification-provenance.json",
11
+ "provenanceId": "session-start-1-2-7",
12
+ "idleBehavior": "fires when a session starts",
13
+ "busyBehavior": "fires before the first model invocation",
14
+ "authorityLevel": "advisory",
15
+ "limitations": [
16
+ "captured in print mode only",
17
+ "no hook_event_name field; the event is known only from the command argument",
18
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
19
+ ],
20
+ "result": "pass"
21
+ },
22
+ {
23
+ "client": "antigravity-cli",
24
+ "version": "1.2.7",
25
+ "platform": "darwin-arm64",
26
+ "observedAt": "2026-09-20",
27
+ "capability": "context.beforeTurnInjection",
28
+ "fixture": "fixtures/PreInvocation-1.2.7.json",
29
+ "provenance": "fixtures/certification-provenance.json",
30
+ "provenanceId": "pre-invocation-1-2-7",
31
+ "idleBehavior": "waits for the next invocation",
32
+ "busyBehavior": "does not interrupt an in-progress invocation",
33
+ "authorityLevel": "context",
34
+ "limitations": [
35
+ "requires the injectSteps ephemeralMessage envelope",
36
+ "userMessage and toolCall injection types were not exercised",
37
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
38
+ ],
39
+ "result": "pass"
40
+ },
41
+ {
42
+ "client": "antigravity-cli",
43
+ "version": "1.2.7",
44
+ "platform": "darwin-arm64",
45
+ "observedAt": "2026-09-20",
46
+ "capability": "delivery.nextTurn",
47
+ "fixture": "fixtures/PreInvocation-1.2.7.json",
48
+ "provenance": "fixtures/certification-provenance.json",
49
+ "provenanceId": "pre-invocation-1-2-7",
50
+ "idleBehavior": "offers complete peer messages at the next invocation",
51
+ "busyBehavior": "does not interrupt an in-progress invocation",
52
+ "authorityLevel": "context",
53
+ "limitations": [
54
+ "delivery requires the next invocation; there is no live push and no reply route",
55
+ "the end-of-turn Stop continuation carries its reason to the model and is a bounded nudge, not a gate: this adapter continues one turn at most once and the client caps consecutive continuations itself (vendor 1.1.9)",
56
+ "the continuation ceiling's own value was not captured, and neither was what the model is told when it is reached",
57
+ "captured on darwin-arm64 in print mode only; Linux, Windows and interactive sessions were not observed",
58
+ "agy agentapi send-message needs the running session's language-server address and CSRF token, and hooks are given neither, so ACC has no live push",
59
+ "reply routing back to ACC was not observed",
60
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
61
+ ],
62
+ "result": "pass"
63
+ },
64
+ {
65
+ "client": "antigravity-cli",
66
+ "version": "1.2.7",
67
+ "platform": "darwin-arm64",
68
+ "observedAt": "2026-09-21T19:29:23.548Z",
69
+ "capability": "delivery.livePush",
70
+ "fixture": "fixtures/delivery/antigravity-cli-1.2.7-relay-product.json",
71
+ "idleBehavior": "offered",
72
+ "provenance": "fixtures/certification-provenance.json",
73
+ "provenanceId": "native-delivery-1-2-7-relay-product",
74
+ "busyBehavior": "queued_after_turn",
75
+ "authorityLevel": "experimental",
76
+ "limitations": [
77
+ "Observed on darwin-arm64 with Antigravity CLI 1.2.7 in the TUI, model Gemini 3.8 Flash, through a private candidate built from this branch and installed into an isolated ACC data home; print mode ends with its turn and runs no relay.",
78
+ "The agent started the relay once for the conversation through run_command, after ACC's one-time context line named the command; the operator approved that command and each acc reply once at the client's permission prompt. ACC writes no permission rule.",
79
+ "The relay holds the session's language-server address and CSRF token in memory only; ACC's registration carries a nonce and a socket path, never the endpoint. ANTIGRAVITY_AGENTAPI_EXE named the same agy the relay runs.",
80
+ "An idle session woke with no user input. A message accepted while the model was streaming a long text answer was presented only after that answer completed. A message accepted while a turn waited on a tool permission was presented at that turn's next model invocation, after the tool returned, rather than after the turn.",
81
+ "The busy branch took three sends: the first landed at a tool boundary as above, the second arrived after the answer had already finished and so showed an idle wake; the third, timed against the running stream, is the one recorded.",
82
+ "The model receives each push as a SYSTEM_MESSAGE; the send-message title is not shown to it.",
83
+ "The observed reply loop uses the installed acc reply CLI; native delivery.replyRoute remains false. The router reports a relay push as transport live-adapter.",
84
+ "A repeated logical message kept its message id, took the durable path on the second send, and was pushed and answered once.",
85
+ "Antigravity runs no SessionEnd: the relay retired itself about five seconds after its agy exited, and a later message stayed queued in the durable inbox.",
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
+ ],
88
+ "result": "pass"
89
+ }
90
+ ]
91
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "artifactDirectoryPath": "<redacted: conversation artifact directory>",
3
+ "conversationId": "00000000-0000-4000-8000-000000000000",
4
+ "initialNumSteps": 1,
5
+ "invocationNum": 0,
6
+ "modelName": "gemini-3.8-flash-high",
7
+ "transcriptPath": "<redacted: conversation transcript>",
8
+ "workspacePaths": [
9
+ "/tmp/example-workspace"
10
+ ]
11
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "artifactDirectoryPath": "<redacted: conversation artifact directory>",
3
+ "conversationId": "00000000-0000-4000-8000-000000000000",
4
+ "modelName": "gemini-3.8-flash-high",
5
+ "transcriptPath": "<redacted: conversation transcript>",
6
+ "workspacePaths": [
7
+ "/tmp/example-workspace"
8
+ ]
9
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "note": "How `agy agentapi` reports a failure, captured on Antigravity CLI 1.2.7, macOS arm64, 2026-09-21, with no session endpoint at all: no CSRF token was set in either run, and the second pointed at a closed local port. Both answers are JSON on stdout with exit status 1 and nothing on stderr, so a caller reads failures from the same stream as successes.",
3
+ "answers": [
4
+ {
5
+ "env": "no ANTIGRAVITY_LS_ADDRESS",
6
+ "command": "agy agentapi get-conversation-metadata probe-id",
7
+ "exitStatus": 1,
8
+ "stderr": "",
9
+ "stdout": { "error": "ANTIGRAVITY_LS_ADDRESS is not set" }
10
+ },
11
+ {
12
+ "env": "ANTIGRAVITY_LS_ADDRESS=127.0.0.1:9 (closed)",
13
+ "command": "agy agentapi get-conversation-metadata probe-id",
14
+ "exitStatus": 1,
15
+ "stderr": "",
16
+ "stdout": { "response": {}, "error": "rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 127.0.0.1:9: connect: connection refused\"" }
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "note": "The live-push half of the agentapi capture, run by the operator on Antigravity CLI 1.2.7, macOS arm64, 2026-09-21. Step 1: in an interactive TUI opened in a probe project, the operator had the agent run one script from its own shell and approved it at the permission prompt; the script wrote the session's endpoint to a 0600 file and printed variable names only. Step 2: a separate process loaded that endpoint only inside subshells, asked the idle session's language server to deliver one message, watched the transcript, and deleted the endpoint file. Every value printed passed through a mask that replaced the exact token; no credential value was recorded anywhere. Conversation and initialization ids are redacted.",
3
+ "agentShellVariables": ["ANTIGRAVITY_CONVERSATION_ID", "ANTIGRAVITY_CSRF_TOKEN", "ANTIGRAVITY_LS_ADDRESS"],
4
+ "hookVariables": ["ANTIGRAVITY_CONVERSATION_ID"],
5
+ "getConversationMetadata": {
6
+ "response": { "conversationMetadata": { "metadata": {
7
+ "workspaces": [ { "workspaceFolderAbsoluteUri": "file://<probe project>", "gitRootAbsoluteUri": "file://<probe project>" } ],
8
+ "createdAt": "2026-09-21T16:28:32.249291Z",
9
+ "parentConversationId": "",
10
+ "rootConversationId": "<conversation>" } } }
11
+ },
12
+ "sendMessage": {
13
+ "command": "agy agentapi send-message --title \"ACC live push probe\" <conversation> \"Live push probe LP8812. Reply with the single word LP8812.\"",
14
+ "response": { "response": { "sendMessage": { "recipientId": "<conversation>",
15
+ "content": "Live push probe LP8812. Reply with the single word LP8812." } } }
16
+ },
17
+ "idleSessionAfterwards": {
18
+ "stepsBefore": 6,
19
+ "stepsAfter": 8,
20
+ "newSteps": [
21
+ { "at": "16:29:09Z", "source": "SYSTEM", "type": "SYSTEM_MESSAGE", "carriesMessage": true },
22
+ { "at": "16:29:09Z", "source": "MODEL", "type": "PLANNER_RESPONSE", "reply": "LP8812" }
23
+ ]
24
+ },
25
+ "findings": [
26
+ "an idle interactive session woke and answered a message pushed through agentapi, with no user input",
27
+ "the pushed message is presented to the model as a SYSTEM_MESSAGE, the same system framing as a Stop continuation reason",
28
+ "the endpoint that makes this possible - language-server address and CSRF token - exists in the agent's own tool shell and not in any hook's environment",
29
+ "an auto-mode coding agent was refused permission to materialize that token twice; the capture ran only because the operator performed the token step himself"
30
+ ]
31
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "captures": [
4
+ {
5
+ "client": "antigravity-cli",
6
+ "version": "1.2.7",
7
+ "platform": "darwin-arm64",
8
+ "observedAt": "2026-09-20",
9
+ "id": "session-start-1-2-7",
10
+ "event": "SessionStart",
11
+ "fixture": "fixtures/SessionStart-1.2.7.json",
12
+ "claims": [
13
+ {
14
+ "capability": "lifecycle.sessionStart",
15
+ "result": "pass",
16
+ "outcome": {
17
+ "kind": "event-observed",
18
+ "idle": "fires when a session starts",
19
+ "busy": "fires before the first model invocation",
20
+ "authority": "advisory",
21
+ "limitations": [
22
+ "captured in print mode only",
23
+ "no hook_event_name field; the event is known only from the command argument",
24
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
25
+ ]
26
+ }
27
+ }
28
+ ],
29
+ "sha256": "b6c1eaaf4efc1d103757402c904e0154973d5bd25b6706928356087db1cafa90",
30
+ "tool": null
31
+ },
32
+ {
33
+ "client": "antigravity-cli",
34
+ "version": "1.2.7",
35
+ "platform": "darwin-arm64",
36
+ "observedAt": "2026-09-20",
37
+ "id": "pre-invocation-1-2-7",
38
+ "event": "PreInvocation",
39
+ "fixture": "fixtures/PreInvocation-1.2.7.json",
40
+ "claims": [
41
+ {
42
+ "capability": "context.beforeTurnInjection",
43
+ "result": "pass",
44
+ "outcome": {
45
+ "kind": "model-visible",
46
+ "idle": "waits for the next invocation",
47
+ "busy": "does not interrupt an in-progress invocation",
48
+ "authority": "context",
49
+ "limitations": [
50
+ "requires the injectSteps ephemeralMessage envelope",
51
+ "userMessage and toolCall injection types were not exercised",
52
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
53
+ ]
54
+ }
55
+ },
56
+ {
57
+ "capability": "delivery.nextTurn",
58
+ "result": "pass",
59
+ "outcome": {
60
+ "kind": "model-visible",
61
+ "idle": "offers complete peer messages at the next invocation",
62
+ "busy": "does not interrupt an in-progress invocation",
63
+ "authority": "context",
64
+ "limitations": [
65
+ "delivery requires the next invocation; there is no live push and no reply route",
66
+ "the end-of-turn Stop continuation carries its reason to the model and is a bounded nudge, not a gate: this adapter continues one turn at most once and the client caps consecutive continuations itself (vendor 1.1.9)",
67
+ "the continuation ceiling's own value was not captured, and neither was what the model is told when it is reached",
68
+ "captured on darwin-arm64 in print mode only; Linux, Windows and interactive sessions were not observed",
69
+ "agy agentapi send-message needs the running session's language-server address and CSRF token, and hooks are given neither, so ACC has no live push",
70
+ "reply routing back to ACC was not observed",
71
+ "hooks attach only when the Antigravity session has an open workspace; an ordinary print-mode turn sends an empty workspacePaths and no session is created. This capture used --add-dir"
72
+ ]
73
+ }
74
+ }
75
+ ],
76
+ "sha256": "4543fa62b5668ad4aef6a34e6a5a3263c0c7cbf53b710339accca70721c7cad9",
77
+ "tool": null
78
+ },
79
+ {
80
+ "client": "antigravity-cli",
81
+ "version": "1.2.7",
82
+ "platform": "darwin-arm64",
83
+ "observedAt": "2026-09-20",
84
+ "id": "post-invocation-1-2-7",
85
+ "event": "PostInvocation",
86
+ "fixture": "fixtures/PostInvocation-1.2.7.json",
87
+ "claims": [
88
+ {
89
+ "capability": "lifecycle.postInvocation",
90
+ "result": "pass",
91
+ "outcome": {
92
+ "kind": "event-observed",
93
+ "idle": "does not fire",
94
+ "busy": "fires after each invocation",
95
+ "authority": "advisory",
96
+ "limitations": [
97
+ "envelope is byte-identical to PreInvocation for the same invocation"
98
+ ]
99
+ }
100
+ }
101
+ ],
102
+ "sha256": "4543fa62b5668ad4aef6a34e6a5a3263c0c7cbf53b710339accca70721c7cad9",
103
+ "tool": null
104
+ },
105
+ {
106
+ "client": "antigravity-cli",
107
+ "version": "1.2.7",
108
+ "platform": "darwin-arm64",
109
+ "observedAt": "2026-09-20",
110
+ "id": "stop-continue-1-2-7",
111
+ "event": "Stop",
112
+ "fixture": "fixtures/Stop-1.2.7.json",
113
+ "claims": [
114
+ {
115
+ "capability": "delivery.endOfTurnContinuation",
116
+ "result": "pass",
117
+ "outcome": {
118
+ "kind": "model-visible",
119
+ "idle": "fires with fullyIdle true",
120
+ "busy": "fires once per execution before the turn ends",
121
+ "authority": "bounded-blocking",
122
+ "limitations": [
123
+ "decision must be the exact string continue; any other value permits shutdown",
124
+ "vendor 1.1.9 caps consecutive continuations, so a turn cannot be held open indefinitely",
125
+ "the ceiling value was not captured"
126
+ ]
127
+ }
128
+ }
129
+ ],
130
+ "sha256": "f8ad528f27afa6306d63d1da295001170f9e1afbe5bf52be452d988d6c8d2431",
131
+ "tool": null
132
+ },
133
+ {
134
+ "client": "antigravity-cli",
135
+ "version": "1.2.7",
136
+ "platform": "darwin-arm64",
137
+ "observedAt": "2026-09-20",
138
+ "id": "stop-allow-1-2-7",
139
+ "event": "Stop",
140
+ "fixture": "fixtures/Stop-continued-1.2.7.json",
141
+ "claims": [
142
+ {
143
+ "capability": "delivery.endOfTurnContinuation",
144
+ "result": "pass",
145
+ "outcome": {
146
+ "kind": "event-observed",
147
+ "idle": "fires with fullyIdle true",
148
+ "busy": "second execution after a continuation",
149
+ "authority": "bounded-blocking",
150
+ "limitations": [
151
+ "executionNum increments across a continuation"
152
+ ]
153
+ }
154
+ }
155
+ ],
156
+ "sha256": "240c53e86e77c31a45ef12bfe4dd84732b4dfbb66faa3167c8c03c0034884d03",
157
+ "tool": null
158
+ },
159
+ {
160
+ "id": "native-delivery-1-2-7-relay-product",
161
+ "client": "antigravity-cli",
162
+ "version": "1.2.7",
163
+ "platform": "darwin-arm64",
164
+ "observedAt": "2026-09-21T19:29:23.548Z",
165
+ "fixture": "fixtures/delivery/antigravity-cli-1.2.7-relay-product.json",
166
+ "sha256": "ed06638f0210137992a2daab62f8bb80c42fa866981f6c461c530cdecf677845",
167
+ "event": null,
168
+ "tool": null,
169
+ "claims": [
170
+ {
171
+ "capability": "delivery.livePush",
172
+ "result": "pass",
173
+ "outcome": {
174
+ "kind": "native-delivery-observed",
175
+ "idle": "offered",
176
+ "busy": "queued_after_turn",
177
+ "authority": "experimental",
178
+ "limitations": [
179
+ "Observed on darwin-arm64 with Antigravity CLI 1.2.7 in the TUI, model Gemini 3.8 Flash, through a private candidate built from this branch and installed into an isolated ACC data home; print mode ends with its turn and runs no relay.",
180
+ "The agent started the relay once for the conversation through run_command, after ACC's one-time context line named the command; the operator approved that command and each acc reply once at the client's permission prompt. ACC writes no permission rule.",
181
+ "The relay holds the session's language-server address and CSRF token in memory only; ACC's registration carries a nonce and a socket path, never the endpoint. ANTIGRAVITY_AGENTAPI_EXE named the same agy the relay runs.",
182
+ "An idle session woke with no user input. A message accepted while the model was streaming a long text answer was presented only after that answer completed. A message accepted while a turn waited on a tool permission was presented at that turn's next model invocation, after the tool returned, rather than after the turn.",
183
+ "The busy branch took three sends: the first landed at a tool boundary as above, the second arrived after the answer had already finished and so showed an idle wake; the third, timed against the running stream, is the one recorded.",
184
+ "The model receives each push as a SYSTEM_MESSAGE; the send-message title is not shown to it.",
185
+ "The observed reply loop uses the installed acc reply CLI; native delivery.replyRoute remains false. The router reports a relay push as transport live-adapter.",
186
+ "A repeated logical message kept its message id, took the durable path on the second send, and was pushed and answered once.",
187
+ "Antigravity runs no SessionEnd: the relay retired itself about five seconds after its agy exited, and a later message stayed queued in the durable inbox.",
188
+ "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."
189
+ ]
190
+ }
191
+ }
192
+ ],
193
+ "productEvidence": {
194
+ "fixture": "fixtures/delivery/antigravity-cli-1.2.7-relay-product-evidence.json",
195
+ "sha256": "26b7bd826f0f2b74756b0f1bec31c45ba761d04295897ec4d8c9ec821b109877"
196
+ },
197
+ "historicalFixtures": [
198
+ {
199
+ "fixture": "fixtures/agentapi-live-push-1.2.7.json",
200
+ "sha256": "57cfd9d4178d3799fe48aff787c0bcf5bed5f59d885a03d74f97d0a1b573048e"
201
+ },
202
+ {
203
+ "fixture": "fixtures/live-push-surfaces-1.2.7.json",
204
+ "sha256": "38e24cb807fa3781b803997d70f9bf24ff8a10837e29b6e7b77b7b0b5607f716"
205
+ },
206
+ {
207
+ "fixture": "fixtures/agentapi-error-answers-1.2.7.json",
208
+ "sha256": "970dd701d2796c647425b5a7e65ce68dd26b6d6e887a919d8246d934c5b55af0"
209
+ },
210
+ {
211
+ "fixture": "fixtures/hooks-first-trust-no-workspace-1.2.7.json",
212
+ "sha256": "024c5c53915c0f09fac9b2ba118f1831eb97f26c6d4b28aacc4e4a2c5d7500ee"
213
+ }
214
+ ]
215
+ }
216
+ ]
217
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "source": "real-client-capture",
4
+ "client": "antigravity-cli",
5
+ "phase": "product",
6
+ "clientVersion": "1.2.7",
7
+ "platform": "darwin-arm64",
8
+ "packageSha256": "fa1dab632b9ec5cef0e391b3779816eb479beaaee6c6197b0b166a24b0cf2887",
9
+ "startedAt": "2026-09-21T19:11:03.000Z",
10
+ "finishedAt": "2026-09-21T19:29:23.548Z",
11
+ "scenarioCount": 5,
12
+ "passedCount": 5,
13
+ "failedCount": 0,
14
+ "cleanup": {
15
+ "attempted": true,
16
+ "outcome": "passed",
17
+ "ownedProcesses": "stopped",
18
+ "temporaryState": "removed"
19
+ },
20
+ "scenarios": [
21
+ {
22
+ "caseId": "A01",
23
+ "outcome": "passed",
24
+ "startedAt": "2026-09-21T19:11:03.000Z",
25
+ "finishedAt": "2026-09-21T19:13:43.911Z",
26
+ "messageId": "message_LcQceupPfUv_I5WCnb1bCw",
27
+ "observations": [
28
+ {
29
+ "kind": "delivery",
30
+ "at": "2026-09-21T19:13:43.911Z",
31
+ "outcome": "offered"
32
+ },
33
+ {
34
+ "kind": "relay-push",
35
+ "at": "2026-09-21T19:11:04.018Z",
36
+ "outcome": "pushed"
37
+ },
38
+ {
39
+ "kind": "model-turn",
40
+ "outcome": "started-without-user-input",
41
+ "at": "2026-09-21T19:11:04.000Z"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "caseId": "A02",
47
+ "outcome": "passed",
48
+ "startedAt": "2026-09-21T19:23:38.000Z",
49
+ "finishedAt": "2026-09-21T19:24:47.608Z",
50
+ "messageId": "message_JkME_nTn55TeLLB3Qk31mQ",
51
+ "observations": [
52
+ {
53
+ "kind": "delivery",
54
+ "at": "2026-09-21T19:24:47.608Z",
55
+ "outcome": "offered"
56
+ },
57
+ {
58
+ "kind": "relay-push",
59
+ "at": "2026-09-21T19:23:43.599Z",
60
+ "outcome": "pushed"
61
+ },
62
+ {
63
+ "kind": "presentation",
64
+ "outcome": "after-running-turn",
65
+ "at": "2026-09-21T19:24:09.000Z"
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "caseId": "A03",
71
+ "outcome": "passed",
72
+ "startedAt": "2026-09-21T19:11:03.000Z",
73
+ "finishedAt": "2026-09-21T19:13:43.943Z",
74
+ "messageId": "message_LcQceupPfUv_I5WCnb1bCw",
75
+ "observations": [
76
+ {
77
+ "kind": "answer",
78
+ "outcome": "recorded",
79
+ "at": "2026-09-21T19:11:56.127Z"
80
+ },
81
+ {
82
+ "kind": "receipt",
83
+ "outcome": "acknowledged",
84
+ "at": "2026-09-21T19:11:56.000Z"
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "caseId": "A04",
90
+ "outcome": "passed",
91
+ "startedAt": "2026-09-21T19:26:19.000Z",
92
+ "finishedAt": "2026-09-21T19:26:44.795Z",
93
+ "messageId": "message_zVsXVuB-kvhdCx-HchIyjA",
94
+ "observations": [
95
+ {
96
+ "kind": "relay-push",
97
+ "at": "2026-09-21T19:26:19.584Z",
98
+ "outcome": "pushed-once"
99
+ },
100
+ {
101
+ "kind": "logical-message",
102
+ "outcome": "same-message-id",
103
+ "at": "2026-09-21T19:26:20.000Z"
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "caseId": "A05",
109
+ "outcome": "passed",
110
+ "startedAt": "2026-09-21T19:28:49.000Z",
111
+ "finishedAt": "2026-09-21T19:29:23.548Z",
112
+ "messageId": "message_rO75hkkmDXB0Mf6fVCj7Uw",
113
+ "observations": [
114
+ {
115
+ "kind": "delivery",
116
+ "at": "2026-09-21T19:29:23.548Z",
117
+ "outcome": "queued"
118
+ },
119
+ {
120
+ "kind": "relay",
121
+ "at": "2026-09-21T19:28:55.391Z",
122
+ "outcome": "retired"
123
+ },
124
+ {
125
+ "kind": "client",
126
+ "outcome": "exited",
127
+ "at": "2026-09-21T19:28:50.000Z"
128
+ }
129
+ ]
130
+ }
131
+ ]
132
+ }