agents-can-communicate 0.1.18 → 0.3.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 +87 -69
- package/SECURITY.md +31 -0
- package/bin/acc-bootstrap.mjs +56 -0
- package/bin/acc-claude-channel.mjs +177 -0
- package/bin/acc-hook.mjs +94 -12
- package/bin/acc-mcp.mjs +6 -2
- package/bin/acc.mjs +13 -3
- package/docs/ADAPTER_AUTHORING.md +204 -0
- package/docs/ARCHITECTURE.md +131 -0
- package/docs/CAPABILITIES.md +117 -214
- package/docs/CLI.md +164 -0
- package/docs/CONCEPTS.md +134 -0
- package/docs/CONFIGURATION.md +147 -0
- package/docs/DESIGN_DECISIONS.md +89 -0
- package/docs/GETTING_STARTED.md +145 -0
- package/docs/GLOSSARY.md +26 -0
- package/docs/HOW_IT_WORKS.md +277 -0
- package/docs/MCP.md +94 -0
- package/docs/PROTOCOL.md +200 -0
- package/docs/RELEASING.md +115 -0
- package/docs/SECURITY_MODEL.md +131 -0
- package/docs/TROUBLESHOOTING.md +108 -0
- package/docs/WHY_ACC.md +61 -0
- package/docs/index.md +44 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/certification.json +228 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/PreToolUse-Edit.json +19 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/PreToolUse.json +17 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/SessionEnd.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/SessionStart.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/UserPromptSubmit.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/certification-provenance.json +269 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.252.json +21 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.258.json +23 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.260.json +23 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +13 -2
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/.mcp.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +22 -22
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +45 -5
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/channel.mjs +377 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +27 -7
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/native-delivery.mjs +229 -0
- package/node_modules/@agents-can-communicate/adapter-codex/certification.json +150 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/PreToolUse.json +14 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/SessionEnd.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/SessionStart.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/UserPromptSubmit.json +10 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/certification-provenance.json +199 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.0.json +21 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-remote-workspace.json +25 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +11 -2
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +22 -22
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +54 -12
- package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +121 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +151 -0
- package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +192 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/certification.json +68 -0
- 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 +22 -22
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeAgent-0.57.0.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeTool-0.57.0.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeTool-shell-0.57.0.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/SessionEnd-0.57.0.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/SessionStart-0.57.0.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/certification-provenance.json +293 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +8 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +31 -13
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/install.mjs +4 -2
- package/node_modules/@agents-can-communicate/adapter-grok/certification.json +3 -0
- package/node_modules/@agents-can-communicate/adapter-grok/package.json +2 -1
- package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +22 -22
- package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +11 -9
- package/node_modules/@agents-can-communicate/adapter-kimi/certification.json +52 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/PreToolUse-Bash.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/PreToolUse-Write.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/SessionHeartbeat.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/SessionStart.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/UserPromptSubmit.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/certification-provenance.json +66 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/package.json +8 -1
- package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +22 -22
- package/node_modules/@agents-can-communicate/adapter-kimi/src/adapter.mjs +7 -3
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +52 -18
- package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +158 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/context-projector.mjs +36 -17
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +9 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +7 -2
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-activation.mjs +76 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +202 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +101 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +28 -4
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +12 -31
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +70 -5
- package/node_modules/@agents-can-communicate/cli/src/help.mjs +2 -5
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +111 -12
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +100 -121
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/attention.mjs +106 -0
- package/node_modules/@agents-can-communicate/core/src/conversations.mjs +276 -0
- package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +131 -0
- package/node_modules/@agents-can-communicate/core/src/finish-retries.mjs +97 -0
- package/node_modules/@agents-can-communicate/core/src/inbox.mjs +91 -107
- package/node_modules/@agents-can-communicate/core/src/index.mjs +3 -3
- package/node_modules/@agents-can-communicate/core/src/intents.mjs +0 -1
- package/node_modules/@agents-can-communicate/core/src/ports.mjs +2 -1
- package/node_modules/@agents-can-communicate/core/src/receipts.mjs +109 -0
- package/node_modules/@agents-can-communicate/core/src/service.mjs +21 -10
- package/node_modules/@agents-can-communicate/core/src/sessions.mjs +22 -20
- package/node_modules/@agents-can-communicate/core/src/status.mjs +11 -9
- package/node_modules/@agents-can-communicate/core/src/sync.mjs +3 -294
- package/node_modules/@agents-can-communicate/delivery-router/package.json +12 -0
- package/node_modules/@agents-can-communicate/delivery-router/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +131 -0
- package/node_modules/@agents-can-communicate/hook-runner/package.json +4 -2
- package/node_modules/@agents-can-communicate/hook-runner/src/client-version.mjs +20 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/native-binding.mjs +90 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +190 -105
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +70 -10
- package/node_modules/@agents-can-communicate/installer/src/bootstrap-runtime.mjs +144 -0
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +89 -5
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +10 -2
- package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +161 -0
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +112 -12
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +54 -2
- package/node_modules/@agents-can-communicate/installer/src/shell-bootstrap.mjs +210 -0
- package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
- package/node_modules/@agents-can-communicate/mcp-server/src/input-validator.mjs +79 -0
- package/node_modules/@agents-can-communicate/mcp-server/src/resources.mjs +23 -28
- package/node_modules/@agents-can-communicate/mcp-server/src/server.mjs +102 -72
- package/node_modules/@agents-can-communicate/mcp-server/src/tools.mjs +54 -97
- package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/config.mjs +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/conversations.mjs +64 -0
- package/node_modules/@agents-can-communicate/protocol/src/fields.mjs +17 -0
- package/node_modules/@agents-can-communicate/protocol/src/index.mjs +4 -1
- package/node_modules/@agents-can-communicate/protocol/src/schema.mjs +64 -90
- package/node_modules/@agents-can-communicate/protocol/src/states.mjs +13 -40
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/active-journal.mjs +230 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +77 -28
- package/node_modules/@agents-can-communicate/storage-filesystem/src/identity.mjs +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/journal.mjs +83 -35
- package/node_modules/@agents-can-communicate/storage-filesystem/src/retention.mjs +112 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-file.mjs +18 -8
- package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +68 -26
- package/node_modules/@agents-can-communicate/storage-filesystem/src/writer-mutex.mjs +113 -35
- package/package.json +20 -1
- package/node_modules/@agents-can-communicate/core/src/communication.mjs +0 -334
- package/node_modules/@agents-can-communicate/core/src/message-signals.mjs +0 -41
- package/node_modules/@agents-can-communicate/core/src/notify.mjs +0 -95
- package/node_modules/@agents-can-communicate/core/src/tasks.mjs +0 -244
- package/node_modules/@agents-can-communicate/core/src/workstreams.mjs +0 -109
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Security model
|
|
2
|
+
|
|
3
|
+
ACC connects independently controlled sessions without merging their authority. A peer can
|
|
4
|
+
send useful context, a question, or a request; its text never becomes system policy or a
|
|
5
|
+
human instruction merely because ACC transported it.
|
|
6
|
+
|
|
7
|
+
The first release coordinates processes under one local OS user. Same-user access protects
|
|
8
|
+
local transport from the network; it does not make model output trustworthy.
|
|
9
|
+
|
|
10
|
+
## Trust boundaries
|
|
11
|
+
|
|
12
|
+
1. Human instructions and approved local policy.
|
|
13
|
+
2. ACC protocol and core invariants.
|
|
14
|
+
3. Adapter facts backed by exact real-client evidence.
|
|
15
|
+
4. Peer messages and artifact references, always untrusted input.
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
graph LR
|
|
19
|
+
P["peer session — untrusted text"] --> ACC["ACC runtime"]
|
|
20
|
+
ACC --> S[("state outside repositories")]
|
|
21
|
+
ACC --> C["recipient client — own permissions"]
|
|
22
|
+
H["human authority"] --> C
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
ACC does not read raw transcripts, relay permission approvals, or start target clients. A
|
|
26
|
+
native delivery path may only offer an attributed peer envelope to an already-running,
|
|
27
|
+
user-owned session.
|
|
28
|
+
|
|
29
|
+
## Peer-content boundary
|
|
30
|
+
|
|
31
|
+
Inbound messages are rendered as structured, attributed peer data. The frame includes the
|
|
32
|
+
sender, message id, kind, obligation, and an explicit untrusted marker. The renderer
|
|
33
|
+
escapes fences, nested strings, terminal control sequences, and human output. If a body
|
|
34
|
+
cannot fit the context budget, the projection keeps the id and directs the participant to
|
|
35
|
+
`acc inbox --message <id>` instead of cutting the frame in half.
|
|
36
|
+
|
|
37
|
+
A model may still choose to follow persuasive peer text. Attribution and the recipient's
|
|
38
|
+
own instruction hierarchy are the mitigation; ACC is not a model sandbox.
|
|
39
|
+
|
|
40
|
+
## Identity and ownership
|
|
41
|
+
|
|
42
|
+
- Participant identity is the address; session identity is one current client opening.
|
|
43
|
+
- Mutating calls prove their owner with the session generation.
|
|
44
|
+
- A stale process cannot renew or release records owned by a newer generation.
|
|
45
|
+
- Inbox, reply, and acknowledgement validate the recipient's participant id.
|
|
46
|
+
- One participant cannot advance another participant's receipt.
|
|
47
|
+
- MCP identity derives from user-owned server launch configuration, never from untrusted
|
|
48
|
+
`initialize` or `clientInfo` fields.
|
|
49
|
+
|
|
50
|
+
The `managed` lifecycle label means hooks can report ACC presence transitions. It never
|
|
51
|
+
grants ACC process-control authority.
|
|
52
|
+
|
|
53
|
+
## Durable and delivery integrity
|
|
54
|
+
|
|
55
|
+
Messages and queued receipts commit before delivery is attempted. Receipt words correspond
|
|
56
|
+
to observations:
|
|
57
|
+
|
|
58
|
+
- `offered` only after bytes cross ACC's boundary or a certified client accepts the call;
|
|
59
|
+
- `retrieved` only after the participant receives the body through inbox or equally strong
|
|
60
|
+
evidence;
|
|
61
|
+
- `acknowledged` only after that participant acknowledges or replies.
|
|
62
|
+
|
|
63
|
+
There is no model-attention claim and no public state override. Failed acceleration leaves
|
|
64
|
+
the message queued and records only a closed safe error code. Diagnostics and offer events
|
|
65
|
+
never copy the peer body.
|
|
66
|
+
|
|
67
|
+
A future live adapter must match exact passing evidence, one unexpired generation-bound
|
|
68
|
+
binding, and the recipient's opt-in policy. Opaque endpoint references remain inside the
|
|
69
|
+
adapter and outside repositories. Current Codex and Claude native captures failed, so no
|
|
70
|
+
live transport is enabled.
|
|
71
|
+
|
|
72
|
+
## Claims
|
|
73
|
+
|
|
74
|
+
Claims are advisory unless every live participant exposes a certified guard for the
|
|
75
|
+
relevant mutation path. Even guarded claims do not stop unrelated processes, runtime-built
|
|
76
|
+
paths, or tool calls the client never presents to the hook. Force release requires explicit
|
|
77
|
+
authority and records actor and reason.
|
|
78
|
+
|
|
79
|
+
File resources are canonicalized and kept inside workspace roots. Misleading glob forms
|
|
80
|
+
are refused. Hooks fail open on timeout or coordination failure so ACC cannot stop a client
|
|
81
|
+
from operating merely because its own state is unavailable.
|
|
82
|
+
|
|
83
|
+
## Filesystem and installation
|
|
84
|
+
|
|
85
|
+
- Runtime state, bindings, sockets, and install ownership records stay outside repositories.
|
|
86
|
+
- Managed paths are checked for containment and symlink escape.
|
|
87
|
+
- Store publication uses atomic no-replace behavior, journaling, and writer locks.
|
|
88
|
+
- Corrupt or incompatible store versions fail closed before mutation.
|
|
89
|
+
- Client installers preserve unrelated settings and record content hashes.
|
|
90
|
+
- Uninstall removes only bytes still matching what ACC wrote.
|
|
91
|
+
- Tokens, credentials, and environment contents are never copied into ACC or project config.
|
|
92
|
+
|
|
93
|
+
## Data collected
|
|
94
|
+
|
|
95
|
+
ACC stores participant/session identity, presence, one-line intent, explicit claims,
|
|
96
|
+
explicit messages and structured handoffs, per-recipient receipts, artifact references,
|
|
97
|
+
and coordination events. It excludes complete prompts, assistant responses, raw
|
|
98
|
+
transcripts, secrets, environment variables, and unrelated files.
|
|
99
|
+
|
|
100
|
+
## Threat scenarios
|
|
101
|
+
|
|
102
|
+
| Threat | Prevention and detection | Residual |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| Peer message impersonates system authority | Attributed untrusted frame; fence and terminal escaping; injection tests | A model can still make a poor judgment about untrusted data |
|
|
105
|
+
| Large body buries a claim conflict | Fixed attention priority and bounded whole-frame projection | Very small budgets omit lower-priority roster detail |
|
|
106
|
+
| Stale session mutates new ownership | Exact generation on mutations; conflict error on mismatch | A same-user attacker with runtime access is out of scope |
|
|
107
|
+
| Symlink or traversal escapes a managed root | Per-segment containment, no-follow reads, closed config schema | Host filesystem compromise is out of scope |
|
|
108
|
+
| Claim denial of service | Leases, visible owner, explicit authority release | Deliberate abuse by a trusted local peer is social |
|
|
109
|
+
| Installer removes user configuration | Content-hashed ownership and byte comparison | User must remove modified leftovers manually |
|
|
110
|
+
| False delivery claim | Record-first order, transport-owned `offered`, recipient-owned retrieval/ack, mutation tests | Crash after offer before commit can cause duplicate display |
|
|
111
|
+
| Native endpoint leaks | Ephemeral opaque reference, user-only local endpoint, status redaction | Same-user local processes are outside the trust boundary |
|
|
112
|
+
| MCP client impersonates another session | Identity fixed by launch env, closed tool schemas | A compromised launch config already controls that client |
|
|
113
|
+
| Corrupt or v0.1 store is reinterpreted | Schema version rejection and doctor diagnostics | The maintainer must reset incompatible local state deliberately |
|
|
114
|
+
|
|
115
|
+
## Verification
|
|
116
|
+
|
|
117
|
+
The release gate executes attacks rather than trusting this page:
|
|
118
|
+
|
|
119
|
+
| Boundary | Covering tests |
|
|
120
|
+
|---|---|
|
|
121
|
+
| peer text and budget framing | `tests/security/peer-injection.test.mjs`, `packages/adapter-sdk/test/context-projector.test.mjs` |
|
|
122
|
+
| receipt ownership and truthful transitions | `packages/core/test/inbox-and-reply.test.mjs`, `receipt-offer-idempotency.test.mjs` |
|
|
123
|
+
| path, symlink, and config containment | `tests/security/storage-boundary.test.mjs`, `symlinked-workspace.test.mjs`, `claim-spelling.test.mjs` |
|
|
124
|
+
| installer ownership and restoration | `tests/security/installer.test.mjs`, `restore-every-client.test.mjs` |
|
|
125
|
+
| no hook-path network access | `tests/security/no-network-on-the-hook-path.test.mjs` |
|
|
126
|
+
| capability evidence and version downgrade | `packages/adapter-sdk/test/certification.test.mjs` |
|
|
127
|
+
|
|
128
|
+
An attacker who can rewrite the user's ACC data home or client configuration already has
|
|
129
|
+
the local rights ACC relies on. Report vulnerabilities through [SECURITY.md](../SECURITY.md).
|
|
130
|
+
|
|
131
|
+
Next: [Architecture](ARCHITECTURE.md) · [Capabilities](CAPABILITIES.md)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
Start with:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
acc doctor
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
It reports detected clients, exact versions, installation ownership, capability downgrade,
|
|
10
|
+
and the next action. Restart a client after installation because hooks load at startup.
|
|
11
|
+
|
|
12
|
+
## The second session does not appear
|
|
13
|
+
|
|
14
|
+
Run `acc status --json` in both windows and compare `workspaceId`. Common causes are an
|
|
15
|
+
already-running client that never loaded the hook, a generic MCP server launched without
|
|
16
|
+
`ACC_MCP_WORKSPACE`, or two plain directories that are not the same workspace. Codex also
|
|
17
|
+
requires plugin trust.
|
|
18
|
+
|
|
19
|
+
ACC does not launch a missing session. Open it normally after fixing the installation or
|
|
20
|
+
workspace path.
|
|
21
|
+
|
|
22
|
+
## A message stays queued
|
|
23
|
+
|
|
24
|
+
Queued means the durable message is safe; it does not mean the recipient model saw it.
|
|
25
|
+
Have the recipient run:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
acc inbox
|
|
29
|
+
acc inbox --message message_x
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Certified next-turn delivery waits for that client's next normal prompt. Grok, generic MCP,
|
|
33
|
+
unknown client versions, and other platforms poll inbox. A reply acknowledges the original
|
|
34
|
+
automatically; `acc ack` is for acknowledgement-only messages.
|
|
35
|
+
|
|
36
|
+
## I enabled live delivery but got fallback
|
|
37
|
+
|
|
38
|
+
`--delivery actionable|all` is recipient policy, not a capability switch. No current
|
|
39
|
+
adapter has passing native live-push certification:
|
|
40
|
+
|
|
41
|
+
- Codex 0.152.0: the existing app-server control socket was absent; ACC did not start one.
|
|
42
|
+
- Claude Code 2.1.252: the capture stopped at the development-channel warning before the
|
|
43
|
+
ACC child process started.
|
|
44
|
+
|
|
45
|
+
The installer therefore keeps effective policy off and reports exact-certified next-turn
|
|
46
|
+
or inbox fallback. This is expected, not a partially working live route.
|
|
47
|
+
|
|
48
|
+
## Codex plugin is listed but inactive
|
|
49
|
+
|
|
50
|
+
Trust the plugin in Codex, then restart it. Until the client accepts that trust step, hooks
|
|
51
|
+
do not run. `acc doctor` reports the installed cache copy and missing activation separately.
|
|
52
|
+
|
|
53
|
+
## Gemini does not guard a write
|
|
54
|
+
|
|
55
|
+
Default and `plan` modes expose no write tool to the model. `auto_edit` exposes edit tools;
|
|
56
|
+
shell availability depends on approval mode. Only Gemini CLI 0.57.0 on `darwin-arm64` has
|
|
57
|
+
package-shipped delivery certification; other versions still use inbox.
|
|
58
|
+
|
|
59
|
+
From 0.55 onwards there is a quieter cause with the same symptom: an untrusted folder. The
|
|
60
|
+
client prints `Approval mode overridden to "default" because the current folder is not
|
|
61
|
+
trusted` and keeps going, and the default mode has no write or shell tool to guard - so the
|
|
62
|
+
guard never fires and the mode you passed appears to have been ignored. Trust the folder,
|
|
63
|
+
or start the session somewhere trusted.
|
|
64
|
+
|
|
65
|
+
## Grok shows no injected message
|
|
66
|
+
|
|
67
|
+
Grok 1.0.13 discarded UserPromptSubmit context in the real capture. Its next-turn and guard
|
|
68
|
+
capabilities remain false. Use `acc status` and `acc inbox`; do not wait for a banner.
|
|
69
|
+
|
|
70
|
+
## Kimi sessions remain in history
|
|
71
|
+
|
|
72
|
+
Kimi 0.36.1 emits a heartbeat but prompt-mode `SessionEnd` was not observed. An exited
|
|
73
|
+
session becomes offline by presence rules rather than a clean end signal. The default
|
|
74
|
+
status hides offline sessions; `acc status --all` intentionally retains attribution and
|
|
75
|
+
checkout history.
|
|
76
|
+
|
|
77
|
+
## A write was blocked
|
|
78
|
+
|
|
79
|
+
Exit code `5` names the overlapping claim and owner. Ask the owner or wait for release. If
|
|
80
|
+
an explicit authority has decided to replace it:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
acc release --claim claim_x --authority "agreed with models" \
|
|
84
|
+
--reason "handing over the file"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Protection says advisory
|
|
88
|
+
|
|
89
|
+
At least one live participant cannot be stopped through a certified hook, or at least one
|
|
90
|
+
claim asked only for advisory enforcement. This includes generic MCP and Grok. Respect the
|
|
91
|
+
claim manually; `guarded` would be a false room-wide promise.
|
|
92
|
+
|
|
93
|
+
## Store version is incompatible
|
|
94
|
+
|
|
95
|
+
v0.2 rejects v0.1 state and provides no migration or automatic deletion. `acc doctor`
|
|
96
|
+
identifies the incompatible data path. Back it up or remove it deliberately only after
|
|
97
|
+
confirming no needed coordination state remains.
|
|
98
|
+
|
|
99
|
+
## Uninstall left files
|
|
100
|
+
|
|
101
|
+
ACC removes only bytes that still match its install record. Anything edited by the user is
|
|
102
|
+
reported and retained. Remove those leftovers manually if desired.
|
|
103
|
+
|
|
104
|
+
Runtime state is outside the repository by design. `ACC_DATA_HOME` can relocate it, but ACC
|
|
105
|
+
refuses a path inside any workspace root.
|
|
106
|
+
|
|
107
|
+
Next: [Getting started](GETTING_STARTED.md) · [Capabilities](CAPABILITIES.md) ·
|
|
108
|
+
[Configuration](CONFIGURATION.md)
|
package/docs/WHY_ACC.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Why ACC
|
|
2
|
+
|
|
3
|
+
ACC exists for a narrow situation: you already have several AI sessions open, each with
|
|
4
|
+
its own client, context, permissions, checkout, and human direction, and they need to
|
|
5
|
+
communicate without becoming workers owned by one controller.
|
|
6
|
+
|
|
7
|
+
That boundary matters. Systems that create an agent team can schedule work because they
|
|
8
|
+
own the workers. ACC deliberately does not. It gives independent sessions a local durable
|
|
9
|
+
place to discover peers, ask questions, answer in threads, acknowledge messages, reserve
|
|
10
|
+
resources, and hand off context. If every session closes, the durable records still tell
|
|
11
|
+
the truth.
|
|
12
|
+
|
|
13
|
+
## Does it fit?
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TD
|
|
17
|
+
A["Do you independently open several sessions?"] -->|no| N["ACC adds little and stays quiet"]
|
|
18
|
+
A -->|yes| B["Must they keep separate ownership and permissions?"]
|
|
19
|
+
B -->|no| M["A managed agent runtime may fit better"]
|
|
20
|
+
B -->|yes| C["Do they need direct questions, durable replies, or claim awareness?"]
|
|
21
|
+
C -->|yes| Y["ACC fits this workflow"]
|
|
22
|
+
C -->|no| N
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The strongest adoption signal is not installation or a large roster. It is a second
|
|
26
|
+
independently opened session completing a useful acknowledged interaction without the
|
|
27
|
+
human copying peer message content.
|
|
28
|
+
|
|
29
|
+
## What is different
|
|
30
|
+
|
|
31
|
+
| Need | ACC's boundary |
|
|
32
|
+
|---|---|
|
|
33
|
+
| Keep sessions you already opened | Hooks or MCP add participation; ACC never starts replacement workers. |
|
|
34
|
+
| Mix clients and worktrees | One repository maps to one local workspace while each session keeps its checkout identity. Git is optional. |
|
|
35
|
+
| Ask without granting authority | Messages are attributed untrusted data. A request expects a reply but is not an order. |
|
|
36
|
+
| Recover after compaction or restart | Messages and receipts commit before delivery; participant addressing survives when the participant id is stable. |
|
|
37
|
+
| Avoid overlapping edits | Intent warns; narrow claims may advise or guard, depending on every live client's measured capability. |
|
|
38
|
+
| Trust delivery language | Recorded, queued, offered, retrieved, and acknowledged are separate observable facts. |
|
|
39
|
+
| Keep it private and removable | State is local and outside repositories; transcripts are excluded; uninstall preserves user edits. |
|
|
40
|
+
|
|
41
|
+
Claims support communication; they are not the product's center. The useful loop is ask,
|
|
42
|
+
retrieve, reply, acknowledge, and hand off. A claim merely makes “I am changing this”
|
|
43
|
+
actionable before two sessions collide.
|
|
44
|
+
|
|
45
|
+
## Choose another layer when
|
|
46
|
+
|
|
47
|
+
Choose a managed runtime if you want the system to create agents, assign execution state,
|
|
48
|
+
select models, spend token budgets, or control process lifecycle. Choose a tracker when
|
|
49
|
+
you need organizational planning. Choose a hosted service when participants must
|
|
50
|
+
coordinate across machines.
|
|
51
|
+
|
|
52
|
+
ACC also does not merge model memory, read raw conversations, approve tools, operate CI,
|
|
53
|
+
or make guarded claims immune to unrelated local processes. Current native live push is
|
|
54
|
+
uncertified, so workflows that require immediate interruption of an already-running model
|
|
55
|
+
should not depend on ACC today.
|
|
56
|
+
|
|
57
|
+
If the sessions should remain yours and simply stop working in isolation, that is the
|
|
58
|
+
product ACC is designed to be.
|
|
59
|
+
|
|
60
|
+
Next: [Getting started](GETTING_STARTED.md) · [Concepts](CONCEPTS.md) ·
|
|
61
|
+
[Capabilities](CAPABILITIES.md)
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# ACC documentation
|
|
2
|
+
|
|
3
|
+
ACC connects independently opened AI sessions so they can discover peers and communicate
|
|
4
|
+
without becoming one managed agent team. This map starts with the useful interaction, then
|
|
5
|
+
separates protocol truth from adapter reach.
|
|
6
|
+
|
|
7
|
+
## Evaluate
|
|
8
|
+
|
|
9
|
+
1. [Why ACC](WHY_ACC.md) — the product boundary and when a managed runtime fits better.
|
|
10
|
+
2. [Concepts](CONCEPTS.md) — peers, durable threads, receipts, intent, and claims.
|
|
11
|
+
3. [How ACC works](HOW_IT_WORKS.md) — the end-to-end path from client hook and workspace
|
|
12
|
+
identity through durable storage, delivery fallback, reply, and acknowledgement.
|
|
13
|
+
4. [Capabilities](CAPABILITIES.md) — certified support, current reachability, recipient
|
|
14
|
+
policy, fallback, and limitations beside each adapter.
|
|
15
|
+
|
|
16
|
+
## Use it
|
|
17
|
+
|
|
18
|
+
1. [Getting started](GETTING_STARTED.md) — two user-opened sessions complete one useful
|
|
19
|
+
acknowledged question-and-answer interaction.
|
|
20
|
+
2. [CLI](CLI.md) — exact commands, flags, result shapes, and exit codes.
|
|
21
|
+
3. [MCP](MCP.md) — durable polling for clients without a native adapter.
|
|
22
|
+
4. [Configuration](CONFIGURATION.md) — optional workspace identity and policy.
|
|
23
|
+
5. [Troubleshooting](TROUBLESHOOTING.md) — symptoms, exact downgrades, and fixes.
|
|
24
|
+
|
|
25
|
+
## Understand and extend it
|
|
26
|
+
|
|
27
|
+
- [Protocol](PROTOCOL.md) — message envelope, thread rules, receipt lifecycle, handoffs,
|
|
28
|
+
bindings, and the clean v0.2 store break.
|
|
29
|
+
- [Architecture](ARCHITECTURE.md) — record-first flow, package boundaries, router, storage,
|
|
30
|
+
and hooks.
|
|
31
|
+
- [Security model](SECURITY_MODEL.md) — untrusted peer content, delivery integrity,
|
|
32
|
+
filesystem boundaries, and executable attack tests.
|
|
33
|
+
- [Adapter authoring](ADAPTER_AUTHORING.md) — capability evidence, hook contracts, and
|
|
34
|
+
installation ownership.
|
|
35
|
+
- [Glossary](GLOSSARY.md) — each public term in one line.
|
|
36
|
+
|
|
37
|
+
## Project work
|
|
38
|
+
|
|
39
|
+
- [Contributing](https://github.com/automatis-tools/agents-can-communicate/blob/main/AGENTS.md) — invariants and the mutation-proof gate.
|
|
40
|
+
- [Design decisions](DESIGN_DECISIONS.md) — architectural decisions and reversals.
|
|
41
|
+
- [Releasing](RELEASING.md) — packed-artifact verification.
|
|
42
|
+
|
|
43
|
+
Runtime state and raw transcripts are not documentation artifacts and never belong in the
|
|
44
|
+
repository.
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
{
|
|
2
|
+
"evidence": [
|
|
3
|
+
{
|
|
4
|
+
"client": "claude-code",
|
|
5
|
+
"version": "2.1.233",
|
|
6
|
+
"platform": "darwin-arm64",
|
|
7
|
+
"observedAt": "2026-08-16",
|
|
8
|
+
"capability": "lifecycle.sessionStart",
|
|
9
|
+
"fixture": "fixtures/SessionStart.json",
|
|
10
|
+
"idleBehavior": "fires when a session starts",
|
|
11
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
12
|
+
"provenanceId": "session-start",
|
|
13
|
+
"busyBehavior": "fires before the first model turn",
|
|
14
|
+
"authorityLevel": "advisory",
|
|
15
|
+
"limitations": [
|
|
16
|
+
"capture used a one-session --plugin-dir"
|
|
17
|
+
],
|
|
18
|
+
"result": "pass"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"client": "claude-code",
|
|
22
|
+
"version": "2.1.233",
|
|
23
|
+
"platform": "darwin-arm64",
|
|
24
|
+
"observedAt": "2026-08-16",
|
|
25
|
+
"capability": "lifecycle.sessionEnd",
|
|
26
|
+
"fixture": "fixtures/SessionEnd.json",
|
|
27
|
+
"idleBehavior": "fires when a session exits",
|
|
28
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
29
|
+
"provenanceId": "session-end",
|
|
30
|
+
"busyBehavior": "does not run until the session exits",
|
|
31
|
+
"authorityLevel": "advisory",
|
|
32
|
+
"limitations": [
|
|
33
|
+
"cannot write a handoff after the model has stopped"
|
|
34
|
+
],
|
|
35
|
+
"result": "pass"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"client": "claude-code",
|
|
39
|
+
"version": "2.1.233",
|
|
40
|
+
"platform": "darwin-arm64",
|
|
41
|
+
"observedAt": "2026-08-16",
|
|
42
|
+
"capability": "context.beforeTurnInjection",
|
|
43
|
+
"fixture": "fixtures/UserPromptSubmit.json",
|
|
44
|
+
"idleBehavior": "waits for the next user prompt",
|
|
45
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
46
|
+
"provenanceId": "user-prompt-submit",
|
|
47
|
+
"busyBehavior": "does not interrupt an in-progress turn",
|
|
48
|
+
"authorityLevel": "context",
|
|
49
|
+
"limitations": [
|
|
50
|
+
"requires the hookSpecificOutput additionalContext envelope"
|
|
51
|
+
],
|
|
52
|
+
"result": "pass"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"client": "claude-code",
|
|
56
|
+
"version": "2.1.233",
|
|
57
|
+
"platform": "darwin-arm64",
|
|
58
|
+
"observedAt": "2026-08-16",
|
|
59
|
+
"capability": "guards.beforeWrite",
|
|
60
|
+
"fixture": "fixtures/PreToolUse-Edit.json",
|
|
61
|
+
"idleBehavior": "no write exists to guard",
|
|
62
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
63
|
+
"provenanceId": "pre-tool-use-edit",
|
|
64
|
+
"busyBehavior": "denies a file edit before disk mutation",
|
|
65
|
+
"authorityLevel": "blocking",
|
|
66
|
+
"limitations": [
|
|
67
|
+
"runtime writes are outside the hook boundary"
|
|
68
|
+
],
|
|
69
|
+
"result": "pass"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"client": "claude-code",
|
|
73
|
+
"version": "2.1.233",
|
|
74
|
+
"platform": "darwin-arm64",
|
|
75
|
+
"observedAt": "2026-08-16",
|
|
76
|
+
"capability": "guards.beforeShell",
|
|
77
|
+
"fixture": "fixtures/PreToolUse.json",
|
|
78
|
+
"idleBehavior": "no shell call exists to guard",
|
|
79
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
80
|
+
"provenanceId": "pre-tool-use-bash",
|
|
81
|
+
"busyBehavior": "denies a Bash call before execution",
|
|
82
|
+
"authorityLevel": "blocking",
|
|
83
|
+
"limitations": [
|
|
84
|
+
"only tool calls reaching PreToolUse are guarded"
|
|
85
|
+
],
|
|
86
|
+
"result": "pass"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"client": "claude-code",
|
|
90
|
+
"version": "2.1.233",
|
|
91
|
+
"platform": "darwin-arm64",
|
|
92
|
+
"observedAt": "2026-08-16",
|
|
93
|
+
"capability": "delivery.nextTurn",
|
|
94
|
+
"fixture": "fixtures/UserPromptSubmit.json",
|
|
95
|
+
"idleBehavior": "offers complete peer messages at the next prompt",
|
|
96
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
97
|
+
"provenanceId": "user-prompt-submit",
|
|
98
|
+
"busyBehavior": "does not interrupt an in-progress turn",
|
|
99
|
+
"authorityLevel": "context",
|
|
100
|
+
"limitations": [
|
|
101
|
+
"delivery requires the next normal user turn"
|
|
102
|
+
],
|
|
103
|
+
"result": "pass"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"client": "claude-code",
|
|
107
|
+
"version": "2.1.252",
|
|
108
|
+
"platform": "darwin-arm64",
|
|
109
|
+
"observedAt": "2026-09-01T16:17:06Z",
|
|
110
|
+
"capability": "delivery.livePush",
|
|
111
|
+
"fixture": "fixtures/delivery/claude-code-2.1.252.json",
|
|
112
|
+
"idleBehavior": "unobserved",
|
|
113
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
114
|
+
"provenanceId": "native-delivery-2-1-252",
|
|
115
|
+
"busyBehavior": "unobserved",
|
|
116
|
+
"authorityLevel": "none",
|
|
117
|
+
"limitations": [
|
|
118
|
+
"Claude Code displayed the development-channel security warning and the operator did not accept it",
|
|
119
|
+
"Claude Code did not spawn the acc-spike MCP child and the Unix-domain socket was never created",
|
|
120
|
+
"idle, busy, reply, duplicate, and fallback branches were not observed"
|
|
121
|
+
],
|
|
122
|
+
"result": "fail"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"client": "claude-code",
|
|
126
|
+
"version": "2.1.252",
|
|
127
|
+
"platform": "darwin-arm64",
|
|
128
|
+
"observedAt": "2026-09-01T16:17:06Z",
|
|
129
|
+
"capability": "delivery.replyRoute",
|
|
130
|
+
"fixture": "fixtures/delivery/claude-code-2.1.252.json",
|
|
131
|
+
"idleBehavior": "unobserved",
|
|
132
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
133
|
+
"provenanceId": "native-delivery-2-1-252",
|
|
134
|
+
"busyBehavior": "unobserved",
|
|
135
|
+
"authorityLevel": "none",
|
|
136
|
+
"limitations": [
|
|
137
|
+
"Claude Code displayed the development-channel security warning and the operator did not accept it",
|
|
138
|
+
"Claude Code did not spawn the acc-spike MCP child and the Unix-domain socket was never created",
|
|
139
|
+
"idle, busy, reply, duplicate, and fallback branches were not observed"
|
|
140
|
+
],
|
|
141
|
+
"result": "fail"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"client": "claude-code",
|
|
145
|
+
"version": "2.1.258",
|
|
146
|
+
"platform": "darwin-arm64",
|
|
147
|
+
"observedAt": "2026-09-02T21:20:11.676Z",
|
|
148
|
+
"capability": "delivery.livePush",
|
|
149
|
+
"fixture": "fixtures/delivery/claude-code-2.1.258.json",
|
|
150
|
+
"idleBehavior": "offered",
|
|
151
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
152
|
+
"provenanceId": "native-delivery-2-1-258",
|
|
153
|
+
"busyBehavior": "queued_after_turn",
|
|
154
|
+
"authorityLevel": "experimental",
|
|
155
|
+
"limitations": [
|
|
156
|
+
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
157
|
+
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
158
|
+
"the plugin .mcp.json must live in the marketplace source copy; the plugin cache copy alone is not read",
|
|
159
|
+
"acc_reply routed through the spike's explicit tool call; the spike created no durable ACC answer record",
|
|
160
|
+
"presentation after the busy turn was observed by the operator; the channel log records the write at 21:18:45Z and the explicit reply at 21:19:21Z"
|
|
161
|
+
],
|
|
162
|
+
"result": "pass"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"client": "claude-code",
|
|
166
|
+
"version": "2.1.258",
|
|
167
|
+
"platform": "darwin-arm64",
|
|
168
|
+
"observedAt": "2026-09-02T21:20:11.676Z",
|
|
169
|
+
"capability": "delivery.replyRoute",
|
|
170
|
+
"fixture": "fixtures/delivery/claude-code-2.1.258.json",
|
|
171
|
+
"idleBehavior": "offered",
|
|
172
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
173
|
+
"provenanceId": "native-delivery-2-1-258",
|
|
174
|
+
"busyBehavior": "queued_after_turn",
|
|
175
|
+
"authorityLevel": "experimental",
|
|
176
|
+
"limitations": [
|
|
177
|
+
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
178
|
+
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
179
|
+
"the plugin .mcp.json must live in the marketplace source copy; the plugin cache copy alone is not read",
|
|
180
|
+
"acc_reply routed through the spike's explicit tool call; the spike created no durable ACC answer record",
|
|
181
|
+
"presentation after the busy turn was observed by the operator; the channel log records the write at 21:18:45Z and the explicit reply at 21:19:21Z"
|
|
182
|
+
],
|
|
183
|
+
"result": "pass"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"client": "claude-code",
|
|
187
|
+
"version": "2.1.260",
|
|
188
|
+
"platform": "darwin-arm64",
|
|
189
|
+
"observedAt": "2026-09-04T03:41:29.688Z",
|
|
190
|
+
"capability": "delivery.livePush",
|
|
191
|
+
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
192
|
+
"idleBehavior": "offered",
|
|
193
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
194
|
+
"provenanceId": "native-delivery-2-1-260",
|
|
195
|
+
"busyBehavior": "queued_after_turn",
|
|
196
|
+
"authorityLevel": "experimental",
|
|
197
|
+
"limitations": [
|
|
198
|
+
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
199
|
+
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
200
|
+
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
201
|
+
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
202
|
+
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
203
|
+
],
|
|
204
|
+
"result": "pass"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"client": "claude-code",
|
|
208
|
+
"version": "2.1.260",
|
|
209
|
+
"platform": "darwin-arm64",
|
|
210
|
+
"observedAt": "2026-09-04T03:41:29.688Z",
|
|
211
|
+
"capability": "delivery.replyRoute",
|
|
212
|
+
"fixture": "fixtures/delivery/claude-code-2.1.260.json",
|
|
213
|
+
"idleBehavior": "offered",
|
|
214
|
+
"provenance": "fixtures/certification-provenance.json",
|
|
215
|
+
"provenanceId": "native-delivery-2-1-260",
|
|
216
|
+
"busyBehavior": "queued_after_turn",
|
|
217
|
+
"authorityLevel": "experimental",
|
|
218
|
+
"limitations": [
|
|
219
|
+
"captured on darwin-arm64 only; Linux and Windows remain uncaptured",
|
|
220
|
+
"the vendor development-channel warning stayed visible and was accepted by the operator by hand",
|
|
221
|
+
"two ordinary sessions in one workspace, each bound to its own client process; the earlier 2.1.259 attempt is what exposed the channel binding another session identity, and this run is the verification of that fix",
|
|
222
|
+
"duplicate was observed as one logical message id and one native offer: the repeated send took the durable path, so the channel was never asked to notify twice, and exactly one answer was recorded",
|
|
223
|
+
"busy was observed by the operator: the running turn completed before the channel presented the message, and the session named that order in its own answer"
|
|
224
|
+
],
|
|
225
|
+
"result": "pass"
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
}
|
package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/PreToolUse-Edit.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "a96cb852-40af-4406-978b-edd9c0affdd1",
|
|
3
|
+
"transcript_path": "<redacted: conversation transcript>",
|
|
4
|
+
"cwd": "/tmp/example-workspace",
|
|
5
|
+
"prompt_id": "082bbc2b-f77b-4571-88ce-92a4faaf7ecd",
|
|
6
|
+
"permission_mode": "auto",
|
|
7
|
+
"effort": {
|
|
8
|
+
"level": "xhigh"
|
|
9
|
+
},
|
|
10
|
+
"hook_event_name": "PreToolUse",
|
|
11
|
+
"tool_name": "Edit",
|
|
12
|
+
"tool_input": {
|
|
13
|
+
"file_path": "/tmp/example-workspace/notes.txt",
|
|
14
|
+
"old_string": "<redacted: file contents>",
|
|
15
|
+
"new_string": "<redacted: file contents>",
|
|
16
|
+
"replace_all": false
|
|
17
|
+
},
|
|
18
|
+
"tool_use_id": "toolu_0000000000000000000000"
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "a96cb852-40af-4406-978b-edd9c0affdd1",
|
|
3
|
+
"transcript_path": "<redacted: conversation transcript>",
|
|
4
|
+
"cwd": "/tmp/example-workspace",
|
|
5
|
+
"prompt_id": "8b56d896-013c-4ab8-845b-f9670ac34386",
|
|
6
|
+
"permission_mode": "bypassPermissions",
|
|
7
|
+
"effort": {
|
|
8
|
+
"level": "xhigh"
|
|
9
|
+
},
|
|
10
|
+
"hook_event_name": "PreToolUse",
|
|
11
|
+
"tool_name": "Bash",
|
|
12
|
+
"tool_input": {
|
|
13
|
+
"command": "echo probe",
|
|
14
|
+
"description": "Run echo probe"
|
|
15
|
+
},
|
|
16
|
+
"tool_use_id": "toolu_01DwntPqjB3f7otHzHhGoFGH"
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "a96cb852-40af-4406-978b-edd9c0affdd1",
|
|
3
|
+
"transcript_path": "<redacted: conversation transcript>",
|
|
4
|
+
"cwd": "/tmp/example-workspace",
|
|
5
|
+
"prompt_id": "8b56d896-013c-4ab8-845b-f9670ac34386",
|
|
6
|
+
"hook_event_name": "SessionEnd",
|
|
7
|
+
"reason": "other"
|
|
8
|
+
}
|
package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/UserPromptSubmit.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "a96cb852-40af-4406-978b-edd9c0affdd1",
|
|
3
|
+
"transcript_path": "<redacted: conversation transcript>",
|
|
4
|
+
"cwd": "/tmp/example-workspace",
|
|
5
|
+
"prompt_id": "8b56d896-013c-4ab8-845b-f9670ac34386",
|
|
6
|
+
"permission_mode": "bypassPermissions",
|
|
7
|
+
"hook_event_name": "UserPromptSubmit",
|
|
8
|
+
"prompt": "<redacted: user prompt>"
|
|
9
|
+
}
|