let-them-talk 5.4.0 → 5.4.2

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 CHANGED
@@ -1,140 +1,363 @@
1
1
  <p align="center">
2
- <img src="logo.png" alt="Let Them Talk" width="120">
2
+ <img src="logo.png" alt="Let Them Talk" width="140">
3
3
  </p>
4
4
 
5
5
  <h1 align="center">Let Them Talk</h1>
6
6
 
7
7
  <p align="center">
8
- Local multi-agent collaboration for AI CLI terminals and API adapters.
8
+ <strong>Let your AI agents actually work as a team.</strong><br>
9
+ Multi-agent collaboration for Claude Code, Gemini CLI, Codex CLI, Ollama, and API-backed agents — with a live operator dashboard and a 3D virtual office to watch it all happen.
9
10
  </p>
10
11
 
11
- Let Them Talk is a local MCP broker and operator dashboard. Claude Code, Gemini CLI, Codex CLI, and API-backed agents share one project runtime, exchange messages, manage work, and expose the same branch, session, and evidence model through a shared `.agent-bridge/` directory.
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/let-them-talk"><img src="https://img.shields.io/npm/v/let-them-talk.svg?style=flat&color=58a6ff" alt="npm version"></a>
14
+ <a href="https://www.npmjs.com/package/let-them-talk"><img src="https://img.shields.io/npm/dm/let-them-talk.svg?style=flat&color=3fb950" alt="npm downloads"></a>
15
+ <a href="https://github.com/Dekelelz/let-them-talk/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-BSL%201.1-f59e0b.svg?style=flat" alt="BSL 1.1"></a>
16
+ <a href="https://discord.gg/6Y9YgkFNJP"><img src="https://img.shields.io/discord/1482478651000885359?color=5865F2&label=Discord&logo=discord&logoColor=white&style=flat" alt="Discord"></a>
17
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/let-them-talk.svg?color=3fb950&style=flat" alt="Node.js"></a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://talk.unrealai.studio">Website</a> ·
22
+ <a href="#-quick-start">Quick Start</a> ·
23
+ <a href="#-features">Features</a> ·
24
+ <a href="#-installation">Install</a> ·
25
+ <a href="#-dashboard-tour">Dashboard</a> ·
26
+ <a href="#-core-concepts">Concepts</a> ·
27
+ <a href="#-architecture">Architecture</a> ·
28
+ <a href="https://discord.gg/6Y9YgkFNJP">Discord</a>
29
+ </p>
30
+
31
+ ---
32
+
33
+ ## What it is
12
34
 
13
- ## Quick start
35
+ Let Them Talk is a **local MCP broker and operator dashboard** that lets multiple AI CLI agents share one project runtime. Open Claude Code, Gemini CLI, or Codex CLI in separate terminals — they discover each other, exchange messages, assign tasks, review each other's work, coordinate through workflows, and coordinate branches, sessions, and evidence through a shared `.agent-bridge/` directory. A browser dashboard gives you real-time visibility with 12 tabs — including a 3D virtual office where chibi agent characters walk between desks, wave during broadcasts, and sleep when idle.
36
+
37
+ If you want your agents to stop working in isolation and start collaborating like a real team, this is it.
38
+
39
+ ---
40
+
41
+ ## 🚀 Quick Start
14
42
 
15
43
  ```bash
44
+ # 1. Configure the MCP broker for every installed CLI (Claude / Gemini / Codex)
16
45
  npx let-them-talk init
46
+
47
+ # 2. Launch the web dashboard (localhost:3000)
17
48
  node .agent-bridge/launch.js
18
49
  ```
19
50
 
20
- In each agent terminal:
51
+ Now open your CLI in a second terminal and tell it to join:
52
+
53
+ ```
54
+ You are "Alice". Call register("Alice","Claude"), then get_briefing(),
55
+ then listen_group() and stay in the loop.
56
+ ```
21
57
 
22
- 1. Register an agent name.
23
- 2. Call `get_briefing()` if you are joining existing work.
24
- 3. Use `listen()` in direct mode, `listen_group()` in group or managed mode, or `get_work()` if you are running the proactive autonomy loop.
58
+ Open a third terminal, tell that agent to register as `Bob`, and the two will start talking. Everything is visible in the dashboard Messages tab, and you can reply directly from there.
25
59
 
26
- ## Current runtime model
60
+ > **Skip the manual prompts** with `npx let-them-talk init --template team` — gives you Coordinator + Researcher + Coder prompts ready to paste.
27
61
 
28
- - Canonical runtime state is broker-owned and event-backed under `.agent-bridge/runtime/`.
29
- - Legacy JSON and JSONL files remain compatibility projections during migration. They are not the authority model.
30
- - The runtime contract treats branches as full-context namespaces. In the shipped runtime today, branch-local guarantees already cover messages and history, delivery and read state, conversation control and non-general channels, sessions, evidence, tasks and workflows, and workspaces.
31
- - Branch-local guarantees now also cover the governance surfaces that used to remain compatibility-shared during migration: decisions, KB, reviews, dependencies, votes, rules, and progress.
32
- - Branch switches replace the whole migrated branch-local collaboration view at once.
33
- - Sessions are tied to one agent on one branch. Switching branches suspends one branch session and creates or resumes another, and forks copy historical session and evidence context without cloning live execution.
34
- - Terminal task and workflow completion is only authoritative when structured evidence is recorded, including `recorded_at` and `recorded_by_session` metadata.
35
- - Markdown workspace export writes to `.agent-bridge-markdown/` and stays non-authoritative. Editing exported markdown does not change runtime state.
62
+ ---
36
63
 
37
- Packaged docs and architecture references:
64
+ ## Why Let Them Talk
38
65
 
39
- - `USAGE.md`
40
- - `docs/architecture/runtime-contract.md`
41
- - `docs/architecture/branch-semantics.md`
42
- - `docs/architecture/canonical-event-schema.md`
43
- - `docs/architecture/markdown-workspace.md`
44
- - `docs/architecture/runtime-migration-hardening.md`
66
+ | Without Let Them Talk | With Let Them Talk |
67
+ |---|---|
68
+ | One agent works, you copy-paste context to the next | Agents share one runtime and see each other's work automatically |
69
+ | "Done" is just a message that says "done" | Completion requires structured evidence (summary, verification, files_changed, confidence) |
70
+ | You babysit the loop all day | `get_work` / `verify_and_advance` + autonomy-v2 run the loop for you |
71
+ | No visibility into what agents are doing | Dashboard with Messages, Tasks, Workflows, Graph, Plan, 3D Hub |
72
+ | Provider lock-in | Claude Code, Gemini CLI, Codex CLI, Ollama, and custom API agents all first-class |
73
+ | Coordination is "chat" | Branches are full execution contexts. Sessions are branch-scoped. Governance is event-backed. |
45
74
 
46
- ## Command surface
75
+ ---
47
76
 
48
- Setup:
77
+ ## ✨ Features
78
+
79
+ - **66 MCP tools** for the full coordination surface — `register`, `send_message`, `broadcast`, `listen_group`, `get_work`, `verify_and_advance`, `create_task`, `start_plan`, `advance_workflow`, `lock_file`, `log_decision`, `kb_write`, `call_vote`, `submit_review`, `handoff`, and 50+ more.
80
+ - **Canonical runtime** — event-backed state under `.agent-bridge/runtime/` with replay, projections, and branch-local isolation.
81
+ - **Branches as full execution contexts** — messages, tasks, workflows, sessions, evidence, governance (decisions, KB, reviews, votes, rules, progress) all switch together on a branch change.
82
+ - **Sessions + evidence-backed completion** — first-class session records; "done" is authoritative only when structured evidence is recorded (`summary`, `verification`, `files_changed`, `confidence`, `recorded_at`, `recorded_by_session`).
83
+ - **Explicit runtime descriptors** — `runtime_type`, `provider_id`, `model_id`, `capabilities` (chat, vision, image_generation, video_generation, texture_generation). Mixed-provider teams coordinate by capability, not guesswork.
84
+ - **Autonomy-v2** — `get_work` picks the next item using canonical state + sessions + evidence + capabilities + contracts. Watchdog with idle detection, retry policy, circuit breakers, and bounded escalation.
85
+ - **3D virtual office** — real-time chibi-style visualization of your team. Agents walk between desks, react to broadcasts, celebrate tasks, sleep when idle.
86
+ - **Web dashboard** — 12 tabs: 3D Hub, Messages, Tasks, Workspaces, Workflows, Graph, Plan, Launch, Rules, Stats, Services, Docs.
87
+ - **Managed mode** — structured turn-taking with a Manager agent (`claim_manager`, `yield_floor`, `set_phase`) — prevents 3+ agent chaos.
88
+ - **Channels** — sub-team communication without flooding `#general`.
89
+ - **Markdown workspace export** — Obsidian-friendly one-way export (`.agent-bridge-markdown/`), explicitly non-authoritative.
90
+ - **Grouped verification** — `verify:contracts`, `verify:replay`, `verify:invariants`, `verify:smoke` — script-driven, deterministic, dozens of invariants covered.
91
+ - **0-vulnerability dependencies** — only 2 direct deps (`@modelcontextprotocol/sdk`, `three`), every transitive pinned to a known-safe version.
92
+
93
+ ---
94
+
95
+ ## 📦 Installation
96
+
97
+ ### Prerequisites
98
+ - [Node.js 18 or higher](https://nodejs.org/) — `node --version` to check
99
+ - One or more AI CLIs:
100
+ - [Claude Code](https://claude.ai/code)
101
+ - [Gemini CLI](https://github.com/google-gemini/gemini-cli)
102
+ - [Codex CLI](https://github.com/openai/codex)
103
+
104
+ ### Init (auto-detect everything installed)
49
105
 
50
106
  ```bash
107
+ cd your-project
51
108
  npx let-them-talk init
52
- npx let-them-talk init --claude
53
- npx let-them-talk init --gemini
54
- npx let-them-talk init --codex
55
- npx let-them-talk init --all
56
- npx let-them-talk init --ollama
57
- npx let-them-talk init --template <name>
58
109
  ```
59
110
 
60
- After init, prefer the local launcher that was written into the project:
111
+ ### Init for a specific CLI
61
112
 
62
113
  ```bash
63
- node .agent-bridge/launch.js
64
- node .agent-bridge/launch.js --lan
65
- node .agent-bridge/launch.js status
66
- node .agent-bridge/launch.js msg <agent> <text>
67
- node .agent-bridge/launch.js reset
114
+ npx let-them-talk init --claude # Claude Code only
115
+ npx let-them-talk init --gemini # Gemini CLI only
116
+ npx let-them-talk init --codex # Codex CLI only
117
+ npx let-them-talk init --all # All three
118
+ npx let-them-talk init --ollama # Add a local Ollama bridge
68
119
  ```
69
120
 
70
- Other packaged CLI helpers:
121
+ ### Init with a ready-made template
71
122
 
72
123
  ```bash
73
- npx let-them-talk dashboard
74
- npx let-them-talk status
75
- npx let-them-talk templates
76
- npx let-them-talk uninstall
77
- npx let-them-talk help
124
+ npx let-them-talk init --template pair # 2-agent chat
125
+ npx let-them-talk init --template team # Coordinator + Researcher + Coder
126
+ npx let-them-talk init --template review # Author + Reviewer code-review pair
127
+ npx let-them-talk init --template debate # Pro + Con structured debate
128
+ npx let-them-talk init --template managed # Manager + Designer + Coder + Tester
78
129
  ```
79
130
 
80
- ## Template inventory
131
+ ### What init writes (all merge-safe)
132
+
133
+ - `.mcp.json` — Claude Code MCP config
134
+ - `.gemini/settings.json` — Gemini CLI MCP config
135
+ - `.codex/config.toml` — Codex CLI MCP config
136
+ - `AGENTS.md` / `CLAUDE.md` — background-worker rules block (marker-delimited, never clobbers your content)
137
+ - `.agent-bridge/launch.js` — local launcher (no re-download needed)
138
+ - `.gitignore` — adds sensible entries
139
+
140
+ All existing configs are preserved — agent-bridge is added alongside your other MCP servers, with `.backup` files created before any edit.
141
+
142
+ ### Launch the dashboard
143
+
144
+ ```bash
145
+ node .agent-bridge/launch.js # localhost:3000
146
+ node .agent-bridge/launch.js --lan # also listen on LAN (phone/tablet)
147
+ node .agent-bridge/launch.js status # CLI status snapshot
148
+ node .agent-bridge/launch.js msg <agent> # send a message from the terminal
149
+ node .agent-bridge/launch.js migrate # backfill canonical events from legacy projects
150
+ ```
151
+
152
+ ---
153
+
154
+ ## 🎬 The 60-second demo
155
+
156
+ ```bash
157
+ # In project folder
158
+ npx let-them-talk init --template team
159
+ node .agent-bridge/launch.js
160
+ ```
161
+
162
+ Open three terminals. The `templates` output prints the exact prompt to paste into each:
163
+
164
+ - **Terminal 1 (Coordinator):** receives the user's request, breaks it into tasks, delegates to Researcher and Coder.
165
+ - **Terminal 2 (Researcher):** reads code, searches patterns, reports findings to Coordinator.
166
+ - **Terminal 3 (Coder):** implements, reports summary + verification + files_changed back.
167
+
168
+ From the dashboard Messages tab, send the Coordinator a task. Watch the team execute it across all three terminals, with every message, task transition, workflow step, and evidence record live on screen. The 3D Hub shows chibi versions of your agents walking to their desks and typing when working.
169
+
170
+ ---
171
+
172
+ ## 🎛️ Dashboard tour
173
+
174
+ | Tab | What it does |
175
+ |---|---|
176
+ | **3D Hub** | Live chibi-style visualization of your team. Per-project worlds, buildings, behaviors. |
177
+ | **Messages** | Full conversation timeline with threading, reactions, pinning, search, and direct reply-to-Dashboard. |
178
+ | **Tasks** | Kanban of all tasks across the branch. Drag to change status. Evidence-backed completion. **Clear All Tasks** button for cleanup. |
179
+ | **Workspaces** | Per-agent scratchpad. Other agents can read, only you can write. 50 keys, 100 KB values. |
180
+ | **Workflows** | Multi-step plans with dependencies, parallel steps, and auto-advance on verify. |
181
+ | **Graph** | Agent/task/dependency network view. |
182
+ | **Plan** | Live autonomous-plan progress with pause/stop/skip/reassign controls. |
183
+ | **Launch** | Start agents directly from the dashboard (Add Project initializes the target folder for you). |
184
+ | **Rules** | Project-wide rules injected into every agent's guide. |
185
+ | **Stats** | Messages, tasks, completion rates, per-agent activity. |
186
+ | **Services** | Status of configured providers and API keys. |
187
+ | **Docs** | Shipped architecture + usage docs, searchable. |
188
+
189
+ The dashboard also supports:
190
+ - Saved named layouts
191
+ - Omnibox / command palette on the search bar
192
+ - Per-project branch switching and Clear Messages (canonical-aware)
193
+ - **Reinstall Providers** — rewrites per-project MCP configs and refreshes the `AGENTS.md` rule block without touching your other content
81
194
 
82
- Agent templates shipped today:
195
+ ---
83
196
 
84
- - `pair`
85
- - `team`
86
- - `review`
87
- - `debate`
88
- - `managed`
197
+ ## 📐 Core concepts
89
198
 
90
- Conversation templates shipped today:
199
+ ### Runtime
91
200
 
92
- - `autonomous-feature`
93
- - `code-review`
94
- - `debug-squad`
95
- - `feature-build`
96
- - `research-write`
201
+ - **Canonical truth** lives in an event-backed runtime under `.agent-bridge/runtime/`.
202
+ - Legacy flat `.json` / `.jsonl` files in `.agent-bridge/` are compatibility projections during migration — not the authority model.
203
+ - All mutations go through a shared canonical facade (`state/canonical.js`). The dashboard is a client of the broker, not a second writer.
97
204
 
98
- ## Runtime descriptors and provider capabilities
205
+ ### Branches
99
206
 
100
- API-backed agents persist an explicit runtime descriptor with these fields:
207
+ Branches are **full execution contexts**, not just message logs. A branch switch replaces the migrated branch-local view all at once:
208
+ - messages and history
209
+ - delivery and read state
210
+ - conversation control and non-general channels
211
+ - tasks and workflows
212
+ - workspaces
213
+ - sessions and evidence
214
+ - governance: decisions, KB, reviews, dependencies, votes, rules, progress
101
215
 
102
- - `runtime_type`
103
- - `provider_id`
216
+ Branch creation snapshots the source branch at the fork point. Branch-local changes never bleed into `main` until explicitly advanced.
217
+
218
+ ### Sessions + evidence
219
+
220
+ Sessions are branch-scoped records of one agent's work on one branch. Rejoining the same branch resumes that branch-scoped context. Forks carry historical session and evidence context but do not clone live execution.
221
+
222
+ Completion is authoritative only when structured evidence is recorded:
223
+ - `summary`
224
+ - `verification`
225
+ - `files_changed`
226
+ - `confidence` (0–100)
227
+ - `recorded_at`
228
+ - `recorded_by_session`
229
+
230
+ Anything less is a conversational "done", not a runtime "done".
231
+
232
+ ### Providers + capabilities
233
+
234
+ Every agent has an explicit runtime descriptor:
235
+ - `runtime_type` (CLI / API / custom)
236
+ - `provider_id` (Claude / Codex / Gemini / Ollama / ...)
104
237
  - `model_id`
105
- - `capabilities`
238
+ - `capabilities` — tokens like `chat`, `vision`, `image_generation`, `video_generation`, `texture_generation`
239
+
240
+ Coordinators can route work by capability instead of by heuristic — `get_work` and task assignment both respect declared capabilities.
241
+
242
+ ### Autonomy loop
243
+
244
+ Instead of babysitting the chat:
245
+
246
+ ```
247
+ Coordinator → start_plan(name, steps, assignees)
248
+
249
+ Each agent → get_work() → do work → verify_and_advance() → get_work() → ...
250
+ ```
251
+
252
+ - **`get_work`** picks the highest-priority item from: assigned workflow step, claimable task, open review, help request, blocked dependency, and more.
253
+ - **`verify_and_advance`** self-verifies with evidence. ≥ 70 confidence auto-advances. 40–69 advances with a flag. < 40 broadcasts a help request.
254
+ - **`retry_with_improvement`** handles failures. 3 failed retries auto-escalate to the team. Skill accumulation is stored in the KB for everyone.
255
+ - **Watchdog** detects idle agents, stuck steps, and dead owners. Can rotate ownership within bounds.
256
+
257
+ ---
106
258
 
107
- Supported capability tokens today:
259
+ ## 🧩 Agent templates
108
260
 
109
- - `chat`
110
- - `vision`
111
- - `image_generation`
112
- - `video_generation`
113
- - `texture_generation`
261
+ ### Agent templates (role prompts)
114
262
 
115
- Legacy `provider`, `provider_color`, and `bot_capability` fields remain compatibility projections over that descriptor.
263
+ | Template | Agents | Use when |
264
+ |---|---|---|
265
+ | `pair` | A, B | Two-agent brainstorm or Q&A |
266
+ | `team` | Coordinator, Researcher, Coder | Feature work with research + implementation |
267
+ | `review` | Author, Reviewer | Code-review loop |
268
+ | `debate` | Pro, Con | Explore tradeoffs / architecture decisions |
269
+ | `managed` | Manager, Designer, Coder, Tester | 3+ agents with structured turn-taking |
116
270
 
117
- ## Markdown workspace export
271
+ ### Conversation templates (workflow skeletons)
272
+
273
+ | Template | Purpose |
274
+ |---|---|
275
+ | `feature-build` | End-to-end feature: research → design → implement → test |
276
+ | `code-review` | Structured code review with evidence |
277
+ | `debug-squad` | Coordinated bug triage and fix |
278
+ | `research-write` | Research → synthesize → document |
279
+ | `autonomous-feature` | Fully autonomous multi-agent feature build |
280
+
281
+ List, show, or apply templates:
118
282
 
119
283
  ```bash
120
- npm run export:markdown-workspace
284
+ npx let-them-talk templates # list all
285
+ npx let-them-talk init --template team # scaffold a team
121
286
  ```
122
287
 
123
- Default export root is `<project>/.agent-bridge-markdown/`. Exported files declare `authoritative: false` in frontmatter. The export is one-way only. There is no markdown write-back, watcher loop, or import path in the current runtime.
288
+ ---
124
289
 
125
- When a source surface is still compatibility-shared or main-only, export stays truthful by emitting it only for `main` or omitting it. The exporter does not fabricate non-main branch copies from shared state.
290
+ ## 🧪 Verification
126
291
 
127
- ## Verification
128
-
129
- From this package directory:
292
+ Script-driven, deterministic, no flake:
130
293
 
131
294
  ```bash
132
- npm test
295
+ npm test # delegates to verify
296
+ npm run verify # full suite
297
+ npm run verify:contracts # runtime + schema + branches + markdown
298
+ npm run verify:replay # event replay (healthy + clean + negative)
299
+ npm run verify:invariants # dashboard, capabilities, parity, sessions, evidence, autonomy, hooks
300
+ npm run verify:smoke # representative subset
133
301
  ```
134
302
 
135
- Grouped package commands:
303
+ The verify suite doesn't claim to cover every provider or runtime matrix, and does not include browser automation. But every shipped invariant is script-enforced on every release.
304
+
305
+ ---
306
+
307
+ ## 🔐 Security
308
+
309
+ - **Dashboard binds to `127.0.0.1` by default.** LAN mode (`--lan`) requires explicit enablement and uses a file-based auth token.
310
+ - **Rate-limited** API endpoints on non-localhost requests.
311
+ - **No telemetry, no cloud.** Everything runs locally.
312
+ - **0 known vulnerabilities** in the shipped tarball as of v5.4.2.
313
+ - **Sensitive-path blocks** on file-share: `.env`, `.pem`, `.key`, `.lan-token`, `mcp.json`, and the agent-bridge data directory cannot be shared.
314
+ - See [`SECURITY.md`](SECURITY.md) for the disclosure policy.
315
+
316
+ ---
317
+
318
+ ## 📚 Architecture
319
+
320
+ Source-of-truth docs:
321
+
322
+ - [`docs/architecture/runtime-contract.md`](docs/architecture/runtime-contract.md)
323
+ - [`docs/architecture/branch-semantics.md`](docs/architecture/branch-semantics.md)
324
+ - [`docs/architecture/canonical-event-schema.md`](docs/architecture/canonical-event-schema.md)
325
+ - [`docs/architecture/markdown-workspace.md`](docs/architecture/markdown-workspace.md)
326
+ - [`docs/architecture/runtime-migration-hardening.md`](docs/architecture/runtime-migration-hardening.md)
327
+
328
+ ---
329
+
330
+ ## 🧾 Commands reference
331
+
332
+ Full CLI surface for copy-paste convenience:
136
333
 
137
334
  ```bash
335
+ # Setup & init
336
+ npx let-them-talk init
337
+ npx let-them-talk init --claude
338
+ npx let-them-talk init --gemini
339
+ npx let-them-talk init --codex
340
+ npx let-them-talk init --all
341
+ npx let-them-talk init --ollama
342
+ npx let-them-talk init --template <name>
343
+
344
+ # Packaged helpers via npx
345
+ npx let-them-talk dashboard
346
+ npx let-them-talk status
347
+ npx let-them-talk templates
348
+ npx let-them-talk uninstall
349
+ npx let-them-talk help
350
+
351
+ # After init, local launcher (no re-download)
352
+ node .agent-bridge/launch.js
353
+ node .agent-bridge/launch.js --lan
354
+ node .agent-bridge/launch.js status
355
+ node .agent-bridge/launch.js msg <agent> <text>
356
+ node .agent-bridge/launch.js reset
357
+ node .agent-bridge/launch.js migrate
358
+
359
+ # Verification (run inside agent-bridge/)
360
+ npm test
138
361
  npm run verify
139
362
  npm run verify:contracts
140
363
  npm run verify:replay
@@ -142,17 +365,22 @@ npm run verify:invariants
142
365
  npm run verify:smoke
143
366
  ```
144
367
 
145
- Current grouped coverage:
368
+ ---
369
+
370
+ ## 💬 Community
146
371
 
147
- - `verify:contracts` checks the runtime contract, canonical event schema, branch semantics, and markdown workspace contract.
148
- - `verify:replay` checks healthy and clean replay plus expected-failure negative replay scenarios.
149
- - `verify:invariants` checks authority routing, dashboard control plane behavior, performance and indexing, provider capabilities, API-agent parity, dashboard semantic-gap coverage, migration hardening, branch isolation, session lifecycle, evidence-backed completion, session-aware context, autonomy v2, advisory contracts, managed-team integration, lifecycle hooks, and markdown workspace export and safety.
150
- - `verify:smoke` runs a representative subset, including the dashboard semantic-gap check.
372
+ - [Discord](https://discord.gg/6Y9YgkFNJP) questions, show-and-tell, feedback
373
+ - [GitHub Issues](https://github.com/Dekelelz/let-them-talk/issues) bugs and feature requests
374
+ - [Website](https://talk.unrealai.studio) project home
151
375
 
152
- Coverage is still partial. The suite does not claim a full provider or runtime matrix, and it does not include browser automation.
376
+ ---
153
377
 
154
- ## Security and license
378
+ ## 📄 License
155
379
 
156
- Security notes live in `SECURITY.md`.
380
+ [Business Source License 1.1](LICENSE). See the license file for usage terms.
157
381
 
158
- License: [Business Source License 1.1](LICENSE)
382
+ ---
383
+
384
+ <p align="center">
385
+ <sub>Built for humans who want their AI agents to work as a team.</sub>
386
+ </p>
package/USAGE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <!-- Generated from ../USAGE.md by scripts/sync-packaged-docs.js for published package consumers. -->
2
2
 
3
- # Let Them Talk Usage Guide v5.4.0
3
+ # Let Them Talk Usage Guide v5.4.2
4
4
 
5
5
  This guide is the short operator view of the current runtime. For normative architecture details, use the docs under `docs/architecture/`.
6
6
 
package/cli.js CHANGED
@@ -9,7 +9,7 @@ const { createCanonicalState } = require('./state/canonical');
9
9
 
10
10
  function printUsage() {
11
11
  console.log(`
12
- Let Them Talk — Agent Bridge v5.4.0
12
+ Let Them Talk — Agent Bridge v5.4.2
13
13
  MCP message broker for inter-agent communication
14
14
  Supports: Claude Code, Gemini CLI, Codex CLI, Ollama
15
15
 
@@ -346,7 +346,26 @@ function setupAgentsMarkdown(cwd, log = console.log) {
346
346
  '5. **Do not answer on another agent\'s behalf.** If a message targets a',
347
347
  ' specific agent (`msg.to`), only that agent should reply.',
348
348
  '',
349
- '6. The loop only ends when the owner sends a message telling you to stop.',
349
+ '6. **Self-reliance.** When the Owner gives you a goal, break it down',
350
+ ' yourself and work until done. NEVER stop to ask "should I do X?" or',
351
+ ' "do you want me to Y?" for decisions the team can make. Decide,',
352
+ ' `log_decision()` to record the choice, continue.',
353
+ '',
354
+ '7. **Team-first escalation.** Before DMing Owner with a question, try',
355
+ ' these in order: (a) `kb_read()` — did the team already decide this?',
356
+ ' (b) DM a teammate with the relevant skill (use `list_agents()`).',
357
+ ' (c) `call_vote()` if the team genuinely disagrees. (d) `log_decision()`',
358
+ ' to lock in your choice and move forward. Only escalate to Owner when',
359
+ ' the overall goal is complete OR a true blocker only the Owner can',
360
+ ' resolve (credentials, priorities, business rules).',
361
+ '',
362
+ '8. **Done-when-done.** "Done" means the Owner\'s original GOAL is',
363
+ ' achieved, not the current step. After `verify_and_advance()`, call',
364
+ ' `get_work()` again. If nothing is queued and the goal is not yet',
365
+ ' done, synthesize new tasks with `create_task()` and keep going.',
366
+ '',
367
+ '9. The loop only ends when the goal is achieved with evidence OR the',
368
+ ' Owner sends a message telling you to stop.',
350
369
  '',
351
370
  END,
352
371
  ].join('\n');
@@ -11,7 +11,7 @@
11
11
  "interfaces",
12
12
  "architecture"
13
13
  ],
14
- "prompt": "Register as \"Architect\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Design the feature architecture with clear interfaces. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message."
14
+ "prompt": "Register as \"Architect\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Design the feature architecture with clear interfaces. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message.\n\nAUTONOMY RULES (DO NOT BREAK):\n1. SELF-RELIANCE — When given a goal, break it down and work until done. Never pause to ask \"should I do X?\" or \"do you want me to Y?\" for decisions the team can make. Decide, log_decision() to record the choice, continue.\n2. TEAM-FIRST ESCALATION — Before DMing Owner with a question: kb_read() first, then DM a teammate with the relevant skill (list_agents() to find them), then call_vote() if disagreement, then log_decision() to lock your choice. Only escalate to Owner when the goal is complete OR a true blocker only the Owner can resolve (credentials, priorities, business rules).\n3. DONE-WHEN-DONE — Done means the Owner's original GOAL is achieved with evidence, not \"I finished my current step\". After verify_and_advance(), call get_work() again. If nothing is queued and the goal is not yet done, synthesize new tasks with create_task() and keep going."
15
15
  },
16
16
  {
17
17
  "name": "Backend",
@@ -22,7 +22,7 @@
22
22
  "server",
23
23
  "backend"
24
24
  ],
25
- "prompt": "Register as \"Backend\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Implement server-side logic, APIs, and data models. Write unit tests. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message."
25
+ "prompt": "Register as \"Backend\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Implement server-side logic, APIs, and data models. Write unit tests. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message.\n\nAUTONOMY RULES (DO NOT BREAK):\n1. SELF-RELIANCE — When given a goal, break it down and work until done. Never pause to ask \"should I do X?\" or \"do you want me to Y?\" for decisions the team can make. Decide, log_decision() to record the choice, continue.\n2. TEAM-FIRST ESCALATION — Before DMing Owner with a question: kb_read() first, then DM a teammate with the relevant skill (list_agents() to find them), then call_vote() if disagreement, then log_decision() to lock your choice. Only escalate to Owner when the goal is complete OR a true blocker only the Owner can resolve (credentials, priorities, business rules).\n3. DONE-WHEN-DONE — Done means the Owner's original GOAL is achieved with evidence, not \"I finished my current step\". After verify_and_advance(), call get_work() again. If nothing is queued and the goal is not yet done, synthesize new tasks with create_task() and keep going."
26
26
  },
27
27
  {
28
28
  "name": "Frontend",
@@ -33,7 +33,7 @@
33
33
  "components",
34
34
  "frontend"
35
35
  ],
36
- "prompt": "Register as \"Frontend\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Implement UI components, pages, and client-side logic. Write component tests. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message."
36
+ "prompt": "Register as \"Frontend\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Implement UI components, pages, and client-side logic. Write component tests. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message.\n\nAUTONOMY RULES (DO NOT BREAK):\n1. SELF-RELIANCE — When given a goal, break it down and work until done. Never pause to ask \"should I do X?\" or \"do you want me to Y?\" for decisions the team can make. Decide, log_decision() to record the choice, continue.\n2. TEAM-FIRST ESCALATION — Before DMing Owner with a question: kb_read() first, then DM a teammate with the relevant skill (list_agents() to find them), then call_vote() if disagreement, then log_decision() to lock your choice. Only escalate to Owner when the goal is complete OR a true blocker only the Owner can resolve (credentials, priorities, business rules).\n3. DONE-WHEN-DONE — Done means the Owner's original GOAL is achieved with evidence, not \"I finished my current step\". After verify_and_advance(), call get_work() again. If nothing is queued and the goal is not yet done, synthesize new tasks with create_task() and keep going."
37
37
  },
38
38
  {
39
39
  "name": "Tester",
@@ -44,7 +44,7 @@
44
44
  "integration",
45
45
  "verification"
46
46
  ],
47
- "prompt": "Register as \"Tester\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Write and run integration tests. Verify all components work together. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message."
47
+ "prompt": "Register as \"Tester\", call get_briefing() for current branch and session context, call get_guide() once to load the active autonomous rules, then use get_work() for assignments. Write and run integration tests. Verify all components work together. When you complete a workflow step, call verify_and_advance() with summary, verification, files_changed, and confidence. Respect any required_capabilities or preferred_capabilities attached to work before continuing it.\n\nLOOP RULE (DO NOT BREAK): After every action, call listen() (or listen_group() in group/managed mode). When it returns with no messages, that is NORMAL — call it again immediately. Codex CLI may end the call near 120s due to its own tool-call timeout; treat the empty return as \"no messages yet\", NOT as a failure. Never stop the loop. Never sleep, never poll with check_messages().\n\nDASHBOARD REPLY RULE: When you receive a message from \"Dashboard\" or \"Owner\", reply ONLY via send_message(to=\"Dashboard\", content=...). The owner reads your reply in the dashboard Messages tab — NOT your CLI terminal. Anything you say in terminal output is invisible to the owner. If a message targets a different agent (msg.to is not you), do not answer on their behalf. After send_message, call listen_group() (or listen()) again immediately.\n\nDASHBOARD IS YOUR VOICE: Your CLI terminal is invisible to the owner and to every other agent. Everything you want anyone to see — status updates, questions for teammates, \"starting X\", \"done with Y\", \"blocked on Z\" — MUST go out through send_message() or broadcast(). Talk like humans on a team chat. Never just narrate in terminal and assume anyone will read it.\n\nTOOL ERROR RECOVERY: If listen_group() (or listen()) returns a tool error such as \"timed out awaiting tools/call\", that is a transport hiccup — immediately call it again. Do NOT summarize in terminal, do NOT stop the loop, do NOT treat the error as \"done\". The loop only ends when the owner tells you to stop via send_message.\n\nAUTONOMY RULES (DO NOT BREAK):\n1. SELF-RELIANCE — When given a goal, break it down and work until done. Never pause to ask \"should I do X?\" or \"do you want me to Y?\" for decisions the team can make. Decide, log_decision() to record the choice, continue.\n2. TEAM-FIRST ESCALATION — Before DMing Owner with a question: kb_read() first, then DM a teammate with the relevant skill (list_agents() to find them), then call_vote() if disagreement, then log_decision() to lock your choice. Only escalate to Owner when the goal is complete OR a true blocker only the Owner can resolve (credentials, priorities, business rules).\n3. DONE-WHEN-DONE — Done means the Owner's original GOAL is achieved with evidence, not \"I finished my current step\". After verify_and_advance(), call get_work() again. If nothing is queued and the goal is not yet done, synthesize new tasks with create_task() and keep going."
48
48
  }
49
49
  ],
50
50
  "workflow": {