把你手写的技能锁上:Hermes 现在能拦住 agent 改它,连 --yolo 也不行


你花了一个下午,把团队踩过的坑写成一份部署 runbook:先备份、再切流、回滚窗口只有五分钟、哪些表必须最后迁移。它跑得很好,agent 每次上线都照着做。

然后某天它“自我改进”了一次。curator 觉得这份技能太啰嗦,把步骤合并了;自改进审阅又补了一段“更高效的顺序”。等你发现的时候,“先备份”这一步已经被挪到了切流之后——而这次上线已经跑完了。

问题不在于 agent 学不会规矩,而在于你写的技能和 agent 写的技能放在同一个池子里,权限也一样。Hermes 一直有 pin(钉住),但 pin 只挡住删除和自动归档,编辑和打补丁照旧放行。v0.22.6 补上了真正的那把锁。

pin 和 lock 的区别,一句话说清

  • pin:curator 不再自动把它标记为过时或归档,agent 也不能删它;但改内容还是可以。
  • lock:agent 完全不能改它,同时技能仍然可读、出现在技能索引里、能被自动加载、正常使用——一分不少。

换句话说,pin 是“别扔了它”,lock 是“别动它”。

怎么锁

hermes curator lock <skill>      # 锁上
hermes curator unlock <skill>    # 解开
hermes curator status            # 看当前锁了哪些

桌面端不用敲命令:打开 Capabilities → Skills,选中技能,用它旁边的锁开关。

锁记录存在当前 profile 的 skills/.usage.json 里,就是 pinned 用的那个 sidecar 文件,字段是 "locked": true。这意味着它是按 profile 隔离的:

hermes -p work curator lock deploy-runbook    # 只锁 work 这个 profile 里的副本

能锁的范围很宽:手写的、agent 自己创建的、内置的、从 hub 装的,只要这个 profile 里能解析到这个技能名就能锁。反过来,lock 会拒绝解析不到的名字——所以打错字不会凭空造出一条记录。

锁上之后,哪些路被堵死

被锁的技能,每一条 agent 写入路径都会被拒,覆盖范围比很多人预期的广:

  • skill_manage 的所有变更动作(新建、编辑、打补丁、删除);
  • write_file / patch 指向该技能目录内任何路径的写入;
  • terminal 里任何会写进去的命令——包括重定向、tee、cp/mv/rm、sed -i 这类原地编辑、在技能目录里执行 git 变更操作、先 cd 进去再动手、以及内联解释器代码里点名那个路径的写法。

这些限制在 --yolo 模式下同样生效,而且覆盖正常回合、cron 任务、子代理、后台自改进审阅和 curator 流程本身。curator 也不会归档一个被锁的技能。

还有一个细节值得单独说:agent 不能自己解锁。它执行 hermes curator unlock 会被终端层直接拒绝;只要还有技能处于锁定状态,锁记录文件本身也受同样保护。被拒的时候它会被告知:把你想要的改动描述出来,让用户决定。

而你自己的编辑完全不受影响:用编辑器改文件、用桌面的技能编辑器改、用命令行改,都可以。锁约束的是 agent,不是你。

锁不是哪些东西

三点边界,官方文档写得很直接:

  1. 它只约束 agent,不约束你自己,所以别指望它防住手动误操作。
  2. 它是一次策略检查,不是沙箱:终端检查读的是命令的写入目标(重定向、tee、cp/mv/rm、sed -i、技能树里的 git 操作、cd、内联代码里点名的路径)。如果一个脚本通过自己的逻辑去写那个目录,检查看不到。想真正隔离,还是要靠容器或受限终端后端。
  3. .usage.json 损坏时的行为是“关键路径失败关闭,日常路径继续”:后台那些会改技能的流程(自改进审阅、curator)会被拒绝执行,而正常对话不受影响——这样一个坏文件不会把所有技能编辑一起冻住。修好文件,或者 hermes curator unlock <skill> 重写它。

什么时候值得用

  • 生产 runbook、合规流程、事故处置手册:错一步代价很大的技能,锁上;
  • 你自己维护的团队技能库:你希望 agent 用它,但不希望它“顺手优化”;
  • 第三方 skill 刚审完:先用一阵子,确认行为符合预期之后再决定要不要放开。

反过来说,如果你就是希望 agent 帮你迭代某个技能,别锁它,改用 pin 保护它不被归档即可。

关于技能信任边界,站内还有两篇可以接着读:技能守卫的盲区 讲的是“检查器本身漏掉什么”,技能完整性与供应链投毒 讲的是装进来的技能怎么被掉包。锁解决的是第三个问题:它装好之后,谁能改它。

这个能力在 v0.22.6 这个 tag 里,升级后即可使用;hermes curator status 会直接列出当前所有被锁的技能名。