agents-can-communicate 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +91 -81
  2. package/SECURITY.md +7 -4
  3. package/bin/acc-bootstrap.mjs +56 -0
  4. package/bin/acc-claude-channel.mjs +177 -0
  5. package/bin/acc.mjs +7 -2
  6. package/docs/ADAPTER_AUTHORING.md +57 -21
  7. package/docs/ARCHITECTURE.md +23 -15
  8. package/docs/CAPABILITIES.md +51 -18
  9. package/docs/CLI.md +31 -13
  10. package/docs/CONCEPTS.md +91 -94
  11. package/docs/CONFIGURATION.md +33 -23
  12. package/docs/DESIGN_DECISIONS.md +8 -4
  13. package/docs/GETTING_STARTED.md +76 -100
  14. package/docs/GLOSSARY.md +4 -4
  15. package/docs/HOW_IT_WORKS.md +163 -0
  16. package/docs/MCP.md +8 -8
  17. package/docs/PROTOCOL.md +13 -8
  18. package/docs/RELEASING.md +112 -82
  19. package/docs/SECURITY_MODEL.md +13 -8
  20. package/docs/TROUBLESHOOTING.md +30 -12
  21. package/docs/WHY_ACC.md +18 -16
  22. package/docs/index.md +26 -16
  23. package/node_modules/@agents-can-communicate/adapter-claude-code/certification.json +196 -46
  24. package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/certification-provenance.json +237 -45
  25. package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.252.json +3 -1
  26. package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.258.json +23 -0
  27. package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.260.json +23 -0
  28. package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +5 -2
  29. package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/.mcp.json +8 -0
  30. package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +10 -6
  31. package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +34 -2
  32. package/node_modules/@agents-can-communicate/adapter-claude-code/src/channel.mjs +377 -0
  33. package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +27 -7
  34. package/node_modules/@agents-can-communicate/adapter-claude-code/src/native-delivery.mjs +229 -0
  35. package/node_modules/@agents-can-communicate/adapter-codex/certification.json +38 -5
  36. package/node_modules/@agents-can-communicate/adapter-codex/fixtures/certification-provenance.json +171 -38
  37. package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.0.json +3 -1
  38. package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.1-remote-workspace.json +25 -0
  39. package/node_modules/@agents-can-communicate/adapter-codex/package.json +4 -2
  40. package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +9 -5
  41. package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +42 -7
  42. package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +121 -0
  43. package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +151 -0
  44. package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +192 -0
  45. package/node_modules/@agents-can-communicate/adapter-gemini-cli/certification.json +44 -28
  46. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
  47. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +9 -5
  48. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeAgent.json → BeforeAgent-0.57.0.json} +2 -2
  49. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeTool.json → BeforeTool-0.57.0.json} +2 -2
  50. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{BeforeTool-shell.json → BeforeTool-shell-0.57.0.json} +2 -2
  51. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{SessionEnd.json → SessionEnd-0.57.0.json} +2 -2
  52. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/{SessionStart.json → SessionStart-0.57.0.json} +2 -2
  53. package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/certification-provenance.json +266 -39
  54. package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +6 -6
  55. package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +25 -11
  56. package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
  57. package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +9 -5
  58. package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +3 -1
  59. package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
  60. package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +9 -5
  61. package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
  62. package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +18 -0
  63. package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +2 -0
  64. package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +6 -2
  65. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-activation.mjs +76 -0
  66. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +202 -0
  67. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-vocabulary.mjs +101 -0
  68. package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +17 -2
  69. package/node_modules/@agents-can-communicate/cli/package.json +1 -1
  70. package/node_modules/@agents-can-communicate/cli/src/args.mjs +2 -2
  71. package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +67 -5
  72. package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +133 -11
  73. package/node_modules/@agents-can-communicate/core/package.json +1 -1
  74. package/node_modules/@agents-can-communicate/core/src/conversations.mjs +41 -1
  75. package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +52 -2
  76. package/node_modules/@agents-can-communicate/core/src/service.mjs +10 -0
  77. package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
  78. package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +26 -12
  79. package/node_modules/@agents-can-communicate/hook-runner/package.json +4 -2
  80. package/node_modules/@agents-can-communicate/hook-runner/src/native-binding.mjs +90 -0
  81. package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +123 -90
  82. package/node_modules/@agents-can-communicate/installer/package.json +4 -2
  83. package/node_modules/@agents-can-communicate/installer/src/apply.mjs +48 -4
  84. package/node_modules/@agents-can-communicate/installer/src/bootstrap-runtime.mjs +144 -0
  85. package/node_modules/@agents-can-communicate/installer/src/detect.mjs +72 -3
  86. package/node_modules/@agents-can-communicate/installer/src/index.mjs +7 -0
  87. package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +161 -0
  88. package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +6 -2
  89. package/node_modules/@agents-can-communicate/installer/src/plan.mjs +41 -6
  90. package/node_modules/@agents-can-communicate/installer/src/shell-bootstrap.mjs +210 -0
  91. package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
  92. package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
  93. package/node_modules/@agents-can-communicate/protocol/src/fields.mjs +17 -0
  94. package/node_modules/@agents-can-communicate/protocol/src/schema.mjs +18 -3
  95. package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
  96. package/package.json +2 -1
package/docs/PROTOCOL.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Protocol
2
2
 
3
- The protocol is the vendor-neutral contract shared by core, CLI, MCP, storage, and every
4
- adapter. Version 0.2 uses store schema version `3` and deliberately rejects v0.1 state.
5
- There is no compatibility reader, conversion, archive path, or automatic deletion.
3
+ Use this page when implementing or checking a boundary shared by core, CLI, MCP, storage,
4
+ and adapters. Protocol version 0.2 uses store schema version `3` and deliberately rejects
5
+ v0.1 state. There is no compatibility reader, conversion, archive path, or automatic
6
+ deletion.
6
7
 
7
8
  ## Durable records
8
9
 
@@ -24,7 +25,9 @@ Workspace
24
25
  ```
25
26
 
26
27
  - A workspace is one local coordination room.
27
- - A participant is the stable recipient of a message.
28
+ - A participant is the recipient address for a message. A hooked session gets a default
29
+ address derived from its client session id; only an explicitly supplied participant id
30
+ is stable across unrelated client conversations.
28
31
  - A session is one client conversation. Its unguessable generation token proves that a
29
32
  later mutation still belongs to the current opening.
30
33
 
@@ -182,13 +185,15 @@ livePolicy · opaqueEndpointRef · leaseUntil
182
185
  The recipient owns `livePolicy` because native push may start a model turn:
183
186
 
184
187
  - `off`: inbox and normal next-turn paths only;
185
- - `actionable`: questions, requests, and addressed handoffs may use live push;
188
+ - `actionable`: questions, requests, answers, decisions, and addressed handoffs may use live push;
186
189
  - `all`: every addressed kind may use live push.
187
190
 
188
191
  Default is `off`. Policy never creates a capability. The router still requires a current
189
- reachable binding, one unambiguous recipient generation, a passing exact-version
190
- certification, and adapter acceptance. The current Codex and Claude captures do not meet
191
- those requirements; all shipped native live routes therefore fall back durably.
192
+ reachable binding, one unambiguous recipient generation, supported client evidence, and
193
+ adapter acceptance. Claude Code live delivery on macOS arm64 uses a captured 2.1.258
194
+ minimum plus a current feature probe and per-session protocol handshake; it was confirmed
195
+ again on 2.1.260. Codex's queue transport was captured but withdrawn because its required
196
+ mode hides the session workspace. Every unavailable or refused route falls back durably.
192
197
 
193
198
  ## Attention and sync
194
199
 
package/docs/RELEASING.md CHANGED
@@ -1,109 +1,139 @@
1
1
  # Releasing
2
2
 
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.3.1`;
5
+ the commands derive the version from `package.json` so the filename cannot drift.
6
+
3
7
  ```mermaid
4
8
  graph LR
5
- A[npm ci] --> B[npm run check] --> C[npm test] --> D[clean candidate commit] --> E[npm pack] --> F[verify-package] --> G{approved?}
9
+ A[syntax · diff · staged-set review] --> B[candidate commit A]
10
+ B --> C[pack exact tarball]
11
+ C --> D[verify installed artifact]
12
+ D --> E[evidence commit B]
13
+ E --> F[full suite]
14
+ F --> G{maintainer approval}
6
15
  G -->|yes| H[tag · publish · release]
7
16
  G -->|no| I[stop]
8
17
  ```
9
18
 
10
- ## Build the candidate
19
+ ## Prepare candidate commit A
20
+
21
+ Commit A must contain every file npm will pack and every release gate. Start from a clean,
22
+ dedicated release worktree, update the version and candidate files, then run:
11
23
 
12
24
  ```bash
13
- npm ci
25
+ release_cache="$(mktemp -d "${TMPDIR:-/tmp}/acc-npm-cache.XXXXXX")"
26
+ candidate_dir="$(mktemp -d "${TMPDIR:-/tmp}/acc-candidate.XXXXXX")"
27
+ package_version="$(node -p "require('./package.json').version")"
28
+
29
+ env npm_config_cache="$release_cache" npm ci
14
30
  npm run check
15
- env npm_config_cache=/private/tmp/acc-npm-cache-v02 npm test
16
- git status --short
17
- git commit -m "release: prepare ACC v0.2.0"
18
- candidate_dir="$(mktemp -d /private/tmp/acc-v0.2.XXXXXX)"
19
- env npm_config_cache=/private/tmp/acc-npm-cache-v02 npm pack --pack-destination "$candidate_dir"
20
- env npm_config_cache=/private/tmp/acc-npm-cache-v02 node scripts/verify-package.mjs \
21
- "$candidate_dir/agents-can-communicate-0.2.0.tgz"
22
31
  git diff --check
32
+ git status --short
33
+ git diff --name-only
34
+ # Repeat with every reviewed candidate path; never use `.` or `-A` here.
35
+ git add -- path/to/reviewed-file
36
+ git diff --cached --name-status
37
+ git diff --cached --check
38
+ git commit -m "release: prepare ACC v$package_version"
39
+ candidate_commit="$(git rev-parse HEAD)"
40
+ test -z "$(git status --short)"
23
41
  ```
24
42
 
25
- `verify-package.mjs` is the gate that matters. It installs the tarball into a
26
- clean directory with **no workspace anywhere** and then drives the product. The
27
- acceptance suite additionally opens independent Claude/Codex hook sessions from
28
- the installed artifact, completes both message directions, proves downgrade and
29
- restart behavior, exercises the installed MCP binary, and removes client wiring twice.
30
-
31
- Development cannot catch what this catches. Workspace symlinks are always
32
- present there, so an unbundled package imports fine right up until somebody
33
- else installs it.
34
-
35
- ## What it refuses
36
-
37
- | Refused | Why |
38
- |---|---|
39
- | `tests/`, `test/` | test suite |
40
- | unreferenced `fixtures/` | material that is not exact redacted certification evidence |
41
- | `scripts/spikes/`, `*.sock` | development probes and local endpoints |
42
- | runtime, transcript, or secret directories | machine state and private material |
43
- | `.github/`, `.githooks/`, `.agents/` | local configuration |
44
- | `*.jsonl` | looks like a transcript |
45
- | Workspaces missing from `node_modules/` | every internal import would fail |
46
-
47
- ## Record the evidence
48
-
49
- Put the tarball name, sha256, **the commit it was built from**, exact platform/client
50
- facts, fallback result, and known limitations in `docs/release-evidence/v0.2.0.md` and
51
- the current `CHANGELOG.md` release table. A release without them is a release nobody can
52
- audit later. Test count is deliberately left out: nothing verifies it, so it only
53
- decorates or, when it drifts, misleads.
54
-
55
- The commit matters because every workspace travels inside the tarball, so any
56
- change to shipped code changes the digest. A digest recorded alone goes stale
57
- on the next merge and then reads as a false claim about the current tree
58
- rather than a true one about an older commit. `verify-package.mjs` prints
59
- both on one line for exactly this reason, and refuses to imply
60
- reproducibility when the working tree is dirty:
61
-
62
- ```text
63
- PASS agents-can-communicate-0.0.0.tgz sha256 a5c8bb1d… built from 39d0dcf
64
- ```
43
+ Replace `path/to/reviewed-file` with each explicit path you just reviewed. Never use
44
+ `git add .` or `git add -A` in this procedure: an unrelated file does not become release
45
+ content merely because it shares a worktree. Check `git diff --cached --name-status` before
46
+ committing and stop if `git status --short` after the commit is not empty.
65
47
 
66
- It went stale four times in a row anyway, each caught by hand and only
67
- because someone happened to run the script. So `npm test` now checks it:
68
- `tests/acceptance/recorded-candidate.test.mjs` fails when shipped code has
69
- changed since the recorded commit, and names the files. A shallow clone that
70
- does not have the commit reports that instead of failing — the check is of
71
- the record, not of the checkout depth.
48
+ Never bypass the pre-push hook. The full suite belongs after commit B because the
49
+ recorded-candidate gate deliberately includes working-tree and committed packed changes;
50
+ before refreshed evidence exists, that one check is expected to fail.
72
51
 
73
- The candidate therefore uses two commits. Commit A contains every packed file and every
74
- release gate. Pack and verify clean commit A, then commit B records its digest and evidence
75
- only in files that are not packed. Never record a dirty-tree digest: changing a packed file
76
- after commit A means making a new candidate commit and packing again.
52
+ ## Pack and verify the exact artifact
77
53
 
78
- Native real-client tests run only where the retained capture proved that native boundary.
79
- For v0.2.0 neither Codex 0.152.0 nor Claude Code 2.1.252 did: the Codex control socket was
80
- absent and Claude stopped at the development-channel warning. Record those exact failed
81
- captures and run the packed inbox/next-turn fallback instead of promoting an unobserved
82
- native path. Windows is an explicit unsupported-platform skip, not a passing capture.
54
+ ```bash
55
+ env npm_config_cache="$release_cache" npm pack --pack-destination "$candidate_dir"
56
+ tarball="$candidate_dir/agents-can-communicate-$package_version.tgz"
57
+ shasum -a 256 "$tarball"
58
+ env npm_config_cache="$release_cache" node scripts/verify-package.mjs "$tarball"
59
+ ```
60
+
61
+ `verify-package.mjs` installs the supplied tarball into a clean directory with no workspace
62
+ symlinks, then exercises doctor, a non-Git workspace, client install/uninstall, bundled
63
+ workspaces, certification evidence, and packed documentation links. It rejects tests,
64
+ development probes, sockets, transcript-shaped data, runtime state, and unreferenced
65
+ fixtures.
83
66
 
84
- A published version's record is history and is not rewritten; later changes
85
- get a new `## Unreleased` entry at the top, checked the same way against the
86
- current tree.
67
+ When passed an existing tarball, the verifier intentionally prints `revision unknown`:
68
+ the current checkout cannot prove which commit produced arbitrary supplied bytes. Record
69
+ `$candidate_commit`, captured while the tree was clean immediately before packing, as the
70
+ artifact's source. Running the verifier without a tarball makes it pack the current tree
71
+ itself and can report that tree's revision, but it does not verify a separately saved
72
+ release artifact.
87
73
 
88
- ## Then stop
74
+ ## Record evidence in commit B
89
75
 
90
- Publishing, tagging, and cutting a GitHub release are **external mutations**.
91
- They need explicit approval from the maintainer, every time.
76
+ Write the tarball name, SHA-256, `$candidate_commit`, platform and client facts, fallback
77
+ result, and known limitations to `docs/release-evidence/v$package_version.md` and the
78
+ matching `CHANGELOG.md` section. Do not record an unverifiable test count.
92
79
 
93
- With two-factor authentication set to `auth-and-writes` — which is what `npm
94
- profile get` reports for this account — every publish needs a code, and npm
95
- does not prompt for one:
80
+ Commit B contains only evidence files that npm does not pack. If a packed file changes,
81
+ discard the candidate artifact, make a new commit A, and repeat the pack and verification.
96
82
 
97
83
  ```bash
98
- npm publish --otp=123456
84
+ git diff --check
85
+ git status --short
86
+ git add -- CHANGELOG.md "docs/release-evidence/v$package_version.md"
87
+ git diff --cached --name-status
88
+ git diff --cached --check
89
+ git commit -m "release: record ACC v$package_version candidate"
90
+ test -z "$(git status --short)"
91
+ env npm_config_cache="$release_cache" npm test
99
92
  ```
100
93
 
101
- An npm *Automation* token, or a granular token with write access, publishes
102
- without a code. A granular token scoped to selected packages cannot create a
103
- package that does not exist yet, which is the case exactly once per package.
104
- The `Release` workflow builds and verifies a candidate and uploads it as an
105
- artifact; it does not publish.
94
+ The staged-set review for commit B must name only those two evidence files. The final full
95
+ suite now sees candidate A's packed bytes plus candidate B's matching record, so candidate
96
+ freshness is a normal passing gate rather than an expected failure.
97
+
98
+ Published evidence is history. Do not rewrite it into a current capability claim; later
99
+ work belongs under `Unreleased` and gets a new candidate record.
100
+
101
+ ## Capture only capabilities you observed
102
+
103
+ Run native real-client checks only on the versions and platforms where retained fixtures
104
+ prove that boundary. Exact-version evidence governs normal-turn and guard behavior. Claude
105
+ Code live delivery instead uses its captured macOS arm64 minimum plus a current feature
106
+ probe and per-session handshake, and its vendor development-channel warning remains part
107
+ of startup. Codex's queue capture passed but live delivery was withdrawn because the
108
+ required mode hides session workspace identity.
109
+
110
+ Record failed and unavailable paths as such, then exercise the packed next-turn or inbox
111
+ fallback. An unsupported platform is an explicit skip, never a passing capture. See
112
+ [Capabilities](CAPABILITIES.md) and each adapter's `COMPATIBILITY.md` for current evidence.
113
+
114
+ ## Publish only after explicit approval
115
+
116
+ Tagging, npm publication, and creating a GitHub release are external mutations. Stop after
117
+ commit B until a maintainer explicitly approves them. The manual `Release` workflow builds
118
+ and uploads a candidate; it does not publish.
119
+
120
+ Authentication requirements depend on the credential and npm policy in effect at release
121
+ time. Consult npm's current documentation and inspect the configured route instead of
122
+ copying a historical command. For example, the v0.3.0 publication succeeded without an OTP
123
+ while `npm profile get` returned `403`; that is a historical observation, not a universal
124
+ claim about current npm authentication or credential type.
125
+
126
+ After approval, publish the verified tarball by filename. Bare `npm publish` repacks the
127
+ tree and would send different, unverified bytes.
128
+
129
+ ```bash
130
+ npm publish "$tarball"
131
+ npm view "agents-can-communicate@$package_version" dist.shasum
132
+ shasum "$tarball"
133
+ ```
106
134
 
107
- ---
135
+ Add `--otp` only when the current authenticated npm route requires it. Compare the registry
136
+ SHA-1 with the local `shasum`, allowing for registry propagation delay, before creating the
137
+ tag or release record.
108
138
 
109
- See also: [README](index.md) for navigation and [Glossary](GLOSSARY.md) for terms.
139
+ See also: [documentation map](index.md) · [Security model](SECURITY_MODEL.md)
@@ -1,11 +1,13 @@
1
1
  # Security model
2
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.
3
+ Use this model to decide which boundary owns a security claim and which failure belongs to
4
+ the client or local account instead. ACC connects independently controlled sessions
5
+ without merging their authority. A peer can send context, a question, or a request; its
6
+ text never becomes system policy or a human instruction merely because ACC transported it.
6
7
 
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.
8
+ The current local boundary coordinates processes under one OS user on one machine.
9
+ Same-user access protects local transport from the network; it does not make model output
10
+ trustworthy.
9
11
 
10
12
  ## Trust boundaries
11
13
 
@@ -64,10 +66,13 @@ There is no model-attention claim and no public state override. Failed accelerat
64
66
  the message queued and records only a closed safe error code. Diagnostics and offer events
65
67
  never copy the peer body.
66
68
 
67
- A future live adapter must match exact passing evidence, one unexpired generation-bound
69
+ A live adapter must match its declared evidence contract, one unexpired generation-bound
68
70
  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
+ adapter and outside repositories. Claude Code live delivery is currently supported on
72
+ macOS arm64 from the captured 2.1.258 minimum when a current feature probe and per-session
73
+ handshake pass; it remains experimental and off by default. Codex's queue capture passed,
74
+ but the capability was withdrawn because the required mode hides session workspace
75
+ identity.
71
76
 
72
77
  ## Claims
73
78
 
@@ -9,9 +9,14 @@ acc doctor
9
9
  It reports detected clients, exact versions, installation ownership, capability downgrade,
10
10
  and the next action. Restart a client after installation because hooks load at startup.
11
11
 
12
+ You should not need to tell an agent to use ACC as part of a normal task. If coordination
13
+ is not visible, first check integration and capability facts here. Remember that a working
14
+ integration provides awareness; it cannot guarantee that a model will find a peer relevant
15
+ or coordinate on every task.
16
+
12
17
  ## The second session does not appear
13
18
 
14
- Run `acc status --json` in both windows and compare `workspaceId`. Common causes are an
19
+ As a diagnostic, run `acc status --json` in both windows and compare `workspaceId`. Common causes are an
15
20
  already-running client that never loaded the hook, a generic MCP server launched without
16
21
  `ACC_MCP_WORKSPACE`, or two plain directories that are not the same workspace. Codex also
17
22
  requires plugin trust.
@@ -21,26 +26,33 @@ workspace path.
21
26
 
22
27
  ## A message stays queued
23
28
 
24
- Queued means the durable message is safe; it does not mean the recipient model saw it.
25
- Have the recipient run:
29
+ Queued means the durable message is safe; it does not mean the recipient model saw it. The
30
+ receiving agent can recover it with:
26
31
 
27
32
  ```bash
28
33
  acc inbox
29
34
  acc inbox --message message_x
30
35
  ```
31
36
 
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.
37
+ Certified next-turn delivery waits for that client's next normal prompt; it never wakes an
38
+ idle session. Grok, generic MCP, unknown client versions, and other platforms poll inbox. A
39
+ reply acknowledges the original automatically; `acc ack` is for acknowledgement-only
40
+ messages.
35
41
 
36
42
  ## I enabled live delivery but got fallback
37
43
 
38
- `--delivery actionable|all` is recipient policy, not a capability switch. No current
39
- adapter has passing native live-push certification:
44
+ `--delivery actionable|all` is recipient policy, not a capability switch. Only Claude Code
45
+ 2.1.258 and newer on macOS arm64 can take the live path; everything else is next-turn or
46
+ inbox by design. When Claude does fall back, it is almost always one of these:
40
47
 
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.
48
+ - **An old terminal.** The launcher is put on `PATH` by a line in `.zshrc`, which only new
49
+ interactive shells read. `which claude` must point into `…/acc/bin`.
50
+ - **A failure from the last quarter hour.** Claude caches a failed channel connection in
51
+ `~/.claude/mcp-needs-auth-cache.json` and skips reconnecting for about fifteen minutes.
52
+ Remove the `acc` entry there and start the session again.
53
+ - **A note.** Under `actionable`, only messages that need acting on are pushed; a `note`
54
+ reports `delivery_disabled` on purpose.
55
+ - **Codex.** Its live capability was withdrawn, and `acc doctor` says why.
44
56
 
45
57
  The installer therefore keeps effective policy off and reports exact-certified next-turn
46
58
  or inbox fallback. This is expected, not a partially working live route.
@@ -53,9 +65,15 @@ do not run. `acc doctor` reports the installed cache copy and missing activation
53
65
  ## Gemini does not guard a write
54
66
 
55
67
  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.37.0 on `darwin-arm64` has
68
+ shell availability depends on approval mode. Only Gemini CLI 0.57.0 on `darwin-arm64` has
57
69
  package-shipped delivery certification; other versions still use inbox.
58
70
 
71
+ From 0.55 onwards there is a quieter cause with the same symptom: an untrusted folder. The
72
+ client prints `Approval mode overridden to "default" because the current folder is not
73
+ trusted` and keeps going, and the default mode has no write or shell tool to guard - so the
74
+ guard never fires and the mode you passed appears to have been ignored. Trust the folder,
75
+ or start the session somewhere trusted.
76
+
59
77
  ## Grok shows no injected message
60
78
 
61
79
  Grok 1.0.13 discarded UserPromptSubmit context in the real capture. Its next-turn and guard
package/docs/WHY_ACC.md CHANGED
@@ -1,14 +1,15 @@
1
1
  # Why ACC
2
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
3
+ ACC fits a familiar workflow: you open several AI sessions, give each one a task, and keep
4
+ their contexts, permissions, checkouts, and models independent. The missing piece is peer
5
+ awareness. When their work overlaps, they need to ask and answer each other without making
6
+ you carry every sentence between windows.
7
+
8
+ Supported integrations provide that awareness and teach agents the coordination interface.
9
+ The agents decide whether a dependency or peer is relevant. ACC does not assign tasks or
10
+ promise that every model will coordinate; it gives independent sessions a local, durable
9
11
  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
+ resources, and hand off context.
12
13
 
13
14
  ## Does it fit?
14
15
 
@@ -22,16 +23,16 @@ flowchart TD
22
23
  C -->|no| N
23
24
  ```
24
25
 
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.
26
+ The useful result is simple: related tasks proceed without the human acting as a message
27
+ bus. One agent can ask for an interface, the other can answer in the same thread, and both
28
+ retain their own authority and context.
28
29
 
29
30
  ## What is different
30
31
 
31
32
  | Need | ACC's boundary |
32
33
  |---|---|
33
34
  | 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
+ | Mix clients and worktrees | Worktrees of one repository map to one local workspace while each session keeps its checkout identity. Git is optional. |
35
36
  | Ask without granting authority | Messages are attributed untrusted data. A request expects a reply but is not an order. |
36
37
  | Recover after compaction or restart | Messages and receipts commit before delivery; participant addressing survives when the participant id is stable. |
37
38
  | Avoid overlapping edits | Intent warns; narrow claims may advise or guard, depending on every live client's measured capability. |
@@ -49,10 +50,11 @@ select models, spend token budgets, or control process lifecycle. Choose a track
49
50
  you need organizational planning. Choose a hosted service when participants must
50
51
  coordinate across machines.
51
52
 
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.
53
+ ACC also does not merge model memory, read raw conversations, guarantee agent choices,
54
+ approve tools, operate CI,
55
+ or make guarded claims immune to unrelated local processes. Live push exists for one client
56
+ and never interrupts a turn in progress - a message that arrives mid-turn waits for the turn
57
+ to finish - so workflows that require interrupting a running model should not depend on ACC.
56
58
 
57
59
  If the sessions should remain yours and simply stop working in isolation, that is the
58
60
  product ACC is designed to be.
package/docs/index.md CHANGED
@@ -1,27 +1,31 @@
1
1
  # ACC documentation
2
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.
3
+ ACC adds peer awareness and communication to AI sessions you open yourself. You continue
4
+ to give each agent ordinary work; supported integrations tell agents about their peers and
5
+ teach them how to coordinate when it is useful. The agents remain independent, and each
6
+ decides what its task requires.
6
7
 
7
- ## Evaluate
8
+ ## Start here
8
9
 
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. [Capabilities](CAPABILITIES.md) — certified support, current reachability, recipient
12
- policy, fallback, and limitations beside each adapter.
10
+ 1. [Getting started](GETTING_STARTED.md) — install ACC, open two sessions, give them related
11
+ tasks, and know what coordination to look for.
12
+ 2. [Why ACC](WHY_ACC.md) — decide whether independent peer coordination fits your work.
13
+ 3. [Capabilities](CAPABILITIES.md) — check what your client and platform can actually do.
14
+ 4. [Troubleshooting](TROUBLESHOOTING.md) — diagnose missing peers, queued messages, and
15
+ capability fallback.
13
16
 
14
- ## Use it
17
+ ## See it in context
15
18
 
16
- 1. [Getting started](GETTING_STARTED.md) — two user-opened sessions complete one useful
17
- acknowledged question-and-answer interaction.
18
- 2. [CLI](CLI.md) — exact commands, flags, result shapes, and exit codes.
19
- 3. [MCP](MCP.md) — durable polling for clients without a native adapter.
20
- 4. [Configuration](CONFIGURATION.md) — optional workspace identity and policy.
21
- 5. [Troubleshooting](TROUBLESHOOTING.md) — symptoms, exact downgrades, and fixes.
19
+ - [Three agents, one repository](https://github.com/automatis-tools/agents-can-communicate/blob/main/examples/three-workstreams.md)
20
+ — related implementation tasks with direct dependency questions and advisory claims.
21
+ - [Research without Git](https://github.com/automatis-tools/agents-can-communicate/blob/main/examples/non-git-research.md)
22
+ — two local sessions sharing findings in a plain folder.
22
23
 
23
- ## Understand and extend it
24
+ ## Understand the system
24
25
 
26
+ - [Concepts](CONCEPTS.md) — peers, workspaces, durable threads, receipts, intent, and claims.
27
+ - [How ACC works](HOW_IT_WORKS.md) — the path from integration awareness through durable
28
+ storage, delivery fallback, reply, and acknowledgement.
25
29
  - [Protocol](PROTOCOL.md) — message envelope, thread rules, receipt lifecycle, handoffs,
26
30
  bindings, and the clean v0.2 store break.
27
31
  - [Architecture](ARCHITECTURE.md) — record-first flow, package boundaries, router, storage,
@@ -32,6 +36,12 @@ separates protocol truth from adapter reach.
32
36
  installation ownership.
33
37
  - [Glossary](GLOSSARY.md) — each public term in one line.
34
38
 
39
+ ## Reference
40
+
41
+ - [CLI](CLI.md) — exact commands, flags, result shapes, and exit codes.
42
+ - [MCP](MCP.md) — durable polling for clients without a native adapter.
43
+ - [Configuration](CONFIGURATION.md) — optional workspace identity and policy.
44
+
35
45
  ## Project work
36
46
 
37
47
  - [Contributing](https://github.com/automatis-tools/agents-can-communicate/blob/main/AGENTS.md) — invariants and the mutation-proof gate.