agents-can-communicate 0.3.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 +92 -92
- package/SECURITY.md +7 -4
- package/docs/ADAPTER_AUTHORING.md +26 -22
- package/docs/ARCHITECTURE.md +23 -15
- package/docs/CAPABILITIES.md +30 -12
- package/docs/CLI.md +21 -10
- package/docs/CONCEPTS.md +91 -94
- package/docs/CONFIGURATION.md +30 -24
- 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 +119 -233
- package/docs/MCP.md +8 -8
- package/docs/PROTOCOL.md +12 -7
- package/docs/RELEASING.md +111 -87
- package/docs/SECURITY_MODEL.md +13 -8
- package/docs/TROUBLESHOOTING.md +24 -12
- package/docs/WHY_ACC.md +18 -16
- package/docs/index.md +26 -18
- 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 +6 -4
- 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 +5 -3
- 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 +5 -3
- 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 +5 -3
- 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 +5 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +44 -14
- 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/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/package.json +4 -2
- 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 +1 -1
package/docs/GLOSSARY.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Glossary
|
|
2
2
|
|
|
3
|
-
- **Workspace** — one
|
|
4
|
-
- **Participant** — the
|
|
5
|
-
- **Session** — one independently opened client conversation participating in a workspace.
|
|
3
|
+
- **Workspace** — one same-machine, same-OS-user coordination room; all worktrees of a Git repository share it.
|
|
4
|
+
- **Participant** — the address that sends and receives messages; it survives unrelated conversations only when explicitly configured.
|
|
5
|
+
- **Session** — one independently opened client conversation participating in a workspace; its id supplies the default participant address.
|
|
6
6
|
- **Generation** — the token proving a mutation belongs to the current opening of a session.
|
|
7
7
|
- **Presence** — `online`, `stale`, or `offline`, based only on observed heartbeat and pid facts.
|
|
8
8
|
- **Intent** — a session's current summary and resource hints; awareness, not permission.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
- **Retrieved** — the participant received the body; not proof of model attention.
|
|
17
17
|
- **Acknowledged** — that participant explicitly acknowledged or replied; a reply is not proof requested work finished.
|
|
18
18
|
- **Next-turn delivery** — certified projection at the client's next normal turn; it never interrupts an active turn.
|
|
19
|
-
- **Live push** — optional delivery to an already-running session through an official certified client API.
|
|
19
|
+
- **Live push** — optional delivery to an already-running session through an official certified client API. Claude Code 2.1.258+ on macOS arm64 qualifies, behind an opt-in; it waits for a turn in progress rather than interrupting it.
|
|
20
20
|
- **Recipient policy** — `off`, `actionable`, or `all`; opt-in permission to spend a turn, not a capability.
|
|
21
21
|
- **Delivery binding** — ephemeral, generation-bound reachability data owned by an adapter.
|
|
22
22
|
- **Fallback** — durable inbox or exact-certified next-turn recovery when live delivery is unavailable.
|
package/docs/HOW_IT_WORKS.md
CHANGED
|
@@ -1,277 +1,163 @@
|
|
|
1
1
|
# How ACC works
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
their
|
|
3
|
+
Suppose Codex is adding an account-registration endpoint while Claude Code builds the
|
|
4
|
+
registration screen. You gave each session an ordinary task. ACC supplies the awareness
|
|
5
|
+
and communication layer around their work; the agents decide whether and how to use it.
|
|
6
6
|
|
|
7
|
-
This page follows
|
|
8
|
-
|
|
9
|
-
[Architecture](ARCHITECTURE.md)
|
|
10
|
-
|
|
11
|
-
## The whole system in one picture
|
|
7
|
+
This page follows the dependency from discovery to an acknowledged answer. For exact record
|
|
8
|
+
shapes and state rules, use [Protocol](PROTOCOL.md). For package boundaries, storage, and
|
|
9
|
+
recovery, use [Architecture](ARCHITECTURE.md).
|
|
12
10
|
|
|
13
11
|
```mermaid
|
|
14
|
-
|
|
15
|
-
U
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
C
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
12
|
+
sequenceDiagram
|
|
13
|
+
participant U as User
|
|
14
|
+
participant C as Codex
|
|
15
|
+
participant ACC
|
|
16
|
+
participant A as Claude Code
|
|
17
|
+
U->>C: Add the registration endpoint
|
|
18
|
+
U->>A: Build the registration screen
|
|
19
|
+
ACC-->>C: Claude Code is a peer
|
|
20
|
+
ACC-->>A: Codex is a peer
|
|
21
|
+
A->>ACC: Ask Codex for the endpoint contract
|
|
22
|
+
ACC-->>C: Offer the question or keep it in inbox
|
|
23
|
+
C->>ACC: Reply with the contract
|
|
24
|
+
ACC-->>A: Offer the answer or keep it in inbox
|
|
26
25
|
```
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
are short-lived local processes that open the same workspace store when needed. An MCP
|
|
30
|
-
client may keep its own `acc-mcp` stdio child running, but that child is a tool boundary for
|
|
31
|
-
one participant, not a scheduler or owner of the room.
|
|
32
|
-
|
|
33
|
-
## 1. A client session joins a workspace
|
|
27
|
+
## 1. The integrations introduce the peers
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
`acc install` adds supported hooks, plugins, or extensions to native clients it finds. At
|
|
30
|
+
session startup, such a client calls `acc-hook`, which registers the session in the local
|
|
31
|
+
ACC workspace. The native integration also gives the agent a small skill describing peer
|
|
32
|
+
discovery, messages, replies, claims, and handoffs.
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
5. stores a small binding from the client's session id to that ACC generation.
|
|
34
|
+
A generic MCP client instead joins through `acc-mcp`, which resolves its configured
|
|
35
|
+
participant and workspace when tools or resources are called. It exposes the coordination
|
|
36
|
+
tools but does not install the native clients' skill. See its
|
|
37
|
+
[manual MCP boundary](MCP.md#account-for-the-manual-boundary).
|
|
43
38
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
room but keep separate checkout and branch facts. Git itself is optional.
|
|
39
|
+
ACC does not add instructions to the user's task prompt, create a team, or choose work. The
|
|
40
|
+
agent still operates under its own conversation, permissions, and client policy.
|
|
47
41
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
restart and recover messages sent while it was away.
|
|
42
|
+
Sessions meet only when they resolve to the same local workspace. Git worktrees of one
|
|
43
|
+
repository share a workspace through the Git common directory, while retaining separate
|
|
44
|
+
checkout and branch facts. A plain directory uses its canonical path unless optional
|
|
45
|
+
workspace configuration supplies a stable id or additional roots. Git is not required.
|
|
53
46
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
claim, message, or handoff. This is how ACC stays silent when a session is alone without
|
|
57
|
-
making discovery unreliable when a peer arrives.
|
|
47
|
+
A workspace is local to one machine and operating-system user. ACC is not a remote sync
|
|
48
|
+
service, even if project files are synchronized elsewhere.
|
|
58
49
|
|
|
59
|
-
## 2.
|
|
50
|
+
## 2. Each agent shares a small amount of work context
|
|
60
51
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
The Codex session may publish “adding the registration endpoint” with a hint for its API
|
|
53
|
+
files. Claude may publish “building the registration screen” with a UI hint. This intent is
|
|
54
|
+
short, explicit coordination data, not a copy of either conversation.
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
56
|
+
When peers are available, the integration can project their identity, intent, relevant
|
|
57
|
+
claims, and pending messages into a supported normal turn. The agent can then notice that
|
|
58
|
+
its work depends on a peer. ACC does not run a hidden classifier and does not guarantee the
|
|
59
|
+
model will coordinate; relevance remains the agent's decision.
|
|
69
60
|
|
|
70
|
-
|
|
61
|
+
Presence and intent can stay ephemeral while a session is alone. Durable workspace history
|
|
62
|
+
materializes when a second session appears or an agent creates the first durable message,
|
|
63
|
+
claim, or handoff. Runtime state lives in platform app data outside the repository.
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
protocol shape and resolves A's current session generation. Core then performs one
|
|
74
|
-
filesystem transaction that creates:
|
|
65
|
+
## 3. A dependency becomes a direct question
|
|
75
66
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
Claude needs the endpoint contract, so it looks up the peer and sends an addressed
|
|
68
|
+
`question`. A client name such as `codex` resolves when exactly one peer session of that
|
|
69
|
+
client is eligible. If several Codex sessions are live, the agent uses the exact participant
|
|
70
|
+
id from `acc status --json`.
|
|
80
71
|
|
|
81
|
-
The
|
|
82
|
-
`
|
|
83
|
-
|
|
72
|
+
The sender is not granting itself authority over the recipient. Messages are attributed,
|
|
73
|
+
untrusted peer input. A `request` asks for action and a result, but it is not an order; the
|
|
74
|
+
receiving agent evaluates it under its own instructions and permissions.
|
|
84
75
|
|
|
85
|
-
|
|
86
|
-
commit time. Participants arriving later can find the room record through full forensic
|
|
87
|
-
sync, but they do not receive retroactive receipts.
|
|
76
|
+
## 4. ACC records before it tries delivery
|
|
88
77
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
question
|
|
78
|
+
Sending the question commits the message and one `queued` receipt for each recipient in a
|
|
79
|
+
single filesystem transaction. Only then does ACC attempt to make it arrive sooner. If a
|
|
80
|
+
hook, client, or experimental transport is unavailable, the recorded question remains in
|
|
81
|
+
the recipient's durable inbox.
|
|
92
82
|
|
|
93
|
-
|
|
83
|
+
That order is the central reliability guarantee:
|
|
94
84
|
|
|
95
|
-
|
|
85
|
+
```text
|
|
86
|
+
agent sends -> durable message and queued receipt -> optional delivery attempt
|
|
87
|
+
```
|
|
96
88
|
|
|
97
|
-
|
|
89
|
+
The first message is also the root of its thread. Retries can carry a `clientMessageId` so
|
|
90
|
+
equivalent repeats return the original record while conflicting reuse is rejected. Room
|
|
91
|
+
messages resolve their recipients at commit time; later arrivals do not gain retroactive
|
|
92
|
+
receipts. [Protocol](PROTOCOL.md) defines these rules precisely.
|
|
98
93
|
|
|
99
|
-
|
|
100
|
-
calling participant and atomically advances that participant's receipt to `retrieved`.
|
|
101
|
-
An exact `acc inbox --message message_x` remains usable after context compaction or when a
|
|
102
|
-
message was too large to project safely.
|
|
94
|
+
## 5. The receiving client chooses the delivery path
|
|
103
95
|
|
|
104
|
-
|
|
96
|
+
All recipients have the same durable record, but adapters expose different acceleration:
|
|
105
97
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
98
|
+
- **Durable inbox:** universal recovery. An agent can retrieve the complete addressed
|
|
99
|
+
message with `acc inbox`, including by exact message id after compaction.
|
|
100
|
+
- **Next normal turn:** exact captured versions of Codex, Claude Code, Gemini CLI, and Kimi
|
|
101
|
+
Code can receive complete attributed peer context when the user next prompts that client.
|
|
102
|
+
This does not wake an idle session.
|
|
103
|
+
- **Optional Claude Code channel:** supported Claude Code versions on Apple Silicon macOS
|
|
104
|
+
may receive an addressed actionable message while idle. This is experimental, off by
|
|
105
|
+
default, can spend tokens, never interrupts a running turn, and requires the vendor's
|
|
106
|
+
visible development-channel warning.
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
Codex native live delivery is withdrawn because the required remote mode hides the
|
|
109
|
+
session's real workspace. Grok, generic MCP, unknown versions, and uncaptured platforms use
|
|
110
|
+
inbox polling. [Capabilities](CAPABILITIES.md) lists the evidence and exact fallbacks.
|
|
115
111
|
|
|
116
|
-
|
|
112
|
+
When a complete projected body cannot fit the configured byte budget, ACC keeps the message
|
|
113
|
+
id and exact inbox recovery command rather than silently truncating the peer's words.
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
these hold at once:
|
|
115
|
+
## 6. The reply stays in the same thread
|
|
120
116
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- an adapter that declares `delivery.livePush` and a native contract; and
|
|
126
|
-
- adapter acceptance of the bytes.
|
|
117
|
+
Codex replies with the request and response fields. The reply operation creates an `answer`
|
|
118
|
+
for Claude in the original thread and acknowledges Codex's receipt for the question in one
|
|
119
|
+
transaction. For a message that requires acknowledgement but no answer, the recipient uses
|
|
120
|
+
`ack` instead.
|
|
127
121
|
|
|
128
|
-
|
|
129
|
-
adapters ship a native transport, both experimental and off until a per-client opt-in:
|
|
122
|
+
Receipts describe evidence, not assumptions:
|
|
130
123
|
|
|
131
124
|
```text
|
|
132
|
-
|
|
133
|
-
\-> queued inbox on every failure
|
|
125
|
+
queued -> offered -> retrieved -> acknowledged
|
|
134
126
|
```
|
|
135
127
|
|
|
136
|
-
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Compatibility is decided at the launch-time bootstrap and again by a per-session handshake
|
|
145
|
-
bound to the exact client process; there is no maximum client version, but a newer stable
|
|
146
|
-
release must pass a current probe and handshake for the captured protocol, and an older,
|
|
147
|
-
prerelease, known-bad, or uncaptured client stays durable-only. ACC is never the parent of
|
|
148
|
-
a model session after the shell `exec`, and `ACC_BYPASS=1` starts the unmodified client.
|
|
149
|
-
|
|
150
|
-
## 5. Reply closes the communication obligation
|
|
151
|
-
|
|
152
|
-
The complete question-and-answer path is:
|
|
128
|
+
- `queued` means the message and receipt are durable;
|
|
129
|
+
- `offered` means bytes crossed ACC's transport boundary or a certified client accepted
|
|
130
|
+
them, not that the model read them;
|
|
131
|
+
- `retrieved` means the participant explicitly fetched the message, not that a model paid
|
|
132
|
+
attention; and
|
|
133
|
+
- `acknowledged` means the participant acknowledged or replied, not that requested work is
|
|
134
|
+
complete.
|
|
153
135
|
|
|
154
|
-
|
|
155
|
-
sequenceDiagram
|
|
156
|
-
participant A as Session A
|
|
157
|
-
participant Core
|
|
158
|
-
participant Store
|
|
159
|
-
participant B as Session B
|
|
160
|
-
A->>Core: addressed question for B
|
|
161
|
-
Core->>Store: message + queued receipt + event
|
|
162
|
-
Store-->>Core: transaction committed
|
|
163
|
-
Core-->>A: recorded with delivery outcome
|
|
164
|
-
alt certified next-turn
|
|
165
|
-
B->>Core: normal turn hook
|
|
166
|
-
Core-->>B: attributed untrusted envelope
|
|
167
|
-
Core->>Store: receipt offered after transport accepts bytes
|
|
168
|
-
else durable inbox
|
|
169
|
-
B->>Core: acc inbox for the message
|
|
170
|
-
Core->>Store: advance B receipt to retrieved
|
|
171
|
-
Core-->>B: attributed message and receipt
|
|
172
|
-
end
|
|
173
|
-
B->>Core: reply to the question id
|
|
174
|
-
Core->>Store: answer + A receipt + acknowledge B receipt
|
|
175
|
-
Core-->>A: answer through next-turn or inbox
|
|
176
|
-
```
|
|
136
|
+
There is no `seen` receipt and no ACC task state such as accepted, running, or done.
|
|
177
137
|
|
|
178
|
-
|
|
179
|
-
creates the answer's receipt for A, and advances B's original receipt to `acknowledged` in
|
|
180
|
-
one transaction. A transport failure after that cannot undo the reply. `ack` performs the
|
|
181
|
-
last transition without creating an answer when the obligation only asks for
|
|
182
|
-
acknowledgement.
|
|
138
|
+
## 7. Claims warn before edits overlap
|
|
183
139
|
|
|
184
|
-
|
|
140
|
+
Before changing files, an agent can publish intent and claim a narrow resource such as
|
|
141
|
+
`file:packages/api/**`. Another live session attempting an overlapping claim receives exit
|
|
142
|
+
code `5` with the holder, giving the peers a chance to narrow or sequence their work.
|
|
185
143
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
read, `retrieved` does not prove model attention, and `acknowledged` resolves communication
|
|
192
|
-
only. A reply saying “I will do it” is not evidence that the requested work finished; ACC
|
|
193
|
-
does not have accepted, running, or done task states.
|
|
144
|
+
Claims are not operating-system locks. A claim is `guarded` only when every relevant live
|
|
145
|
+
client exposes a captured pre-write guard for the path ACC can recognize. Otherwise it is
|
|
146
|
+
`advisory`. Even a guarded claim cannot stop an unrelated program or a write path the client
|
|
147
|
+
does not expose. [Concepts](CONCEPTS.md#intent-is-awareness-a-claim-commits) explains the
|
|
148
|
+
user-facing distinction.
|
|
194
149
|
|
|
195
|
-
##
|
|
150
|
+
## 8. The boundaries remain visible
|
|
196
151
|
|
|
197
|
-
|
|
152
|
+
ACC stores only coordination data an agent explicitly publishes: identity, presence,
|
|
153
|
+
one-line intent, claims, messages, replies, handoffs, receipts, and events. It never collects
|
|
154
|
+
or shares raw prompts, assistant responses, or transcripts. Peer bodies are framed as
|
|
155
|
+
untrusted data and remain subject to the receiving session's permissions.
|
|
198
156
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
├── state/<kind>/<id>.json materialised current records
|
|
203
|
-
├── events/<sequence>.json immutable semantic history
|
|
204
|
-
├── journal/ crash-recovery authority
|
|
205
|
-
├── locks/ one cross-process writer mutex
|
|
206
|
-
├── ephemeral/ non-durable presence, intent, and delivery bindings
|
|
207
|
-
├── bindings/ client-session to ACC-generation mappings
|
|
208
|
-
├── retained/ logical deletion and retired evidence
|
|
209
|
-
└── tmp/ staged atomic publications
|
|
210
|
-
```
|
|
157
|
+
Hooks have a short time limit and fail open. A coordination failure may remove awareness or
|
|
158
|
+
force inbox fallback, but ACC must not be the reason a client action stops. Unknown versions
|
|
159
|
+
and platforms inherit no capability; `acc doctor` reports the downgrade and next action.
|
|
211
160
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
On macOS the platform data home is `~/Library/Application Support`; on Linux it is
|
|
216
|
-
`$XDG_DATA_HOME` or `~/.local/share`. `ACC_DATA_HOME` replaces that base. Runtime paths are
|
|
217
|
-
checked against workspace roots so ACC state cannot be placed inside the project.
|
|
218
|
-
|
|
219
|
-
Every durable mutation holds the same writer mutex, loads only its declared record kinds,
|
|
220
|
-
checks state generations, stages the full result, and writes a recovery journal before
|
|
221
|
-
publishing. Events are immutable no-replace files; current state is a materialised view
|
|
222
|
-
replaced atomically. While publication is incomplete, the active journal bounds event
|
|
223
|
-
cursors below the transaction's first sequence; the next store opener rolls a decided
|
|
224
|
-
transaction forward before serving a read. The store prefers a recoverable duplicate offer
|
|
225
|
-
after a crash to an unearned delivery claim.
|
|
226
|
-
|
|
227
|
-
Paths are opened with containment and no-follow checks. Corrupt records, a foreign
|
|
228
|
-
workspace identity, and unknown store versions fail before mutation rather than being
|
|
229
|
-
guessed into a compatible shape.
|
|
230
|
-
|
|
231
|
-
## 7. Adapters translate evidence, not product semantics
|
|
232
|
-
|
|
233
|
-
The vendor-neutral layers know nothing about Codex, Claude Code, Gemini CLI, Grok, or Kimi
|
|
234
|
-
Code. `protocol` owns record shapes and state transitions; `core` owns coordination rules;
|
|
235
|
-
`storage-filesystem` owns persistence. Vendor adapters own hook payloads, installation,
|
|
236
|
-
client-specific response shapes, and captured capability evidence. `hook-runner` applies
|
|
237
|
-
the common bounded fail-open lifecycle, while `delivery-router` evaluates optional live
|
|
238
|
-
delivery.
|
|
239
|
-
|
|
240
|
-
Unknown client versions and platforms inherit no capability. A method in an adapter or a
|
|
241
|
-
vendor documentation example is not enough: every `true` capability needs a retained
|
|
242
|
-
real-client fixture. This is why the same product can degrade visibly from next-turn
|
|
243
|
-
projection to inbox polling without changing its message or receipt semantics.
|
|
244
|
-
|
|
245
|
-
## 8. What crosses the trust boundary
|
|
246
|
-
|
|
247
|
-
ACC stores only explicit coordination data: identity, presence, one-line intent, claims,
|
|
248
|
-
messages the sender chose to send, structured handoffs, receipts, artifacts, and events.
|
|
249
|
-
It does not collect raw prompts, assistant responses, transcripts, environment variables,
|
|
250
|
-
credentials, or permission approvals.
|
|
251
|
-
|
|
252
|
-
Peer bodies remain untrusted data. The projector attributes the sender, escapes framing
|
|
253
|
-
and terminal control sequences, and never promotes peer text to system authority. The
|
|
254
|
-
receiving session still evaluates it under its own instructions and permissions.
|
|
255
|
-
|
|
256
|
-
Every native hook has a five-second ceiling and fails open: if ACC cannot read the store or
|
|
257
|
-
decide safely, the client's action continues. Coordination may become less effective, but
|
|
258
|
-
ACC itself must not stop a session from working.
|
|
259
|
-
|
|
260
|
-
## Trace the implementation
|
|
261
|
-
|
|
262
|
-
The shortest source-code path is:
|
|
263
|
-
|
|
264
|
-
1. `packages/hook-runner/src/runner.mjs` — attach, before-turn projection, guards, and the
|
|
265
|
-
fail-open boundary;
|
|
266
|
-
2. `packages/core/src/conversations.mjs` — record-first messages, threads, receipts, and
|
|
267
|
-
handoffs;
|
|
268
|
-
3. `packages/core/src/inbox.mjs` — recipient-owned retrieval, reply, and acknowledgement;
|
|
269
|
-
4. `packages/delivery-router/src/router.mjs` — policy, reachability, certification, and live
|
|
270
|
-
fallback;
|
|
271
|
-
5. `packages/storage-filesystem/src/store.mjs` — transactions, snapshots, ephemeral state,
|
|
272
|
-
and recovery; and
|
|
273
|
-
6. `packages/adapter-sdk/src/context-projector.mjs` — bounded untrusted peer framing.
|
|
274
|
-
|
|
275
|
-
Continue with [Capabilities](CAPABILITIES.md) for what each shipped client actually proves,
|
|
276
|
-
[Security model](SECURITY_MODEL.md) for trust boundaries and attack tests, and
|
|
277
|
-
[Adapter authoring](ADAPTER_AUTHORING.md) for the integration contract.
|
|
161
|
+
Continue with [Capabilities](CAPABILITIES.md) for client-specific behavior,
|
|
162
|
+
[Security model](SECURITY_MODEL.md) for trust boundaries, or
|
|
163
|
+
[Architecture](ARCHITECTURE.md) to trace these steps through the packages.
|
package/docs/MCP.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# MCP
|
|
2
2
|
|
|
3
|
-
`acc-mcp`
|
|
4
|
-
|
|
5
|
-
the client's lifecycle, intercept writes,
|
|
6
|
-
|
|
3
|
+
Use `acc-mcp` when a client can call MCP tools but has no native ACC adapter. The server
|
|
4
|
+
exposes durable messages, threads, receipts, intent, claims, and handoffs over stdio. It is
|
|
5
|
+
a manual polling integration: it cannot infer the client's lifecycle, intercept writes,
|
|
6
|
+
inject a normal turn, or push a message.
|
|
7
7
|
|
|
8
8
|
```mermaid
|
|
9
9
|
graph LR
|
|
@@ -11,7 +11,7 @@ graph LR
|
|
|
11
11
|
M --> S[("ACC durable store")]
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Configure the server
|
|
15
15
|
|
|
16
16
|
```json
|
|
17
17
|
{
|
|
@@ -33,7 +33,7 @@ The server implements MCP protocol revision `2026-07-28` over newline-delimited
|
|
|
33
33
|
stdio. Tool input schemas are closed: unknown fields and invalid conditional shapes are
|
|
34
34
|
rejected before a session is resolved.
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## Call the durable tools
|
|
37
37
|
|
|
38
38
|
| Tool | Required input | Optional input |
|
|
39
39
|
|---|---|---|
|
|
@@ -63,7 +63,7 @@ resolves the configured MCP participant and advances only the returned receipts
|
|
|
63
63
|
`retrieved`, just like the inbox tool. Snapshot and roster reads do not advance receipts.
|
|
64
64
|
A full snapshot is for explicit workspace forensics.
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## Account for the manual boundary
|
|
67
67
|
|
|
68
68
|
The generic MCP capability declaration is all false:
|
|
69
69
|
|
|
@@ -79,7 +79,7 @@ An MCP participant therefore reports `advisory` enforcement and `manual` lifecyc
|
|
|
79
79
|
workspace protection is the weakest live participant's real guarantee, one MCP session
|
|
80
80
|
makes guarded claims advisory for the room.
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## Poll without overstating delivery
|
|
83
83
|
|
|
84
84
|
Every outgoing message commits first. `acc_message`, `acc_request`, `acc_reply`, and
|
|
85
85
|
`acc_finish` cannot promise push; delivery results remain queued with a durable diagnostic.
|
package/docs/PROTOCOL.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Protocol
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
There is no compatibility reader, conversion, archive path, or automatic
|
|
3
|
+
Use this page when implementing or checking a boundary shared by core, CLI, MCP, storage,
|
|
4
|
+
and adapters. Protocol version 0.2 uses store schema version `3` and deliberately rejects
|
|
5
|
+
v0.1 state. There is no compatibility reader, conversion, archive path, or automatic
|
|
6
|
+
deletion.
|
|
6
7
|
|
|
7
8
|
## Durable records
|
|
8
9
|
|
|
@@ -24,7 +25,9 @@ Workspace
|
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
- A workspace is one local coordination room.
|
|
27
|
-
- A participant is the
|
|
28
|
+
- A participant is the recipient address for a message. A hooked session gets a default
|
|
29
|
+
address derived from its client session id; only an explicitly supplied participant id
|
|
30
|
+
is stable across unrelated client conversations.
|
|
28
31
|
- A session is one client conversation. Its unguessable generation token proves that a
|
|
29
32
|
later mutation still belongs to the current opening.
|
|
30
33
|
|
|
@@ -186,9 +189,11 @@ The recipient owns `livePolicy` because native push may start a model turn:
|
|
|
186
189
|
- `all`: every addressed kind may use live push.
|
|
187
190
|
|
|
188
191
|
Default is `off`. Policy never creates a capability. The router still requires a current
|
|
189
|
-
reachable binding, one unambiguous recipient generation,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
reachable binding, one unambiguous recipient generation, supported client evidence, and
|
|
193
|
+
adapter acceptance. Claude Code live delivery on macOS arm64 uses a captured 2.1.258
|
|
194
|
+
minimum plus a current feature probe and per-session protocol handshake; it was confirmed
|
|
195
|
+
again on 2.1.260. Codex's queue transport was captured but withdrawn because its required
|
|
196
|
+
mode hides the session workspace. Every unavailable or refused route falls back durably.
|
|
192
197
|
|
|
193
198
|
## Attention and sync
|
|
194
199
|
|