Agent工坊

【Agent工坊】Hermes v0.16 远程网关实战:让桌面App连上你的服务器Agent

Hermes v0.16 "The Surface Release" 最被低估的功能不是桌面App本身,而是它连接远程网关的能力——你的笔记本跑轻薄GUI,服务器跑重型Agent,这才是AI创业者的正确打开方式。

远程网关架构:笔记本桌面App通过WebSocket连接服务器Gateway▲ 远程网关架构:笔记本桌面App通过WebSocket连接服务器Gateway

为什么你需要远程网关

先说一个真实场景:你在阿里云/腾讯云上租了一台8核32G的GPU服务器,API Key、模型配置、Skills、Cron任务全在上面。白天你用MacBook Air写代码,想随时调Hermes帮你干活——但你绝对不想在笔记本上再配一套Hermes环境,更不想把API Key同步到两台机器上。

v0.16之前,你只能SSH进服务器用CLI。v0.16的远程网关功能彻底改变了这个局面:服务器跑Hermes Gateway,桌面App通过WebSocket远程连接,你在笔记本上的每一次聊天都实时发送到服务器执行,工具调用、文件操作、Cron管理全在服务器上完成。

这不是"远程终端",而是原生GUI体验的远程Agent——聊天窗口有流式输出,Cmd+K命令面板能用,拖拽文件上传能传到服务器,甚至多Profile并发会话(一个Profile连服务器A做开发,一个连服务器B做运维)。

架构原理

┌─────────────────────┐ WebSocket (wss://) ┌─────────────────────┐

│ 你的笔记本 │ ◄──────────────────────────────► │ 远程服务器 │

│ │ │ │

│ Hermes Desktop App │ OAuth / 用户名密码认证 │ Hermes Gateway │

│ (Electron, 轻薄GUI) │ │ (重型Agent引擎) │

│ │ │ │

│ • 聊天窗口 │ │ • API Keys │

│ • 流式输出 │ │ • LLM 调用 │

│ • 文件拖拽上传 │ │ • Skills 执行 │

│ • 模型选择器 │ │ • Cron 任务 │

│ • 多Profile管理 │ │ • 工具调用 │

└─────────────────────┘ └─────────────────────┘

关键点:桌面App只是一个展示层,所有计算、API调用、文件操作都在远程服务器上执行。桌面App的WebSocket连接是加密的(wss://),认证支持OAuth和用户名密码两种方式。

第一步:在服务器上启动Hermes Gateway

首先确保服务器上已经安装了Hermes Agent v0.16.0+:

# 检查版本

hermes --version

# 应输出: Hermes Agent v0.16.0 或更高

# 如果不是最新版,升级

pip install --upgrade hermes-agent

配置Gateway监听

Hermes Gateway需要绑定到可被外部访问的地址。编辑 ~/.hermes/config.yaml

gateway:

  bind: "0.0.0.0" # 监听所有网络接口

  port: 9119 # 默认端口

  # 认证方式(二选一)

  # 方式A:用户名密码认证(最简单)

  auth:

    username: "admin"

    password: "your-strong-password-here"

  # 方式B:OAuth/OIDC(更安全,适合团队)

  # auth:

  # oidc:

  # issuer: "[链接]"

  # client_id: "xxx.apps.googleusercontent.com"

  # client_secret: "GOCSPX-xxx"

启动Gateway

# 启动Gateway(前台运行,方便观察日志)

hermes gateway

# 或者后台运行

nohup hermes gateway > /tmp/hermes-gateway.log 2>&1 &

# 确认Gateway已启动

curl -s [链接]

# 预期输出: {"status":"ok"}

防火墙配置

如果服务器有防火墙,需要开放9119端口:

# 阿里云安全组:在控制台添加入方向规则 TCP 9119

# 腾讯云安全组:同上

# 服务器本地防火墙(如果有)

sudo ufw allow 9119/tcp # Ubuntu/Debian

sudo firewall-cmd --add-port=9119/tcp --permanent # CentOS/Rocky

安全提醒:强烈建议配置HTTPS反向代理(Nginx/Caddy)来加密WebSocket流量,而不是直接暴露HTTP端口到公网。下面的"安全加固"章节会详细说明。

第二步:在桌面App中连接远程Gateway

安装桌面App

从 hermes-agent.nousresearch.com/desktop 下载对应平台的安装包。

安装完成后启动Hermes Desktop App。

配置远程连接

  1. 打开桌面App
  2. 点击左下角 设置(Settings) 图标
  3. 选择 Gateway 标签页
  4. Remote Connection 区域:
  • Remote URL:填入 [链接] [链接]
  • 认证方式
  • 如果用用户名密码:填写Username和Password
  • 如果用OAuth:点击Sign In跳转浏览器完成OAuth流程

连接成功后,状态栏会显示绿色的网关连接图标。现在你在聊天窗口发送的每一条消息,都会在远程服务器上执行。

验证连接

发送一条测试消息:

列出当前服务器上的 /home 目录内容

如果返回的是服务器上的目录列表(而不是你笔记本上的),说明远程连接成功。

你也可以在服务器上确认:

# 在服务器上查看活跃的WebSocket连接

ss -tnp | grep 9119

# 应该能看到来自你笔记本IP的连接

第三步:多Profile并发会话(杀手级功能)

v0.16支持在一个桌面App窗口中同时运行多个Profile,每个Profile可以连接不同的远程Gateway

场景举例

假设你有两台服务器:

  • Dev服务器(192.168.1.100):跑开发相关的Agent,有GitHub Token和代码库访问权限
  • Ops服务器(192.168.1.200):跑运维Agent,有K8s集群管理权限和监控API Key

你可以创建两个Profile:

# Profile 1: dev

hermes profile create dev

hermes profile use dev

hermes config set gateway.bind "192.168.1.100:9119"

# Profile 2: ops

hermes profile create ops

hermes profile use ops

hermes config set gateway.bind "192.168.1.200:9119"

在桌面App中,点击左上角的Profile切换器,可以在两个Profile之间无缝切换。每个Profile有独立的会话列表、Skills和Cron任务。

更强大的是跨Profile @session链接——你可以在Profile A的对话中直接引用Profile B的会话上下文。

第四步:安全加固(生产环境必做)

4.1 配置HTTPS反向代理(Nginx)

直接暴露HTTP端口到公网是危险的。使用Nginx做SSL终止:

# /etc/nginx/sites-available/hermes-gateway

server {

    listen 443 ssl;

    server_name hermes.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/hermes.yourdomain.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/hermes.yourdomain.com/privkey.pem;

    location / {

        proxy_pass [链接]

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 86400; # WebSocket长连接

    }

}

配置好后,桌面App的Remote URL改为 `[链接]

多Profile并发架构:三个业务场景共享一台服务器▲ 多Profile并发架构:三个业务场景共享一台服务器

4.2 使用OAuth替代用户名密码

对于团队使用场景,OAuth/OIDC比静态用户名密码更安全:

gateway:

  auth:

    oidc:

      issuer: "[链接]"

      client_id: "你的Google OAuth Client ID"

      client_secret: "你的Google OAuth Client Secret"

      redirect_uri: "[链接]"

支持的OAuth Provider包括:Google、GitHub、Microsoft、以及任何标准OIDC Provider(如Authelia、Authentik、Keycloak)。

4.3 限制访问IP

在生产环境中,建议通过防火墙或Nginx限制可访问Gateway的IP范围:

# 只允许公司VPN网段访问

allow 10.0.0.0/8;

deny all;

4.4 使用Docker部署(推荐)

Docker部署可以进一步隔离环境:

docker run -d \

  --name hermes-gateway \

  -p 9119:9119 \

  -v ~/.hermes:/home/hermes/.hermes \

  -e HERMES_GATEWAY_BIND=0.0.0.0 \

  -e HERMES_GATEWAY_PORT=9119 \

  -e HERMES_DASHBOARD_INSECURE=1 \

  nousresearch/hermes-agent:latest

注意:HERMES_DASHBOARD_INSECURE=1 是v0.15.1引入的显式环境变量,替代了之前从bind host自动推断--insecure的行为。如果你不需要Dashboard的loopback认证保护,设置这个变量。

踩坑与排障

坑1:连接后无响应或立即断开

症状:桌面App显示"Connected"但发送消息后无响应,或几秒后断开。

原因:通常是WebSocket升级失败。Nginx配置中缺少WebSocket相关的proxy_set_header。

解决:确保Nginx配置包含这三行:

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

坑2:`hermes gateway` 启动报 "bind: address already in use"

症状:端口被占用。

解决

# 查看谁占用了端口

ss -tlnp | grep 9119

# 杀掉旧进程或换端口

hermes config set gateway.port 9120

坑3:Dashboard无限重载(v0.15.0的已知Bug,v0.15.1已修复)

症状:在Docker或loopback模式下,Dashboard页面无限刷新。

解决:升级到v0.15.1+。如果暂时无法升级,在Docker中设置 HERMES_DASHBOARD_INSECURE=1

坑4:MCP Server在Docker中无法启动

症状:配置了MCP Server,但在Docker容器中报"command not found"。

原因:v0.15.0中MCP裸命令(npx/node/npm)的PATH解析有问题。

解决:升级到v0.15.1+(已在 /usr/local/bin 中正确解析)。或者在MCP配置中使用绝对路径:

{

  "mcpServers": {

    "filesystem": {

      "command": "/usr/local/bin/npx",

      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"]

    }

  }

}

坑5:远程Gateway连接后,文件操作在本地而非服务器执行

症状:你期望ls /opt返回服务器的目录,但返回的是你笔记本的目录。

原因:你可能没有真正连上远程Gateway,而是在本地模式下运行。检查桌面App左下角的状态指示器——应该显示绿色的远程连接图标和服务器地址。

验证方法:在聊天中发送 运行 hostname 命令,返回的应该是服务器的主机名。

坑6:`hermes desktop` 命令在服务器上找不到

症状bash: hermes: command not found

原因:服务器上可能只装了hermes-agent的gateway组件,没有完整安装。

解决

# 完整安装

pip install hermes-agent[all]

# 或至少安装desktop相关的额外依赖

pip install hermes-agent[desktop]

`/undo` 命令:远程会话的后悔药

v0.16新引入的 /undo 命令在远程场景下特别有用——网络不稳定时消息可能乱序,或者你发错了指令:

/undo # 撤销上一轮对话

/undo 3 # 撤销最近3轮对话

/undo会备份被撤销的消息,预填你的最后一条消息方便你修改后重发,然后软删除中间的回合。它在CLI、TUI、桌面App和所有消息平台(Telegram、Discord等)上都可用。

高级用法:多Gateway并发

v0.16支持同时运行多个Gateway实例(每个Profile一个),这在以下场景中非常有用:

# 在服务器上同时启动多个Gateway

hermes profile use dev

hermes gateway --port 9119 &

hermes profile use ops

hermes gateway --port 9120 &

hermes profile use staging

hermes gateway --port 9121 &

然后在桌面App中为每个Profile配置不同的Remote URL,实现真正的多Agent并发工作。

实战案例:搭建"一人公司AI中控台"

下面是一个完整的实战场景——用远程Gateway构建一个AI创业者的日常工作中控台。

场景设定

你是一个独立开发者,维护着3个项目:

  • 公众号内容流水线:每天自动产出AI创业内参文章
  • 客户项目:一个Next.js全栈应用的持续迭代
  • 副业SaaS:一个小型API服务,跑在K8s集群上

远程网关排障清单:6项关键检查点▲ 远程网关排障清单:6项关键检查点

服务器端配置

在阿里云ECS(4核16G,Ubuntu 22.04)上:

# 创建三个Profile,对应三个工作场景

hermes profile create neican # 公众号内容

hermes profile create client # 客户项目

hermes profile create saas # 副业SaaS

# 为每个Profile配置不同的Skills和API Key

hermes profile use neican

hermes skill install ai-neican-hotspot

hermes skill install wechat-public-account-draft

# 配置DeepSeek API Key...

hermes profile use client

hermes skill install nextjs-deploy

# 配置Vercel Token和GitHub Token...

hermes profile use saas

# 配置K8s kubeconfig...

启动多Gateway

# 启动三个Gateway实例,每个监听不同端口

hermes profile use neican

nohup hermes gateway --port 9119 > /tmp/gw-neican.log 2>&1 &

hermes profile use client

nohup hermes gateway --port 9120 > /tmp/gw-client.log 2>&1 &

hermes profile use saas

nohup hermes gateway --port 9121 > /tmp/gw-saas.log 2>&1 &

# 验证三个Gateway都在运行

curl -s [链接] && echo " neican OK"

curl -s [链接] && echo " client OK"

curl -s [链接] && echo " saas OK"

桌面端配置

在你的MacBook上打开Hermes Desktop App,添加三个Profile:

ProfileRemote URL用途
内容工厂`[链接]公众号写作、热点监控
客户开发`[链接]代码审查、部署
SaaS运维`[链接]K8s管理、日志分析

现在你在一个桌面App窗口里可以随时切换三个工作场景,无需SSH、无需切换终端、无需记住每台机器的IP。

一天的工作流

  • 09:00:切换到"内容工厂"Profile → 检查昨晚Cron产出的文章 → 审核通过直接发布
  • 10:30:切换到"客户开发"Profile → 让Agent审查昨晚的PR → 自动生成Review意见
  • 14:00:在"SaaS运维"Profile中收到告警 → Agent自动分析日志定位问题 → 一键回滚
  • 17:00:回到"内容工厂"Profile → 让Agent分析当日阅读数据 → 生成次日选题建议

所有这些操作都在同一个桌面App里完成,Chat历史按Profile独立保存,互不干扰。

Web Dashboard:远程管理面板

v0.16还为Gateway配备了一个完整的Web管理面板。在服务器上运行:

hermes dashboard

# 默认监听 [链接]

通过Nginx反向代理暴露后,你可以在浏览器中访问Dashboard。它提供了:

  • MCP Catalog:可视化启用/禁用MCP Server,无需手动编辑JSON
  • Credentials管理:统一管理所有API Key,支持加密存储
  • Webhooks & Hooks:在浏览器中创建和管理Webhook
  • Memory配置:调整Agent的持久记忆设置
  • Messaging Channels:配置Telegram/Discord/Slack等消息平台
  • System监控:Check-before-update、Debug Share一键导出日志

Dashboard和桌面App可以同时使用——Dashboard做管理配置,桌面App做日常交互。两者共享同一份配置和会话数据。

常见问题(FAQ)

Q1:远程连接和本地模式能共存吗?

可以。桌面App支持同时配置多个Profile,可以有的Profile连远程,有的Profile跑本地。切换Profile时自动切换连接目标。

Q2:网络断了会怎样?

桌面App会自动尝试重连。WebSocket断开后,App会显示"Reconnecting..."状态,恢复后继续之前的会话。v0.16还支持在Gateway重连时重新签发OAuth WebSocket票据,无需重新登录。

Q3:文件拖拽上传传到哪了?

传到远程服务器上Hermes的工作目录。你拖一个本地PDF到聊天窗口,桌面App会把文件通过WebSocket传到服务器,服务器上的Agent再处理它。

Q4:远程Gateway能跑Cron任务吗?

,而且这正是远程网关最强大的用法之一。Cron任务在服务器上运行,不受你笔记本是否在线的限制。你可以通过桌面App管理Cron(创建、暂停、删除),但Cron的执行完全在服务器端。

Q5:多个桌面App能同时连一个Gateway吗?

。v0.16支持并发多Profile会话。你和同事可以各自打开桌面App,用不同的Profile(或OAuth账号)连接同一台Gateway服务器。会话隔离,互不影响。

Q6:我能不能用手机/iPad连远程Gateway?

目前Hermes官方只发布了桌面App(macOS/Windows/Linux)。但Gateway支持WebSocket协议,理论上可以通过Web Dashboard的Chat标签页(嵌入TUI)在移动浏览器中使用——体验不如桌面App,但紧急情况下可用。

Q7:Gateway如何做性能监控?

# 在服务器上查看Gateway的WebSocket连接数

ss -tnp | grep 9119 | wc -l

# 查看Gateway进程的资源占用

ps aux | grep "hermes gateway" | grep -v grep

# 查看Gateway日志

tail -f /tmp/hermes-gateway.log

小结

Hermes v0.16的远程网关功能解决了一个核心痛点:AI Agent的计算应该在服务器上,但交互体验应该在桌面上。对于AI创业者来说,这意味着:

  1. 成本优化:服务器跑重型模型,笔记本只做展示层,省电省资源
  2. 安全隔离:API Key和敏感配置只存在于服务器上,笔记本丢失不影响
  3. 团队协作:多人可以通过各自的桌面App连接同一台服务器(配合OAuth和多Profile)
  4. 运维简化:一个hermes gateway命令就能把Agent暴露为远程服务,不需要额外的RPC框架
  5. 多场景并行:一台服务器同时跑多个Gateway实例,每个实例对应一个业务场景

动手试试吧——从hermes gateway开始,十分钟内你就能在笔记本上操控服务器里的AI Agent。从单Gateway到多Profile并发,从内容创作到SaaS运维,AI创业者终于有了一个"服务端跑重型Agent,客户端轻薄交互"的理想架构。

风险提示:远程网关目前仍处于快速迭代期(v0.16于2026年6月5日发布,截至本文撰写仅过去4天),API和配置项可能在未来版本中变化。生产环境部署前请在测试环境验证。暴露Gateway到公网时务必配置HTTPS和认证,切勿裸奔。Docker部署时特别注意HERMES_DASHBOARD_INSECURE=1是显式开关,不会自动从bind host推断。


#AI创业 #HermesAgent #Agent工坊 #远程开发 #一人公司

本文由AI辅助创作,经人工审核编辑发布