我是小虎,科技出版社《AI超级个体——一人公司完全指南》作者,擅长AI编程、获客自动化,专注于AI培训、个人IP打造、一人公司、创业成长。
说出来你可能不信,我第一次给 DeepSeek 新出的 Harness 写插件,从头到尾没超过半小时。
而且写出来的那个插件,现在每天替我把第二天的工作草稿打好。
大家好,我是小虎。

最近 DeepSeek 开源了一个叫 Harness 的东西,圈里人叫它「黑色鲸鱼」。
它不是新模型,是给大模型套在外面的「执行层」,一句话公式,Model 加 Harness 等于 Agent。
模型负责想,Harness 负责干。发布才一周,GitHub 上打着 dsh-plugin 标签的社区插件已经 900 多个。
我跟你说,这玩意最狠的一句口号就四个字,一切皆插件。模型、工具、界面、会话记录,全都是插件拼起来的。

你不用改它一行源码,想加什么能力就写一个插件插进去。
但我发现一个怪现象。大多数人拿到 Harness,只会像个聊天机器人一样跟它对话。
这就好比你买了台数控机床,天天拿它当锤子敲钉子。真正会玩的人,是给自己写插件,把重复活彻底外包出去。
今天这篇,我就手把手带你写一个。不讲虚的,写完你就能让 AI 多长出一种本领。
先把工作台跑起来
写插件之前,得先把 Harness 本身跑起来。
它需要 Node.js 22.19 以上版本,这个你本机大概率已经有了,命令行敲一下 node --version 看看,22 开头就行。
起来就一行命令。
npx @deepseek-ai/dsh web跑完浏览器会自动打开 http://127.0.0.1:3080,一个本地网页界面,你的数据全在你自己机器上。
第一次打开会让你填 DeepSeek 的 API Key,去 platform.deepseek.com 注册一个就有。填完就能用了。
看到这个网页界面,说明工作台立起来了。接下来才是重头戏。
一切皆插件,到底怎么插
Harness 底层用的是一套叫 Cordis 的插件框架。
它的核心思想特别简单,所有能力都是「插件」,插件就是一个普通的 TypeScript 文件,导出几个固定的东西。

我第一次看源码的时候有点通了。原来官方自己那 195 个包,从头到尾全都是插件,包括那个跑命令的工具、那个存会话记录的功能。
你写的插件和它们地位完全一样,没有二等公民。
一个最小插件长这样。
// my-plugin.ts
import { defineTool } from '@deepseek-ai/dsh-tools'
export const name = 'my-plugin'
export const inject = ['tools']
export function apply(ctx) {
ctx.tools.register(defineTool({
name: 'hello_world',
description: '向某人打招呼,用来验证插件是否加载成功',
parameters: {
who: { type: 'string', required: true, description: '要打招呼的人' }
},
output: {
schema: { type: 'object', additionalProperties: false, properties: { message: { type: 'string', required: true } } },
render: (_args, value) => [{ type: 'text', text: value.message }]
},
async execute(args) {
return { message: `你好,${args.who},插件加载成功` }
}
}))
}这段代码干了一件事,往 Harness 里注册了一个叫 hello_world 的工具。AI 在对话里就能调用它了。
注意几个坑,都是我踩过的。export 只能用具名导出,千万别写 export default,写了注入声明就会被悄悄丢掉,插件看着加载了其实不干活,还不报错,最坑。
parameters 里对象类型的输出,schema 必须写 additionalProperties: false,不然注册直接失败。
inject: ['tools'] 的意思是等工具注册表就绪了再执行,顺序不能乱。
一行配置把它挂上去
光有插件文件不够,得告诉 Harness 把它挂进来。新建一个 cordis.yml 文件。
- insert:
- id: my-plugin
name: '/绝对路径/你的目录/my-plugin.ts'这里有个细节,路径必须写绝对路径,不能写相对路径,这是 Cordis 的脾气。
然后带补丁启动。
pnpm dsh web --patch ./cordis.yml回到网页界面,在对话里说「用 hello_world 跟小虎打个招呼」。
如果它回你「你好,小虎,插件加载成功」,成了。你的第一个插件活了。
说真的,我第一次看到它真的调用了我写的工具,那种感觉挺奇妙。
不是又学了个 API,是给 AI 接了一根自己的神经。
来点真格的,自动写日报
hello 只能验证加载,没啥用。我给你看我真正在用的那个,自动生成工作日报草稿。
痛点很实在。每天下班前憋日报,每周五花一小时把五篇日报翻成周报。这活重复、机械、还容易漏。

我就写了个插件,让它读我工作区里的记录,按模板生成第二天的日报草稿。
核心思路和上面一样,只是工具里干的事更具体。
import { defineTool } from '@deepseek-ai/dsh-tools'
import { readFileSync, writeFileSync, existsSync } from 'fs'
export const name = 'daily-draft'
export const inject = ['tools']
export function apply(ctx) {
ctx.tools.register(defineTool({
name: 'gen_daily_draft',
description: '读取昨天的待办,按模板生成今天的日报草稿',
parameters: {
workspace: { type: 'string', required: true, description: '工作区目录绝对路径' }
},
output: { schema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string', required: true } } },
render: (_a, v) => [{ type: 'text', text: `草稿已生成,${v.path}` }] },
async execute(args) {
const todoPath = `${args.workspace}/todo.md`
const draft = existsSync(todoPath)
? `【草稿待确认】\n昨日待办:\n${readFileSync(todoPath, 'utf-8')}\n(请核对当天实际进展后填写)`
: '【草稿待确认】今日暂无昨日待办记录,请补充。'
const out = `${args.workspace}/daily-$(date +%F).md`
writeFileSync(out, draft)
return { path: out }
}
}))
}这个插件做了一件关键的事,它只生成草稿,明确标了「待确认」,绝不替你编造当天没发生的事。
这点特别重要,AI 最会一本正经地编内容,得用规则把它框住。
我顺手说个金句,这是我写这个插件时最大的体会。
真正的自动化不是你学会了所有工具,而是你只需要说一句话,工具自己串起来干活。
想发给别人用,打个包
自己本地改着玩用绝对路径就行。想发布到社区让别人一键安装,得打个包。
package.json 里加一段声明。
{
"name": "dsh-daily-draft",
"type": "module",
"main": "my-plugin.ts",
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
}cordis.patch.yml 里写挂载信息,然后用 dsh plugin --profile web add github:你的账号/你的仓库,别人就能装了。
还有个偷懒的办法。现在流行 Vibe Coding,你直接把插件规范丢给 Cursor 或者任何编程工具,说「帮我做个插件,功能是某某某」,它秒级就能吐出完整的源文件和配置文件。
DSH 的插件结构天生适合 AI 生成,一个单文件加一个 apply 入口加一份 YAML,清爽得很。
几个真话
有,说实话。Harness 现在还是 0.1.0 的预发布版,官方自己说接口还会变,今天能跑明天可能要改。别急着上生产环境,先尝鲜。
还有,插件本质是能在你电脑上跑的代码。别装来路不明的插件,来源不清的等于把家门钥匙给别人。只装官方或者高星的。
另外,写插件要会一点点 TypeScript。如果你连 JavaScript 都没碰过,上手会有个坡度。但说真的,比起学一门完整编程语言,这坡度温柔多了。
写在最后

DeepSeek 把执行层这扇门打开了,普通人能玩的空间比想象中大。
你不需要成为程序员,只需要想清楚,哪件重复活值得外包给一个自己写的插件。
我自己的下一步,是把日报插件再串一个周报插件,周五自动汇总。慢慢来,先把第一个 hello 跑通。
我还在持续更新短视频自动化的系列内容。想深入学习这块的话,后台私信“加入”,加入 小虎 和 华峰老师 联合创办的 AI群星会 星球。

如果有收获,请点赞、转发、收藏,我主页还有很多AI、agent、skill、一人公司、自媒体相关的好文。
夜雨聆风