在 AI 代码助手领域,IDE 集成已经成为兵家必争之地。VS Code 的 Copilot Chat、JetBrains 的 Junie,以及 Cursor、Zed 等新兴编辑器,都在想尽办法把 AI Agent 能力塞进开发者的日常工作流。然而这些方案大多与特定平台深度绑定,一旦换编辑器就面临重新学习成本。
Hermes Agent 给出了一条不同的路:通过 ACP(Agent Communication Protocol),把 Hermes 打造成一个可以被任意支持 ACP 的编辑器调用的外部 Agent 服务器。OpenClaw 就是这样一个 ACP 客户端——它可以连接到你部署的 Hermes ACP 服务器,让你在熟悉的编辑器里用上 Hermes 的全部能力。
一、什么是 ACP 协议
ACP 全称 Agent Communication Protocol,是 Hermes Agent 设计的开放协议,用于在 IDE(或其他客户端)与远程 Agent 之间建立通信隧道。
从协议层面看,ACP 基于 JSON-RPC 2.0,传输层使用 标准输入输出(stdio)——也就是说,Hermes ACP 服务器本质上是一个跑在终端里的 daemon 进程,IDE 通过向它的 stdin 写入 JSON-RPC 请求、从它的 stdout 读取响应来完成通信。
这种设计带来了几个显著优势:
- 厂商无关:只要实现了 ACP 协议,任何客户端都可以连接 Hermes,不依赖特定 IDE 插件
- 透明性:stdio 意味着你可以直接在终端里
curl或者nc调试协议,省去很多黑盒烦恼 - 安全可控:Agent 跑在你自己的机器上,不存在数据经过第三方服务器的问题
- 可组合:可以同时运行多个 ACP 客户端,连接到同一个 Hermes 实例,实现多编辑器协同
二、工作原理:stdio 上的 JSON-RPC
理解 ACP 的关键,是搞清楚 JSON-RPC 和 stdio 的组合是怎么工作的。
传统的 API 调用走 HTTP/HTTPS,客户端发请求、服务器回响应,是有连接的模型。而 stdio 是管道模型:Hermes ACP 服务器启动后,不输出任何人类可读的内容到 stdout(stderr 可以打日志),所有与客户端的通信都通过两个文件描述符:
- stdin:接收客户端发来的 JSON-RPC 请求
- stdout:发送 JSON-RPC 响应(每个响应一行,是标准的 JSON 对象)
JSON-RPC 2.0 的请求格式大概是这个样子:
{"jsonrpc": "2.0", "id": 1, "method": "prompt", "params": {"prompt": "解释这段代码", "session_id": "abc123"}}
对应的响应:
{"jsonrpc": "2.0", "id": 1, "result": {"content": "这段代码做了...", "done": true}}
Hermes ACP 服务器在收到请求后,会在后台线程里启动 AIAgent 实例来处理这个 prompt,并将处理过程中的事件(tool_use、thinking、message 等)通过 session_update 类型的通知推送给客户端。这套事件机制借鉴了 LSP(Language Server Protocol)的思路,让 IDE 可以实时渲染 Agent 的思考过程。
三、开始配置:从安装到连接
3.1 确认 Hermes 版本和支持
ACP 功能从 Hermes Agent v0.8.0 开始引入。你可以用以下命令确认你的 Hermes 版本:
hermes --version
如果输出低于 0.8.0,需要先升级 Hermes:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
3.2 启动 Hermes ACP 服务器
ACP 服务器的启动方式非常简单——在终端里运行:
hermes acp
不带任何参数时,Hermes 会启动一个守护进程,监听当前终端的 stdio。stdout 不会有任何输出,所有日志都走 stderr——这是 ACP 的设计规范,目的是保持 stdout 的纯净。
如果你想在后台长期运行 ACP 服务器,可以使用 tmux:
tmux new-session -d -s hermes-acp 'hermes acp'
3.3 OpenClaw 端配置连接
OpenClaw 是另一个开源的 AI Agent 框架,专注于 IDE 集成。当 OpenClaw 配置使用外部 Agent 时,它就变成了一个 ACP 客户端。
在 OpenClaw 的配置文件(~/.openclaw/config.yaml)里,添加 remote Agent 配置:
agents:
hermes-remote:
type: remote
transport: stdio
command: hermes acp
model: anthropic/claude-sonnet-4
如果你的 Hermes ACP 服务器不在本地,而是跑在另一台机器上,OpenClaw 也支持通过 SSH 管道连接。
3.4 验证连接是否成功
用 OpenClaw 的命令测试连接:
openclaw ask "Hello, what's 2+2?" --agent hermes-remote
如果返回了正确的回答,说明整个链路是通的。
四、常见问题排查
Connection Refused / 无法连接
- Hermes ACP 没启动:用
ps aux | grep hermes检查进程 - 路径问题:
command必须是完整可执行路径,或者hermes在$PATH里 - 权限问题:确保运行 Hermes ACP 的用户对
~/.hermes/和工作目录有读写权限
认证失败(Auth Failure)
ACP 服务器启动时会加载 ~/.hermes/.env,确保包含有效的 API Key:
ANTHROPIC_API_KEY=sk-ant-...
# 或者
OPENAI_API_KEY=sk-...
工具调用超时
ACP 服务器默认工具调用超时是 90 秒。可以在 config.yaml 里调高:
agent:
max_turns: 300
五、进阶用法
多会话管理
ACP 支持同时管理多个独立会话,每个会话有自己独立的 session_id、工作目录和历史记录。在 OpenClaw 里可以用 /new 或 /session new 开启新会话。
模型动态切换
ACP 允许在运行时切换模型,不需要重启服务器:
/model anthropic/claude-3-5-sonnet-20241022
权限与审批控制
ACP 服务器内置了权限控制机制。对于危险操作,Hermes 会向客户端发送 approval 请求,等待用户确认后再继续。
总结
Hermes ACP 协议提供了一条灵活、安全、厂商无关的 AI Agent 集成路径。通过 stdio 上的 JSON-RPC,Hermes 可以被任何支持 ACP 的客户端调用,而 OpenClaw 正好充当了这个角色——让你在编辑器里用上 Hermes 的全部 Agent 能力。
整个配置过程:确认版本 → 启动 ACP 服务器 → 配置 OpenClaw 远程 Agent → 验证连接。如果遇到问题,重点检查进程状态、路径权限和 API Key 配置这三个地方。
评论区