Neo 分享了 Hermes Agent 通过 Camofox 实现持久化浏览器身份的完整配置方案。
大多数 Agent 浏览器演示失效的那一刻
你登录一次,任务结束,下一次运行从头开始。toy 级别的浏览没问题,但真实工作流会很糟糕。
Hermes 有一条更好的路径:对接 Camofox(自托管抗检测浏览器后端),配置持久化浏览器会话,让 Cookie 和登录状态在 Agent 运行之间保留。把浏览器自动化从「无状态演示模式」变成可复用的操作员工作流。
Camofox 是什么
Camofox 是一个自托管的 Node.js 服务器,封装了 Camoufox(一个带指纹伪造功能的 Firefox 分支)。实际效果:
- 自己运行浏览器服务
- Hermes 通过它路由浏览器任务
- 浏览环境表现得像一个持久的操作员浏览器,而不是一次性的云会话
这和「每次 Agent 都启动一个全新的匿名浏览器」完全不同。
Hermes 支持的浏览器后端
- Browserbase(云端)
- Browser Use
- Firecrawl
- 本地 Chromium(agent-browser)
- 本地 Chrome(CDP)
- Camofox(本地抗检测浏览)
两个安装路径
本地安装:
git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser
npm install && npm start
Docker:
docker run -d --network host -e CAMOFOX_PORT=9377 jo-inc/camofox-browser
然后在 ~/.hermes/.env 里设置:
CAMOFOX_URL=http://localhost:9377
最关键的部分:启用持久化会话
默认情况下 Camofox 会话是临时的——每个会话获取随机身份,Cookie 和登录状态不保留。
在 ~/.hermes/config.yaml 中添加:
browser:
camofox:
managed_persistence: true
然后完全重启 Hermes。
坑: 如果路径写错,Hermes 会静默降级到临时会话,登录状态持续消失。这种配置 bug 极其浪费时间。
持久化后 Hermes 做了什么
启用后 Hermes 做三件事:
- 向 Camofox 发送确定性、Profile 作用域的 userId
- 跳过清理时的服务端上下文销毁
- 将该身份作用域映射到活跃的 Hermes Profile
第三点是大招:如果你有多个 Hermes Profile,每个可以映射到不同的持久化浏览器身份——研究浏览一个 Profile,工作自动化一个 Profile,个人浏览任务一个 Profile。浏览器身份和 Hermes 的内存、会话、配置隔离模型完全对齐。
验证持久化是否生效
- 启动 Hermes 和 Camofox 服务器
- 打开 Google 等登录网站
- 手动登录
- 正常结束浏览器任务
- 启动新的浏览器任务
- 再次打开同一个网站
如果仍然登录着,说明持久化生效。如果登出了,可能原因:
managed_persistence路径写错- Hermes 没有完全重启
- Camofox 服务器没有正确实现持久化 Profile
- 服务器构建本质上是临时性的
另一个好功能:VNC 可见性
Camofox 在 headed 模式下运行时,可以在健康检查响应中暴露 VNC 端口。Hermes 能自动发现它,并在导航响应中包含 VNC URL,让你可以实时观看浏览器操作。这对需要监督的复杂浏览任务很有用。
适用场景
强需求:
- 重复登录同一网站
- 抗检测浏览(不依赖云)
- Profile 隔离的浏览器身份
- 需要连续感而非临时沙盒的浏览器任务
非必要:
- 偶尔的无状态浏览
- 快速抓取
- 一次性页面交互
- 对保留登录状态完全没需求
一句话总结:Camofox 持久化让 Hermes 浏览器自动化从「一次性演示」变成「长期运行的基础设施」。持久化浏览器身份是 Agent 真正进入生产级工作流的基础。