从零开始的 DeepSeek Harness 开荒教程
2026/11/2
本文简要记叙了我在我的 Linux 环境下安装官方版 DeepSeek Harness,并对其进行一些简单配置以更符合我的工作流的过程。
环境
本文描述的过程是我在我的设备上安装、配置 DeepSeek Harness 时遇到的,描述如下:
- OS:Arch Linux
- 桌面环境:KDE Plasma 6.8.2
- 浏览器:Microsoft Edge
- Node.js:24.22.1
- 包管理器:pnpm 12.4.1
- Shell:Fish 4.9.3
- 文本编辑器:VS Code
- DeepSeek Harness:0.2.2-alpha.2
参考本文描述的配置时,请根据您自身的环境进行适当修改。
安装
DeepSeek Harness 在 Linux 上暂时不提供官方的 Desktop 包。虽然有第三方基于 Electron 打包的 Desktop 版本可用,但 DeepSeek Harness 本身仍处在积极开发中,有时我会更希望及时使用到官方最新版本的特性。因此,我选择使用官方的 Web UI,通过 npm 进行安装。
很容易想到,使用 npm install -g @deepseek-ai/dsh 安装可以将其安装到本地,而我们使用 pnpm,很自然的会尝试使用 pnpm install -g @deepseek-ai/dsh 安装,但这样行不通。这样安装后,运行时会报大量 Module Not Found 的错误。DeepSeek Harness 的内部实现依赖了一些对路径的遍历,而 pnpm 的一些内部操作破坏了这个依赖,因此会启动失败(#7185)。
既然这样,我们就必须使用 pnpm dlx 运行。但每次运行都这么写有些啰唆,所以我们不妨在 ~/.local/bin/dsh 写一个 Wrapper,将这个命令封装一下:
#!/usr/bin/env bash
set -euo pipefail
readonly PKG_NAME="@deepseek-ai/dsh"
readonly PKG_VERSION="0.2.2-alpha.2"
exec pnpm dlx \
--allow-build "@deepseek-ai/dsh-subprocess-local" \
--allow-build "@google/genai" \
--allow-build "koffi" \
--allow-build "node-pty" \
--allow-build "protobufjs" \
"${PKG_NAME}@${PKG_VERSION}" \
"$@"加一下执行权限,这样就能很轻松的实现 dsh 命令了。
开机自启动
既然 DeepSeek Harness 是一个 Web UI 应用,并且启动参数并不绑定工作区,那我们不妨令其开机自启动,常驻在后台,这样使用时会方便很多。
由于几乎所有桌面 Linux 发行版都在使用 Systemd,因此这里很自然的想到使用 Systemd User Service Unit 进行配置。
在 ~/.config/systemd/user/dsh-web.service 写入如下内容:
[Unit]
Description=DeepSeek Harness Web UI
Documentation=man:systemd.special(7)
After=graphical-session.target
After=dbus.socket
Requires=dbus.socket
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
Type=exec
WorkingDirectory=%h
ExecStart=%h/.local/bin/dsh --profile <your-profile-name> --no-open --host 127.0.0.1 --port 3080
Environment=DSH_HOME=%h/.dsh
KillSignal=SIGTERM
TimeoutStopSec=45
Restart=on-failure
RestartSec=15
StandardOutput=journal
StandardError=journal
SyslogIdentifier=dsh-web
[Install]
WantedBy=graphical-session.target这样就实现了如下的 DeepSeek Harness 自启动:
- 在图形界面登录到你的账户后才会自启动,不用担心拖慢其他用户启动。
- 复用了前面的 Wrapper,方便统一版本。
- 自动绑定到
127.0.0.1:3080, 并且不会自动打开浏览器。 - 启动失败时(网络未配置好等情况)会自动间隔一段时间重试,并在失败若干次时停止,防止无限重试。
然后使用 systemctl --user daemon-reload 加载,systemctl --user enable --now dsh-web 启用并启动。
之后如果要重启 DeepSeek Harness,需要使用 systemctl --user restart dsh-web。
配置
初次启动 DeepSeek Harness,登录 DeepSeek 账号或者配置 API Key 的操作自不必说。我的一些配置放在这里供参考:
- 工作步骤展示:详细
- 收起后显示的回复:全部回复
- 显示代码工作视图:开
- 繁忙时的发送行为:排队发送
- 性能与用量:详细
- 在使用官方模型 API 时上传 Session Log:开(支持 DeepSeek 谢谢喵)
同时,可以在左侧“插件”页面中启用一些实用的自带插件,或者修改一些配置:
- 内置插件-子智能体:
- 允许 Agent 为子智能体选择模型:开
- Agent 可选择的模型:全选
- 内置插件-网页搜索:
- 启用新版 Web 搜索 API:开
- 实验性插件-智能体团队:启用
- 实验性插件-自动授权审查:启用
- 实验性插件-个性化推荐:启用
- 实验性插件-Git 工作树:启用
- 实验性插件-Ralph 循环:启用
这里我没打开自定义插件索引,因为我的工作流已经基本稳定下来,并不太逛插件市场。同时,思考过程机器翻译和随对话更新的标题我目前觉得没什么必要,所以也没开。
定制插件
这里推荐了一些我觉得非常实用的插件。
dsh-browser
这个插件来自 CJYLZS/dsh-browser。顾名思义,它给 DeepSeek Harness 增添了 Browser Use 相关能力。实测使用这个插件对 DeepSeek-V4.1-Flash 1017 的前端能力有不小提升。同时,对于一些通过 Web Fetch 抓不到的网页,它也可以自主去抓取。
这个插件的一个优点是可以使用系统自带的浏览器,而不是非要自己在 Bundle 里下载安装一个。我的系统里已经有很多 Chromium 了,没必要再增添一个。同时,它也支持 Microsoft Edge,这样我也不用非得切到 Chrome 去,算是很适合了。
配置:
- 窗口模式:无头(无窗口)
- 浏览器:Microsoft Edge
- Profile:临时(每次启动全新)
- 自动化标记:隐藏
其他配置项我保持默认。
需要注意的是,这个插件默认允许打开最多 4 个浏览器,所以 Subagent 之间或者 Session 之间会抢这个上限,并且 Session 结束之后经常不会释放,需要记得手动去关一下。方法也很简单,直接把侧栏的浏览器标签关掉就行了。
dsh-shell-card-plus
来自 antnesswcm/dsh-shell-card-plus,但是原作者不维护了,仓库已经 Archive,在最新版本的 DeepSeek Harness 上运行不生效。因此我 Fork 到本地让 DeepSeek 自己对它进行了一点修复。
这个插件的主要用途是改善 DeepSeek Harness 思考过程中 Shell 工具调用的显示效果。原版的遇到长命令会截断,并且不能展开,这个插件修复了这一点。
当然,由于懒得维护,这里我不会把我修复的版本放出来,需要的话请自行用 DeepSeek Harness 进行修复。
dsh-wakatime
插件全名 @dingyi222666/dsh-wakatime,来自 dingyi222666/dsh-wakatime。
这个插件提供了 Wakatime 接入,使用跟其他 Wakatime 系列插件一样的 ~/.wakatime.cfg 配置即可,也支持 Wakapi。
dsh-web-ui-notify
来自 omdsh-dev/dsh-web-ui-notify,由于原作者有时候跟进 DeepSeek Harness 版本更新不是特别及时,因此我 Fork 到本地自己用 DeepSeek 维护了。
这个插件给 DeepSeek Harness Web UI 提供了基于浏览器通知的提示功能,在会话完成时和需要用户确认时会通过浏览器的通知 API 发通知,当然需要有至少一个 Web UI 页面在浏览器打开。但是,这个插件在处理 Subagent 时似乎有一点问题,会把 Subagent 的会话结束也纳入通知范围,所以也顺便修了一下。
这里我同样不会把我自己维护的版本放出来,需要的话请自行安装原作者的版本或者自行 Fork。
dsh-vscode-bridge
这个是我用 DeepSeek Harness 自行 Vibe 的一个插件,具体功能是实现类似 OpenCode VS Code 插件的几个小功能:
- 一键(我绑定到
Alt + ~)将 VS Code 中当前打开的文件夹作为 DeepSeek Harness 的工作区打开并开启新对话 - 一键(我绑定到
Ctrl + Alt + K)将 VS Code 当前打开的文件以@文件的 Reference 形式插入当前打开的对话输入框中 - 在 DeepSeek Harness 中添加了“在 VS Code 中打开”等几个快捷入口
这个插件实际上由 DeepSeek Harness 插件和 VS Code 扩展组成。二者通信的设计完全 Vibe 完成。
出于同样的原因,我不会发布这个插件。这里只是展示一个可以补齐的方向,推荐使用 DeepSeek Harness 的创造模式自己去做符合自己需求的插件。
dsh-workspace-hygiene
同样是我自己 Vibe 的插件。功能如下:
- 自动隐藏没有可见对话的工作区
- 在 Web UI 提供彻底删除对话的功能
算是能隐藏一些工作区,顺便给我清理对话历史记录提供一点帮助吧。
同样不会发布。
使用小技巧
- 善用 Plan Mode。执行工作之前最好先用
/plan进行一些规划,对于小模型来说可以改善注意力涣散的问题。 - 先做原型验证再开工。做前端之类的可以先让它做个原型页面给你看,确认之后扩展成完整设计文档再实现。有助于解决设计效果抽卡的问题。
- 适当用创造模式,如果觉得 DeepSeek Harness 有哪里不是很顺手,可以找找有没有人做过插件,没有的话直接用创造模式产出一个 Preset/Plugin 就行。
结语
经过大概一个多月的使用,我目前是已经觉得 DeepSeek Harness 是一个足够好用、能够投入生产环境的 Agent 产品。同时,它的架构设计也留下了足够的扩展性。就像前些天 DeepSeek Harness 团队发布的关于 super-agent 的文章中描述的,他们通过修改 DeepSeek Harness 在内部实现了一个 Super-Agent 产品。而我也在前段时间通过对 DeepSeek Harness 进行一些定制,基于此改造出了我自己的个人长程 Agent:Nokoribi-Agent/余烬。之后我会详细描述一些我设计时的思路,顺带讨论一下 Super-Agent 这些东西对我有什么启发。
希望我别咕了
加载评论中……