🤖HermesBlog
Hermes 功能详解 · 第25篇2026/8/9· Easy Understand Hermes Agent

第25篇:ACP——Agent 间的通信协议

Hermes 功能详解第25篇:ACP。Agent Client Protocol 主机集成。

这篇讲的是:如何让 Hermes Agent 通过一种叫 ACP 的“通用插头”,接入你常用的编辑器或聊天平台,让 AI 直接在你手边工作。

想象一下:ACP 就像 USB-C 接口。以前每个设备都要专属充电线,现在只要都支持 USB-C,一根线全搞定。ACP 就是 AI 智能体世界的 USB-C,让 Hermes 能“插”进 VS Code、Zed、JetBrains,甚至去 Buzz 频道里当“数字员工”。

ACP:AI 世界的 USB-C

第1步:安装 ACP 扩展包

先正常安装 Hermes,然后打开终端,执行:

cd ~/.hermes/hermes-agent && python -c "import pm; pm.sync_venv(['acp'], explicit=True)"

本页的 Python 依赖命令都基于 PM 准备好的源码检出(见包管理文档的“开发者工作流”)。依赖有变动后,重新激活检出并重启 Hermes。

装好后,你就多了三个启动命令,任选其一即可:

hermes acp
hermes-acp
python -m acp_adapter

注意: Hermes 会把日志写到 stderr,把 stdout 留给 ACP 数据流——就像机场广播和旅客通道分开,互不干扰。

先做个快速体检:

hermes acp --check

第2步:让 Hermes 学会“看网页”(可选)

如果你想让 AI 能操作浏览器(比如自动点击、填表),需要额外装浏览器工具(browser_exec 以及 CDP 系列工具 browser_cdp、browser_dialog、browser_vault):

hermes acp --setup-browser --yes

它会通过包管理器安装 Hermes 固定版本的 Chromium(chromium 包),全程不涉及 Node.js 或 npm。 当 browser_exec 第一次需要浏览器时,Hermes 会自己启动这个 Chromium。装过一次后,再跑会秒过(幂等设计)。

顺带一提,如果你走的是 hermes acp --setup 那条首次配置流程,选完模型后它也会顺口问你要不要装浏览器工具,所以大多数人其实不用单独跑 --setup-browser。

第3步:接入你的编辑器

VS Code 用户: 安装“ACP Client”扩展,然后在设置里添加:

{
  "acp.agents": {
    "Hermes Agent": {
      "command": "hermes",
      "args": ["acp"]
    }
  }
}

Zed 用户: 在设置中添加自定义 agent 服务器:

{
  "agent_servers": {
    "hermes-agent": {
      "type": "custom",
      "command": "hermes",
      "args": ["acp"]
    }
  }
}

JetBrains 用户: 找个支持 ACP 的插件,指向 hermes acp 即可。

第4步:让 Hermes 去 Buzz 频道“上班”(进阶)

Buzz 是一个人和 AI 都能用的协作平台。你可以搭一座桥,让 Hermes 自动响应频道里的消息:

export BUZZ_RELAY_URL="wss://community.example.com"
export BUZZ_PRIVATE_KEY="你的私钥"
export BUZZ_API_TOKEN="令牌(可选)"
export BUZZ_ACP_AGENT_COMMAND="hermes"
export BUZZ_ACP_AGENT_ARGS="acp"
buzz-acp

重要提醒: 每个 AI 智能体都要有独立的 Nostr 身份密钥,千万别用你人类的密钥。而且默认设置下,Buzz 里的 Hermes 可以不经确认直接执行终端命令——我测试让它对临时目录执行 rm -rf,它真删了,全程无提示。所以务必保持“仅限所有者”权限,别改成“任何人”。

另外,如果你想让 Hermes 在 Buzz 里的活动显示在主人的 Buzz Desktop 上,可以再加一句:

export BUZZ_ACP_RELAY_OBSERVER="true"

这样就能在智能体的 Activity log 里看到实时流程、工具调用和回复了。

自定义 ACP 会话能用哪些工具

ACP 会话里的工具集和消息网关走的是同一套解析规则:默认的 hermes-acp 列表之外,还会带上网关额外加的那些,比如你启用的插件工具集。想改的话,用 platform_toolsets.acp 覆盖默认列表,用 agent.disabled_toolsets 从每个 ACP 会话里移除工具集。mcp_servers 里的 MCP 服务器也遵循同样的规则——默认全部启用,如果你在 platform_toolsets.acp 里列了服务器名,就只有这些会被包含,写 no_mcp 则全部丢掉。注意 hermes tools 里没有 ACP 这一项,只能直接改 config.yaml:

platform_toolsets:
  acp: [file, web, skills, github]   # only the github MCP server
agent:
  disabled_toolsets: [code_execution]

编辑器通过 session/new 发过来的 MCP 服务器是另一回事:客户端按会话请求,它们总是会被加上。

在声明支持 acp-session-mcp-v1 的网关上,编辑器发来的 mcpServers 归属于规范会话,而不是 ACP 查看器进程;即使两个编辑器提供了同名服务器,网关也会用不同的注册表命名空间区分。关闭一个编辑器不会取消另一个会话的 MCP 执行。

发现过程在第一个模型回合前完成,有界且是急切的;选中的工具 schema 在整段对话中保持冻结,服务器工具列表变化需要新开会话。每次执行后 MCP 传输会被释放,但不会停掉兄弟会话或共享的 MCP 循环。

网关只在内存里保留编辑器的传输规格(包括命令参数、环境变量和 HTTP 头)。持久化的会话策略只存指纹和选中的 schema,不存这些凭据的副本。网关重启后,编辑器必须在加载/恢复时重新提供相同的 mcpServers。凭据缺失会拒绝执行;规格或密钥变化会拒绝重新挂接,而不是悄悄改变会话。改服务器配置时请新开会话。命令和路径在网关主机上运行。

关于审批超时

编辑器里的危险命令审批弹窗,如果一直没人点,或者中途出错,Hermes 会默认拒绝。等待时长由 config.yaml 里的 approvals.timeout 控制,默认 300 秒——跟 CLI 和网关用的是同一个参数。如果你的编辑器习惯把审批卡片挂很久,可以把这个值调大一点。

注意: 在 Buzz 这类自动批准的宿主里,把 approvals.mode 设成 manual 也没用——Hermes 确实会发出权限请求,但 Buzz 会自动批准,命令照样执行。想真正拿掉 shell 权限,得从工具集下手:把 platform_toolsets.acp 设成一个不含 terminal 和 code_execution 的列表,或者把它们加进 agent.disabled_toolsets。即使写成空的 platform_toolsets.acp: [],启用的插件工具集还是会被加进来,所以想干掉哪个插件工具集,就在 agent.disabled_toolsets 里点名。

小总结

ACP 让 Hermes 变成“即插即用”的 AI 助手:编辑器里聊聊天、看代码 diff、批准命令,或者去 Buzz 频道当数字员工。核心心法是:身份归 Hermes,界面归宿主应用。下篇预告:我们聊聊 Hermes 的“记忆宫殿”——如何让 AI 跨会话记住你的偏好和项目上下文。

📖 官方文档

本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/features/acp