关于 zmx
使用 zmx 管理长期运行开发进程的技能,为编码 Agent 提供会话命名与生命周期管理、命令执行、输出监控和就绪检查方法,适用于同时处理多个项目进程的场景。
主要功能
- 01按项目命名会话
- 02在会话中启动并发送命令
- 03查看会话输出与历史记录
- 04等待进程完成
- 05检查就绪状态并停止会话
适用场景
- 01在 Agent 工作时运行开发服务器
- 02将测试和文件监视器分置会话
- 03检查日志中的错误或就绪状态
- 04仅停止当前项目所属会话
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alleneubank/ claude-code --skill zmx安装后在 Claude Code 中输入/zmx确认已加载。
详细介绍
zmx 进程管理
会话规则
- 创建会话前先检查
zmx list --short——重复会话会导致端口冲突和输出混乱 - 根据
git rev-parse --show-toplevel推导会话名称——多个 Agent 实例并发运行时,硬编码的名称会发生冲突 - 使用
zmx run发送命令,无需附加会话——zmx attach会阻塞 Agent 的 Shell,使其无法响应 - 运行多个进程时,使用带有共同项目前缀的独立会话
一个项目 = 一个会话前缀。多个进程 = 多个共享该前缀的会话。
会话命名
PROJECT=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" || basename "$PWD")
以下所有示例均假设已设置 PROJECT。会话名称遵循 ${PROJECT}-<role>:
myapp-server、myapp-tests、myapp-tilt
启动进程
SESSION="${PROJECT}-server"
# Idempotent: skip if already running
if ! zmx list --short 2>/dev/null | grep -q "^${SESSION}$"; then
zmx run "$SESSION" 'npm run dev'
fi
对于多个进程,遍历名称:命令对:
for name_cmd in "server:npm run dev" "tests:npm run test:watch"; do
name="${name_cmd%%:*}"
cmd="${name_cmd#*:}"
SESSION="${PROJECT}-${name}"
if ! zmx list --short 2>/dev/null | grep -q "^${SESSION}$"; then
zmx run "$SESSION" "$cmd"
fi
done
发送命令
# Run a command in a session (creates session if needed)
zmx run "${PROJECT}-main" 'cat README.md'
# Pipe via stdin
echo "ls -lah" | zmx r "${PROJECT}-main"
监控输出
zmx history "${PROJECT}-server" # full scrollback
zmx history "${PROJECT}-server" | tail -50 # last 50 lines
zmx history "${PROJECT}-server" | rg -i "error|fail" # check for errors
zmx history "${PROJECT}-server" | rg -i "listening|ready" # check for ready
等待完成
zmx wait "${PROJECT}-tests" # block until done
zmx wait "${PROJECT}-build" "${PROJECT}-lint" # wait for multiple
生命周期
zmx list # all sessions
zmx list --short # names only
zmx kill "${PROJECT}-server" # kill one session
# Kill all project sessions
zmx list --short 2>/dev/null | grep "^${PROJECT}-" | while read -r s; do
zmx kill "$s"
done
隔离
- 只终止匹配当前项目前缀的会话——其他 Agent 实例可能正在运行自己的会话
- 执行终止操作前,务必确认会话名称
何时使用 zmx
| 场景 | 使用 zmx? |
|---|---|
tilt up | 是,始终使用 |
开发服务器(npm run dev、rails s) | 是 |
文件监视器(npm run watch) | 是 |
测试监视器(npm run test:watch) | 是 |
| 数据库服务器 | 是 |
一次性构建(npm run build) | 否 |
| 快速命令(<10s) | 否 |
| 需要在对话中直接查看标准输出 | 否 |
轮询就绪状态
for i in {1..30}; do
if zmx history "${PROJECT}-server" 2>/dev/null | tail -20 | rg -q "listening|ready"; then
echo "Server ready"
break
fi
sleep 1
done
评论
支持 Markdown