学习 DeepSeek Harness
34/100
综合分
10
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/Prism-Shadow/learn-deepseek-harness.git按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 72 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/26) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包learn-deepseek-harness(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 08:38:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 38 处,展示前 37 条)
- 读取密钥环境变量advanced/L09_subagent/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量advanced/L09_subagent/code.ts:115
return execSync(args.command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }).trim().slice(0, 50_000) || "(no output)" - 读取密钥环境变量advanced/L10_self_modification/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量advanced/L10_self_modification/code.ts:115
return execSync(args.command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }).trim().slice(0, 50_000) || "(no output)" - 读取密钥环境变量basics/L01_agent_loop/code.ts:11
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L01_agent_loop/code.ts:39
const out = execSync(command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }) - 读取密钥环境变量basics/L02_everything_is_a_plugin/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L02_everything_is_a_plugin/code.ts:88
const out = execSync(command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }) - 读取密钥环境变量basics/L03_session_log/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L03_session_log/code.ts:116
const out = execSync(command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }) - 读取密钥环境变量basics/L04_kv_cache/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L04_kv_cache/code.ts:121
const out = execSync(command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }) - 读取密钥环境变量basics/L05_tool_pipeline/code.ts:11
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L05_tool_pipeline/code.ts:167
const out = execSync(command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }) - 读取本地文件basics/L05_tool_pipeline/code.ts:193
return readFileSync(args.path, "utf8").slice(0, 50_000) - 读取密钥环境变量basics/L06_compaction/code.ts:10
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L06_compaction/code.ts:125
return execSync(args.command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }).trim().slice(0, 50_000) || "(no output)" - 读取密钥环境变量basics/L07_memory/code.ts:11
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L07_memory/code.ts:111
return execSync(args.command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }).trim().slice(0, 50_000) || "(no output)" - 读取本地文件basics/L07_memory/code.ts:126
const memories: Memory[] = existsSync(MEMORY_FILE) ? JSON.parse(readFileSync(MEMORY_FILE, "utf8")) : [] - 读取本地文件basics/L07_memory/code.ts:126
const memories: Memory[] = existsSync(MEMORY_FILE) ? JSON.parse(readFileSync(MEMORY_FILE, "utf8")) : [] - 写入本地文件basics/L07_memory/code.ts:138
writeFileSync(MEMORY_FILE, JSON.stringify(memories, null, 2)) - 读取密钥环境变量basics/L08_assemble/code.ts:11
apiKey: process.env.DEEPSEEK_API_KEY, - 执行外部命令来自配置/变量basics/L08_assemble/code.ts:151
return execSync(args.command, { encoding: "utf8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] }).trim().slice(0, 50_000) || "(no output)" - 读取本地文件basics/L08_assemble/code.ts:165
return readFileSync(args.path, "utf8").slice(0, 50_000) - 读取本地文件basics/L08_assemble/code.ts:196
const memories: Memory[] = existsSync(MEMORY_FILE) ? JSON.parse(readFileSync(MEMORY_FILE, "utf8")) : [] - 读取本地文件basics/L08_assemble/code.ts:196
const memories: Memory[] = existsSync(MEMORY_FILE) ? JSON.parse(readFileSync(MEMORY_FILE, "utf8")) : [] - 写入本地文件basics/L08_assemble/code.ts:203
writeFileSync(MEMORY_FILE, JSON.stringify(memories, null, 2)) - 发起网络请求docs/app.js:48
const res = await fetch("./lessons.json") - 写入剪贴板docs/app.js:179
navigator.clipboard?.writeText(cmd) - 读取本地文件docs/build.mjs:21
if (!existsSync(secPath)) return [] - 读取本地文件docs/build.mjs:22
return readdirSync(secPath) - 读取本地文件docs/build.mjs:23
.filter((name) => /^L\d+_/.test(name) && statSync(join(secPath, name)).isDirectory()) - 读取本地文件docs/build.mjs:26
const readme = readFileSync(join(repoRoot, dir, "README.md"), "utf8") - 读取本地文件docs/build.mjs:27
const code = readFileSync(join(repoRoot, dir, "code.ts"), "utf8") - 读取本地文件docs/build.mjs:30
const readme_en = existsSync(enPath) ? readFileSync(enPath, "utf8") : "" - 写入本地文件docs/build.mjs:36
writeFileSync(join(docsDir, "lessons.json"), JSON.stringify(lessons, null, 0))
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成学习 DeepSeek Harness
从最裸的一个循环开始,一课一课地把它长成一个真正的 agent harness。每一课是一个能独立运行的 TypeScript 小包,npm install && npm run dev 就能跟真实 DeepSeek 模型对话。
📖 有网页版:不想 clone 也能读——点此在线阅读,目录、README、代码、逐课 Diff 都在一个页面里。
和 Learn Claude Code 的区别
本课的形式借鉴自 Learn Claude Code(一课一个可运行小包 + README),但内核完全不同。Claude Code 与 DeepSeek Harness 的设计逻辑是两条不同的路子——这门课只讲后者,并紧扣它区别于 Claude Code 的三个根本设计:
- 🧩 一切皆插件:极瘦的核心循环 + 一切能力皆为可插拔插件。
- 📜 Session Log 是永久的历史与记忆:对话是一条 append-only 事件日志,是唯一真相源。
- ⚡ 对 KV Cache 的极度敏感:所有上下文操作都以「是否破坏前缀缓存」为第一约束。
课程主体紧扣这三点逐层展开(下文详述)。
展开完整文档(README 剩余 1 节)
学习 DeepSeek Harness
从最裸的一个循环开始,一课一课地把它长成一个真正的 agent harness。每一课是一个能独立运行的 TypeScript 小包,npm install && npm run dev 就能跟真实 DeepSeek 模型对话。
📖 有网页版:不想 clone 也能读——点此在线阅读,目录、README、代码、逐课 Diff 都在一个页面里。
和 Learn Claude Code 的区别
本课的形式借鉴自 Learn Claude Code(一课一个可运行小包 + README),但内核完全不同。Claude Code 与 DeepSeek Harness 的设计逻辑是两条不同的路子——这门课只讲后者,并紧扣它区别于 Claude Code 的三个根本设计:
- 🧩 一切皆插件:极瘦的核心循环 + 一切能力皆为可插拔插件。
- 📜 Session Log 是永久的历史与记忆:对话是一条 append-only 事件日志,是唯一真相源。
- ⚡ 对 KV Cache 的极度敏感:所有上下文操作都以「是否破坏前缀缓存」为第一约束。
课程主体紧扣这三点逐层展开(下文详述)。
至于各类 agent 通用的能力——子 agent、更多工具、task 系统、plan 系统等——它们并非 DeepSeek Harness 的独特之处,因此放在靠后的章节简要提及;而且一律以 DeepSeek Harness 最偏爱的形式接入:作为插件插进来(见 L9 起)。
为什么执着于「一切皆插件」? 因为它为 RSI(Recursive Self-Improvement,递归自我进化) 铺路:当一切能力都是可热插拔的插件,agent 就能在运行过程中对自己的 harness 代码做热更新、热插拔——先给自己造能力,再把有用的沉淀下来。L10 展示了这一机制的雏形;如何在 DeepSeek Harness 之上真正实现 RSI / Self-Evolution,将在后续章节展开。
三根支柱(这门课的骨架)
DeepSeek Harness 之所以是它,就靠这三件事。整门课都在反复强化它们:
🧩 P1 · 一切皆插件
核心循环极瘦,只负责驱动流程并在固定扩展点触发事件。工具、上下文、压缩、记忆——所有真正的能力都是外挂的插件,通过一个共享上下文 ctx 与一套事件系统接入。加功能 = 加插件,主干不改。
📜 P2 · Session Log 是永远的唯一真相
一次对话不是内存里的一个消息数组,而是一条只增不改(append-only)的事件日志。模型看到的对话是从日志派生出来的。这让 harness 能确定性重放、可崩溃恢复、可压缩、可 fork。
⚡ P3 · 对 KV Cache 的敏感
服务端前缀缓存的铁律是「token 序列逐字节一致才命中」。所以往对话里加东西一律 append-only(只往末尾加,绝不动中间);一旦改了中间,从那个位置往后的缓存全废。这门课会让你亲手实测缓存命中,并理解每个设计为什么这么做。
每课 README 都有一个固定小节:「三根支柱在本课如何体现」。
课程地图
课程分两大轨道:基础篇 Basics(L1–L8) 打地基,进阶篇 Advanced(L9 起) 在地基上叠更强的能力(会陆续扩充)。仓库里也按 basics/、advanced/ 两个目录组织。
基础篇 Basics(basics/)
| # | 课程 | 主打支柱 | 你会学到 |
| L1 | 最裸的循环 | (铺垫) | agent 的本质:user→LLM→tool→loop;并故意留下三根支柱要解决的三处局限 |
| L2 | 一切皆插件 | P1 | 迷你框架:ctx + 事件系统 + waterfall;把 bash 变成插件 |
| L3 | Session Log 是唯一真相 | P2 | 用事件日志替换消息数组;从日志派生消息;surface |
| L4 | 对 KV Cache 敏感 | P3 | append-only 上下文注入插件;实测 cacheReadTokens |
| L5 | 工具管线 + 权限 | P1+P2 | 六段执行管线;权限做成插件 |
| L6 | 上下文压缩 | P1+P2+P3 | 皇冠课:压缩=插件+replace事件+缓存悬崖 |
| L7 | 跨 session 记忆 | P2+P3 | memory 插件:召回 + 写入 |
| L8 | 组装成小 harness | 三支柱合体 | 把所有插件拼成一个完整体 |
进阶篇 Advanced(advanced/)
| # | 课程 | 主打支柱 | 你会学到 |
| L9 | 子 agent | P1 | 派生子 agent 当工具 |
| L10 | 自我修改 | P1 极致 | 运行时挂插件(一切皆插件的终极形态) |
建议按顺序读。每课的 README.md 里有「问题 → 核心代码 → 工作原理 → 三根支柱体现 → 试一下 → 接下来埋了什么坑」。
怎么跑
每一课都是独立的包(在 basics/ 或 advanced/ 下):
cd basics/L01_agent_loop
cp .env.example .env # 填入你的 DEEPSEEK_API_KEY
npm install
npm run dev
需要一个 DeepSeek API key(platform.deepseek.com)。DeepSeek 的 API 与 OpenAI 兼容,所以我们用 openai 这个 SDK 指向 DeepSeek 的地址。
给 TypeScript 小白的一句话(关于类型)
这门课追求极简。类型策略是「够用就好」:
- 外围该补的都补——消息、工具、函数签名都用真实类型,让你在编辑器里有自动补全、写错立刻标红。
- 迷你框架内部故意从简——ctx.services、事件 payload 这些「运行期才定型」的地方保持 any,绝不为了类型引入泛型这类复杂语法(真实 harness 用泛型换来了完整类型安全,那是它的取舍;我们把注意力留给「harness 怎么运作」)。
- 偶尔你会看到一句手动类型标注(比如 (args: { command: string }))——那是「穿过 any 框架」处唯一要付的小税,代码注释里都会点明。
一句话:看得懂优先于类型严谨。凡是能省的类型体操我都省了,并配了中文注释。
如果你确实不熟 TypeScript,完全可以借助 AI 帮你逐句解析语法与含义,配合读完这约一百行的 agent 代码——这比直接去读 DeepSeek Harness 的真实源码容易得多。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Prism-Shadow/learn-deepseek-harness
学习 DeepSeek Harness
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2