介绍
# zellij Skill (Moltbot)
仅当你需要交互式 TTY 时才使用 zellij。对于长时间运行、非交互式的任务,优先使用 exec 后台模式。
## 快速入门 (数据目录, exec 工具)
```bash DATA_DIR="${CLAWDBOT_ZELLIJ_DATA_DIR:-${TMPDIR:-/tmp}/moltbot-zellij-data}" mkdir -p "$DATA_DIR" SESSION=moltbot-python
zellij --data-dir "$DATA_DIR" new-session --session "$SESSION" --layout "default" --detach zellij --data-dir "$DATA_DIR" run --session "$SESSION" --name repl -- python3 -q zellij --data-dir "$DATA_DIR" pipe --session "$SESSION" --pane-id 0 ```
启动会话后,始终打印监控命令:
``` To monitor: zellij --data-dir "$DATA_DIR" attach --session "$SESSION" zellij --data-dir "$DATA_DIR" pipe --session "$SESSION" --pane-id 0 ```
## 数据目录约定
- 使用 `CLAWDBOT_ZELLIJ_DATA_DIR` (默认为 `${TMPDIR:-/tmp}/moltbot-zellij-data`)。 - Zellij 在此目录中存储状态(会话、插件等)。
## 定位窗格和命名
- Zellij 使用 `pane-id`(数字)来定位特定的窗格。 - 查找窗格 ID:`zellij --data-dir "$DATA_DIR" list-sessions --long` 或使用 `list-panes.sh`。 - 保持会话名称简短;避免使用空格。
## 查找会话
- 列出数据目录中的会话:`zellij --data-dir "$DATA_DIR" list-sessions`。 - 列出所有数据目录中的会话:`{baseDir}/scripts/find-sessions.sh --all`(使用 `CLAWDBOT_ZELLIJ_DATA_DIR`)。
## 安全地发送输入
- 使用 `zellij action` 发送按键:`zellij --data-dir "$DATA_DIR" action --session "$SESSION" write-chars --chars "$cmd"`。 - 控制键:`zellij --data-dir "$DATA_DIR" action --session "$SESSION" write 2` (Ctrl+C)。
## 监控输出
- 捕获窗格输出:`zellij --data-dir "$DATA_DIR" pipe --session "$SESSION" --pane-id 0`。 - 等待提示符:`{baseDir}/scripts/wait-for-text.sh -s "$SESSION" -p 0 -p 'pattern'`。 - 可以挂载(attach);使用 `Ctrl+p d`(zellij 默认的分离快捷键)分离。
## 生成进程
- 对于 Python REPL,zellij 与标准的 `python3 -q` 配合良好。 - 不需要像 tmux 那样的特殊标志(如 `PYTHON_BASIC_REPL=1`)。
## Windows / WSL
- zellij 支持 macOS/Linux。在 Windows 上,请使用 WSL 并在 WSL 内安装 zellij。 - 此技能限定在 `darwin`/`linux` 环境下,且要求 PATH 中有 `zellij`。
## 编排编码代理 (Codex, Claude Code)
zellij 擅长并行运行多个编码代理:
```bash DATA_DIR="${TMPDIR:-/tmp}/codex-army-data"
# Create multiple sessions for i in 1 2 3 4 5; do zellij --data-dir "$DATA_DIR" new-session --session "agent-$i" --layout "compact" --detach done
# Launch agents in different workdirs zellij --data-dir "$DATA_DIR" action --session "agent-1" write-chars --chars "cd /tmp/project1 && codex --yolo 'Fix bug X'\n" zellij --data-dir "$DATA_DIR" action --session "agent-2" write-chars --chars "cd /tmp/project2 && codex --yolo 'Fix bug Y'\n"
# Poll for completion (check if prompt returned) for sess in agent-1 agent-2; do pane_id=$(zellij --data-dir "$DATA_DIR" list-sessions --long | grep "\"$sess\"" | jq -r '.tabs[0].panes[0].id') if zellij --data-dir "$DATA_DIR" pipe --session "$sess" --pane-id "$pane_id" | grep -q "❯"; then echo "$sess: DONE" else echo "$sess: Running..." fi done
# Get full output from completed session zellij --data-dir "$DATA_DIR" pipe --session "agent-1" --pane-id 0 ```
**提示:** - 为并行修复使用独立的 git worktree(避免分支冲突) - 在全新的克隆中运行 codex 之前先执行 `pnpm install` - 检查 shell 提示符(`❯` 或 `$`)以检测完成情况 - Codex 需要 `--yolo` 或 `--full-auto` 才能进行非交互式修复
## 清理
- 终止会话:`zellij --data-dir "$DATA_DIR" delete-session --session "$SESSION"`。 - 终止数据目录上的所有会话:使用 `{baseDir}/scripts/cleanup-sessions.sh "$DATA_DIR"`。
## Zellij vs Tmux 快速参考
| 任务 | tmux | zellij | |------|------|--------| | 列出会话 | `list-sessions` | `list-sessions` | | 创建会话 | `new-session -d` | `new-session --detach` | | 挂载 | `attach -t` | `attach --session` | | 发送按键 | `send-keys` | `action write-chars` | | 捕获窗格 | `capture-pane` | `pipe` | | 终止会话 | `kill-session` | `delete-session` | | 分离 | `Ctrl+b d` | `Ctrl+p d` |
## 辅助工具:wait-for-text.sh
`{baseDir}/scripts/wait-for-text.sh` 轮询窗格中的正则表达式(或固定字符串),并支持超时。
```bash {baseDir}/scripts/wait-for-text.sh -s session -p pane-id -r 'pattern' [-F] [-T 20] [-i 0.5] ```
- `-s`/`--session` 会话名称(必需) - `-p`/`--pane-id` 窗格 ID(必需) - `-r`/`--pattern` 要匹配的正则表达式(必需);添加 `-F` 表示固定字符串 - `-T` 超时秒数(整数,默认 15) - `-i` 轮询间隔秒数(默认 0.5)
## 辅助工具:find-panes.sh
`{baseDir}/scripts/find-panes.sh` 列出给定会话的窗格。
```bash {baseDir}/scripts/find-panes.sh -s session [-d data-dir] ```
- `-s`/`--session` 会话名称(必需) - `-d`/`--data-dir` zellij 数据目录(如果未指定,则使用 `CLAWDBOT_ZELLIJ_DATA_DIR`)