Hermes Agent 源码解析(一):总览 —— 一个自进化 AI Agent 的骨架
Nous Research 出品的 Hermes Agent 是当前最活跃的开源 AI Agent 项目之一。从本篇开始,我们将用 12 篇文章逐层拆解它的源码架构。
想象一下这个场景:你在终端敲下 hermes deploy my-app,Agent 自动打开浏览器查文档、写 deploy 脚本、提 PR、审代码、合并、发 Slack 通知——全程没碰键盘。这不是 demo,这是 Hermes Agent 日常能做的事。
Hermes Agent 不是一个玩具 Agent。它是一个生产级的自主 AI 系统,核心特性可以概括为一句话:
能自我进化的 AI Agent —— 从经验中创建技能、在使用中改进技能、跨会话记忆用户画像。
它在一条指令中同时涵盖了:
• CLI 交互(类 Claude Code 的终端界面) • 多平台消息网关(Telegram / Discord / Slack / 微信 / 飞书……) • TUI 双进程架构(React Ink + Python JSON-RPC) • 定时任务(cron 调度器) • 多 Agent 协作(Kanban 看板 + 委派机制) • 可插拔推理后端(支持 10+ provider 插件)
项目规模
以一个快速的代码量统计来感受一下:
run_agent.pycli.py (14442 行)、model_tools.py、toolsets.py | ||
registry 自注册 | ||
模块全景图

手机端查看建议点击图片放大。完整架构关系图见 架构图-Mermaid.md。
依赖链
这是整个系统的核心依赖关系,从 AGENTS.md 中可以看到:
tools/registry.py ← 纯注册中心,无外部依赖 ↑tools/*.py ← 每个工具在模块顶层调用 registry.register() ↑model_tools.py ← 导入所有 tool 模块触发自动发现 ↑run_agent.py / cli.py / batch_runner.py / environments/这条链意味着:每个工具文件在 import 时自动向全局注册中心声明自己,上层只需要 import model_tools 就能拿到所有工具的完整索引。
一次对话的完整链路
这篇系列想回答一个核心问题:"hermes" 回车之后到底发生了什么?
把 12 篇文章串起来,一次典型对话的路径是这样的:
用户输入 "帮我看一下这个文件" │ ▼01. CLI 层:cli.py 接到输入,包装成 user message │ (02 篇详讲) ▼02. Agent 主循环:AIAgent.run_conversation() 开始循环 │ (03 篇详讲) ├── 组装 system prompt(三层:stable + context + volatile) │ (10 篇讲记忆注入) ├── 加载已匹配的技能(user message 注入,不破坏 prefix cache) │ (09 篇讲 Skills) ├── 调用 LLM(provider 无关,统一 chat.completions API) │ (08 篇讲模型提供者插件) ├── LLM 返回 tool_calls → 派发给 tools/registry │ (04 篇讲工具系统、05 讲 Toolsets 过滤) └── 工具执行结果 → 追加到 messages → 继续循环 │ ▼03. 最终回复 → 返回给 CLI / Gateway / TUI │ (06 篇讲 Gateway 多平台分发,07 讲 TUI 双进程) ▼ 记忆同步 → SessionDB 存储 → Curator 惰性检查 (10 篇讲记忆,09 篇讲 Curator 技能管理)这 9 个子系统在一条指令中协同工作。12 篇文章逐层深入,每篇聚焦一个模块的源码细节。
12 篇文章路线图
cli.pyhermes_bootstrap.py | ||
run_agent.py | ||
tools/registry.pymodel_tools.py | ||
toolsets.py | ||
gateway/run.pygateway/platforms/ | ||
ui-tui/tui_gateway/ | ||
plugins/hermes_cli/plugins.py | ||
skills/agent/curator.py | ||
hermes_state.pyagent/memory_manager.py | ||
cron/tools/delegate_tool.py | ||
hermes_constants.pyhermes_cli/config.py |
欢迎一起讨论! 用 Hermes 部署过什么实际项目?它的多平台支持对你有用吗?留言聊聊。📢 关注我,第一时间收到更新推送。
下一篇我们从用户最直接的操作入手 —— 当你在终端输入 hermes 按下回车,发生了什么?
夜雨聆风