第4集:tmux — 不死会话的基石

⏱ 预计阅读 11 分钟 更新于 2026/5/7
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)

终端复用器,跑在任何 Unix 服务器上。detach/attach 让 Agent 会话永不停歇。

tmux 是什么

tmux 不是终端模拟器。它是终端复用器——跑在终端模拟器里面。

关键区别:

  • 终端模拟器(Ghostty/iTerm2/Warp):渲染图形、管理窗口,macOS/Linux 桌面应用
  • 终端复用器(tmux):管理会话(session),纯命令行,跑在服务器上
┌─────────────────────────────────────┐
│ 终端模拟器 (Ghostty/iTerm2/Warp)     │
│  ┌───────────────────────────────┐  │
│  │ tmux session                  │  │
│  │  ┌──────────┬──────────────┐  │  │
│  │  │ Agent 1  │ Agent 2      │  │  │
│  │  │ (pane)   │ (pane)       │  │  │
│  │  └──────────┴──────────────┘  │  │
│  └───────────────────────────────┘  │
└─────────────────────────────────────┘

安装方式

# macOS
brew install tmux

# Ubuntu/Debian
sudo apt install tmux

# CentOS/RHEL/Fedora
sudo yum install tmux
# 或
sudo dnf install tmux

# Arch Linux
sudo pacman -S tmux

# 验证安装
tmux -V
# 输出: tmux 3.5a(或更高版本)

操作系统支持

系统 支持情况 备注
macOS 完整 Homebrew 安装,配合任意终端
Linux 完整 系统包管理器安装
FreeBSD/OpenBSD 完整 ports/pkgng 安装
Windows WSL2 内可用 在 WSL2 Linux 环境内运行
远程服务器 完整 这是 tmux 的核心场景

三层结构

tmux 的组织结构:session → window → pane

graph TB
    S[tmux server] --> SE1[Session: agent-1]
    S --> SE2[Session: agent-2]
    S --> SE3[Session: review]

    SE1 --> W1[Window 0]
    W1 --> P1[Pane: claude]
    W1 --> P2[Pane: logs]

    SE2 --> W2[Window 0]
    W2 --> P3[Pane: claude]
    SE2 --> W4[Window 1]
    W4 --> P4[Pane: tests]

    style S fill:#ff6b6b,color:#fff
    style SE1 fill:#4a9eff,color:#fff
    style P1 fill:#2ecc71,color:#fff
  • Session:独立的工作空间。detach 后继续运行,attach 后恢复。
  • Window:Session 内的标签页。一个 Session 可有多个 Window。
  • Pane:Window 内的分屏。一个 Window 可有多个 Pane。

关键操作

操作 快捷键 / 命令 说明
新建 Session tmux new -s name 创建命名会话
Detach Ctrl+b d 断开但保留会话
Attach tmux attach -t name 重新连接会话
列出 Sessions tmux ls 查看所有会话
杀掉 Session tmux kill-session -t name 终止会话
水平分屏 Ctrl+b " 上下分割
垂直分屏 Ctrl+b % 左右分割
切换 Pane Ctrl+b 方向键 在分屏间移动
新建 Window Ctrl+b c 新标签页
切换 Window Ctrl+b 0-9 按编号切换
同步输入 :setw synchronize-panes 所有 Pane 同步接收输入

会话生命周期

stateDiagram-v2
    [*] --> Created: tmux new -s agent
    Created --> Attached: 自动 attach
    Attached --> Detached: Ctrl+b d
或关闭终端 Detached --> Attached: tmux attach -t agent Attached --> Attached: 正常使用 Detached --> Running: 后台持续运行 Running --> Attached: tmux attach -t agent Running --> Destroyed: tmux kill-session Attached --> Destroyed: tmux kill-session Destroyed --> [*] note right of Running Agent 继续运行 SSH 断线不影响 关掉笔记本不影响 end note

Agent 交互机制

tmux 提供最强大的命令行级 Agent 控制能力:

flowchart TB
    subgraph 控制方式
        A[tmux send-keys
命令注入] B[tmux 命令行
session管理] C[Socket 文件
进程间通信] D[配置文件
~/.tmux.conf] end subgraph Agent会话 E[Session: agent-1] F[Session: agent-2] G[Session: agent-N] end A -->|向指定pane发送命令| E A -->|向指定pane发送命令| F B -->|创建/销毁/列出| E B -->|创建/销毁/列出| G C -->|直接socket通信| E D -->|启动时加载配置| H[tmux server] style A fill:#2ecc71,color:#fff style B fill:#4a9eff,color:#fff style C fill:#ff6b6b,color:#fff
交互方式 支持情况 说明
send-keys 完整 向任意 pane 注入命令/按键,最常用
命令行 完整 tmux 命令管理所有 session/window/pane
Socket 文件 完整 /tmp/tmux-*/default 直接进程间通信
配置文件 完整 ~/.tmux.conf 定制快捷键、状态栏
脚本自动化 完整 Bash/Python 脚本完全控制 tmux
状态栏定制 完整 显示 Agent 状态、时间、系统信息

send-keys 自动化示例

#!/bin/bash
# 批量启动 Claude Code Agent

# 创建 3 个 session
tmux new-session -d -s research -d 'claude'
tmux new-session -d -s coding -d 'claude'
tmux new-session -d -s review -d 'claude'

# 向 research agent 发送指令
tmux send-keys -t research '/gsd-research-phase 1' Enter

# 向 coding agent 发送指令
tmux send-keys -t coding '/gsd-execute-phase 1' Enter

# 向 review agent 发送指令
tmux send-keys -t review '/gsd-code-review' Enter

echo "3 个 Agent 已启动,使用 tmux attach -t <name> 查看"

推荐配置

~/.tmux.conf 必改项:

# 鼠标支持(滚动、点击切换 pane、调整分屏大小)
set -g mouse on

# 大缓冲区(Agent 输出很多)
set -g history-limit 100000

# 状态栏显示 session 名称
set -g status-left '#[fg=green]#S #[default]'

# 状态栏显示时间
set -g status-right '#[fg=yellow]%H:%M#[default]'

# 256 色 + 真彩色支持
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"

# 快速重载配置
bind r source-file ~/.tmux.conf \; display-message "配置已重载"

# 更直观的分屏快捷键
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 窗口编号从 1 开始
set -g base-index 1
setw -g pane-base-index 1

# 减少 ESC 延迟(影响 Vim 用户)
set -sg escape-time 0

优缺点

优点 缺点
会话永不丢失(detach/attach) 学习曲线陡峭
全 Unix 平台支持 UI 朴素,不如现代终端美观
资源占用极低(~5MB/session) 无 Agent 通知机制
send-keys 完全可编程 配置复杂
远程服务器标准工具 无 GPU 渲染(依赖宿主终端)
15+ 年稳定性验证 快捷键记忆成本高

适用场景

  • 远程服务器跑 Agent(核心场景)
  • 多 Agent 并行 + 脚本自动化
  • SSH 断线后会话保持
  • 作为 Ghostty/iTerm2 的"内层"使用