OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  zellij:通过发送按键远程控制 Zellij 会话实现交互式操作

zellij:通过发送按键远程控制 Zellij 会话实现交互式操作

 
  rest ·  2026-02-16 19:56:02 · 3 次点击  · 0 条评论  

名称: 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)"}]}}


zellij 技能 (Moltbot)

仅在需要交互式 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)。
  • 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 系统,并要求 zellij 在 PATH 中。

编排编码代理 (Codex, Claude Code)

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"

Zellij 与 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 轮询指定窗格,等待匹配正则表达式(或固定字符串)的内容出现,并支持超时。

{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 列出指定会话的所有窗格。

{baseDir}/scripts/find-panes.sh -s session [-d data-dir]
  • -s/--session 会话名称(必需)
  • -d/--data-dir zellij 数据目录(未指定时使用 CLAWDBOT_ZELLIJ_DATA_DIR
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor