把你刚调通的一套流程做成 DeepSeek Harness 技能

七步截图实测:从你终于调顺的那个操作,到一个会出现在会话技能目录里的 SKILL.md——文件里该写什么、不该写什么,以及怎么证明它真的拦得住东西。

最近更新: 2026-09-22

DeepSeek Harness 编辑器打开 .agents/skills/commit 下的 SKILL.md,左栏是 name、description、whenToUse 的 frontmatter,右边是渲染后的预览
三个 frontmatter 字段决定了模型会不会去读文件剩下的部分。

skill 是 DeepSeek Harness 里最便宜的可复用物件:项目里一个 Markdown 文件,情况对上了 agent 就去读它。你不用编译、不用接线、不用重启任何东西。也正因为门槛这么低,难点从来不是把它创建出来,而是知道什么该写进这个文件、以及怎么判断它到底有没有在起作用。

本页跟着一次实录里的 Skills 章节走(来源见上方与文末署名),整条创作回路都在镜头前发生:用大白话要一个 commit skill、打开生成的 SKILL.md 逐行读、把其中唯一一句靠判断的步骤改写成脚本、最后拿一个故意埋进仓库的假密钥验收。所有截图都出自这一章。安装别人写好的 skill、以及该装哪几个,是另外两件事,文末都有链接。

记住这三点

  • ▸不用先手写文件。在会话里把流程描述清楚,agent 会写出 .agents/skills/<name>/SKILL.md,并且立刻出现在当前会话的技能目录里——不需要重启。
  • ▸一个 skill 就是 frontmatter 加正文:name、description、whenToUse 决定模型会不会去读后面那部分,正文应当是带准确命令的编号步骤,最后再来一段 Rules 写明绝对不行的事。
  • ▸任何写成判断句的步骤——看着不安全就拦下来——都该换成带退出码的脚本,让同一个仓库状态永远给出同一个结论。

七步

技能文件在哪

  1. 1

    先看项目树——.agents 就在仓库根目录

    动手之前先看清楚一个项目级 skill 会落在哪里。harness 的文件树在仓库根目录列出 .agents/、.obsidian/、vault/、spec.md、AGENTS.md 和 README.md,内置编辑器打开其中任何一个文件时,右边就是实时的 Markdown 预览。skill 就是这棵树里的一个文件:跟着仓库一起走版本,你随时能改——它不是藏在某层菜单里的一个开关。

    $.agents/skills/<skill-name>/SKILL.md
    DeepSeek Harness 的项目文件树,仓库根目录的 .agents 文件夹和 spec.md、AGENTS.md、README.md 并列,项目级 skill 就存在这里
    skill 就是仓库里的文件——用的就是你平时已经在改的那棵树。看视频 17:06
  2. 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.
    DeepSeek Harness 编辑器打开 .agents/skills/commit 下的 SKILL.md,左栏是 name、description、whenToUse 的 frontmatter,右边是渲染后的预览
    三个 frontmatter 字段决定了模型会不会去读文件剩下的部分。看视频 17:14

里面该写什么

  1. 3

    正文写成编号步骤,后面再补一段 Rules

    生成的文件是六步——查状态、快速体检、全部暂存、写消息、提交、复核——每一步一个加粗小标题,并把命令原样写出来(git status、git add -A、git commit -m、git log -1 --oneline),后面跟一段 Rules 收住那些绝对不行的事:不署名、只用简洁要点、不许 push 也不许部署。正是这个结构让 skill 可审阅。而第 2 步值得盯一下:扫一遍 status,把明显不该提交的东西挑出来,看着不安全就报给用户——这是一句用英文写成的判断。

    DeepSeek Harness 里的 SKILL.md 预览,生成出来的 commit skill 第二条步骤被选中,也就是让模型扫 git status 并自己判断什么算不安全的那一步
    编号步骤是契约;被选中的那一行仍然交给判断。看视频 18:18
  2. 4

    把含糊的英文改写成确定性脚本

    解法是再发一条消息,把那句有问题的步骤原话引用出来,然后要求把它转换成确定性脚本。agent 会在同一个 skill 目录里加上 scripts/check-commit-safety.sh,并修改 SKILL.md,让第 2 步变成运行脚本而不是自己拿主意——同一个仓库状态进去,同一个结论出来。机器能定的事,不该留给模型对一句话的理解。

    $please convert to deterministic script
    DeepSeek Harness 输入框里那句要求把 skill 体检步骤改成确定性脚本的消息,上面原样引用着改动前的英文步骤
    先把那句写坏的话引用出来,再要求用代码代替观点。看视频 18:34

先验证再依赖

  1. 5

    埋一个坏文件进去,顺便看看目录树

    要测一条安全规则,就得给它一个它必须拒绝的东西。于是在项目根目录新建 .env,第一行敲一个假密码,此时文件树里同时能看到 skill 自己的 scripts/ 目录和这个新的 .env——这也是你会用来改它们的同一个视图。顺便说,脚本一旦进了 skill 目录,这也是最省事的一种确认它到底装了什么的方式。

    $password=secret
    DeepSeek Harness 编辑器里新建的 .env 文件,第一行是一个假密码,文件树里它和 commit skill 的 scripts 目录并列
    测安全规则的办法,就是喂给它一个必须拒绝的东西。看视频 19:26
  2. 6

    读结论,别读气氛

    脚本会把它查到的东西打印出来:Safety check FLAGGED 2 item(s) among 7 would-be-committed file(s),其中 .env 被列了两次——一次命中排除名单的模式,一次被识别为内容里疑似密钥。决定权在人:.env 被写进新建的 .gitignore,复检退出码归 0,提交落下来,带着四个动词开头的要点和零 AI 署名。它下面那份 Verified 清单,就是这个 skill 的验收标准:工作树干净、消息里没有 AI 署名、没有 push。

    DeepSeek Harness 会话输出里,commit skill 的安全检查两次拦下埋进去的 .env,随后的提交消息是四条要点且不含任何 AI 署名
    结论会点名文件和命中的规则,这才是可以被审阅的东西。看视频 19:44
  3. 7

    把你这次做的决定写回 skill

    agent 注意到自己停下来等人拍板了,于是提议把这种处理变成默认行为:以后你说 ignore it,它就把被标记的文件自动写进 .gitignore 并提交其余部分。回答是 yes do this。这是最后一步创作,也是最常被跳过的一步——你这次临时做的判断进了文件,下一次会话就不需要你在场了。

    $yes do this
    在 DeepSeek Harness 会话里敲下的追加回复,要求把自动忽略被标记文件这件事固化成 commit skill 的默认处理方式
    最后一步创作,是把你这次的判断写回 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 章节,为去掉讲解者的摄像头浮窗做过裁剪,并注明出处。每一步都深链回它来源的精确秒数;结构划分、风险提示和结论都是本页自己写的。

DSH Plugins 是独立的 DeepSeek Harness 插件市场,与 DeepSeek 官方无关,也不代表官方背书。第三方插件未经安全审计,安装前请审查源码。

每周获取最新的 DeepSeek Harness 插件,绝不滥发。