DeepSeek Harness(dsh)学习课程

从零基础到「会用 · 会写插件 · 能教别人」——19 课 + 三个动手实验 + 命令速查表

前置要求:会打开终端即可 Node 知识课内补齐 术语 = 专业 + 通俗双轨 类比面向后端工程师(Spring / Maven / 银行流水)

目标 → 课程对照

你的目标对应课程学完你能
① 设计思路、理念阶段 1(L03–L07)用三句话讲清这个项目为什么长这样
② 使用技巧(含进阶)阶段 2(L08–L11)熟练使用,并用 profile/patch/MCP 定制
③ 开发插件阶段 3(L12–L18)写出工具/拦截器/服务插件并发布;看懂社区插件
④ 命令清单commands.html随用随查,可搜索、可复制
给同事讲解阶段 4(L19)拿着讲稿完成 10 分钟内部分享
读完全部课程但感觉没懂?先做 理念急救包:三个实验——零代码、20 分钟,亲眼看见「一切皆插件 / 日志账本 / 拔插头」,还附 Spring 对照与四概念公式(插件/patch/bundle/profile)。
关于本目录:learn/ 是学习材料,不属于 deepseek-harness 项目本身,随时可删除或移动。

阶段 0 · 地基

Prerequisites

只补齐"看懂本项目命令与代码"所需的最小 Node 知识集,已熟悉可跳过。

Node/pnpm/monorepo/ESM/TypeScript——每条项目命令都能看懂。Node 版本 ^22.19 || >=24,包名 @deepseek-ai/dsh-*

Node.jspnpm / npmmonorepoESMTypeScript

拿到仓库不迷路:packages/(插件包,按 core/llm/shell/… 分组)、docs/vendor/(内嵌 Cordis 源码);三步跑起来 pnpm install → build → pnpm dsh web

vendorcookbook

阶段 1 · 理念

Philosophy

三句话讲清 dsh:一切皆插件、能力可整体替换、日志是唯一事实源——也是 L19 讲稿的素材。

智能体 = 大模型 + 工具 + 循环;Harness = 给模型套上马具的框架(管会话、工具、权限、日志)。开发者预览期,抓理念别死记 API。

AgentHarnessheadless

连模型适配、工具注册表、会话日志、agent 循环本身都是插件。三个好处:没有特权核心、注册即效果(拔掉干净消失)、热重载。

微内核HMR

插件框架五概念:插件对象 / ctx 插座板 / inject 依赖注入 / 类型化事件(emit·waterfall·parallel·serial)/ 可撤销效果。≈ Spring 的 IoC 容器 + 事件总线,但类型安全且一切可逆。

Contextinjectwaterfalleffect

Definition(声明接口)→ Provider(提供实现)→ Consumer(消费使用,通常是工具)。换 Provider = 换掉整个产品的某项能力,其他角色无感。铁律:扩展插件只依赖 Definition。

seam三角色

只追加的事件流水账;模型历史由 deriveMessages() 推导而非另存。铁律「模型可见即可日志」。turn = 一轮对话,step = 一次模型请求+工具调用。银行流水类比:存的是流水,余额是算出来的。

append-onlyturn / stepderive

阶段 2 · 使用

Usage

先当用户用顺,再谈定制。L10、L11 是你区别于普通用户的进阶关键。

两种启动:免安装 npx @deepseek-ai/dsh web;源码三步曲。Settings → Models 填 API key 即存即用。先添加 workspace 再开会话。

API keyworkspaceapproval

会话新建/恢复/分叉;权限预设与审批;Plan mode(先方案后执行);todo 工具;上下文压缩 compaction。

permission presetplan modecompaction

不写一行代码重新组装 dsh。四层叠加后到者胜:bundle 清单 → profile 补丁 → home 补丁 → --patch。神技 --dump-config:打印真实插件树,任何一行都可被你的补丁按 id 替换。

profilebundlepatchpreset

MCP(一服务器一插件)、Skills(Markdown 教模型工作流)、Hooks(复用 Claude Code/Codex 配置)、子智能体、定时任务;SDK/ACP 把 dsh 当引擎嵌入自己的程序。

MCPSkillHooksubagent

阶段 3 · 插件开发

Development

每课都有动手环节,产出一个属于你的 scratch-plugin。学完 L18 能读懂任意社区插件。

给模型造一个它能看见并调用的工具:name/description/parameters/execute/output 五要素,20 行写一个 greet。渲染意图(generic/terminal/diff)是设计的一部分。

tool schemarender intent

定义 Config,cordis.yml 传参。配错大声失败(fail loud);默认值走显式 resolve() 而非隐藏 ??!!js 表达式只允许出现在 config 和 disabled。

fail loudrequest / spec 分离

四种派发模式选型 + waterfall 洋葱模型(不调 next() 即短路);实战:在 tools/pre-execute 写 allow/deny/ask 权限门。

短路prepend

Service 子类(默认导出)vs 函数插件(命名导出,混用会静默丢功能);把 L13 工具拆成三角色三包,体验换 Provider 不动 Consumer;invariant 测试验收。

Service 子类ctx.getinvariant

聊天流里插业务卡片(ConversationNode);给插件配设置面板,用户不用改 YAML。一切 UI 从 session/event 事件流渲染。

ConversationNode键控渲染器

打包成 bundle(package.json 声明 dsh.bundle + 补丁文件)发布;读插件五步法:dsh 字段 → inject → apply → Config → README 的 Model Experience。

dsh-plugin topicModel Experience

阶段 4 · 讲授

Teaching

阶段 1 的内容直接可当讲义;本课组织成一场可复述的内部分享。

三张图(插座板 / turn-step 循环 / 三角色)+ 演示五步(跑起来 → 真实任务 → 20 行代码加工具 → 热重载 → 模型当场调用)+ 三个高频问题标准答案。L04–L07 可直接投屏。

FAQ:除了写插件,还有别的扩展方式吗?

有,而且大部分不用写代码。按投入从低到高:

扩展面写代码?一句话说明典型场景
YAML 组合profile / bundle / patch / preset:换配置、换组合、按 id 替换任意插件实现把持久化换成 SQLite、给团队定制 profile
Skills 技能否(写 Markdown)教模型"某类任务的标准做法",按需加载团队编码规范、发布流程
Hooks 桥否(写配置)直接复用 Claude Code / Codex 已有 hook 配置已有 hook 资产的团队迁移
MCP 服务器否(任意语言、进程外)外部工具服务器经 MCP 挂进来,一服务器一插件接内部工具链、数据库、工单系统
TypeScript 插件一切深度扩展的正路:工具、拦截器、服务、UI 全能写深度定制产品行为
SDK / ACP(进程外)把 dsh 当引擎嵌进你自己的程序集成进公司系统
怎么选:能配置解决就不写代码(YAML → Skill → MCP 优先);要改"模型可用的能力和行为"才写插件;要在自己产品里用 dsh 才走 SDK/ACP。特殊能力 self-modification:智能体运行时自己挂载/卸载插件(packages/extensions/)——dsh 相当独特的演示点。

如何继续上课