入口与启动流程
源码版本v2026.7.20
职责
把「一条 hermes 命令 / 一个网关消息」变成「内存里跑起来的 agent」。入口层刻意做得很薄——run_agent.py 只负责转发和 CLI 装配,真正的依赖注入在 agent_init.py。这样网关、TUI、CLI、ACP、cron 能共用同一套初始化路径。
关键文件
gateway main:22965— 网关进程入口main()AIAgent 类:400-497— 瘦入口类,__init__仅存参AIAgent.__init__ 转发:497-560— 注释明确写 "Forwarder — see agent.agent_init.init_agent"run_conversation 方法:6350—AIAgent.run_conversation实例方法,调用模块级 run_conversation:588CLI main:6434— CLI 入口init_agent:276-400— 依赖注入主函数_resolve_compression_threshold:93-127— 启动期配置解析示例hermes_bootstrap.py— 最早期的环境/路径引导(仓库根)
数据流
- 用户执行
hermes(CLI)或网关main()启动(run_agent.py:22965)。 - 进程经
hermes_bootstrap.py做路径/环境修正,进入CLI main:6434或网关循环。 - 构造
AIAgent:400实例,其__init__转发到init_agent:276。 init_agent解析 provider、toolsets、压缩阈值、自定义 provider extra_body 等,装配出可运行的 agent 对象。- 网关在
gateway/run.py的GatewayRunner里持有该 agent,把每条入站消息喂给run_conversation:588。
小结
入口层是「转发 + 装配」,不持业务逻辑。AIAgent 是瘦壳,init_agent 才是装配中心。理解这条链路后,后面的Agent 主循环就是「被喂消息后做什么」。