ACPX 项目总结 - OpenClaw 与 Claude 的互通协作

📋 目录


项目概述

ACPX (Agent Client Protocol X) 是一个用于 Agent Client Protocol (ACP) 的无头 CLI 客户端,让 AI 助手和编排器能够通过结构化协议与编码代理通信,而不是通过 PTY(伪终端)会话抓取。

核心目标

为 AI 代理之间的通信提供统一的命令行接口,支持多个编码代理。

支持的编码代理

代理 命令
Codex acpx codex codex.openai.com
Claude Code acpx claude claude.ai/code
Gemini acpx gemini github.com/google/gemini-cli
OpenClaw ACP acpx openclaw github.com/openclaw/openclaw
OpenCode acpx opencode opencode.ai
Pi acpx pi github.com/mariozechner/pi

核心特性

1. 会话管理

  • 持久化会话:跨调用保存的多轮对话,按仓库范围限定

  • 命名会话:在同一仓库中运行并行工作流(-s backend, -s frontend

  • 提示队列:当一个提示正在运行时,提交新提示,它们按顺序执行

  • 协作取消:通过队列 IPC 发送 session/cancel,无需拆除会话状态

  • 软关闭生命周期:关闭会话而不删除磁盘上的历史记录

  • 崩溃重连:检测死亡的代理进程并自动重新加载会话

2. 高级功能

  • 队列所有者 TTL:保持队列所有者活跃以便快速跟进(--ttl

  • 即发即忘--no-wait 将提示排队并立即返回

  • 优雅取消:Ctrl+C 发送 session/cancel,在强制终止前回退

  • 会话控制set-modeset 用于 session/set_modesession/set_config_option

  • 从文件/stdin 提示--file 或管道 stdin 获取提示内容

  • 配置文件:全局 + 项目 JSON 配置(acpx config show|init

  • 会话检查/历史sessions showsessions history --limit

  • 本地状态检查status 报告运行中/死亡/无会话,pid,运行时间,最后提示

  • 客户端方法:稳定的 fs/*terminal/* 处理程序,带有权限控制和 cwd 沙箱

  • 认证握手:通过 env/config 凭证进行稳定的认证支持

  • 结构化输出:类型化的 ACP 消息(thinking、工具调用、diffs)而不是 ANSI 抓取

  • 任何 ACP 代理:内置注册表 + --agent 转义舱用于自定义服务器

  • 一次性模式exec 用于无状态的即发即忘任务


ACP 协议架构

协议层结构

┌─────────────────────────────────────────┐
│         ACPX (协议转换器)           │
├─────────────────────────────────────────┤
│  • 会话管理                        │
│  • 提示队列                        │
│  • 消息路由                        │
│  • 格式转换                        │
└─────────────────────────────────────────┘
         ▼                 ▼
┌─────────────┐    ┌─────────────┐
│  OpenClaw  │    │ Claude Code │
│  ACP Server │    │ ACP Client │
└─────────────┘    └─────────────┘

ACP 消息类型

ACPX 返回类型化的 ACP 消息,而不是原始文本:

{
  "eventVersion": 1,
  "sessionId": "abc123",
  "requestId": "req-42",
  "seq": 7,
  "stream": "prompt",
  "type": "tool_call"
}

消息类型

  • thinking:代理的思考过程

  • tool_call:工具调用

  • diff:代码更改

  • end_turn:任务完成


OpenClaw 与 Claude 的互通协作

核心连接机制

ACPX 是 OpenClaw 和 Claude Code 之间的桥梁,通过 Agent Client Protocol (ACP) 实现标准化通信。

1. 统一的协议层

ACPX 提供了统一的接口,让不同的 AI 代理能够相互对话:

┌─────────────┐      ACPX      ┌─────────────┐
│  OpenClaw  │ ◄──────────────► │ Claude Code │
│  (主代理)   │   (协议转换)    │  (编码代理)   │
└─────────────┘                  └─────────────┘

协议优势

  • ✅ 结构化消息(thinking、工具调用、diffs)

  • ✅ 避免 PTY 抓取的复杂性

  • ✅ 类型安全的通信

  • ✅ 跨代理兼容性

2. OpenClaw 作为 ACP 服务器

OpenClaw 可以作为 ACP 服务器,接受来自其他代理的请求:

# 启动 OpenClaw ACP 桥接
acpx openclaw exec 'summarize active session state'

配置示例(在 ~/.acpx/config.json 中):

{
  "agents": {
    "openclaw": {
      "command": "env OPENCLAW_HIDE_BANNER=1 OPENCLAW_SUPPRESS_NOTES=1 node scripts/run-node.mjs acp --url ws://127.0.0.1:18789 --token-file ~/.openclaw/gateway.token --session agent:main:main"
    }
  }
}

工作原理

  1. OpenClaw 启动 ACP 桥接服务

  2. 监听 WebSocket 连接(ws://127.0.0.1:18789

  3. 接受来自 Claude Code 的 ACP 请求

  4. 通过 gateway token 认证

  5. 执行请求并返回结构化响应

3. Claude Code 作为 ACP 客户端

Claude Code 可以通过 ACPX 调用 OpenClaw:

# 从 Claude Code 调用 OpenClaw
acpx claude 'ask OpenClaw to summarize current state'

或者直接使用 ACPX

# 使用 Claude Code 代理
acpx claude 'refactor auth module'

# 使用 OpenClaw 桥接
acpx openclaw exec 'summarize active session state'

4. 双向协作模式

场景 1:OpenClaw 调用 Claude Code

# OpenClaw 委派编码任务给 Claude Code
acpx codex 'fix the failing tests'

流程

  1. OpenClaw 通过 ACPX 发送任务

  2. ACPX 连接到 Codex/Claude Code ACP 服务器

  3. 代理执行任务

  4. 返回结构化结果(工具调用、diffs)

  5. OpenClaw 处理结果

场景 2:Claude Code 调用 OpenClaw

# Claude Code 请求 OpenClaw 的状态
acpx openclaw exec 'summarize active session state'

流程

  1. Claude Code 通过 ACPX 发送请求

  2. ACPX 连接到 OpenClaw ACP 桥接

  3. OpenClaw 执行查询

  4. 返回会话状态数据

  5. Claude Code 接收并处理

5. 会话共享

ACPX 支持命名会话,实现并行工作流:

# OpenClaw 中创建命名会话
acpx openclaw sessions new --name api

# 在不同的命名会话中并行工作
acpx openclaw -s api 'implement cursor pagination'
acpx openclaw -s docs 'rewrite API docs'

# 列出所有会话
acpx openclaw sessions list

会话特性

  • ✅ 按仓库范围限定

  • ✅ 持久化到磁盘(~/.acpx/sessions/

  • ✅ 支持并行工作流

  • ✅ 崩溃后自动重连

6. 提示队列

ACPX 提供智能提示队列,防止任务冲突:

# 提交多个任务,它们按顺序执行
acpx openclaw 'task 1'
acpx openclaw 'task 2'
acpx openclaw 'task 3'

队列功能

  • ✅ 自动排队执行

  • --no-wait 即发即忘

  • --ttl 保持队列所有者活跃

  • ✅ Ctrl+C 优雅取消


实际协作场景

场景 1:代码审查流水线

OpenClaw 作为协调者,委派任务给 Claude Code

# OpenClaw 调用 Claude Code 审查 PR
acpx codex -s pr-842 'Review PR #842 for regressions and propose a minimal fix'

流程

  1. OpenClaw 通过 ACPX 发送任务

  2. Claude Code 接收并执行审查

  3. 返回结构化的工具调用和 diffs

  4. OpenClaw 处理并应用更改

场景 2:状态同步

Claude Code 查询 OpenClaw 的状态:

# Claude Code 请求 OpenClaw 会话状态
acpx openclaw exec 'summarize active session state'

用途

  • 同步上下文

  • 获取会话历史

  • 检查运行状态

场景 3:并行开发

使用命名会话同时处理多个任务:

# OpenClaw 中并行工作
acpx openclaw -s backend 'implement API'
acpx openclaw -s frontend 'update UI'
acpx openclaw -s docs 'write documentation'

优势

  • ✅ 独立的会话状态

  • ✅ 不会相互干扰

  • ✅ 可以同时运行

场景 4:一次性任务

使用 exec 命令执行无状态任务:

# 一次性任务,不保存会话
acpx openclaw exec 'what does this repo do?'

特点

  • ✅ 无状态执行

  • ✅ 不保存历史

  • ✅ 适合快速查询


技术架构

1. 会话生命周期

创建 → 运行 → 队列 → 完成 → 关闭
  ↓      ↓      ↓      ↓      ↓
sessions new  prompt  queue  end_turn sessions close

2. 配置管理

ACPX 支持多级配置:

# 全局配置
~/.acpx/config.json

# 项目配置
/.acpxrc.json

# 命令行标志(优先级最高)
acpx --flag value

配置示例

{
  "defaultAgent": "codex",
  "defaultPermissions": "approve-all",
  "nonInteractivePermissions": "deny",
  "authPolicy": "skip",
  "ttl": 300,
  "timeout": null,
  "format": "text",
  "agents": {
    "openclaw": {
      "command": "env OPENCLAW_HIDE_BANNER=1 node scripts/run-node.mjs acp ..."
    }
  }
}

3. 输出格式

ACPX 支持多种输出格式:

# 文本格式(人类可读)
acpx --format text codex 'review this PR'

# JSON 格式(自动化)
acpx --format json codex exec 'review this PR' | jq ...

# JSON-Strict(仅 JSON)
acpx --format json --json-strict codex exec 'review'

# Quiet(仅最终结果)
acpx --format quiet codex 'give me a 3-line summary'

核心优势

ACPX 的优势

特性 说明
统一接口 一个命令管理多个代理
结构化通信 类型化的 ACP 消息,避免 PTY 抓取
会话持久化 跨调用保存状态
并行工作流 命名会话支持并行任务
智能队列 自动排队,防止冲突
优雅取消 Ctrl+C 发送 session/cancel
崩溃恢复 自动重连死亡进程
配置灵活 全局 + 项目配置
多种输出 text/json/json-strict/quiet

OpenClaw + Claude 协作的优势

协作点 说明
协议统一 通过 ACP 实现标准化通信
双向调用 OpenClaw ↔ Claude Code 互相调用
会话共享 命名会话支持并行工作流
状态同步 实时查询会话状态
任务委派 OpenClaw 委派编码任务给 Claude
结构化输出 类型化的消息,易于解析
无 PTY 抓取 避免终端模拟的复杂性

安装与使用

安装

# 全局安装(推荐)
npm install -g acpx@latest

# 或者不安装直接运行
npx acpx@latest

安装 ACPX 技能

# 安装 ACPX 技能以便获得完整参考
npx acpx@latest --skill install acpx

读取技能参考

# 读取 ACPX 技能参考
https://raw.githubusercontent.com/openclaw/acpx/main/skills/acpx/SKILL.md

基本使用

# 创建新会话
acpx codex sessions new

# 发送提示
acpx codex 'fix the failing tests'

# 从文件读取提示
acpx codex --file prompt.md

# 从 stdin 读取提示
echo 'fix flaky tests' | acpx codex

# 列出会话
acpx codex sessions list

# 显示会话状态
acpx codex status

# 取消运行中的任务
acpx codex cancel

高级使用

# 创建命名会话
acpx openclaw sessions new --name api

# 在命名会话中工作
acpx openclaw -s api 'implement cursor pagination'

# 并行工作流
acpx openclaw -s backend 'implement API'
acpx openclaw -s frontend 'update UI'

# 一次性任务
acpx openclaw exec 'summarize this repo'

# 即发即忘
acpx openclaw --no-wait 'draft test migration plan'

# 设置 TTL
acpx openclaw --ttl 30 'keep queue owner alive for quick follow-ups'

# 设置超时
acpx openclaw --timeout 90 'investigate intermittent test timeout'

配置管理

# 显示当前配置
acpx config show

# 初始化全局配置
acpx config init

# 查看配置文件
cat ~/.acpx/config.json
cat .acpxrc.json

总结

ACPX 的角色

ACPX 是 OpenClaw 和 Claude Code 之间的协议转换桥梁,通过 ACP 实现了:

  1. 统一通信:一个命令接口管理多个代理

  2. 结构化消息:类型化的 ACP 消息替代 PTY 抓取

  3. 会话管理:持久化、命名、并行工作流

  4. 智能队列:自动排队,优雅取消

  5. 双向协作:OpenClaw ↔ Claude Code 互相调用

如何实现互通协作

OpenClaw 端

  1. 启动 ACP 桥接服务

  2. 监听 WebSocket 连接

  3. 接受来自 Claude 的请求

  4. 执行并返回结构化响应

Claude Code 端

  1. 通过 ACPX 调用 OpenClaw

  2. 发送结构化请求

  3. 接收并处理响应

ACPX 中间层

  1. 协议转换

  2. 会话管理

  3. 消息路由

  4. 格式转换

核心价值

  • 开发一次,多处可用:开发者只需维护一个 ACP 接口

  • 跨代理兼容:支持 Codex、Claude、Gemini、OpenClaw、Pi 等多个代理

  • 结构化通信:避免 PTY 抓取的复杂性

  • 并行工作流:命名会话支持同时处理多个任务

  • 状态持久化:会话状态保存到磁盘,崩溃后自动恢复


一句话总结:ACPX 通过 ACP 协议实现了 OpenClaw 和 Claude Code 之间的标准化、结构化、双向通信,让两者能够无缝协作、共享会话、委派任务,并支持并行工作流。