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.
- package/README.md +2 -1
- package/bin/acc-antigravity-relay.mjs +7 -0
- package/bin/entrypoints/acc-antigravity-relay.mjs +116 -0
- package/bin/entrypoints/acc-bootstrap.mjs +4 -0
- package/bin/entrypoints/acc-hook.mjs +11 -7
- package/bin/entrypoints/antigravity-relay-binding.mjs +43 -0
- package/docs/ADAPTER_AUTHORING.md +33 -0
- package/docs/ARCHITECTURE.md +27 -4
- package/docs/CAPABILITIES.md +22 -16
- package/docs/CLI.md +21 -3
- package/docs/CONCEPTS.md +7 -0
- package/docs/CONFIGURATION.md +1 -0
- package/docs/GETTING_STARTED.md +10 -4
- package/docs/HOW_IT_WORKS.md +7 -1
- package/docs/TROUBLESHOOTING.md +99 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/certification.json +91 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/PreInvocation-1.2.7.json +11 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/SessionStart-1.2.7.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/agentapi-error-answers-1.2.7.json +19 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/agentapi-live-push-1.2.7.json +31 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/certification-provenance.json +217 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-cli-1.2.7-relay-product-evidence.json +132 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-cli-1.2.7-relay-product.json +29 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/hooks-first-trust-no-workspace-1.2.7.json +37 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/live-push-surfaces-1.2.7.json +38 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +28 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +5 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/skills/acc/SKILL.md +329 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +119 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/agentapi.mjs +98 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/hooks.mjs +201 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +708 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/native-delivery.mjs +170 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-endpoint.mjs +116 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-start.mjs +123 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay.mjs +195 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/relays.mjs +64 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +14 -2
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +2 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/hooks.mjs +5 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +14 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +14 -2
- 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-grok/plugin/skills/acc/SKILL.md +14 -2
- package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +14 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +37 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +25 -5
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +1 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-attempt.mjs +1 -1
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +6 -2
- package/node_modules/@agents-can-communicate/cli/src/help.mjs +1 -1
- package/node_modules/@agents-can-communicate/cli/src/hook-workspace.mjs +118 -0
- package/node_modules/@agents-can-communicate/cli/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +17 -3
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +8 -4
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/command-prefix.mjs +26 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +6 -4
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +3 -1
- package/node_modules/@agents-can-communicate/cli/src/session-owner.mjs +27 -6
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/native-attempt.mjs +31 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/owner-context.mjs +16 -3
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +70 -17
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +4 -0
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +10 -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/package.json +3 -1
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -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
|
+
}
|
package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/PreInvocation-1.2.7.json
ADDED
|
@@ -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
|
+
}
|
package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/SessionStart-1.2.7.json
ADDED
|
@@ -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
|
+
}
|