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.
Files changed (42) hide show
  1. package/README.md +92 -92
  2. package/SECURITY.md +7 -4
  3. package/docs/ADAPTER_AUTHORING.md +26 -22
  4. package/docs/ARCHITECTURE.md +23 -15
  5. package/docs/CAPABILITIES.md +30 -12
  6. package/docs/CLI.md +21 -10
  7. package/docs/CONCEPTS.md +91 -94
  8. package/docs/CONFIGURATION.md +30 -24
  9. package/docs/DESIGN_DECISIONS.md +8 -4
  10. package/docs/GETTING_STARTED.md +76 -100
  11. package/docs/GLOSSARY.md +4 -4
  12. package/docs/HOW_IT_WORKS.md +119 -233
  13. package/docs/MCP.md +8 -8
  14. package/docs/PROTOCOL.md +12 -7
  15. package/docs/RELEASING.md +111 -87
  16. package/docs/SECURITY_MODEL.md +13 -8
  17. package/docs/TROUBLESHOOTING.md +24 -12
  18. package/docs/WHY_ACC.md +18 -16
  19. package/docs/index.md +26 -18
  20. package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
  21. package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +6 -4
  22. package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
  23. package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +5 -3
  24. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
  25. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +5 -3
  26. package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
  27. package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
  28. package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +5 -3
  29. package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
  30. package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +5 -3
  31. package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
  32. package/node_modules/@agents-can-communicate/cli/package.json +1 -1
  33. package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +44 -14
  34. package/node_modules/@agents-can-communicate/core/package.json +1 -1
  35. package/node_modules/@agents-can-communicate/core/src/conversations.mjs +41 -1
  36. package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
  37. package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
  38. package/node_modules/@agents-can-communicate/installer/package.json +4 -2
  39. package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
  40. package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
  41. package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
  42. package/package.json +1 -1
package/docs/CONCEPTS.md CHANGED
@@ -1,134 +1,131 @@
1
1
  # Concepts
2
2
 
3
- ACC connects AI sessions that were independently opened by a user. It adds communication
4
- around those sessions; it does not turn them into one managed runtime. Each client keeps
5
- its own context, permissions, lifecycle, checkout, and human authority.
6
-
7
- ```mermaid
8
- graph LR
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
- Sessions in one workspace may use different models, clients, trust settings, or people.
17
- No participant is automatically in charge of another. A peer may ask, answer, reserve,
18
- acknowledge, or hand off; the receiver evaluates the message under its own instructions.
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 is the middle layer between isolated terminals and a system that owns the agents.
21
- ACC owns durable coordination facts even when every model process is gone, but it never
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
- ## Participant and session
19
+ ## Workspace, participant, and session
25
20
 
26
- A **participant** is the address used for communication. A stable participant id lets a
27
- new session recover messages addressed before restart. A **session** is one current client
28
- conversation with a generation token proving ownership of its mutations. Several sessions
29
- may belong to one participant; a live offer is ambiguous unless exactly one current
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 **workspace** is the local room. Git worktrees of one repository resolve to the same
33
- workspace while retaining their checkout and branch in presence. In a non-Git directory,
34
- the directory itself supplies identity. Git enriches the record but is never required.
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
- ## Intent is awareness; a claim commits
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
- An **intent** says what a session is doing and which resources may be affected. It
39
- authorises nothing. Publish it early because it is cheap:
34
+ ## Presence and intent
40
35
 
41
- ```bash
42
- acc work --summary "changing message rendering" --mode edit \
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
- A **claim** reserves a resource for a lease. It is narrow, explicit, and either
47
- `advisory` or `guarded`:
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 claim --resource 'file:packages/cli/**' --reason "changing message rendering"
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
- `guarded` means every live session exposes a measured pre-write guard for the path ACC can
54
- recognise. It never means an unrelated process or a runtime-generated write is impossible.
55
- If any live participant cannot be stopped, workspace protection is reported as
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
- File claims are repository-relative and canonical. `file:src/a.mjs` names a file;
59
- `file:src/**` names a directory tree. Ambiguous spellings such as `file:src/*` are refused
60
- instead of creating protection that covers nothing.
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 are durable untrusted data
65
+ ## Messages and obligations
63
66
 
64
- The message kinds are `note`, `question`, `request`, `answer`, `decision`, and `handoff`.
65
- The generic send command creates the first four except `answer`, which requires `reply`,
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
- An independent **obligation** says what the recipient owes:
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
- | Kind | Obligation |
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
- A request is not an order. It asks for action and a result in the thread, but ACC does not
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
- ## Threads have no hidden status
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
- The first message is the thread root and uses its own `messageId` as `threadId`. A reply
87
- keeps that thread id and names the original with `inReplyTo`. There is no mutable thread
88
- record. What still needs attention is derived from message obligations and per-recipient
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 an independent monotonic receipt:
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 durably;
103
- - `offered`: bytes crossed ACC's transport boundary or a certified native client accepted
104
- the call;
105
- - `retrieved`: the participant explicitly read the message through inbox or equivalent
106
- certified evidence;
107
- - `acknowledged`: the participant acknowledged it or replied.
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
- There is no `seen`: ACC cannot observe model attention. There is no terminal delivery
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
- ## Durable first, acceleration second
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
- Every send records the message before attempting a transport. Inbox is the universal
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
- No shipped adapter currently passes live-push certification. Codex 0.152.0 had no daemon
122
- control socket; Claude Code 2.1.252 stopped at the development-channel warning before its
123
- ACC child started. Those failures are shipped as evidence and result in visible fallback,
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 state lives
123
+ ## Where data lives
127
124
 
128
- Presence, intents, claims, messages, receipts, events, and handoffs live in platform app
129
- data outside every repository. Raw transcripts remain in the client. A single session is
130
- silent; durable workspace state materialises when a second session or the first durable
131
- coordination object makes it necessary.
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) · [Protocol](PROTOCOL.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)
@@ -1,18 +1,21 @@
1
1
  # Configuration
2
2
 
3
- ACC works with no configuration at all. A workspace is identified by its Git common
4
- directory when there is one and by the directory itself otherwise. Independently opened
5
- sessions can communicate without adding runtime state to the project.
6
-
7
- `acc.workspace.json` is only for stable workspace identity, roots, and shared claim/context
8
- policy. It never defines agents, messages, execution state, or delivery endpoints. Project
9
- map: [README](index.md). Terms used below: [Glossary](GLOSSARY.md).
10
-
11
- ## When you need a config
12
-
13
- - **Identity that survives a move.** Without a config, the same project checked out at two
14
- paths is two workspaces, and two people whose clones sit in different directories do not
15
- see each other. `workspaceId` fixes that, and it is the usual reason this file exists.
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
- ### The file
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
- ### What it must never contain
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
- ### Writing one while sessions are running
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
- ### Commands
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
- ## Delivery policy is not project policy
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: when the detected exact client
122
- version lacks passing live-push evidence, installation keeps the effective policy `off`
123
- and reports durable next-turn or inbox fallback. No shipped adapter currently qualifies
124
- for native live push.
125
-
126
- ## Environment
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
@@ -1,8 +1,10 @@
1
1
  # Design decisions
2
2
 
3
- Why ACC is shaped the way it is, and what is deliberately still open.
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
- ## Settled
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
- ## Rejected, and why
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
- ## Still open
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.
@@ -1,145 +1,121 @@
1
1
  # Getting started
2
2
 
3
- ACC begins with two AI sessions that you open yourself. It does not create a team or choose
4
- which model does what. The first useful run is a question that travels from one session to
5
- the other, receives a reply in the same thread, and is acknowledged without you copying
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 per machine
7
+ ## 1. Install once on this machine
20
8
 
21
- Install the package, then let ACC wire only the clients it detects:
9
+ ACC requires macOS or Linux and Node.js 24 or newer.
22
10
 
23
- <!-- test:command -->
24
11
  ```bash
25
- acc install
12
+ npm install -g agents-can-communicate
26
13
  ```
27
14
 
28
- Restart those clients because hooks load at startup. Codex also asks you to trust the
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 status
17
+ acc install
42
18
  ```
43
19
 
44
- The roster gives the participant ids used by `--to`. If it shows only one session, fix the
45
- second client's installation or workspace path before testing communication.
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
- ```bash
52
- acc work --summary "updating receipt rendering" --mode edit \
53
- --hint 'file:packages/cli/src/main.mjs'
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
- Reserve only what the session is about to change:
29
+ ## 2. Open two sessions and give them ordinary tasks
57
30
 
58
- ```bash
59
- acc claim --resource 'file:packages/cli/src/main.mjs' \
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
- Exit code `5` means an overlapping live claim exists. Ask its owner or narrow the edit;
64
- do not silently work around it. A claim can be `guarded` only where the client exposes a
65
- certified write guard. Otherwise it remains useful but `advisory`.
34
+ | Session | Your prompt |
35
+ |---|---|
36
+ | Codex | Add an account-registration endpoint. |
37
+ | Claude Code | Build the account-registration screen. |
66
38
 
67
- ## 4. Send a real question
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
- From the first session, address a participant listed by `acc status`:
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
- ```bash
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
- The output starts with `recorded message_x`. That is the durable guarantee. Any following
78
- delivery diagnostic is acceleration, not the source of truth. Reuse the explicit
79
- `client_receipt_wording_1` key when retrying after an uncertain result; it returns the same
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
- ## 5. Read and reply from the second session
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
- A certified hook may offer the question on the recipient's next normal turn. Grok, MCP,
85
- unknown versions, and any missed projection use the same durable recovery path:
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
- ```bash
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
- `reply` creates an `answer` in the original thread and acknowledges the recipient's
95
- receipt for the question atomically. It does not mark the requested work complete. The
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
- Use `acc ack --message message_x` only when the message asks for acknowledgement and no
100
- written reply is needed.
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
- ## 6. Hand off while context still exists
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
- ```bash
105
- acc finish --goal "update receipt rendering" --status partial \
106
- --completed "CLI wording changed" --remaining "MCP docs" \
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
- `finish` records a structured handoff, releases that ACC session's claims, and ends its ACC
111
- presence. It does not close the external client.
84
+ ## 5. Keep the workspace boundary clear
112
85
 
113
- ## Delivery expectations
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
- Durable inbox delivery works for every participant. Certified next-turn delivery currently
116
- exists only for exact captured versions of Codex, Claude Code, Gemini CLI, and Kimi Code.
117
- Grok and generic MCP poll. No current adapter has certified native live push. Although
118
- `acc install --delivery off|actionable|all` defines recipient policy, unsupported or
119
- uncertified clients keep effective policy `off` and report their fallback beside the
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
- ## Optional workspace configuration
97
+ ## Diagnose or remove it
123
98
 
124
- No file is required. Use one only for a stable shared workspace id, multiple roots, or
125
- project policy:
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 config validate
104
+ acc doctor
130
105
  ```
131
106
 
132
- See [Configuration](CONFIGURATION.md) before writing it. Runtime messages and sessions
133
- never belong in that committed file.
107
+ The report names detected clients, installed integrations, exact capability downgrades,
108
+ and the next action. Continue with [Troubleshooting](TROUBLESHOOTING.md).
134
109
 
135
- ## Uninstall
110
+ To remove ACC's integrations:
136
111
 
112
+ <!-- test:command -->
137
113
  ```bash
138
114
  acc uninstall
139
115
  ```
140
116
 
141
- ACC removes only installation bytes that still match what it wrote. User-modified client
142
- settings remain in place.
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)