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/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)
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
# Configuration
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
directory when
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
Start without configuration. ACC identifies a workspace from its Git common directory, or
|
|
4
|
+
from the directory itself when Git is absent. Sessions can communicate only when they run
|
|
5
|
+
as the same operating-system user on the same machine and resolve that same local
|
|
6
|
+
workspace.
|
|
7
|
+
|
|
8
|
+
Create `acc.workspace.json` only for stable workspace identity, roots, or shared
|
|
9
|
+
claim/context policy. It is optional project configuration that `acc config init` may write
|
|
10
|
+
at your request; runtime state remains in platform app data outside the repository. The
|
|
11
|
+
file never defines agents, messages, execution state, or delivery endpoints. Project map:
|
|
12
|
+
[README](index.md). Terms used below: [Glossary](GLOSSARY.md).
|
|
13
|
+
|
|
14
|
+
## Decide whether you need a config
|
|
15
|
+
|
|
16
|
+
- **Identity that survives a local move.** Without a config, the same non-Git project at two
|
|
17
|
+
paths is two workspaces. `workspaceId` lets the same OS user move or reopen it locally.
|
|
18
|
+
Matching ids never connect different machines or OS users.
|
|
16
19
|
- **More than one root.** A monorepo whose apps live in separate directories, or a
|
|
17
20
|
workspace that spans sibling checkouts.
|
|
18
21
|
- **Shared policy.** Claim mode and context budget, agreed once and committed, rather than
|
|
@@ -21,7 +24,7 @@ map: [README](index.md). Terms used below: [Glossary](GLOSSARY.md).
|
|
|
21
24
|
to be installed, so `acc doctor` can say what is missing rather than leaving a session
|
|
22
25
|
silently uncoordinated.
|
|
23
26
|
|
|
24
|
-
###
|
|
27
|
+
### Define the file
|
|
25
28
|
|
|
26
29
|
`acc.workspace.json`, at the root of the workspace. One name, so discovery is a lookup and
|
|
27
30
|
not a search. It is found by walking up from the working directory, because sessions start
|
|
@@ -64,7 +67,7 @@ like nothing at all to a parser that ignores what it does not know, and the resu
|
|
|
64
67
|
team whose policy quietly stopped applying. `extensions` is the one declared door for
|
|
65
68
|
anything ACC does not define.
|
|
66
69
|
|
|
67
|
-
###
|
|
70
|
+
### Keep runtime state out
|
|
68
71
|
|
|
69
72
|
Sessions, participants, messages, claims, receipts, intents, events, tokens, credentials.
|
|
70
73
|
All of it is refused, by name, with the key that caused it, for two reasons. Runtime state
|
|
@@ -73,7 +76,7 @@ without carrying presence and locks along. And a config lives in a repository, w
|
|
|
73
76
|
who can open a pull request can edit it — a file that could declare sessions would be a way
|
|
74
77
|
to hand a peer state it should have had to earn.
|
|
75
78
|
|
|
76
|
-
###
|
|
79
|
+
### Change identity safely
|
|
77
80
|
|
|
78
81
|
The config carries the workspace identity, so writing one moves the project to a new
|
|
79
82
|
workspace. Sessions already attached stay on the old one: they keep heartbeating it, they
|
|
@@ -90,7 +93,7 @@ pass --force to write anyway.
|
|
|
90
93
|
|
|
91
94
|
Close them, or pass `--force` if you mean it — and restart them afterwards.
|
|
92
95
|
|
|
93
|
-
###
|
|
96
|
+
### Create or validate it
|
|
94
97
|
|
|
95
98
|
<!-- test:illustration asks a person to confirm; there is nobody to ask in a test -->
|
|
96
99
|
```bash
|
|
@@ -107,7 +110,7 @@ and replacing it on a mistyped command would split one workspace into two.
|
|
|
107
110
|
thing it is inspecting. With no config present it reports the defaults rather than failing,
|
|
108
111
|
because not having one is a valid state.
|
|
109
112
|
|
|
110
|
-
##
|
|
113
|
+
## Keep delivery consent user-owned
|
|
111
114
|
|
|
112
115
|
Live delivery may start a model turn and spend that recipient's tokens, so it is configured
|
|
113
116
|
through the recipient's user-owned client installation:
|
|
@@ -118,12 +121,15 @@ acc install --adapter codex --delivery off
|
|
|
118
121
|
|
|
119
122
|
The allowed values are `off`, `actionable`, and `all`; the default is `off`. This setting
|
|
120
123
|
does not belong in `acc.workspace.json`, where a pull request could opt someone else into
|
|
121
|
-
spending a turn. It also cannot create a capability
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
spending a turn. It also cannot create a capability. Exact-version evidence governs
|
|
125
|
+
ordinary hook features; Claude Code live delivery separately requires macOS arm64, version
|
|
126
|
+
2.1.258 or newer, and a current feature probe before installation applies the requested
|
|
127
|
+
policy. If those install-time checks fail, effective policy remains `off` and the installer
|
|
128
|
+
reports next-turn or inbox fallback. Each later session must also pass its own
|
|
129
|
+
generation-bound handshake. A failed session handshake clears or refuses that binding and
|
|
130
|
+
reports degraded reachability; it does not rewrite the installed consent.
|
|
131
|
+
|
|
132
|
+
## Override local paths and identity
|
|
127
133
|
|
|
128
134
|
Nothing in `acc.workspace.json` says where state is stored, and nothing there can — that is
|
|
129
135
|
the job of these variables, or the platform's own locations, and ACC refuses any of them
|
package/docs/DESIGN_DECISIONS.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Design decisions
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Use this log to understand constraints that should survive refactors and proposals that
|
|
4
|
+
remain open. Runtime contracts live in [Protocol](PROTOCOL.md); this page records why the
|
|
5
|
+
boundaries exist.
|
|
4
6
|
|
|
5
|
-
##
|
|
7
|
+
## Preserve these decisions
|
|
6
8
|
|
|
7
9
|
| Decision | Reason |
|
|
8
10
|
|---|---|
|
|
@@ -24,7 +26,7 @@ Why ACC is shaped the way it is, and what is deliberately still open.
|
|
|
24
26
|
| Node 24 (current production LTS) | Uses `node:test`, modern `fs` promises, and no transpiler. |
|
|
25
27
|
| MCP session from launch config | Never from `initialize` or `clientInfo` — those are attacker-controllable. See the threat scenarios in [SECURITY_MODEL.md](SECURITY_MODEL.md) (scenario 8). |
|
|
26
28
|
|
|
27
|
-
##
|
|
29
|
+
## Avoid these rejected designs
|
|
28
30
|
|
|
29
31
|
| Rejected | Why |
|
|
30
32
|
|---|---|
|
|
@@ -36,6 +38,8 @@ Why ACC is shaped the way it is, and what is deliberately still open.
|
|
|
36
38
|
| Reporting queued messages as delivered | A delivery state that overstates itself is worse than no state. |
|
|
37
39
|
| Guessing file paths out of shell commands | It would block work at random and still miss real writes. See [CAPABILITIES.md](CAPABILITIES.md). |
|
|
38
40
|
|
|
41
|
+
### Reversals backed by failures
|
|
42
|
+
|
|
39
43
|
**Reversed in 0.1.11: removing the client's hook-trust record on uninstall.**
|
|
40
44
|
0.1.9 took Codex's `[hooks.state."<plugin>:…"]` tables out on uninstall,
|
|
41
45
|
reasoning they named a plugin that was gone. The check behind that reasoning
|
|
@@ -72,7 +76,7 @@ declared. Coverage is deliberately partial, and
|
|
|
72
76
|
[CAPABILITIES.md](CAPABILITIES.md) says where it ends: an agent that knows
|
|
73
77
|
where a guard stops behaves better than one that believes it absolute.
|
|
74
78
|
|
|
75
|
-
##
|
|
79
|
+
## Decide these later
|
|
76
80
|
|
|
77
81
|
1. **Storage backend.** The hardened filesystem store ships first. A transactional backend
|
|
78
82
|
can go behind the same interface later — but not merely to avoid a dependency.
|
package/docs/GETTING_STARTED.md
CHANGED
|
@@ -1,145 +1,121 @@
|
|
|
1
1
|
# Getting started
|
|
2
2
|
|
|
3
|
-
ACC
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
the message between windows.
|
|
7
|
-
|
|
8
|
-
```mermaid
|
|
9
|
-
sequenceDiagram
|
|
10
|
-
participant A as First session
|
|
11
|
-
participant ACC
|
|
12
|
-
participant B as Second session
|
|
13
|
-
A->>ACC: durable question
|
|
14
|
-
ACC-->>B: next-turn offer or inbox fallback
|
|
15
|
-
B->>ACC: reply in the same thread
|
|
16
|
-
ACC-->>A: next-turn offer or inbox fallback
|
|
17
|
-
```
|
|
3
|
+
Install ACC, open the AI sessions you already use, and give them related work. Supported
|
|
4
|
+
integrations make peers visible and teach each agent how to communicate. You do not need to
|
|
5
|
+
carry messages between windows or add coordination instructions to your task prompts.
|
|
18
6
|
|
|
19
|
-
## 1. Install once
|
|
7
|
+
## 1. Install once on this machine
|
|
20
8
|
|
|
21
|
-
|
|
9
|
+
ACC requires macOS or Linux and Node.js 24 or newer.
|
|
22
10
|
|
|
23
|
-
<!-- test:command -->
|
|
24
11
|
```bash
|
|
25
|
-
|
|
12
|
+
npm install -g agents-can-communicate
|
|
26
13
|
```
|
|
27
14
|
|
|
28
|
-
|
|
29
|
-
plugin. `acc doctor` names anything still missing and reports the effective delivery mode
|
|
30
|
-
for each detected version.
|
|
31
|
-
|
|
32
|
-
## 2. Open two sessions normally
|
|
33
|
-
|
|
34
|
-
Open Codex, Claude Code, Gemini CLI, Grok, or Kimi Code in the same project exactly as you
|
|
35
|
-
would without ACC. A generic MCP client can participate by running `acc-mcp`. ACC never
|
|
36
|
-
launches or owns either session.
|
|
37
|
-
|
|
38
|
-
In either window:
|
|
39
|
-
|
|
15
|
+
<!-- test:command -->
|
|
40
16
|
```bash
|
|
41
|
-
acc
|
|
17
|
+
acc install
|
|
42
18
|
```
|
|
43
19
|
|
|
44
|
-
The
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
## 3. Publish intent, then claim narrowly
|
|
48
|
-
|
|
49
|
-
Intent is cheap awareness and grants no protection:
|
|
20
|
+
The installer connects only the supported clients it finds. Open a new terminal and
|
|
21
|
+
restart any running clients so they load their integrations. Codex asks you to trust its
|
|
22
|
+
plugin once.
|
|
50
23
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
24
|
+
If you opt into Claude Code's experimental idle delivery, Claude also shows its own
|
|
25
|
+
development-channel warning at every startup. The feature is off by default, can spend
|
|
26
|
+
model tokens, and currently requires Apple Silicon macOS, zsh, and Claude Code 2.1.258 or
|
|
27
|
+
newer. You do not need it for durable messages or supported next-turn delivery.
|
|
55
28
|
|
|
56
|
-
|
|
29
|
+
## 2. Open two sessions and give them ordinary tasks
|
|
57
30
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
--reason "updating receipt rendering"
|
|
61
|
-
```
|
|
31
|
+
Start each client normally in the same project. ACC does not launch, supervise, or assign
|
|
32
|
+
work to either session. For example:
|
|
62
33
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
34
|
+
| Session | Your prompt |
|
|
35
|
+
|---|---|
|
|
36
|
+
| Codex | Add an account-registration endpoint. |
|
|
37
|
+
| Claude Code | Build the account-registration screen. |
|
|
66
38
|
|
|
67
|
-
|
|
39
|
+
Those are complete prompts. The integration tells each agent that peers are present and
|
|
40
|
+
provides the coordination instructions. If an agent notices that the screen depends on the
|
|
41
|
+
endpoint contract, it can identify the peer, ask for the request and response shape, and
|
|
42
|
+
continue with the answer.
|
|
68
43
|
|
|
69
|
-
|
|
44
|
+
The sessions may use different supported clients or two instances of the same client.
|
|
45
|
+
Same-client addresses can be ambiguous when several instances are live; agents use the
|
|
46
|
+
exact participant ids in the roster when needed. See [Concepts](CONCEPTS.md) for participant
|
|
47
|
+
and session identity.
|
|
70
48
|
|
|
71
|
-
|
|
72
|
-
acc message --to models --type question --subject "receipt wording" \
|
|
73
|
-
--body "Should the UI say offered or delivered after the transport accepts bytes?" \
|
|
74
|
-
--client-message-id client_receipt_wording_1
|
|
75
|
-
```
|
|
49
|
+
## 3. Watch for useful coordination
|
|
76
50
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
logical message instead of creating a duplicate.
|
|
51
|
+
Look for an agent discovering a peer, publishing the files it expects to change, noticing a
|
|
52
|
+
shared dependency, asking a focused question, or answering one in the same thread. These
|
|
53
|
+
events appear in the agent's normal activity; the exact presentation depends on the client.
|
|
81
54
|
|
|
82
|
-
|
|
55
|
+
ACC provides awareness and communication tools. It cannot guarantee that a model will
|
|
56
|
+
notice every dependency or coordinate on every task. Each agent decides whether a peer is
|
|
57
|
+
relevant under its own instructions, context, and permissions.
|
|
83
58
|
|
|
84
|
-
|
|
85
|
-
|
|
59
|
+
The commands behind that activity belong to the agents' installed skill. They can publish
|
|
60
|
+
intent, make an advisory or guarded claim, send and reply to messages, acknowledge a thread,
|
|
61
|
+
and leave a handoff. If you want to inspect that interface, use the [CLI reference](CLI.md)
|
|
62
|
+
or follow the interaction through [How ACC works](HOW_IT_WORKS.md).
|
|
86
63
|
|
|
87
|
-
|
|
88
|
-
acc inbox
|
|
89
|
-
acc inbox --message message_x
|
|
90
|
-
acc reply --message message_x \
|
|
91
|
-
--body "Use offered. It proves transport acceptance, not that the model read it."
|
|
92
|
-
```
|
|
64
|
+
## 4. Know when messages arrive
|
|
93
65
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
first session receives the answer through its own next-turn or inbox path; you do not copy
|
|
97
|
-
the peer body between sessions.
|
|
66
|
+
Every message is recorded before ACC attempts faster delivery. Every participant has a
|
|
67
|
+
durable inbox, which is the universal recovery path.
|
|
98
68
|
|
|
99
|
-
|
|
100
|
-
|
|
69
|
+
On exact client versions and platforms with captured support, Codex, Claude Code, Gemini
|
|
70
|
+
CLI, and Kimi Code can receive a message at the next normal turn. That does not wake an idle
|
|
71
|
+
session. Grok, generic MCP clients, unknown versions, and unsupported platforms use the
|
|
72
|
+
durable inbox instead.
|
|
101
73
|
|
|
102
|
-
|
|
74
|
+
Claude Code's optional native channel is the only shipped idle-delivery path. It is
|
|
75
|
+
experimental, never interrupts a turn already in progress, and remains subject to current
|
|
76
|
+
reachability and recipient policy. Codex native live delivery is withdrawn; Codex uses its
|
|
77
|
+
certified next-turn path or inbox. Read [Capabilities](CAPABILITIES.md) for exact versions,
|
|
78
|
+
platforms, and limitations.
|
|
103
79
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
--blocker "waiting for fixture"
|
|
108
|
-
```
|
|
80
|
+
Delivery evidence is deliberately narrow: `queued -> offered -> retrieved -> acknowledged`.
|
|
81
|
+
An offer is not proof that the model read anything, retrieval is not proof of attention, and
|
|
82
|
+
a reply settles the communication obligation rather than proving that work is complete.
|
|
109
83
|
|
|
110
|
-
|
|
111
|
-
presence. It does not close the external client.
|
|
84
|
+
## 5. Keep the workspace boundary clear
|
|
112
85
|
|
|
113
|
-
|
|
86
|
+
ACC is local to the same machine and operating-system user. Git worktrees of one repository
|
|
87
|
+
share an ACC workspace while keeping their separate checkout facts. Git is optional, but
|
|
88
|
+
two unrelated plain folders do not share a workspace merely because people consider them
|
|
89
|
+
the same project.
|
|
114
90
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
adapter result.
|
|
91
|
+
Messages and runtime state live in platform app data outside the repository. ACC never
|
|
92
|
+
collects or shares raw transcripts. An optional `acc.workspace.json` can provide a stable
|
|
93
|
+
workspace id, multiple roots, or project policy; it is user-requested configuration, not
|
|
94
|
+
runtime state. See [Configuration](CONFIGURATION.md) and the
|
|
95
|
+
[non-Git example](https://github.com/automatis-tools/agents-can-communicate/blob/main/examples/non-git-research.md).
|
|
121
96
|
|
|
122
|
-
##
|
|
97
|
+
## Diagnose or remove it
|
|
123
98
|
|
|
124
|
-
|
|
125
|
-
project
|
|
99
|
+
If a peer does not appear or delivery differs from what you expected, run this from the
|
|
100
|
+
project directory:
|
|
126
101
|
|
|
127
102
|
<!-- test:command -->
|
|
128
103
|
```bash
|
|
129
|
-
acc
|
|
104
|
+
acc doctor
|
|
130
105
|
```
|
|
131
106
|
|
|
132
|
-
|
|
133
|
-
|
|
107
|
+
The report names detected clients, installed integrations, exact capability downgrades,
|
|
108
|
+
and the next action. Continue with [Troubleshooting](TROUBLESHOOTING.md).
|
|
134
109
|
|
|
135
|
-
|
|
110
|
+
To remove ACC's integrations:
|
|
136
111
|
|
|
112
|
+
<!-- test:command -->
|
|
137
113
|
```bash
|
|
138
114
|
acc uninstall
|
|
139
115
|
```
|
|
140
116
|
|
|
141
|
-
|
|
142
|
-
|
|
117
|
+
Uninstall removes only bytes ACC wrote that still match its install record. User edits are
|
|
118
|
+
reported and preserved.
|
|
143
119
|
|
|
144
120
|
Next: [Why ACC](WHY_ACC.md) · [Capabilities](CAPABILITIES.md) · [CLI](CLI.md) ·
|
|
145
121
|
[Troubleshooting](TROUBLESHOOTING.md)
|