3131 字
16 分钟
从零搭建一套可用的 DeepSeek Harness

一份经过实际安装验证的 macOS 教程:包含 Web 工作台、精选插件、独立 TUI、日常使用与故障恢复。

DeepSeek Harness(简称 DSH)是 DeepSeek 推出的开源 Agent Harness。它不是一个模型,而是一套把模型、文件系统、Shell、Skills、MCP、会话和界面组合起来的本地 Agent 运行时。

它最大的特点也是最大的风险:Everything is a plugin

插件化让 DSH 很灵活,但当前生态仍处于快速发展阶段。插件质量差异明显,不兼容的组合甚至会让 Web 服务无法启动。因此,这篇教程不会追求”装得多”,而是搭建一套职责清晰、可以长期使用的配置:

  • Web 工作台负责日常编码和长任务;
  • 独立 TUI 提供接近 Claude Code 的终端体验;
  • 文件、Git、通知、用量和记忆各选一个插件;
  • 不在同一 profile 中叠加功能重复的插件。

本文命令已在以下环境完成实际验证:

组件验证版本
macOSApple Silicon
Node.js26.7.0
npm11.19.0
DeepSeek Harness0.1.1-rc.2
DSH TUI0.9.0

DSH 目前仍是 Developer Preview,后续版本可能存在破坏性变更。本文固定具体版本和插件提交,避免安装结果随时间漂移。

相关链接:

目录#

  1. 安装前准备
  2. 安装 DeepSeek Harness
  3. 启用官方 Schedule
  4. 安装经过筛选的 Web 插件
  5. 安装独立 TUI
  6. 启动与日常使用
  7. 完整验收
  8. 常见故障
  9. 更新、备份与卸载

一、安装前准备#

1. 检查 Node.js#

DSH 要求:

Node.js ^22.19.0 或 >=24.0.0

先检查当前版本:

Terminal window
node -v
npm -v
which node

如果尚未安装 Node.js,在 macOS 上可以使用 Homebrew:

Terminal window
brew install node

如果已经通过 Homebrew 安装了旧版本:

Terminal window
brew upgrade node
brew cleanup node

再次确认:

Terminal window
node -v

本文验证时使用的是 v26.7.0。Node 23 不在 DSH 支持范围内,不要忽略这一点。

2. 准备 DeepSeek API Key#

前往 DeepSeek 开放平台创建 API Key。安装过程中不要把密钥写进项目仓库,也不要直接贴进公开日志。

可以先临时导出:

Terminal window
export DEEPSEEK_API_KEY="你的 API Key"

稍后会把它保存到 DSH 自己的配置目录,并限制文件权限。

3. 处理 npm 镜像#

如果本机 npm 使用第三方镜像,安装 @deepseek-ai/* 包时可能遇到 403、包不存在或下载中断。

本文所有核心安装命令都显式使用 npm 官方源:

https://registry.npmjs.org/

不需要永久修改全局 npm 配置。

二、安装 DeepSeek Harness#

1. 安装固定版本#

Terminal window
npm install -g @deepseek-ai/dsh@0.1.1-rc.2 \
--registry https://registry.npmjs.org/

验证:

Terminal window
which dsh
dsh --version

预期输出:

/opt/homebrew/bin/dsh
0.1.1-rc.2

2. 初始化 Web profile#

执行一次配置导出即可初始化 ~/.dsh/profiles/web,无需先常驻启动服务器:

Terminal window
dsh web --dump-default-config > /tmp/dsh-default-config.yml

检查目录:

Terminal window
ls -la ~/.dsh/profiles/web

正常情况下会看到:

cordis.patch.yml
cordis.yml
package.json
pnpm-workspace.yaml

3. 保存 API Key#

Terminal window
umask 077
printf 'DEEPSEEK_API_KEY=%s\n' "$DEEPSEEK_API_KEY" > ~/.dsh/.env
chmod 600 ~/.dsh/.env

验证权限:

Terminal window
ls -l ~/.dsh/.env

文件权限应为 -rw-------

DSH 也支持托管凭据文件 ~/.dsh/.credentials.yaml。无论采用哪种方式,都不要把密钥写进工作区的 .env 后提交到 Git。

三、启用官方 Schedule#

社区插件统一通过 dsh plugin add 安装。官方可选能力则通过 profile patch 挂载。两者不要混用。

编辑:

~/.dsh/profiles/web/cordis.patch.yml

写入:

# 官方可选能力写在这里;社区插件只使用 dsh plugin add 安装
- insert:
- id: schedule
name: '@deepseek-ai/dsh-schedule'

验证组合树:

Terminal window
dsh web --dump-config | grep -A 1 -B 1 dsh-schedule

如果 --dump-config 能正常结束,并显示 @deepseek-ai/dsh-schedule,说明挂载成功。

不要从旧文章复制 tool-session-query、PTY 或 Hooks 的 YAML。0.1.1-rc.2 的公开安装包并没有可直接照抄的独立 tool-session-query 包,错误的 id 可能被静默跳过,重复 id 则可能直接阻止启动。

四、安装经过筛选的 Web 插件#

这套组合只保留六个社区插件:

插件用途
DSH-better-sidebar文件、编辑器、终端、Git 和子代理侧栏
dsh-at-file在输入框中使用 @file 引用工作区文件
dsh-open-in-vscode从 Web 工作台打开 VS Code / Cursor
dsh-notification任务完成和异常通知
dsh-usage-statsToken、费用、余额和使用统计
dsh-memento有边界、可审批、可审计的跨会话记忆

没有安装插件市场、皮肤大礼包、多套记忆或第二套侧栏。它们要么功能重叠,要么扩大了冲突面。

1. 允许受信任插件执行构建脚本#

部分 Git 插件带有 prepare 脚本。pnpm 默认会阻止执行,并报:

ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED

编辑:

~/.dsh/profiles/web/pnpm-workspace.yaml

写入以下完整内容:

packages:
- .
nodeLinker: hoisted
autoInstallPeers: false
allowBuilds:
dsh-better-sidebar: true
dsh-at-file: true
dsh-open-in-vscode: true
dsh-notification: true
dsh-usage-stats: true
dsh-memento: true
onlyBuiltDependencies:
- dsh-better-sidebar
- dsh-at-file
- dsh-open-in-vscode
- dsh-notification
- dsh-usage-stats
- dsh-memento

只为明确审查并准备安装的包开放脚本,不要使用全局的”允许全部脚本”设置。

2. 逐个安装并验证#

不要一次粘贴六条命令后离开。每安装一个插件,都执行一次 --dump-config。这样如果组合树损坏,可以准确知道最后一个变更是什么。

Better Sidebar#

Terminal window
dsh plugin --profile web add \
"github:omdsh-dev/DSH-better-sidebar#d9b8f15d9eab018742f97d67e54b2398504894cd"
dsh web --dump-config | grep -i better-sidebar

@file 引用#

Terminal window
dsh plugin --profile web add \
"github:FSMargoo/dsh-at-file#c37b0ed9e8bf3585bf9f272462dcf01886efe2a3"
dsh web --dump-config | grep -i dsh-at-file

打开编辑器#

Terminal window
dsh plugin --profile web add \
"github:omdsh-dev/dsh-open-in-vscode#8aed144abdc158a332aa73bce42fc217d962f751"
dsh web --dump-config | grep -i open-in-vscode

桌面通知#

Terminal window
dsh plugin --profile web add \
"github:omdsh-dev/dsh-notification#ddec603395a223deb46c75b74274c41849c6a131"
dsh web --dump-config | grep -i dsh-notification

用量统计#

Terminal window
dsh plugin --profile web add \
"github:Ychris12138/dsh-usage-stats#7c88a445b73f78af7df6082fd671d22a293acb6d"
dsh web --dump-config | grep -i usage-stats

Memento 记忆#

Terminal window
dsh plugin --profile web add \
"github:PerryLink/dsh-memento#ee198efd71dc60f5cd1cd2019e20c63028d2d182"
dsh web --dump-config | grep -i memento

这里选择 Memento,而不是功能更庞杂的”记忆 + 技能进化 + 待办 + 调度”一体化插件。原因很简单:记忆属于高影响能力,边界清晰、可审批、可审计比功能数量更重要。

3. 检查最终组合#

Terminal window
dsh plugin --profile web list
dsh web --dump-config > /tmp/dsh-web-config.yml

检查 bundle 列表:

Terminal window
python3 - <<'PY'
import json
from pathlib import Path
profile = Path.home() / ".dsh/profiles/web/package.json"
bundles = json.loads(profile.read_text())["dsh"]["profile"]["bundles"]
for bundle in bundles:
print(bundle)
PY

最终应包含:

@deepseek-ai/dsh-base
@deepseek-ai/dsh-web-app
dsh-better-sidebar
dsh-at-file
dsh-open-in-vscode
dsh-notification
@ychris12138/dsh-usage-stats
dsh-memento

五、安装独立 TUI#

如果希望像使用 Claude Code 一样从终端进入 DSH,安装 dsh-tui

关键原则:TUI 必须使用独立 profile,不能叠加到 web profile。

错误地把 dsh-web-app 和 TUI 放进同一个 profile,可能出现:

duplicate loader entry id: agent-presets
duplicate loader entry id: storage

正确安装方式:

Terminal window
dsh plugin --profile dsh-tui add \
@deepseek-harness-tui/dsh-tui@0.9.0 \
--registry https://registry.npmjs.org/

验证:

Terminal window
dsh --profile dsh-tui --dump-config > /tmp/dsh-tui-config.yml

检查 profile:

Terminal window
python3 - <<'PY'
import json
from pathlib import Path
profile = Path.home() / ".dsh/profiles/dsh-tui/package.json"
bundles = json.loads(profile.read_text())["dsh"]["profile"]["bundles"]
print(bundles)
PY

预期:

['@deepseek-ai/dsh-base', '@deepseek-harness-tui/dsh-tui']

这里不应出现 @deepseek-ai/dsh-web-app

六、启动与日常使用#

1. 启动 Web 工作台#

Terminal window
dsh web

默认地址:

http://127.0.0.1:3080

如果不希望自动打开浏览器:

Terminal window
dsh web --no-open

端口被占用时:

Terminal window
dsh web --port 3081

默认只监听 127.0.0.1,不会向局域网暴露。不要为了手机访问直接改成 0.0.0.0;远程访问应额外配置认证和 HTTPS。

2. 第一次创建工作区#

打开页面后:

  1. 选择一个真实 Git 仓库作为 workspace;
  2. 选择 DeepSeek provider 和模型;
  3. 日常编码优先选择 Standard 或 PTC;
  4. 先执行一个只读任务验证工具链。

例如:

列出当前仓库前 10 个文件,并说明项目使用的语言和构建工具。不要修改文件。

确认文件读取和工具调用正常后,再让 Agent 修改代码。

3. 使用 @file#

在输入框输入 @,搜索并选择工作区文件,然后继续描述任务:

@src/app.ts 分析这个入口的错误处理路径,只分析,不修改。

明确引用文件比只写模糊文件名更可靠,也能减少 Agent 在大仓库里无目的搜索。

4. 使用侧栏#

Better Sidebar 提供文件、编辑器、终端、Git 和子代理视图。

建议分工:

  • 小范围查看和快速编辑留在 Web 工作台;
  • 复杂 diff、重构和手工审查通过 Open in VS Code / Cursor 打开;
  • Git 推送、删除分支等高风险操作仍由人确认。

不要再叠加第二套侧栏或 web-ui-all。多个插件争用相同 UI slot 是最常见的页面异常来源之一。

5. 使用记忆#

Memento 不应被当成”自动保存所有聊天”的黑箱。只保存稳定、可复用的信息,例如:

  • 个人编码偏好;
  • 项目的长期约定;
  • 经验证的构建和测试命令;
  • 需要跨会话保留的架构决策。

不要保存:

  • API Key、Token 和密码;
  • 临时任务进度;
  • 未验证的技术推断;
  • 很快会过期的日志内容。

首次使用时先保存一条无敏感信息的偏好,然后新建会话验证能否召回。

6. 查看用量与通知#

用量统计插件用于观察:

  • 输入、输出和缓存 Token;
  • 会话成本;
  • Provider 余额或配额;
  • 不同模型的使用差异。

通知插件需要浏览器授予通知权限。可以启动一个短任务,切到其他窗口,确认任务完成后是否收到通知。

7. 使用 TUI#

在终端运行:

Terminal window
dsh --profile dsh-tui

恢复会话:

Terminal window
dsh --profile dsh-tui --resume

Web 和 TUI 可以共享 DSH 的基础配置与会话目录,但拥有独立的 profile 组合。不要为了”配置统一”把两个 bundle 合并。

8. 停止服务#

前台运行时按:

Ctrl+C

如果此前把 Web 服务放到后台,先找到进程:

Terminal window
pgrep -af "dsh.*web"

确认 PID 后再结束对应进程,不要使用模糊的 killall node,否则会误杀其他 Node 服务。

七、完整验收#

1. 版本#

Terminal window
node -v
npm -v
dsh --version

2. 配置树#

Terminal window
dsh web --dump-config > /tmp/dsh-web-config.yml
dsh --profile dsh-tui --dump-config > /tmp/dsh-tui-config.yml

两个命令都必须以退出码 0 结束。

3. HTTP 服务#

启动 Web 后执行:

Terminal window
curl -sS -o /dev/null \
-w 'HTTP %{http_code}\n' \
http://127.0.0.1:3080/

预期:

HTTP 200

4. 功能#

  • @file 能搜索并引用工作区文件;
  • 侧栏能打开文件、Git 和终端;
  • Open in VS Code / Cursor 能打开当前 workspace;
  • 任务完成后能收到浏览器通知;
  • Usage Stats 能显示用量;
  • Memento 能保存并跨会话召回一条已批准记忆;
  • TUI 能独立启动,Web profile 中没有 TUI bundle。

只有这些路径都走通,安装才算真正完成。

八、常见故障#

1. npm 返回 403#

使用 npm 官方源重试:

Terminal window
npm install -g @deepseek-ai/dsh@0.1.1-rc.2 \
--registry https://registry.npmjs.org/

2. Git 插件拒绝执行 prepare#

错误:

ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED

把错误信息中给出的准确包名加入:

~/.dsh/profiles/web/pnpm-workspace.yaml

allowBuildsonlyBuiltDependencies,然后重新执行安装命令。不要允许未知包运行安装脚本。

3. Web 启动时报 duplicate loader entry id#

根因通常是同一插件同时存在于:

  • package.jsondsh.profile.bundles
  • cordis.patch.yml 的手工 insert

先检查:

Terminal window
dsh web --dump-config
cat ~/.dsh/profiles/web/package.json
cat ~/.dsh/profiles/web/cordis.patch.yml

社区插件应保留在 bundle 中,并删除 patch 里重复的 insert。如果 patch 中有该插件的自定义配置,可以只保留按 id 覆盖的配置,不再 insert

4. 删除插件后仍无法启动#

dsh plugin remove 只删除依赖,不一定清理手工 patch。

Terminal window
dsh plugin --profile web remove <package>

随后检查并删除 cordis.patch.yml 中对应的手工挂载。

5. 不要直接删除整个 ~/.dsh#

会话和配置都位于 ~/.dsh。Web profile 损坏时,应只重建 profile:

Terminal window
mv ~/.dsh/profiles/web \
~/.dsh/profiles/web.backup.$(date +%Y%m%d-%H%M%S)
dsh web --dump-default-config > /tmp/dsh-default-config.yml

这样可以保留 ~/.dsh/sessions 中的会话记录。

九、更新、备份与卸载#

更新前备份#

Terminal window
cp ~/.dsh/profiles/web/package.json \
~/.dsh/profiles/web/package.json.backup
cp ~/.dsh/profiles/web/cordis.patch.yml \
~/.dsh/profiles/web/cordis.patch.yml.backup
dsh web --dump-config > ~/.dsh/web-config.backup.yml

更新原则#

  1. 先阅读 DSH changelog;
  2. 一次只更新核心或一个插件;
  3. 每次更新后运行 --dump-config
  4. 不要让 Git 插件长期跟随 #main
  5. 核心 rc 变化后,先确认插件兼容性再升级。

本文使用的插件命令已经固定到具体提交。需要升级时,应先在插件仓库确认兼容版本,再替换提交哈希。

卸载插件#

Terminal window
dsh plugin --profile web remove <package>
dsh web --dump-config

卸载 DSH#

Terminal window
npm uninstall -g @deepseek-ai/dsh

该命令不会自动删除 ~/.dsh。确认不再需要会话和配置后,再手动归档或删除该目录。

结语#

DeepSeek Harness 的价值不是插件数量,而是组合能力。一个稳定的工作台应该让每个插件都有明确职责,并且随时可以卸载、验证和回滚。

本文这套配置刻意保持克制:

  • 官方核心负责 Agent 主循环与 Schedule;
  • Better Sidebar 负责工作区界面;
  • @file 负责精确上下文;
  • Notification 和 Usage Stats 负责可观察性;
  • Memento 负责跨会话记忆;
  • TUI 使用独立 profile,避免污染 Web。

先把这套基础能力用稳定,再根据真实需求增加插件。不要从插件市场开始搭建系统——那通常是把排障工作提前埋进未来。

从零搭建一套可用的 DeepSeek Harness
https://graycen-notes.pages.dev/posts/202608/deepseek-harness-setup-guide/
作者
Graycen
发布于
2026-08-23
许可协议
CC BY-NC-SA 4.0