
DeepSeek Harness 上手全攻略:装好、玩熟,再让它自己长出新本事
你肯定也遇到过这种憋屈:AI 聊天工具能说会道,但真要它动手——改个文件、跑条命令、查点资料——它就只能给你一段代码,剩下全得你自己来。DeepSeek Harness(下面我叫它 DSH)的核心理念就是解决这个困境:给你一个 AI,它能真刀真枪地操作电脑,而且最绝的是,它能当场给自己加新能力。你今天跟它聊着聊着,它就能在网页里给你长出一个新面板、新工具,你点一下批准,它立刻就能用。
这篇文章是写给完全没接触过的人的。我会把装它、启动它、怎么玩、玩什么、它到底牛在哪,一五一十全讲清楚。里面的命令我都在自己机器上跑过,你放心照着来。
先搞懂三个词
DSH 底层是一套叫 Cordis 的框架,核心思想特别朴素:系统里每一样能力,都是一行插件。工具是一行插件,服务是一行插件,AI 的提示词是一行插件,界面上一个按钮也是一行插件。所有插件写在一份叫 cordis.yml 的清单里,启动时按顺序拼装起来。
你可以把它想成一台乐高机器:功能全是拼上去的积木,清单文件就是说明书。这台机器之所以能”自我改造”,就是因为积木本身可读、可改、可拆。
积木分两层,记住这个,后面所有玩法都通了:
- 宿主层:全系统公用的东西,比如沙箱、审批、模型路由、子代理。动这一层,所有会话一起变。
- 预设层:单个会话独享的东西,比如这个会话的 AI 用什么工具、什么性格、什么开场白。
判断一样东西该放哪层,就问一句:还有别的会话会用吗? 会,放宿主层;不会,放进预设。
还有两个词要认识:会话就是一次对话,各自有各自的记录;预设是新建会话时挑的那份”组装方案”。有件事必须提前说:预设只在会话创建的那一刻定死,中途换不了。理由很实在——这段对话的历史是用那套工具聊出来的,换了工具,历史就没法重放了。从技术底层看更严格: 预设决定了 System Prompt 和 Tools 的 JSON Schema 签名,一旦历史消息里包含了旧工具的 tool_calls 记录,中途切换新预设会导致后续请求的校验失败(轻则报错,重则整个上下文无法继续解析)。系统自带四个预设:standard(标准)、code(编程)、minimal(极简)、cordis(创造模式,最值得玩,后面细讲)。
怎么装
需要两样东西:一台装了 Node.js(建议 18 或更新)的电脑,和一个模型 API 密钥(DeepSeek 官方 API 的,或者其他兼容 OpenAI 协议的都行)。
装法有三种:
最省事:一行命令,连装都不用装
1 | npx --yes @deepseek-ai/dsh web |
(--yes 参数自动确认安装包,兼容性比 -y 更好,老版本 Node 也能识别。)
装到全局,以后直接敲 dsh
1 | npm install -g @deepseek-ai/dsh |
从源码构建(想改源码、想贡献代码才用)
1 | git clone `https://github.com/deepseek-ai/deepseek-harness` |
提醒一句:仓库里的 apps/web 不是独立应用,单独启动不了,必须通过 dsh 命令启动(它需要一个叫 window.__DSH_BOOT__ 的启动引导,只有 dsh 会注入)。别在这上面白费功夫。
第一次启动后,程序会在用户目录下建一个 .dsh 文件夹(Windows 是 C:\Users\你\.dsh),结构大概是这样:
1 | ~/.dsh/ |
模型密钥填在 .credentials.yaml。DSH 的模型服务是个”适配器注册表”,可以接多家模型服务商,填好密钥就能开聊。
怎么启动
一句话:dsh web,然后浏览器打开 http://127.0.0.1:3080。
再给你一份命令速查,以后都用得上:
1 | dsh web # 启动网页界面 |
先当普通工作台用
装好之后,最基础的玩法就是把它当成一个”会动手的 AI 工作台”。左边栏管会话,可以按工作区(也就是目录)分门别类。跟它说话,它能:
- 动文件:读、写、搜索,改代码改配置都行;
- 跑命令:执行 shell 或 PowerShell 命令,受沙箱管着,不会乱来;
- 上网:搜资料,还给你引用来源;
- 换模型:每个会话能在输入框边上选模型,还能挑推理档位;
- 先计划再动手:有个”计划模式”,让它先只读勘察、出方案,你点头了它才动手,复杂任务特别好用;
- 定目标:长任务可以建一个持久目标,它会一回合接一回合自己推进,做完或卡住都会告诉你;
- 挂后台:长命令扔后台跑,它不傻等,继续干别的,跑完再收结果;
- 派活:把独立的小任务甩给子代理并行做,不占主对话的上下文;
- 跑工作流:写个脚本,让几十个子代理分阶段、并行处理大批量任务,比如审计、迁移、多角度调研;
- Ralph 循环:让一个”完全没有记忆”的新 Agent 反复迭代同一个目标,靠共享工作区当长期记忆,适合需要客观重审的活;
- 压缩上下文:聊太长了自动压缩,保住关键信息;
- 装技能:技能是一整套”教 AI 干活”的说明书,比如”怎么写 Cordis 组成”,随预设打包,也能放自己目录里;
- 发命令:
/plan、/compact、/goal这些斜杠命令; - 点赞点踩:对回答点个赞或踩,帮它调优。
换人格:Agent 预设
预设就是给 AI”换人格 + 换工具箱”。界面上它出现在四个地方:
- 设置页里有一行,决定新会话默认用哪套预设;
- 新建会话的界面上有个小 chip,能单独给”下一个会话”挑一个(一次性,用完就重置);
- 会话标题旁边有个小标签,显示这个会话正在用哪个(只读的,因为开了就不能换);
- 设置页里有个管理分区,一张张卡片列着所有预设:可以复制、删除、设默认、看随附预设的完整内容。
管理上就记住几件事。复制是创建新预设的唯一入口:填个 id(这 id 会成为文件夹名字,定了就改不了)和可选的名字,系统会把源预设整个复制到 ~/.dsh/.agent-presets/<id>/ 并帮你打开文件夹。编辑不要在浏览器里改 YAML,直接在它自己的文件里改 agent.cordis.yml。删除会删掉整个文件夹,已经用它的会话不受影响。要是哪个预设的组成文件坏了,界面上会显示”加载失败”,直接删了重建就行。
重点来了:创造模式。 新建会话时选”创造模式”(cordis 预设),这个 AI 就拥有了读写运行时组成的全部工具。你可以直接对它说:
“创建一个只读审查预设,只能看代码不能改文件”
它就会复制一份现有预设,按你的要求改好组成,存进 ~/.dsh/.agent-presets/,然后这份新预设就出现在名单里了。你开个新会话选它,就多了一个专属的审查 AI。这就是”让 AI 造 AI”,不是概念,是真能这么用。
不过先说好:创造模式下的 AI 能执行代码、能改运行时,信任级别等同于给了它 shell 权限。别让它跑不明来源的指令。也别去改随附的 cordis 预设本身——那是部署的一部分,升级会被覆盖——要改就复制一份再改。
现场生长:动态插件
如果预设是”换人”,动态插件就是”当场长出全新器官”。这是 DSH 最招牌的玩法。
动态插件是只活在当前进程里的临时扩展:定义不写进任何文件,进程一重启就没了。它分两半:
- 宿主半:在 DSH 的 Node 进程里跑,能碰文件、网络、服务,能监听事件,能注册新工具;
- 客户端半:在浏览器页面里跑,管界面、主题、往插槽里塞 UI。
两半之间靠一条”包私有 RPC”通信:页面调 host.call,宿主用 harness.handle 接,只传 JSON。
整个流程是一条闭环:
1 | 你:给我加一个显示 token 消耗的小面板 |
这里面有几个机制值得知道。版本不可变:每定义一个版本就锁死一个 packageId,新版只能追加不能覆盖,改坏了随时能退回旧版。必须审批:装载前得你点头,而且审批弹窗里会高亮显示宿主端代码中涉及 fs、child_process、net 等危险操作的部分——你不是盲目点允许,而是针对具体要执行的代码片段做决策。作用域回收:插件的样式、插槽、定时器、事件监听、RPC 全都挂在生命周期上,停止/更新/删除时自动全部撤干净,不留垃圾。
我用两个真实例子说明它怎么用。
例子一:Token 消耗面板。 先查了 tokenMeter 这个服务的契约,确认系统本来就有会话的 token 计量;再查插槽树,把面板挂到输入框下方的”常驻读数区”。第一版是行静态文字,反馈说”不能拖、位置不好”,就升级成了全屏浮动层里的可拖动卡片——按住头部拖到哪都行,能收成小圆点,跟随当前活动会话,每两秒刷新。整个过程两次审批、两次装载,边用边改,改完立刻生效。
例子二:费用估算面板。 想在 token 基础上估一下”这会话花了多少钱”。查了一圈发现运行时里根本没有价格数据,于是:监听 agent/request 这个事件,每次模型请求路过时记下这个会话真实用的 provider 和模型(不靠猜);价格表由插件自己内置,标着估算,随时能改;计费分三种精度——有真实用量就按明细精确算,只有粗略估算就按上下文粗估并标”(估)”。
还有一个特别有用的习惯:写动态插件之前,先让 AI 用 Inspect 工具去查活体运行时的真实契约——有哪些服务、事件、插槽、主题 token。它不翻文档瞎猜 API,直接问正在运行的系统要答案,基本告别”API 幻觉”。
更轻量的”永久记忆”:技能(Skills)与工作流沉淀
如果你觉得每次都要写动态插件太重,DSH 还给你准备了一个”中间态”玩法:技能(Skills)。
技能本质上是一份或多份 SKILL.md 文件,随预设打包,存放在 ~/.dsh/.agent-presets/<id>/skills/ 下。AI 在启动时会把这些 Markdown 文件当作”工作流说明书”读进上下文。举个例子,你发现让 AI “按公司规范写一个 Cordis 插件”总是漏掉测试文件,你只需手动写一份 cordis-plugin-template.SKILL.md,里面写好步骤清单和代码骨架,丢进预设目录——不需要任何 JS/TS 代码,不需要重启进程,下次新建该预设的会话时,AI 就会严格按你的说明书行事。
相比动态插件,技能是纯文本、零风险、永久生效。如果你是普通用户而非开发者,先尝试让 AI 帮你写 SKILL.md 来固化工作流,比直接上动态插件要稳妥得多。
还有一堆藏在里面的东西
除了上面这些,运行时里还藏着不少能力,列出来给你个印象,用到的时候知道有这回事:
- 开发向:headless 档案能一行命令干完一个任务就退出,适合脚本和 CI;还有终端版界面(TUI);客户端改动支持热重载(
pnpm run dev:web下免刷新生效);dsh --dump-config能把完整插件树打出来,是理解系统最好的入口。 - 终端向:应用内终端(PTY),能换 bash / PowerShell 后端;还有持久 Bash——一个长期活着的 shell 会话,状态不丢;tmux 的会话状态也能接进 AI 的上下文。
- 对外连接:内置 MCP 客户端,通过 Model Context Protocol 接外部的工具服务器,把第三方能力变成 AI 的工具;支持多标签页和局域网客户端,敏感操作(读预设文件、管理名单)锁在环回地址,局域网里的别人碰不到。
- 数据和智能:AI 能引用其他会话的内容当上下文;会话能从某个历史位置分叉(fork)出新会话;有 LSP 的接口(代码跳转、查引用这类能力可以插拔);能注册代码执行实现;时间信息会注入上下文;会话标题自动生成。
- 权限和合规:权限可以按会话切”预设”,审批和沙箱模式都有旋钮;每次敏感操作按策略问人,问的和答的都记日志;命令在沙箱里受限跑,文件操作越权会弹二次授权。
- 体验向:亮暗主题、中英文界面;消息能点赞点踩;支持图片附件;桌面端还能调出目录选择器,一键打开文件所在位置。
- 存储向:会话是追加式 JSONL 日志,就算没有活的 AI 也能按预设重建;有会话投影和缓存,支持检查点恢复;大块内容有 spill 存储兜底。
它到底牛在哪
前面说的都是”有什么”,这里说”为什么别人没有”。
- 让 AI 造 AI。 预设本身就是一份 AI 能读能写的文件,”让 AI 帮你造另一个 AI”不是概念是日常。这是它最标志性的一点。
- 给自我修改立规矩。 所有能力按”有没有别的会话在用”分成宿主层和预设层,AI 想改自己也得先过这一问,改坏共享运行时的风险被压到最低。
- AI 不猜 API。 Inspect 让 AI 写代码前先查活体运行时的精确契约。
- 改运行时也走版本管理。 不可变版本 + 审批 + 回滚 + 自动回收,把”临时改运行时”这种危险动作做得跟正经软件流程一样安全。
- 日志永远能重放。 预设决定 AI 看到什么工具,所以换预设会被记进会话日志;配套”空白会话才能换”的锁,保证任何历史记录都能被当前工具重放。
- 连缓存都替你想到了。 计划模式和执行模式共用同一套工具目录,让请求缓存保持稳定;改默认预设不会碰运行中会话的前缀。
- 敢把风险写明白。 文档明说”把创造模式当 shell 访问”。能力多大、风险多大,写得清清楚楚。
- 完整的”现场生长”闭环。 定义、审批、装载、回滚、回收,让”AI 改造它正在运行的产品”变成一种可交付、可审计、可回滚的能力。其他平台要么不拥有运行时,要么不敢开放这条通道,所以这个闭环只有 DSH 给得了。
你还能折腾出什么
给你点灵感,都是基于已验证的能力能做的:
监控面板类:token 消耗、费用估算(上面俩就是现成例子);后台任务跑完弹个提醒;会话上下文仪表盘(多少行日志、压过几次缩)。
效率工具类:把当前会话导出成 Markdown 文件;在每条助手消息后面加个摘要卡;定时提醒;消息一键复制或翻译;把网页正文存成文件。
界面类:侧边栏底部一键切主题;给会话加彩色标签。
永久玩法:做几个专属 Agent 预设——只读审查、中文写作、翻译本地化,复制创造模式改一改就是;或者把验证过的动态插件落进部署源码、重建产物,它就变成产品的一部分,重启也还在。后者是源码级改动,代价高一些。如果你只想稳定复用某个验证过的行为,优先写一份 SKILL.md 挂进预设,成本最低、零风险。
玩之前记住这几条底线
- 创造模式 = shell 级信任,只跑信得过的指令;
- 动态插件装载前必审:单勾只信这一版,双勾以后都信,重点看弹窗高亮的危险代码片段;
- 随附预设(standard / code / minimal / cordis)只读别改,升级会覆盖;
- 敏感操作会弹审批,按策略放行或拒绝,别随手全点允许。
词表 & 常见问题
词表
| 词 | 什么意思 |
|---|---|
| DSH | DeepSeek Harness,AI 运行平台 |
| Cordis | 它的插件框架,一切能力皆插件 |
| 插件行 | cordis.yml 里的一行插件声明 |
| 预设 | 一个会话的 AI 组装方案 |
| 会话 | 一次对话和它的记录 |
| 宿主层 | 全系统公用的注册表和设施 |
| 动态插件 | 只活在当前进程的临时扩展 |
| Package | 动态插件的不可变版本 |
| 插槽 | 界面里能塞 UI 的位置 |
| Inspect | 查活体运行时契约的工具 |
| MCP | 接外部工具服务器的协议 |
| PTY | 伪终端,应用内终端 |
| LSP | 代码智能接口 |
| fork | 从历史位置分叉新会话 |
| HMR | 开发期免刷新热更新 |
常见问题
预设为什么不能中途换? 会话历史是用当初那套工具聊出来的,换了工具历史就没法重放。技术根因在于:预设决定了 Tool Call 的 JSON Schema,中途切换会导致历史消息中的 tool_calls 载荷无法被新预设的校验器识别,引发上下文解析错误。所以只有空白会话能换,一开聊就冻结。
动态插件重启会没吗? 内存里的实例会没。但每个动态插件的 packageId 会记录在当前会话的 JSONL 日志头中。当你用 dsh --resume <会话id> 恢复该会话时,DSH 会尝试从缓存中重新拉取并装载对应版本的插件。它不是”完全丢”,而是”随会话归档,随恢复重现”。
费用面板为什么标”估算”? 运行时没有价格数据,价格表是插件内置的参考值。有真实用量时会精确算。
想让功能永久存在? 三条路:写成 SKILL.md 挂进预设(最轻量,纯文本);做成 Agent 预设(新会话生效,需要复制改配置);把插件代码写进部署源码重建(最重,重启也在)。
怎么接外部工具? 用 MCP 客户端接外部工具服务器,或者写个动态插件注册新工具。
本文基于 DeepSeek Harness 0.1.0-rc.6 实测整理。官方仓库:github.com/deepseek-ai/deepseek-harness
作者:Jay





