Hermes Agent 是由 Nous Research 开发的模块化 AI Agent 框架,核心目标是让用户在任意平台(Telegram、Discord、微信、企业微信、飞书等)上快速部署能够执行复杂任务的 AI 助手。
Hermes 的几个关键特点:
- 一个核心,多个入口:CLI 交互、消息网关、IDE 插件(VS Code/Zed)、定时任务,都调用同一套 AI Agent 核心
- 工具生态丰富:内置 70+ 工具,覆盖文件操作、终端操作、浏览器自动化、Web 搜索、MCP 协议等
- 平台无关:平台适配器(Gateway)和核心逻辑完全解耦,新增平台不需要修改核心代码
- 可观测、可中断:每一步工具调用用户都看得见,随时可以打断
目录结构:清晰的代码组织
Hermes Agent 的代码组织逻辑清晰,核心目录如下:
hermes/
├── agent/ # AI Agent 核心,所有入口共用
│ ├── run_agent.py # Agent 循环主体
│ ├── prompt_builder.py # Prompt 构建
│ └── context_compressor.py # 上下文压缩
├── cli/ # 命令行入口
│ ├── setup.py # 首次配置向导
│ ├── gateway.py # 网关启停
│ ├── tools.py # 工具管理
│ ├── skills.py # 技能管理
│ └── plugins.py # 插件管理
├── tools/ # 70+ 工具实现
│ ├── registry.py # 工具注册中心
│ ├── terminal_tool.py # 终端工具
│ ├── browser_tool.py # 浏览器工具
│ ├── web_tools.py # Web 工具
│ └── environments/ # 终端后端
├── gateway/ # 消息网关
│ ├── run.py # 分发逻辑
│ ├── session.py # 会话持久化
│ └── platforms/ # 20个平台适配器
├── acp_adapter/ # IDE 集成
├── cron/ # 定时任务调度
├── plugins/ # 插件系统
└── skills/ # 内置技能
这个结构的逻辑很清晰:tools/ 是工具仓库,gateway/ 是平台入口,agent/ 是大脑,cli/ 是入口包装。
核心子系统
Agent Loop — 大脑
Agent Loop 是 Hermes 的核心编排引擎,定义在 agent/run_agent.py 中。它的工作流程很直接:
- 接收用户消息
- 构建 prompt(从 SOUL.md、memory、skills、context 文件等组装)
- 选择 provider(OpenAI / Anthropic / 本地模型等)
- 调用 API
- 有工具调用?执行工具 → 循环直到没有
- 返回结果 → 持久化到 SessionDB
它是一个同步循环,不是异步的。这意味着每一步都能被用户看见和打断,出了问题也容易追踪。
Tool System — 工具生态
Hermes 内置了 70+ 工具,分属 28 个工具集。工具系统在启动时通过自注册模式自动发现——每个工具文件在 import 时会调用 registry.register(),不需要手动维护列表。
工具覆盖范围:
- 文件操作:读、写、搜索、补丁
- 终端操作:在本地/Docker/SSH/Modal 等 7 种后端上执行命令
- 浏览器自动化:10 个浏览器控制工具
- Web 搜索和提取
- 代码执行:沙箱化的 Python 执行
- 子 Agent 委托:把任务分发给独立进程
- MCP 协议:接入 Model Context Protocol 生态
Terminal Tool 支持的后端包括:本地、Docker 容器化隔离、SSH 远程机器、Daytona 云开发环境、Modal Serverless GPU、Singularity HPC 场景、Vercel Sandbox 临时沙箱。
Messaging Gateway — 平台无关的消息层
Gateway 是 Hermes 作为「聊天机器人」运行时的核心组件。它负责:
- 接收来自各个平台的消息(Telegram、Discord、Slack、WhatsApp、飞书、企业微信、邮件等共 20 个平台)
- 路由到对应的会话(Session)
- 调用 AI Agent 处理
- 把响应发回对应平台
Gateway 和核心 Agent 是完全解耦的。新增一个平台不需要修改 agent 代码,只需要写一个平台适配器,实现 on_message() 接口即可。
Session Persistence — 会话管理
Hermes 的会话存储基于 SQLite,底层实现了几项关键能力:
- FTS5 全文搜索:对话内容可以全文检索
- Lineage 追踪:会话有父/子关系,支持分叉和追溯
- 原子写入:高并发场景下不会丢数据
- 跨平台隔离:同一用户在不同平台有独立会话空间
简单说,你跟 Hermes 在 Telegram 的对话和 Discord 的对话是互相独立的,但底层共用同一套存储引擎。
设计原则
Hermes 的架构背后有 6 条明确的设计原则:
1. Prompt 稳定性
System Prompt 在一次对话中途不会改变。这意味着模型不会因为内部状态变化而突然"失忆"或"变性格",对话体验是稳定的。只有用户主动触发 /model 等命令才会改变配置。
2. 可观测执行
每个工具调用都会通过 callback 机制展示给用户。CLI 模式下有实时进度,Gateway 模式下会发中间消息。用户始终知道 Agent 在做什么。
3. 可中断
API 调用和工具执行都可以被用户输入或系统信号中断。这意味着你随时可以 Ctrl+C,不会出现"Agent 跑了我不知道干嘛等半天"的情况。
4. 平台无关核心
AI Agent 本身不依赖任何平台。CLI、Gateway、ACP、Batch、Cron 都可以调用同一个 Agent 实例。平台差异只在入口层,不在核心层。
5. 松耦合
MCP、Plugins、Memory Providers 这些子系统都是可选的,通过 registry 模式和 check_fn 门控来集成。不用就不加载,不会有多余依赖。
6. Profile 隔离
hermes -p 可以跑多个独立 Profile,每个 Profile 有自己的配置、内存、会话和 Gateway 进程。适合多用户或多场景隔离的场景。
适合谁来用
如果你符合以下任意一条,Hermes Agent 值得一试:
- 想快速在某个聊天平台(微信、Telegram、Discord)上搭一个能执行复杂任务的 AI 助手
- 已经有自己的工具生态,想接入一个灵活的 Agent 框架
- 需要一个能在多个平台统一管理会话的工具
- 对本地运行 AI Agent 有需求,不想把数据交给第三方
如果你只是需要一个简单的问答机器人,Hermes 可能偏重了。但如果你需要可编程的、能调用工具的、能在多个平台运行的 Agent,它是目前这个领域里架构最清晰、扩展性最强的选择之一。
