内置插件
Hermes 自带一小组随仓库一起分发的插件。它们位于 <repo>/plugins/<name>/ 下,并会与安装在 ~/.hermes/plugins/ 里的用户插件一起被发现。它们和第三方插件使用的是同一套插件接口:hooks、tools、slash commands,只是这些插件由仓库内部维护。
通用插件系统见 Plugins,自己编写插件请参考 Build a Hermes Plugin。
发现机制
PluginManager 会按以下顺序扫描四类来源:
- Bundled —
<repo>/plugins/<name>/(本页所描述的对象) - User —
~/.hermes/plugins/<name>/ - Project —
./.hermes/plugins/<name>/(需设置HERMES_ENABLE_PROJECT_PLUGINS=1) - Pip entry points —
hermes_agent.plugins
若发生同名冲突,后面的来源会覆盖前面的来源。例如,一个名为 disk-cleanup 的用户插件会替换掉 bundled 版本。
plugins/memory/ 与 plugins/context_engine/ 会被刻意排除在 bundled 扫描之外,因为这两类目录有自己的发现路径;记忆大模型提供商(provider)和上下文引擎都是单选型 provider,需要通过 hermes memory setup 或 context.engine 配置进行选择。
Bundled 插件是 opt-in 的
Bundled 插件默认随仓库分发,但不会自动启用。发现系统会识别它们,因此它们会显示在 hermes plugins list 和交互式 hermes plugins UI 中;但在你明确启用前,它们不会加载:
hermes plugins enable disk-cleanup
或者通过 ~/.hermes/config.yaml:
plugins:
enabled:
- disk-cleanup
这与用户安装的插件采用相同机制。Bundled 插件永远不会被自动启用,无论是全新安装,还是已有用户升级到新版本 Hermes,都必须由你显式 opt in。
要再次关闭某个 bundled 插件:
hermes plugins disable disk-cleanup
# 或者:把它从 config.yaml 的 plugins.enabled 中移除
当前附带的插件
disk-cleanup
自动跟踪并清理会话中产生的临时文件,例如测试脚本、临时输出、cron 日志、过期 Chrome profile,而不需要智能体自己记得去调用清理工具。
工作方式:
| Hook | 行为 |
|---|---|
post_tool_call | 当 write_file / terminal / patch 在 HERMES_HOME 或 /tmp/hermes-* 下创建符合 test_*、tmp_*、*.test.* 模式的文件时,会静默将其作为 test / temp / cron-output 记录下来。 |
on_session_end | 如果本轮中有测试文件被自动跟踪,就执行安全的 quick 清理,并记录一行摘要日志;否则保持静默。 |
删除规则:
| 类别 | 阈值 | 是否需要确认 |
|---|---|---|
test | 每次会话结束 | 从不 |
temp | 跟踪后超过 7 天 | 从不 |
cron-output | 跟踪后超过 14 天 | 从不 |
HERMES_HOME 下的空目录 | 始终 | 从不 |
research | 超过 30 天且不在最新 10 条内 | 总是(仅 deep 模式) |
chrome-profile | 跟踪后超过 14 天 | 总是(仅 deep 模式) |
| 大于 500 MB 的文件 | 从不自动删除 | 总是(仅 deep 模式) |
Slash command — /disk-cleanup 在 CLI 和网关会话中都可用:
/disk-cleanup status # breakdown + top-10 largest
/disk-cleanup dry-run # preview without deleting
/disk-cleanup quick # run safe cleanup now
/disk-cleanup deep # quick + list items needing confirmation
/disk-cleanup track <path> <category> # manual tracking
/disk-cleanup forget <path> # stop tracking (does not delete)
状态文件 — 所有状态都保存在 $HERMES_HOME/disk-cleanup/:
| 文件 | 内容 |
|---|---|
tracked.json | 已跟踪路径及其类别、大小、时间戳 |
tracked.json.bak | 上述文件的原子写备份 |
cleanup.log | 所有 track / skip / reject / delete 操作的追加式审计日志 |
安全边界 — 清理逻辑只会操作 HERMES_HOME 或 /tmp/hermes-* 下的路径。Windows 挂载路径(如 /mnt/c/...)会被拒绝。像 logs/、memories/、sessions/、cron/、cache/、skills/、plugins/、disk-cleanup/ 自身这类顶层状态目录,即使为空也不会被删除,因此新安装实例不会在第一次会话结束时被“清空”。
启用方式: hermes plugins enable disk-cleanup(或在 hermes plugins 中勾选)。
再次关闭: hermes plugins disable disk-cleanup。
添加新的 bundled 插件
Bundled 插件和其他 Hermes 插件写法完全一致,参见 Build a Hermes Plugin。不同点仅在于:
- 目录位于
<repo>/plugins/<name>/,而不是~/.hermes/plugins/<name>/ - 在
hermes plugins list中,manifest 来源会显示为bundled - 同名用户插件会覆盖 bundled 版本
以下情况适合把插件作为 bundled 插件随仓库发布:
- 它没有可选依赖(或者依赖已包含在
pip install .[all]中) - 该行为对大多数用户有价值,而且更像 opt-out,而不是 opt-in
- 它依赖生命周期 hooks,而这些逻辑否则需要智能体自己记得手动触发
- 它补充了某项核心能力,但不会扩大模型可见的工具面
反例:更适合保留为用户自装插件而非 bundled 的情况包括:第三方集成(需要 API key)、小众工作流、依赖树很大的方案,以及任何会显著改变智能体默认行为的插件。