Claude Code 和 Cursor 把「代理怎么跑」藏在应用里。你要换模型、加一个只对你仓库有用的工具,往往得等官方排期。
deepseek-ai/deepseek-harness 把这一层拆出来了。命令行叫 dsh,仓库口号是 Everything is a Plugin。文档挂在 deepseek-harness.github.io/deepseek-harness。截至 2026 年 9 月 10 日,它仍是 Developer Preview。NVIDIA 论坛转述的官方说明写得很直:迭代快,会出现破坏兼容的变更。
一条命令
Node 齐了之后,进到你准备让它碰的那个目录,不要进家目录,也不要进放着客户密钥的仓库:
npx @deepseek-ai/dsh web
本机默认是 http://127.0.0.1:3080,只听回环。想换端口或改 host,用官方参数。预览服务不要直接摊到公网。
从源码跑,官方写的是 clone、pnpm install、pnpm run build、pnpm dsh web。先出构建产物,再启动,避免每次重编。
密钥按官方优先级读:进程环境变量、受管理的本地凭据、工作目录 .env、用户目录里的回退 .env。导出 DEEPSEEK_API_KEY 就够第一次。别把真实密钥提交进 Git。SSH 远程启动时,它常常只打印主机地址,浏览器开哪个转发端口由你的 SSH 客户端决定。--no-open 可以禁止自动开页。
页面空白时,官方让你跑 dsh web --dump-config(npx 同理)看合成后的插件树,而不是先怪浏览器。端口被占就换官方提供的端口参数。需要局域网访问时,文档写过绑定 0.0.0.0;那是给自己实验室用的,不是给公网网关用的。
第一次会话仍建议写小。界面里配模型提供方。官方默认是 DeepSeek 自家接口,仓库也写了可以换其他提供方或自建网关,键名以多模型文档为准。第一句可以是:「只读列出当前目录的 Markdown 文件名,不要改任何文件。」然后去看步骤日志。Harness 被讨论得多,主要是因为每一步模型看见了什么、调用了什么是摊开的,不是因为窗口更好看。
web 和 headless 是两套常用 profile。第一次用某个名字,会按模板初始化:web 带基础包和网页应用,headless 带基础包和无头模式。名字写错会直接失败。dsh plugin 把后续参数转给 pnpm,所以你在终端里用过的 add / remove / why / update,这里也能用。相对路径的插件(. 或 ../plugin)按你敲命令时所在的目录解析,不是按 profile 目录解析;在插件仓库根目录 add .,装的是眼前这个包。
插件两套装法,不要混
最小插件在官方教程里就是一个导出 apply(ctx) 的 TypeScript 模块,加载时往上下文登记能力。Web 界面、无头模式、模型路由,都叠在同一套配置上。
往 profile 里加可安装包,用 dsh plugin --profile <名称> add <包>。它会把后面的参数转给 pnpm,所以 remove、update 也能用。第一次用 web 或 headless 这种名字,会按模板初始化;名字不对会直接报错,不会默默建空目录。从 GitHub 装带 prepare 的包时,pnpm 10 会拦住构建脚本,要在该 profile 的 pnpm-workspace.yaml 里按提示放行。
另一条路是在 cordis.patch.yml 里手写 insert,再 pnpm install。本地最小例子是 pnpm dsh web --patch ./scratch-plugin/cordis.yml,插件路径必须是绝对路径。
两套机制各登记一次同一个 id,启动就报 duplicate loader entry id。讨论区里的稳妥说法:已经靠手写 patch 活着的 profile,就别再对它跑 dsh plugin add。
CLI 带着 @deepseek-ai/dsh-mcp-client,默认不启用任何 MCP 服务器。每个服务器命令都是沙箱外的可执行代码。第一次不要把整台机器的 MCP 清单灌进去。
官方默认不该把它绑到未隔离的生产机器上。预览版今天能跑,下周子命令改名并不奇怪。GitHub 讨论区里,重复登记、启动失败的报告已经不少,这不是「你不会用」,是预览软件的日常。
对照仓库 README 时,我只认两件事:零安装用 npx @deepseek-ai/dsh web,源码用 clone 之后的 pnpm dsh web。第三方教程里出现的全局 npm install -g、钉死某个 rc 版本,那是别人的选择,不是我这篇的步骤。密钥文件如果已经写进仓库,先停下来改 gitignore,再谈插件。
明天要交功能,闭源代理仍然更省事。想看代理是怎么被拼起来的,再在可丢的目录里装。把官方仓库和文档站点留在书签里,命令变了以那里为准。
