Technical Guide
05. CLI 入口:hermes 命令怎么启动一次会话
从 hermes 命令、hermes_cli 和 cli.py 看一次终端会话如何启动。
这篇解决什么问题
你在终端输入:
hermes
或者:
hermes chat -q "hello"
源码里发生了什么?
这一篇先不追到模型调用,只看入口。
CLI 有两类场景
Hermes CLI 大致分两类:
交互式会话:hermes
一次性命令:hermes chat -q "..."
还有大量管理命令:
hermes model
hermes config
hermes auth
hermes tools
hermes cron
hermes gateway
hermes profile
这些命令主要在 hermes_cli/ 下分发。
关键文件
先看这些:
cli.py 交互式 CLI/TUI 相关逻辑
hermes_cli/main.py CLI 命令入口和 argparse 分发
hermes_cli/commands.py slash command 注册
run_agent.py AIAgent 主体入口
不同版本里包装方式可能略有变化,但这几个文件是入口阅读的主线。
交互式 CLI 做什么
交互式 CLI 不只是 input()。
它要处理:
- 多行输入;
- slash command;
- 会话恢复;
- 中断和重试;
- 工具输出展示;
- 流式回复;
- 模型/工具/配置状态;
- 和
AIAgent的交互。
所以 CLI 入口读起来会比普通命令行复杂。
slash command 为什么单独看
Hermes 有很多 / 命令,比如:
/new
/model
/tools
/skills
/cron
/status
/reset
这些不是模型理解出来的,而是 CLI/Gateway 层先识别,然后走命令处理逻辑。
源码里 hermes_cli/commands.py 是一个重要注册中心。它让 CLI 帮助、自动补全、Gateway 命令映射能共享同一套命令定义。
一次 CLI 对话的简化路径
可以先按这个路径理解:
用户输入
→ CLI 读取输入
→ 判断是不是 slash command
→ 如果是命令,走本地命令处理
→ 如果是普通消息,交给 AIAgent
→ AIAgent.run_conversation
→ CLI 展示结果
真正复杂的地方在 AIAgent.run_conversation。
CLI 入口只负责把“人和终端”这件事处理好。
读源码时注意
不要把 CLI 命令和模型工具混在一起。
/model、/tools 这类 slash command 是用户直接控制 Hermes。
terminal、read_file、web_search 这类 tool 是模型在 Agent loop 里调用的能力。
两者都叫“命令/工具”,但层级不同。
下一篇看什么
下一篇进入核心:Agent 主循环。
这是 Hermes 最值得读的一篇。