ByteNoteByteNote

字节笔记本

2026年6月21日

hermes教程-技能系统

API中转
¥120

技能系统

技能是按需知识文档,代理可以在需要时加载。它们遵循渐进式披露模式以最小化令牌使用,并与 agentskills.io 开放标准兼容。

所有技能都存放在 ~/.hermes/skills/ 中——这是主目录和唯一真实来源。全新安装时,捆绑的技能会从仓库复制过来。从中心安装的以及代理创建的技能也存放在这里。代理可以修改或删除任何技能。

你也可以将 Hermes 指向外部技能目录——除了本地目录外还会扫描的额外文件夹。请参阅下面的外部技能目录

另请参阅:

从空白状态开始

默认情况下,每个配置文件都会预装捆绑的技能目录,并且每次 hermes update 都会添加任何新捆绑的技能。如果你想要一个没有捆绑技能的配置文件——并且在更新过程中保持空白——你有两种方式:

安装时(适用于默认的 ~/.hermes 配置文件):

bash
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --no-skills

创建配置文件时(命名配置文件):

bash
hermes profile create research --no-skills

在已安装的配置文件上(默认或命名),在运行时切换:

bash
hermes skills opt-out            # 停止未来播种——不触碰磁盘上的任何内容
hermes skills opt-out --remove   # 同时删除未修改的捆绑技能(需先确认)
hermes skills opt-in --sync      # 撤销:移除标记并立即重新播种

所有三种方式都会在配置文件目录中写入一个 .no-bundled-skills 标记。当该标记存在时,安装程序、hermes update 以及任何技能同步都会跳过该配置文件的捆绑技能播种。删除该标记(或运行 hermes skills opt-in)以重新启用。

注意——默认安全

hermes skills opt-out 仅停止未来的播种——它从不删除磁盘上已有的任何内容。可选的 --remove 标志仅在捆绑技能未修改(与 Hermes 安装的版本字节相同)时删除它们。你编辑过的技能、从中心安装的技能以及你自己编写的技能始终保留。

使用技能

每个已安装的技能都会自动作为斜杠命令可用:

bash
## 在 CLI 或任何消息平台中:
/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor
/plan design a rollout for migrating our auth provider
## 仅技能名称会加载它并让代理询问你需要什么:
/excalidraw

捆绑的 plan 技能是一个很好的例子。运行 /plan [request] 会加载该技能的指令,告诉 Hermes 在需要时检查上下文,编写一个 Markdown 实现计划而不是执行任务,并将结果保存在相对于活动工作区/后端工作目录的 .hermes/plans/ 下。

你也可以通过自然对话与技能交互:

bash
hermes chat --toolsets skills -q "What skills do you have?"
hermes chat --toolsets skills -q "Show me the axolotl skill"

渐进式披露

技能使用令牌高效的加载模式:

text
Level 0: skills_list()           → [{name, description, category}, ...]   (~3k tokens)
Level 1: skill_view(name)        → Full content + metadata       (varies)
Level 2: skill_view(name, path)  → Specific reference file       (varies)

代理仅在真正需要时才加载完整的技能内容。

SKILL.md 格式

markdown
---
name: my-skill
description: Brief description of what this skill does
version: 1.0.0
platforms: [macos, linux]     # 可选——限制到特定操作系统平台
metadata:
  hermes:
    tags: [python, automation]
    category: devops
    fallback_for_toolsets: [web]    # 可选——条件激活(见下文)
    requires_toolsets: [terminal]   # 可选——条件激活(见下文)
    config:                          # 可选——config.yaml 设置
      - key: my.setting
        description: "What this controls"
        default: "value"
        prompt: "Prompt for setup"
---
## 技能标题

## 何时使用
此技能的触发条件。

## 步骤
1. 第一步
2. 第二步

## 陷阱
- 已知的失败模式及修复方法

## 验证
如何确认它有效。

平台特定技能

技能可以使用 platforms 字段限制到特定操作系统:

匹配
macosmacOS (Darwin)
linuxLinux
windowsWindows
yaml
platforms: [macos]            # 仅 macOS(例如 iMessage、Apple Reminders、FindMy)
platforms: [macos, linux]     # macOS 和 Linux

设置后,该技能在不兼容的平台上会自动从系统提示、skills_list() 和斜杠命令中隐藏。如果省略,该技能会在所有平台上加载。

技能输出和媒体投递

当技能响应(或任何代理响应)包含媒体文件的裸绝对路径时——例如 /home/user/screenshots/diagram.png——网关会自动检测它,将其从可见文本中剥离,并将文件原生投递到用户的聊天中(Telegram 图片、Discord 附件等),而不是在消息中留下原始路径。

对于音频,[[audio_as_voice]] 指令会将音频文件提升为支持该功能的平台(Telegram、WhatsApp)上的原生语音消息气泡。

强制文档式投递:[[as_document]]

有时你想要与内联预览相反的效果:希望文件作为可下载的附件投递,而不是重新压缩的图片气泡。典型的例子是高分辨率截图或图表——Telegram 的 sendPhoto 会将其重新压缩到约 200 KB、1280 像素,从而破坏可读性。通过 sendDocument 发送的 1-2 MB PNG 会保持原始字节不变。

如果响应(或其内部的任何文本——通常是最后一行)包含字面指令 [[as_document]],则从该响应中提取的每个媒体路径都会作为文档/文件附件投递,而不是图片气泡:

text
Here is your rendered chart:

/home/user/.hermes/cache/chart-q4-2025.png

[[as_document]]

该指令在投递前会被剥离,因此用户永远不会看到它。粒度有意设置为每个响应全有或全无:发出一次 [[as_document]],同一响应中的所有图片路径都会作为文档投递。这与 [[audio_as_voice]] 的范围一致。

在以下情况下从技能中使用它:

  • 你生成用户需要作为文件的截图或图表(用于在其他工具中编辑、存档、完整共享)。
  • 默认的有损预览会模糊细节(小文本、像素精确的图表、颜色敏感的渲染)。

没有单独文档路径的平台(例如 SMS)会回退到它们拥有的任何附件机制。

条件激活(后备技能)

技能可以根据当前会话中可用的工具自动显示或隐藏。这对于后备技能最为有用——免费或本地替代方案,仅在高级工具不可用时才应出现。

yaml
metadata:
  hermes:
    fallback_for_toolsets: [web]      # 仅当这些工具集不可用时显示
    requires_toolsets: [terminal]     # 仅当这些工具集可用时显示
    fallback_for_tools: [web_search]  # 仅当这些特定工具不可用时显示
    requires_tools: [terminal]        # 仅当这些特定工具可用时显示
字段行为
fallback_for_toolsets当列出的工具集可用时,技能隐藏。当它们缺失时显示。
fallback_for_tools相同,但检查单个工具而不是工具集。
requires_toolsets当列出的工具集不可用时,技能隐藏。当它们存在时显示。
requires_tools相同,但检查单个工具。

示例: 内置的 duckduckgo-search 技能使用 fallback_for_toolsets: [web]。当你设置了 FIRECRAWL_API_KEY 时,web 工具集可用,代理使用 web_search——DuckDuckGo 技能保持隐藏。如果 API 密钥缺失,web 工具集不可用,DuckDuckGo 技能会自动作为后备出现。

没有任何条件字段的技能行为与之前完全相同——它们始终显示。

加载时的安全设置

技能可以声明所需的环境变量,而不会从发现中消失:

yaml
required_environment_variables:
  - name: TENOR_API_KEY
    prompt: Tenor API key
    help: Get a key from https://developers.google.com/tenor
    required_for: full functionality

当遇到缺失值时,Hermes 仅在本地 CLI 中实际加载技能时安全地询问。你可以跳过设置并继续使用该技能。消息界面永远不会在聊天中询问秘密——它们会告诉你改用 hermes setup 或本地 ~/.hermes/.env

一旦设置,声明的环境变量会自动传递execute_codeterminal 沙箱中——技能的脚本可以直接使用 $TENOR_API_KEY。对于非技能环境变量,请使用 terminal.env_passthrough 配置选项。有关详细信息,请参阅环境变量传递

技能配置设置

技能还可以声明存储在 config.yaml 中的非秘密配置设置(路径、偏好):

yaml
metadata:
  hermes:
    config:
      - key: myplugin.path
        description: Path to the plugin data directory
        default: "~/myplugin-data"
        prompt: Plugin data directory path

设置存储在 config.yaml 的 skills.config 下。hermes config migrate 会提示未配置的设置,hermes config show 会显示它们。当技能加载时,其解析的配置值会被注入到上下文中,以便代理自动知道配置的值。

有关详细信息,请参阅技能设置创建技能——配置设置

技能目录结构

text
~/.hermes/skills/                  # 单一真实来源
├── mlops/                         # 类别目录
│   ├── axolotl/
│   │   ├── SKILL.md               # 主要指令(必需)
│   │   ├── references/            # 附加文档
│   │   ├── templates/             # 输出格式
│   │   ├── scripts/               # 可从技能调用的辅助脚本
│   │   └── assets/                # 补充文件
│   └── vllm/
│       └── SKILL.md
├── devops/
│   └── deploy-k8s/                # 代理创建的技能
│       ├── SKILL.md
│       └── references/
├── .hub/                          # 技能中心状态
│   ├── lock.json
│   ├── quarantine/
│   └── audit.log
└── .bundled_manifest              # 跟踪已播种的捆绑技能

外部技能目录

如果你在 Hermes 之外维护技能——例如,多个 AI 工具使用的共享 ~/.agents/skills/ 目录——你可以告诉 Hermes 也扫描这些目录。

~/.hermes/config.yamlskills 部分下添加 external_dirs

yaml
skills:
  external_dirs:
    - ~/.agents/skills
    - /home/shared/team-skills
    - ${SKILLS_REPO}/skills

路径支持 ~ 扩展和 ${VAR} 环境变量替换。

工作原理

  • 本地创建,原地更新:新创建的代理技能写入 ~/.hermes/skills/。当代理使用 skill_manage 操作(如 patcheditwrite_fileremove_filedelete)时,现有技能会在其所在位置被修改,包括 external_dirs 下的技能。
  • 外部目录不是写保护边界:如果外部技能目录对 Hermes 进程可写,代理管理的技能更新可以更改该目录中的文件。如果共享的外部技能必须保持只读,请使用文件系统权限或单独的配置文件/工具集设置。
  • 本地优先:如果同一技能名称同时存在于本地目录和外部目录中,则本地版本优先。
  • 完全集成:外部技能出现在系统提示索引、skills_listskill_view 以及作为 /skill-name 斜杠命令中——与本地技能没有区别。
  • 不存在的路径会被静默跳过:如果配置的目录不存在,Hermes 会忽略它而不报错。对于可能不在每台机器上都存在的可选共享目录很有用。

示例

text
~/.hermes/skills/               # 本地(主要,可读写)
├── devops/deploy-k8s/
│   └── SKILL.md
└── mlops/axolotl/
    └── SKILL.md

~/.agents/skills/               # 外部(共享,如果可写则可变)
├── my-custom-workflow/
│   └── SKILL.md
└── team-conventions/
    └── SKILL.md

所有四个技能都出现在你的技能索引中。如果你在本地创建一个名为 my-custom-workflow 的新技能,它会覆盖外部版本。

技能包

技能包是微小的 YAML 文件,将多个技能分组到一个斜杠命令下。当你运行 /<bundle-name> 时,包中列出的每个技能都会同时加载——当特定任务总是受益于同一组技能时很有用。

快速示例

bash
## 为后端功能工作创建一个包
hermes bundles create backend-dev \
  --skill github-code-review \
  --skill test-driven-development \
  --skill github-pr-workflow \
  -d "Backend feature work — review, test, PR workflow"

然后在 CLI 或任何网关平台中:

/backend-dev refactor the auth middleware

代理会收到所有三个技能加载到一条用户消息中,斜杠命令后的任何文本都会作为用户指令附加。

YAML 模式

包存放在 ~/.hermes/skill-bundles/<slug>.yaml 中,如下所示:

yaml
name: backend-dev
description: Backend feature work — review, test, PR workflow.
skills:
  - github-code-review
  - test-driven-development
  - github-pr-workflow
instruction: |
  Always start by writing failing tests, then implement.
  Open the PR through the standard workflow with co-author tags.

字段:

  • name(可选——默认为文件名词干)——包的显示名称。规范化为连字符形式的斜杠命令(Backend Dev/backend-dev)。
  • description(可选)——在 /bundleshermes bundles list 中显示的简短文本。
  • skills(必需,非空列表)——技能名称或相对于技能目录的路径。使用与传递给 /<skill-name> 相同的标识符。
  • instruction(可选)——附加到加载的技能内容之前的额外指导。用于规定“我们总是如何一起使用这些”。

管理包

bash
## 列出所有已安装的包
hermes bundles list
## 检查一个包
hermes bundles show backend-dev
## 交互式创建包(省略 --skill 标志以逐行输入)
hermes bundles create research
## 覆盖现有包
hermes bundles create backend-dev --skill ... --force
## 删除一个包
hermes bundles delete backend-dev
## 重新扫描 ~/.hermes/skill-bundles/ 并报告更改
hermes bundles reload

在聊天会话中,/bundles 列出每个已安装的包及其技能。

行为

  • 当别名冲突时,包优先于单个技能。如果你将一个包命名为 research,并且你还有一个名为 research 的技能,那么 /research 会调用该包。这是有意为之——你通过命名选择了该包。
  • 缺失的技能会被跳过,而不是致命错误。如果一个包列出了 skill-foo 而你没有安装它,该包仍然会加载那些确实解析的技能,并且代理会收到一条列出被跳过内容的注释。
  • 包在每个界面中都有效——交互式 CLI、TUI、仪表板聊天以及每个网关平台(Telegram、Discord、Slack……)——因为调度与单个技能命令集中在一起。
  • 包不会使提示缓存失效。它们在调用时生成一条新的用户消息,与 /<skill-name> 的方式相同——不会改变系统提示。

何时包优于手动安装每个技能

在以下情况下使用包:

  • 你总是为重复性任务配对相同的技能(/backend-dev/release-prep/incident-response)。
  • 你想要比连续输入几个 /skill 调用更短的思维模型。
  • 你想通过将包 YAML 检入共享的 dotfiles 仓库并将其符号链接到 ~/.hermes/skill-bundles/ 来发布团队范围的“任务配置文件”。

包只是一个 YAML 别名——它不会为你安装技能。技能本身必须已经存在(在 ~/.hermes/skills/ 或外部技能目录中)。否则,包调用只会跳过缺失的技能。

代理管理的技能(skill_manage 工具)

代理可以通过 skill_manage 工具创建、更新和删除自己的技能。这是代理的程序性记忆——当它找出一个非平凡的工作流程时,它会将方法保存为技能以供将来重用。

代理何时创建技能

  • 成功完成复杂任务(5 次以上工具调用)后
  • 当它遇到错误或死胡同并找到可行路径时
  • 当用户纠正了它的方法时
  • 当它发现一个非平凡的工作流程时

操作

操作用途关键参数
create从头开始创建新技能namecontent(完整 SKILL.md)、可选 category
patch针对性修复(首选)nameold_stringnew_string
edit主要结构重写namecontent(完整 SKILL.md 替换)
delete完全删除技能name
write_file添加/更新支持文件namefile_pathfile_content
remove_file删除支持文件namefile_path

提示

patch 操作是更新的首选——它比 edit 更节省令牌,因为只有更改的文本会出现在工具调用中。

控制代理技能写入(skills.write_approval

默认情况下,代理可以自由写入技能——包括在轮次之后运行的后台自我改进审查。如果你希望先批准每个技能写入(小模型误判所学内容、安全环境,或者只是希望有人监督自我改进循环),请打开写入批准门控:

yaml
skills:
  write_approval: false     # false = 自由写入(默认) | true = 需要批准

write_approval: true 时,每个 skill_manage 写入(create / edit / patch / delete / write_file / remove_file)都会被暂存而不是提交——SKILL.md 太大无法内联审查,因此无论写入来自前台轮次还是后台审查,都会应用暂存。暂存的写入在重启后保留在 ~/.hermes/pending/skills/ 下,并使用与危险命令相同的熟悉的批准/拒绝流程进行审查:

text
/skills pending             # 列出暂存的技能写入 + 每个的简要说明
/skills diff <id>           # 完整统一差异(最好在 CLI 或仪表板中查看)
/skills approve <id>        # 应用它(或 'all')
/skills reject <id>         # 丢弃它(或 'all')
/skills approval on         # 打开门控(或 'off')并持久化

审查界面在交互式 CLI 和消息平台上都有效(差异输出在聊天气泡中被截断——在 CLI 或待处理 JSON 文件中阅读完整差异)。内存写入在 memory.write_approval 下有相同的门控——请参阅控制内存写入

单独的 skills.guard_agent_created 设置是一个内容扫描器(危险模式启发式),而不是批准门控——两者是独立的。请参阅代理创建技能写入的防护

技能中心

浏览、搜索、安装和管理来自在线注册表、skills.sh、直接知名技能端点以及官方可选技能的技能。

常用命令

bash
hermes skills browse                              # 浏览所有中心技能(官方优先)
hermes skills browse --source official            # 仅浏览官方可选技能
hermes skills search kubernetes                   # 搜索所有来源
hermes skills search react --source skills-sh     # 搜索 skills.sh 目录
hermes skills search https://mintlify.com/docs --source well-known
hermes skills inspect openai/skills/k8s           # 安装前预览
hermes skills install openai/skills/k8s           # 安装并安全扫描
hermes skills install official/security/1password
hermes skills install skills-sh/vercel-labs/json-render/json-render-react --force
hermes skills install well-known:https://mintlify.com/docs/.well-known/skills/mintlify
hermes skills install https://sharethis.chat/SKILL.md              # 直接 URL(单文件 SKILL.md)
hermes skills install https://example.com/SKILL.md --name my-skill # 当前置元数据没有名称时覆盖名称
hermes skills list --source hub                   # 列出从中心安装的技能
hermes skills check                               # 检查已安装的中心技能是否有上游更新
hermes skills update                              # 当需要时重新安装有上游更改的中心技能
hermes skills audit                               # 重新扫描所有中心技能的安全性
hermes skills uninstall k8s                       # 移除一个中心技能
hermes skills reset google-workspace              # 将捆绑技能从“用户修改”状态解除(见下文)
hermes skills reset google-workspace --restore    # 同时恢复捆绑版本,删除你的本地编辑
hermes skills publish skills/my-skill --to github --repo owner/repo
hermes skills snapshot export setup.json          # 导出技能配置
hermes skills tap add myorg/skills-repo           # 添加自定义 GitHub 源

支持的中心来源

来源示例备注
officialofficial/security/1password随 Hermes 提供的可选技能。
skills-shskills-sh/vercel-labs/agent-skills/vercel-react-best-practices可通过 hermes skills search <query> --source skills-sh 搜索。当 skills.sh 别名与仓库文件夹不同时,Hermes 会解析别名风格的技能。
well-knownwell-known:https://mintlify.com/docs/.well-known/skills/mintlify直接从网站上的 /.well-known/skills/index.json 提供的技能。使用站点或文档 URL 搜索。
urlhttps://sharethis.chat/SKILL.md直接 HTTP(S) URL 指向单文件 SKILL.md。名称解析:前置元数据 → URL 别名 → 交互式提示 → --name 标志。
githubopenai/skills/k8s直接 GitHub 仓库/路径安装和自定义 tap。
clawhublobehubbrowse-sh来源特定标识符社区或市场集成。

集成的中心和注册表

Hermes 目前与这些技能生态系统和发现来源集成:

1. 官方可选技能(official

这些在 Hermes 仓库本身中维护,并具有内置信任。

bash
hermes skills browse --source official
hermes skills install official/security/1password

2. skills.sh(skills-sh

这是 Vercel 的公共技能目录。Hermes 可以直接搜索它、检查技能详情页面、解析别名风格的别名,并从底层来源仓库安装。

bash
hermes skills search react --source skills-sh
hermes skills inspect skills-sh/vercel-labs/json-render/json-render-react
hermes skills install skills-sh/vercel-labs/json-render/json-render-react --force

3. 知名技能端点(well-known

这是基于 URL 的发现,来自发布 /.well-known/skills/index.json 的网站。它不是一个单一的集中式中心——它是一个网络发现约定。

bash
hermes skills search https://mintlify.com/docs --source well-known
hermes skills inspect well-known:https://mintlify.com/docs/.well-known/skills/mintlify
hermes skills install well-known:https://mintlify.com/docs/.well-known/skills/mintlify

4. 直接 GitHub 技能(github

Hermes 可以直接从 GitHub 仓库和基于 GitHub 的 tap 安装。当你已经知道仓库/路径或想要添加自己的自定义来源仓库时,这很有用。

默认 tap(无需任何设置即可浏览):

bash
hermes skills install openai/skills/k8s
hermes skills tap add myorg/skills-repo

类别分组(skills.sh.json)。 GitHub tap 可以在其仓库根目录下提供一个 skills.sh.json 文件,遵循 skills.sh 模式。其 groupings(每个包含一个 title 和一个技能名称列表)在索引时被读取,并成为技能中心页面上显示的类别标签——而不是基于标签的猜测。这是通用的:任何提供该文件的 tap 都会获得真实的分类,无需 Hermes 端更改。

json
{
  "$schema": "https://skills.sh/schemas/skills.sh.schema.json",
  "groupings": [
    { "title": "Inference AI", "skills": ["dynamo-recipe-runner", "dynamo-router-sla"] },
    { "title": "Decision Optimization", "skills": ["cuopt-developer", "cuopt-install"] }
  ]
}

5. ClawHub(clawhub

一个第三方技能市场,作为社区来源集成。

6. Claude 市场风格仓库(claude-marketplace

Hermes 支持发布 Claude 兼容插件/市场清单的市场仓库。

已知的集成来源包括:

Hermes 来源 ID:claude-marketplace

7. LobeHub(lobehub

Hermes 可以搜索并将 LobeHub 公共目录中的代理条目转换为可安装的 Hermes 技能。

8. browse.sh(browse-sh

Hermes 与 browse.sh 集成,这是 Browserbase 的 200 多个特定站点浏览器自动化 SKILL.md 文件目录(Airbnb、Amazon、arXiv、12306.cn、Etsy、Xero 等)。每个技能描述如何端到端驱动一个网站,适合与 Hermes 的浏览器工具以及你已安装的任何浏览器自动化技能一起使用。

  • 网站:browse.sh
  • 目录 API:https://browse.sh/api/skills
  • Hermes 来源 ID:browse-sh
  • 信任级别:community
bash
hermes skills search airbnb --source browse-sh
hermes skills inspect browse-sh/airbnb.com/search-listings-ddgioa
hermes skills install browse-sh/airbnb.com/search-listings-ddgioa

标识符使用 browse-sh/<hostname>/<task-id> 形式,并与 browse.sh 目录公开的别名匹配。内容通过每个技能的详情端点(/api/skills/<slug>skillMdUrl)解析,而不是通过目录的 GitHub sourceUrl

9. 直接 URL(url

直接从任何 HTTP(S) URL 安装单文件 SKILL.md——当作者在自己的网站上托管技能时很有用(没有中心列表,没有要输入的 GitHub 路径)。Hermes 获取 URL,解析 YAML 前置元数据,进行安全扫描,然后安装。

  • Hermes 来源 ID:url
  • 标识符:URL 本身(无需前缀)
  • 范围:仅单文件 SKILL.md。带有 references/scripts/ 的多文件技能需要清单,应通过上述其他来源之一发布。
bash
hermes skills install https://sharethis.chat/SKILL.md
hermes skills install https://example.com/my-skill/SKILL.md --category productivity

名称解析,按顺序:

  1. SKILL.md YAML 前置元数据中的 name: 字段(推荐——每个格式良好的技能都有一个)。
  2. URL 路径中的父目录名称(例如 .../my-skill/SKILL.mdmy-skill,或 .../my-skill.mdmy-skill),当它是有效标识符时(^[a-z][a-z0-9_-]*$)。
  3. 在具有 TTY 的终端上交互式提示。
  4. 在非交互式界面(TUI 内的 /skills install 斜杠命令、网关平台、脚本)上,会显示一个指向 --name 覆盖的清晰错误。
bash
## 前置元数据没有名称,URL 别名无帮助——提供一个:
hermes skills install https://example.com/SKILL.md --name sharethis-chat
## 或者在聊天会话中:
/skills install https://example.com/SKILL.md --name sharethis-chat

信任级别始终是 community——与所有其他来源运行相同的安全扫描。URL 作为安装标识符存储,因此当你想要刷新时,hermes skills update 会自动从同一 URL 重新获取。

安全扫描和 --force

所有从中心安装的技能都会经过安全扫描器,检查数据泄露、提示注入、破坏性命令、供应链信号和其他威胁。

hermes skills inspect ... 现在还会在可用时显示上游元数据:

  • 仓库 URL
  • skills.sh 详情页面 URL
  • 安装命令
  • 每周安装次数
  • 上游安全审计状态
  • 知名索引/端点 URL

当你审查了第三方技能并想要覆盖非危险的策略阻止时,使用 --force

bash
hermes skills install skills-sh/anthropics/skills/pdf --force

重要行为:

  • --force 可以覆盖 caution/warn 类型发现的策略阻止。
  • --force 不会覆盖 dangerous 扫描结论。
  • 官方可选技能(official/...)被视为内置信任,不会显示第三方警告面板。

信任级别

级别来源策略
builtin随 Hermes 提供始终信任
official仓库中的 optional-skills/内置信任,无第三方警告
trusted受信任的注册表/仓库,如 openai/skillsanthropics/skillshuggingface/skillsNVIDIA/skills比社区来源更宽松的策略
community其他所有内容(skills.sh、知名端点、自定义 GitHub 仓库、大多数市场)非危险发现可用 --force 覆盖;dangerous 结论保持阻止

更新生命周期

中心现在跟踪足够的来源信息,以重新检查已安装技能的上游副本:

bash
hermes skills check          # 报告哪些已安装的中心技能在上游发生了变化
hermes skills update         # 仅重新安装有可用更新的技能
hermes skills update react   # 更新一个特定的已安装中心技能

这使用存储的来源标识符加上当前上游包内容哈希来检测差异。

提示——GitHub 速率限制

技能中心操作使用 GitHub API,对于未认证用户,速率限制为 60 次请求/小时。如果在安装或搜索期间看到速率限制错误,请在 .env 文件中设置 GITHUB_TOKEN 以将限制提高到 5,000 次请求/小时。错误消息在发生时包含可操作提示。

发布自定义技能 tap

如果你想分享一组精选的技能——为你的团队、组织或公开——你可以将它们作为 tap 发布:一个其他 Hermes 用户通过 hermes skills tap add <owner/repo> 添加的 GitHub 仓库。无需服务器、无需注册注册表、无需发布管道。只需一个 SKILL.md 文件目录。

仓库布局

一个 tap 是任何 GitHub 仓库(公共或私有——私有需要 GITHUB_TOKEN),布局如下:

text
owner/repo
├── skills/                       # 默认路径;每个 tap 可配置
│   ├── my-workflow/
│   │   ├── SKILL.md              # 必需
│   │   ├── references/           # 可选支持文件
│   │   ├── templates/
│   │   └── scripts/
│   ├── another-skill/
│   │   └── SKILL.md
│   └── third-skill/
│       └── SKILL.md
└── README.md                     # 可选但有用

规则:

  • 每个技能位于 tap 根路径(默认 skills/)下的自己的目录中。
  • 目录名称成为技能的安装别名。
  • 每个技能目录必须包含一个带有标准 SKILL.md 前置元数据namedescription,以及可选的 metadata.hermes.tagsversionauthorplatformsmetadata.hermes.config)的 SKILL.md
  • references/templates/scripts/assets/ 这样的子目录会在安装时与 SKILL.md 一起下载。
  • 目录名称以 ._ 开头的技能会被忽略。

Hermes 通过列出 tap 路径的每个子目录并探测每个目录中的 SKILL.md 来发现技能。

最小 tap 示例

text
my-org/hermes-skills
└── skills/
    └── deploy-runbook/
        └── SKILL.md

skills/deploy-runbook/SKILL.md

markdown
---
name: deploy-runbook
description: Our deployment runbook — services, rollback, Slack channels
version: 1.0.0
author: My Org Platform Team
metadata:
  hermes:
    tags: [deployment, runbook, internal]
---
## Deploy Runbook

Step 1: ...

将其推送到 GitHub 后,任何 Hermes 用户都可以订阅并安装:

bash
hermes skills tap add my-org/hermes-skills
hermes skills search deploy
hermes skills install my-org/hermes-skills/deploy-runbook

非默认路径

如果你的技能不在 skills/ 下(当你向现有项目添加 skills/ 子树时很常见),请编辑 ~/.hermes/.hub/taps.json 中的 tap 条目:

json
{
  "taps": [
    {"repo": "my-org/platform-docs", "path": "internal/skills/"}
  ]
}

hermes skills tap add CLI 默认将新 tap 的 path 设置为 "skills/";如果你需要不同的路径,请直接编辑文件。hermes skills tap list 显示每个 tap 的有效路径。

直接安装单个技能(无需添加 tap)

用户也可以从任何公共 GitHub 仓库安装单个技能,而无需将整个仓库添加为 tap:

bash
hermes skills install owner/repo/skills/my-workflow

当你想要分享一个技能而不要求用户订阅你的整个注册表时很有用。

tap 的信任级别

新 tap 默认分配 community 信任。从它们安装的技能会经过标准安全扫描,并在首次安装时显示第三方警告面板。如果你的组织或广泛信任的来源应该获得更高的信任,请将其仓库添加到 tools/skills_hub.py 中的 TRUSTED_REPOS(需要 Hermes 核心 PR)。

tap 管理

bash
hermes skills tap list                                # 显示所有配置的 tap
hermes skills tap add myorg/skills-repo               # 添加(默认路径:skills/)
hermes skills tap remove myorg/skills-repo            # 移除

在运行会话中:

text
/skills tap list
/skills tap add myorg/skills-repo
/skills tap remove myorg/skills-repo

Tap 存储在 ~/.hermes/.hub/taps.json 中(按需创建)。

捆绑技能更新(hermes skills reset

Hermes 在仓库的 skills/ 中附带了一组捆绑技能。在安装时和每次 hermes update 时,同步过程会将这些技能复制到 ~/.hermes/skills/ 中,并在 ~/.hermes/skills/.bundled_manifest 中记录一个清单,将每个技能名称映射到同步时的内容哈希(原始哈希)。

在每次同步时,Hermes 会重新计算本地副本的哈希值,并与原始哈希值进行比较:

  • 未更改 → 可以安全地拉取上游更改,复制新的捆绑版本,记录新的原始哈希。
  • 已更改 → 被视为用户修改并永远跳过,因此你的编辑永远不会被覆盖。

这种保护很好,但有一个尖锐的边缘情况。如果你编辑了一个捆绑技能,然后后来想要放弃你的更改并通过从 ~/.hermes/hermes-agent/skills/ 复制粘贴回到捆绑版本,清单仍然持有上次成功同步时的原始哈希。你新复制粘贴的内容(当前捆绑哈希)不会匹配那个旧的原始哈希,因此同步会继续将其标记为用户修改。

hermes skills reset 是逃生舱:

bash
## 安全:清除此技能的清单条目。你的当前副本被保留,
## 但下一次同步会以它为基础重新基线化,以便将来的更新正常工作。
hermes skills reset google-workspace
## 完全恢复:同时删除你的本地副本并重新复制当前的捆绑
## 版本。当你想要恢复原始上游技能时使用此选项。
hermes skills reset google-workspace --restore
## 非交互式(例如在脚本或 TUI 模式中)——跳过 --restore 确认。
hermes skills reset google-workspace --restore --yes

相同的命令在聊天中作为斜杠命令工作:

text
/skills reset google-workspace
/skills reset google-workspace --restore

注意——配置文件

每个配置文件在其自己的 HERMES_HOME 下都有自己的 .bundled_manifest,因此 hermes -p coder skills reset <name> 仅影响该配置文件。

斜杠命令(聊天内)

所有相同的命令都可以使用 /skills

text
/skills browse
/skills search react --source skills-sh
/skills search https://mintlify.com/docs --source well-known
/skills inspect skills-sh/vercel-labs/json-render/json-render-react
/skills install openai/skills/skill-creator --force
/skills check
/skills update
/skills reset google-workspace
/skills list

官方可选技能仍然使用像 official/security/1passwordofficial/migration/openclaw-migration 这样的标识符。


分享: