using-cmux
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseUsing cmux
使用cmux
cmux はターミナルマルチプレクサ。ペイン分割、コマンド送信、画面読み取りを CLI 経由で操作する。
環境変数が存在すれば cmux 内で動作している。
CMUX_SOCKET_PATHcmux是一款终端复用器,可通过CLI进行面板分割、命令发送、屏幕读取等操作。
若存在环境变量,则表示当前在cmux内运行。
CMUX_SOCKET_PATHQuick Orientation
快速入门
bash
cmux identify # 自分のワークスペース・サーフェスを確認
cmux list-workspaces # 全ワークスペース一覧
cmux tree # トポロジー表示(階層構造)リソースは短縮 refs で参照する: , , , 。
で UUID 形式の出力も可能。
window:1workspace:2pane:3surface:4--id-format uuids注意:で複数行を送る場合はsendが必須。詳細は「send の改行ルール」を参照。send-key return
bash
cmux identify # 确认自己的工作区与界面
cmux list-workspaces # 查看所有工作区列表
cmux tree # 显示拓扑结构(层级结构)资源可通过短引用进行访问:, , , 。
使用可输出UUID格式的资源标识。
window:1workspace:2pane:3surface:4--id-format uuids注意:使用发送多行内容时,必须搭配send。详情请参考「send的换行规则」。send-key return
基本操作
基本操作
| 操作 | コマンド |
|---|---|
| ペイン分割 | |
| 新ワークスペース | |
| コマンド送信 | |
| キー送信 | |
| 画面読み取り | |
| サーフェス/WS 終了 | |
| 一覧表示 | |
| 操作 | 命令 |
|---|---|
| 面板分割 | |
| 创建新工作区 | |
| 发送命令 | |
| 发送按键 | |
| 读取屏幕内容 | |
| 关闭界面/工作区 | |
| 查看列表 | |
send の改行ルール
send的换行规则
これは最も重要なルールである。
这是最重要的规则。
単一行コマンド: \n
で OK
\n单行命令:使用\n
即可
\nbash
cmux send --surface surface:1 "echo hello\n"末尾の が Enter キーとして機能する。
\nbash
cmux send --surface surface:1 "echo hello\n"末尾的将作为回车键生效。
\n複数行テキスト: send-key return
が必須
send-key return多行文本:必须使用send-key return
send-key return\nsend-key returnbash
undefined\nsend-key returnbash
undefined✅ 正しい方法
✅ 正确方法
cmux send --surface surface:1 "line 1"
cmux send-key --surface surface:1 return
cmux send --surface surface:1 "line 2"
cmux send-key --surface surface:1 return
cmux send --surface surface:1 "line 1"
cmux send-key --surface surface:1 return
cmux send --surface surface:1 "line 2"
cmux send-key --surface surface:1 return
❌ 間違い — \n は途中改行にならない
❌ 错误方法 — \n不会成为中途换行
cmux send --surface surface:1 "line 1\nline 2\n"
**ルール**: 末尾の `\n` 1個だけは Enter として機能する。文字列の途中に `\n` を入れても改行にはならない。cmux send --surface surface:1 "line 1\nline 2\n"
**规则**:仅末尾的一个`\n`会作为回车键生效,字符串中间的`\n`不会被解析为换行。制御キーの送信
控制键的发送
プロセス中断(Ctrl+C)などの制御キーは で送る。 では送れない。
send-keysendbash
undefined中断进程(Ctrl+C)等控制键需通过****发送,无法通过发送。
send-keysendbash
undefined✅ 正しい方法
✅ 正确方法
cmux send-key --surface surface:N ctrl+c
cmux send-key --surface surface:N ctrl+c
❌ 間違い — リテラルテキストが送られるだけ
❌ 错误方法 — 仅会发送字面文本
cmux send --surface surface:N "C-c"
cmux send --surface surface:N "\x03"
cmux send-key --surface surface:N "C-c" # → Unknown key エラー
キー名は `ctrl+c`, `ctrl+d`, `ctrl+z`, `return`, `tab`, `escape` 等。`send-key --help` で確認可能。cmux send --surface surface:N "C-c"
cmux send --surface surface:N "\x03"
cmux send-key --surface surface:N "C-c" # → 出现Unknown key错误
可用的键名包括`ctrl+c`, `ctrl+d`, `ctrl+z`, `return`, `tab`, `escape`等,可通过`send-key --help`查看完整列表。cross-workspace 操作の注意(重要)
跨工作区操作注意事项(重要)
別ワークスペースのサーフェスを操作する場合、 ではなく を使う。
--surface--workspacebash
undefined操作其他工作区的界面时,需使用而非。
--workspace--surfacebash
undefined✅ 正しい方法 — --workspace で指定(focused surface に自動解決)
✅ 正确方法 — 使用--workspace指定(自动匹配聚焦的界面)
cmux send --workspace workspace:N "command\n"
cmux read-screen --workspace workspace:N
cmux send-key --workspace workspace:N return
cmux send --workspace workspace:N "command\n"
cmux read-screen --workspace workspace:N
cmux send-key --workspace workspace:N return
❌ 間違い — --surface で他ワークスペースのサーフェスを指定
❌ 错误方法 — 使用--surface指定其他工作区的界面
cmux send --surface surface:S "command\n" # → "Surface is not a terminal" エラー
cmux read-screen --surface surface:S # → 同上
**理由**: `--surface` は caller と同一ワークスペース内のサーフェスのみ有効。他ワークスペースのサーフェスを指定すると CLI は "Surface is not a terminal" エラーを返す。`--workspace` はワークスペースの focused surface に自動解決され、cross-workspace でも正しく動作する。cmux send --surface surface:S "command\n" # → 出现"Surface is not a terminal"错误
cmux read-screen --surface surface:S # → 同上
**原因**:`--surface`仅对与调用者同一工作区内的界面有效。若指定其他工作区的界面,CLI会返回"Surface is not a terminal"错误。`--workspace`会自动匹配工作区的聚焦界面,跨工作区操作时可正常运行。ペイン再利用の原則
面板复用原则
新しいペイン/ワークスペースを作る前に、ユーザーが clear 済みの遊休ペインを探して再利用する。
bash
cmux list-pane-surfaces # 全サーフェス一覧
screen=$(cmux read-screen --surface surface:N) # 各サーフェスの状態を確認在创建新面板/工作区前,应先查找用户已清空的闲置面板进行复用。
bash
cmux list-pane-surfaces # 查看所有界面列表
screen=$(cmux read-screen --surface surface:N) # 确认各界面的状态シェルプロンプト($ や ❯)のみ → 遊休 → 再利用可能
仅显示Shell提示符($ 或 ❯)→ 属于闲置状态 → 可复用
遊休ペインがなければ通常通り `new-split` / `new-workspace` で作成する。
若没有闲置面板,则正常使用`new-split`/`new-workspace`创建新面板。サブエージェント操作パターン
子Agent操作流程
サブエージェントを起動し、タスクを委任し、結果を回収する一連の手順。
重要: サブエージェントはメインエージェントとは別のワークスペースに配置する。同一ワークスペースだとペインの相互干渉が起きる。
以下是启动子Agent、分配任务并回收结果的一系列步骤。
重要:子Agent需放置在与主Agent不同的工作区中,同一工作区会导致面板相互干扰。
Step 1: ワークスペース作成(または遊休ワークスペースの再利用)
Step 1:创建工作区(或复用闲置工作区)
bash
WS=$(cmux new-workspace --cwd $(pwd) | awk '{print $2}')
cmux rename-workspace --workspace $WS "Researcher-1" # 用途がわかる名前を付ける注意: PTY 遅延初期化問題(後述)により、ワークスペースを GUI 上で一度表示する必要がある場合がある。
bash
WS=$(cmux new-workspace --cwd $(pwd) | awk '{print $2}')
cmux rename-workspace --workspace $WS "Researcher-1" # 命名为便于识别的名称注意:由于PTY延迟初始化问题(下文详述),有时需在GUI中显示一次工作区才能正常使用。
Step 2: Claude Code 起動
Step 2:启动Claude Code
bash
cmux send --workspace $WS "claude --dangerously-skip-permissions\n"は信頼できるタスクにのみ使うこと。--dangerously-skip-permissions
bash
cmux send --workspace $WS "claude --dangerously-skip-permissions\n"仅可用于可信任的任务。--dangerously-skip-permissions
Step 3: Trust 検出 → 承認
Step 3:检测Trust提示 → 确认授权
起動直後に Trust 確認プロンプトが表示される場合がある。 でポーリングし、"trust" や "Yes, I trust" を検出したら承認:
read-screenbash
screen=$(cmux read-screen --workspace $WS)启动后可能会显示Trust确认提示,需通过轮询检测,若发现"trust"或"Yes, I trust"则进行授权:
read-screenbash
screen=$(cmux read-screen --workspace $WS)"trust" 検出 → 承認
检测到"trust" → 执行授权
cmux send-key --workspace $WS return
undefinedcmux send-key --workspace $WS return
undefinedStep 4: 起動完了の検出
Step 4:检测启动完成
❯read-screen --workspace $WS通过轮询,直到出现提示符。
read-screen --workspace $WS❯Step 5: プロンプト送信
Step 5:发送提示词
bash
undefinedbash
undefined単一行
单行内容
cmux send --workspace $WS "指示テキスト\n"
cmux set-status $WS "調査中" --icon hammer # ステータスを設定
cmux send --workspace $WS "指示文本\n"
cmux set-status $WS "调查中" --icon hammer # 设置状态
複数行(send-key return で改行)
多行内容(使用send-key return换行)
cmux send --workspace $WS "1行目の指示"
cmux send-key --workspace $WS return
cmux send --workspace $WS "2行目の指示"
cmux send-key --workspace $WS return
undefinedcmux send --workspace $WS "第1行指示"
cmux send-key --workspace $WS return
cmux send --workspace $WS "第2行指示"
cmux send-key --workspace $WS return
undefinedStep 6: 完了検出
Step 6:检测完成状态
❯read-screen --workspace $WS通过轮询,检测提示符的再次出现。
read-screen --workspace $WS❯Step 7: 結果回収
Step 7:回收结果
bash
cmux clear-status $WS # ステータスをクリア
result=$(cmux read-screen --workspace $WS --scrollback) # 全出力取得
cmux close-workspace --workspace $WS # 不要なら閉じるbash
cmux clear-status $WS # 清除状态
result=$(cmux read-screen --workspace $WS --scrollback) # 获取全部输出
cmux close-workspace --workspace $WS # 若无需保留则关闭工作区new-workspace の PTY 遅延初期化問題(Issue #1472)
new-workspace的PTY延迟初始化问题(Issue #1472)
cmux new-workspaceselect-workspace通过创建的工作区,其终端PTY需在GUI中显示一次后才会启动。仅使用 API无法解决,必须进行GUI渲染(SwiftUI渲染)。
cmux new-workspaceselect-workspace症状
症状
- → OK を返すがコマンドは実行されない(キューに留まる)
cmux send --surface surface:N - →
cmux read-screen --surface surface:NエラーSurface is not a terminal - ソケット API →
surface.send_textだが未配信queued: true - ソケット API →
surface.read_textTerminal surface not found
- → 返回OK但命令未执行(停留在队列中)
cmux send --surface surface:N - → 出现
cmux read-screen --surface surface:N错误Surface is not a terminal - Socket API → 返回
surface.send_text但未发送queued: true - Socket API → 返回
surface.read_textTerminal surface not found
ワークアラウンド: AppleScript メニュークリック
解决方法:AppleScript菜单点击
macOS アクセシビリティ許可が必要(システム設定 → プライバシーとセキュリティ → アクセシビリティ)。
bash
undefined需要macOS辅助功能权限(系统设置→隐私与安全性→辅助功能)。
bash
undefinedワークスペース作成後に GUI 表示を強制する
创建工作区后强制在GUI中显示
WS=$(cmux new-workspace --cwd $(pwd) | awk '{print $2}')
WS=$(cmux new-workspace --cwd $(pwd) | awk '{print $2}')
ワークスペースのインデックスを取得
获取工作区索引
WS_INDEX=$(cmux tree --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for w in data['windows']:
for ws in w['workspaces']:
if ws['ref'] == '$WS':
print(ws['index'] + 1)")
WS_INDEX=$(cmux tree --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for w in data['windows']:
for ws in w['workspaces']:
if ws['ref'] == '$WS':
print(ws['index'] + 1)")
AppleScript でメニュークリック → PTY 初期化
通过AppleScript点击菜单 → 初始化PTY
osascript -e "
tell application "System Events"
tell process "cmux"
click menu item "ワークスペース $WS_INDEX" of menu 1 of menu bar item "表示" of menu bar 1
end tell
end tell"
sleep 2
osascript -e "
tell application "System Events"
tell process "cmux"
click menu item "ワークスペース $WS_INDEX" of menu 1 of menu bar item "表示" of menu bar 1
end tell
end tell"
sleep 2
元のワークスペースに戻る
返回原工作区
ORIG_INDEX=1 # 元のワークスペースの index+1
osascript -e "
tell application "System Events"
tell process "cmux"
click menu item "ワークスペース $ORIG_INDEX" of menu 1 of menu bar item "表示" of menu bar 1
end tell
end tell"
undefinedORIG_INDEX=1 # 原工作区的index+1
osascript -e "
tell application "System Events"
tell process "cmux"
click menu item "ワークスペース $ORIG_INDEX" of menu 1 of menu bar item "表示" of menu bar 1
end tell
end tell"
undefined注意: ソケット API のフォールバック
注意:Socket API的回退机制
ソケット API / は、ターゲット surface の PTY が未初期化の場合、caller の surface にサイレントにフォールバックすることがある。レスポンスの を確認して意図した surface に送信されたか必ず検証すること。
surface.send_textsurface.read_textsurface_ref当目标界面的PTY未初始化时,Socket API /可能会静默回退到调用者的界面。务必检查响应中的,确认内容是否发送到了目标界面。
surface.send_textsurface.read_textsurface_refread-screen トラブルシューティング
read-screen故障排查
| 問題 | 対処 |
|---|---|
| 出力が空 / 古い | |
| 長い出力が切れる | |
| 特定行数だけ欲しい | |
| surface が見つからない | |
| PTY 遅延初期化問題。上記ワークアラウンド参照 |
read-screencmux refresh-surfaces| 问题 | 解决方法 |
|---|---|
| 输出为空/内容陈旧 | 执行 |
| 长输出被截断 | 添加 |
| 仅需特定行数 | 使用 |
| 无法找到界面 | 通过 |
出现 | 属于PTY延迟初始化问题,参考上述解决方法 |
若结果异常,请按→重新读取的顺序尝试。
read-screencmux refresh-surfacesロングラン実行の監視
长时运行任务的监控
dev server やビルドなど長時間プロセスは専用ペインに分離し、 で定期的に監視する。
read-screenbash
cmux new-split right # → surface:N
cmux send --surface surface:N "npm run dev\n"开发服务器、构建等长时进程需分离到专用面板,并通过定期监控。
read-screenbash
cmux new-split right # → surface:N
cmux send --surface surface:N "npm run dev\n"ポーリングで "ready" 等のキーワードを検出
通过轮询检测"ready"等关键词
screen=$(cmux read-screen --surface surface:N)
undefinedscreen=$(cmux read-screen --surface surface:N)
undefined通知
通知
bash
undefinedbash
undefinedアプリ内通知(ペインハイライト、サイドバーバッジ。Cmd+Shift+U で移動)
应用内通知(面板高亮、侧边栏徽章,使用Cmd+Shift+U跳转)
cmux notify --title "完了" --body "ビルドが成功しました"
cmux notify --title "完成" --body "构建已成功"
macOS 通知センター(サウンド付き、別アプリ使用中でも表示)
macOS通知中心(带声音,即使在使用其他应用时也会显示)
osascript -e 'display notification "ビルド完了" with title "Claude" sound name "Glass"'
使い分け: cmux 内で注意を引く → `cmux notify`、ユーザーが別アプリにいる → `osascript`。osascript -e 'display notification "构建完成" with title "Claude" sound name "Glass"'
使用场景区分:需在cmux内提醒用户→使用`cmux notify`;用户在使用其他应用→使用`osascript`。ステータス・プログレス表示
状态与进度显示
bash
cmux set-status mykey "作業中" --icon hammer --color "#0099ff" # サイドバーに表示
cmux clear-status mykey
cmux set-progress 0.5 --label "ビルド中..." # プログレスバー(0.0〜1.0)
cmux clear-progressbash
cmux set-status mykey "工作中" --icon hammer --color "#0099ff" # 在侧边栏显示
cmux clear-status mykey
cmux set-progress 0.5 --label "构建中..." # 进度条(取值范围0.0~1.0)
cmux clear-progressブラウザ
浏览器功能
cmux にはブラウザ自動化機能もある。詳細は を参照。
でブラウザペインを作成できる。
cmux browser --helpcmux new-pane --type browser --url <url>cmux还具备浏览器自动化功能,详情请参考。
可通过创建浏览器面板。
cmux browser --helpcmux new-pane --type browser --url <url>環境変数
环境变量
| 変数 | 説明 |
|---|---|
| cmux ソケットのパス。存在すれば cmux 内で動作中 |
| 現在のワークスペース ID |
| 現在のサーフェス ID |
| 变量 | 说明 |
|---|---|
| cmux套接字路径,若存在则表示当前在cmux内运行 |
| 当前工作区ID |
| 当前界面ID |
よくあるミス
常见错误
| ミス | 正しい方法 |
|---|---|
| 各行を個別に |
| UUID でサーフェスを指定する | 短縮 refs を使う: |
| サブエージェントを同一ワークスペースに配置 | 別ワークスペース ( |
| |
| Trust プロンプトを見逃してハングする | 起動後に |
| |
| |
| 遊休ペインがあるのに新しく split する | |
| ワークスペースに名前を付けない | |
| 错误操作 | 正确方法 |
|---|---|
使用 | 逐行使用 |
| 使用UUID指定界面 | 使用短引用: |
| 将子Agent放置在同一工作区 | 放置在独立工作区( |
| 执行 |
| 遗漏Trust提示导致任务挂起 | 启动后通过 |
使用 | 使用 |
使用 | 使用 |
| 存在闲置面板却创建新面板 | 通过 |
| 不给工作区命名 | 使用 |
コマンドクイックリファレンス
命令速查
| コマンド | 説明 |
|---|---|
| 環境情報 / トポロジー表示 |
| 一覧表示 |
| ワークスペース・ペイン作成 |
| 入出力操作 |
| 画面バッファ強制更新 |
| リソース終了 |
| 選択・名前変更 |
| 通知・ステータス・進捗 |
| シグナル待機 |
| 命令 | 说明 |
|---|---|
| 显示环境信息/拓扑结构 |
| 显示各类资源列表 |
| 创建工作区/面板 |
| 输入输出操作 |
| 强制更新屏幕缓冲区 |
| 关闭资源 |
| 选择/重命名操作 |
| 通知/状态/进度设置 |
| 等待信号 |