Hermes Agent源码解析第二篇:入口与CLI从hermes命令到交互式REPL详解
解析HermesAgent启动链路:Shell脚本定位环境,引导层修复Windows编码,命令行界面类管理配置、技能与命令。配置采用硬编码、用户YAML配置和点env三层合并;技能通过用户消息注入以保持缓存稳定性;皮肤引擎支持纯数据定制功能。
Hermes Agent 源码解析(二):入口与 CLI —— 从 hermes 命令到交互式 REPL
如果你正在做一个自己的 CLI 工具,Hermes 的启动链路里有很多值得借鉴的设计——尤其是它的配置三层合并和技能注入缓存优化。
启动链路
1. hermes shell 脚本
仓库根目录的 hermes 是一个 shell 脚本(而非 Python 文件)。它负责:
- 定位项目根目录下的
.venv - 设置
PYTHONPATH - 给
cli.py传递命令行参数
2. hermes_bootstrap.py —— Windows 兼容层
这个文件只有 129 行,但设计精妙:
# 在 Windows 上设置 PYTHONUTF8=1 和 PYTHONIOENCODING=utf-8
# 修复 cp1252 编码下 print("café") 的 UnicodeEncodeError
# 同时对子进程(execute_code sandbox、delegation children)生效
它的设计原则是:POSIX 上什么都不做,因为 99% 的 Linux/macOS 已经是 UTF-8 默认环境。
3. cli.py 的 HermesCLI 类
CLI 入口在 cli.py,行数 ~14,442。核心结构:
HermesCLI.__init__()
├── Rich 渲染 Banner(ASCII art 标题)
├── 加载配置 load_cli_config()
├── 初始化皮肤引擎
└── 扫描技能目录
HermesCLI.run()
├── 启动输入循环
├── prompt_toolkit 管理输入区域
├── KawaiiSpinner 管理 API 调用动画
└── process_command() 处理斜杠命令
配置加载链路
load_cli_config()
├── 硬编码 DEFAULT_CONFIG(hermes_cli/config.py)
├── 读取 ~/.hermes/config.yaml(用户设置)
├── 读取 ~/.hermes/.env(仅 API 密钥)
├── deep-merge 三层合并
└── 返回完整配置字典
斜杠命令注册中心
所有斜杠命令集中定义在 hermes_cli/commands.py 的 COMMAND_REGISTRY 列表中:
CommandDef("mycommand", "描述文字", "Session", aliases=("mc",), args_hint="[arg]"),
每个 CommandDef 包含:
name— 规范名(无斜杠)description— 描述category— 分类(Session / Configuration / Tools & Skills / Info / Exit)aliases— 别名元组cli_only/gateway_only— 平台限制
设计亮点:这个注册中心是单点事实来源(Single Source of Truth)。所有下游消费者自动派生:
| 消费者 | 自动生成内容 |
|---|---|
| CLI | process_command() 派发 |
| Gateway | GATEWAY_KNOWN_COMMANDS frozenset |
| 微信 | BotCommand 菜单列表 |
| Slack | /hermes 子命令路由 |
| 自动补全 | SlashCommandCompleter 的候选项 |
这意味着添加一个新命令只需要在 COMMAND_REGISTRY 加一行,再在 process_command() 加一个 handler。
Skills 注入策略
技能文件的加载不嵌入 system prompt,而是以 user message 注入:
# agent/skill_commands.py
# 扫描 ~/.hermes/skills/,注入为 user message
# 这样不破坏 prompt cache 的稳定性
这是一个非常重要的缓存优化 —— system prompt 变了会清空 API 侧的 prefix cache,而 user message 变化不影响。
Skin 皮肤引擎
hermes_cli/skin_engine.py 提供纯数据驱动的视觉定制:
# 皮肤是纯 YAML 数据,无需改代码
# 内置 4 个皮肤:default(金色)、ares(深红)、mono(灰度)、slate(冷蓝)
# 用户可在 ~/.hermes/skins/ 放自定义 .yaml
皮肤控制:Banner 颜色、Spinner 表情/动词、工具输出前缀、品牌名称、提示符符号等。
下一篇进入最核心的部分 —— AIAgent 类的 run_conversation() 主循环。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
天学会AI应用开发上下文与RAG阶段性总结
系统梳理了AI应用开发中的上下文与RAG核心概念。搭建Python3 10开发环境后,通过提示词工程管理历史对话,利用截断、摘要提取及离线大模型压缩上下文。RAG采用加载文档、分块、向量化、存入FAISS或Chroma库、检索五个步骤,中文场景推荐BGE-small嵌入模型,实战证明离线检索有效。
Yank Note系列14:如何与AI协作写文章
YankNote3 92 1发布,新增“审阅批注”和“编辑装订线”扩展,聚焦AI写作的人机协作循环。审阅批注将反馈绑定到选中文本,编辑装订线高亮显示修改行,帮助人看清AI改动。同时升级Markdown-it至14 3 0,优化中日韩文本渲染。
一文读懂MCP:让AI大模型万能插拔协议
MCP(模型上下文协议)由Anthropic提出,为AI大模型提供通用接口标准,解决工具调用碎片化问题。采用Host Client Server架构,支持动态发现工具,通过stdio或HTTP通信,实现工具即插即用、跨语言调用和统一对接规范。
BeeWeave开源:为AI Agent打造越用越懂你的知识创作台
BeeWeave是一个Agent原生的知识创作台,通过workbench和vault双层结构实现素材获取、内容创作、知识沉淀与上下文复用的持续闭环。它支持多Agent共用同一套知识库,内置41个Skills,采用MIT开源协议,旨在解决跨会话知识丢失问题。
AI闭环工程师自动推进工程任务
LoopEngineer是一种将AI嵌入可执行、可验证、可持续迭代的工作循环中的工程协作方式。通过触发器、上下文、工具和验证机制,AI在循环中自动分析、执行、验证并调整,直至任务完成或需人工介入,实现复杂任务的可观察、可审计、可批准的分段自动化。
- 热门数据榜
相关攻略
2026-07-12 15:04
2026-07-12 15:04
2026-07-12 15:04
2026-07-12 15:03
2026-07-12 15:03
2026-07-12 15:03
2026-07-12 15:03
2026-07-12 15:03
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

