shipwright-cli 2.0.0 → 2.1.1
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 +160 -72
- package/completions/_shipwright +59 -7
- package/completions/shipwright.bash +24 -4
- package/completions/shipwright.fish +80 -2
- package/dashboard/server.ts +208 -0
- package/docs/tmux-research/TMUX-ARCHITECTURE.md +567 -0
- package/docs/tmux-research/TMUX-AUDIT.md +925 -0
- package/docs/tmux-research/TMUX-BEST-PRACTICES-2025-2026.md +829 -0
- package/docs/tmux-research/TMUX-QUICK-REFERENCE.md +543 -0
- package/docs/tmux-research/TMUX-RESEARCH-INDEX.md +438 -0
- package/package.json +2 -2
- package/scripts/lib/helpers.sh +7 -0
- package/scripts/sw +116 -2
- package/scripts/sw-activity.sh +1 -1
- package/scripts/sw-adaptive.sh +1 -1
- package/scripts/sw-adversarial.sh +1 -1
- package/scripts/sw-architecture-enforcer.sh +1 -1
- package/scripts/sw-auth.sh +1 -1
- package/scripts/sw-autonomous.sh +128 -38
- package/scripts/sw-changelog.sh +1 -1
- package/scripts/sw-checkpoint.sh +1 -1
- package/scripts/sw-ci.sh +1 -1
- package/scripts/sw-cleanup.sh +1 -1
- package/scripts/sw-code-review.sh +62 -1
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +1 -1
- package/scripts/sw-cost.sh +44 -3
- package/scripts/sw-daemon.sh +155 -27
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +958 -118
- package/scripts/sw-decompose.sh +1 -1
- package/scripts/sw-deps.sh +1 -1
- package/scripts/sw-developer-simulation.sh +1 -1
- package/scripts/sw-discovery.sh +1 -1
- package/scripts/sw-docs-agent.sh +1 -1
- package/scripts/sw-docs.sh +1 -1
- package/scripts/sw-doctor.sh +49 -1
- package/scripts/sw-dora.sh +1 -1
- package/scripts/sw-durable.sh +1 -1
- package/scripts/sw-e2e-orchestrator.sh +1 -1
- package/scripts/sw-eventbus.sh +1 -1
- package/scripts/sw-feedback.sh +23 -15
- package/scripts/sw-fix.sh +1 -1
- package/scripts/sw-fleet-discover.sh +1 -1
- package/scripts/sw-fleet-viz.sh +1 -1
- package/scripts/sw-fleet.sh +1 -1
- package/scripts/sw-github-app.sh +1 -1
- package/scripts/sw-github-checks.sh +4 -4
- package/scripts/sw-github-deploy.sh +1 -1
- package/scripts/sw-github-graphql.sh +1 -1
- package/scripts/sw-guild.sh +1 -1
- package/scripts/sw-heartbeat.sh +1 -1
- package/scripts/sw-hygiene.sh +1 -1
- package/scripts/sw-incident.sh +45 -6
- package/scripts/sw-init.sh +150 -24
- package/scripts/sw-instrument.sh +1 -1
- package/scripts/sw-intelligence.sh +1 -1
- package/scripts/sw-jira.sh +1 -1
- package/scripts/sw-launchd.sh +1 -1
- package/scripts/sw-linear.sh +1 -1
- package/scripts/sw-logs.sh +1 -1
- package/scripts/sw-loop.sh +204 -19
- package/scripts/sw-memory.sh +18 -1
- package/scripts/sw-mission-control.sh +1 -1
- package/scripts/sw-model-router.sh +1 -1
- package/scripts/sw-otel.sh +1 -1
- package/scripts/sw-oversight.sh +76 -1
- package/scripts/sw-pipeline-composer.sh +1 -1
- package/scripts/sw-pipeline-vitals.sh +1 -1
- package/scripts/sw-pipeline.sh +302 -18
- package/scripts/sw-pm.sh +70 -5
- package/scripts/sw-pr-lifecycle.sh +1 -1
- package/scripts/sw-predictive.sh +8 -1
- package/scripts/sw-prep.sh +1 -1
- package/scripts/sw-ps.sh +1 -1
- package/scripts/sw-public-dashboard.sh +1 -1
- package/scripts/sw-quality.sh +1 -1
- package/scripts/sw-reaper.sh +1 -1
- package/scripts/sw-recruit.sh +1853 -178
- package/scripts/sw-regression.sh +1 -1
- package/scripts/sw-release-manager.sh +1 -1
- package/scripts/sw-release.sh +1 -1
- package/scripts/sw-remote.sh +1 -1
- package/scripts/sw-replay.sh +1 -1
- package/scripts/sw-retro.sh +1 -1
- package/scripts/sw-scale.sh +1 -1
- package/scripts/sw-security-audit.sh +1 -1
- package/scripts/sw-self-optimize.sh +1 -1
- package/scripts/sw-session.sh +1 -1
- package/scripts/sw-setup.sh +263 -127
- package/scripts/sw-standup.sh +1 -1
- package/scripts/sw-status.sh +44 -2
- package/scripts/sw-strategic.sh +189 -41
- package/scripts/sw-stream.sh +1 -1
- package/scripts/sw-swarm.sh +42 -5
- package/scripts/sw-team-stages.sh +1 -1
- package/scripts/sw-templates.sh +4 -4
- package/scripts/sw-testgen.sh +66 -15
- package/scripts/sw-tmux-pipeline.sh +1 -1
- package/scripts/sw-tmux-role-color.sh +58 -0
- package/scripts/sw-tmux-status.sh +128 -0
- package/scripts/sw-tmux.sh +1 -1
- package/scripts/sw-trace.sh +1 -1
- package/scripts/sw-tracker.sh +1 -1
- package/scripts/sw-triage.sh +61 -37
- package/scripts/sw-upgrade.sh +1 -1
- package/scripts/sw-ux.sh +30 -2
- package/scripts/sw-webhook.sh +1 -1
- package/scripts/sw-widgets.sh +1 -1
- package/scripts/sw-worktree.sh +1 -1
- package/tmux/shipwright-overlay.conf +35 -17
- package/tmux/tmux.conf +26 -21
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
# tmux Quick Reference 2025-2026
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# macOS
|
|
7
|
+
brew install tmux
|
|
8
|
+
|
|
9
|
+
# Ubuntu/Debian
|
|
10
|
+
sudo apt-get install tmux
|
|
11
|
+
|
|
12
|
+
# Build from source (latest features)
|
|
13
|
+
git clone https://github.com/tmux/tmux.git
|
|
14
|
+
cd tmux
|
|
15
|
+
./configure && make
|
|
16
|
+
sudo make install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Oh My Tmux! Quick Setup
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Clone into home
|
|
25
|
+
git clone https://github.com/gpakosz/.tmux.git ~/.tmux
|
|
26
|
+
ln -s -f ~/.tmux/.tmux.conf ~/.tmux.conf
|
|
27
|
+
|
|
28
|
+
# Copy local customization file (edit this, never edit .tmux.conf)
|
|
29
|
+
cp ~/.tmux/.tmux.conf.local ~/.tmux.conf.local
|
|
30
|
+
|
|
31
|
+
# Edit with: vim ~/.tmux.conf.local
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Essential Keybindings (C-a prefix)
|
|
37
|
+
|
|
38
|
+
### Session Management
|
|
39
|
+
|
|
40
|
+
| Binding | Action |
|
|
41
|
+
| ------- | ----------------- |
|
|
42
|
+
| `C-a :` | Command prompt |
|
|
43
|
+
| `C-a ?` | Show keybindings |
|
|
44
|
+
| `C-a d` | Detach session |
|
|
45
|
+
| `C-a n` | Next window |
|
|
46
|
+
| `C-a p` | Previous window |
|
|
47
|
+
| `C-a l` | Last window |
|
|
48
|
+
| `C-a c` | New window |
|
|
49
|
+
| `C-a ,` | Rename window |
|
|
50
|
+
| `C-a w` | List windows |
|
|
51
|
+
| `C-a s` | List sessions |
|
|
52
|
+
| `C-a $` | Rename session |
|
|
53
|
+
| `C-a [` | Enter copy-mode |
|
|
54
|
+
| `C-a ]` | Paste from buffer |
|
|
55
|
+
| `C-a r` | Reload config |
|
|
56
|
+
|
|
57
|
+
### Pane Navigation (vim-tmux-navigator)
|
|
58
|
+
|
|
59
|
+
| Binding | Action |
|
|
60
|
+
| -------- | --------------------- |
|
|
61
|
+
| `C-h` | Move left (vim/tmux) |
|
|
62
|
+
| `C-j` | Move down (vim/tmux) |
|
|
63
|
+
| `C-k` | Move up (vim/tmux) |
|
|
64
|
+
| `C-l` | Move right (vim/tmux) |
|
|
65
|
+
| `C-a H` | Resize left |
|
|
66
|
+
| `C-a J` | Resize down |
|
|
67
|
+
| `C-a K` | Resize up |
|
|
68
|
+
| `C-a L` | Resize right |
|
|
69
|
+
| `C-a \|` | Split vertical |
|
|
70
|
+
| `C-a -` | Split horizontal |
|
|
71
|
+
| `C-a x` | Kill pane |
|
|
72
|
+
| `C-a z` | Zoom pane (toggle) |
|
|
73
|
+
|
|
74
|
+
### Copy Mode (vi-style)
|
|
75
|
+
|
|
76
|
+
| Binding | Action |
|
|
77
|
+
| ------------- | ------------------------- |
|
|
78
|
+
| `C-a [` | Enter copy-mode |
|
|
79
|
+
| `v` | Begin selection |
|
|
80
|
+
| `y` | Copy to buffer |
|
|
81
|
+
| `Y` | Copy entire line |
|
|
82
|
+
| `H` / `L` | Start / End of line |
|
|
83
|
+
| `/` / `?` | Search forward / backward |
|
|
84
|
+
| `n` / `N` | Next / Previous match |
|
|
85
|
+
| `j` / `k` | Down / Up |
|
|
86
|
+
| `C-f` / `C-b` | Page down / Page up |
|
|
87
|
+
| `Enter` | Exit copy-mode |
|
|
88
|
+
|
|
89
|
+
### Custom Additions (2025)
|
|
90
|
+
|
|
91
|
+
| Binding | Action |
|
|
92
|
+
| ------- | ------------------------- |
|
|
93
|
+
| `C-a m` | Toggle mouse mode |
|
|
94
|
+
| `C-g` | Floating scratch terminal |
|
|
95
|
+
| `C-s` | Floating session switcher |
|
|
96
|
+
| `C-j` | Floating git status |
|
|
97
|
+
| `C-f` | Floating file search |
|
|
98
|
+
| `C-p` | Floating process monitor |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Command-Line Essentials
|
|
103
|
+
|
|
104
|
+
### Session Operations
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Create new session (in detached mode)
|
|
108
|
+
tmux new-session -d -s mysession
|
|
109
|
+
|
|
110
|
+
# Attach to session
|
|
111
|
+
tmux attach-session -t mysession
|
|
112
|
+
tmux a -t mysession # Short form
|
|
113
|
+
|
|
114
|
+
# List sessions
|
|
115
|
+
tmux list-sessions
|
|
116
|
+
tmux ls # Short form
|
|
117
|
+
|
|
118
|
+
# Kill session
|
|
119
|
+
tmux kill-session -t mysession
|
|
120
|
+
|
|
121
|
+
# Rename session
|
|
122
|
+
tmux rename-session -t old-name new-name
|
|
123
|
+
|
|
124
|
+
# Switch to another session (from within tmux)
|
|
125
|
+
tmux switch-client -t other-session
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Window Operations
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Create window in existing session
|
|
132
|
+
tmux new-window -t mysession -n editor -c ~/project
|
|
133
|
+
|
|
134
|
+
# Send command to window
|
|
135
|
+
tmux send-keys -t mysession:editor "nvim main.go" Enter
|
|
136
|
+
|
|
137
|
+
# Split window
|
|
138
|
+
tmux split-window -h -t mysession:editor -c ~/project
|
|
139
|
+
tmux split-window -v -t mysession:editor -c ~/project
|
|
140
|
+
|
|
141
|
+
# Select pane
|
|
142
|
+
tmux select-pane -t mysession:editor.0
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Advanced Commands
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Capture pane output (for logs/debugging)
|
|
149
|
+
tmux capture-pane -t mysession:editor -p > output.txt
|
|
150
|
+
|
|
151
|
+
# Display message
|
|
152
|
+
tmux display-message "Hello from tmux"
|
|
153
|
+
|
|
154
|
+
# Set option
|
|
155
|
+
tmux set-option -g history-limit 250000
|
|
156
|
+
|
|
157
|
+
# Bind key
|
|
158
|
+
tmux bind-key -n C-g display-popup -E -h 50% -w 80%
|
|
159
|
+
|
|
160
|
+
# Show environment variables
|
|
161
|
+
tmux show-environment -t mysession
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Essential Configuration Patterns
|
|
167
|
+
|
|
168
|
+
### Minimal Production Config
|
|
169
|
+
|
|
170
|
+
```tmux
|
|
171
|
+
# ~/.tmux.conf
|
|
172
|
+
|
|
173
|
+
set -g default-terminal "xterm-256color"
|
|
174
|
+
set -as terminal-overrides ",xterm*:RGB"
|
|
175
|
+
set -g allow-passthrough on
|
|
176
|
+
set -g extended-keys on
|
|
177
|
+
set -g focus-events on
|
|
178
|
+
|
|
179
|
+
set -g escape-time 0
|
|
180
|
+
set -g history-limit 250000
|
|
181
|
+
set -g mouse on
|
|
182
|
+
|
|
183
|
+
unbind C-b
|
|
184
|
+
set -g prefix C-a
|
|
185
|
+
bind C-a send-prefix
|
|
186
|
+
|
|
187
|
+
bind | split-window -h -c "#{pane_current_path}"
|
|
188
|
+
bind - split-window -v -c "#{pane_current_path}"
|
|
189
|
+
|
|
190
|
+
bind r source-file ~/.tmux.conf \; display "Reloaded!"
|
|
191
|
+
|
|
192
|
+
# Plugins
|
|
193
|
+
set -g @plugin 'tmux-plugins/tpm'
|
|
194
|
+
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
195
|
+
set -g @plugin 'christoomey/vim-tmux-navigator'
|
|
196
|
+
set -g @plugin 'tmux-plugins/tmux-yank'
|
|
197
|
+
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
198
|
+
|
|
199
|
+
run '~/.tmux/plugins/tpm/tpm'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Enable Popups (tmux 3.2+)
|
|
203
|
+
|
|
204
|
+
```tmux
|
|
205
|
+
# Floating scratch terminal
|
|
206
|
+
bind -n C-g display-popup -E -h 60% -w 80% -x C -y S \
|
|
207
|
+
"cd '#{pane_current_path}' && $SHELL"
|
|
208
|
+
|
|
209
|
+
# Floating fzf session switcher
|
|
210
|
+
bind -n C-s display-popup -E -h 50% -w 80% -x C -y C \
|
|
211
|
+
"tmux list-sessions | cut -d: -f1 | fzf | xargs tmux switch-client -t"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Vim/Neovim Navigation
|
|
215
|
+
|
|
216
|
+
```tmux
|
|
217
|
+
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
|
218
|
+
|
|
219
|
+
bind -n C-h if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
|
|
220
|
+
bind -n C-j if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
|
|
221
|
+
bind -n C-k if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
|
|
222
|
+
bind -n C-l if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Status Line (Minimal)
|
|
226
|
+
|
|
227
|
+
```tmux
|
|
228
|
+
set -g status-style "bg=#1e1e2e,fg=#a6adc8"
|
|
229
|
+
set -g status-left "#{session_name} "
|
|
230
|
+
set -g status-right "#[fg=#7aa2f7]%H:%M#[default]"
|
|
231
|
+
set -g status-interval 10
|
|
232
|
+
|
|
233
|
+
set -g window-status-format " #I:#W "
|
|
234
|
+
set -g window-status-current-format "#[bg=#45475a,bold] #I:#W #[default]"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Plugin Manager (TPM)
|
|
240
|
+
|
|
241
|
+
### Install TPM
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Common Plugins
|
|
248
|
+
|
|
249
|
+
```tmux
|
|
250
|
+
set -g @plugin 'tmux-plugins/tpm' # Plugin manager
|
|
251
|
+
set -g @plugin 'tmux-plugins/tmux-sensible' # Sensible defaults
|
|
252
|
+
set -g @plugin 'christoomey/vim-tmux-navigator' # Vim navigation
|
|
253
|
+
set -g @plugin 'tmux-plugins/tmux-yank' # System clipboard
|
|
254
|
+
set -g @plugin 'tmux-plugins/tmux-resurrect' # Persist sessions
|
|
255
|
+
set -g @plugin 'tmux-plugins/tmux-continuum' # Auto-save
|
|
256
|
+
set -g @plugin 'NHDaly/tmux-better-mouse-mode' # Better mouse
|
|
257
|
+
set -g @plugin 'aserowy/tmux.nvim' # Neovim integration
|
|
258
|
+
set -g @plugin 'tmux-plugins/tmux-fzf-url' # Open URLs with fzf
|
|
259
|
+
|
|
260
|
+
# Plugin configuration
|
|
261
|
+
set -g @continuum-restore 'on'
|
|
262
|
+
set -g @continuum-save-interval '5'
|
|
263
|
+
set -g @resurrect-strategy-nvim 'session'
|
|
264
|
+
|
|
265
|
+
# Install: C-a I
|
|
266
|
+
# Update: C-a U
|
|
267
|
+
# Remove: C-a Alt-u
|
|
268
|
+
|
|
269
|
+
run '~/.tmux/plugins/tpm/tpm'
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Scripting Examples
|
|
275
|
+
|
|
276
|
+
### Create Multi-Pane Session
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
#!/bin/bash
|
|
280
|
+
# setup-dev.sh
|
|
281
|
+
|
|
282
|
+
SESSION="dev"
|
|
283
|
+
PROJECT="~/myproject"
|
|
284
|
+
|
|
285
|
+
tmux new-session -d -s $SESSION -c $PROJECT
|
|
286
|
+
|
|
287
|
+
# Window 1: Editor + Tests
|
|
288
|
+
tmux new-window -t $SESSION:0 -n editor
|
|
289
|
+
tmux send-keys -t $SESSION:editor "nvim" Enter
|
|
290
|
+
|
|
291
|
+
tmux split-window -h -t $SESSION:editor -c $PROJECT
|
|
292
|
+
tmux send-keys -t $SESSION:editor.1 "npm test -- --watch" Enter
|
|
293
|
+
|
|
294
|
+
# Window 2: Logs
|
|
295
|
+
tmux new-window -t $SESSION:1 -n logs -c $PROJECT
|
|
296
|
+
tmux send-keys -t $SESSION:logs "tail -f logs/*.log" Enter
|
|
297
|
+
|
|
298
|
+
# Attach
|
|
299
|
+
tmux attach-session -t $SESSION
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Multi-Agent Workflow
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
#!/bin/bash
|
|
306
|
+
# setup-agents.sh
|
|
307
|
+
|
|
308
|
+
SESSION="agents"
|
|
309
|
+
PROJECT="~/myproject"
|
|
310
|
+
|
|
311
|
+
# Create session
|
|
312
|
+
tmux new-session -d -s $SESSION -c $PROJECT
|
|
313
|
+
|
|
314
|
+
# Agent 1: Backend (git worktree)
|
|
315
|
+
tmux send-keys -t $SESSION \
|
|
316
|
+
"git worktree add /tmp/wt-backend feat/api && cd /tmp/wt-backend && claude code" Enter
|
|
317
|
+
|
|
318
|
+
# Agent 2: Frontend (git worktree)
|
|
319
|
+
tmux new-window -t $SESSION -n frontend
|
|
320
|
+
tmux send-keys -t $SESSION:frontend \
|
|
321
|
+
"git worktree add /tmp/wt-frontend feat/ui && cd /tmp/wt-frontend && claude code" Enter
|
|
322
|
+
|
|
323
|
+
# Monitor
|
|
324
|
+
tmux new-window -t $SESSION -n monitor
|
|
325
|
+
tmux send-keys -t $SESSION:monitor "shipwright status" Enter
|
|
326
|
+
|
|
327
|
+
# Orchestrator
|
|
328
|
+
tmux new-window -t $SESSION -n orchestrator
|
|
329
|
+
tmux send-keys -t $SESSION:orchestrator "watch -n 5 'shipwright vitals'" Enter
|
|
330
|
+
|
|
331
|
+
tmux attach-session -t $SESSION
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Send Keys from Shell
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
#!/bin/bash
|
|
338
|
+
# Auto-run tests when code changes (file watcher pattern)
|
|
339
|
+
|
|
340
|
+
SESSION="myapp"
|
|
341
|
+
WINDOW="tests"
|
|
342
|
+
|
|
343
|
+
while true; do
|
|
344
|
+
inotifywait -e modify -r src/ && \
|
|
345
|
+
tmux send-keys -t $SESSION:$WINDOW "npm test" Enter
|
|
346
|
+
done
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Troubleshooting
|
|
352
|
+
|
|
353
|
+
### Colors Not Working
|
|
354
|
+
|
|
355
|
+
```tmux
|
|
356
|
+
# Check terminal support
|
|
357
|
+
echo $TERM
|
|
358
|
+
|
|
359
|
+
# Fix: Use proper terminal value
|
|
360
|
+
set -g default-terminal "xterm-256color"
|
|
361
|
+
set -as terminal-overrides ",xterm*:RGB"
|
|
362
|
+
set -as terminal-overrides ",alacritty:RGB"
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Vim/Neovim ESC Delay
|
|
366
|
+
|
|
367
|
+
```tmux
|
|
368
|
+
# Critical fix for responsiveness
|
|
369
|
+
set -g escape-time 0
|
|
370
|
+
|
|
371
|
+
# Verify it's set
|
|
372
|
+
tmux show-option -g escape-time
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Mouse Selection Across Panes
|
|
376
|
+
|
|
377
|
+
```tmux
|
|
378
|
+
# Hold Shift while selecting text to bypass tmux capture
|
|
379
|
+
set -g mouse on
|
|
380
|
+
|
|
381
|
+
# OR: Disable mouse and use keyboard navigation
|
|
382
|
+
set -g mouse off
|
|
383
|
+
bind -n M-Up select-pane -U
|
|
384
|
+
bind -n M-Down select-pane -D
|
|
385
|
+
bind -n M-Left select-pane -L
|
|
386
|
+
bind -n M-Right select-pane -R
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Clipboard Not Working
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
# macOS
|
|
393
|
+
brew install reattach-to-user-namespace
|
|
394
|
+
|
|
395
|
+
# Linux
|
|
396
|
+
sudo apt-get install xclip
|
|
397
|
+
|
|
398
|
+
# Then configure in tmux:
|
|
399
|
+
# For macOS:
|
|
400
|
+
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
|
|
401
|
+
|
|
402
|
+
# For Linux:
|
|
403
|
+
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Session Persists After Kill
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Kill all sessions and server
|
|
410
|
+
tmux kill-server
|
|
411
|
+
|
|
412
|
+
# Kill specific session
|
|
413
|
+
tmux kill-session -t mysession
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Check Version
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
tmux -V
|
|
420
|
+
# Output: tmux 3.2a (or similar)
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Performance Tuning
|
|
426
|
+
|
|
427
|
+
### For High-Throughput (Claude Code)
|
|
428
|
+
|
|
429
|
+
```tmux
|
|
430
|
+
set -g history-limit 250000 # Increase scrollback
|
|
431
|
+
set -g buffer-limit 20 # Keep buffers reasonable
|
|
432
|
+
set -g status-interval 10 # Update status every 10s (not 1s)
|
|
433
|
+
set -g escape-time 0 # No ESC delay
|
|
434
|
+
set -g repeat-time 500 # Allow rapid key repeats
|
|
435
|
+
set -g allow-passthrough on # For TUI apps
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Monitor Session Usage
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
# Watch memory/CPU in real-time
|
|
442
|
+
tmux capture-pane -t mysession -p | wc -l
|
|
443
|
+
ps aux | grep tmux | grep -v grep
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Integration with External Tools
|
|
449
|
+
|
|
450
|
+
### Git Worktree + tmux
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
# Create branch-specific workspace
|
|
454
|
+
tmux new-session -d -s feature-x
|
|
455
|
+
|
|
456
|
+
# Inside session:
|
|
457
|
+
git worktree add /tmp/wt-feature-x feature/x
|
|
458
|
+
cd /tmp/wt-feature-x
|
|
459
|
+
nvim
|
|
460
|
+
|
|
461
|
+
# Later, clean up:
|
|
462
|
+
git worktree remove /tmp/wt-feature-x
|
|
463
|
+
tmux kill-session -t feature-x
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### FZF Session Switcher
|
|
467
|
+
|
|
468
|
+
```tmux
|
|
469
|
+
bind -n C-s display-popup -E \
|
|
470
|
+
"tmux list-sessions -F '#{session_name}' | fzf | xargs tmux switch-client -t"
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### GitHub Copilot Integration
|
|
474
|
+
|
|
475
|
+
```tmux
|
|
476
|
+
# In Neovim with copilot.vim plugin
|
|
477
|
+
bind -n C-x send-keys -t editor "i<Tab>" # Accept suggestion
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Useful One-Liners
|
|
483
|
+
|
|
484
|
+
```bash
|
|
485
|
+
# List all tmux commands
|
|
486
|
+
tmux list-commands
|
|
487
|
+
|
|
488
|
+
# Kill all tmux sessions
|
|
489
|
+
tmux kill-server
|
|
490
|
+
|
|
491
|
+
# Backup session state
|
|
492
|
+
tmux list-sessions -F "#{session_name}" | while read s; do
|
|
493
|
+
tmux list-windows -t $s
|
|
494
|
+
done
|
|
495
|
+
|
|
496
|
+
# Count panes in session
|
|
497
|
+
tmux list-panes -t mysession | wc -l
|
|
498
|
+
|
|
499
|
+
# Send same command to all panes in window
|
|
500
|
+
tmux send-keys -t mysession C-a :set-window-option synchronize-panes on Enter
|
|
501
|
+
|
|
502
|
+
# Capture pane and write to file with timestamp
|
|
503
|
+
tmux capture-pane -t mysession -p > ~/tmux-$(date +%s).log
|
|
504
|
+
|
|
505
|
+
# Watch a pane in real-time
|
|
506
|
+
watch -n 0.5 "tmux capture-pane -t mysession:0 -p"
|
|
507
|
+
|
|
508
|
+
# Find the pane with a specific command
|
|
509
|
+
tmux list-panes -a -F "#{pane_id} #{pane_current_command}" | grep "nvim"
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Version Compatibility
|
|
515
|
+
|
|
516
|
+
| Feature | Min Version | Status |
|
|
517
|
+
| --------------------- | ----------- | --------------------- |
|
|
518
|
+
| `display-popup` | 3.2+ | Floating windows |
|
|
519
|
+
| `allow-passthrough` | 3.2+ | DEC 2026 sync |
|
|
520
|
+
| `extended-keys` | 3.0+ | Alt key support |
|
|
521
|
+
| `if-shell` versioning | 2.4+ | %if syntax |
|
|
522
|
+
| `focus-events` | 2.2+ | Window focus tracking |
|
|
523
|
+
| `set-clipboard` | 3.2+ | Native OSC 52 |
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## Additional Resources
|
|
528
|
+
|
|
529
|
+
| Resource | Link |
|
|
530
|
+
| -------------------- | ------------------------------------------------- |
|
|
531
|
+
| Official Manual | https://man7.org/linux/man-pages/man1/tmux.1.html |
|
|
532
|
+
| GitHub Repository | https://github.com/tmux/tmux |
|
|
533
|
+
| Oh My Tmux! | https://github.com/gpakosz/.tmux |
|
|
534
|
+
| Awesome tmux | https://github.com/rothgar/awesome-tmux |
|
|
535
|
+
| Plugin Manager (TPM) | https://github.com/tmux-plugins/tpm |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
**Quick Tip**: Always reload config after editing with `C-a r` or `tmux source-file ~/.tmux.conf`
|
|
540
|
+
|
|
541
|
+
**Pro Tip**: Use session names that match your projects for faster switching (`myapp-dev`, `myapp-api`, etc.)
|
|
542
|
+
|
|
543
|
+
**Claude Code Tip**: Set up one tmux window per agent, use git worktrees for isolation, and monitor with `shipwright status`
|