agents-can-communicate 0.3.1 → 0.4.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 +95 -52
- package/SECURITY.md +1 -1
- package/bin/acc-bootstrap.mjs +5 -54
- package/bin/acc-claude-channel.mjs +8 -175
- package/bin/acc-hook.mjs +4 -133
- package/bin/acc-mcp.mjs +4 -59
- package/bin/acc-update-worker.mjs +8 -0
- package/bin/acc.mjs +5 -39
- package/bin/entrypoints/acc-bootstrap.mjs +47 -0
- package/bin/entrypoints/acc-claude-channel.mjs +149 -0
- package/bin/entrypoints/acc-hook.mjs +58 -0
- package/bin/entrypoints/acc-mcp.mjs +70 -0
- package/bin/entrypoints/acc.mjs +51 -0
- package/bin/entrypoints/claude-channel-stdio.mjs +29 -0
- package/bin/entrypoints/hook-output.mjs +77 -0
- package/docs/ADAPTER_AUTHORING.md +52 -8
- package/docs/ARCHITECTURE.md +64 -11
- package/docs/CAPABILITIES.md +41 -37
- package/docs/CLI.md +145 -25
- package/docs/CONCEPTS.md +13 -6
- package/docs/CONFIGURATION.md +37 -22
- package/docs/DESIGN_DECISIONS.md +16 -11
- package/docs/GETTING_STARTED.md +41 -7
- package/docs/GLOSSARY.md +9 -3
- package/docs/HOW_IT_WORKS.md +32 -11
- package/docs/MCP.md +91 -24
- package/docs/PROTOCOL.md +69 -12
- package/docs/RELEASING.md +28 -10
- package/docs/SECURITY_MODEL.md +47 -13
- package/docs/TROUBLESHOOTING.md +102 -20
- package/docs/UPGRADING.md +154 -0
- package/docs/WHY_ACC.md +5 -4
- package/docs/index.md +8 -0
- 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 +106 -5
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +6 -6
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/native-delivery.mjs +2 -1
- package/node_modules/@agents-can-communicate/adapter-codex/certification.json +38 -13
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/certification-provenance.json +220 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-current-binding-product-evidence.json +1549 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-current-binding-product.json +27 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-product-evidence.json +1549 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-product.json +27 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-transport-evidence.json +259 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-local-daemon-transport.json +21 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-current-binding-product-evidence.json +1549 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-current-binding-product.json +27 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-product-evidence.json +1549 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-product.json +27 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-transport-evidence.json +259 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.153.4-local-daemon-transport.json +21 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +14 -2
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +106 -5
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +26 -44
- package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +70 -17
- package/node_modules/@agents-can-communicate/adapter-codex/src/config-block.mjs +231 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/hooks.mjs +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/src/install.mjs +71 -63
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +107 -103
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-endpoint.mjs +96 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +3 -2
- 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 +106 -5
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/install.mjs +2 -2
- 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 +122 -8
- package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +5 -3
- package/node_modules/@agents-can-communicate/adapter-grok/src/hooks.mjs +9 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/install.mjs +2 -2
- 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 +106 -5
- package/node_modules/@agents-can-communicate/adapter-kimi/src/hooks.mjs +1 -1
- package/node_modules/@agents-can-communicate/adapter-kimi/src/install.mjs +2 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +5 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/context-projector.mjs +26 -4
- package/node_modules/@agents-can-communicate/adapter-sdk/src/decision-text.mjs +19 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +5 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +9 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +2 -6
- package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +29 -9
- package/node_modules/@agents-can-communicate/adapter-sdk/src/toml-block.mjs +8 -6
- package/node_modules/@agents-can-communicate/cli/package.json +4 -2
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +49 -22
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +11 -4
- package/node_modules/@agents-can-communicate/cli/src/git-probe.mjs +9 -3
- package/node_modules/@agents-can-communicate/cli/src/help.mjs +109 -14
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +24 -5
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +35 -12
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/activation.mjs +110 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/command.mjs +64 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/download.mjs +71 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +110 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/generation.mjs +167 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/install.mjs +78 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +60 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/leases.mjs +60 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/location.mjs +55 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/mutex.mjs +145 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/policy.mjs +4 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/refresh.mjs +40 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/schedule.mjs +21 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/state.mjs +123 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/worker.mjs +65 -0
- package/node_modules/@agents-can-communicate/cli/src/runtime-paths.mjs +1 -1
- package/node_modules/@agents-can-communicate/cli/src/session-owner.mjs +33 -108
- package/node_modules/@agents-can-communicate/cli/src/update-command.mjs +25 -7
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/attention.mjs +3 -0
- package/node_modules/@agents-can-communicate/core/src/claims.mjs +13 -8
- package/node_modules/@agents-can-communicate/core/src/conversations.mjs +9 -25
- package/node_modules/@agents-can-communicate/core/src/decision-changes.mjs +36 -0
- package/node_modules/@agents-can-communicate/core/src/decision-state.mjs +42 -0
- package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +11 -4
- package/node_modules/@agents-can-communicate/core/src/inbox.mjs +48 -17
- package/node_modules/@agents-can-communicate/core/src/intents.mjs +35 -15
- package/node_modules/@agents-can-communicate/core/src/materialisation.mjs +7 -5
- package/node_modules/@agents-can-communicate/core/src/message-pages.mjs +75 -0
- package/node_modules/@agents-can-communicate/core/src/next-turn-delivery.mjs +31 -0
- package/node_modules/@agents-can-communicate/core/src/session-opening.mjs +128 -0
- package/node_modules/@agents-can-communicate/core/src/sessions.mjs +58 -132
- package/node_modules/@agents-can-communicate/core/src/sync.mjs +31 -2
- package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
- package/node_modules/@agents-can-communicate/delivery-router/src/refresh-binding.mjs +38 -0
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +86 -10
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/client-version.mjs +1 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/native-binding.mjs +6 -4
- package/node_modules/@agents-can-communicate/hook-runner/src/native-retirement.mjs +48 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/owner-context.mjs +30 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/process-table.mjs +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +172 -67
- package/node_modules/@agents-can-communicate/hook-runner/src/session-lifecycle.mjs +13 -0
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +17 -2
- package/node_modules/@agents-can-communicate/installer/src/bootstrap-runtime.mjs +11 -5
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +1 -1
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/installer/src/live-policy.mjs +21 -0
- package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +20 -6
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +10 -4
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +3 -3
- package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
- package/node_modules/@agents-can-communicate/mcp-server/src/protocol.mjs +85 -0
- package/node_modules/@agents-can-communicate/mcp-server/src/resources.mjs +3 -2
- package/node_modules/@agents-can-communicate/mcp-server/src/server.mjs +59 -57
- package/node_modules/@agents-can-communicate/mcp-server/src/tools.mjs +47 -33
- package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/conversations.mjs +3 -0
- package/node_modules/@agents-can-communicate/protocol/src/decision-changes.mjs +15 -0
- package/node_modules/@agents-can-communicate/protocol/src/index.mjs +3 -1
- package/node_modules/@agents-can-communicate/protocol/src/schema.mjs +14 -5
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +5 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/deadline.mjs +7 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/index.mjs +2 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/session-read.mjs +25 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +28 -25
- package/package.json +2 -1
package/docs/CONCEPTS.md
CHANGED
|
@@ -79,6 +79,12 @@ Message kinds describe the conversation:
|
|
|
79
79
|
An **obligation** is the communication response owed by a recipient. A request is not an
|
|
80
80
|
order, and a reply is not proof that work is complete.
|
|
81
81
|
|
|
82
|
+
A decision can explicitly replace or withdraw earlier decisions. The old records stay
|
|
83
|
+
attributed and recoverable, while current reads and reminders follow the recorded links.
|
|
84
|
+
Any peer may record a change; competing branches remain visible until explicitly joined.
|
|
85
|
+
A current decision is a recorded position, not agreement or authority. See
|
|
86
|
+
[decision lifecycle](PROTOCOL.md#decision-lifecycle).
|
|
87
|
+
|
|
82
88
|
## Threads keep the exchange together
|
|
83
89
|
|
|
84
90
|
The first message is a **thread** root. A reply names the original message and stays in that
|
|
@@ -100,19 +106,20 @@ queued -> offered -> retrieved -> acknowledged
|
|
|
100
106
|
|
|
101
107
|
- `queued`: the durable message and receipt committed;
|
|
102
108
|
- `offered`: ACC or a certified client accepted the delivery bytes, not proof of reading;
|
|
103
|
-
- `retrieved`: the participant fetched the
|
|
109
|
+
- `retrieved`: the participant fetched the body through its inbox, not proof of model attention;
|
|
104
110
|
- `acknowledged`: the participant acknowledged it or replied, not proof of task completion.
|
|
105
111
|
|
|
112
|
+
Listing inbox headers and observing workspace history do not change receipts.
|
|
106
113
|
There is no `seen` receipt. A failed delivery attempt leaves the message queued and
|
|
107
114
|
recoverable rather than creating a terminal failure state.
|
|
108
115
|
|
|
109
116
|
## Durable first, faster delivery second
|
|
110
117
|
|
|
111
|
-
The durable inbox is universal. Exact-version certified adapters may also offer
|
|
112
|
-
the next normal turn.
|
|
113
|
-
experimental live
|
|
114
|
-
reachability
|
|
115
|
-
current
|
|
118
|
+
The durable inbox is universal. Exact-version certified adapters may also offer
|
|
119
|
+
messages at the next normal turn. Codex LocalDaemon and Claude Code Channel add
|
|
120
|
+
experimental live delivery, off by default and subject to recipient policy and
|
|
121
|
+
current reachability. Codex can retain an eligible daemon thread after its terminal
|
|
122
|
+
exits. [Capabilities](CAPABILITIES.md) gives the current limits.
|
|
116
123
|
|
|
117
124
|
## Handoffs preserve explicit context
|
|
118
125
|
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -6,7 +6,7 @@ as the same operating-system user on the same machine and resolve that same loca
|
|
|
6
6
|
workspace.
|
|
7
7
|
|
|
8
8
|
Create `acc.workspace.json` only for stable workspace identity, roots, or shared
|
|
9
|
-
|
|
9
|
+
context budget. It is optional project configuration that `acc config init` may write
|
|
10
10
|
at your request; runtime state remains in platform app data outside the repository. The
|
|
11
11
|
file never defines agents, messages, execution state, or delivery endpoints. Project map:
|
|
12
12
|
[README](index.md). Terms used below: [Glossary](GLOSSARY.md).
|
|
@@ -18,11 +18,8 @@ file never defines agents, messages, execution state, or delivery endpoints. Pro
|
|
|
18
18
|
Matching ids never connect different machines or OS users.
|
|
19
19
|
- **More than one root.** A monorepo whose apps live in separate directories, or a
|
|
20
20
|
workspace that spans sibling checkouts.
|
|
21
|
-
- **Shared
|
|
22
|
-
|
|
23
|
-
- **Stated expectations.** `requiredAdapters` records which harnesses this project expects
|
|
24
|
-
to be installed, so `acc doctor` can say what is missing rather than leaving a session
|
|
25
|
-
silently uncoordinated.
|
|
21
|
+
- **Shared context budget.** Set the ceiling for supported injected turn context once for
|
|
22
|
+
the workspace.
|
|
26
23
|
|
|
27
24
|
### Define the file
|
|
28
25
|
|
|
@@ -39,10 +36,8 @@ link can point anywhere, including at a file the repository does not control.
|
|
|
39
36
|
"displayName": "Example",
|
|
40
37
|
"roots": ["."],
|
|
41
38
|
"policy": {
|
|
42
|
-
"claimMode": "advisory",
|
|
43
39
|
"contextBudgetBytes": 6000
|
|
44
|
-
}
|
|
45
|
-
"requiredAdapters": []
|
|
40
|
+
}
|
|
46
41
|
}
|
|
47
42
|
```
|
|
48
43
|
|
|
@@ -52,11 +47,16 @@ link can point anywhere, including at a file the repository does not control.
|
|
|
52
47
|
| `workspaceId` | Stable identity, portable id | required |
|
|
53
48
|
| `displayName` | What peers see in a roster | the directory name |
|
|
54
49
|
| `roots` | Directories in this workspace, relative to the config | `["."]` |
|
|
55
|
-
| `policy.claimMode` | `advisory` or `guarded` | `advisory` |
|
|
50
|
+
| `policy.claimMode` | Validated compatibility metadata (`advisory` or `guarded`); does not select claim enforcement | `advisory` |
|
|
56
51
|
| `policy.contextBudgetBytes` | Ceiling on injected turn context, 1–64000 | `6000` |
|
|
57
|
-
| `requiredAdapters` |
|
|
52
|
+
| `requiredAdapters` | Validated compatibility metadata; does not affect `acc doctor` diagnostics | `[]` |
|
|
58
53
|
| `extensions` | Anything else, namespaced by whoever wrote it | `{}` |
|
|
59
54
|
|
|
55
|
+
`policy.claimMode` and `requiredAdapters` are stored but have no claim or doctor effect in
|
|
56
|
+
0.4. CLI claims default to advisory; request `--enforcement guarded` on each claim when
|
|
57
|
+
appropriate, subject to every live participant's certified guard. MCP claims remain
|
|
58
|
+
advisory. Do not use these metadata fields to configure protection or missing-client checks.
|
|
59
|
+
|
|
60
60
|
Roots are refused if they are absolute or escape the workspace. An absolute root is one
|
|
61
61
|
machine's layout committed to a shared repository, and `packages/../../elsewhere` reaches
|
|
62
62
|
outside the boundary the workspace is supposed to be. The check counts path segments, so an
|
|
@@ -98,17 +98,25 @@ Close them, or pass `--force` if you mean it — and restart them afterwards.
|
|
|
98
98
|
<!-- test:illustration asks a person to confirm; there is nobody to ask in a test -->
|
|
99
99
|
```bash
|
|
100
100
|
acc config init # preview, then write after you agree
|
|
101
|
-
acc config validate # read-only;
|
|
101
|
+
acc config validate # read-only; checks acc.workspace.json in the selected directory
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
`init` and `validate` operate only on `acc.workspace.json` directly inside the selected
|
|
105
|
+
`--cwd` directory (the current directory when omitted). Unlike ordinary workspace discovery,
|
|
106
|
+
they do not walk upward. Pass `--cwd` with the directory containing the config you intend
|
|
107
|
+
to inspect or create. A nested `init` can create a new config that shadows an ancestor;
|
|
108
|
+
check the ancestor first.
|
|
109
|
+
|
|
104
110
|
`init` shows the exact file it would write and waits. In a non-interactive run — a pipe, a
|
|
105
111
|
CI job, an agent — there is nobody to ask, so it refuses unless you pass `--yes`. It never
|
|
106
112
|
overwrites an existing config: a committed identity is shared by everyone on the project,
|
|
107
113
|
and replacing it on a mistyped command would split one workspace into two.
|
|
108
114
|
|
|
109
|
-
`validate` only reads.
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
`validate` only reads. If that selected directory has no config, it reports
|
|
116
|
+
`no acc.workspace.json in selected directory; ancestors not checked`.
|
|
117
|
+
The JSON result returns default config metadata for that missing local file. Ordinary
|
|
118
|
+
commands may still discover an ancestor config; this is not an effective-policy report.
|
|
119
|
+
Run validation with `--cwd` set to that ancestor directory to check its file.
|
|
112
120
|
|
|
113
121
|
## Keep delivery consent user-owned
|
|
114
122
|
|
|
@@ -129,6 +137,13 @@ reports next-turn or inbox fallback. Each later session must also pass its own
|
|
|
129
137
|
generation-bound handshake. A failed session handshake clears or refuses that binding and
|
|
130
138
|
reports degraded reachability; it does not rewrite the installed consent.
|
|
131
139
|
|
|
140
|
+
Codex LocalDaemon delivery separately requires macOS arm64, Codex 0.152.1 or newer, a
|
|
141
|
+
current feature probe, and exact thread, canonical cwd, process, version and protocol
|
|
142
|
+
checks. Its daemon must already be running; ACC never starts or stops it. Codex reads
|
|
143
|
+
consent from the installation record, not a shell-shim variable. Unavailable or ineligible
|
|
144
|
+
sessions retain durable inbox fallback. Use `acc install --adapter codex --delivery off`
|
|
145
|
+
to stop new native offers; bypassing a shim does not disable that recorded opt-in.
|
|
146
|
+
|
|
132
147
|
## Override local paths and identity
|
|
133
148
|
|
|
134
149
|
Nothing in `acc.workspace.json` says where state is stored, and nothing there can — that is
|
|
@@ -137,17 +152,17 @@ that resolves inside a workspace.
|
|
|
137
152
|
|
|
138
153
|
| Variable | Purpose |
|
|
139
154
|
|---|---|
|
|
140
|
-
| `ACC_DATA_HOME` |
|
|
141
|
-
| `ACC_CONFIG_HOME` |
|
|
142
|
-
| `ACC_CACHE_HOME` |
|
|
155
|
+
| `ACC_DATA_HOME` | Base directory under which ACC creates `acc/` for runtime and coordination state. Defaults: `~/Library/Application Support` on macOS; `~/.local/share` on Linux, or `XDG_DATA_HOME` |
|
|
156
|
+
| `ACC_CONFIG_HOME` | Parsed and validated path override; no current configuration-storage consumer |
|
|
157
|
+
| `ACC_CACHE_HOME` | Parsed and validated path override; no current cache-storage consumer |
|
|
143
158
|
| `ACC_PARTICIPANT` | Which participant a session belongs to, when the client does not say |
|
|
144
159
|
| `ACC_WORKSPACE_ROOT` | The project to work in, instead of discovering one from the working directory. Absolute, or it is refused |
|
|
145
|
-
| `ACC_SESSION` · `ACC_GENERATION` |
|
|
160
|
+
| `ACC_SESSION` · `ACC_GENERATION` | Explicit CLI owner credentials, supplied together by the operator for this session. Hooks do not set them. A public session ID alone never resolves a generation; see [CLI ownership](CLI.md#coordinate-from-a-session) |
|
|
146
161
|
| `ACC_MCP_PARTICIPANT` | Who `acc-mcp` takes part as. `mcp` by default |
|
|
147
162
|
| `ACC_MCP_WORKSPACE` | The project `acc-mcp` joins. Without it the server takes the directory the client launched it in, which is rarely the project |
|
|
148
|
-
| `ACC_NO_UPDATE_CHECK=1` |
|
|
163
|
+
| `ACC_NO_UPDATE_CHECK=1` | Disables update networking and background scheduling; manual recovery of an already downloaded update remains available |
|
|
149
164
|
| `ACC_PROBE_TIMEOUT_MS` | How long to wait for a client to print its version. Three seconds by default: generous on an idle machine, and not always enough on a busy one, where a client that overruns it is reported as not installed |
|
|
150
|
-
| `ACC_NATIVE_DELIVERY_POLICY` |
|
|
151
|
-
| `ACC_BYPASS=1` |
|
|
165
|
+
| `ACC_NATIVE_DELIVERY_POLICY` | Owned shell-bootstrap consent, currently used by Claude Code. The shim sets `off`, `actionable`, or `all`; missing/invalid values mean off for that route. Codex instead reads recorded installation consent, even when this variable is absent |
|
|
166
|
+
| `ACC_BYPASS=1` | Bypasses owned shell activation, currently Claude Code: no bootstrap check/native flags, and shim policy is unset. It does not disable Codex recorded opt-in; use `acc install --adapter codex --delivery off` for new Codex offers |
|
|
152
167
|
| `ACC_BOOTSTRAP_DEBUG=1` | Lets the internal `acc-bootstrap` check write one safe diagnostic line to stderr. Off, it is silent, and it never writes to stdout |
|
|
153
168
|
| `CODEX_HOME` | Codex's own home, honoured when locating the Codex App Server daemon's control socket for native delivery. Codex sets it; ACC only reads it |
|
package/docs/DESIGN_DECISIONS.md
CHANGED
|
@@ -18,12 +18,15 @@ boundaries exist.
|
|
|
18
18
|
| Runtime state outside the repository | A checkout can be deleted, cloned, or synced; presence and locks must not travel with it. |
|
|
19
19
|
| Project config optional and runtime-free | A committed file is editable by anyone with a PR, so it may carry policy — never sessions or tokens. |
|
|
20
20
|
| Durable state is authoritative | Next-turn or live delivery may accelerate an interaction; neither becomes the source of truth. |
|
|
21
|
+
| Bounded discovery, explicit history recovery | Automatic context stays small; peers select exact messages or historical records when they need full bodies. |
|
|
22
|
+
| Immutable explicit decision links | Replacements and withdrawals preserve prior records and expose competing branches without choosing by timestamp. |
|
|
23
|
+
| Fence managed runtime activation | Refresh all integrations before switching the active generation; partial refresh stays fenced until forward recovery completes. |
|
|
21
24
|
| No heartbeat helper in v1 | An idle session is honestly reported `stale`. A sidecar process to fake liveness is worse than the truth. |
|
|
22
25
|
| Presence reads the process, never writes the record | A pid answers "gone" at once; an age floor covers what a pid cannot, including its own reuse. Nothing is written back — no session has authority to edit another's record. This checks a process already there, not one beating on a session's behalf like the heartbeat helper above. |
|
|
23
|
-
| No
|
|
26
|
+
| No AI client or session launching | ACC attaches to sessions you already own; its separate update worker manages ACC packages, not those sessions. |
|
|
24
27
|
| One publishable package | One version and one release rather than twelve coordinated ones. |
|
|
25
28
|
| MIT | Widest reuse, least friction. |
|
|
26
|
-
| Node 24
|
|
29
|
+
| Node 24 or newer required | Uses `node:test`, modern `fs` promises, and no transpiler. |
|
|
27
30
|
| 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). |
|
|
28
31
|
|
|
29
32
|
## Avoid these rejected designs
|
|
@@ -32,7 +35,7 @@ boundaries exist.
|
|
|
32
35
|
|---|---|
|
|
33
36
|
| A file in each repo that agents poll | No guard, no identity, no atomicity — and it ends up committed. |
|
|
34
37
|
| A permanent global lead session | Turns peers into workers and makes one crash fatal. |
|
|
35
|
-
| Treating MCP as
|
|
38
|
+
| Treating MCP as an external-client lifecycle guarantee | Tool calls resolve MCP's own participant, but cannot infer the client's lifecycle, intercept writes, or wake its receiver. |
|
|
36
39
|
| Requiring Git, tmux, PostgreSQL, or a service | Every requirement is a reason the tool is not installed. |
|
|
37
40
|
| Collecting or sharing raw transcripts | Raw transcripts are never collected or shared. Explicit peer messages are bounded records the sender chose to address. |
|
|
38
41
|
| Reporting queued messages as delivered | A delivery state that overstates itself is worse than no state. |
|
|
@@ -47,16 +50,18 @@ perturbed the record instead of removing it — a hook whose recorded hash no
|
|
|
47
50
|
longer matched was still observed running, so absence was never actually
|
|
48
51
|
tested.
|
|
49
52
|
|
|
50
|
-
Absence
|
|
51
|
-
|
|
52
|
-
write guard
|
|
53
|
-
both
|
|
53
|
+
Absence was sufficient to disable the hooks in that historical capture. With no
|
|
54
|
+
record, that client ran no hook, printed `hook: SessionStart Completed` while
|
|
55
|
+
executing nothing, and ACC's write guard went silently off — while `acc doctor`
|
|
56
|
+
and `codex plugin list` both reported it enabled. A shell write walked through a
|
|
54
57
|
guarded claim; writing the exact same hashes back (captured before deletion,
|
|
55
58
|
from an ACC three releases older) revived the guard immediately.
|
|
56
59
|
|
|
57
|
-
That is why removal is never ACC's to do:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
That is why removal is never ACC's to do: it preserves the client's trust decision.
|
|
61
|
+
The historical observation above does not establish trust across arbitrary upgrades.
|
|
62
|
+
Codex 0.153.4 compares each current definition's hash and reports changed definitions
|
|
63
|
+
as modified; a trusted hook can also be disabled. ACC preserves the records but leaves
|
|
64
|
+
current readiness unverified, directing the user to `/hooks` in Codex.
|
|
60
65
|
|
|
61
66
|
**The generalisation, since this cost a release:** to learn whether state is
|
|
62
67
|
load-bearing, take it away. Changing it tests something else.
|
|
@@ -81,7 +86,7 @@ where a guard stops behaves better than one that believes it absolute.
|
|
|
81
86
|
1. **Storage backend.** The hardened filesystem store ships first. A transactional backend
|
|
82
87
|
can go behind the same interface later — but not merely to avoid a dependency.
|
|
83
88
|
2. **Remote coordination.** v2, or a separate product.
|
|
84
|
-
3. **
|
|
89
|
+
3. **AI client/session launching.** Possibly never; possibly an external integration.
|
|
85
90
|
4. **Multi-root discovery rules** beyond the current `roots` list.
|
|
86
91
|
5. **Default claim lease length** for hook-only adapters. A hook-only session cannot sustain
|
|
87
92
|
a short renewal cadence, so lease policy must not assume one.
|
package/docs/GETTING_STARTED.md
CHANGED
|
@@ -4,10 +4,20 @@ Install ACC, open the AI sessions you already use, and give them related work. S
|
|
|
4
4
|
integrations make peers visible and teach each agent how to communicate. You do not need to
|
|
5
5
|
carry messages between windows or add coordination instructions to your task prompts.
|
|
6
6
|
|
|
7
|
+
Active hooks can supply each agent's own CLI arguments; the installed skill tells the
|
|
8
|
+
agent how to use them. This path was observed in Claude Code 2.1.263, Codex 0.153.4, and
|
|
9
|
+
Grok 1.0.24. Grok receives its own header after a terminal result, so its skill runs public
|
|
10
|
+
status first; peer messages still require explicit inbox reads. Hooks must be enabled and
|
|
11
|
+
trusted by the client. Without that owner context, owned operations require an explicit
|
|
12
|
+
pair or session-bound ACC MCP tools. See [CLI ownership](CLI.md#coordinate-from-a-session).
|
|
13
|
+
|
|
7
14
|
## 1. Install once on this machine
|
|
8
15
|
|
|
9
16
|
ACC requires macOS or Linux and Node.js 24 or newer.
|
|
10
17
|
|
|
18
|
+
Already using ACC? Follow the [upgrade guide](UPGRADING.md) for the 0.4.0 → 0.4.1
|
|
19
|
+
update or the data-format boundary when upgrading from 0.3.1.
|
|
20
|
+
|
|
11
21
|
```bash
|
|
12
22
|
npm install -g agents-can-communicate
|
|
13
23
|
```
|
|
@@ -17,9 +27,22 @@ npm install -g agents-can-communicate
|
|
|
17
27
|
acc install
|
|
18
28
|
```
|
|
19
29
|
|
|
30
|
+
Initial installation also enables automatic updates; reinstalling keeps an explicit opt-out.
|
|
31
|
+
ACC downloads releases in the background and
|
|
32
|
+
refreshes its runtime and skills when active clients have left. Use `acc update` for an
|
|
33
|
+
immediate update, or `acc update --auto off` to disable background updates. See
|
|
34
|
+
[update controls](UPGRADING.md#automatic-updates-after-installation).
|
|
35
|
+
|
|
20
36
|
The installer connects only the supported clients it finds. Open a new terminal and
|
|
21
|
-
restart any running clients so they load their integrations.
|
|
22
|
-
|
|
37
|
+
restart any running clients so they load their integrations. Follow the activation steps
|
|
38
|
+
printed by the installer. In Codex, use `/plugins` to check ACC is enabled, then `/hooks`
|
|
39
|
+
to review each ACC hook and enable/trust its current definition if needed. Restart the
|
|
40
|
+
session after that review; changed hook definitions may require trust again.
|
|
41
|
+
|
|
42
|
+
If the installer preserved your existing Codex sandbox settings, verify the named ACC
|
|
43
|
+
state directory is in `sandbox_workspace_write.writable_roots` in the config it identifies.
|
|
44
|
+
ACC keeps those user settings unchanged. Installed files alone do not establish that hooks
|
|
45
|
+
are active; `acc doctor` leaves current readiness unverified and directs you to Codex.
|
|
23
46
|
|
|
24
47
|
If you opt into Claude Code's experimental idle delivery, Claude also shows its own
|
|
25
48
|
development-channel warning at every startup. The feature is off by default, can spend
|
|
@@ -46,6 +69,16 @@ Same-client addresses can be ambiguous when several instances are live; agents u
|
|
|
46
69
|
exact participant ids in the roster when needed. See [Concepts](CONCEPTS.md) for participant
|
|
47
70
|
and session identity.
|
|
48
71
|
|
|
72
|
+
A second repeatable pattern is review and handoff. Ask the implementing agent to request
|
|
73
|
+
review of an identified revision (a commit when Git is available, or named files and
|
|
74
|
+
version otherwise) and wait for the verdict. Ask the reviewer to return blocking defects
|
|
75
|
+
or approval. If either session must stop, it can leave a durable handoff naming completed
|
|
76
|
+
work, remaining work, and blockers. A later session can recover it from history. The
|
|
77
|
+
underlying commands are [`acc request`](CLI.md#messages-and-requests), exact
|
|
78
|
+
[`acc inbox --message`](CLI.md#inbox-reply-and-acknowledgement),
|
|
79
|
+
[`acc reply`](CLI.md#inbox-reply-and-acknowledgement), and
|
|
80
|
+
[`acc finish`](CLI.md#handoff).
|
|
81
|
+
|
|
49
82
|
## 3. Watch for useful coordination
|
|
50
83
|
|
|
51
84
|
Look for an agent discovering a peer, publishing the files it expects to change, noticing a
|
|
@@ -71,11 +104,12 @@ CLI, and Kimi Code can receive a message at the next normal turn. That does not
|
|
|
71
104
|
session. Grok, generic MCP clients, unknown versions, and unsupported platforms use the
|
|
72
105
|
durable inbox instead.
|
|
73
106
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
107
|
+
Codex LocalDaemon and Claude Code Channel offer optional native delivery on
|
|
108
|
+
Apple Silicon macOS. They are experimental, can spend tokens, and queue messages
|
|
109
|
+
until a running turn finishes. Codex requires 0.152.1 or newer, an already-running
|
|
110
|
+
LocalDaemon, recorded opt-in and a verified session; start it with your normal
|
|
111
|
+
command. A loaded daemon thread can receive messages after its terminal exits.
|
|
112
|
+
[Capabilities](CAPABILITIES.md) explains policy, versions and fallback.
|
|
79
113
|
|
|
80
114
|
Delivery evidence is deliberately narrow: `queued -> offered -> retrieved -> acknowledged`.
|
|
81
115
|
An offer is not proof that the model read anything, retrieval is not proof of attention, and
|
package/docs/GLOSSARY.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
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.
|
|
9
9
|
- **Claim** — a leased reservation for a canonical resource such as `file:src/**`.
|
|
10
|
-
- **Advisory / guarded** —
|
|
10
|
+
- **Advisory / guarded** — CLI claims default to advisory. Explicit guarded enforcement also requires certified guards from every live participant; neither mode stops unrelated local processes.
|
|
11
11
|
- **Message** — an attributed untrusted `note`, `question`, `request`, `answer`, `decision`, or `handoff`.
|
|
12
12
|
- **Thread** — a root message plus linked answers sharing one immutable `threadId`.
|
|
13
13
|
- **Obligation** — `none`, `reply`, or `acknowledge`; what communication the recipient owes.
|
|
@@ -16,11 +16,17 @@
|
|
|
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
|
|
19
|
+
- **Live push** — optional delivery through Claude Code Channel or Codex LocalDaemon to an already-running session, behind recipient opt-in. Both wait for an active turn to finish; [Capabilities](CAPABILITIES.md) gives the measured eligibility and limits.
|
|
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.
|
|
23
23
|
- **Managed / manual lifecycle** — whether hooks report ACC presence automatically; never ownership of the external client process.
|
|
24
|
-
- **MCP participation** —
|
|
24
|
+
- **MCP participation** — manual incoming polling without native lifecycle, context, guards, or receive wake; outgoing messages can use an eligible recipient's opted-in native route.
|
|
25
|
+
- **Bounded discovery** — inbox/history summary pages with limits and cursors; bodies require selection.
|
|
26
|
+
- **Exact recovery** — read one addressed inbox body, or one history record; history reads do not advance receipts.
|
|
27
|
+
- **Decision change** — an immutable decision explicitly supersedes or withdraws prior decisions; old records remain.
|
|
28
|
+
- **Current decision** — a terminal recorded position or withdrawal, not proven truth; competing branches stay visible.
|
|
29
|
+
- **Managed runtime** — ACC's staged installation generations and automatic-update controls, distinct from managed/manual session presence.
|
|
30
|
+
- **Activation hold** — an ACC process lease or native binding that postpones runtime refresh; observed lifecycle cleanup can release a native hold without stopping a vendor daemon.
|
|
25
31
|
|
|
26
32
|
See [Concepts](CONCEPTS.md) for relationships and [Protocol](PROTOCOL.md) for exact rules.
|
package/docs/HOW_IT_WORKS.md
CHANGED
|
@@ -32,7 +32,8 @@ ACC workspace. The native integration also gives the agent a small skill describ
|
|
|
32
32
|
discovery, messages, replies, claims, and handoffs.
|
|
33
33
|
|
|
34
34
|
A generic MCP client instead joins through `acc-mcp`, which resolves its configured
|
|
35
|
-
participant and workspace
|
|
35
|
+
participant and workspace on tool calls or inbox resource reads. Snapshot and roster
|
|
36
|
+
resource reads do not need that owner resolution. It exposes the coordination
|
|
36
37
|
tools but does not install the native clients' skill. See its
|
|
37
38
|
[manual MCP boundary](MCP.md#account-for-the-manual-boundary).
|
|
38
39
|
|
|
@@ -95,8 +96,9 @@ receipts. [Protocol](PROTOCOL.md) defines these rules precisely.
|
|
|
95
96
|
|
|
96
97
|
All recipients have the same durable record, but adapters expose different acceleration:
|
|
97
98
|
|
|
98
|
-
- **Durable inbox:** universal recovery.
|
|
99
|
-
|
|
99
|
+
- **Durable inbox:** universal recovery. `acc inbox` discovers bounded message headers;
|
|
100
|
+
`acc inbox --message <id>` retrieves one complete addressed message after selection
|
|
101
|
+
or compaction.
|
|
100
102
|
- **Next normal turn:** exact captured versions of Codex, Claude Code, Gemini CLI, and Kimi
|
|
101
103
|
Code can receive complete attributed peer context when the user next prompts that client.
|
|
102
104
|
This does not wake an idle session.
|
|
@@ -105,9 +107,15 @@ All recipients have the same durable record, but adapters expose different accel
|
|
|
105
107
|
default, can spend tokens, never interrupts a running turn, and requires the vendor's
|
|
106
108
|
visible development-channel warning.
|
|
107
109
|
|
|
108
|
-
Codex
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
- **Optional Codex LocalDaemon delivery:** on Apple Silicon macOS, a captured
|
|
111
|
+
minimum of 0.152.1 plus a current probe and exact session checks allow delivery
|
|
112
|
+
to an independently opened thread. It is experimental, off by default, and can
|
|
113
|
+
spend tokens. Messages wait for a running turn to finish; a daemon-retained
|
|
114
|
+
thread can receive them after its terminal exits. ACC adds no launch arguments
|
|
115
|
+
and does not manage the vendor daemon.
|
|
116
|
+
|
|
117
|
+
Grok, generic MCP, unsupported versions and uncaptured platforms use inbox polling.
|
|
118
|
+
[Capabilities](CAPABILITIES.md) lists evidence and fallback.
|
|
111
119
|
|
|
112
120
|
When a complete projected body cannot fit the configured byte budget, ACC keeps the message
|
|
113
121
|
id and exact inbox recovery command rather than silently truncating the peer's words.
|
|
@@ -141,13 +149,26 @@ Before changing files, an agent can publish intent and claim a narrow resource s
|
|
|
141
149
|
`file:packages/api/**`. Another live session attempting an overlapping claim receives exit
|
|
142
150
|
code `5` with the holder, giving the peers a chance to narrow or sequence their work.
|
|
143
151
|
|
|
144
|
-
Claims are not operating-system locks.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
Claims are not operating-system locks. CLI claims default to `advisory`. Explicit
|
|
153
|
+
`--enforcement guarded` also requires every relevant live client to expose a captured
|
|
154
|
+
pre-write guard for the path ACC can recognize; otherwise workspace protection is advisory.
|
|
155
|
+
Even a guarded claim cannot stop an unrelated program or a write path the client does not
|
|
156
|
+
expose. [Concepts](CONCEPTS.md#intent-is-awareness-a-claim-commits) explains the
|
|
148
157
|
user-facing distinction.
|
|
149
158
|
|
|
150
|
-
## 8.
|
|
159
|
+
## 8. Peers recover history and explicit decision changes
|
|
160
|
+
|
|
161
|
+
Inbox and history listings expose bounded summaries. After compaction or a new conversation,
|
|
162
|
+
a peer selects exact records to recover full decisions or handoffs; a new participant does
|
|
163
|
+
not inherit an old participant's inbox. History reads preserve receipt state.
|
|
164
|
+
|
|
165
|
+
A peer can explicitly supersede or withdraw an earlier decision. Prior records remain,
|
|
166
|
+
and current-decision discovery shows terminal positions, withdrawals, and competing
|
|
167
|
+
branches. This reports peers' recorded positions, not verified current truth. See
|
|
168
|
+
[historical recovery](CLI.md#historical-recovery) and
|
|
169
|
+
[decision lifecycle](PROTOCOL.md#decision-lifecycle). No full history is automatically injected.
|
|
170
|
+
|
|
171
|
+
## 9. The boundaries remain visible
|
|
151
172
|
|
|
152
173
|
ACC stores only coordination data an agent explicitly publishes: identity, presence,
|
|
153
174
|
one-line intent, claims, messages, replies, handoffs, receipts, and events. It never collects
|
package/docs/MCP.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# MCP
|
|
2
2
|
|
|
3
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.
|
|
5
|
-
|
|
6
|
-
inject a normal turn, or
|
|
4
|
+
exposes durable messages, threads, receipts, intent, claims, and handoffs over stdio.
|
|
5
|
+
Receiving through MCP requires manual polling: it cannot infer the client's lifecycle,
|
|
6
|
+
intercept writes, inject a normal turn, or wake the MCP client for incoming messages.
|
|
7
|
+
Outgoing messages commit first and may then be offered through an eligible recipient's
|
|
8
|
+
native adapter when that recipient's delivery policy permits it.
|
|
7
9
|
|
|
8
10
|
```mermaid
|
|
9
11
|
graph LR
|
|
@@ -29,22 +31,30 @@ identity for this server. It comes from user-owned launch configuration, never f
|
|
|
29
31
|
server uses its launch directory, which may be a different workspace from the other
|
|
30
32
|
sessions.
|
|
31
33
|
|
|
32
|
-
The server
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
The server supports initialized MCP clients using `2025-06-18` or `2025-11-25`, and
|
|
35
|
+
the per-request metadata interface in `2026-07-28`, over newline-delimited JSON-RPC stdio.
|
|
36
|
+
Initialized clients send `initialize`, accept the negotiated revision, then send
|
|
37
|
+
`notifications/initialized` before calling tools. Unknown initialization revisions receive
|
|
38
|
+
`2025-11-25`; the client decides whether it supports that revision. Transport initialization
|
|
39
|
+
does not create an ACC participant: a tool call or inbox resource read resolves it.
|
|
40
|
+
|
|
41
|
+
Tool input schemas are closed: unknown fields and invalid conditional shapes are
|
|
42
|
+
rejected before a session is resolved. Approve the ACC tools through your client's normal
|
|
43
|
+
permission controls. A headless client configured to reject approval requests can connect
|
|
44
|
+
successfully yet refuse tool calls; that is distinct from a protocol handshake failure.
|
|
35
45
|
|
|
36
46
|
## Call the durable tools
|
|
37
47
|
|
|
38
48
|
| Tool | Required input | Optional input |
|
|
39
49
|
|---|---|---|
|
|
40
50
|
| `acc_status` | — | — |
|
|
41
|
-
| `acc_sync` | — | `cursor`, `scope: delta|full`, `limit: 1..500` |
|
|
51
|
+
| `acc_sync` | — | `cursor`, `scope: delta|full|history`, `limit: 1..500`, `kind`, `messageId`, `current` |
|
|
42
52
|
| `acc_work` | `summary` and `mode`, or `clear: true` | `state`, `resourceHints` |
|
|
43
53
|
| `acc_claim` | `action`; `resource` for acquire, `claimId` for renew | `mode`, `reason`, `leaseSeconds` where valid |
|
|
44
54
|
| `acc_release` | `claimId` | — |
|
|
45
|
-
| `acc_message` | `to`, `subject`, `body` | `kind`, `obligation`, `clientMessageId` |
|
|
55
|
+
| `acc_message` | `to`, `subject`, `body` | `kind`, `obligation`, `clientMessageId`, `supersedes`, `withdraws` |
|
|
46
56
|
| `acc_request` | `toParticipantId`, `title` | `detail`, `clientMessageId` |
|
|
47
|
-
| `acc_inbox` | — | `messageId` |
|
|
57
|
+
| `acc_inbox` | — | `messageId`, `cursor`, `limit: 1..500` |
|
|
48
58
|
| `acc_reply` | `messageId`, `body` | `subject`, `clientMessageId` |
|
|
49
59
|
| `acc_ack` | `messageId` | — |
|
|
50
60
|
| `acc_finish` | `goal` | `status`, `completed`, `remaining`, `blockers`, `toParticipantId`, `clientMessageId` |
|
|
@@ -53,15 +63,46 @@ All tool names above are the complete model-facing surface. There are no executi
|
|
|
53
63
|
client-control tools.
|
|
54
64
|
|
|
55
65
|
Send-like tools return a raw structured object with `{ message, delivery }`; their text
|
|
56
|
-
content is the JSON serialization of the same value. `acc_inbox` returns
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
content is the JSON serialization of the same value. Default `acc_inbox` returns
|
|
67
|
+
`{items, nextCursor}`: read-only pending message summaries paired with receipts, newest
|
|
68
|
+
first. It never retrieves bodies. Pages default to 20 items, at most 12,000 bytes of
|
|
69
|
+
formatted page JSON before MCP framing. `cursor` is the complete message id from
|
|
70
|
+
`nextCursor`; omit it on a new poll to see arrivals. Reading or acknowledging the anchor
|
|
71
|
+
between pages does not shift continuation. The summary field allowlist, byte limit,
|
|
72
|
+
and live-page semantics are described in [CLI](CLI.md#inbox-reply-and-acknowledgement).
|
|
73
|
+
|
|
74
|
+
With an exact `messageId`, `acc_inbox` returns a one-item array with the complete
|
|
75
|
+
message/receipt pair and advances only that participant's receipt to `retrieved` when
|
|
76
|
+
needed. Exact acknowledged inspection preserves receipt state, timestamp, and event
|
|
77
|
+
history. Do not combine `messageId` with cursor or limit. Resolved mail stays out of lists.
|
|
78
|
+
`acc_reply` writes an `answer` and acknowledges the original atomically. It additionally
|
|
79
|
+
returns `receipt` for that original message; `message` and `delivery` describe the outgoing
|
|
80
|
+
answer. `acc_ack` exposes no receipt-state parameter.
|
|
81
|
+
|
|
82
|
+
For initialized 2025 clients, array results such as exact `acc_inbox` reads are JSON in text content,
|
|
83
|
+
with `structuredContent` omitted because those revisions require an object there.
|
|
84
|
+
Object results retain both representations. The 2026 interface also returns raw arrays
|
|
85
|
+
in `structuredContent` and uses the `resultType: "complete"` envelope.
|
|
60
86
|
|
|
61
87
|
Resources are `acc://snapshot`, `acc://roster`, and `acc://inbox`. Reading `acc://inbox`
|
|
62
|
-
resolves the configured MCP participant and
|
|
63
|
-
`
|
|
64
|
-
|
|
88
|
+
resolves the configured MCP participant and returns the same read-only summary page as
|
|
89
|
+
`acc_inbox {}`. Continue via the tool using `cursor`; retrieve a body with `messageId`.
|
|
90
|
+
Snapshot and roster reads do not advance receipts either. `acc://snapshot` and sync with
|
|
91
|
+
`scope: "full"` remain unbounded, for explicit workspace forensics.
|
|
92
|
+
|
|
93
|
+
`acc_sync {scope: "history", kind: "handoff"}` returns
|
|
94
|
+
`{scope: "history", view: "summary", items, nextCursor}` using the same message summary
|
|
95
|
+
fields and page limits. The optional kind filter applies before paging. Continue with
|
|
96
|
+
the complete `nextCursor` message id and the same filter. Then use
|
|
97
|
+
`acc_sync {scope: "history", messageId: "message_x"}` to receive one complete historical
|
|
98
|
+
message in `items`, with `view: "message"` and no receipt change. Exact reads reject
|
|
99
|
+
cursor, limit, and kind. `kind` and `messageId` require history scope; delta/full retain
|
|
100
|
+
16-digit event cursors. History exposes recorded peer claims, not their current validity.
|
|
101
|
+
|
|
102
|
+
An addressed handoff requires a participant already known to the workspace. For a future
|
|
103
|
+
session that has not joined, omit `toParticipantId` to leave a workspace handoff. A later
|
|
104
|
+
session can recover that historical handoff through the history list and exact read;
|
|
105
|
+
its addressed inbox will not contain past workspace broadcasts.
|
|
65
106
|
|
|
66
107
|
## Account for the manual boundary
|
|
67
108
|
|
|
@@ -79,16 +120,42 @@ An MCP participant therefore reports `advisory` enforcement and `manual` lifecyc
|
|
|
79
120
|
workspace protection is the weakest live participant's real guarantee, one MCP session
|
|
80
121
|
makes guarded claims advisory for the room.
|
|
81
122
|
|
|
82
|
-
##
|
|
123
|
+
## Decision changes
|
|
124
|
+
|
|
125
|
+
`acc_message` with `kind: "decision"` accepts either `supersedes: ["message_x"]`
|
|
126
|
+
or `withdraws: ["message_x"]`: 1..16 unique existing decision IDs. Supply `to: []`
|
|
127
|
+
to inherit target authors and recipients, including offline participants, or add
|
|
128
|
+
recipients explicitly. Body states the new position or reason for withdrawal.
|
|
129
|
+
Any owned peer may record a change; competing branches are visible, not resolved by time.
|
|
83
130
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
131
|
+
`acc_sync {scope: "history", kind: "decision", current: true}` lists terminal
|
|
132
|
+
positions and withdrawals with bounded `decisionStatus` metadata. Exact history
|
|
133
|
+
reads include the same status and preserve receipts. `current` cannot accompany
|
|
134
|
+
an exact ID or other scopes/kinds. Replaced decisions leave ordinary inbox/attention;
|
|
135
|
+
they remain available by exact ID without an automatic acknowledgement.
|
|
136
|
+
See [decision lifecycle](PROTOCOL.md#decision-lifecycle).
|
|
137
|
+
|
|
138
|
+
## Poll without overstating delivery
|
|
89
139
|
|
|
90
|
-
|
|
91
|
-
|
|
140
|
+
`acc_message`, `acc_request`, `acc_reply`, and `acc_finish` record their outgoing message
|
|
141
|
+
before attempting delivery. The installed server uses the delivery router and recipient
|
|
142
|
+
policy to offer addressed messages through eligible, opted-in native adapters. If no
|
|
143
|
+
eligible route accepts a pending message, it remains queued for durable retrieval.
|
|
144
|
+
Inspect the returned `delivery` outcomes; sending through MCP does not guarantee a native
|
|
145
|
+
offer, model attention, or a reply. These outgoing routes add no receiving capability to MCP.
|
|
146
|
+
|
|
147
|
+
Poll `acc_inbox`, `acc_status`, or `acc_sync` to observe changes. Never repeat a mutation
|
|
148
|
+
merely to poll. For an intentional send retry, reuse the same `clientMessageId` and payload.
|
|
149
|
+
Supply the key on the first call if you need it available after a lost response; an omitted
|
|
150
|
+
key is generated and returned in `message`.
|
|
151
|
+
|
|
152
|
+
An MCP recipient retrieves a body with `acc_inbox` and its exact `messageId`. That read
|
|
153
|
+
advances the receipt to `retrieved` when needed, without proving model attention. A reply
|
|
154
|
+
or explicit ack records `acknowledged`; that state alone proves neither a separate retrieval
|
|
155
|
+
nor a native reply. Inspect the answer message separately when a response is required.
|
|
156
|
+
|
|
157
|
+
Use MCP when a client can call tools but exposes no measured hook boundary, and allow for
|
|
158
|
+
the polling latency of incoming messages.
|
|
92
159
|
|
|
93
160
|
Next: [Protocol](PROTOCOL.md) · [Capabilities](CAPABILITIES.md) ·
|
|
94
161
|
[Security model](SECURITY_MODEL.md)
|