let-them-talk 3.3.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -1
- package/LICENSE +2 -2
- package/README.md +213 -150
- package/SECURITY.md +1 -1
- package/cli.js +103 -2
- package/dashboard.html +868 -152
- package/dashboard.js +365 -13
- package/package.json +4 -3
- package/server.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [3.
|
|
3
|
+
## [3.4.0] - 2026-03-15
|
|
4
|
+
|
|
5
|
+
### Added — Dashboard Features
|
|
6
|
+
- **Stats Tab** — per-agent message counts, avg response time, peak hours, 24-hour activity chart, conversation velocity. Keyboard shortcut `6`.
|
|
7
|
+
- **Compact View** — toggle button in search bar. Hides avatars, inlines timestamps, reduces padding. Persists to localStorage.
|
|
8
|
+
- **Message Edit** — edit any message via hover action. Full edit history tracked, "edited" badge displayed.
|
|
9
|
+
- **Message Delete** — delete dashboard/system messages with confirmation dialog.
|
|
10
|
+
- **Copy Message** — clipboard button on message hover to copy raw content.
|
|
11
|
+
- **JSON Export** — new export format alongside HTML and Markdown.
|
|
12
|
+
- **Kanban Drag-and-Drop** — drag task cards between columns (pending/in_progress/done/blocked).
|
|
13
|
+
- **SSE Auto-Reconnect** — exponential backoff (1s→30s), yellow "Reconnecting..." indicator, polling fallback.
|
|
14
|
+
- **Conversation Templates** — 4 built-in multi-agent workflow templates (Code Review Pipeline, Debug Squad, Feature Development, Research & Write) in the Launch tab with copyable agent prompts.
|
|
15
|
+
|
|
16
|
+
### Added — API Endpoints
|
|
17
|
+
- `PUT /api/message` — edit a message (with edit history)
|
|
18
|
+
- `DELETE /api/message` — delete a message (dashboard/system only)
|
|
19
|
+
- `GET /api/conversation-templates` — list conversation templates
|
|
20
|
+
- `POST /api/conversation-templates/launch` — get template agent prompts
|
|
21
|
+
- `GET /api/stats` — analytics data (per-agent stats, velocity, hourly distribution)
|
|
22
|
+
- `GET/POST /api/permissions` — agent permission management
|
|
23
|
+
|
|
24
|
+
### Added — CLI Commands
|
|
25
|
+
- `npx let-them-talk msg <agent> <text>` — send a message from CLI
|
|
26
|
+
- `npx let-them-talk status` — show active agents and message counts
|
|
27
|
+
|
|
28
|
+
### Changed — Premium UI Redesign
|
|
29
|
+
- Deeper dark palette with blue undertones (#080b12 background)
|
|
30
|
+
- Inter font from Google Fonts with anti-aliased rendering
|
|
31
|
+
- Glassmorphism header with backdrop-filter blur
|
|
32
|
+
- Gradient accent system (blue→purple) on buttons, active tabs, send button
|
|
33
|
+
- Refined shadow system (sm/md/lg) with colored glows
|
|
34
|
+
- Focus rings on all inputs
|
|
35
|
+
- Smoother transitions (0.2-0.25s) with lift effects on hover
|
|
36
|
+
- Glass effects on modals and popups
|
|
37
|
+
- Inset shadows on code blocks
|
|
38
|
+
- Thinner scrollbars with transparent tracks
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- Task notes crash when `notes` array undefined
|
|
42
|
+
- Message edit always rewrites messages.jsonl regardless of match
|
|
43
|
+
- Permissions API accepted arbitrary fields (now whitelisted)
|
|
44
|
+
- Task status accepted any string (now validated against whitelist)
|
|
45
|
+
- Reset button ignored active project in multi-project mode
|
|
46
|
+
- Edit modal missing error handler on network failure
|
|
47
|
+
- CLI msg command accepted invalid agent names
|
|
48
|
+
- Copy-to-clipboard double-escaped HTML entities in template prompts
|
|
49
|
+
- Duplicate deleteMessage function shadowing
|
|
50
|
+
|
|
51
|
+
## [3.3.2] - 2026-03-14
|
|
4
52
|
|
|
5
53
|
### Changed
|
|
6
54
|
- License changed from MIT to Business Source License 1.1 (BSL)
|
package/LICENSE
CHANGED
|
@@ -6,7 +6,7 @@ License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
|
|
|
6
6
|
Parameters
|
|
7
7
|
|
|
8
8
|
Licensor: Dekelelz
|
|
9
|
-
Licensed Work: Let Them Talk v3.
|
|
9
|
+
Licensed Work: Let Them Talk v3.4.0
|
|
10
10
|
The Licensed Work is (c) 2024-2026 Dekelelz.
|
|
11
11
|
Additional Use Grant: You may make use of the Licensed Work, provided that
|
|
12
12
|
you may not use the Licensed Work for a Commercial
|
|
@@ -27,7 +27,7 @@ Change Date: 2028-03-14
|
|
|
27
27
|
Change License: Apache License, Version 2.0
|
|
28
28
|
|
|
29
29
|
For information about alternative licensing arrangements for the Licensed Work,
|
|
30
|
-
please contact:
|
|
30
|
+
please contact: contact@talk.unrealai.studio
|
|
31
31
|
|
|
32
32
|
Notice
|
|
33
33
|
|
package/README.md
CHANGED
|
@@ -1,63 +1,156 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="agent-bridge/logo.png" alt="Let Them Talk" width="120">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
[](https://github.com/Dekelelz/let-them-talk/blob/master/LICENSE)
|
|
5
|
-
[](https://discord.gg/6Y9YgkFNJP)
|
|
5
|
+
<h1 align="center">Let Them Talk</h1>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Multi-agent collaboration for AI CLI terminals.</strong><br>
|
|
9
|
+
Let your AI agents talk, delegate, review, and build together.
|
|
10
|
+
</p>
|
|
8
11
|
|
|
9
|
-
|
|
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"></a>
|
|
14
|
+
<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>
|
|
15
|
+
<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>
|
|
16
|
+
<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="Downloads"></a>
|
|
17
|
+
</p>
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://talk.unrealai.studio">Website</a> ·
|
|
21
|
+
<a href="#quick-start">Quick Start</a> ·
|
|
22
|
+
<a href="VISION.md">Vision</a> ·
|
|
23
|
+
<a href="#agent-templates">Templates</a> ·
|
|
24
|
+
<a href="#web-dashboard">Dashboard</a> ·
|
|
25
|
+
<a href="https://discord.gg/6Y9YgkFNJP">Discord</a>
|
|
26
|
+
</p>
|
|
12
27
|
|
|
13
|
-
|
|
14
|
-
# 1. Install in any project
|
|
15
|
-
npx let-them-talk init
|
|
28
|
+
---
|
|
16
29
|
|
|
17
|
-
|
|
18
|
-
npx let-them-talk dashboard
|
|
30
|
+
Let Them Talk is an MCP server that connects multiple AI CLI terminals through a shared filesystem. Open Claude Code, Gemini CLI, or Codex CLI in separate terminals — they discover each other, exchange messages, share files, assign tasks, and coordinate through workflows. A real-time web dashboard lets you watch everything unfold, inject messages, and manage the conversation.
|
|
19
31
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
If you want your AI agents to stop working in isolation and start collaborating like a team, this is it.
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
Preferred setup: one command to install, one to launch the dashboard.
|
|
25
37
|
|
|
26
38
|
```bash
|
|
27
|
-
npx let-them-talk init
|
|
28
|
-
npx let-them-talk
|
|
29
|
-
npx let-them-talk init --template debate # Pro + Con
|
|
30
|
-
npx let-them-talk templates # List all templates
|
|
39
|
+
npx let-them-talk init # auto-detects your CLI and configures MCP
|
|
40
|
+
npx let-them-talk dashboard # opens the web dashboard at localhost:3000
|
|
31
41
|
```
|
|
32
42
|
|
|
43
|
+
Then open two terminals and tell each agent to register:
|
|
44
|
+
|
|
45
|
+
**Terminal 1:** `Register as "A", say hello to B, then call listen()`
|
|
46
|
+
|
|
47
|
+
**Terminal 2:** `Register as "B", then call listen()`
|
|
48
|
+
|
|
49
|
+
That's it. They'll start talking. Watch it live in the dashboard.
|
|
50
|
+
|
|
51
|
+
> **Templates:** Skip the manual setup with `npx let-them-talk init --template team` — gives you ready-to-paste prompts for a Coordinator + Researcher + Coder team. [See all templates](#agent-templates).
|
|
52
|
+
|
|
53
|
+
## Supported CLIs
|
|
54
|
+
|
|
55
|
+
| CLI | Config File | Auto-detected |
|
|
56
|
+
|-----|-------------|:-------------:|
|
|
57
|
+
| Claude Code | `.mcp.json` | Yes |
|
|
58
|
+
| Gemini CLI | `.gemini/settings.json` | Yes |
|
|
59
|
+
| Codex CLI | `.codex/config.toml` | Yes |
|
|
60
|
+
|
|
61
|
+
Run `npx let-them-talk init --all` to configure all three at once.
|
|
62
|
+
|
|
33
63
|
## How It Works
|
|
34
64
|
|
|
35
65
|
```
|
|
36
|
-
Terminal 1
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
Terminal 1 Terminal 2 Terminal 3
|
|
67
|
+
(Claude Code) (Gemini CLI) (Codex CLI)
|
|
68
|
+
| | |
|
|
69
|
+
v v v
|
|
70
|
+
MCP Server MCP Server MCP Server
|
|
71
|
+
(stdio) (stdio) (stdio)
|
|
72
|
+
| | |
|
|
73
|
+
+----------- .agent-bridge/ directory ----------+
|
|
74
|
+
messages · agents · tasks
|
|
75
|
+
profiles · workflows · plugins
|
|
76
|
+
|
|
|
77
|
+
v
|
|
78
|
+
Web Dashboard :3000
|
|
79
|
+
SSE real-time · Kanban
|
|
80
|
+
Agent monitoring · Injection
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Each terminal spawns its own MCP server process. All processes share a `.agent-bridge/` directory in your project root. The dashboard reads the same files via Server-Sent Events for instant updates.
|
|
84
|
+
|
|
85
|
+
## Highlights
|
|
86
|
+
|
|
87
|
+
- **27 MCP tools** — messaging, tasks, workflows, profiles, workspaces, branching, plugins
|
|
88
|
+
- **Premium dashboard** — glassmorphism UI, Inter font, gradient accents, SSE real-time (~200ms)
|
|
89
|
+
- **Stats & analytics** — per-agent message counts, response times, hourly activity charts, velocity
|
|
90
|
+
- **Conversation templates** — 4 built-in multi-agent workflows (Code Review, Debug Squad, Feature Dev, Research & Write)
|
|
91
|
+
- **Message management** — edit, delete, copy messages with full edit history
|
|
92
|
+
- **Task management** — drag-and-drop kanban board between agents
|
|
93
|
+
- **Workflow pipelines** — multi-step automation with auto-handoff
|
|
94
|
+
- **Agent profiles** — display names, SVG avatars, roles, bios
|
|
95
|
+
- **Conversation branching** — fork at any point, isolated history per branch
|
|
96
|
+
- **Compact view** — dense message toggle for power users, persists to localStorage
|
|
97
|
+
- **Multi-format export** — HTML, Markdown, and JSON export
|
|
98
|
+
- **CLI tools** — send messages and check status directly from the command line
|
|
99
|
+
- **Plugin system** — extend with custom tools, 30s sandboxed execution
|
|
100
|
+
- **Zero config** — one `npx` command, auto-detects your CLI, works immediately
|
|
101
|
+
|
|
102
|
+
## Agent Templates
|
|
103
|
+
|
|
104
|
+
Pre-built team configurations. Each template gives you ready-to-paste prompts for every terminal.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npx let-them-talk init --template pair # A + B
|
|
108
|
+
npx let-them-talk init --template team # Coordinator + Researcher + Coder
|
|
109
|
+
npx let-them-talk init --template review # Author + Reviewer
|
|
110
|
+
npx let-them-talk init --template debate # Pro + Con
|
|
111
|
+
npx let-them-talk templates # List all available templates
|
|
52
112
|
```
|
|
53
113
|
|
|
54
|
-
|
|
114
|
+
| Template | Agents | Best For |
|
|
115
|
+
|----------|--------|----------|
|
|
116
|
+
| **pair** | A, B | Brainstorming, Q&A, simple conversations |
|
|
117
|
+
| **team** | Coordinator, Researcher, Coder | Complex features needing research + implementation |
|
|
118
|
+
| **review** | Author, Reviewer | Code review with structured feedback loops |
|
|
119
|
+
| **debate** | Pro, Con | Evaluating trade-offs, architecture decisions |
|
|
120
|
+
|
|
121
|
+
## Web Dashboard
|
|
122
|
+
|
|
123
|
+
Launch with `npx let-them-talk dashboard` — opens at `http://localhost:3000`.
|
|
124
|
+
|
|
125
|
+
**6 main tabs:**
|
|
126
|
+
|
|
127
|
+
- **Messages** — live feed with full markdown, message grouping, search, bookmarks, pins, emoji reactions, conversation replay, compact view
|
|
128
|
+
- **Tasks** — drag-and-drop kanban board (pending / in progress / done / blocked)
|
|
129
|
+
- **Workspaces** — per-agent key-value storage browser
|
|
130
|
+
- **Workflows** — horizontal pipeline visualization, advance or skip steps
|
|
131
|
+
- **Launch** — spawn new agents with templates, 4 built-in conversation templates with copyable prompts
|
|
132
|
+
- **Stats** — per-agent message counts, avg response times, hourly activity charts, conversation velocity
|
|
133
|
+
|
|
134
|
+
**Plus:**
|
|
55
135
|
|
|
56
|
-
|
|
136
|
+
- Agent monitoring with active / sleeping / dead / listening status
|
|
137
|
+
- Profile popups with avatars and role badges
|
|
138
|
+
- Message edit, delete, and copy actions on hover
|
|
139
|
+
- SSE auto-reconnect with exponential backoff and visual indicator
|
|
140
|
+
- Message injection and broadcast from browser
|
|
141
|
+
- Conversation branching with branch tabs
|
|
142
|
+
- Export as shareable HTML, Markdown, or JSON
|
|
143
|
+
- Multi-project support with auto-discover
|
|
144
|
+
- Premium glassmorphism UI with gradient accents
|
|
145
|
+
- Dark / light theme toggle
|
|
146
|
+
- Mobile responsive with hamburger sidebar
|
|
147
|
+
- Browser notifications and sound alerts
|
|
148
|
+
- LAN mode for phone access
|
|
57
149
|
|
|
58
|
-
|
|
150
|
+
## MCP Tools (27 + plugins)
|
|
59
151
|
|
|
60
|
-
|
|
152
|
+
<details>
|
|
153
|
+
<summary><strong>Messaging (13 tools)</strong></summary>
|
|
61
154
|
|
|
62
155
|
| Tool | Description |
|
|
63
156
|
|------|-------------|
|
|
@@ -71,112 +164,54 @@ Each CLI terminal spawns its own MCP server process via stdio. All processes rea
|
|
|
71
164
|
| `ack_message` | Confirm message was processed |
|
|
72
165
|
| `get_history` | View conversation with thread/branch filter |
|
|
73
166
|
| `get_summary` | Condensed conversation recap |
|
|
74
|
-
| `handoff` | Transfer work
|
|
75
|
-
| `share_file` | Send file contents
|
|
76
|
-
| `reset` | Clear data (auto-archives first) |
|
|
167
|
+
| `handoff` | Transfer work with context |
|
|
168
|
+
| `share_file` | Send file contents (max 100KB) |
|
|
169
|
+
| `reset` | Clear all data (auto-archives first) |
|
|
77
170
|
|
|
78
|
-
|
|
171
|
+
</details>
|
|
172
|
+
|
|
173
|
+
<details>
|
|
174
|
+
<summary><strong>Tasks & Workflows (6 tools)</strong></summary>
|
|
79
175
|
|
|
80
176
|
| Tool | Description |
|
|
81
177
|
|------|-------------|
|
|
82
178
|
| `create_task` | Create and assign tasks |
|
|
83
|
-
| `update_task` | Update
|
|
179
|
+
| `update_task` | Update status: pending / in_progress / done / blocked |
|
|
84
180
|
| `list_tasks` | View tasks with filters |
|
|
85
181
|
| `create_workflow` | Create multi-step pipeline with assignees |
|
|
86
182
|
| `advance_workflow` | Complete current step, auto-handoff to next |
|
|
87
|
-
| `workflow_status` | Get workflow progress |
|
|
183
|
+
| `workflow_status` | Get workflow progress percentage |
|
|
184
|
+
|
|
185
|
+
</details>
|
|
88
186
|
|
|
89
|
-
|
|
187
|
+
<details>
|
|
188
|
+
<summary><strong>Profiles & Workspaces (4 tools)</strong></summary>
|
|
90
189
|
|
|
91
190
|
| Tool | Description |
|
|
92
191
|
|------|-------------|
|
|
93
192
|
| `update_profile` | Set display name, avatar, bio, role |
|
|
94
|
-
| `workspace_write` | Write
|
|
95
|
-
| `workspace_read` | Read workspace
|
|
193
|
+
| `workspace_write` | Write key-value data (50 keys, 100KB/value) |
|
|
194
|
+
| `workspace_read` | Read your workspace or another agent's |
|
|
96
195
|
| `workspace_list` | List workspace keys |
|
|
97
196
|
|
|
98
|
-
|
|
197
|
+
</details>
|
|
198
|
+
|
|
199
|
+
<details>
|
|
200
|
+
<summary><strong>Branching (3 tools)</strong></summary>
|
|
99
201
|
|
|
100
202
|
| Tool | Description |
|
|
101
203
|
|------|-------------|
|
|
102
|
-
| `fork_conversation` | Fork
|
|
204
|
+
| `fork_conversation` | Fork at any message point |
|
|
103
205
|
| `switch_branch` | Switch to a different branch |
|
|
104
206
|
| `list_branches` | List all branches with message counts |
|
|
105
207
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- **Messages** — SSE-powered real-time feed, full markdown, message grouping, date separators, bookmarks, pins, emoji reactions, search, conversation replay
|
|
109
|
-
- **Tasks** — Kanban board (pending/in_progress/done/blocked), status updates from dashboard
|
|
110
|
-
- **Workspaces** — Per-agent key-value browser with collapsible accordion UI
|
|
111
|
-
- **Workflows** — Horizontal pipeline visualization, advance/skip steps from dashboard
|
|
112
|
-
- **Agent monitoring** — active/sleeping/dead/listening status, profile popups with avatars, provider badges, activity heatmap
|
|
113
|
-
- **Conversation branching** — branch tabs, switch between conversation forks
|
|
114
|
-
- **Message injection** — send messages or broadcast to agents from the browser
|
|
115
|
-
- **Plugin management** — plugin cards with enable/disable toggles
|
|
116
|
-
- **Export** — shareable HTML or Markdown download
|
|
117
|
-
- **Multi-project** — monitor multiple folders + auto-discover
|
|
118
|
-
- **Dark/light theme** — toggle with localStorage persistence
|
|
119
|
-
- **Mobile responsive** — hamburger sidebar, works on phones and tablets
|
|
120
|
-
|
|
121
|
-
### Reliability
|
|
122
|
-
|
|
123
|
-
- **Heartbeat** — 10s pings track agent liveness
|
|
124
|
-
- **Auto-compact** — message queue cleaned when > 500 lines
|
|
125
|
-
- **Auto-archive** — conversations saved before reset
|
|
126
|
-
- **Context hints** — warns agents when conversation gets long
|
|
127
|
-
- **Dead recipient warnings** — alerts when sending to offline agents
|
|
128
|
-
- **Clean exit** — agents deregister on process exit
|
|
129
|
-
|
|
130
|
-
## Agent Templates
|
|
131
|
-
|
|
132
|
-
Pre-built team configurations with ready-to-paste prompts:
|
|
133
|
-
|
|
134
|
-
| Template | Agents | Best For |
|
|
135
|
-
|----------|--------|----------|
|
|
136
|
-
| `pair` | A, B | Simple conversations, brainstorming |
|
|
137
|
-
| `team` | Coordinator, Researcher, Coder | Complex features, research + implementation |
|
|
138
|
-
| `review` | Author, Reviewer | Code review with structured feedback |
|
|
139
|
-
| `debate` | Pro, Con | Evaluating trade-offs and decisions |
|
|
140
|
-
|
|
141
|
-
## CLI Commands
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
npx let-them-talk init # Auto-detect CLI and configure
|
|
145
|
-
npx let-them-talk init --all # Configure for all CLIs
|
|
146
|
-
npx let-them-talk init --template <name> # Use a team template
|
|
147
|
-
npx let-them-talk templates # List available templates
|
|
148
|
-
npx let-them-talk dashboard # Launch web dashboard
|
|
149
|
-
npx let-them-talk reset # Clear conversation data
|
|
150
|
-
npx let-them-talk plugin list # List installed plugins
|
|
151
|
-
npx let-them-talk plugin add <file.js> # Install a plugin
|
|
152
|
-
npx let-them-talk plugin remove <name> # Remove a plugin
|
|
153
|
-
npx let-them-talk plugin enable <name> # Enable a plugin
|
|
154
|
-
npx let-them-talk plugin disable <name> # Disable a plugin
|
|
155
|
-
npx let-them-talk help # Show help
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## Updating
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
# If using npx (recommended) — clear cache to get latest version
|
|
162
|
-
npx clear-npx-cache
|
|
163
|
-
npx let-them-talk init # Re-run to update MCP config paths
|
|
164
|
-
|
|
165
|
-
# If installed globally
|
|
166
|
-
npm update -g let-them-talk
|
|
167
|
-
|
|
168
|
-
# Check your version
|
|
169
|
-
npx let-them-talk help # Shows version in header
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
After updating, restart your CLI terminals to pick up the new MCP server.
|
|
208
|
+
</details>
|
|
173
209
|
|
|
174
210
|
## Plugins
|
|
175
211
|
|
|
176
|
-
Extend Let Them Talk with custom tools.
|
|
212
|
+
Extend Let Them Talk with custom tools. Drop a `.js` file in `.agent-bridge/plugins/`.
|
|
177
213
|
|
|
178
214
|
```javascript
|
|
179
|
-
// plugins/my-tool.js
|
|
180
215
|
module.exports = {
|
|
181
216
|
name: 'my-tool',
|
|
182
217
|
description: 'What this tool does',
|
|
@@ -188,21 +223,56 @@ module.exports = {
|
|
|
188
223
|
required: ['query']
|
|
189
224
|
},
|
|
190
225
|
handler(args, ctx) {
|
|
191
|
-
// ctx
|
|
226
|
+
// ctx: sendMessage, getAgents, getHistory, readFile, registeredName, dataDir
|
|
192
227
|
return { result: 'done', query: args.query };
|
|
193
228
|
}
|
|
194
229
|
};
|
|
195
230
|
```
|
|
196
231
|
|
|
197
|
-
|
|
232
|
+
```bash
|
|
233
|
+
npx let-them-talk plugin add my-tool.js # install
|
|
234
|
+
npx let-them-talk plugin list # list installed
|
|
235
|
+
npx let-them-talk plugin remove my-tool # remove
|
|
236
|
+
npx let-them-talk plugin enable my-tool # enable
|
|
237
|
+
npx let-them-talk plugin disable my-tool # disable
|
|
238
|
+
```
|
|
198
239
|
|
|
199
|
-
|
|
240
|
+
Plugins run sandboxed with a 30-second timeout. Manage via CLI or dashboard.
|
|
200
241
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
242
|
+
## CLI Reference
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
npx let-them-talk init # auto-detect CLI, configure MCP
|
|
246
|
+
npx let-them-talk init --all # configure all CLIs
|
|
247
|
+
npx let-them-talk init --template <name> # use a team template
|
|
248
|
+
npx let-them-talk templates # list templates
|
|
249
|
+
npx let-them-talk dashboard # launch web dashboard
|
|
250
|
+
npx let-them-talk reset # clear conversation data
|
|
251
|
+
npx let-them-talk plugin <subcommand> # manage plugins
|
|
252
|
+
npx let-them-talk help # show help
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Updating
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
npx clear-npx-cache # clear cached version
|
|
259
|
+
npx let-them-talk init # re-run to update config
|
|
260
|
+
npx let-them-talk help # verify version
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
After updating, restart your CLI terminals to pick up the new MCP server.
|
|
264
|
+
|
|
265
|
+
## Security
|
|
266
|
+
|
|
267
|
+
Let Them Talk is a **local message broker**. It passes text messages between CLI terminals via shared files on your machine. It does **not** give agents any capabilities beyond what they already have.
|
|
268
|
+
|
|
269
|
+
**Does not:** access the internet, store API keys, run cloud services, or grant new filesystem access.
|
|
270
|
+
|
|
271
|
+
**Built-in protections:** CORS restriction, XSS prevention, path traversal protection, symlink validation, origin enforcement, SSE connection limits, input validation, message size limits (1MB), plugin sandboxing (30s timeout).
|
|
272
|
+
|
|
273
|
+
**LAN mode:** Optional phone access exposes the dashboard to your local WiFi only. Requires explicit activation.
|
|
274
|
+
|
|
275
|
+
Full details: [SECURITY.md](SECURITY.md)
|
|
206
276
|
|
|
207
277
|
## Environment Variables
|
|
208
278
|
|
|
@@ -210,34 +280,27 @@ Plugins run sandboxed with a 30-second timeout. Manage them via CLI or the dashb
|
|
|
210
280
|
|----------|---------|-------------|
|
|
211
281
|
| `AGENT_BRIDGE_DATA_DIR` | `{cwd}/.agent-bridge/` | Data directory path |
|
|
212
282
|
| `AGENT_BRIDGE_PORT` | `3000` | Dashboard port |
|
|
283
|
+
| `AGENT_BRIDGE_LAN` | `false` | Enable LAN mode |
|
|
213
284
|
| `NODE_ENV` | — | Set to `development` for hot-reload |
|
|
214
285
|
|
|
215
|
-
##
|
|
286
|
+
## Contributing
|
|
216
287
|
|
|
217
|
-
|
|
288
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
218
289
|
|
|
219
|
-
|
|
220
|
-
- Does not give agents filesystem access (they already have it via their CLI)
|
|
221
|
-
- Does not expose anything to the internet (dashboard binds to localhost only)
|
|
222
|
-
- Does not store or transmit API keys
|
|
223
|
-
- Does not run any cloud services
|
|
290
|
+
## Contact
|
|
224
291
|
|
|
225
|
-
|
|
226
|
-
- **CSRF protection** — external websites cannot send requests to the dashboard
|
|
227
|
-
- **XSS prevention** — all inputs are escaped before rendering
|
|
228
|
-
- **Path traversal protection** — agents cannot read files outside the project directory
|
|
229
|
-
- **Symlink protection** — follows symlinks and validates the real path
|
|
230
|
-
- **Origin enforcement** — POST/DELETE requests require valid localhost/LAN origin
|
|
231
|
-
- **SSE connection limits** — prevents connection exhaustion DoS
|
|
232
|
-
- **Forced sender identity** — dashboard messages are always marked as "Dashboard"
|
|
233
|
-
- **Input validation** — branch names, agent names, and paths are validated
|
|
234
|
-
|
|
235
|
-
### LAN mode
|
|
236
|
-
LAN mode (phone access) only exposes the dashboard to your local WiFi network, not the internet. It requires explicit activation and a firewall rule. A warning is shown when enabled.
|
|
237
|
-
|
|
238
|
-
### Plugins
|
|
239
|
-
Plugins run with full Node.js access. Only install plugins you trust. This is the same trust model as npm packages.
|
|
292
|
+
For business inquiries, licensing, and partnerships: **contact@talk.unrealai.studio**
|
|
240
293
|
|
|
241
294
|
## License
|
|
242
295
|
|
|
243
296
|
[Business Source License 1.1](LICENSE) — Free to use, self-host, and modify. Cannot be offered as a competing commercial hosted service. Converts to Apache 2.0 on March 14, 2028.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
<p align="center">
|
|
301
|
+
Built by <a href="https://github.com/Dekelelz">Dekelelz</a> ·
|
|
302
|
+
<a href="https://talk.unrealai.studio">Website</a> ·
|
|
303
|
+
<a href="https://discord.gg/6Y9YgkFNJP">Discord</a> ·
|
|
304
|
+
<a href="https://www.npmjs.com/package/let-them-talk">npm</a> ·
|
|
305
|
+
<a href="mailto:contact@talk.unrealai.studio">Contact</a>
|
|
306
|
+
</p>
|
package/SECURITY.md
CHANGED
|
@@ -14,7 +14,7 @@ If you discover a security vulnerability in Let Them Talk, please report it resp
|
|
|
14
14
|
|
|
15
15
|
**Do NOT open a public GitHub issue for security vulnerabilities.**
|
|
16
16
|
|
|
17
|
-
Instead, please email **
|
|
17
|
+
Instead, please email **contact@talk.unrealai.studio** or use [GitHub's private vulnerability reporting](https://github.com/Dekelelz/let-them-talk/security/advisories/new).
|
|
18
18
|
|
|
19
19
|
### What to include
|
|
20
20
|
|
package/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ const command = process.argv[2];
|
|
|
8
8
|
|
|
9
9
|
function printUsage() {
|
|
10
10
|
console.log(`
|
|
11
|
-
Let Them Talk — Agent Bridge v3.
|
|
11
|
+
Let Them Talk — Agent Bridge v3.4.0
|
|
12
12
|
MCP message broker for inter-agent communication
|
|
13
13
|
Supports: Claude Code, Gemini CLI, Codex CLI
|
|
14
14
|
|
|
@@ -28,7 +28,9 @@ function printUsage() {
|
|
|
28
28
|
npx let-them-talk plugin remove <n> Remove a plugin by name
|
|
29
29
|
npx let-them-talk plugin enable <n> Enable a plugin
|
|
30
30
|
npx let-them-talk plugin disable <n> Disable a plugin
|
|
31
|
-
npx let-them-talk
|
|
31
|
+
npx let-them-talk msg <agent> <text> Send a message to an agent
|
|
32
|
+
npx let-them-talk status Show active agents and message count
|
|
33
|
+
npx let-them-talk help Show this help message
|
|
32
34
|
`);
|
|
33
35
|
}
|
|
34
36
|
|
|
@@ -416,6 +418,97 @@ function dashboard() {
|
|
|
416
418
|
require('./dashboard.js');
|
|
417
419
|
}
|
|
418
420
|
|
|
421
|
+
function resolveDataDirCli() {
|
|
422
|
+
return process.env.AGENT_BRIDGE_DATA_DIR || path.join(process.cwd(), '.agent-bridge');
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function readJsonl(filePath) {
|
|
426
|
+
if (!fs.existsSync(filePath)) return [];
|
|
427
|
+
return fs.readFileSync(filePath, 'utf8')
|
|
428
|
+
.split('\n')
|
|
429
|
+
.filter(l => l.trim())
|
|
430
|
+
.map(l => { try { return JSON.parse(l); } catch { return null; } })
|
|
431
|
+
.filter(Boolean);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
function readJson(filePath) {
|
|
435
|
+
if (!fs.existsSync(filePath)) return {};
|
|
436
|
+
try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); } catch { return {}; }
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
function isPidAlive(pid) {
|
|
440
|
+
if (!pid) return false;
|
|
441
|
+
try { process.kill(pid, 0); return true; } catch { return false; }
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
function cliMsg() {
|
|
445
|
+
const recipient = process.argv[3];
|
|
446
|
+
const textParts = process.argv.slice(4);
|
|
447
|
+
if (!recipient || !textParts.length) {
|
|
448
|
+
console.error(' Usage: npx let-them-talk msg <agent> <text>');
|
|
449
|
+
process.exit(1);
|
|
450
|
+
}
|
|
451
|
+
if (!/^[a-zA-Z0-9_-]{1,20}$/.test(recipient)) {
|
|
452
|
+
console.error(' Agent name must be 1-20 alphanumeric characters (with _ or -).');
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
const text = textParts.join(' ');
|
|
456
|
+
const dir = resolveDataDirCli();
|
|
457
|
+
if (!fs.existsSync(dir)) {
|
|
458
|
+
console.error(' No .agent-bridge/ directory found. Run "npx let-them-talk init" first.');
|
|
459
|
+
process.exit(1);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
const msgId = 'm' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
|
|
463
|
+
const msg = {
|
|
464
|
+
id: msgId,
|
|
465
|
+
from: 'CLI',
|
|
466
|
+
to: recipient,
|
|
467
|
+
content: text,
|
|
468
|
+
timestamp: new Date().toISOString(),
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
const messagesFile = path.join(dir, 'messages.jsonl');
|
|
472
|
+
const historyFile = path.join(dir, 'history.jsonl');
|
|
473
|
+
fs.appendFileSync(messagesFile, JSON.stringify(msg) + '\n');
|
|
474
|
+
fs.appendFileSync(historyFile, JSON.stringify(msg) + '\n');
|
|
475
|
+
|
|
476
|
+
console.log(' Message sent to ' + recipient + ': ' + text);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
function cliStatus() {
|
|
480
|
+
const dir = resolveDataDirCli();
|
|
481
|
+
if (!fs.existsSync(dir)) {
|
|
482
|
+
console.error(' No .agent-bridge/ directory found. Run "npx let-them-talk init" first.');
|
|
483
|
+
process.exit(1);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const agents = readJson(path.join(dir, 'agents.json'));
|
|
487
|
+
const history = readJsonl(path.join(dir, 'history.jsonl'));
|
|
488
|
+
|
|
489
|
+
console.log('');
|
|
490
|
+
console.log(' Agent Bridge Status');
|
|
491
|
+
console.log(' ===================');
|
|
492
|
+
console.log(' Messages: ' + history.length);
|
|
493
|
+
console.log('');
|
|
494
|
+
|
|
495
|
+
const names = Object.keys(agents);
|
|
496
|
+
if (!names.length) {
|
|
497
|
+
console.log(' No agents registered.');
|
|
498
|
+
} else {
|
|
499
|
+
console.log(' Agents:');
|
|
500
|
+
for (const name of names) {
|
|
501
|
+
const info = agents[name];
|
|
502
|
+
const alive = isPidAlive(info.pid);
|
|
503
|
+
const status = alive ? '\x1b[32monline\x1b[0m' : '\x1b[31moffline\x1b[0m';
|
|
504
|
+
const lastActivity = info.last_activity || info.timestamp || '';
|
|
505
|
+
const msgCount = history.filter(m => m.from === name).length;
|
|
506
|
+
console.log(' ' + name.padEnd(16) + ' ' + status + ' msgs: ' + msgCount + ' last: ' + (lastActivity ? new Date(lastActivity).toLocaleTimeString() : '-'));
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
console.log('');
|
|
510
|
+
}
|
|
511
|
+
|
|
419
512
|
switch (command) {
|
|
420
513
|
case 'init':
|
|
421
514
|
init();
|
|
@@ -429,6 +522,14 @@ switch (command) {
|
|
|
429
522
|
case 'reset':
|
|
430
523
|
reset();
|
|
431
524
|
break;
|
|
525
|
+
case 'msg':
|
|
526
|
+
case 'message':
|
|
527
|
+
case 'send':
|
|
528
|
+
cliMsg();
|
|
529
|
+
break;
|
|
530
|
+
case 'status':
|
|
531
|
+
cliStatus();
|
|
532
|
+
break;
|
|
432
533
|
case 'plugin':
|
|
433
534
|
case 'plugins':
|
|
434
535
|
pluginCmd();
|