agents-can-communicate 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -81
- package/SECURITY.md +7 -4
- package/bin/acc-bootstrap.mjs +56 -0
- package/bin/acc-claude-channel.mjs +177 -0
- package/bin/acc.mjs +7 -2
- package/docs/ADAPTER_AUTHORING.md +57 -21
- package/docs/ARCHITECTURE.md +23 -15
- package/docs/CAPABILITIES.md +51 -18
- package/docs/CLI.md +31 -13
- package/docs/CONCEPTS.md +91 -94
- package/docs/CONFIGURATION.md +33 -23
- package/docs/DESIGN_DECISIONS.md +8 -4
- package/docs/GETTING_STARTED.md +76 -100
- package/docs/GLOSSARY.md +4 -4
- package/docs/HOW_IT_WORKS.md +163 -0
- package/docs/MCP.md +8 -8
- package/docs/PROTOCOL.md +13 -8
- package/docs/RELEASING.md +112 -82
- package/docs/SECURITY_MODEL.md +13 -8
- package/docs/TROUBLESHOOTING.md +30 -12
- package/docs/WHY_ACC.md +18 -16
- package/docs/index.md +26 -16
- package/node_modules/@agents-can-communicate/adapter-claude-code/certification.json +196 -46
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/certification-provenance.json +237 -45
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.252.json +3 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.258.json +23 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.260.json +23 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +5 -2
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/.mcp.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +10 -6
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +34 -2
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/channel.mjs +377 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +27 -7
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/native-delivery.mjs +229 -0
- package/node_modules/@agents-can-communicate/adapter-codex/certification.json +38 -5
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/certification-provenance.json +171 -38
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.0.json +3 -1
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-remote-workspace.json +25 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +4 -2
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +9 -5
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +42 -7
- package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +121 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +151 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +192 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/certification.json +44 -28
- 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 +9 -5
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeAgent.json → BeforeAgent-0.57.0.json} +2 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeTool.json → BeforeTool-0.57.0.json} +2 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeTool-shell.json → BeforeTool-shell-0.57.0.json} +2 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{SessionEnd.json → SessionEnd-0.57.0.json} +2 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{SessionStart.json → SessionStart-0.57.0.json} +2 -2
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/certification-provenance.json +266 -39
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +6 -6
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +25 -11
- 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 +9 -5
- package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +3 -1
- 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 +9 -5
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +18 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +2 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +6 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-activation.mjs +76 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +202 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +101 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +17 -2
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +2 -2
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +67 -5
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +133 -11
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/conversations.mjs +41 -1
- package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +52 -2
- package/node_modules/@agents-can-communicate/core/src/service.mjs +10 -0
- package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +26 -12
- package/node_modules/@agents-can-communicate/hook-runner/package.json +4 -2
- package/node_modules/@agents-can-communicate/hook-runner/src/native-binding.mjs +90 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +123 -90
- package/node_modules/@agents-can-communicate/installer/package.json +4 -2
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +48 -4
- package/node_modules/@agents-can-communicate/installer/src/bootstrap-runtime.mjs +144 -0
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +72 -3
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +7 -0
- package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +161 -0
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +6 -2
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +41 -6
- package/node_modules/@agents-can-communicate/installer/src/shell-bootstrap.mjs +210 -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/protocol/src/fields.mjs +17 -0
- package/node_modules/@agents-can-communicate/protocol/src/schema.mjs +18 -3
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/package.json +2 -1
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Architecture
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Use this page to trace a communication fact from an independently opened client through
|
|
4
|
+
core, storage, and an optional delivery adapter. ACC is the local control plane; the AI
|
|
5
|
+
clients remain independent execution planes. Core records the truth before an adapter is
|
|
6
|
+
asked to make it arrive sooner.
|
|
6
7
|
|
|
7
8
|
```mermaid
|
|
8
9
|
flowchart LR
|
|
@@ -41,7 +42,7 @@ The order is part of the public guarantee:
|
|
|
41
42
|
|
|
42
43
|
1. validate and commit the message plus one `queued` receipt per resolved recipient;
|
|
43
44
|
2. resolve the recipient's current delivery bindings;
|
|
44
|
-
3. check recipient policy
|
|
45
|
+
3. check recipient policy and the current binding's reachability and offered native mode;
|
|
45
46
|
4. ask one adapter to cross its transport boundary;
|
|
46
47
|
5. only after acceptance, commit `offered` and an immutable success event.
|
|
47
48
|
|
|
@@ -71,16 +72,21 @@ lease without exposing the endpoint.
|
|
|
71
72
|
|
|
72
73
|
## Certified capability versus current reachability
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
proved
|
|
75
|
+
Ordinary hook capabilities say an exact client version on an exact platform passed a
|
|
76
|
+
captured behavior. Native live delivery uses a separate contract: installation checks the
|
|
77
|
+
captured minimum, platform, and current feature probe, then each session publishes a binding
|
|
78
|
+
only after a generation-bound handshake. The router trusts that admission and verifies the
|
|
79
|
+
binding, recipient policy, declared adapter capability, and adapter response; it does not add
|
|
80
|
+
a third exact-version certification check. A binding says what that current generation
|
|
81
|
+
exposes and whether its lease is current, while recipient policy says whether it may spend a
|
|
82
|
+
turn.
|
|
83
|
+
|
|
84
|
+
Claude Code is the one client that proved the live seam: a Channel capture on 2.1.258,
|
|
85
|
+
confirmed on 2.1.260 through the installed package, admitted by minimum-plus-probe rather
|
|
86
|
+
than an exact version. Codex's queue transport passed its capture and the capability was
|
|
87
|
+
withdrawn, because the mode it needs hides the session's workspace. Gemini CLI and Kimi
|
|
88
|
+
Code have exact-version next-turn evidence only; Grok and generic MCP use inbox polling.
|
|
89
|
+
The seam exists for every adapter; only one has earned it.
|
|
84
90
|
|
|
85
91
|
## Storage and workspace identity
|
|
86
92
|
|
|
@@ -90,7 +96,9 @@ lexically, so a cursor is simply the last sequence returned.
|
|
|
90
96
|
|
|
91
97
|
Workspace discovery checks an explicit config first, then the Git common directory, then
|
|
92
98
|
the plain directory. Multiple worktrees share a workspace id while each session records
|
|
93
|
-
its checkout and branch.
|
|
99
|
+
its checkout and branch. Runtime state never lands inside those roots; the only project
|
|
100
|
+
file ACC writes is an optional `acc.workspace.json` explicitly requested through
|
|
101
|
+
`acc config init`.
|
|
94
102
|
|
|
95
103
|
A lone session can remain ephemeral. Durable state materialises when a second live session
|
|
96
104
|
appears or the first claim, message, or handoff is committed. This makes “silent when
|
package/docs/CAPABILITIES.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Capabilities
|
|
2
2
|
|
|
3
|
+
Use this page to set expectations after installation. Integration means ACC can introduce
|
|
4
|
+
peer awareness and coordination instructions; it does not guarantee what a model will do
|
|
5
|
+
with them. Delivery also varies independently from awareness. The durable inbox works for
|
|
6
|
+
every participant, supported exact versions may add next-turn delivery, and only the
|
|
7
|
+
experimental Claude Code channel can deliver while a session is idle.
|
|
8
|
+
|
|
3
9
|
Capability honesty separates four questions that are easy to collapse:
|
|
4
10
|
|
|
5
11
|
1. **Certified support** — did this exact client version and platform pass a shipped
|
|
@@ -13,11 +19,15 @@ Capability honesty separates four questions that are easy to collapse:
|
|
|
13
19
|
A source method or vendor documentation is not certification. Unknown versions and
|
|
14
20
|
platforms degrade to false. No weaker session inherits a stronger peer's capability.
|
|
15
21
|
|
|
22
|
+
Run `acc doctor` in the project when observed behavior differs from this page. It reports
|
|
23
|
+
the installed client version, platform, effective capability, and fallback instead of
|
|
24
|
+
assuming that a newer or differently packaged client behaves like a captured one.
|
|
25
|
+
|
|
16
26
|
## Certified support
|
|
17
27
|
|
|
18
28
|
Passing evidence currently ships for these exact versions on `darwin-arm64`:
|
|
19
29
|
|
|
20
|
-
| Capability | Codex 0.147.0 | Claude Code 2.1.233 | Gemini CLI 0.
|
|
30
|
+
| Capability | Codex 0.147.0 | Claude Code 2.1.233 | Gemini CLI 0.57.0 | Grok 1.0.13 | Kimi 0.36.1 |
|
|
21
31
|
|---|---:|---:|---:|---:|---:|
|
|
22
32
|
| `lifecycle.sessionStart` | yes | yes | yes | no | yes |
|
|
23
33
|
| `lifecycle.sessionEnd` | yes | yes | yes | no | no |
|
|
@@ -32,15 +42,23 @@ Passing evidence currently ships for these exact versions on `darwin-arm64`:
|
|
|
32
42
|
Every other capability in the closed shape defaults to false, including session resume,
|
|
33
43
|
child sessions, startup or safe-point injection, and before-read guards.
|
|
34
44
|
|
|
45
|
+
The `delivery.livePush` and `delivery.replyRoute` row is `no` for the exact hook versions
|
|
46
|
+
this matrix is keyed to. Native live delivery is captured on a newer client - Claude Code
|
|
47
|
+
2.1.258, livePush and replyRoute, confirmed again on 2.1.260 through the installed package -
|
|
48
|
+
and is admitted through the native delivery contract rather than exact-version
|
|
49
|
+
certification: it is off until a per-client opt-in, experimental, and never turns on for a
|
|
50
|
+
client below the captured minimum. Codex's queue capture passed and the capability was
|
|
51
|
+
withdrawn; the row below says why.
|
|
52
|
+
|
|
35
53
|
The limitations belong next to the adapters they affect:
|
|
36
54
|
|
|
37
55
|
| Adapter | Exact limitation and evidence |
|
|
38
56
|
|---|---|
|
|
39
|
-
| Codex | 0.147.0 next-turn stdout arrives as unwrapped developer-role context and requires plugin trust.
|
|
40
|
-
| Claude Code | 2.1.233 next-turn delivery waits for the next user prompt.
|
|
41
|
-
| Gemini CLI | Only 0.
|
|
42
|
-
| Grok | Documentation-shaped payloads do not count as real captures.
|
|
43
|
-
| Kimi Code | 0.36.1 has next-turn and guard evidence, plus a 60-second heartbeat.
|
|
57
|
+
| Codex | 0.147.0 next-turn stdout arrives as unwrapped developer-role context and requires plugin trust. A 0.152.1 capture proved the App Server queue transport, but the release capture then measured that native delivery there requires `codex --remote unix://`, and in that mode the session runs inside the daemon: both the hook payload and the App Server's own thread record report the daemon's directory instead of the session's, so ACC cannot tell which workspace the session is in. Nothing ACC can reach carries the real one, and placing a session in the wrong workspace is worse than not placing it, so `delivery.livePush` is **not** claimed - the probe and the handshake both refuse with `workspace_identity_unavailable`. `replyRoute` stays false. |
|
|
58
|
+
| Claude Code | 2.1.233 next-turn delivery waits for the next user prompt. A 2.1.258 Channel capture proved idle offer, busy queue-after-turn, explicit reply, duplicate suppression, and durable fallback, so `delivery.livePush` and `delivery.replyRoute` are live capabilities behind the native contract (experimental, off until opted in; Claude's development-channel warning is vendor-owned and visible). |
|
|
59
|
+
| Gemini CLI | Only 0.57.0 has package-shipped next-turn certification. Its TUI has no captured external wake or queue interface and `--acp` changes launch ownership, so native delivery is fallback-only; live push and reply routing remain false. |
|
|
60
|
+
| Grok | Documentation-shaped payloads do not count as real captures. The public leader surface exposed no proven addressed injection into an ordinary TUI session, so native delivery is `awaiting_compatibility_capture`; all capabilities remain false. |
|
|
61
|
+
| Kimi Code | 0.36.1 has next-turn and guard evidence, plus a 60-second heartbeat. Its server/queue APIs do not prove a transparent binding to an independently opened session, so native delivery is fallback-only. |
|
|
44
62
|
| Generic MCP | Tool polling is not next-turn injection, live push, or a native reply route. It has no write guard or client-lifecycle evidence. |
|
|
45
63
|
|
|
46
64
|
`certification.json` beside each adapter is machine-readable. `COMPATIBILITY.md` records the
|
|
@@ -54,13 +72,24 @@ would publish a generation-bound binding with `availableModes`, `clientVersion`,
|
|
|
54
72
|
with a computed `reachable` boolean while keeping the opaque endpoint private.
|
|
55
73
|
|
|
56
74
|
The router requires exactly one current eligible generation. No binding, an expired lease,
|
|
57
|
-
several live sessions for one participant,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
75
|
+
several live sessions for one participant, and an adapter refusal each keep delivery on the
|
|
76
|
+
durable fallback. Busy behavior belongs to the transport: Claude's Channel can accept a
|
|
77
|
+
message while the target is busy and queue it until the current turn finishes; an adapter
|
|
78
|
+
that instead refuses with `recipient_busy` leaves the message on the durable path.
|
|
79
|
+
|
|
80
|
+
The lease is extended by whoever serves the endpoint, because only that process knows it is
|
|
81
|
+
still alive. A client that publishes no heartbeat - Claude Code among them - would otherwise
|
|
82
|
+
let the lease run out under an idle session, which is exactly when live delivery is worth
|
|
83
|
+
having. Giving a binding up is a separate, final fact rather than an expired lease, so a
|
|
84
|
+
channel that has not yet noticed cannot extend something the session already retired.
|
|
85
|
+
|
|
86
|
+
Current shipped reality: Claude Code on darwin-arm64 has a passing experimental `livePush`
|
|
87
|
+
capture behind the native delivery contract, off until a per-client opt-in. Codex is
|
|
88
|
+
next-turn and inbox only: its queue transport works, but the mode that makes a session
|
|
89
|
+
reachable is the mode that hides which workspace it is in. Every other client is next-turn or
|
|
90
|
+
inbox only. Gemini CLI and Kimi Code are next-turn only at their exact captured versions;
|
|
91
|
+
Grok and MCP poll inbox. On Linux, the shipped captures above do not establish next-turn or
|
|
92
|
+
live delivery, so the honest expectation is the durable inbox.
|
|
64
93
|
|
|
65
94
|
## Recipient policy
|
|
66
95
|
|
|
@@ -70,13 +99,17 @@ policy:
|
|
|
70
99
|
| Policy | Meaning |
|
|
71
100
|
|---|---|
|
|
72
101
|
| `off` | normal next-turn and inbox only |
|
|
73
|
-
| `actionable` | questions, requests, and addressed handoffs may use live push |
|
|
102
|
+
| `actionable` | questions, requests, answers, decisions, and addressed handoffs may use live push; notes wait for the next turn |
|
|
74
103
|
| `all` | every addressed message kind may use live push |
|
|
75
104
|
|
|
76
105
|
The default is `off`. `acc install --delivery actionable|all` is an explicit request, not
|
|
77
|
-
a force switch.
|
|
78
|
-
|
|
79
|
-
|
|
106
|
+
a force switch. Exact-version certification governs ordinary hook capabilities. Native live
|
|
107
|
+
delivery is separate: the installer applies the requested policy only when the client meets
|
|
108
|
+
the captured minimum version, runs on a captured platform, and passes the current feature
|
|
109
|
+
probe; otherwise effective policy remains off and the fallback diagnostic is printed. Each
|
|
110
|
+
enabled session must then pass its generation-bound handshake. A failed handshake clears or
|
|
111
|
+
refuses that session's binding and reports degraded reachability without rewriting the
|
|
112
|
+
installed consent. Room messages are never live-push candidates.
|
|
80
113
|
|
|
81
114
|
## Fallback
|
|
82
115
|
|
|
@@ -84,7 +117,7 @@ Room messages are never live-push candidates.
|
|
|
84
117
|
|---|---|
|
|
85
118
|
| exact-certified Codex 0.147.0 | complete peer body at the next normal turn; `acc inbox` remains recoverable |
|
|
86
119
|
| exact-certified Claude Code 2.1.233 | complete peer body at the next normal prompt; `acc inbox` remains recoverable |
|
|
87
|
-
| exact-certified Gemini CLI 0.
|
|
120
|
+
| exact-certified Gemini CLI 0.57.0 | complete peer body at the next normal turn; `acc inbox` remains recoverable |
|
|
88
121
|
| exact-certified Kimi Code 0.36.1 | complete peer body at the next normal turn; `acc inbox` remains recoverable |
|
|
89
122
|
| Grok, generic MCP, unknown version, other platform | explicit `acc inbox` polling |
|
|
90
123
|
|
package/docs/CLI.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# CLI
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
workspace config
|
|
3
|
+
Use `acc` to install and diagnose integrations, or to inspect the same communication
|
|
4
|
+
operations that installed skills use on an agent's behalf. Setup commands are for a
|
|
5
|
+
person; communication commands are the smaller agent-facing vocabulary. Every command
|
|
6
|
+
accepts `--json` and `--cwd <path>`. `--workspace <config>` selects an explicit workspace
|
|
7
|
+
config where supported by the common boundary.
|
|
7
8
|
|
|
8
9
|
<!-- test:command -->
|
|
9
10
|
```bash
|
|
@@ -11,7 +12,7 @@ acc help
|
|
|
11
12
|
acc version
|
|
12
13
|
```
|
|
13
14
|
|
|
14
|
-
##
|
|
15
|
+
## Coordinate from a session
|
|
15
16
|
|
|
16
17
|
| Command | Required | Optional |
|
|
17
18
|
|---|---|---|
|
|
@@ -57,14 +58,24 @@ reason; ordinary sessions release only their own claims.
|
|
|
57
58
|
### Messages and requests
|
|
58
59
|
|
|
59
60
|
```bash
|
|
60
|
-
acc message --to
|
|
61
|
+
acc message --to codex --type question --subject "receipt wording" \
|
|
61
62
|
--body "Should transport acceptance be called offered?" \
|
|
62
63
|
--client-message-id client_stable_1
|
|
63
64
|
|
|
64
|
-
acc request --to
|
|
65
|
+
acc request --to codex --title "review receipt wording" \
|
|
65
66
|
--detail "Check CLI and MCP results; reply with defects only."
|
|
66
67
|
```
|
|
67
68
|
|
|
69
|
+
`--to` takes a client name - `codex`, `claude_code`, `gemini_cli` - while exactly one
|
|
70
|
+
session of that client is here, and the exact participant id from `acc status --json`
|
|
71
|
+
otherwise. Two sessions of one client are refused by name rather than guessed between, the
|
|
72
|
+
same way `--session` refuses. The recorded message always names the participant, never the
|
|
73
|
+
client it was reached through.
|
|
74
|
+
|
|
75
|
+
By default a hooked participant id is derived from that client's session id. It remains
|
|
76
|
+
usable for the current conversation but a new unrelated conversation gets a new address.
|
|
77
|
+
Set `ACC_PARTICIPANT` when the recipient must keep one stable address across conversations.
|
|
78
|
+
|
|
68
79
|
`message` accepts generic kinds `note`, `question`, `request`, and `decision`. Defaults are
|
|
69
80
|
`note` plus obligation `none`; questions and requests require `reply`; an addressed
|
|
70
81
|
decision may explicitly use `--obligation acknowledge`. `answer` is created only by
|
|
@@ -109,14 +120,14 @@ no state override.
|
|
|
109
120
|
```bash
|
|
110
121
|
acc finish --goal "document receipt semantics" --status partial \
|
|
111
122
|
--completed "protocol updated" --remaining "acceptance proof" \
|
|
112
|
-
--blocker "packed test not run" --to
|
|
123
|
+
--blocker "packed test not run" --to codex
|
|
113
124
|
```
|
|
114
125
|
|
|
115
126
|
Status is `complete`, `partial`, or `blocked`. `finish` records a structured handoff,
|
|
116
127
|
releases the caller's claims, and ends ACC presence for that session. It never closes the
|
|
117
128
|
external AI client. An addressed handoff requires acknowledgement; a room handoff does not.
|
|
118
129
|
|
|
119
|
-
##
|
|
130
|
+
## Install, diagnose, and update
|
|
120
131
|
|
|
121
132
|
| Command | Flags |
|
|
122
133
|
|---|---|
|
|
@@ -129,14 +140,21 @@ external AI client. An addressed handoff requires acknowledgement; a room handof
|
|
|
129
140
|
| `acc help` | — |
|
|
130
141
|
| `acc version` | — |
|
|
131
142
|
|
|
132
|
-
`--delivery` is a recipient policy request, not a capability
|
|
133
|
-
|
|
134
|
-
|
|
143
|
+
`--delivery off|actionable|all` is a per-client recipient policy request, not a capability
|
|
144
|
+
switch, and the default is `off`. `--adapter` is repeatable to name several clients. An
|
|
145
|
+
explicit `--delivery` applies uniformly and never prompts; omitting it on an interactive
|
|
146
|
+
terminal asks one default-No question per eligible client, and on a non-interactive run or a
|
|
147
|
+
`--dry-run` it keeps fresh clients off. A recorded opt-in is kept on upgrade. If the detected
|
|
148
|
+
client cannot receive native delivery - unsupported, below the captured minimum, a
|
|
149
|
+
prerelease, known-bad, a wrong platform, or an unsupported shell - installation keeps the
|
|
150
|
+
effective policy off and prints the reason. A live install writes an owned zsh PATH block and
|
|
151
|
+
a per-command shim that keeps your command name and `exec`s the real client; `ACC_BYPASS=1`
|
|
152
|
+
runs the unmodified client, and ACC is never the parent of the session after that `exec`.
|
|
135
153
|
|
|
136
154
|
Only `update` touches the network. `ACC_NO_UPDATE_CHECK=1` disables update checks. Hooks
|
|
137
155
|
never perform them.
|
|
138
156
|
|
|
139
|
-
##
|
|
157
|
+
## Integrate a client lifecycle
|
|
140
158
|
|
|
141
159
|
`acc attach --participant <id>`, `acc heartbeat --session <id> --generation <token>`, and
|
|
142
160
|
`acc detach --session <id> --generation <token>` are public executable boundaries used by
|
package/docs/CONCEPTS.md
CHANGED
|
@@ -1,134 +1,131 @@
|
|
|
1
1
|
# Concepts
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
A["independent session A"] --- ACC["ACC local room"]
|
|
10
|
-
B["independent session B"] --- ACC
|
|
11
|
-
C["independent session C"] --- ACC
|
|
12
|
-
```
|
|
3
|
+
You open the sessions and give each agent its own task. ACC makes those sessions aware of
|
|
4
|
+
one another and gives them a shared communication vocabulary. It does not combine their
|
|
5
|
+
contexts or turn them into workers owned by one controller.
|
|
6
|
+
|
|
7
|
+
Use this page when a guide or diagnostic names an ACC object. The examples assume Codex is
|
|
8
|
+
building a registration endpoint and Claude Code is building the screen that calls it.
|
|
13
9
|
|
|
14
10
|
## Peers, not workers
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
Codex and Claude Code are **peers**. They may use different models, permissions, trust
|
|
13
|
+
settings, clients, and checkouts. Neither is automatically in charge. Claude can ask Codex
|
|
14
|
+
for the endpoint shape; Codex can answer or decline under its own instructions.
|
|
19
15
|
|
|
20
|
-
This
|
|
21
|
-
|
|
22
|
-
owns the process itself.
|
|
16
|
+
This resembles coordination among subagents, but the sessions were opened independently by
|
|
17
|
+
the user. ACC never launches, assigns, supervises, or closes them.
|
|
23
18
|
|
|
24
|
-
##
|
|
19
|
+
## Workspace, participant, and session
|
|
25
20
|
|
|
26
|
-
A **
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
generation is eligible.
|
|
21
|
+
A **workspace** is the local room where related sessions discover coordination facts. It is
|
|
22
|
+
scoped to one machine and operating-system user. Git worktrees of one repository resolve to
|
|
23
|
+
the same ACC workspace, but their checkout files remain separate. In a plain directory, the
|
|
24
|
+
directory supplies identity unless optional configuration says otherwise. Git is optional.
|
|
31
25
|
|
|
32
|
-
A **
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
A **participant** is the address for communication. A stable participant id can recover
|
|
27
|
+
messages sent before a restart. A **session** is one current opening of that participant,
|
|
28
|
+
with a generation token preventing an old process from changing its replacement's state.
|
|
35
29
|
|
|
36
|
-
|
|
30
|
+
When exactly one Codex peer is eligible, another agent can address `codex`. When several
|
|
31
|
+
Codex sessions are live, that name is ambiguous and the sender uses an exact participant id
|
|
32
|
+
from the roster in `acc status --json`.
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
authorises nothing. Publish it early because it is cheap:
|
|
34
|
+
## Presence and intent
|
|
40
35
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
--hint 'file:packages/cli/**'
|
|
44
|
-
```
|
|
36
|
+
**Presence** says which session generations are currently live or recently known. It is not
|
|
37
|
+
proof that a model is idle, attentive, or willing to act.
|
|
45
38
|
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
**Intent** is a short summary of what an agent is doing, plus optional resource hints. For
|
|
40
|
+
example, Codex might publish “adding the registration endpoint” with
|
|
41
|
+
`file:packages/api/**`. This lets Claude notice a dependency without exposing Codex's
|
|
42
|
+
conversation. Intent grants no authority and creates no reservation.
|
|
43
|
+
|
|
44
|
+
## Intent is awareness; a claim commits
|
|
45
|
+
|
|
46
|
+
A **claim** is a leased reservation for a canonical resource. An agent that is about to edit
|
|
47
|
+
the API can make its intent actionable:
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
acc
|
|
50
|
+
acc work --summary "adding the registration endpoint" --mode edit \
|
|
51
|
+
--hint 'file:packages/api/**'
|
|
52
|
+
acc claim --resource 'file:packages/api/**' \
|
|
53
|
+
--reason "adding the registration endpoint"
|
|
51
54
|
```
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
`advisory`.
|
|
56
|
+
An overlapping claim exits `5` and names the current holder. The peers can narrow their
|
|
57
|
+
resources, ask each other a question, or wait for a handoff. ACC does not arbitrate the
|
|
58
|
+
decision.
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
`
|
|
60
|
-
|
|
60
|
+
Claims are `advisory` unless every relevant live client exposes a certified pre-write guard
|
|
61
|
+
for that path. `guarded` still does not stop unrelated programs or client writes the adapter
|
|
62
|
+
cannot observe. File claims are repository-relative: `file:src/a.mjs` names one file and
|
|
63
|
+
`file:src/**` names a tree; ambiguous spellings such as `file:src/*` are rejected.
|
|
61
64
|
|
|
62
|
-
## Messages
|
|
65
|
+
## Messages and obligations
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
and `handoff`, which requires `finish` so their thread and structured payloads cannot be
|
|
67
|
-
omitted.
|
|
67
|
+
A **message** is explicit, durable, attributed peer input. It is never system authority.
|
|
68
|
+
Message kinds describe the conversation:
|
|
68
69
|
|
|
69
|
-
|
|
70
|
+
| Kind | What it communicates | Default obligation |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `note` | useful information | none |
|
|
73
|
+
| `question` | a focused question | reply |
|
|
74
|
+
| `request` | requested action and result | reply |
|
|
75
|
+
| `answer` | a reply created in an existing thread | none |
|
|
76
|
+
| `decision` | a decision peers should know | none, or acknowledge when addressed |
|
|
77
|
+
| `handoff` | completed, remaining, and blocked work | acknowledge when addressed |
|
|
70
78
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
| `note` | `none` |
|
|
74
|
-
| `question` | `reply` |
|
|
75
|
-
| `request` | `reply` |
|
|
76
|
-
| `answer` | `none` |
|
|
77
|
-
| `decision` | `none`, or `acknowledge` when addressed |
|
|
78
|
-
| `handoff` | `acknowledge` when addressed, `none` as a room record |
|
|
79
|
+
An **obligation** is the communication response owed by a recipient. A request is not an
|
|
80
|
+
order, and a reply is not proof that work is complete.
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
track execution state. Every body is attributed, escaped, and framed as peer input rather
|
|
82
|
-
than system authority.
|
|
82
|
+
## Threads keep the exchange together
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
The first message is a **thread** root. A reply names the original message and stays in that
|
|
85
|
+
thread, so Claude's interface question and Codex's answer remain connected. There is no
|
|
86
|
+
hidden mutable thread status; pending attention is derived from obligations and each
|
|
87
|
+
recipient's receipt.
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
receipts.
|
|
90
|
-
|
|
91
|
-
`clientMessageId` is the caller's retry key. Repeating equivalent content with the same
|
|
92
|
-
key returns the same logical message; reusing it for different content is rejected.
|
|
89
|
+
`clientMessageId` is an optional retry key. Equivalent retries return the original message;
|
|
90
|
+
the same key with different content is rejected. The exact fields and validation rules are
|
|
91
|
+
in [Protocol](PROTOCOL.md).
|
|
93
92
|
|
|
94
93
|
## Delivery words are evidence
|
|
95
94
|
|
|
96
|
-
Each recipient has
|
|
95
|
+
Each recipient has its own monotonic **receipt**:
|
|
97
96
|
|
|
98
97
|
```text
|
|
99
98
|
queued -> offered -> retrieved -> acknowledged
|
|
100
99
|
```
|
|
101
100
|
|
|
102
|
-
- `queued`: message and receipt committed
|
|
103
|
-
- `offered`:
|
|
104
|
-
|
|
105
|
-
- `
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
- `queued`: the durable message and receipt committed;
|
|
102
|
+
- `offered`: ACC or a certified client accepted the delivery bytes, not proof of reading;
|
|
103
|
+
- `retrieved`: the participant fetched the message, not proof of model attention;
|
|
104
|
+
- `acknowledged`: the participant acknowledged it or replied, not proof of task completion.
|
|
105
|
+
|
|
106
|
+
There is no `seen` receipt. A failed delivery attempt leaves the message queued and
|
|
107
|
+
recoverable rather than creating a terminal failure state.
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
failure: a failed acceleration leaves the durable message recoverable. Forward skips are
|
|
111
|
-
legal when a stronger fact implies the weaker ones; backward transitions are rejected.
|
|
109
|
+
## Durable first, faster delivery second
|
|
112
110
|
|
|
113
|
-
|
|
111
|
+
The durable inbox is universal. Exact-version certified adapters may also offer messages at
|
|
112
|
+
the next normal turn. That does not wake an idle client. Claude Code has the only shipped
|
|
113
|
+
experimental live path, off by default and subject to recipient policy and current
|
|
114
|
+
reachability; Codex live delivery is withdrawn. [Capabilities](CAPABILITIES.md) is the
|
|
115
|
+
current adapter matrix.
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
recovery path. Exact-version certified adapters may offer complete peer messages at the
|
|
117
|
-
next normal turn. Native live push would additionally require passing certification, the
|
|
118
|
-
recipient's opt-in policy, exactly one current reachable binding, and a safe recipient
|
|
119
|
-
state.
|
|
117
|
+
## Handoffs preserve explicit context
|
|
120
118
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
not a stronger promise.
|
|
119
|
+
A **handoff** records what an agent says it completed, what remains, and any blockers before
|
|
120
|
+
the session ends. It can help a later session resume without copying a transcript. Like
|
|
121
|
+
every peer message, it is attributed data to verify, not an authoritative completion claim.
|
|
125
122
|
|
|
126
|
-
## Where
|
|
123
|
+
## Where data lives
|
|
127
124
|
|
|
128
|
-
Presence,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
125
|
+
Presence, intent, claims, messages, receipts, events, and handoffs live in platform app data
|
|
126
|
+
outside every repository. ACC never collects or shares raw prompts, assistant responses, or
|
|
127
|
+
transcripts. Optional `acc.workspace.json` is user-requested workspace configuration, not
|
|
128
|
+
runtime state.
|
|
132
129
|
|
|
133
|
-
Next: [Getting started](GETTING_STARTED.md) · [
|
|
134
|
-
[Capabilities](CAPABILITIES.md)
|
|
130
|
+
Next: [Getting started](GETTING_STARTED.md) · [How ACC works](HOW_IT_WORKS.md) ·
|
|
131
|
+
[Protocol](PROTOCOL.md) · [Capabilities](CAPABILITIES.md)
|