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 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 "Team Lead" that enables multi-agent collaboration directly within your existing tmux workflow. It provides the transport layer, synchronization, and project management needed to turn a collection of isolated terminal panes into a coordinated AI task force.
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, requires shell availability and proper quoting, and creates a separate process that's hard to manage.
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. This guarantees "First-Packet Integrity"—the CLI validates units (`500ms`, `2s`) and ensures the TTY buffer is ready to receive input specifically for that agent. No shell dependency, no policy friction.
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, or the agent might say "I'm almost done" and trigger a false positive.
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** (Number used once) for every request: `{tmux-team-end:8f3a}`.
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, not just paused mid-response
48
- - **Zero-API RPC** — Creates request/response semantics over a standard TTY without requiring agents to support a special protocol
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 stop using your preferred format or forget constraints. Manually re-typing system instructions is a "token tax" on your own brain.
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 Problem**: The `--wait` feature is powerful but higher-risk: long-running commands, more state to manage, potential for hung processes.
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 >= 16, tmux, macOS/Linux
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
- | `pm init --name "Project"` | Initialize project management |
143
- | `pm m add/list/done/delete` | Manage milestones |
144
- | `pm t add/list/update/done` | Manage tasks |
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 and permissions:
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
- "hideOrphanTasks": false
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.hideOrphanTasks` | Hide tasks without milestone in `pm t list` |
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
- ## ✨ v2 Features
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 "..." # Set preamble
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 task routing or agent selection
288
- - **Not a session manager** — Doesn't create/manage tmux sessions or git worktrees
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 hideOrphanTasks true # Hide tasks without milestone
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> "..." # Set agent's preamble
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
- ### Project Management (`pm`)
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": "2.2.0",
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"
@@ -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);