Technical Guide
19. 二开路线:想改一个能力时从哪里下手
把常见二开目标映射到 Hermes 源码目录,避免一上来改错层。
这篇解决什么问题
源码看懂一部分后,真正的问题是:想改一个功能时,该从哪里下手?
Hermes 的目录多,如果层级判断错,很容易在 Agent loop 里改工具,在 Gateway 里改模型,在 Skill 里硬塞本该属于配置的东西。
先按目标分类
想改 CLI 命令
看:
hermes_cli/main.py
hermes_cli/commands.py
cli.py
如果是 slash command,还要看 Gateway 是否也需要同步支持。
想改模型/provider
看:
agent/*_adapter.py
agent/chat_completion_helpers.py
agent/credential_pool.py
hermes_cli/auth*.py
hermes_cli/config.py
不要直接在业务逻辑里写死 provider。
想改系统提示词
看:
agent/system_prompt.py
agent/prompt_builder.py
项目里的 .hermes.md / AGENTS.md
skills/
memory
先判断这是全局规则、项目规则、Skill 流程,还是用户偏好。
想新增工具
看:
tools/registry.py
tools/<your_tool>.py
toolsets.py
model_tools.py
agent/tool_executor.py
大部分情况下,你只需要新增 tools/<your_tool>.py,然后用 registry.register() 注册。
只有要进默认工具集时,才改 toolsets.py。
想新增 Skill
看:
~/.hermes/skills/
agent/skill_utils.py
tools/skills_tool.py
agent/prompt_builder.py
Skill 是文件内容和加载规则,不要改 Agent loop 来实现某类工作流程。
想改 Gateway 平台
看:
gateway/run.py
gateway/platform_registry.py
gateway/platforms/
gateway/delivery.py
gateway/session.py
平台适配只做消息入口和出口,不要把 Agent 逻辑写进去。
想改 Cron
看:
cron/jobs.py
cron/scheduler.py
cron/scheduler_provider.py
tools/cronjob_tool.py
hermes_cli/cron.py
先判断是 job 存储、schedule 解析、执行、输出保存,还是 delivery 问题。
想接外部工具
优先看是不是适合 MCP:
tools/mcp_tool.py
config.yaml 的 mcp_servers
如果只是 Hermes 内部能力,再写内置 tool。
二开前的三个问题
每次改之前先问:
这个能力属于入口层、运行层还是能力层?
它是否需要进入模型上下文?
它是否有副作用和安全边界?
答不清,先不要写代码。
推荐小改动练习
如果你是第一次二开 Hermes,可以按这个顺序练:
1. 写一个只读工具,比如返回当前项目信息
2. 把它注册到一个非默认 toolset
3. 通过 enabled_toolsets 限制让模型调用它
4. 写一个 Skill 指导模型什么时候用它
5. 写一个 cron job 定时调用这个能力
这条线能串起 Tools、Skills、Cron 和 Agent loop。
最容易改错的地方
把流程写进工具
工具只做动作,不要塞太多“应该怎么工作”的流程。
流程应该进 Skill。
把用户偏好写进代码
用户偏好应该进 Memory 或 Profile,不应该硬编码。
把平台差异写进 Agent loop
平台差异应该留在 Gateway adapter。
Agent loop 应该尽量保持平台无关。
忽略工具结果大小
新增工具时要考虑输出会进上下文。长结果要摘要、分页或落盘。
下一篇看什么
最后一篇收束:读完这套教程后,你应该具备什么判断力。