tmux-team 2.2.0 → 3.0.0-alpha.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 +42 -193
- package/package.json +3 -2
- package/skills/README.md +101 -0
- package/skills/claude/team.md +46 -0
- package/skills/codex/SKILL.md +46 -0
- package/src/cli.ts +19 -5
- package/src/commands/config.ts +2 -44
- package/src/commands/help.ts +1 -2
- package/src/commands/install-skill.ts +148 -0
- package/src/commands/talk.test.ts +458 -63
- package/src/commands/talk.ts +158 -69
- package/src/config.test.ts +0 -1
- package/src/config.ts +0 -1
- package/src/identity.ts +89 -0
- package/src/types.ts +2 -2
- package/src/version.ts +1 -1
- package/src/pm/commands.test.ts +0 -1462
- package/src/pm/commands.ts +0 -1011
- package/src/pm/manager.test.ts +0 -377
- package/src/pm/manager.ts +0 -146
- package/src/pm/permissions.test.ts +0 -444
- package/src/pm/permissions.ts +0 -293
- package/src/pm/storage/adapter.ts +0 -57
- package/src/pm/storage/fs.test.ts +0 -512
- package/src/pm/storage/fs.ts +0 -290
- package/src/pm/storage/github.ts +0 -842
- package/src/pm/types.ts +0 -91
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**The lightweight coordination layer for terminal-based AI agents.**
|
|
4
4
|
|
|
5
|
-
tmux-team is a protocol-agnostic
|
|
5
|
+
tmux-team is a protocol-agnostic transport layer that enables multi-agent collaboration directly within your existing tmux workflow. It turns a collection of isolated terminal panes into a coordinated AI team.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -34,32 +34,24 @@ Unlike heavyweight frameworks that require specific SDKs or cloud infrastructure
|
|
|
34
34
|
|
|
35
35
|
### 1. Deterministic Transport (`--delay` vs. `sleep`)
|
|
36
36
|
|
|
37
|
-
**The Problem**: Tool allowlists typically approve one safe command (`tmux-team talk ...`) but not arbitrary shell commands. Using `sleep` is often blocked by security policies
|
|
37
|
+
**The Problem**: Tool allowlists typically approve one safe command (`tmux-team talk ...`) but not arbitrary shell commands. Using `sleep` is often blocked by security policies.
|
|
38
38
|
|
|
39
|
-
**The Why**: Internal delay keeps the workflow as a single tool call.
|
|
39
|
+
**The Why**: Internal delay keeps the workflow as a single tool call. No shell dependency, no policy friction.
|
|
40
40
|
|
|
41
41
|
### 2. Stateless Handshakes (The "Nonce" Strategy)
|
|
42
42
|
|
|
43
|
-
**The Problem**: Terminal panes are streams, not RPC channels. A simple `[DONE]` string could already be in scrollback
|
|
43
|
+
**The Problem**: Terminal panes are streams, not RPC channels. A simple `[DONE]` string could already be in scrollback.
|
|
44
44
|
|
|
45
|
-
**The Why**: We use a unique **Nonce**
|
|
45
|
+
**The Why**: We use a unique **Nonce** for every request: `{tmux-team-end:8f3a}`.
|
|
46
46
|
- **Collision Avoidance** — Prevents matching markers from previous turns
|
|
47
|
-
- **Completion Safety** — Ensures the agent has truly finished
|
|
48
|
-
- **Zero-API RPC** — Creates request/response semantics over a standard TTY
|
|
49
|
-
|
|
50
|
-
Combined with one-at-a-time locking, nonce markers ensure state stays consistent and debuggable.
|
|
47
|
+
- **Completion Safety** — Ensures the agent has truly finished
|
|
48
|
+
- **Zero-API RPC** — Creates request/response semantics over a standard TTY
|
|
51
49
|
|
|
52
50
|
### 3. Context Injection (Preambles)
|
|
53
51
|
|
|
54
|
-
**The Problem**: AI agents are prone to "instruction drift." Over a long session, they might
|
|
55
|
-
|
|
56
|
-
**The Why**: Preambles act as a forced system prompt for CLI environments. By injecting these "hidden instructions" at the transport level, we ensure the agent remains in character (e.g., "You are the code reviewer, do not edit files") without cluttering the human's command history. It's about reducing **Cognitive Load**—the human focuses on intent, the CLI enforces protocol.
|
|
57
|
-
|
|
58
|
-
### 4. Token-Efficient Polling
|
|
52
|
+
**The Problem**: AI agents are prone to "instruction drift." Over a long session, they might forget constraints.
|
|
59
53
|
|
|
60
|
-
**The
|
|
61
|
-
|
|
62
|
-
**The Why**: Default to the simple mental model (send → manually check). Teams opt into `--wait` when they're ready. By capturing only the last few lines of the buffer and searching for the short, high-entropy nonce, we keep overhead near zero—we're looking for a single "heartbeat" at the TTY's edge, not re-parsing the whole history.
|
|
54
|
+
**The Why**: Preambles act as a forced system prompt for CLI environments. By injecting these "hidden instructions" at the transport level, we ensure the agent remains in character.
|
|
63
55
|
|
|
64
56
|
---
|
|
65
57
|
|
|
@@ -69,7 +61,7 @@ Combined with one-at-a-time locking, nonce markers ensure state stays consistent
|
|
|
69
61
|
npm install -g tmux-team
|
|
70
62
|
```
|
|
71
63
|
|
|
72
|
-
**Requirements:** Node.js >=
|
|
64
|
+
**Requirements:** Node.js >= 18, tmux, macOS/Linux
|
|
73
65
|
|
|
74
66
|
### Shell Completion
|
|
75
67
|
|
|
@@ -88,6 +80,24 @@ eval "$(tmux-team completion bash)"
|
|
|
88
80
|
/plugin install tmux-team@tmux-team
|
|
89
81
|
```
|
|
90
82
|
|
|
83
|
+
### Agent Skills (Optional)
|
|
84
|
+
|
|
85
|
+
Install tmux-team as a native skill for your AI coding agent:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Install for Claude Code (user-wide)
|
|
89
|
+
tmux-team install-skill claude
|
|
90
|
+
|
|
91
|
+
# Install for OpenAI Codex (user-wide)
|
|
92
|
+
tmux-team install-skill codex
|
|
93
|
+
|
|
94
|
+
# Install to project directory instead
|
|
95
|
+
tmux-team install-skill claude --local
|
|
96
|
+
tmux-team install-skill codex --local
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
See [skills/README.md](./skills/README.md) for detailed instructions.
|
|
100
|
+
|
|
91
101
|
---
|
|
92
102
|
|
|
93
103
|
## ⌨️ Quick Start
|
|
@@ -139,10 +149,9 @@ Once the plugin is installed, coordinate directly from your Claude Code session:
|
|
|
139
149
|
| `update <name> --pane/--remark` | Update agent configuration |
|
|
140
150
|
| `remove <name>` | Unregister an agent |
|
|
141
151
|
| `init` | Create `tmux-team.json` in current directory |
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `pm log` | View audit event log |
|
|
152
|
+
| `config [show/set/clear]` | View/modify settings |
|
|
153
|
+
| `preamble [show/set/clear]` | Manage agent preambles |
|
|
154
|
+
| `install-skill <agent>` | Install skill for Claude/Codex (--local/--user) |
|
|
146
155
|
| `completion [zsh\|bash]` | Output shell completion script |
|
|
147
156
|
|
|
148
157
|
---
|
|
@@ -151,15 +160,14 @@ Once the plugin is installed, coordinate directly from your Claude Code session:
|
|
|
151
160
|
|
|
152
161
|
### Local Config (`./tmux-team.json`)
|
|
153
162
|
|
|
154
|
-
Per-project agent registry with optional preambles
|
|
163
|
+
Per-project agent registry with optional preambles:
|
|
155
164
|
|
|
156
165
|
```json
|
|
157
166
|
{
|
|
158
167
|
"claude": {
|
|
159
168
|
"pane": "10.0",
|
|
160
169
|
"remark": "Frontend specialist",
|
|
161
|
-
"preamble": "Focus on UI components. Ask for review before merging."
|
|
162
|
-
"deny": ["pm:task:update(status)"]
|
|
170
|
+
"preamble": "Focus on UI components. Ask for review before merging."
|
|
163
171
|
},
|
|
164
172
|
"codex": {
|
|
165
173
|
"pane": "10.1",
|
|
@@ -174,7 +182,6 @@ Per-project agent registry with optional preambles and permissions:
|
|
|
174
182
|
| `pane` | tmux pane ID (required) |
|
|
175
183
|
| `remark` | Description shown in `list` |
|
|
176
184
|
| `preamble` | Hidden instructions prepended to every message |
|
|
177
|
-
| `deny` | Permission patterns to block (e.g., `pm:task:update(status)`) |
|
|
178
185
|
|
|
179
186
|
### Global Config (`~/.config/tmux-team/config.json`)
|
|
180
187
|
|
|
@@ -188,7 +195,7 @@ Global settings that apply to all projects:
|
|
|
188
195
|
"timeout": 180,
|
|
189
196
|
"pollInterval": 1,
|
|
190
197
|
"captureLines": 100,
|
|
191
|
-
"
|
|
198
|
+
"preambleEvery": 3
|
|
192
199
|
}
|
|
193
200
|
}
|
|
194
201
|
```
|
|
@@ -200,13 +207,11 @@ Global settings that apply to all projects:
|
|
|
200
207
|
| `defaults.timeout` | Default --wait timeout in seconds |
|
|
201
208
|
| `defaults.pollInterval` | Polling interval in seconds |
|
|
202
209
|
| `defaults.captureLines` | Default lines for `check` command |
|
|
203
|
-
| `defaults.
|
|
204
|
-
|
|
205
|
-
> **Note:** Agent-specific config (preamble, deny) lives in local `tmux-team.json` only.
|
|
210
|
+
| `defaults.preambleEvery` | Inject preamble every N messages (default: 3) |
|
|
206
211
|
|
|
207
212
|
---
|
|
208
213
|
|
|
209
|
-
## ✨
|
|
214
|
+
## ✨ Features
|
|
210
215
|
|
|
211
216
|
### 📡 Enhanced `talk` Command
|
|
212
217
|
|
|
@@ -235,100 +240,26 @@ Use the CLI to manage preambles:
|
|
|
235
240
|
|
|
236
241
|
```bash
|
|
237
242
|
tmux-team preamble show gemini # View current preamble
|
|
238
|
-
tmux-team preamble set gemini "
|
|
243
|
+
tmux-team preamble set gemini "Be concise" # Set preamble
|
|
239
244
|
tmux-team preamble clear gemini # Remove preamble
|
|
240
245
|
```
|
|
241
246
|
|
|
242
|
-
### 🔐 Agent Permissions
|
|
243
|
-
|
|
244
|
-
Control what agents can do with `deny` patterns in `tmux-team.json`:
|
|
245
|
-
|
|
246
|
-
```json
|
|
247
|
-
{
|
|
248
|
-
"claude": {
|
|
249
|
-
"pane": "10.0",
|
|
250
|
-
"deny": ["pm:task:update(status)", "pm:milestone:update(status)"]
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
Pattern format: `pm:<resource>:<action>(<fields>)`
|
|
256
|
-
|
|
257
|
-
| Pattern | Effect |
|
|
258
|
-
|---------|--------|
|
|
259
|
-
| `pm:task:update(status)` | Block status changes only |
|
|
260
|
-
| `pm:task:update(*)` | Block all task updates |
|
|
261
|
-
| `pm:task:update` | Block entire update action |
|
|
262
|
-
|
|
263
|
-
Permissions are enforced via pane identity—agents are identified by which tmux pane they run in, not environment variables.
|
|
264
|
-
|
|
265
|
-
### 🎯 Project Management
|
|
266
|
-
|
|
267
|
-
```bash
|
|
268
|
-
# Initialize a team project
|
|
269
|
-
tmux-team pm init --name "Auth Refactor"
|
|
270
|
-
|
|
271
|
-
# Manage milestones and tasks
|
|
272
|
-
tmux-team pm m add "MVP Release"
|
|
273
|
-
tmux-team pm t add "Implement login" --milestone 1
|
|
274
|
-
tmux-team pm t update 1 --status in_progress
|
|
275
|
-
tmux-team pm t done 1
|
|
276
|
-
|
|
277
|
-
# View audit log
|
|
278
|
-
tmux-team pm log --limit 10
|
|
279
|
-
```
|
|
280
|
-
|
|
281
247
|
---
|
|
282
248
|
|
|
283
249
|
## 🚫 Non-Goals
|
|
284
250
|
|
|
285
251
|
tmux-team intentionally stays lightweight:
|
|
286
252
|
|
|
287
|
-
- **Not an orchestrator** — No automatic
|
|
288
|
-
- **Not a session manager** — Doesn't create/manage tmux sessions
|
|
253
|
+
- **Not an orchestrator** — No automatic agent selection or routing
|
|
254
|
+
- **Not a session manager** — Doesn't create/manage tmux sessions
|
|
289
255
|
- **Not an LLM wrapper** — Doesn't process or route messages through AI
|
|
290
256
|
|
|
291
257
|
It's the plumbing layer that lets humans and AI agents coordinate via tmux, nothing more.
|
|
292
258
|
|
|
293
259
|
---
|
|
294
260
|
|
|
295
|
-
*Built for developers who live in the terminal and want their AIs to do the same.*
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
261
|
## 📖 Command Reference
|
|
300
262
|
|
|
301
|
-
### Core Commands
|
|
302
|
-
|
|
303
|
-
```
|
|
304
|
-
tmux-team <command> [arguments]
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
| Command | Description |
|
|
308
|
-
|---------|-------------|
|
|
309
|
-
| `talk <target> <message>` | Send message to an agent (or `all` for broadcast) |
|
|
310
|
-
| `check <target> [lines]` | Capture output from agent's pane (default: 100 lines) |
|
|
311
|
-
| `list` | List all configured agents |
|
|
312
|
-
| `add <name> <pane> [remark]` | Register a new agent |
|
|
313
|
-
| `update <name> [options]` | Update an agent's config |
|
|
314
|
-
| `remove <name>` | Unregister an agent |
|
|
315
|
-
| `init` | Create empty `tmux-team.json` in current directory |
|
|
316
|
-
| `config [show\|set\|clear]` | View/modify configuration settings |
|
|
317
|
-
| `preamble [show\|set\|clear]` | Manage agent preambles |
|
|
318
|
-
| `pm <subcommand>` | Project management commands |
|
|
319
|
-
| `completion [zsh\|bash]` | Output shell completion script |
|
|
320
|
-
| `help` | Show help message |
|
|
321
|
-
|
|
322
|
-
**Aliases:** `send` = talk, `read` = check, `ls` = list, `rm` = remove
|
|
323
|
-
|
|
324
|
-
### Global Options
|
|
325
|
-
|
|
326
|
-
| Option | Description |
|
|
327
|
-
|--------|-------------|
|
|
328
|
-
| `--json` | Output in JSON format |
|
|
329
|
-
| `--verbose` | Show detailed output |
|
|
330
|
-
| `--force` | Skip warnings |
|
|
331
|
-
|
|
332
263
|
### talk Options
|
|
333
264
|
|
|
334
265
|
| Option | Description |
|
|
@@ -342,105 +273,23 @@ tmux-team <command> [arguments]
|
|
|
342
273
|
|
|
343
274
|
```bash
|
|
344
275
|
tmux-team config show # Show current config
|
|
345
|
-
tmux-team config set <key> <value> # Set a config value
|
|
346
276
|
tmux-team config set mode wait # Enable wait mode
|
|
347
277
|
tmux-team config set preambleMode disabled # Disable preambles
|
|
348
|
-
tmux-team config set
|
|
278
|
+
tmux-team config set preambleEvery 5 # Inject preamble every 5 messages
|
|
349
279
|
tmux-team config clear <key> # Clear a config value
|
|
350
|
-
tmux-team config --global set ... # Modify global config
|
|
351
280
|
```
|
|
352
281
|
|
|
353
282
|
### preamble Command
|
|
354
283
|
|
|
355
284
|
```bash
|
|
356
285
|
tmux-team preamble show <agent> # Show agent's preamble
|
|
357
|
-
tmux-team preamble set <agent> "
|
|
286
|
+
tmux-team preamble set <agent> "text" # Set agent's preamble
|
|
358
287
|
tmux-team preamble clear <agent> # Clear agent's preamble
|
|
359
288
|
```
|
|
360
289
|
|
|
361
290
|
---
|
|
362
291
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
```
|
|
366
|
-
tmux-team pm <subcommand>
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
**Shorthands:** `pm m` = milestone, `pm t` = task, `pm ls` = list
|
|
370
|
-
|
|
371
|
-
#### pm init
|
|
372
|
-
|
|
373
|
-
```bash
|
|
374
|
-
tmux-team pm init --name "Project Name"
|
|
375
|
-
tmux-team pm init --name "Sprint 1" --backend github --repo owner/repo
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
| Option | Description |
|
|
379
|
-
|--------|-------------|
|
|
380
|
-
| `--name <name>` | Project name (required) |
|
|
381
|
-
| `--backend <fs\|github>` | Storage backend (default: `fs`) |
|
|
382
|
-
| `--repo <owner/repo>` | GitHub repo (required for github backend) |
|
|
383
|
-
|
|
384
|
-
#### pm list
|
|
385
|
-
|
|
386
|
-
```bash
|
|
387
|
-
tmux-team pm list # List all teams/projects
|
|
388
|
-
tmux-team pm ls # Shorthand
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
#### pm milestone (shorthand: `pm m`)
|
|
392
|
-
|
|
393
|
-
```bash
|
|
394
|
-
tmux-team pm m # List all milestones
|
|
395
|
-
tmux-team pm m add "Phase 1" # Add milestone
|
|
396
|
-
tmux-team pm m add "Phase 1" -d "..." # Add with description
|
|
397
|
-
tmux-team pm m list # List milestones
|
|
398
|
-
tmux-team pm m done <id> # Mark milestone complete
|
|
399
|
-
tmux-team pm m delete <id> # Delete milestone (or: rm)
|
|
400
|
-
tmux-team pm m doc <id> # Print milestone documentation
|
|
401
|
-
tmux-team pm m doc <id> --edit # Edit doc in $EDITOR
|
|
402
|
-
tmux-team pm m doc <id> ref # Print doc path/reference
|
|
403
|
-
tmux-team pm m doc <id> --body "..." # Set doc content directly
|
|
404
|
-
tmux-team pm m doc <id> --body-file x # Set doc content from file
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
#### pm task (shorthand: `pm t`)
|
|
408
|
-
|
|
409
|
-
```bash
|
|
410
|
-
tmux-team pm t # List all tasks
|
|
411
|
-
tmux-team pm t add "Task title" # Add task
|
|
412
|
-
tmux-team pm t add "..." --milestone 1 # Add task to milestone
|
|
413
|
-
tmux-team pm t add "..." --body "..." # Add task with body
|
|
414
|
-
tmux-team pm t add "..." -a @user # Add task with assignee
|
|
415
|
-
tmux-team pm t list # List tasks
|
|
416
|
-
tmux-team pm t list --status pending # Filter by status
|
|
417
|
-
tmux-team pm t list --milestone 1 # Filter by milestone
|
|
418
|
-
tmux-team pm t show <id> # Show task details
|
|
419
|
-
tmux-team pm t update <id> --status in_progress
|
|
420
|
-
tmux-team pm t update <id> -a @user # Assign task
|
|
421
|
-
tmux-team pm t done <id> # Mark task complete
|
|
422
|
-
tmux-team pm t doc <id> # Print task documentation
|
|
423
|
-
tmux-team pm t doc <id> --edit # Edit doc in $EDITOR
|
|
424
|
-
tmux-team pm t doc <id> ref # Print doc path/reference
|
|
425
|
-
tmux-team pm t doc <id> --body "..." # Set doc content directly
|
|
426
|
-
tmux-team pm t doc <id> --body-file x # Set doc content from file
|
|
427
|
-
```
|
|
428
|
-
|
|
429
|
-
#### pm log
|
|
430
|
-
|
|
431
|
-
```bash
|
|
432
|
-
tmux-team pm log # Show audit event log
|
|
433
|
-
tmux-team pm log --limit 10 # Limit to 10 events
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
---
|
|
437
|
-
|
|
438
|
-
### Storage Backends
|
|
439
|
-
|
|
440
|
-
| Backend | Description |
|
|
441
|
-
|---------|-------------|
|
|
442
|
-
| `fs` | Local filesystem (default). Tasks stored in `~/.config/tmux-team/teams/` |
|
|
443
|
-
| `github` | GitHub Issues. Tasks become issues, milestones sync with GitHub |
|
|
292
|
+
*Built for developers who live in the terminal and want their AIs to do the same.*
|
|
444
293
|
|
|
445
294
|
---
|
|
446
295
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tmux-team",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-alpha.2",
|
|
4
4
|
"description": "CLI tool for AI agent collaboration in tmux - manage cross-pane communication",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
],
|
|
43
43
|
"files": [
|
|
44
44
|
"bin",
|
|
45
|
-
"src"
|
|
45
|
+
"src",
|
|
46
|
+
"skills"
|
|
46
47
|
],
|
|
47
48
|
"dependencies": {
|
|
48
49
|
"tsx": "^4.7.0"
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Agent Skills Installation
|
|
2
|
+
|
|
3
|
+
tmux-team provides pre-built skills for popular AI coding agents.
|
|
4
|
+
|
|
5
|
+
## Quick Install
|
|
6
|
+
|
|
7
|
+
Use the CLI to install skills automatically:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Install for Claude Code (user-wide)
|
|
11
|
+
tmux-team install-skill claude
|
|
12
|
+
|
|
13
|
+
# Install for OpenAI Codex (user-wide)
|
|
14
|
+
tmux-team install-skill codex
|
|
15
|
+
|
|
16
|
+
# Install to project directory (local scope)
|
|
17
|
+
tmux-team install-skill claude --local
|
|
18
|
+
tmux-team install-skill codex --local
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Claude Code
|
|
22
|
+
|
|
23
|
+
Claude Code uses slash commands stored in `~/.claude/commands/` (user) or `.claude/commands/` (local).
|
|
24
|
+
|
|
25
|
+
### Manual Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mkdir -p ~/.claude/commands
|
|
29
|
+
cp skills/claude/team.md ~/.claude/commands/team.md
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Usage
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# In Claude Code, use the slash command:
|
|
36
|
+
/team talk codex "Review this PR"
|
|
37
|
+
|
|
38
|
+
# Or invoke implicitly - Claude will recognize when to use it
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## OpenAI Codex CLI
|
|
42
|
+
|
|
43
|
+
Codex uses skills stored in `~/.codex/skills/<skill-name>/` (user) or `.codex/skills/<skill-name>/` (local).
|
|
44
|
+
|
|
45
|
+
### Manual Install
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mkdir -p ~/.codex/skills/tmux-team
|
|
49
|
+
cp skills/codex/SKILL.md ~/.codex/skills/tmux-team/SKILL.md
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Enable Skills (Required)
|
|
53
|
+
|
|
54
|
+
Skills require the feature flag:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
codex --enable skills
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Or set in your config to enable by default.
|
|
61
|
+
|
|
62
|
+
### Usage
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Explicit invocation
|
|
66
|
+
$tmux-team talk codex "Review this PR"
|
|
67
|
+
|
|
68
|
+
# Implicit - Codex auto-selects when you mention other agents
|
|
69
|
+
"Ask the codex agent to review the authentication code"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Gemini CLI
|
|
73
|
+
|
|
74
|
+
Gemini CLI doesn't have a native skill system yet. Use the preamble feature instead:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"gemini": {
|
|
79
|
+
"pane": "%2",
|
|
80
|
+
"preamble": "You can communicate with other agents using tmux-team CLI. Run `tmux-team help` to learn more."
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Save this to `tmux-team.json` in your project root.
|
|
86
|
+
|
|
87
|
+
## Verify Installation
|
|
88
|
+
|
|
89
|
+
After installation, verify the skill is recognized:
|
|
90
|
+
|
|
91
|
+
**Claude Code:**
|
|
92
|
+
```
|
|
93
|
+
/help
|
|
94
|
+
# Should show: /team - Talk to peer agents...
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Codex:**
|
|
98
|
+
```
|
|
99
|
+
/skills
|
|
100
|
+
# Should show: tmux-team
|
|
101
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash(tmux-team:*)
|
|
3
|
+
description: Talk to peer agents in different tmux panes
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Execute this tmux-team command: `tmux-team $ARGUMENTS`
|
|
7
|
+
|
|
8
|
+
You are working in a multi-agent tmux environment.
|
|
9
|
+
Use the tmux-team CLI to communicate with other agents.
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Send message to an agent
|
|
15
|
+
tmux-team talk codex "your message"
|
|
16
|
+
tmux-team talk gemini "your message"
|
|
17
|
+
tmux-team talk all "broadcast message"
|
|
18
|
+
|
|
19
|
+
# Send with delay (useful for rate limiting)
|
|
20
|
+
tmux-team talk codex "message" --delay 5
|
|
21
|
+
|
|
22
|
+
# Send and wait for response (blocks until agent replies)
|
|
23
|
+
tmux-team talk codex "message" --wait --timeout 120
|
|
24
|
+
|
|
25
|
+
# Read agent response (default: 100 lines)
|
|
26
|
+
tmux-team check codex
|
|
27
|
+
tmux-team check gemini 200
|
|
28
|
+
|
|
29
|
+
# List all configured agents
|
|
30
|
+
tmux-team list
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
1. Send message: `tmux-team talk codex "Review this code"`
|
|
36
|
+
2. Wait 5-15 seconds (or use `--wait` flag)
|
|
37
|
+
3. Read response: `tmux-team check codex`
|
|
38
|
+
4. If response is cut off: `tmux-team check codex 200`
|
|
39
|
+
|
|
40
|
+
## Notes
|
|
41
|
+
|
|
42
|
+
- `talk` automatically sends Enter key after the message
|
|
43
|
+
- `talk` automatically filters exclamation marks for Gemini (TTY issue)
|
|
44
|
+
- Use `--delay` instead of sleep (safer for tool whitelists)
|
|
45
|
+
- Use `--wait` for synchronous request-response patterns
|
|
46
|
+
- Run `tmux-team help` for full CLI documentation
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux-team
|
|
3
|
+
description: Communicate with other AI agents in tmux panes. Use when you need to talk to codex, claude, gemini, or other agents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
When invoked, execute the tmux-team command with the provided arguments.
|
|
7
|
+
|
|
8
|
+
You are working in a multi-agent tmux environment.
|
|
9
|
+
Use the tmux-team CLI to communicate with other agents.
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Send message to an agent
|
|
15
|
+
tmux-team talk codex "your message"
|
|
16
|
+
tmux-team talk gemini "your message"
|
|
17
|
+
tmux-team talk all "broadcast message"
|
|
18
|
+
|
|
19
|
+
# Send with delay (useful for rate limiting)
|
|
20
|
+
tmux-team talk codex "message" --delay 5
|
|
21
|
+
|
|
22
|
+
# Send and wait for response (blocks until agent replies)
|
|
23
|
+
tmux-team talk codex "message" --wait --timeout 120
|
|
24
|
+
|
|
25
|
+
# Read agent response (default: 100 lines)
|
|
26
|
+
tmux-team check codex
|
|
27
|
+
tmux-team check gemini 200
|
|
28
|
+
|
|
29
|
+
# List all configured agents
|
|
30
|
+
tmux-team list
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
1. Send message: `tmux-team talk codex "Review this code"`
|
|
36
|
+
2. Wait 5-15 seconds (or use `--wait` flag)
|
|
37
|
+
3. Read response: `tmux-team check codex`
|
|
38
|
+
4. If response is cut off: `tmux-team check codex 200`
|
|
39
|
+
|
|
40
|
+
## Notes
|
|
41
|
+
|
|
42
|
+
- `talk` automatically sends Enter key after the message
|
|
43
|
+
- `talk` automatically filters exclamation marks for Gemini (TTY issue)
|
|
44
|
+
- Use `--delay` instead of sleep (safer for tool whitelists)
|
|
45
|
+
- Use `--wait` for synchronous request-response patterns
|
|
46
|
+
- Run `tmux-team help` for full CLI documentation
|
package/src/cli.ts
CHANGED
|
@@ -17,9 +17,9 @@ import { cmdRemove } from './commands/remove.js';
|
|
|
17
17
|
import { cmdTalk } from './commands/talk.js';
|
|
18
18
|
import { cmdCheck } from './commands/check.js';
|
|
19
19
|
import { cmdCompletion } from './commands/completion.js';
|
|
20
|
-
import { cmdPm } from './pm/commands.js';
|
|
21
20
|
import { cmdConfig } from './commands/config.js';
|
|
22
21
|
import { cmdPreamble } from './commands/preamble.js';
|
|
22
|
+
import { cmdInstallSkill } from './commands/install-skill.js';
|
|
23
23
|
|
|
24
24
|
// ─────────────────────────────────────────────────────────────
|
|
25
25
|
// Argument parsing
|
|
@@ -203,10 +203,6 @@ function main(): void {
|
|
|
203
203
|
cmdCheck(ctx, args[0], args[1] ? parseInt(args[1], 10) : undefined);
|
|
204
204
|
break;
|
|
205
205
|
|
|
206
|
-
case 'pm':
|
|
207
|
-
await cmdPm(ctx, args);
|
|
208
|
-
break;
|
|
209
|
-
|
|
210
206
|
case 'config':
|
|
211
207
|
cmdConfig(ctx, args);
|
|
212
208
|
break;
|
|
@@ -215,6 +211,24 @@ function main(): void {
|
|
|
215
211
|
cmdPreamble(ctx, args);
|
|
216
212
|
break;
|
|
217
213
|
|
|
214
|
+
case 'install-skill':
|
|
215
|
+
{
|
|
216
|
+
// Parse --local or --user flag
|
|
217
|
+
let scope = 'user';
|
|
218
|
+
const filteredArgs: string[] = [];
|
|
219
|
+
for (const arg of args) {
|
|
220
|
+
if (arg === '--local') {
|
|
221
|
+
scope = 'local';
|
|
222
|
+
} else if (arg === '--user') {
|
|
223
|
+
scope = 'user';
|
|
224
|
+
} else {
|
|
225
|
+
filteredArgs.push(arg);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
cmdInstallSkill(ctx, filteredArgs[0], scope);
|
|
229
|
+
}
|
|
230
|
+
break;
|
|
231
|
+
|
|
218
232
|
default:
|
|
219
233
|
ctx.ui.error(`Unknown command: ${command}. Run 'tmux-team help' for usage.`);
|
|
220
234
|
ctx.exit(ExitCodes.ERROR);
|