agents-can-communicate 0.3.1 → 0.4.0
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 +28 -7
- 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 +73 -0
- package/docs/ADAPTER_AUTHORING.md +41 -7
- package/docs/ARCHITECTURE.md +62 -11
- package/docs/CAPABILITIES.md +40 -36
- package/docs/CLI.md +143 -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 +37 -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 +45 -13
- package/docs/TROUBLESHOOTING.md +76 -18
- package/docs/UPGRADING.md +119 -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 +106 -5
- 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 +22 -4
- 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 +63 -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 +73 -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 +122 -0
- package/node_modules/@agents-can-communicate/cli/src/managed-runtime/worker.mjs +65 -0
- 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/process-table.mjs +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +175 -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/GETTING_STARTED.md
CHANGED
|
@@ -4,10 +4,17 @@ 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 supply each agent's own CLI arguments in coordination context; the installed
|
|
8
|
+
skill tells the agent to use them. This path was observed in Claude Code 2.1.263 and
|
|
9
|
+
Codex 0.153.4. Hooks must be enabled and trusted by the client. Without hook context, owner
|
|
10
|
+
operations require an explicit pair or session-bound ACC MCP tools. See [CLI ownership](CLI.md#coordinate-from-a-session).
|
|
11
|
+
|
|
7
12
|
## 1. Install once on this machine
|
|
8
13
|
|
|
9
14
|
ACC requires macOS or Linux and Node.js 24 or newer.
|
|
10
15
|
|
|
16
|
+
Already using 0.3.1? Follow the [upgrade guide](UPGRADING.md) before mixing versions.
|
|
17
|
+
|
|
11
18
|
```bash
|
|
12
19
|
npm install -g agents-can-communicate
|
|
13
20
|
```
|
|
@@ -17,9 +24,21 @@ npm install -g agents-can-communicate
|
|
|
17
24
|
acc install
|
|
18
25
|
```
|
|
19
26
|
|
|
27
|
+
Installation also enables automatic updates. ACC downloads releases in the background and
|
|
28
|
+
refreshes its runtime and skills when active clients have left. Use `acc update` for an
|
|
29
|
+
immediate update, or `acc update --auto off` to disable background updates. See
|
|
30
|
+
[update controls](UPGRADING.md#automatic-updates-after-installation).
|
|
31
|
+
|
|
20
32
|
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
|
-
|
|
33
|
+
restart any running clients so they load their integrations. Follow the activation steps
|
|
34
|
+
printed by the installer. In Codex, use `/plugins` to check ACC is enabled, then `/hooks`
|
|
35
|
+
to review each ACC hook and enable/trust its current definition if needed. Restart the
|
|
36
|
+
session after that review; changed hook definitions may require trust again.
|
|
37
|
+
|
|
38
|
+
If the installer preserved your existing Codex sandbox settings, verify the named ACC
|
|
39
|
+
state directory is in `sandbox_workspace_write.writable_roots` in the config it identifies.
|
|
40
|
+
ACC keeps those user settings unchanged. Installed files alone do not establish that hooks
|
|
41
|
+
are active; `acc doctor` leaves current readiness unverified and directs you to Codex.
|
|
23
42
|
|
|
24
43
|
If you opt into Claude Code's experimental idle delivery, Claude also shows its own
|
|
25
44
|
development-channel warning at every startup. The feature is off by default, can spend
|
|
@@ -46,6 +65,16 @@ Same-client addresses can be ambiguous when several instances are live; agents u
|
|
|
46
65
|
exact participant ids in the roster when needed. See [Concepts](CONCEPTS.md) for participant
|
|
47
66
|
and session identity.
|
|
48
67
|
|
|
68
|
+
A second repeatable pattern is review and handoff. Ask the implementing agent to request
|
|
69
|
+
review of an identified revision (a commit when Git is available, or named files and
|
|
70
|
+
version otherwise) and wait for the verdict. Ask the reviewer to return blocking defects
|
|
71
|
+
or approval. If either session must stop, it can leave a durable handoff naming completed
|
|
72
|
+
work, remaining work, and blockers. A later session can recover it from history. The
|
|
73
|
+
underlying commands are [`acc request`](CLI.md#messages-and-requests), exact
|
|
74
|
+
[`acc inbox --message`](CLI.md#inbox-reply-and-acknowledgement),
|
|
75
|
+
[`acc reply`](CLI.md#inbox-reply-and-acknowledgement), and
|
|
76
|
+
[`acc finish`](CLI.md#handoff).
|
|
77
|
+
|
|
49
78
|
## 3. Watch for useful coordination
|
|
50
79
|
|
|
51
80
|
Look for an agent discovering a peer, publishing the files it expects to change, noticing a
|
|
@@ -71,11 +100,12 @@ CLI, and Kimi Code can receive a message at the next normal turn. That does not
|
|
|
71
100
|
session. Grok, generic MCP clients, unknown versions, and unsupported platforms use the
|
|
72
101
|
durable inbox instead.
|
|
73
102
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
103
|
+
Codex LocalDaemon and Claude Code Channel offer optional native delivery on
|
|
104
|
+
Apple Silicon macOS. They are experimental, can spend tokens, and queue messages
|
|
105
|
+
until a running turn finishes. Codex requires 0.152.1 or newer, an already-running
|
|
106
|
+
LocalDaemon, recorded opt-in and a verified session; start it with your normal
|
|
107
|
+
command. A loaded daemon thread can receive messages after its terminal exits.
|
|
108
|
+
[Capabilities](CAPABILITIES.md) explains policy, versions and fallback.
|
|
79
109
|
|
|
80
110
|
Delivery evidence is deliberately narrow: `queued -> offered -> retrieved -> acknowledged`.
|
|
81
111
|
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)
|
package/docs/PROTOCOL.md
CHANGED
|
@@ -74,11 +74,57 @@ inside the message so an uncertain caller can retry explicitly.
|
|
|
74
74
|
|
|
75
75
|
An empty `toParticipantIds` creates a room record. At commit time, core resolves every
|
|
76
76
|
known peer participant with an open session and creates a receipt for each. Participants
|
|
77
|
-
that arrive later can inspect room
|
|
77
|
+
that arrive later can inspect room records through history sync but do not receive
|
|
78
78
|
retroactive receipts. Those already-present recipients get the normal inbox and certified
|
|
79
79
|
next-turn path; a successful next-turn write advances their room receipt to `offered`.
|
|
80
80
|
Room records are never eligible for native live push.
|
|
81
81
|
|
|
82
|
+
## Decision lifecycle
|
|
83
|
+
|
|
84
|
+
A decision may additionally carry `decisionChange` with exactly two fields:
|
|
85
|
+
`action` (`replace` or `withdraw`) and `messageIds` (1..16 unique portable IDs of
|
|
86
|
+
existing decisions in the same workspace). Generic send inputs use `supersedes`
|
|
87
|
+
or `withdraws`; the durable payload is built after transactional validation.
|
|
88
|
+
The sorted target set participates in idempotency. The author may be any owned
|
|
89
|
+
participant; attribution does not confer system authority.
|
|
90
|
+
|
|
91
|
+
Targets and their receipts are immutable. Changes inherit target receipt recipients
|
|
92
|
+
and target authors, excluding the changing author from inherited recipients. Extra
|
|
93
|
+
explicit recipients are merged, sorted, and persisted in `toParticipantIds` before
|
|
94
|
+
recording. This also notifies offline readers and makes live routing use the same set.
|
|
95
|
+
No old receipt is acknowledged, deleted, or advanced by a lifecycle change.
|
|
96
|
+
|
|
97
|
+
Explicit links form a graph. Within a connected group, terminal records are heads;
|
|
98
|
+
multiple heads mean a conflict, even if their prose looks similar. A change may target
|
|
99
|
+
an already replaced decision, creating a competing branch. Resolve branches by
|
|
100
|
+
explicitly linking a new change to all their current heads. A withdrawal is itself
|
|
101
|
+
a terminal record; superseding it explicitly records a new decision.
|
|
102
|
+
|
|
103
|
+
Decision summaries and exact read copies expose `decisionStatus`:
|
|
104
|
+
|
|
105
|
+
| Field | Meaning |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `state` | `current` for a terminal choice; `withdrawn` for a terminal cancellation or history with only cancelled heads; otherwise `superseded` |
|
|
108
|
+
| `isHead` | no recorded successor links to this record |
|
|
109
|
+
| `conflicted` / `headCount` | whether the group has multiple terminal positions and their count |
|
|
110
|
+
| `currentMessageId` | sole current head, or null if there is no unique head |
|
|
111
|
+
| `groupId` | derived representative root ID for finding related heads; may change when groups are joined |
|
|
112
|
+
|
|
113
|
+
This metadata is never persisted. `history` + kind `decision` + `current: true`
|
|
114
|
+
lists heads, including withdrawals and conflicts, using the same summary budget.
|
|
115
|
+
Ordinary inbox, bulk reads, automatic delivery and attention omit non-head decisions;
|
|
116
|
+
exact inbox/history retain them. Timestamps and acknowledgements never choose a winner.
|
|
117
|
+
A decision without an explicit successor may still be factually stale.
|
|
118
|
+
|
|
119
|
+
Next-turn context and each native offer use a lifecycle snapshot; text already shown
|
|
120
|
+
or in flight cannot be recalled. Changes get their own delivery receipts. Native
|
|
121
|
+
transport carries the change/status inside its existing untrusted text envelope.
|
|
122
|
+
|
|
123
|
+
The optional field preserves reading of existing schema-3 records by this build.
|
|
124
|
+
Older ACC builds cannot interpret these semantics and may reject new records with
|
|
125
|
+
unknown fields. Upgrade participating ACC installations together; this is not a
|
|
126
|
+
forward-compatible promise or an automatic state migration.
|
|
127
|
+
|
|
82
128
|
## Kinds and obligations
|
|
83
129
|
|
|
84
130
|
| Kind | Valid obligation | Addressing |
|
|
@@ -155,13 +201,19 @@ leaves the receipt queued.
|
|
|
155
201
|
|
|
156
202
|
## Inbox, reply, and acknowledgement
|
|
157
203
|
|
|
158
|
-
`inbox`
|
|
159
|
-
|
|
160
|
-
|
|
204
|
+
Without an id, public `inbox` lists bounded summary pages for unresolved messages owned
|
|
205
|
+
by the calling participant, without changing receipts. An exact read returns the complete
|
|
206
|
+
message and advances only that participant's receipt to `retrieved`. It is the narrow
|
|
207
|
+
recovery and inspection path, including after compaction or acknowledgement. Reading an
|
|
208
|
+
acknowledged message preserves its receipt, timestamp, and event history; it does not put
|
|
209
|
+
the message back into the unresolved inbox. Ownership and current-generation checks still
|
|
210
|
+
apply to every read.
|
|
161
211
|
|
|
162
212
|
`reply` verifies that ownership, records an `answer` in the original thread, and advances
|
|
163
213
|
the original receipt to `acknowledged` in one transaction. Only after that durable commit
|
|
164
214
|
may the answer be offered to the original author. A transport error cannot roll back it.
|
|
215
|
+
CLI and MCP reply results expose both facts: `message` and `delivery` describe the outgoing
|
|
216
|
+
answer, while `receipt` describes the caller's acknowledgement of the original message.
|
|
165
217
|
|
|
166
218
|
`ack` advances the caller's receipt without creating a reply. It exposes no state override;
|
|
167
219
|
callers cannot claim that a transport offered or a participant retrieved a message.
|
|
@@ -188,17 +240,22 @@ The recipient owns `livePolicy` because native push may start a model turn:
|
|
|
188
240
|
- `actionable`: questions, requests, answers, decisions, and addressed handoffs may use live push;
|
|
189
241
|
- `all`: every addressed kind may use live push.
|
|
190
242
|
|
|
191
|
-
Default is `off`. Policy never creates a capability. The router
|
|
192
|
-
|
|
193
|
-
adapter acceptance. Claude Code
|
|
194
|
-
minimum
|
|
195
|
-
|
|
196
|
-
|
|
243
|
+
Default is `off`. Policy never creates a capability. The router requires one
|
|
244
|
+
current eligible recipient generation, supported client evidence, a verified
|
|
245
|
+
binding and adapter acceptance. Claude Code Channel uses a captured 2.1.258
|
|
246
|
+
minimum, confirmed on 2.1.260. Codex LocalDaemon uses a 0.152.1 minimum, confirmed
|
|
247
|
+
through installed-product captures on 0.152.1 and 0.153.4; recorded consent and
|
|
248
|
+
exact thread, cwd, process, version and protocol verification govern every session.
|
|
249
|
+
Unavailable or refused routes fall back durably. Codex replies use the ACC CLI;
|
|
250
|
+
its native reply route remains false.
|
|
197
251
|
|
|
198
252
|
## Attention and sync
|
|
199
253
|
|
|
200
|
-
|
|
201
|
-
|
|
254
|
+
Default sync returns a bounded event page after a 16-digit cursor plus explicit attention.
|
|
255
|
+
History sync returns read-only message summaries (20 items by default, at most 12,000
|
|
256
|
+
formatted JSON bytes) and complete-message-id cursors, or one exact full message. Neither
|
|
257
|
+
history mode changes receipts. Full sync adds an unbounded forensic workspace snapshot.
|
|
258
|
+
Message discovery and exact-read contracts are in [CLI](CLI.md) and [MCP](MCP.md). Attention is
|
|
202
259
|
limited to six explicit rules: `reply_required`, `acknowledgement_required`,
|
|
203
260
|
`recipient_unavailable`, `claim_conflict`, `claim_contended`, and `claim_expired`.
|
|
204
261
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Releasing
|
|
2
2
|
|
|
3
3
|
Use this procedure to build one auditable npm artifact, verify that exact tarball, and keep
|
|
4
|
-
its evidence tied to the commit that supplied its bytes. The package is currently `0.
|
|
4
|
+
its evidence tied to the commit that supplied its bytes. The package is currently `0.4.0`;
|
|
5
5
|
the commands derive the version from `package.json` so the filename cannot drift.
|
|
6
6
|
|
|
7
7
|
```mermaid
|
|
@@ -18,8 +18,9 @@ graph LR
|
|
|
18
18
|
|
|
19
19
|
## Prepare candidate commit A
|
|
20
20
|
|
|
21
|
-
Commit A must contain every file npm will pack and every release gate.
|
|
22
|
-
dedicated release worktree
|
|
21
|
+
Commit A must contain every file npm will pack and every release gate. Use a clean,
|
|
22
|
+
dedicated release worktree; an existing clean isolated worktree is fine. Update the version
|
|
23
|
+
and candidate files, then run:
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
26
|
release_cache="$(mktemp -d "${TMPDIR:-/tmp}/acc-npm-cache.XXXXXX")"
|
|
@@ -62,7 +63,23 @@ env npm_config_cache="$release_cache" node scripts/verify-package.mjs "$tarball"
|
|
|
62
63
|
symlinks, then exercises doctor, a non-Git workspace, client install/uninstall, bundled
|
|
63
64
|
workspaces, certification evidence, and packed documentation links. It rejects tests,
|
|
64
65
|
development probes, sockets, transcript-shaped data, runtime state, and unreferenced
|
|
65
|
-
fixtures.
|
|
66
|
+
fixtures. Keep `ACC_NO_UPDATE_CHECK=1` set for release checks so installing an integration
|
|
67
|
+
cannot schedule a real registry update. The managed-update acceptance tests explicitly
|
|
68
|
+
enable networking only against their isolated local registry and npm cache.
|
|
69
|
+
|
|
70
|
+
The managed-update checks exercise actual installed archives: automatic enrollment and
|
|
71
|
+
activation, a persistent MCP process holding the old version, integrity rejection, recovery
|
|
72
|
+
from a failed integration refresh, and stable launchers after the initial package is gone.
|
|
73
|
+
Run them before recording the candidate:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
env npm_config_cache="$release_cache" node --test tests/acceptance/managed-*-packed.test.mjs
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Repeat the published-version upgrade preflight with this exact tarball and isolated home,
|
|
80
|
+
data, and project directories. Retain the source/archive/installed file comparison with the
|
|
81
|
+
preflight evidence. Local-registry checks and direct process checks do not establish native
|
|
82
|
+
client activation; capture that separately on supported real clients.
|
|
66
83
|
|
|
67
84
|
When passed an existing tarball, the verifier intentionally prints `revision unknown`:
|
|
68
85
|
the current checkout cannot prove which commit produced arbitrary supplied bytes. Record
|
|
@@ -100,12 +117,13 @@ work belongs under `Unreleased` and gets a new candidate record.
|
|
|
100
117
|
|
|
101
118
|
## Capture only capabilities you observed
|
|
102
119
|
|
|
103
|
-
Run native real-client checks
|
|
104
|
-
|
|
105
|
-
Code
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
120
|
+
Run native real-client checks on the exact versions and platforms recorded in
|
|
121
|
+
retained fixtures. Exact-version evidence governs normal-turn and guard behavior.
|
|
122
|
+
Claude Code Channel uses its captured macOS arm64 minimum plus a current probe and
|
|
123
|
+
per-session handshake; its vendor warning remains part of startup. Codex LocalDaemon
|
|
124
|
+
uses a separate 0.152.1 minimum with installed-product captures on 0.152.1 and
|
|
125
|
+
0.153.4. Its passing capture must ship the hashed complete product matrix and
|
|
126
|
+
historical evidence references. Direct queue success alone cannot certify that route.
|
|
109
127
|
|
|
110
128
|
Record failed and unavailable paths as such, then exercise the packed next-turn or inbox
|
|
111
129
|
fallback. An unsupported platform is an explicit skip, never a passing capture. See
|
package/docs/SECURITY_MODEL.md
CHANGED
|
@@ -42,7 +42,11 @@ own instruction hierarchy are the mitigation; ACC is not a model sandbox.
|
|
|
42
42
|
## Identity and ownership
|
|
43
43
|
|
|
44
44
|
- Participant identity is the address; session identity is one current client opening.
|
|
45
|
-
- Mutating calls
|
|
45
|
+
- Mutating CLI calls and inbox reads require an explicitly supplied session/generation
|
|
46
|
+
pair. The CLI never obtains a generation from a public ID, checkout, sole peer binding,
|
|
47
|
+
or inherited native environment value.
|
|
48
|
+
- `ACC_SESSION`/`ACC_GENERATION` are operator-supplied credentials. They do not authenticate
|
|
49
|
+
a process or protect against intentional sharing under the same local OS account.
|
|
46
50
|
- A stale process cannot renew or release records owned by a newer generation.
|
|
47
51
|
- Inbox, reply, and acknowledgement validate the recipient's participant id.
|
|
48
52
|
- One participant cannot advance another participant's receipt.
|
|
@@ -66,18 +70,20 @@ There is no model-attention claim and no public state override. Failed accelerat
|
|
|
66
70
|
the message queued and records only a closed safe error code. Diagnostics and offer events
|
|
67
71
|
never copy the peer body.
|
|
68
72
|
|
|
69
|
-
A live adapter must match its declared evidence contract, one
|
|
70
|
-
binding
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
A live adapter must match its declared evidence contract, one current
|
|
74
|
+
generation-bound binding and recipient opt-in. Opaque endpoints remain private
|
|
75
|
+
and outside repositories. Claude Code Channel and Codex LocalDaemon delivery are
|
|
76
|
+
experimental and off by default. Codex verifies the exact receiver thread,
|
|
77
|
+
canonical cwd, live process, stable version and protocol, and rereads recorded
|
|
78
|
+
consent before offers. A loaded daemon thread can receive messages after its TUI
|
|
79
|
+
exits. Delivery off and uninstall prevent new Codex submissions; a submission
|
|
80
|
+
already accepted by the vendor queue cannot be withdrawn.
|
|
76
81
|
|
|
77
82
|
## Claims
|
|
78
83
|
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
CLI claims default to advisory. Guarded enforcement must be requested explicitly and
|
|
85
|
+
requires every live participant to expose a certified guard for the relevant mutation path.
|
|
86
|
+
MCP claims remain advisory. Even guarded claims do not stop unrelated processes, runtime-built
|
|
81
87
|
paths, or tool calls the client never presents to the hook. Force release requires explicit
|
|
82
88
|
authority and records actor and reason.
|
|
83
89
|
|
|
@@ -93,14 +99,40 @@ from operating merely because its own state is unavailable.
|
|
|
93
99
|
- Corrupt or incompatible store versions fail closed before mutation.
|
|
94
100
|
- Client installers preserve unrelated settings and record content hashes.
|
|
95
101
|
- Uninstall removes only bytes still matching what ACC wrote.
|
|
96
|
-
-
|
|
102
|
+
- Runtime credentials and private endpoints stay outside project config. Adapters do not
|
|
103
|
+
automatically collect client secrets or environment contents into peer messages.
|
|
104
|
+
|
|
105
|
+
## Managed automatic updates
|
|
106
|
+
|
|
107
|
+
A normal managed installation enables automatic updates. The latency-sensitive hook path
|
|
108
|
+
does no network download; it may schedule a detached worker. That worker uses the configured
|
|
109
|
+
npm registry/network and local npm executable, checks stable package identity/version and
|
|
110
|
+
sha512 integrity against registry metadata, installs with lifecycle scripts disabled, and
|
|
111
|
+
validates the staged runtime before activation. These checks retain the registry and package
|
|
112
|
+
author as a software-supply trust boundary; they do not establish that package code is safe.
|
|
113
|
+
|
|
114
|
+
ACC process leases hold activation until confirmed exit. Native bindings hold until observed
|
|
115
|
+
SessionEnd cleanup or confirmed process death; unknown PIDs remain conservative holds.
|
|
116
|
+
`acc finish`, presence TTL, and delivery off do not establish native lifecycle end. ACC does
|
|
117
|
+
not manage the vendor daemon.
|
|
118
|
+
|
|
119
|
+
A failed download leaves the active runtime available. A partial integration refresh retains
|
|
120
|
+
the old active pointer but fences normal workspace admission in `activating`; it does not
|
|
121
|
+
leave the previous runtime available for normal work. Fix the reported problem and run
|
|
122
|
+
`acc update` to repair forward. Hooks continue to fail open while coordination is unavailable.
|
|
123
|
+
|
|
124
|
+
`acc update --auto off` disables background updates; `--pin <version>` holds an exact stable
|
|
125
|
+
version. `ACC_NO_UPDATE_CHECK=1` disables update networking and scheduling while allowing
|
|
126
|
+
manual recovery of an already verified pending update. See [Upgrading](UPGRADING.md).
|
|
97
127
|
|
|
98
128
|
## Data collected
|
|
99
129
|
|
|
100
130
|
ACC stores participant/session identity, presence, one-line intent, explicit claims,
|
|
101
131
|
explicit messages and structured handoffs, per-recipient receipts, artifact references,
|
|
102
|
-
and coordination events.
|
|
103
|
-
|
|
132
|
+
and coordination events. ACC does not automatically collect raw transcripts, full prompts
|
|
133
|
+
or assistant responses, secrets, environment contents, or unrelated files. Explicit message
|
|
134
|
+
bodies are caller-provided and preserved: ACC does not scan or scrub secrets from text a
|
|
135
|
+
caller chooses to send. The sender remains responsible for that content.
|
|
104
136
|
|
|
105
137
|
## Threat scenarios
|
|
106
138
|
|