把你刚调通的一套流程做成 DeepSeek Harness 技能
七步截图实测:从你终于调顺的那个操作,到一个会出现在会话技能目录里的 SKILL.md——文件里该写什么、不该写什么,以及怎么证明它真的拦得住东西。
最近更新: 2026-09-22

skill 是 DeepSeek Harness 里最便宜的可复用物件:项目里一个 Markdown 文件,情况对上了 agent 就去读它。你不用编译、不用接线、不用重启任何东西。也正因为门槛这么低,难点从来不是把它创建出来,而是知道什么该写进这个文件、以及怎么判断它到底有没有在起作用。
本页跟着一次实录里的 Skills 章节走(来源见上方与文末署名),整条创作回路都在镜头前发生:用大白话要一个 commit skill、打开生成的 SKILL.md 逐行读、把其中唯一一句靠判断的步骤改写成脚本、最后拿一个故意埋进仓库的假密钥验收。所有截图都出自这一章。安装别人写好的 skill、以及该装哪几个,是另外两件事,文末都有链接。
记住这三点
- ▸不用先手写文件。在会话里把流程描述清楚,agent 会写出 .agents/skills/<name>/SKILL.md,并且立刻出现在当前会话的技能目录里——不需要重启。
- ▸一个 skill 就是 frontmatter 加正文:name、description、whenToUse 决定模型会不会去读后面那部分,正文应当是带准确命令的编号步骤,最后再来一段 Rules 写明绝对不行的事。
- ▸任何写成判断句的步骤——看着不安全就拦下来——都该换成带退出码的脚本,让同一个仓库状态永远给出同一个结论。
七步
技能文件在哪
- 1
先看项目树——.agents 就在仓库根目录
动手之前先看清楚一个项目级 skill 会落在哪里。harness 的文件树在仓库根目录列出 .agents/、.obsidian/、vault/、spec.md、AGENTS.md 和 README.md,内置编辑器打开其中任何一个文件时,右边就是实时的 Markdown 预览。skill 就是这棵树里的一个文件:跟着仓库一起走版本,你随时能改——它不是藏在某层菜单里的一个开关。
$.agents/skills/<skill-name>/SKILL.md
skill 就是仓库里的文件——用的就是你平时已经在改的那棵树。看视频 17:06 - 2
先开口要这个 skill,再打开它写出来的 SKILL.md
实录里那段需求就一段话:做一个提交用的 skill,不要出现任何 AI 署名的痕迹,commit message 用简洁的要点列表,快速检查有没有不该提交的东西,但默认把所有工作区文件都提交、目标是让工作目录干净,并且不许 push 也不许部署。于是 agent 写出 .agents/skills/commit/SKILL.md。打开它就能看到所有 skill 共有的形状:一个 name,一句说明它会做什么、也说明它拒绝做什么的 description,还有一行 whenToUse,列的是用户真实会说出来的那些说法。
$name: commit$description: Make a git commit of all working changes with a concise bulleted message; never pushes or deploys.$whenToUse: Use when the user asks to commit changes, make a commit, check in work, or wrap up a task.
三个 frontmatter 字段决定了模型会不会去读文件剩下的部分。看视频 17:14
里面该写什么
- 3
正文写成编号步骤,后面再补一段 Rules
生成的文件是六步——查状态、快速体检、全部暂存、写消息、提交、复核——每一步一个加粗小标题,并把命令原样写出来(git status、git add -A、git commit -m、git log -1 --oneline),后面跟一段 Rules 收住那些绝对不行的事:不署名、只用简洁要点、不许 push 也不许部署。正是这个结构让 skill 可审阅。而第 2 步值得盯一下:扫一遍 status,把明显不该提交的东西挑出来,看着不安全就报给用户——这是一句用英文写成的判断。

编号步骤是契约;被选中的那一行仍然交给判断。看视频 18:18 - 4
把含糊的英文改写成确定性脚本
解法是再发一条消息,把那句有问题的步骤原话引用出来,然后要求把它转换成确定性脚本。agent 会在同一个 skill 目录里加上 scripts/check-commit-safety.sh,并修改 SKILL.md,让第 2 步变成运行脚本而不是自己拿主意——同一个仓库状态进去,同一个结论出来。机器能定的事,不该留给模型对一句话的理解。
$please convert to deterministic script
先把那句写坏的话引用出来,再要求用代码代替观点。看视频 18:34
先验证再依赖
- 5
埋一个坏文件进去,顺便看看目录树
要测一条安全规则,就得给它一个它必须拒绝的东西。于是在项目根目录新建 .env,第一行敲一个假密码,此时文件树里同时能看到 skill 自己的 scripts/ 目录和这个新的 .env——这也是你会用来改它们的同一个视图。顺便说,脚本一旦进了 skill 目录,这也是最省事的一种确认它到底装了什么的方式。
$password=secret
测安全规则的办法,就是喂给它一个必须拒绝的东西。看视频 19:26 - 6
读结论,别读气氛
脚本会把它查到的东西打印出来:Safety check FLAGGED 2 item(s) among 7 would-be-committed file(s),其中 .env 被列了两次——一次命中排除名单的模式,一次被识别为内容里疑似密钥。决定权在人:.env 被写进新建的 .gitignore,复检退出码归 0,提交落下来,带着四个动词开头的要点和零 AI 署名。它下面那份 Verified 清单,就是这个 skill 的验收标准:工作树干净、消息里没有 AI 署名、没有 push。

结论会点名文件和命中的规则,这才是可以被审阅的东西。看视频 19:44 - 7
把你这次做的决定写回 skill
agent 注意到自己停下来等人拍板了,于是提议把这种处理变成默认行为:以后你说 ignore it,它就把被标记的文件自动写进 .gitignore 并提交其余部分。回答是 yes do this。这是最后一步创作,也是最常被跳过的一步——你这次临时做的判断进了文件,下一次会话就不需要你在场了。
$yes do this
最后一步创作,是把你这次的判断写回 skill。看视频 20:00
技能不是插件
两者都能靠一句话生成,也都会改变 agent 的行为,但它们是不同的东西,保证程度也完全不同。skill 是一段 Markdown,模型觉得情境相关时才会去读——它永远只能给建议,可能被误读,也可能被跳过。插件是装进 harness 的一个包,钩在运行时上:它能加工具、改界面,也能不管模型同不同意都把某条规则执行下去。如果这条规则每一次都必须成立,去做插件;如果这只是你每个会话都要重新解释一遍的流程,那就写 skill。同一个 commit 例子的逐项对比,单独写在 插件与技能的区别.
自己写 DeepSeek Harness 技能:常见问题
第一次动手写 SKILL.md 的人会问到的那些问题。
DeepSeek Harness 的技能文件放在哪里?
放在项目里:.agents/skills/<skill-name>/SKILL.md。实录里那句是念出来的——skill 从项目根目录的这个路径被发现,级别是项目作用域——那次生成的 commit skill 落在 .agents/skills/commit/SKILL.md,它的辅助脚本就在旁边,.agents/skills/commit/scripts/check-commit-safety.sh。
新增技能之后要重启 harness 吗?
不用。会话里它自己的汇报就是 skill 已经生效、立刻出现在本次会话的技能目录中,而回复流里在那次写文件之后紧跟着一条 Context injection · skill-catalog——文件一落地,目录就重读了一遍。这正好和装插件相反:插件要重启服务并硬刷新页面。
name、description、whenToUse 分别该写什么?
name 是你调用它用的标识符——commit。description 用一句话说清它做什么、拒绝做什么:Make a git commit of all working changes with a concise bulleted message; never pushes or deploys. whenToUse 是触发句,写的是用户真实会打的措辞:asks to commit changes、make a commit、check in work、wrap up a task。这三个字段是用来判断相关性的,所以要写给模型看,而不是写给翻目录的人看。
我能自己手写 SKILL.md,而不是让 agent 生成吗?
可以——实录里的原话就是 skill 一点都不神秘,它们本质就是 Markdown 文件,仓库里已有的技能目录只要格式对得上就能直接读,格式不一样就给点指示或转换一下。让 agent 写更快,而且通常更周全:出来的东西自带编号步骤、原样引用的命令和一段规则块。不管哪种方式,事后都要把文件打开读一遍,因为那个文件就是契约。
什么样的步骤应该改成脚本?
凡是机器能判的是/否:密钥、文件体积、路径模式,任何布尔性质的判断。那次实录里,体检这一步从扫一遍 status 看有没有不安全的东西,变成一个 exit 0 表示安全、exit 1 表示命中、exit 2 表示环境错误的脚本;SKILL.md 同时被改成以脚本结论为准,只有用户可以推翻某一条命中。判断标准就一句:同样的输入必须永远给出同样的输出。
我怎么确认 skill 真的被触发了?
看会话里两处。目录变化时回复流里会出现一行 Context injection · skill-catalog;agent 写入或读取文件时,那条回复底部的产物标签会点名 SKILL.md。至于行为对不对——喂一个应该踩雷的输入进去,比如带假 key 的 .env——然后确认输出里既点到了文件名,也点到了命中它的那条规则。只会说「我已经遵守了」的 skill,什么都没证明。
相关攻略
装别人写的 skill、挑值得装的 skill,以及那个最容易被和 skill 混为一谈的东西。
来源与署名
本页所有截图都取自上方与文末链接那条实录的 Skills 章节,为去掉讲解者的摄像头浮窗做过裁剪,并注明出处。每一步都深链回它来源的精确秒数;结构划分、风险提示和结论都是本页自己写的。
