跳转到内容

贡献与社区

「写了个很好用的部署脚本,直接提 PR 加进 tools/——审阅者让你改成 Skill,并说明为何不该进核心仓库。」

读完 从零实现类似 Agent 后,你可能想回馈社区、发布团队 Skill,或参与 hermes-agent 开发。本章说明贡献优先级、Skill/Tool/插件/记忆后端的边界、Skills Hub 与 tap、PR 流程,以及 Trajectory 与 Atropos 在训练数据侧的衔接。依据仓库 CONTRIBUTING.mdTrajectory FormatBuild a Hermes Plugin

前置:已能编写合格 SKILL.md,见 技能系统实战

Nous 在 CONTRIBUTING 中声明的优先顺序:

优先级类型说明
1Bug 修复崩溃、错误行为、数据丢失
2跨平台兼容macOS、各 Linux、WSL2、原生 Windows
3安全加固注入、路径遍历、权限提升
4性能与健壮性重试、降级、错误处理
5新 Skill广泛适用,见下文标准
6新 Tool少见;多数能力应是 Skill
7文档修正、示例、澄清

先修可复现的 bug,再考虑新功能;大杂烩 PR 容易被要求拆分。

优先 Skill,当能力可由「说明 + 现有工具」表达:

  • 调用外部 CLI 或 HTTP,经 terminalweb_extract 等完成
  • 不需要在 harness 内硬编码 OAuth、流式二进制、专用会话管理
  • 例:arXiv 检索、git 工作流、PDF 处理、邮件 CLI

才做 Tool,当需要与运行时深度集成:

  • API Key、鉴权流、多组件配置由 Agent 统一管理
  • 必须每次精确执行的逻辑,不能依赖模型「尽力理解」
  • 二进制/流式/实时事件无法只走 shell
  • 例:浏览器自动化(Browserbase 会话)、TTS 编码与下发、vision 的 base64 管线

bundled 放哪

位置条件
skills/随安装启用,大多数用户常用
optional-skills/官方但非人人需要;hermes skills browse 标 official,install 无第三方警告
Skills Hub / 自建 tap垂直、社区、组织内部流程

组织内专用流程:Git 仓 + hermes skills tap add org/repo,见 技能系统实战 的 tap 小节。

不再接受新的 plugins/memory/ 目录合入核心树。新后端应发布为独立插件~/.hermes/plugins/ 或 pip entry point,实现 MemoryProvider ABC(sync_turnprefetchshutdown 等)。这是对耦合与维护面的决定,不是质量门槛。

Bug 修复现有内置 provider 仍欢迎 PR。

方式适用入口
普通插件工具、hook、CLI 子命令~/.hermes/plugins/、项目 .hermes/plugins/、pip entry
Context engine 插件替代默认压缩引擎plugins/context_engine/config.yamlcontext.engine 显式启用
Skin 主题CLI 视觉~/.hermes/skins/*.yaml 或内置 _BUILTIN_SKINS
文档站官网修正仓库 website/

插件指南见官方 Build a Hermes Plugin

用户侧(复习):

Terminal window
hermes skills browse
hermes skills search deploy
hermes skills install official/security/1password
hermes skills tap add myorg/hermes-skills
hermes skills install myorg/hermes-skills/oncall-playbook

发布自定义 tap(组织/registry):

  1. 在 GitHub(或兼容 registry)建仓,目录 skills/<category>/<name>/SKILL.md
  2. 用户执行 hermes skills tap add <owner>/<repo>,配置写入 ~/.hermes/.hub/taps.json
  3. Nous Research Discord 等渠道说明用途与信任边界。

社区 Skill 安装前会经 Skills Guard 扫描;community 来源可能对非 dangerous 项需 --force。详见官方 Skills

审阅会按 HARDLINE 检查,贡献前自检:

  1. description ≤ 60 字符,一句,句号结尾,无营销套话。
  2. 正文引用 Hermes 原生工具名(`search_files`),勿用 grep/cat 代替已封装工具。
  3. 结构含 When to Use、Procedure、Pitfalls、Verification 等;复杂 Skill 约 200 行内。
  4. 辅助脚本放 scripts/,测试放 tests/skills/test_<name>_skill.py无 live 网络
  5. 需要密钥时用 required_environment_variables,Gateway 不在聊天里收 secret。

本地验证:

Terminal window
hermes --toolsets skills -q "Use the <skill-name> skill to <concrete task>"
Terminal window
git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
uv venv venv --python 3.11
export VIRTUAL_ENV="$(pwd)/venv"
uv pip install -e ".[all,dev]"
mkdir -p ~/.hermes/{cron,sessions,logs,memories,skills}
cp cli-config.yaml.example ~/.hermes/config.yaml
# 在 ~/.hermes/.env 配置至少一个 LLM Provider Key
hermes doctor
hermes chat -q "Hello"

测试与 CI 对齐:

Terminal window
scripts/run_tests.sh
# 或激活 venv 后:pytest tests/ -v

触达进程管理、终端、文件 I/O 时,PR 前可跑 scripts/check-windows-footguns.py(Windows 上 os.kill(pid, 0) 等陷阱)。

tools/ 新文件内 registry.register(...),并在 toolsets.py 把工具名加入对应列表,否则注册了也不会暴露给模型。无需改 model_tools.py 中央 import 列表。

约定
分支名fix/feat/docs/test/refactor/ + 描述
提交信息Conventional Commits,如 fix(gateway): ...feat(skills): ...
描述内容改了什么、为何、如何测、测过哪些平台
范围一 PR 一事;安全相关请显式标注

新 PyPI 依赖需合理上下界;供应链相关改动会走 supply-chain-audit 等 CI 审查。

GitHub Issues 请附 OS、Python 版本、hermes version、完整 traceback、复现步骤。安全漏洞请私下报告,勿公开 issue。

Hermes 可将对话导出为 ShareGPT 兼容 JSONL,供调试、监督微调或 RL 管线使用。实现见 agent/trajectory.pyrun_agent.py_save_trajectorybatch_runner.py

~/.hermes/config.yaml
agent:
save_trajectories: true # 默认 false

或会话/启动时使用 --save-trajectories。结束时写入工作目录:

文件含义
trajectory_samples.jsonlcompleted: true
failed_trajectories.jsonl失败或中断

每条含 conversations(ShareGPT 角色:human/gpt/tool/system)、timestampmodelcompleted 等。推理内容规范为 “ 块,工具调用规范为 <tool_call> XML,便于 HuggingFace load_dataset("json", ...)

官方 Batch Processing 描述并行跑提示列表、checkpoint 续跑与 toolset 分布采样。仓库内 batch_runner.py 用多进程执行,主要目的就是产 trajectory。输出常带 prompt_indextool_statsapi_calls 等字段;无推理内容的样本会被丢弃,避免污染训练集。具体 CLI 子命令以你安装版本的 hermes --help 与仓库 batch_runner.py 为准。

加载示例:

import json
with open("trajectory_samples.jsonl") as f:
entries = [json.loads(line) for line in f if line.strip()]
training = [e["conversations"] for e in entries if e.get("completed")]

详见 Trajectory Format

Atropos 是 Nous 的 RL / 轨迹采集 框架:环境以微服务形式通过 trajectory API 与训练器交互,支持多轮工具调用、代码执行等场景。Hermes 导出的 JSONL 是一种轨迹来源;完整 RL 训练还需 Atropos 侧环境、奖励与训练配置,不是「开 save_trajectories 即等于微调完成」。

边界:本教程不展开 Atropos 训练脚本;若你做模型研究,应同时读 Atropos 仓库 README 与 Hermes trajectory 字段约定。

生产部署:社区实践与官方清单

Section titled “生产部署:社区实践与官方清单”

没有单一「官方客户案例」文档;生产建议以 Security消息网关 为准,常见组合:

场景实践要点
个人 VPS 助理allowlist 或 pairing、docker backend、Cron deliver 到 /sethome
团队运维 bot组织 tap 分发 Skill、command_allowlist 定期审计
研发机 CLIlocal + manual 审批,敏感仓用 Profile 隔离
训练数据生产batch_runner + 推理链完整的模型,磁盘管理 JSONL 体积

安全、性能与最佳实践 的 Gateway 检查清单配合使用。

症状可能原因处理
PR 要求改成 Skill能力不需新 Tool重写为 SKILL.md + 现有工具
memory provider PR 被拒政策关闭 in-tree独立插件仓
Hub install 被拦Guard 命中hermes skills inspect;审慎 --force
JSONL 为空无 reasoning 被 batch 丢弃换支持推理的模型或查格式
Skill 合并被拒description 超长按 HARDLINE 缩短
  • 不要为小众内部流程争 bundled:用 tap 或 Hub,降低核心维护面。
  • 不要在 Gateway 聊天里提交 PR 级密钥:用 hermes setup.env
  • 不要把 trajectory 当隐私合规手段:JSONL 含完整对话,注意脱敏与存储权限。
  • 不要假设贡献 Tool 比 Skill 更「高级」:官方明确 Tool 应少见。
  1. 为你常做的一项工作写 10 行 Skill 大纲(When to Use + Procedure),判断应放 bundled、optional 还是 tap。
  2. 运行 hermes skills browse --source official,安装一个 optional skill 并完成一次调用。
  3. 阅读 CONTRIBUTING 中「Should it be a Skill or a Tool」一节,举一个你曾想过做成 Tool 但应改为 Skill 的例子。
  4. 若已 clone 仓库:跑 scripts/run_tests.sh tests/skills/ -q 看 Skill 测试如何 mock 网络。
  5. 打开 agent/trajectory.py 或文档,写出 ShareGPT 里 human 对应 API 的哪个 role。
  1. 你的组织更需要私有 tap,还是向上游提交 bundled Skill?
  2. Trajectory 用于改进模型还是审计 Agent 行为,所需字段是否相同?
  3. 若不能合入 memory provider,独立插件的发布与版本谁维护?
  • 说出官方贡献优先级前三项。
  • 对比 Skill 与 Tool 各一条适用条件。
  • 说明为何新 memory provider 应独立发布。
  • 写出 hermes skills tap addinstall 的分工。
  • 解释 trajectory_samples.jsonl 与 batch_runner 的关系。
  • 列出一条生产 Gateway 必做安全配置。

下一章:系列总结与自测,串联全系列能力边界与可执行验收清单。