把技能直接放进仓库:项目级 Skills 与信任门禁

你刚 clone 一个新仓库,想让 agent 一进来就懂这个仓库的规矩:部署用哪个命令、代码风格怎么检查、测试怎么跑。以前只有两条路:把技能塞进全局目录(换台机器就丢了),或者祈祷 AGENTS.md 写得够全。现在有了第三条路——技能可以直接住在仓库里,跟着仓库走,谁 clone 谁用。Hermes 刚合并的这个功能叫“项目级技能”(project-local skills),它给仓库开了一个专属的技能层,还配了一把信任锁。
先说结论:在 git 仓库根目录放上技能目录,在这个仓库里启动的 Hermes 会话会自动把它们当作最高优先级的技能层;但出于安全考虑,默认不会加载,需要你显式信任这个仓库(PR #88566,2026-08-17 合并)。
仓库自带技能:.hermes/skills/ 与 .agents/skills/
把技能放进仓库很简单,两种目录任选:
myproject/
├── .hermes/skills/ # Hermes 专属位置
│ ├── deploy.md # 部署流程技能
│ └── api-conventions.md # API 编写规范
├── .agents/skills/ # 跨工具约定(和其他 agent CLI 共用)
│ └── review.md
└── AGENTS.md
“项目根”是往上找到的第一个含 .git 的目录——git worktree 和 submodule 也算。所以你在子目录里启动 Hermes,它照样能发现仓库根部的技能。
信任门禁:hermes skills trust
技能是 agent 会照着执行的“操作说明”,所以 Hermes 不会傻乎乎地自动加载任意 clone 来的仓库里的技能——这是防提示注入的第一道闸。第一次在一个带项目技能的仓库里启动时,你会看到一行提示:
◆ 3 project skill(s) found in /home/you/myproject but not loaded — run `hermes skills trust` to enable them.
在仓库里(或指定路径)执行一次信任即可:
hermes skills trust # 信任当前仓库
hermes skills trust ~/myproject # 或显式指定
hermes skills untrust # 撤销信任
信任的根目录存在 ~/.hermes/config.yaml 的 skills.trusted_project_dirs 里。想彻底关掉这个功能(不扫描、不提示),把 skills.project_discovery 设为 false:
skills:
project_discovery: true # 默认开启
trusted_project_dirs: [] # 由 trust/untrust 命令维护
优先级:项目技能 > 本地 > external_dirs
项目技能是整个技能体系里最高的一层,顺序是:项目 → 本地(~/.hermes/skills/)→ external_dirs。这意味着仓库里一个叫 deploy 的技能,在这个仓库内的会话里会盖掉你全局同名技能——这正是卖点:仓库自带技能在自己的地盘说了算,又完全不动你的全局配置。在 agent 的技能索引里,项目技能会打上 [project] 标记,来源一目了然。
和外部目录一样,项目技能目录被视为“仓库所有”:自动技能管理(curator)永远不会去改它们,agent 新建的技能始终落到 ~/.hermes/skills/。
安全边界
信任门禁是真正的加载闸门,不是摆设。未被信任的仓库对技能索引、skills_list、skill_view、斜杠命令和容器挂载贡献为零——唯一的暴露面就是那一行提示。只有信任之后,仓库技能才会进入 agent 的视野。
顺带一提:在 Docker / Modal 后端里跑 agent 时,被信任的项目技能目录会以 project_skills/<idx> 命名空间挂载进容器,隔离同样生效。项目技能的机制和 AGENTS.md 各管一摊:AGENTS.md 描述“这个仓库是什么”,项目技能规定“这个仓库的活怎么干”。想了解技能体系全景,可以看我们之前的8 个最实用内置技能和技能组合玩法;仓库内约定类的内容,也可以参考AGENTS.md 目录链文章。
什么时候用
最合适的场景是团队仓库:把部署流程、提交规范、领域知识写成技能放进仓库,任何成员(或 CI)clone 下来、hermes skills trust 一次,agent 立刻拥有同样的“团队记忆”。个人项目也能用——下次重开一个老仓库,agent 不会再一脸懵。
升级到最新版(hermes update)即可体验,功能已经合并到 main。