Install
openclaw skills install chcManage and persist multiple Claude Code CLI sessions via OpenClaw, enabling PTY-based session control, messaging, and lifecycle management.
openclaw skills install chcOpenClaw 管理 Claude Code CLI 的完整生命周期,实现用户与 Claude Code 的双向通信。
| 模式 | 推荐 | 输出质量 | 多轮支持 | 使用场景 |
|---|---|---|---|---|
| ACP | ⭐ 优先 | ✅ 干净文本 | ✅ 自动持久化 | 正常工作、多轮对话 |
| PTY | 备选 | ⚠️ ANSI 噪音 | ✅ 手动管理 | ACP 不可用时 |
优先使用 ACP 模式,PTY 作为降级方案。
通过 acpx CLI 驱动 Claude Code,输出干净、支持多轮对话。
# 检查 acpx 是否安装
~/.openclaw/npm/node_modules/.bin/acpx --version
# 如果没有,安装
npm install acpx --prefix ~/.openclaw/npm
ACPX_CMD="$HOME/.openclaw/npm/node_modules/.bin/acpx"
PROJECT_DIR="/path/to/project"
SESSION_NAME="my-project"
# 1. 创建持久会话
$ACPX_CMD --cwd $PROJECT_DIR claude sessions new --name "$SESSION_NAME"
# 2. 发送消息(多轮)
$ACPX_CMD --cwd $PROJECT_DIR claude -s "$SESSION_NAME" "分析这个项目结构"
$ACPX_CMD --cwd $PROJECT_DIR claude -s "$SESSION_NAME" "继续深入分析配置文件"
$ACPX_CMD --cwd $PROJECT_DIR claude -s "$SESSION_NAME" "帮我优化这段代码"
# 3. 关闭会话
$ACPX_CMD --cwd $PROJECT_DIR claude sessions close "$SESSION_NAME"
关键点:
-s "$SESSION_NAME" 指定会话名称,实现多轮对话--cwd 必须每次指定相同目录ACP 输出干净、有标记:
[thinking] 用户想知道项目结构...
[tool] ls -la (completed)
[tool] find . -name "*.json" (completed)
[done] end_turn
# 查看所有会话
$ACPX_CMD --cwd $PROJECT_DIR claude sessions
# 查看会话状态
$ACPX_CMD --cwd $PROJECT_DIR claude status -s "$SESSION_NAME"
# 取消正在执行的命令
$ACPX_CMD --cwd $PROJECT_DIR claude cancel -s "$SESSION_NAME"
也可以用 sessions_spawn,但这是 one-shot 模式,执行完就结束:
{
"runtime": "acp",
"agentId": "claude",
"cwd": "/path/to/project",
"label": "task-name",
"task": "一次性任务描述"
}
适用场景: 单次任务,不需要后续对话。
直接通过 PTY 运行 Claude Code CLI,ACP 不可用时使用。
# 启动 PTY 会话
exec(command="claude", pty=true, cwd="/path/to/project")
返回 session ID,如 fast-glade。
process(action=write, sessionId="fast-glade", data="你的问题")
process(action=send-keys, keys=["Enter"])
process(action=poll, sessionId="fast-glade", timeout=120000)
注意: PTY 输出包含 ANSI 控制字符,需要过滤解析:
[2D[3B[2K[G[1A[2C[2A你好[7m ... ← ANSI 噪音
# 第一轮
process(action=write, sessionId="xxx", data="问题1")
process(action=send-keys, keys=["Enter"])
process(action=poll, sessionId="xxx", timeout=120000)
# 第二轮(同一 session)
process(action=write, sessionId="xxx", data="问题2")
process(action=send-keys, keys=["Enter"])
process(action=poll, sessionId="xxx", timeout=120000)
process(action=kill, sessionId="xxx")
# ACP 会话
~/.openclaw/npm/node_modules/.bin/acpx --cwd ~/project claude sessions
# PTY 会话
process(action=list)
| 场景 | 建议 |
|---|---|
| 单项目开发 | 保持单一会话 |
| 多项目并行 | 每项目独立会话(不同 SESSION_NAME) |
| PR 审查 + 开发 | 分离两个会话 |
使用语义化名称:
hope-main - Hope 项目主会话coding-pr - PR 审查专用quick-test - 临时测试检查 ~/.acpx/config.json,删除错误的配置:
rm ~/.acpx/config.json
然后用 npx 默认方式。
ACP:尝试 claude cancel -s "$SESSION_NAME"
PTY:发送空消息唤醒,或 kill 重启
启动新会话指向新目录:
$ACPX_CMD --cwd /new/project claude sessions new --name "new-project"
~/.claude/sessions/ 中的 JSON 文件~/.claude/settings.json - Claude Code API 配置~/.claude/sessions/*.json - 会话持久化~/.acpx/config.json - acpx 自定义配置(可选)