agents-can-communicate 0.10.3 → 0.11.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 +29 -21
- package/bin/acc-indicator.mjs +5 -0
- package/docs/CAPABILITIES.md +3 -0
- package/docs/CLI.md +34 -7
- package/docs/MCP.md +42 -2
- package/docs/PROTOCOL.md +19 -0
- package/docs/STATUS_INDICATOR.md +128 -0
- package/docs/TROUBLESHOOTING.md +10 -0
- package/docs/UPGRADING.md +16 -0
- package/docs/WHY_ACC.md +14 -8
- package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/skills/acc/SKILL.md +29 -5
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +3 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/indicator-install.mjs +80 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/indicator-render.mjs +8 -0
- package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +7 -4
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/hooks/indicator.mjs +67 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +29 -5
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +1 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +16 -5
- 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 +48 -5
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +9 -6
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-endpoint.mjs +16 -5
- 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 +29 -5
- 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 +29 -5
- package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +4 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/indicator-install.mjs +30 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/indicator.mjs +23 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/install.mjs +9 -5
- 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 +29 -5
- package/node_modules/@agents-can-communicate/adapter-kimi/src/adapter.mjs +4 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/src/indicator-install.mjs +30 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/src/indicator.mjs +17 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/src/install.mjs +12 -6
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- 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 +5 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/indicator-command.mjs +14 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/indicator-text.mjs +13 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +2 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/offer-observation-order.mjs +12 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/offer-observation-writer.mjs +37 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/offer-observation.mjs +47 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/toml-indicator.mjs +141 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/toml-scan.mjs +99 -0
- package/node_modules/@agents-can-communicate/cli/package.json +2 -1
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +5 -3
- package/node_modules/@agents-can-communicate/cli/src/claim-command.mjs +64 -0
- package/node_modules/@agents-can-communicate/cli/src/help.mjs +15 -8
- package/node_modules/@agents-can-communicate/cli/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/cli/src/indicator-command.mjs +65 -0
- package/node_modules/@agents-can-communicate/cli/src/indicator-previous-command.mjs +84 -0
- package/node_modules/@agents-can-communicate/cli/src/indicator-previous-windows.mjs +8 -0
- package/node_modules/@agents-can-communicate/cli/src/indicator.mjs +112 -0
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +4 -0
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +8 -54
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +19 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +5 -3
- package/node_modules/@agents-can-communicate/cli/src/native-session-diagnostics.mjs +2 -0
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/claim-selectors.mjs +62 -0
- package/node_modules/@agents-can-communicate/core/src/claims.mjs +88 -81
- package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/delivery-router/src/refresh-binding.mjs +9 -6
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +19 -5
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +3 -0
- package/node_modules/@agents-can-communicate/installer/src/delivery-diagnostics.mjs +1 -0
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +2 -1
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +11 -2
- package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
- package/node_modules/@agents-can-communicate/mcp-server/src/claim-tools.mjs +56 -0
- package/node_modules/@agents-can-communicate/mcp-server/src/input-validator.mjs +9 -0
- package/node_modules/@agents-can-communicate/mcp-server/src/server.mjs +7 -8
- package/node_modules/@agents-can-communicate/mcp-server/src/tools.mjs +27 -9
- package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/index.mjs +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/session-read.mjs +13 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
**The message your clients can’t send each other.**
|
|
4
4
|
|
|
5
5
|
Claude Code can message your other Claude Code sessions, and Codex can queue a message for
|
|
6
|
-
another Codex session.
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
another Codex session. From Claude Code, OpenAI’s Codex plugin can ask Codex for a review,
|
|
7
|
+
hand it a task or move the conversation into Codex; it runs Codex under Claude Code, in that
|
|
8
|
+
direction only. Neither client offers a way to message a session you opened yourself in the
|
|
9
|
+
other one. ACC carries questions, reviews and handoffs between those sessions, in either
|
|
10
|
+
direction, on your machine.
|
|
9
11
|
|
|
10
12
|
You open each client normally and choose its work. Every session keeps its own model,
|
|
11
13
|
conversation, and permissions. Coordination runs locally, with no lead agent managing the
|
|
@@ -45,16 +47,17 @@ flowchart TB
|
|
|
45
47
|
|
|
46
48
|
## When ACC helps
|
|
47
49
|
|
|
48
|
-
- **
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- **
|
|
52
|
-
a
|
|
50
|
+
- **Run parallel work across clients.** Start each task in whichever client has limit left,
|
|
51
|
+
and let the sessions see who is working on what, ask each other about a shared API, and
|
|
52
|
+
agree who takes which issue before they build around different assumptions.
|
|
53
|
+
- **Get a second opinion from another vendor’s model, in either direction.** Ask a Codex
|
|
54
|
+
session you already have open to review a change your Claude Code session just made, and
|
|
55
|
+
send its findings back to the session that wrote the code; or let Codex ask Claude Code.
|
|
53
56
|
- **Switch clients mid-feature.** When a limit approaches or another model suits the work
|
|
54
|
-
better, leave a handoff with decisions
|
|
55
|
-
open next.
|
|
57
|
+
better, leave a handoff with decisions, unfinished work and what was verified, rather than a
|
|
58
|
+
transcript, for a session in the client you open next.
|
|
56
59
|
|
|
57
|
-
## Try one
|
|
60
|
+
## Try one feature across two clients
|
|
58
61
|
|
|
59
62
|
You’ll need **macOS, Linux or Windows 10/11, Node.js 24 or newer**, and supported coding
|
|
60
63
|
clients on the same machine and operating-system user. On Windows, ACC runs natively, with no
|
|
@@ -70,24 +73,29 @@ The installer connects supported clients it finds. Follow its activation instruc
|
|
|
70
73
|
any required hook or plugin trust, then restart your clients from the project directory. The
|
|
71
74
|
[setup guide](docs/GETTING_STARTED.md) covers client-specific steps.
|
|
72
75
|
|
|
73
|
-
Open Claude Code and Codex in the same project
|
|
74
|
-
|
|
76
|
+
Open Claude Code and Codex in the same project and give each one its own part of one feature.
|
|
77
|
+
Ask Codex:
|
|
75
78
|
|
|
76
79
|
```text
|
|
77
|
-
|
|
78
|
-
you just made. Name the files and what it should check.
|
|
80
|
+
Add an account-registration endpoint.
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
And ask Claude Code:
|
|
82
84
|
|
|
83
85
|
```text
|
|
84
|
-
|
|
85
|
-
what it asks, and reply with what you found.
|
|
86
|
+
Build the account-registration screen.
|
|
86
87
|
```
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
Those are the whole prompts. Each session sees that the other is present and what it is
|
|
90
|
+
working on. When the screen needs the endpoint’s request and response shape, the Claude Code
|
|
91
|
+
session can ask the Codex session and get the answer at its next turn, without you carrying
|
|
92
|
+
it across; the sender can check whether its question was delivered and answered. The agents
|
|
93
|
+
decide when to coordinate; ACC does not guarantee they will notice every dependency.
|
|
94
|
+
|
|
95
|
+
The same channel carries a review: ask the session that made a change to request a review
|
|
96
|
+
from the other session in ACC, naming the files, and ask the other to answer it. The
|
|
97
|
+
[setup guide](docs/GETTING_STARTED.md#2-open-two-sessions-and-give-them-ordinary-tasks)
|
|
98
|
+
walks through both.
|
|
91
99
|
|
|
92
100
|
## Client support
|
|
93
101
|
|
package/docs/CAPABILITIES.md
CHANGED
|
@@ -28,6 +28,9 @@ Run `acc doctor` in the project when observed behavior differs from this page. I
|
|
|
28
28
|
the installed client version, platform, effective capability, and fallback instead of
|
|
29
29
|
assuming that a newer or differently packaged client behaves like a captured one.
|
|
30
30
|
|
|
31
|
+
The optional [ACC indicator](STATUS_INDICATOR.md) shows this chat's reception mode and
|
|
32
|
+
known failures in supported client footers. It reads local state; it is not a transport probe.
|
|
33
|
+
|
|
31
34
|
## Certified support
|
|
32
35
|
|
|
33
36
|
Each column names the version that recorded the capture, on `darwin-arm64`. Every later
|
package/docs/CLI.md
CHANGED
|
@@ -37,8 +37,8 @@ option value remains data: `--body --help` sends the literal body `--help`.
|
|
|
37
37
|
| `acc status` | — | `--session`, `--generation`, `--participant`, `--all` |
|
|
38
38
|
| `acc sync` | — | `--session`, `--generation`, `--cursor`, `--limit`, `--scope delta|full|history`, `--type`, `--message`, `--current` |
|
|
39
39
|
| `acc work` | `--summary` unless `--clear` | `--session`, `--generation`, `--mode`, `--state`, repeated `--hint`, `--clear` |
|
|
40
|
-
| `acc claim` | `--resource` | `--session`, `--generation`, `--mode`, `--enforcement`, `--reason`, `--lease` |
|
|
41
|
-
| `acc release` | `--claim
|
|
40
|
+
| `acc claim` | one or more `--resource` | `--session`, `--generation`, `--mode`, `--enforcement`, `--reason`, `--lease` |
|
|
41
|
+
| `acc release` | exactly one selector family: repeated `--claim`, repeated `--resource`, or `--all` | `--session`, `--generation`, `--authority` (`human` or `policy`, single target only), `--reason` |
|
|
42
42
|
| `acc message` | `--subject`, `--body` | repeated `--to`, `--supersedes` or `--withdraws`, `--type`, `--obligation`, `--client-message-id`, owner flags |
|
|
43
43
|
| `acc request` | `--to`, `--title` | `--detail`, `--client-message-id`, owner flags |
|
|
44
44
|
| `acc inbox` | — | `--message`, `--cursor`, `--limit`, owner flags |
|
|
@@ -175,6 +175,12 @@ held.
|
|
|
175
175
|
```bash
|
|
176
176
|
acc claim --resource 'file:packages/core/**' --reason "editing receipt logic"
|
|
177
177
|
acc release --resource 'file:packages/core/**'
|
|
178
|
+
|
|
179
|
+
acc claim --resource 'file:packages/core/**' \
|
|
180
|
+
--resource 'file:packages/protocol/**' --reason "updating claim validation"
|
|
181
|
+
acc release --resource 'file:packages/core/**' \
|
|
182
|
+
--resource 'file:packages/protocol/**'
|
|
183
|
+
acc release --all
|
|
178
184
|
```
|
|
179
185
|
|
|
180
186
|
File resources use repository-relative paths. A directory claim ends in `/**`. The example
|
|
@@ -182,10 +188,31 @@ creates an advisory claim: omitted `--enforcement` always means `advisory`, even
|
|
|
182
188
|
certified clients. Request `--enforcement guarded` explicitly when needed; an incapable
|
|
183
189
|
live participant still downgrades workspace protection. MCP claims are always advisory.
|
|
184
190
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
191
|
+
Repeat `--resource` to acquire several claims atomically. The shared mode, enforcement,
|
|
192
|
+
reason, and lease apply to every resource. ACC rejects duplicate resources after
|
|
193
|
+
normalization. A conflict exits `5` without creating any claims or renewing existing ones.
|
|
194
|
+
Batch error `details.conflicts` identifies each blocked requested resource and its holders.
|
|
195
|
+
Repeating a successful claim command renews this session's existing claims on those resources.
|
|
196
|
+
|
|
197
|
+
Release accepts exactly one selector family: one or more `--resource`, one or more
|
|
198
|
+
`--claim`, or `--all`. Duplicate selectors after normalization are rejected.
|
|
199
|
+
Ordinary explicit targets must exist and belong to this session. A missing or foreign
|
|
200
|
+
target fails the whole release without removing any claims. Repeating an explicit
|
|
201
|
+
release after its targets were removed remains an error.
|
|
202
|
+
|
|
203
|
+
`--all` releases only this session's claims in the selected workspace. An empty set
|
|
204
|
+
succeeds, including for a solo ephemeral session. It selects the current owned set on
|
|
205
|
+
each call, so a retry can release claims acquired since the first call. Release keeps
|
|
206
|
+
the session and intent open. `work --clear` clears intent, `ack` acknowledges a message,
|
|
207
|
+
and `finish` records a handoff and closes presence.
|
|
208
|
+
|
|
209
|
+
With `--json`, one acquisition returns a claim record as `data`; one release returns
|
|
210
|
+
`data: {claimId}`. Multiple resources return `data: {claims: [...]}`. Multiple release
|
|
211
|
+
selectors and `--all` return `data: {claimIds: [...]}`.
|
|
212
|
+
|
|
213
|
+
A single target can still use `--authority human` or `--authority policy` to release
|
|
214
|
+
another owner's claim. Name the actual human decision or approved policy with `--reason`.
|
|
215
|
+
Batch release and `--all` reject authority. A peer's request alone is not force-release authority.
|
|
189
216
|
|
|
190
217
|
### Messages and requests
|
|
191
218
|
|
|
@@ -360,7 +387,7 @@ before leaving, request the concrete continuation and obtain a substantive reply
|
|
|
360
387
|
|
|
361
388
|
| Command | Flags |
|
|
362
389
|
|---|---|
|
|
363
|
-
| `acc install` | `--adapter`, `--home`, `--delivery off|actionable|all`, `--dry-run`, `--downgrade` |
|
|
390
|
+
| `acc install` | `--adapter`, `--home`, `--delivery off|actionable|all`, `--indicator on|off`, `--dry-run`, `--downgrade` |
|
|
364
391
|
| `acc uninstall` | `--adapter`, `--home`, `--dry-run` |
|
|
365
392
|
| `acc doctor` | `--home`, `--repair`, `--migrate-store` |
|
|
366
393
|
| `acc config init` | `--yes`, `--force` |
|
package/docs/MCP.md
CHANGED
|
@@ -50,8 +50,8 @@ successfully yet refuse tool calls; that is distinct from a protocol handshake f
|
|
|
50
50
|
| `acc_status` | — | — |
|
|
51
51
|
| `acc_sync` | — | `cursor`, `scope: delta|full|history`, `limit: 1..500`, `kind`, `messageId`, `current` |
|
|
52
52
|
| `acc_work` | `summary` and `mode`, or `clear: true` | `state`, `resourceHints` |
|
|
53
|
-
| `acc_claim` | `action`; `resource` for acquire, `claimId` for renew | `mode`, `reason`, `leaseSeconds` where valid |
|
|
54
|
-
| `acc_release` | `claimId` | — |
|
|
53
|
+
| `acc_claim` | `action`; exactly one of `resource` or `resources` for acquire, `claimId` for renew | `mode`, `reason`, `leaseSeconds` where valid |
|
|
54
|
+
| `acc_release` | exactly one of `claimId`, `claimIds`, `resource`, `resources`, or `all: true` | — |
|
|
55
55
|
| `acc_message` | `to`, `subject`, `body` | `kind`, `obligation`, `clientMessageId`, `supersedes`, `withdraws` |
|
|
56
56
|
| `acc_request` | `toParticipantId`, `title` | `detail`, `clientMessageId` |
|
|
57
57
|
| `acc_inbox` | — | `messageId`, `cursor`, `limit: 1..500` |
|
|
@@ -108,6 +108,46 @@ session that has not joined, omit `toParticipantId` to leave a workspace handoff
|
|
|
108
108
|
session can recover that historical handoff through the history list and exact read;
|
|
109
109
|
its addressed inbox will not contain past workspace broadcasts.
|
|
110
110
|
|
|
111
|
+
## Acquire and release claims
|
|
112
|
+
|
|
113
|
+
Acquire one resource with `acc_claim {action: "acquire", resource: "file:src/a.mjs"}`.
|
|
114
|
+
Use a nonempty `resources` array for an atomic batch:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"action": "acquire",
|
|
119
|
+
"resources": ["file:src/a.mjs", "file:src/b.mjs"],
|
|
120
|
+
"mode": "exclusive",
|
|
121
|
+
"reason": "updating both modules",
|
|
122
|
+
"leaseSeconds": 1800
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Shared mode, reason, and lease apply to every resource. Duplicate resources after
|
|
127
|
+
normalization are rejected. A conflict changes no claims, including existing leases.
|
|
128
|
+
Batch error `details.conflicts` identifies each blocked requested resource and its holders.
|
|
129
|
+
Repeating acquisition renews this session's existing claims on those resources.
|
|
130
|
+
`action: "renew"` still accepts only one `claimId` and its optional lease.
|
|
131
|
+
|
|
132
|
+
Release uses one mutually exclusive selector: `claimId`, a nonempty `claimIds` array,
|
|
133
|
+
`resource`, a nonempty `resources` array, or `all: true`. For example,
|
|
134
|
+
`acc_release {resources: ["file:src/a.mjs", "file:src/b.mjs"]}` releases both claims atomically.
|
|
135
|
+
Duplicate selectors after normalization are rejected. Explicit targets must exist and
|
|
136
|
+
belong to this session. A missing or foreign target fails without removing any claims.
|
|
137
|
+
MCP offers no force-release authority.
|
|
138
|
+
|
|
139
|
+
`acc_release {all: true}` releases only this session's current claims in its workspace.
|
|
140
|
+
An empty set succeeds, including for a solo ephemeral session. Release keeps the session
|
|
141
|
+
and intent open. `acc_work {clear: true}` clears intent, `acc_ack` acknowledges a message,
|
|
142
|
+
and `acc_finish` records a handoff and closes presence.
|
|
143
|
+
|
|
144
|
+
Scalar acquisition returns the existing Claim. Scalar release returns `{released: claimId}`.
|
|
145
|
+
Array acquisition returns `{claims: [...]}`. Array release and `all: true` return
|
|
146
|
+
`{released: [...]}`. Array inputs keep these shapes even with one element.
|
|
147
|
+
`all: true` can return `{released: []}`.
|
|
148
|
+
Repeating an explicit release after its targets were removed remains an error.
|
|
149
|
+
Each `all: true` call selects the current owned set, so a retry can release newly acquired claims.
|
|
150
|
+
|
|
111
151
|
## Account for the manual boundary
|
|
112
152
|
|
|
113
153
|
The generic MCP capability declaration is all false:
|
package/docs/PROTOCOL.md
CHANGED
|
@@ -45,6 +45,25 @@ exclusive mode, advisory or guarded enforcement, reason, and lease timestamps. C
|
|
|
45
45
|
acquisition and conflict detection are atomic. Presence becoming stale never releases a
|
|
46
46
|
claim; expiry or an explicit release does.
|
|
47
47
|
|
|
48
|
+
Batch acquisition validates a nonempty resource list before writing. Duplicate resources
|
|
49
|
+
after normalization are rejected. Mode, enforcement, reason, and lease apply to the whole
|
|
50
|
+
batch. If any requested resource conflicts, no claim is created or renewed. Batch error
|
|
51
|
+
`details.conflicts` lists the blocked requested resources and their blocking claims.
|
|
52
|
+
A successful repeated acquisition renews the owner's existing claims on those resources.
|
|
53
|
+
|
|
54
|
+
Batch release selects claims by IDs, canonical resources, or the calling session's whole
|
|
55
|
+
owned set. Exactly one selector family is accepted. Explicit selectors must be nonempty
|
|
56
|
+
and unique after normalization. A missing or foreign target prevents every removal.
|
|
57
|
+
The whole-set selector releases only that session's claims in its workspace and succeeds
|
|
58
|
+
when the set is empty, including for a solo ephemeral session. Batch release has no
|
|
59
|
+
force-release authority. The existing single-claim human or policy release remains separate.
|
|
60
|
+
|
|
61
|
+
Explicit release retries still fail once their targets were removed. A whole-set retry
|
|
62
|
+
selects the current owned set, which can include claims acquired after the first call.
|
|
63
|
+
Release keeps the session and intent open. Clearing intent, acknowledging messages, and
|
|
64
|
+
finishing with a handoff remain separate operations. Batch operations retain individual
|
|
65
|
+
claim records and per-claim events. They add no record schema or event type.
|
|
66
|
+
|
|
48
67
|
## Message envelope
|
|
49
68
|
|
|
50
69
|
Every message contains:
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# The ACC indicator
|
|
2
|
+
|
|
3
|
+
The indicator describes incoming messages for the current chat. It does not describe
|
|
4
|
+
other chats, confirm that a message was read, or promise when an agent will answer.
|
|
5
|
+
|
|
6
|
+
In Claude Code, only the status glyph carries color: green for `●`, warning color for
|
|
7
|
+
`!`, and neutral for `…`. All supported clients use the same fixed green (`#2c7a39`) for
|
|
8
|
+
`●`, without dimming. Claude uses its theme for the other states. The name
|
|
9
|
+
and `turn`/`inbox` qualifier keep the ordinary footer color. No background is added.
|
|
10
|
+
|
|
11
|
+
Antigravity's command emits ANSI foreground color around only the glyph, even when
|
|
12
|
+
stdout is a pipe. Existing installed commands need no new arguments. `--json` and
|
|
13
|
+
`--details` keep their plain, uncolored output.
|
|
14
|
+
|
|
15
|
+
| Display | Meaning |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `ACC ●` | ACC is active. This chat has an automatic delivery binding with no newer recorded failure. A busy client can queue a request. |
|
|
18
|
+
| `ACC ● · turn` | ACC is active. Messages arrive on the next normal turn. |
|
|
19
|
+
| `ACC ● · inbox` | ACC is active. The agent reads messages through `acc inbox`. This does not imply a polling schedule. |
|
|
20
|
+
| `ACC …` | The Claude indicator is reading state or waiting for startup hooks, for at most five seconds. |
|
|
21
|
+
| `ACC ! · turn` or `ACC ! · inbox` | ACC observed a failure. The qualifier names the remaining reception path. |
|
|
22
|
+
| `ACC !` | The chat is not registered, or the indicator cannot read its state. |
|
|
23
|
+
|
|
24
|
+
An unsupported wake-up capability is a normal `turn` or `inbox` mode. A failure of an
|
|
25
|
+
expected automatic channel retains `!`; it does not silently become a normal fallback.
|
|
26
|
+
The current `--delivery off` setting also uses the normal fallback. Details explain that
|
|
27
|
+
setting. Enabling the indicator does not enable automatic delivery or change its consent.
|
|
28
|
+
|
|
29
|
+
An idle chat does not lose its indicator because its heartbeat or delivery lease is old.
|
|
30
|
+
The sender verifies and renews an expired lease when it next attempts delivery. The badge
|
|
31
|
+
uses local observations. It does not test the endpoint on each refresh. Lease validity is
|
|
32
|
+
available in JSON as `leaseCurrent`, separately from reception and health.
|
|
33
|
+
Offer diagnostics are published separately from delivery. A slow diagnostic write
|
|
34
|
+
does not hold up offers to the next participant or change delivery receipts.
|
|
35
|
+
|
|
36
|
+
## Enable or disable
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
acc install --adapter claude_code --indicator on
|
|
40
|
+
acc install --adapter antigravity --indicator on
|
|
41
|
+
acc install --adapter kimi --indicator on
|
|
42
|
+
acc install --adapter grok --indicator on
|
|
43
|
+
acc install --adapter claude_code --indicator off
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The initial preference is off. A later install or automatic update keeps the saved choice
|
|
47
|
+
when `--indicator` is omitted. `--dry-run` makes no changes. Normal uninstall removes the
|
|
48
|
+
indicator and keeps status-line settings that the user changed.
|
|
49
|
+
|
|
50
|
+
## Client surfaces
|
|
51
|
+
|
|
52
|
+
| Client | Integration and limits |
|
|
53
|
+
|---|---|
|
|
54
|
+
| Claude Code | From 2.1.287: a plugin mod adds a native footer label. It does not change `settings.statusLine`. Use `/reload-plugins` in an open session after installing. Client policy can disable mods. |
|
|
55
|
+
| Antigravity CLI | A status-line command adds ACC below the built-in line. If a custom command exists, ACC passes it the original stdin and appends the badge. Existing padding and stacking choices remain. Start a new CLI session after changing settings. |
|
|
56
|
+
| Codex and Gemini CLI | No automatic indicator installation. Their native status lines do not expose this command surface. |
|
|
57
|
+
| Kimi Code | From 2.1.1: compose one line with the existing custom command, or available mode/model/cwd/branch fields. Run `/reload-tui`. The native context/warnings line remains. |
|
|
58
|
+
| Grok | From 1.0.46: compose the optional status row with the existing command, or configured built-in items. ACC adds idle refresh once per second unless an interval is already configured. Start a new Grok session. |
|
|
59
|
+
| Other hosts | A host that provides the native session id can run `acc-indicator` as a custom widget. This does not certify that host's UI integration. |
|
|
60
|
+
|
|
61
|
+
Claude prints one diagnostic when a new problem appears. `/acc-status` shows the current
|
|
62
|
+
explanation and recovery step without a model request. Healthy refreshes do not print
|
|
63
|
+
messages. Antigravity's command surface has no equivalent notification: only a problem
|
|
64
|
+
adds `acc doctor` to the compact line. Run that command in the project for diagnostics.
|
|
65
|
+
|
|
66
|
+
The Antigravity wrapper runs an existing enabled command with a 700 ms limit and a 64 KiB
|
|
67
|
+
output limit. A disabled old command stays disabled. Disabling ACC restores only the
|
|
68
|
+
fields ACC changed and still owns. A user replacement command takes precedence.
|
|
69
|
+
Removing or replacing Antigravity's ACC command also survives repeated updates.
|
|
70
|
+
To add ACC again after that edit, disable the indicator and then enable it.
|
|
71
|
+
|
|
72
|
+
On POSIX, timeout, output overflow and indicator cancellation stop the previous
|
|
73
|
+
command's owned process group. Windows uses a detached Node launcher because a
|
|
74
|
+
detached shell loses its standard input handles. The launcher starts a hidden shell
|
|
75
|
+
with the original stdin/stdout. ACC stops the launcher and its descendants with
|
|
76
|
+
`taskkill /T /F`. Scripts that leave background processes
|
|
77
|
+
running after the shell exits must stop those processes themselves on Windows.
|
|
78
|
+
|
|
79
|
+
## Kimi and Grok composition
|
|
80
|
+
|
|
81
|
+
ACC puts its compact badge first so a narrow terminal cannot truncate it behind a long
|
|
82
|
+
path. Existing custom commands receive the original stdin. Kimi keeps their first output
|
|
83
|
+
line; Grok retains the remaining lines. Disabling or uninstalling restores the old command
|
|
84
|
+
and only the presentation fields ACC still owns. A later user replacement takes precedence.
|
|
85
|
+
|
|
86
|
+
Kimi passes `sessionId`; Grok passes `session_id`. An empty Kimi ID is its welcome screen,
|
|
87
|
+
before a session exists, so ACC retains the footer without a registration error.
|
|
88
|
+
A registered Kimi normally shows `ACC ● · turn`; Grok shows `ACC ● · inbox`.
|
|
89
|
+
|
|
90
|
+
Kimi's snapshot does not expose goals, background task counts, thinking effort, swarm/tower
|
|
91
|
+
badges, detailed Git status, or rotating tips. These first-line elements cannot be retained
|
|
92
|
+
when composing the built-in footer; the native context/warnings line remains. Existing
|
|
93
|
+
custom commands can retain any extra information they already render. Kimi limits the entire
|
|
94
|
+
command to 300 ms; ACC bounds its own work to 180 ms after module loading and the previous
|
|
95
|
+
command to 80 ms. A host timeout can retain the last line until a successful refresh.
|
|
96
|
+
|
|
97
|
+
TOML comments and unrelated settings are retained. Ambiguous inline status tables or dotted
|
|
98
|
+
status declarations are refused without rewriting them; use a normal `[status_line]` or
|
|
99
|
+
`[ui.status_line]` table. The version floors above reflect native UI captures, not new
|
|
100
|
+
message-delivery certification.
|
|
101
|
+
|
|
102
|
+
## Read-only command
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
printf '%s' '{"session_id":"native-session-id"}' | acc-indicator --adapter claude_code
|
|
106
|
+
acc-indicator --adapter claude_code --native-session native-session-id --details
|
|
107
|
+
acc-indicator --adapter claude_code --native-session native-session-id --json
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Antigravity supplies `conversation_id`; `session_id` is also accepted. The reader selects
|
|
111
|
+
the saved room for that adapter and native id. It never guesses from the current directory
|
|
112
|
+
or scans other sessions. Output contains no generation token, endpoint, or message body.
|
|
113
|
+
|
|
114
|
+
The reader does not acquire a runtime lease, schedule updates, create a workspace,
|
|
115
|
+
recover a journal, send a heartbeat, renew delivery, or contact a client socket. The
|
|
116
|
+
managed launcher resolves the active runtime on each call. A concurrent update can cause
|
|
117
|
+
one failed read; a later refresh can recover without retaining the outgoing generation.
|
|
118
|
+
|
|
119
|
+
The router publishes an optional, bounded observation after a transport accepts or rejects
|
|
120
|
+
a send. For records with equal timestamps, a delayed older write cannot replace a newer
|
|
121
|
+
success or failure.
|
|
122
|
+
The indicator compares the resulting observation with the latest hook handshake for the same generation.
|
|
123
|
+
This diagnostic contains only time, outcome, and a closed reason code. Delivery receipts
|
|
124
|
+
and immutable history remain authoritative. An unavailable diagnostic cannot fail a send.
|
|
125
|
+
|
|
126
|
+
An unreadable state produces a closed error and a recovery command. It never renders raw
|
|
127
|
+
file content. A command stops waiting after 1.5 seconds. Claude refreshes every five seconds,
|
|
128
|
+
with one-second checks during its bounded startup period.
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -158,6 +158,16 @@ delivery, start Codex without it; put a setting you need in `config.toml` instea
|
|
|
158
158
|
If a reply stays queued with `transport_permission_denied`, the sender's permissions
|
|
159
159
|
blocked local transport. This is distinct from an unavailable recipient. The message was
|
|
160
160
|
recorded successfully; the error does not mean it was read or acknowledged.
|
|
161
|
+
For Codex sends, use the exact installed ACC wrapper through the client's approved
|
|
162
|
+
command path (`exec_command` with `sandbox_permissions: "require_escalated"`). The
|
|
163
|
+
installed ACC prefix rule can authorize that command. Keep it separate from other
|
|
164
|
+
shell commands. If delivery was already attempted, retry the same arguments and
|
|
165
|
+
the original `--client-message-id` printed by the CLI. This retries the recorded
|
|
166
|
+
message instead of recording another one. An initial execution refusal records
|
|
167
|
+
nothing; a refused retry does not erase an earlier recorded message.
|
|
168
|
+
On Codex 0.162.0 on macOS, even an installed socket allowlist did not permit direct
|
|
169
|
+
access to the daemon socket from the sandbox. A configured profile alone therefore
|
|
170
|
+
does not prove that a sandboxed sender can reach another Codex session.
|
|
161
171
|
On Codex 0.153.4 or newer, rerun `acc install --adapter codex` with existing
|
|
162
172
|
live consent. Add `--delivery actionable` when new consent is required, then start a new session.
|
|
163
173
|
With ACC 0.8.0 or 0.8.1, every live offer from a Codex session to Claude Code failed this way:
|
package/docs/UPGRADING.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Upgrading
|
|
2
2
|
|
|
3
|
+
## From 0.10.3
|
|
4
|
+
|
|
5
|
+
Update as usual with `acc update`. Version 0.10.4 preserves sender permission
|
|
6
|
+
failures as `transport_permission_denied`, including when access to socket
|
|
7
|
+
metadata or an expired delivery binding is denied. The CLI prints the original
|
|
8
|
+
retry key so the same recorded message can be offered again without a duplicate.
|
|
9
|
+
|
|
10
|
+
The refreshed Codex skill uses the client's approved command path for outgoing
|
|
11
|
+
ACC messages. ACC's existing exact-wrapper rule can authorize those commands.
|
|
12
|
+
An initial execution refusal records no message; a refused retry preserves an
|
|
13
|
+
earlier durable message. See [sender permissions](TROUBLESHOOTING.md#i-enabled-live-delivery-but-got-fallback)
|
|
14
|
+
for the recovery procedure.
|
|
15
|
+
|
|
16
|
+
This release keeps store contract 7 and adds no data migration. The update
|
|
17
|
+
refreshes installed integrations while preserving their recorded delivery policy.
|
|
18
|
+
|
|
3
19
|
## Store contract 6 to 7
|
|
4
20
|
|
|
5
21
|
ACC moves each workspace's store from contract 6 to 7 by itself, right after an update
|
package/docs/WHY_ACC.md
CHANGED
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
ACC fits work that spans clients from different vendors. Claude Code sessions can message
|
|
4
4
|
each other through Claude Code's
|
|
5
5
|
[cross-session messaging](https://code.claude.com/docs/en/cross-session-messaging), and
|
|
6
|
-
`codex queue` queues a message for another Codex session.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
`codex queue` queues a message for another Codex session. From Claude Code,
|
|
7
|
+
[OpenAI's Codex plugin](https://github.com/openai/codex-plugin-cc) can ask Codex for a
|
|
8
|
+
review, hand it a task, or move the conversation into a Codex thread; it runs Codex under
|
|
9
|
+
Claude Code, in that direction only, and Codex can import Claude Code sessions the same way.
|
|
10
|
+
Neither client offers a way to message a session you opened yourself in the other one. When
|
|
11
|
+
you build related features in two clients, ask another vendor's model for a review from either
|
|
12
|
+
side, or switch clients in the middle of a feature, the sessions need to ask and answer each
|
|
13
|
+
other without making you carry every sentence between windows.
|
|
11
14
|
|
|
12
15
|
Each session keeps its own context, permissions, checkout, and model.
|
|
13
16
|
|
|
@@ -22,7 +25,9 @@ resources, and hand off context.
|
|
|
22
25
|
```mermaid
|
|
23
26
|
flowchart TD
|
|
24
27
|
A["Do all your sessions run in Claude Code, or all in Codex?"] -->|yes| V["Try the client's own messaging first"]
|
|
25
|
-
A -->|no|
|
|
28
|
+
A -->|no| A2["Do you only need Claude Code to call Codex for a review, a task or a handoff?"]
|
|
29
|
+
A2 -->|yes| P["OpenAI's Codex plugin for Claude Code does that from inside Claude Code"]
|
|
30
|
+
A2 -->|no| B["Must they keep separate ownership and permissions?"]
|
|
26
31
|
B -->|no| M["A managed agent runtime may fit better"]
|
|
27
32
|
B -->|yes| C["Do they need direct questions, durable replies, or claim awareness?"]
|
|
28
33
|
C -->|yes| Y["ACC fits this workflow"]
|
|
@@ -58,8 +63,9 @@ session that is not polling for anything. For clients without an integration, AC
|
|
|
58
63
|
own [MCP server](MCP.md); without hooks, the agent there reads its inbox when it chooses to.
|
|
59
64
|
|
|
60
65
|
Claude Code documents its inbox socket for scripts and hooks, and `codex queue` is a command
|
|
61
|
-
any process can run, so two sessions can be wired together by hand.
|
|
62
|
-
|
|
66
|
+
any process can run, so two sessions can be wired together by hand. OpenAI's plugin covers one
|
|
67
|
+
direction, Claude Code calling Codex, with Codex started under Claude Code. What that leaves to
|
|
68
|
+
you is what ACC does: one list of peers across clients, so a session finds the other without a socket
|
|
63
69
|
path or a thread id; a reply that returns to the sender in its own client; messages and
|
|
64
70
|
handoffs kept for a session that is closed or not open yet; receipts that show what happened
|
|
65
71
|
to each message; and instructions installed in each client, so agents use it without being
|
|
@@ -64,19 +64,43 @@ Do this once, not every turn. Update it only when the scope or mode materially
|
|
|
64
64
|
changes. `--hint` is important: it lets ACC match your plan against a peer's
|
|
65
65
|
claim. Intent is awareness, not permission.
|
|
66
66
|
|
|
67
|
-
Before changing shared files, claim the smallest useful
|
|
67
|
+
Before changing shared files, claim the smallest useful resources in one operation:
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
{{ACC}} claim --resource 'file:packages/core/**'
|
|
70
|
+
{{ACC}} claim --resource 'file:packages/core/**' \
|
|
71
|
+
--resource 'file:packages/protocol/**' --reason "porting the claim model"
|
|
71
72
|
```
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
Repeat `--resource` for an atomic batch, or supply it once for one claim.
|
|
75
|
+
Shared mode, enforcement, reason, and lease apply to every resource. Duplicate resources after
|
|
76
|
+
normalization are rejected. Exit 5 means a conflict: no claim is created or
|
|
77
|
+
renewed. Batch `details.conflicts` names blocked resources and their holders.
|
|
78
|
+
Narrow your scope, contact the owner, or ask the human. Repeating a successful
|
|
79
|
+
claim command renews your existing claims on those resources.
|
|
80
|
+
|
|
81
|
+
Release selected claims when useful:
|
|
75
82
|
|
|
76
83
|
```bash
|
|
77
|
-
{{ACC}} release --resource 'file:packages/core/**'
|
|
84
|
+
{{ACC}} release --resource 'file:packages/core/**' \
|
|
85
|
+
--resource 'file:packages/protocol/**'
|
|
78
86
|
```
|
|
79
87
|
|
|
88
|
+
Choose exactly one selector family: repeated `--resource`, repeated `--claim`,
|
|
89
|
+
or `--all`. Duplicate selectors after normalization are rejected. A missing or
|
|
90
|
+
foreign explicit target fails without releasing any claims. Repeating an explicit release after its targets were removed is an error.
|
|
91
|
+
Batch release accepts no force-release authority.
|
|
92
|
+
|
|
93
|
+
To release all your claims while keeping your session and intent open:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
{{ACC}} release --all
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This selects only your session's current claims in its workspace. An empty set
|
|
100
|
+
succeeds. Each retry selects the current set and can release newly acquired claims.
|
|
101
|
+
Use `work --clear` to clear intent, `ack` to acknowledge a message, and `finish`
|
|
102
|
+
to record a handoff and close your ACC presence.
|
|
103
|
+
|
|
80
104
|
## Communicate only when it changes another agent's work
|
|
81
105
|
|
|
82
106
|
Send a message for a dependency, conflict, direct question, decision, or
|
|
@@ -10,6 +10,7 @@ import { detectAntigravity, doctorAntigravity, installAntigravity, planAntigravi
|
|
|
10
10
|
import { bindNativeSession, nativeActivationHint, offerMessage, planNativeActivation,
|
|
11
11
|
probeNativeDelivery, refreshNativeSession } from "./native-delivery.mjs";
|
|
12
12
|
import { PROTOCOL_CONTRACT } from "./relay-endpoint.mjs";
|
|
13
|
+
import { renderAntigravityIndicator } from "./indicator-render.mjs";
|
|
13
14
|
|
|
14
15
|
// The version this client has been captured on. Nothing earlier was measured,
|
|
15
16
|
// and later releases - this client ships every few days - are judged by this
|
|
@@ -63,6 +64,8 @@ export function createAntigravityAdapter() {
|
|
|
63
64
|
return defineAdapter({
|
|
64
65
|
id: "antigravity",
|
|
65
66
|
displayName: "Antigravity CLI",
|
|
67
|
+
statusIndicator: { minimumVersion: "1.0.6", reload: "start a new CLI session",
|
|
68
|
+
renderText: renderAntigravityIndicator },
|
|
66
69
|
// What the official installer puts on PATH, and what a version probe has to
|
|
67
70
|
// spawn: `agy --version` answers `1.2.7`. Presence liveness also walks the
|
|
68
71
|
// hook's process ancestry for this basename to learn the client's own pid.
|