名称: zellij
描述: 通过发送按键和抓取窗格输出,远程控制 zellij 会话以运行交互式 CLI。
主页: https://zellij.dev
元数据: {"moltbot":{"emoji":"🪟","os":["darwin","linux"],"requires":{"bins":["zellij","jq"]},"install":[{"id":"brew","kind":"brew","formula":"zellij","bins":["zellij"],"label":"安装 Zellij (brew)"},{"id":"cargo","kind":"cargo","crate":"zellij","bins":["zellij"],"label":"安装 Zellij (Cargo)"}]}}
仅在需要交互式 TTY 时使用 zellij。对于长时间运行的非交互式任务,优先使用 exec 后台模式。
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
启动会话后,始终打印监控命令:
监控方法:
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)。pane-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'。Ctrl+p d(zellij 默认分离键)分离。python3 -q 配合良好。PYTHON_BASIC_REPL=1)。darwin/linux 系统,并要求 zellij 在 PATH 中。zellij 擅长并行运行多个编码代理:
DATA_DIR="${TMPDIR:-/tmp}/codex-army-data"
# 创建多个会话
for i in 1 2 3 4 5; do
zellij --data-dir "$DATA_DIR" new-session --session "agent-$i" --layout "compact" --detach
done
# 在不同工作目录中启动代理
zellij --data-dir "$DATA_DIR" action --session "agent-1" write-chars --chars "cd /tmp/project1 && codex --yolo '修复 bug X'\n"
zellij --data-dir "$DATA_DIR" action --session "agent-2" write-chars --chars "cd /tmp/project2 && codex --yolo '修复 bug Y'\n"
# 轮询完成状态(检查提示符是否返回)
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: 完成"
else
echo "$sess: 运行中..."
fi
done
# 从已完成的会话获取完整输出
zellij --data-dir "$DATA_DIR" pipe --session "agent-1" --pane-id 0
提示:
- 使用独立的 git worktree 进行并行修复(避免分支冲突)
- 在新克隆的仓库中,先运行 pnpm install 再执行 codex
- 检查 shell 提示符(❯ 或 $)以检测任务是否完成
- Codex 需要 --yolo 或 --full-auto 参数来进行非交互式修复
zellij --data-dir "$DATA_DIR" delete-session --session "$SESSION"。{baseDir}/scripts/cleanup-sessions.sh "$DATA_DIR"。| 任务 | 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 |
{baseDir}/scripts/wait-for-text.sh 轮询指定窗格,等待匹配正则表达式(或固定字符串)的内容出现,并支持超时。
{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){baseDir}/scripts/find-panes.sh 列出指定会话的所有窗格。
{baseDir}/scripts/find-panes.sh -s session [-d data-dir]
-s/--session 会话名称(必需)-d/--data-dir zellij 数据目录(未指定时使用 CLAWDBOT_ZELLIJ_DATA_DIR)