字节笔记本
2026年6月21日
hermes教程-内置插件
发现机制
PluginManager 按顺序扫描四个来源:
- 捆绑 —
<repo>/plugins/<name>/(本文档所描述的内容) - 用户 —
~/.hermes/plugins/<name>/ - 项目 —
./.hermes/plugins/<name>/(需要设置HERMES_ENABLE_PROJECT_PLUGINS=1) - Pip 入口点 —
hermes_agent.plugins
当名称冲突时,后发现的来源会覆盖先发现的——例如,一个名为 disk-cleanup 的用户插件会替换同名的捆绑插件。
plugins/memory/ 和 plugins/context_engine/ 被有意排除在捆绑扫描之外。这些目录使用自己的发现路径,因为内存提供者和上下文引擎是通过 hermes memory setup / 配置中的 context.engine 配置的单选提供者。
捆绑插件是选择加入的
捆绑插件默认是禁用的。发现机制会找到它们(它们会出现在 hermes plugins list 和交互式 hermes plugins UI 中),但只有在你明确启用后才会加载:
hermes plugins enable disk-cleanup或者通过 ~/.hermes/config.yaml:
plugins:
enabled:
- disk-cleanup这与用户安装的插件使用的机制相同。捆绑插件永远不会自动启用——无论是全新安装,还是现有用户升级到较新版本的 Hermes。你总是需要明确选择加入。
要再次关闭捆绑插件:
hermes plugins disable disk-cleanup
## 或者:从 config.yaml 的 plugins.enabled 中移除它当前提供的插件
仓库在 plugins/ 下提供了以下捆绑插件。所有插件都是选择加入的——通过 hermes plugins enable <name> 启用。
| 插件 | 类型 | 用途 |
|---|---|---|
disk-cleanup | hooks + 斜杠命令 | 自动跟踪临时文件并在会话结束时清理 |
security-guidance | hooks | 在 write_file/patch 上模式匹配危险代码并附加安全警告(或阻止)——25 条规则(Apache-2.0 分支自 Anthropic 的 claude-plugins-official 模式) |
observability/langfuse | hooks | 将对话轮次/LLM 调用/工具追踪到 Langfuse |
observability/nemo_relay | hooks | 将可观测性事件(对话轮次/LLM 调用/工具)中继到 NVIDIA NeMo 端点 |
teams_pipeline | 独立 | Microsoft Teams 会议流水线——基于 Graph、以转录为主的会议摘要 |
spotify | 后端(7 个工具) | 原生 Spotify 播放、队列、搜索、播放列表、专辑、库 |
google_meet | 独立 | 加入 Meet 通话、实时字幕转录、可选的实时双工音频 |
image_gen/openai | 图像后端 | OpenAI gpt-image-2 图像生成后端(FAL 的替代方案) |
image_gen/openai-codex | 图像后端 | 通过 Codex OAuth 使用 OpenAI 图像生成 |
image_gen/xai | 图像后端 | xAI grok-2-image 后端 |
hermes-achievements | 仪表盘标签 | 基于你真实的 Hermes 会话历史生成的 Steam 风格可收集徽章 |
kanban/dashboard | 仪表盘标签 | 多智能体调度器的看板板 UI——任务、评论、扇出、板切换。参见 看板多智能体。 |
内存提供者(plugins/memory/*)和上下文引擎(plugins/context_engine/*)分别在 内存提供者 中列出——它们分别通过 hermes memory 和 hermes plugins 管理。以下是对两个基于 hooks 的长期运行插件的详细说明。
disk-cleanup
自动跟踪并删除会话期间创建的临时文件——测试脚本、临时输出、cron 日志、过时的 Chrome 配置文件——无需智能体记住调用某个工具。
工作原理:
| 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 个 | 总是(仅深度清理) |
chrome-profile | 跟踪后超过 14 天 | 总是(仅深度清理) |
| 大于 500 MB 的文件 | 从不自动 | 总是(仅深度清理) |
斜杠命令 — /disk-cleanup 在 CLI 和网关会话中均可用:
/disk-cleanup status # 细分 + 前 10 大文件
/disk-cleanup dry-run # 预览而不删除
/disk-cleanup quick # 立即运行安全清理
/disk-cleanup deep # quick + 列出需要确认的项目
/disk-cleanup track <path> <category> # 手动跟踪
/disk-cleanup forget <path> # 停止跟踪(不删除)状态 — 所有内容位于 $HERMES_HOME/disk-cleanup/:
| 文件 | 内容 |
|---|---|
tracked.json | 跟踪的路径及其类别、大小和时间戳 |
tracked.json.bak | 上述文件的原子写入备份 |
cleanup.log | 每次跟踪/跳过/拒绝/删除的仅追加审计日志 |
安全性 — 清理仅触及 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。
security-guidance
对文件写入进行快速模式匹配的安全警告。当智能体的 write_file / patch / skill_manage 调用包含匹配已知危险代码模式的内容时——pickle.load、yaml.load 未使用 SafeLoader、eval(、os.system、subprocess(..., shell=True)、JS child_process.exec、React dangerouslySetInnerHTML、原始 .innerHTML = / .outerHTML = / document.write、Node crypto.createCipher、AES ECB 模式、TLS 验证禁用、易受 XXE 攻击的 xml.etree / minidom 解析器、<script src="//..." > 未使用 SRI、torch.load 未使用 weights_only=True、GitHub Actions ${{ github.event.* }} 注入——该插件会在工具结果后附加一个 ⚠️ 安全指导 块。
文件仍然会被写入。模型会在下一轮的工具消息中读取警告,并可以修复代码或说明为什么该构造在此上下文中是安全的。模式匹配存在一定的误报率,因此默认是警告(而非阻止)。
覆盖范围: 共 25 条规则,涵盖不安全的反序列化、命令注入、XSS 接收器、加密陷阱、XXE、供应链(SRI)和 CI/CD 工作流注入。模式数据是 Anthropic 的 claude-plugins-official 的逐字 Apache-2.0 分支——请参阅插件的 LICENSE 和 NOTICE 文件以获取归属信息。
模式:
| 环境变量 | 效果 |
|---|---|
| (未设置) | 警告模式(默认)——文件被写入,警告附加到结果中 |
SECURITY_GUIDANCE_BLOCK=1 | 阻止模式——写入被拒绝,警告作为阻止原因返回 |
SECURITY_GUIDANCE_DISABLE=1 | 终止开关——插件加载但不执行任何操作 |
启用: hermes plugins enable security-guidance(或在 hermes plugins 中勾选复选框)。
再次禁用: hermes plugins disable security-guidance。
它目前不做什么: 上游 Anthropic 插件还有两层——一个在每次智能体轮次(涉及文件修改)时进行的 LLM diff 审查,以及一个在提交时进行的智能体审查,用于追踪跨文件的数据流。两者均未移植。智能体已经可以通过 delegate_task 按需运行这些审查。
observability/langfuse
将 Hermes 的对话轮次、LLM 调用和工具调用追踪到 Langfuse——一个开源的 LLM 可观测性平台。每个对话轮次一个 span,每个 API 调用一个 generation,每个工具调用一个 tool observation。使用量总计、按类型划分的 token 计数和成本估算来自 Hermes 的规范 agent.usage_pricing 数字,因此 Langfuse 仪表盘会看到与 hermes logs 中相同的细分(输入/输出/cache_read_input_tokens/cache_creation_input_tokens/reasoning_tokens)。
该插件是故障开放的:未安装 SDK、缺少凭据或 Langfuse 临时错误——所有这些都会在 hook 中静默地变为无操作。智能体循环永远不会受到影响。
设置(交互式——推荐):
hermes tools # → Langfuse Observability → Cloud 或 Self-Hosted向导会收集你的密钥,pip install 安装 langfuse SDK,并将 observability/langfuse 添加到 plugins.enabled 中。重启 Hermes,下一轮就会发送一个 trace。
设置(手动):
pip install langfuse
hermes plugins enable observability/langfuse然后将凭据放入 ~/.hermes/.env:
HERMES_LANGFUSE_PUBLIC_KEY=pk-lf-...
HERMES_LANGFUSE_SECRET_KEY=sk-lf-...
HERMES_LANGFUSE_BASE_URL=https://cloud.langfuse.com # 或你的自托管 URL工作原理:
| Hook | 行为 |
|---|---|
pre_api_request / pre_llm_call | 打开(或重用)一个每轮次的根 span "Hermes turn"。为此 API 调用启动一个 generation 子观察,输入为序列化的最近消息。 |
post_api_request / post_llm_call | 关闭 generation,附加 usage_details、cost_details、finish_reason、助手输出和工具调用。如果没有工具调用且内容非空,则关闭该轮次。 |
pre_tool_call | 启动一个 tool 子观察,参数经过清理。 |
post_tool_call | 关闭工具观察,结果经过清理。read_file 的负载会被摘要化(显示头部 + 尾部 + 省略的行数),以便大文件读取保持在 HERMES_LANGFUSE_MAX_CHARS 以下。 |
会话分组基于 Hermes 会话 ID(或子智能体的任务 ID),通过 langfuse.propagate_attributes 实现,因此单个 hermes chat 会话中的所有内容都位于一个 Langfuse 会话下。
验证:
hermes plugins list # observability/langfuse 应显示 "enabled"
hermes chat -q "hello" # 在 Langfuse UI 中检查 "Hermes turn" trace可选调优(在 .env 中):
| 变量 | 默认值 | 用途 |
|---|---|---|
HERMES_LANGFUSE_ENV | — | 追踪上的环境标签(production、staging 等) |
HERMES_LANGFUSE_RELEASE | — | 发布/版本标签 |
HERMES_LANGFUSE_SAMPLE_RATE | 1.0 | 传递给 SDK 的采样率(0.0–1.0) |
HERMES_LANGFUSE_MAX_CHARS | 12000 | 消息内容/工具参数/工具结果的每字段截断长度 |
HERMES_LANGFUSE_DEBUG | false | 插件详细日志记录到 agent.log |
Hermes 前缀和标准 SDK 环境变量(LANGFUSE_PUBLIC_KEY、LANGFUSE_SECRET_KEY、LANGFUSE_BASE_URL)均被接受——当两者都设置时,Hermes 前缀的变量优先。
性能: Langfuse 客户端在第一次 hook 调用后被缓存。如果凭据或 SDK 缺失,该决定也会被缓存——后续的 hook 会快速返回,无需重新检查环境变量或重新加载配置。
禁用: hermes plugins disable observability/langfuse。插件模块仍会被发现,但直到你重新启用之前,不会运行任何模块代码。
google_meet
让智能体加入、转录和参与 Google Meet 通话——为会议做笔记,之后总结对话,跟进特定要点,并(可选地)通过 TTS 将回复说回通话中。
它增加了什么:
- 一个无头的虚拟参与者,使用浏览器自动化加入 Meet URL
- 通过配置的 STT 提供者对会议音频进行实时转录
- 智能体调用的
meet_summarize/meet_speak/meet_followup工具集,用于对其听到的内容采取行动 - 会后产物(转录、按发言者归类的笔记、行动项)保存在
~/.hermes/cache/google_meet/<meeting_id>/下
设置:
hermes plugins enable google_meet
## 首次使用时,会提示你通过插件的 OAuth 流程登录——
## 需要一个具有 Meet 访问权限的 Google 帐户。如果会议强制要求“仅限受邀参与者加入”,则可能需要主持人批准。从聊天中使用:
"加入 meet.google.com/abc-defg-hij 并做笔记。通话结束后,给我一份包含行动项的摘要。"
智能体会启动会议加入,在通话进行时将转录流式传输回其上下文,并在会议结束时(或当你告诉它停止时)生成结构化摘要。
何时使用: 定期站会,你希望机器人转录并为异步参与者总结;面试场景,你希望结构化笔记;任何你原本需要 Fireflies / Otter / Grain 的情况。当你不想让 AI 监听时——不要启用它。
禁用: hermes plugins disable google_meet。任何缓存的转录和录音会保留在 ~/.hermes/cache/google_meet/ 中,直到你手动删除。
hermes-achievements
在仪表盘中添加一个Steam 风格的成就标签——60 多个可收集、分级的徽章,基于你真实的 Hermes 会话历史生成。工具链壮举、调试模式、编程冲刺、技能/内存使用、模型/提供者多样性、生活方式怪癖(周末和夜间会话)。最初由 @PCinkusz 作为外部插件编写;现在纳入树内,以便与 Hermes 功能变更保持同步。
工作原理:
- 在仪表盘后端扫描你整个
~/.hermes/state.db会话历史 - 每个会话的统计信息通过
(started_at, last_active)指纹缓存,因此后续扫描只重新分析新的或已更改的会话 - 首次扫描在后台线程中运行——仪表盘永远不会等待它,即使数据库中有数千个会话
- 解锁状态持久化到
$HERMES_HOME/plugins/hermes-achievements/state.json
等级 progression: 铜 → 银 → 金 → 钻石 → 奥林匹亚。每个卡片都显示一个“计数内容”部分,列出正在跟踪的具体指标。
成就状态:
| 状态 | 含义 |
|---|---|
| 已解锁 | 至少达到一个等级 |
| 已发现 | 已知成就,进度可见,尚未获得 |
| 秘密 | 隐藏,直到 Hermes 在你的历史中检测到第一个相关信号 |
API — 路由挂载在 /api/plugins/hermes-achievements/ 下:
| 端点 | 用途 |
|---|---|
GET /achievements | 完整目录,包含每个徽章的解锁状态(首次冷扫描运行时返回一个待定占位符) |
GET /scan-status | 后台扫描器的状态:idle / running / failed,上次持续时间,运行次数 |
GET /recent-unlocks | 最近解锁的二十个徽章,最新在前 |
GET /sessions/{id}/badges | 主要在某个特定会话中获得的徽章 |
POST /rescan | 手动同步重新扫描(阻塞;当用户点击重新扫描按钮时使用) |
POST /reset-state | 清除解锁历史和缓存的快照 |
状态文件 — 位于 $HERMES_HOME/plugins/hermes-achievements/ 下:
| 文件 | 内容 |
|---|---|
state.json | 解锁历史:你获得了哪些徽章以及何时获得。在 Hermes 更新中保持稳定。 |
scan_snapshot.json | 上次完成的扫描负载(在仪表盘加载时立即提供) |
scan_checkpoint.json | 按指纹键控的每会话统计缓存(使热重新扫描快速) |
性能说明:
- 对约 8,000 个会话的冷扫描需要几分钟。它在第一个仪表盘请求时在后台线程中运行;UI 会看到一个待定占位符并轮询
/scan-status。 - 冷扫描期间的增量结果 — 扫描器每约 250 个会话发布一个部分快照,因此每次仪表盘刷新都会显示更多已解锁的徽章。不会出现长时间盯着零的情况。
- 热重新扫描会重用每个会话的统计信息,只要该会话的
started_at+last_active指纹与检查点匹配——即使历史记录很大,也能在几秒钟内完成。 - 内存快照的 TTL 为 120 秒;过期的请求会立即提供旧快照并触发后台刷新。你永远不会因为 TTL 过期而等待旋转器。
启用: 无需启用——hermes-achievements 是一个仅限仪表盘的插件(没有生命周期钩子,没有模型可见的工具)。它在首次启动时自动注册为 hermes dashboard 中的一个标签。plugins.enabled 配置仅控制生命周期/工具插件;仪表盘插件仅通过其 dashboard/manifest.json 被发现。
选择退出: 删除或重命名 plugins/hermes-achievements/dashboard/manifest.json,或者用 ~/.hermes/plugins/hermes-achievements/ 中一个同名的用户插件覆盖它,该插件不提供仪表盘。插件的状态文件(位于 $HERMES_HOME/plugins/hermes-achievements/ 下)会保留——重新安装会保留你的解锁历史。
添加一个捆绑插件
捆绑插件的编写方式与任何其他 Hermes 插件完全相同——参见 构建 Hermes 插件。唯一的区别是:
- 目录位于
<repo>/plugins/<name>/而不是~/.hermes/plugins/<name>/ - 清单源在
hermes plugins list中报告为bundled - 同名的用户插件会覆盖捆绑版本
当满足以下条件时,插件适合捆绑:
- 它没有可选依赖项(或者它们已经是
pip install .[all]的依赖项) - 该行为对大多数用户有益,并且是选择退出而非选择加入
- 逻辑与生命周期钩子相关联,否则智能体必须记住调用这些钩子
- 它补充了核心功能,而不会扩展模型可见的工具表面
反例——应保持为用户可安装插件而非捆绑的内容:需要 API 密钥的第三方集成、小众工作流、大型依赖树、任何会显著改变智能体默认行为的内容。