227 个 npm 包、50 个包分组、742 篇双语决策记录,没有一个特权核心——连 agent loop 自己也只是插件树上的一行。这个站不复述官方文档,它把那套观点拆开:每条规则为什么这么定、代价是什么、哪些不依赖 dsh 也能直接抄回自己的项目。
@deepseek-ai/dsh-* 前缀三条路径共用同一批页面,只是顺序和详略不同。选一条,进到内容页后左栏会告诉你走到第几站。
你想知道 dsh 到底是什么、和 OpenCode / Codex CLI 差在哪,以及值不值得投时间。五站走完,你能在会议上把它讲清楚。
你打算动手改,或者想把 dsh 的做法搬回自己的项目。这条路上每读一段就有一个 Lab 让你立刻验证,结尾是一次真实改造的复盘。
你要吃透的是方法论:Cordis 插件体系怎么撑住 227 个包不塌,以及把 token 当公开契约这件事是怎么被 CI 卡住的——后者在别处基本学不到。
一个跑起来的 dsh,是启动时按顺序叠出来的一棵插件树。三层各管一件事,后写的赢;每一层都只是在改同一份「entry 列表」。
web / headless,或你自己 dsh plugin 创建的任何一个。它住在 $DSH_HOME/profiles/<name>,一个 package.json 加一个 cordis.patch.yml。dsh-base 是每个 profile 的第一层;dsh-web-app 加浏览器应用,dsh-headless 加一个不开端口的一次性 runner。config,或者 insert 新行。profile 一份、home 一份,最后还有命令行的 --patch overlay。
DSH_HOME。
这段片子证明的是:模型自己定义插件、经三轮自修复与人工审批后挂载、调用它刚长出来的 text_stats、再干净地卸掉。
三处要说清楚的:① 出厂的 examples/web-cordis/cordis.yml 在这个 commit 上跑不起来,录屏用的是只补 tool-cordis 的修正 overlay(Lab 5);
② 第一帧那段提示词里写明了 schema 约定,看得见;
③ 到片尾浏览器面板那一半仍是「Client 待激活」——跑通的是 Host 侧的模型工具,UI 半体还在迭代(M6.3.5 算了这笔账)。
DSH_HOME 与会话状态 · 审批那一步是人工点击「仅允许此版本」。
$ pnpm run demo:cordis
跑起来之后,模型先用 cordis_inspect_list 看清当前进程里有哪些 provider,再用 cordis_define 写一个插件、cordis_run 把它挂进当前 context——然后它立刻就能调用自己刚造出来的工具。
它之所以敢这么干,全靠 M2 那条规则:注册即 effect,卸载即撤销。cordis_stop 一调,这棵子树连同它注册过的一切原样消失。
M2 回答「它凭什么灵活」,M4 是别处基本学不到的独家内容——这两根柱子撑住全站。M6 负责传播,M8 的普适价值最高:不用 dsh 也能抄。
这是一份个人学习笔记,不是官方文档,也不代表 DeepSeek。凡是出自本仓库的断言都能点到源码坐标;凡是关于 OpenCode / Codex CLI / Claude Code 的断言都挂了「待核对」标记,因为它们是二手整理。看到与仓库不一致的地方,以仓库为准。
dsh 本身处于 developer preview:接口随时会变,SESSION_FORMAT_VERSION 仍然是 0 且仓库明确写着不作兼容承诺,社区生态规模也远小于同类产品。这些不是免责条款,而是判断「要不要现在上手」的必要输入——M10 会把它们摊开算账。