架构

本页面是 Hermes Agent 内部机制的顶层地图。用它来在代码库中定位自己,然后深入特定子系统的文档了解实现细节。

系统概览

┌─────────────────────────────────────────────────────────────────────┐
│                        入口点                                         │
│                                                                      │
│  CLI (cli.py)    Gateway (gateway/run.py)    ACP (acp_adapter/)     │
│  批处理运行器      API 服务器                  Python 库              │
└──────────┬──────────────┬───────────────────────┬───────────────────┘
           │              │                       │
           ▼              ▼                       ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      AIAgent (run_agent.py)                         │
│                                                                     │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐               │
│  │ 提示词       │  │ 提供商       │  │ 工具         │               │
│  │ 构建器       │  │ 解析         │  │ 分派         │               │
│  │ (prompt_     │  │ (runtime_    │  │ (model_      │               │
│  │  builder.py) │  │  provider.py)│  │  tools.py)   │               │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘               │
│         │                 │                 │                       │
│  ┌──────┴───────┐  ┌──────┴───────┐  ┌──────┴───────┐               │
│  │ 压缩与缓存   │  │ 3 种 API 模式│  │ 工具注册表   │               │
│  │              │  │ chat_compl.  │  │ (registry.py)│               │
│  │              │  │ codex_resp.  │  │ 70+ 工具     │               │
│  │              │  │ anthropic    │  │ 28 个工具集  │               │
│  └──────────────┘  └──────────────┘  └──────────────┘               │
└─────────┴─────────────────┴─────────────────┴───────────────────────┘
           │                                    │
           ▼                                    ▼
┌───────────────────┐              ┌──────────────────────┐
│ 会话存储          │              │ 工具后端             │
│ (SQLite + FTS5)   │              │ 终端(7 种后端)     │
│ hermes_state.py   │              │ 浏览器(5 种后端)   │
│ gateway/session.py│              │ 网页(4 种后端)     │
└───────────────────┘              │ MCP(动态)          │
                                   │ 文件、视觉等         │
                                   └──────────────────────┘

目录结构

hermes-agent/
├── run_agent.py              # AIAgent——核心对话循环(大文件)
├── cli.py                    # HermesCLI——交互式终端 UI(大文件)
├── model_tools.py            # 工具发现、模式收集、分派
├── toolsets.py               # 工具分组和平台预设
├── hermes_state.py           # 使用 FTS5 的 SQLite 会话/状态数据库
├── hermes_constants.py       # HERMES_HOME,配置文件感知路径
├── batch_runner.py           # 批处理轨迹生成

├── agent/                    # 智能体内部机制
│   ├── prompt_builder.py     # 系统提示词组装
│   ├── context_engine.py     # ContextEngine ABC(可插拔)
│   ├── context_compressor.py # 默认引擎——有损摘要
│   ├── prompt_caching.py     # Anthropic 提示缓存
│   ├── auxiliary_client.py   # 用于侧边任务的辅助 LLM(视觉、摘要)
│   ├── model_metadata.py     # 模型上下文长度、令牌估算
│   ├── models_dev.py         # models.dev 注册表集成
│   ├── anthropic_adapter.py  # Anthropic Messages API 格式转换
│   ├── display.py            # KawaiiSpinner、工具预览格式化
│   ├── skill_commands.py     # 技能斜杠命令
│   ├── memory_manager.py     # 内存管理器编排
│   ├── memory_provider.py    # 内存提供器 ABC
│   └── trajectory.py         # 轨迹保存辅助工具

├── hermes_cli/               # CLI 子命令和设置
│   ├── main.py               # 入口点——所有 `hermes` 子命令(大文件)
│   ├── config.py             # DEFAULT_CONFIG、OPTIONAL_ENV_VARS、迁移
│   ├── commands.py           # COMMAND_REGISTRY——中央斜杠命令定义
│   ├── auth.py               # PROVIDER_REGISTRY、凭据解析
│   ├── runtime_provider.py   # 提供商 → api_mode + 凭据
│   ├── models.py             # 模型目录、提供商模型列表
│   ├── model_switch.py       # /model 命令逻辑(CLI + 网关共享)
│   ├── setup.py              # 交互式设置向导(大文件)
│   ├── skin_engine.py        # CLI 主题引擎
│   ├── skills_config.py      # hermes skills——按平台启用/禁用
│   ├── skills_hub.py         # /skills 斜杠命令
│   ├── tools_config.py       # hermes tools——按平台启用/禁用
│   ├── plugins.py            # PluginManager——发现、加载、钩子
│   ├── callbacks.py          # 终端回调(clarify、sudo、approval)
│   └── gateway.py            # hermes gateway start/stop

├── tools/                    # 工具实现(每个工具一个文件)
│   ├── registry.py           # 中央工具注册表
│   ├── approval.py           # 危险命令检测
│   ├── terminal_tool.py      # 终端编排
│   ├── process_registry.py   # 后台进程管理
│   ├── file_tools.py         # read_file、write_file、patch、search_files
│   ├── web_tools.py          # web_search、web_extract
│   ├── browser_tool.py       # 10 个浏览器自动化工具
│   ├── code_execution_tool.py # execute_code 沙箱
│   ├── delegate_tool.py      # 子智能体委托
│   ├── mcp_tool.py           # MCP 客户端(大文件)
│   ├── credential_files.py   # 基于文件的凭据传递
│   ├── env_passthrough.py    # 用于沙箱的环境变量传递
│   ├── ansi_strip.py         # ANSI 转义序列剥离
│   └── environments/         # 终端后端(local、docker、ssh、modal、daytona、singularity)

├── gateway/                  # 消息平台网关
│   ├── run.py                # GatewayRunner——消息分派(大文件)
│   ├── session.py            # SessionStore——对话持久化
│   ├── delivery.py           # 出站消息投递
│   ├── pairing.py            # DM 配对授权
│   ├── hooks.py              # 钩子发现和生命周期事件
│   ├── mirror.py             # 跨会话消息镜像
│   ├── status.py             # 令牌锁、配置文件作用域进程跟踪
│   ├── builtin_hooks/        # 始终注册的钩子的扩展点(未发布)
│   └── platforms/            # 20 个适配器:telegram、discord、slack、whatsapp、
│                             #   signal、matrix、mattermost、email、sms、
│                             #   dingtalk、feishu、wecom、wecom_callback、weixin、
│                             #   bluebubbles、qqbot、homeassistant、webhook、api_server、
│                             #   yuanbao

├── acp_adapter/              # ACP 服务器(VS Code / Zed / JetBrains)
├── cron/                     # 调度器(jobs.py、scheduler.py)
├── plugins/memory/           # 内存提供器插件
├── plugins/context_engine/   # 上下文引擎插件
├── skills/                   # 捆绑的技能(始终可用)
├── optional-skills/          # 官方可选技能(需显式安装)
├── website/                  # Docusaurus 文档站点
└── tests/                    # Pytest 测试套件(~3,000+ 个测试)

数据流

CLI 会话

用户输入 → HermesCLI.process_input()
  → AIAgent.run_conversation()
    → prompt_builder.build_system_prompt()
    → runtime_provider.resolve_runtime_provider()
    → API 调用(chat_completions / codex_responses / anthropic_messages)
    → 有 tool_calls?→ model_tools.handle_function_call() → 循环
    → 最终响应 → 显示 → 保存到 SessionDB

网关消息

平台事件 → Adapter.on_message() → MessageEvent
  → GatewayRunner._handle_message()
    → 授权用户
    → 解析会话密钥
    → 使用会话历史创建 AIAgent
    → AIAgent.run_conversation()
    → 通过适配器投递响应

Cron 任务

调度器触发 → 从 jobs.json 加载到期的任务
  → 创建新的 AIAgent(无历史)
  → 注入附加的技能作为上下文
  → 运行任务提示词
  → 将响应投递到目标平台
  → 更新任务状态和 next_run

推荐阅读顺序

如果您是代码库的新手:

  1. 本页面 — 定位自己
  2. 智能体循环内部机制 — AIAgent 的工作原理
  3. 提示组装 — 系统提示词构建
  4. 提供商运行时解析 — 如何选择提供商
  5. 添加提供商 — 添加新提供商的实践指南
  6. 工具运行时 — 工具注册表、分派、环境
  7. 会话存储 — SQLite 模式、FTS5、会话沿袭
  8. 网关内部机制 — 消息平台网关
  9. 上下文压缩与提示缓存 — 压缩和缓存
  10. ACP 内部机制 — IDE 集成

主要子系统

智能体循环

同步编排引擎(run_agent.py 中的 AIAgent)。处理提供商选择、提示构建、工具执行、重试、回退、回调、压缩和持久化。支持三种 API 模式以适应不同的提供商后端。

智能体循环内部机制

提示系统

在对话生命周期中进行提示构建和维护:

  • prompt_builder.py — 从以下内容组装系统提示词:个性(SOUL.md)、内存(MEMORY.md、USER.md)、技能、上下文文件(AGENTS.md、.hermes.md)、工具使用指引和模型特定指令
  • prompt_caching.py — 应用 Anthropic 缓存断点以实现前缀缓存
  • context_compressor.py — 当上下文超过阈值时总结中间对话轮次

提示组装上下文压缩与提示缓存

提供商解析

供 CLI、网关、cron、ACP 和辅助调用使用的共享运行时解析器。将 (provider, model) 元组映射到 (api_mode, api_key, base_url)。处理 18+ 个提供商、OAuth 流程、凭据池和别名解析。

提供商运行时解析

工具系统

中央工具注册表(tools/registry.py),拥有 70+ 个注册工具,分布在约 28 个工具集中。每个工具文件在导入时自动注册。注册表处理模式收集、分派、可用性检查和错误包装。终端工具支持 7 种后端(本地、Docker、SSH、Daytona、Modal、Singularity、Vercel Sandbox)。

工具运行时

会话持久化

基于 SQLite 的会话存储,支持 FTS5 全文搜索。会话具有沿袭跟踪(压缩后的父/子关系)、按平台隔离以及具有争用处理的原子写入。

会话存储

消息网关

长期运行进程,配备 20 个平台适配器、统一会话路由、用户授权(允许列表 + DM 配对)、斜杠命令分派、钩子系统、cron 滴答和后台维护。

网关内部机制

插件系统

三个发现源:~/.hermes/plugins/(用户)、.hermes/plugins/(项目)和 pip 入口点。插件通过上下文 API 注册工具、钩子和 CLI 命令。存在两种专用插件类型:内存提供器(plugins/memory/)和上下文引擎(plugins/context_engine/)。两者都是单选的——一次只能有一个激活,通过 hermes pluginsconfig.yaml 配置。

插件指南内存提供器插件

Cron

一流的智能体任务(而非 shell 任务)。任务存储在 JSON 中,支持多种调度格式,可以附加技能和脚本,并投递到任何平台。

Cron 内部机制

ACP 集成

通过 stdio/JSON-RPC 将 Hermes 暴露为编辑器原生智能体,适用于 VS Code、Zed 和 JetBrains。

ACP 内部机制

轨迹

从智能体会话生成 ShareGPT 格式的轨迹,用于训练数据生成。

轨迹与训练格式

设计原则

原则实践含义
提示稳定性系统提示词在对话中不改变。除显式用户操作(/model)外,无破坏缓存的变更。
可观察的执行每个工具调用通过回调对用户可见。CLI(旋转指示器)和网关(聊天消息)中的进度更新。
可中断性API 调用和工具执行可以通过用户输入或信号在飞行中取消。
平台无关的核心一个 AIAgent 类服务于 CLI、网关、ACP、批处理和 API 服务器。平台差异存在于入口点,而非智能体。
松耦合可选子系统(MCP、插件、内存提供器、RL 环境)使用注册表模式和 check_fn 门控,而非硬依赖。
配置文件隔离每个配置文件(hermes -p <name>)拥有自己的 HERMES_HOME、配置、内存、会话和网关 PID。多个配置文件可并发运行。

文件依赖链

tools/registry.py  (无依赖——被所有工具文件导入)

tools/*.py  (每个都在导入时调用 registry.register())

model_tools.py  (导入 tools/registry + 触发工具发现)

run_agent.py、cli.py、batch_runner.py、environments/

这个链意味着工具注册发生在导入时,在任何智能体实例创建之前。任何带有顶层 registry.register() 调用的 tools/*.py 文件都会被自动发现——无需手动导入列表。