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 +315 -87
- package/USAGE.md +1 -1
- package/cli.js +21 -2
- package/conversation-templates/autonomous-feature.json +4 -4
- package/conversation-templates/code-review.json +3 -3
- package/conversation-templates/debug-squad.json +3 -3
- package/conversation-templates/feature-build.json +3 -3
- package/conversation-templates/research-write.json +3 -3
- package/dashboard.js +47 -2
- package/office/index.js +43 -40
- package/package.json +1 -1
- package/server.js +40 -6
- package/templates/debate.json +2 -2
- package/templates/managed.json +4 -4
- package/templates/pair.json +2 -2
- package/templates/review.json +2 -2
- package/templates/team.json +3 -3
package/README.md
CHANGED
|
@@ -1,140 +1,363 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="logo.png" alt="Let Them Talk" width="
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
+
## ⚡ Why Let Them Talk
|
|
38
65
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
75
|
+
---
|
|
47
76
|
|
|
48
|
-
|
|
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
|
-
|
|
111
|
+
### Init for a specific CLI
|
|
61
112
|
|
|
62
113
|
```bash
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
121
|
+
### Init with a ready-made template
|
|
71
122
|
|
|
72
123
|
```bash
|
|
73
|
-
npx let-them-talk
|
|
74
|
-
npx let-them-talk
|
|
75
|
-
npx let-them-talk
|
|
76
|
-
npx let-them-talk
|
|
77
|
-
npx let-them-talk
|
|
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
|
-
|
|
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
|
-
|
|
195
|
+
---
|
|
83
196
|
|
|
84
|
-
|
|
85
|
-
- `team`
|
|
86
|
-
- `review`
|
|
87
|
-
- `debate`
|
|
88
|
-
- `managed`
|
|
197
|
+
## 📐 Core concepts
|
|
89
198
|
|
|
90
|
-
|
|
199
|
+
### Runtime
|
|
91
200
|
|
|
92
|
-
-
|
|
93
|
-
- `
|
|
94
|
-
- `
|
|
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
|
-
|
|
205
|
+
### Branches
|
|
99
206
|
|
|
100
|
-
|
|
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
|
-
- `
|
|
103
|
-
|
|
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
|
-
|
|
259
|
+
## 🧩 Agent templates
|
|
108
260
|
|
|
109
|
-
|
|
110
|
-
- `vision`
|
|
111
|
-
- `image_generation`
|
|
112
|
-
- `video_generation`
|
|
113
|
-
- `texture_generation`
|
|
261
|
+
### Agent templates (role prompts)
|
|
114
262
|
|
|
115
|
-
|
|
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
|
-
|
|
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
|
-
|
|
284
|
+
npx let-them-talk templates # list all
|
|
285
|
+
npx let-them-talk init --template team # scaffold a team
|
|
121
286
|
```
|
|
122
287
|
|
|
123
|
-
|
|
288
|
+
---
|
|
124
289
|
|
|
125
|
-
|
|
290
|
+
## 🧪 Verification
|
|
126
291
|
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 💬 Community
|
|
146
371
|
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
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
|
-
|
|
376
|
+
---
|
|
153
377
|
|
|
154
|
-
##
|
|
378
|
+
## 📄 License
|
|
155
379
|
|
|
156
|
-
|
|
380
|
+
[Business Source License 1.1](LICENSE). See the license file for usage terms.
|
|
157
381
|
|
|
158
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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": {
|