mcpField
Z
zmx

zmx

github.com/alleneubank开发5097 次安装18 周前更新
代码仓库

关于 zmx

使用 zmx 管理长期运行开发进程的技能,为编码 Agent 提供会话命名与生命周期管理、命令执行、输出监控和就绪检查方法,适用于同时处理多个项目进程的场景。

主要功能

  1. 01按项目命名会话
  2. 02在会话中启动并发送命令
  3. 03查看会话输出与历史记录
  4. 04等待进程完成
  5. 05检查就绪状态并停止会话

适用场景

  1. 01在 Agent 工作时运行开发服务器
  2. 02将测试和文件监视器分置会话
  3. 03检查日志中的错误或就绪状态
  4. 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