DeepSeek Harness 桌面版预览:一切皆插件
如果你之前想试试 DeepSeek Harness,多半卡在第一步:先装 Node.js,再开终端敲 npx @deepseek-ai/dsh web,然后浏览器打开 127.0.0.1:3080。
对开发者这没什么,对其他人来说,这一步就劝退了大半。
现在这一步没了。桌面版预览已经上线官网,macOS 和 Windows 各一个安装包,下载、双击、打开。
一、先说结论:它和命令行版是同一个东西
有一点必须先讲清楚,否则容易误解。
桌面版不是另起炉灶的独立产品,它是把官方 Web UI 装进了一个原生窗口里。底层完全是同一套:同样的插件体系、同样的会话记录、同样的权限确认机制。你在命令行版里配好的会话、配置、插件,桌面版里直接就是通的。
换句话说:变的是外壳,不是内核。桌面版的价值不在于多了什么能力,而在于把「使用它」的门槛从「会敲命令」降到了「会双击」。
二、设计理念:一切皆插件
要理解 Harness 和别的智能体工具差在哪,得先理解它挂在官网第一行的那句话:Everything is a Plugin。

这不是一句营销口号,它有几个很具体的后果:
| 说法 | 具体含义 |
|---|---|
| 连 agent loop 本身都是插件 | 不只是「工具」可以扩展。智能体循环、模型适配器、会话日志、工具注册表,全都可以从配置里替换掉 |
| 没有特权核心 | 没有一层「内核代码」是你动不了的。扩展方式是把插件挂在旁边,而不是改核心 |
| 注册自动撤销 | 通过上下文注册的东西——事件监听、工具、定时器——在插件卸载时自动清理,不需要手动写 removeListener |
| 依赖声明式就绪 | 插件声明自己依赖哪些服务,框架会等依赖就绪后才加载它 |
支撑这套设计的是底层框架 Cordis,它的定位是「插件向共享上下文贡献服务、类型化事件和可撤销的副作用」。
这套设计的现实意义在于:换模型、加工具、改界面,都不需要动核心代码。这也是它能在短时间内长出大量第三方插件的原因——后面会讲这个数字有多大。
三、桌面版比命令行版多了什么
| 命令行版 | 桌面版 | |
|---|---|---|
| 安装 | 先装 Node.js,再用 npx 拉包 | 下载安装包,双击安装 |
| 启动 | 终端敲命令 | 点图标 |
| 界面 | 浏览器打开 127.0.0.1:3080 | 独立窗口 |
| 后台常驻 | 终端一关,服务就停 | 托盘常驻,关掉窗口任务照跑 |
| 完成通知 | 无,得盯着 | 任务完成弹系统通知 |
| 主题 | 跟随浏览器 | 跟随系统深浅色 |
| 更新 | 手动 | 自动 |
这七项里,真正改变使用方式的其实只有两项:
托盘常驻。智能体跑一个任务动辄几分钟。命令行版下你关掉终端服务就停了,桌面版关掉窗口它还在后台跑,想起来了点开看进度。
完成通知。这是「能不能放心走开」的关键。以前你要么盯着屏幕,要么过一会儿回来看一眼;现在任务跑完会弹通知,中间这段时间可以干别的。
四、下载与安装
官方下载页:https://www.deepseek.com/en/download/
系统要求(有一个坑要注意)
| 系统 | 要求 |
|---|---|
| macOS | 仅支持 Apple 芯片,macOS 13 或更新 |
| Intel Mac | 暂不支持(官网明确标注) |
| Windows | Windows 10 或更新,64 位 |
用 Intel 芯片 Mac 的话,这一版装不了,别浪费时间找安装包。
安装包信息
| 平台 | 文件名 | 大小 |
|---|---|---|
| macOS (Apple 芯片) | dsh-latest-macos-arm64.dmg | 约 353 MB |
| Windows (64 位) | dsh-latest-windows-x64.exe | 约 276 MB |
安装方式就是常规操作:macOS 打开 DMG 把应用拖进「应用程序」;Windows 运行 EXE 按提示装完。
五、第一次打开:三步
| 步骤 | 怎么做 |
|---|---|
| 1. 配置模型 | 打开 设置 → 模型,在 DeepSeek 卡片里填入 API 密钥并保存。不用重启,下一次请求就生效 |
| 2. 选择工作区 | 点「选择工作区」,添加一个项目目录并选中 |
| 3. 发任务 | 建一个会话,直接说需求,比如让它总结一个仓库 |
⚠️ 新手最容易卡住的地方
没选工作区之前,会话输入框是用不了的。很多人装完打开发现打不了字,以为是装坏了——不是,选上工作区就好。
一个值得知道的安全设计
API 密钥是只写的:保存之后,界面只会收到一个脱敏的描述符,永远拿不到明文。密钥存在 $DSH_HOME/.credentials.yaml 里,设置文件只保留一个引用。
另外,高危操作(删除文件、执行带权限的命令)照旧会先弹确认框,桌面化并没有削弱安全机制,你不点头它不动手。
六、插件:生态有多大,怎么玩
先给个量级感:
| 指标 | 数据 |
|---|---|
| 官方仓库 Star 数 | 约 21.2 万 |
| GitHub 上带 dsh-plugin 标签的公开仓库 | 约 1.5 万个 |
| 使用第三方插件的用户占比 | 约 60%(官方按模型 API 用户口径统计) |
插件有三层玩法,门槛依次升高:
| 层级 | 怎么做 | 适合谁 |
|---|---|---|
| ① 用官方的 | 在插件管理页的「官方」分组里直接开启,比如自动化任务 | 所有人 |
| ② 装别人写的 | 插件管理页可以直接输入插件包名安装,也能停用、卸载、查看介绍与来源 | 想扩展能力但不想写代码 |
| ③ 让 AI 自己写 | 在「创造模式」(实验性)里用对话描述需求,它自己写、自己装、自己验证 | 有具体想法的人 |
关于第三种,官网有个挺有说服力的演示:让它写一个「番茄时钟」悬浮插件,从加载技能、查阅运行时接口、写文件到安装验证,全程 5 分 24 秒,人只提了一句话。
如果你要自己写插件
插件的本体比想象的短——一个导出 apply 函数的 TypeScript 模块就是全部:
export const name = 'my-plugin'
export function apply(ctx) {
// 在这里注册能力
}
支持函数、对象、类三种写法,多数场景用函数形式就够。需要向其他插件提供服务时才用类形式。
七、几项实用技巧
技巧 1:接自己的模型或中转站
除了 DeepSeek 官方,还能接入第三方提供商。在「添加模型提供商」卡片里可以选内置的(比如 Anthropic、OpenAI、Kimi、GLM),直接填密钥即可。
更实用的是「自定义模型 API」——中转站、公司网关、自建服务器都能接。需要填四项:Provider ID、基础 URL、API 协议、至少一个模型。
| 协议选项 | 什么时候选 |
|---|---|
| OpenAI Chat Completions | 最常见,多数网关和自建服务用这个 |
| OpenAI Responses | 网关用的是这套接口时 |
| Anthropic Messages | 接 Anthropic 风格的服务 |
⚠️ 一个容易踩的坑:API 协议必须和网关实际使用的那一种对上。一个提供商只能用一种协议——如果你的网关同时提供两种,需要建两个提供商。
另外,Provider ID 一旦确定就是永久的,因为请求、已保存的会话、模型默认值和凭据引用都会用到它。想改名只能新建一个再删掉旧的。
不知道网关提供哪些模型?卡片里有「获取可用模型」,会去问端点。但这个功能只是便利手段,不是保证——遇到不按常见格式作答的端点,手动填模型 ID 效果完全一样。
技巧 2:网络代理要设对地方
这是最常遇到的困惑:「我浏览器能上,为什么它不行?」
原因是根本不存在一个所有软件都遵循的「系统代理」,实际上是三套互不相干的机制:
| 机制 | 谁遵循 |
|---|---|
| 操作系统的代理设置 | 浏览器和多数原生应用 |
| HTTP_PROXY / HTTPS_PROXY 环境变量 | curl、git、npm,以及 Harness |
| TUN 模式(虚拟网卡) | 所有程序,对应用透明 |
常见代理软件里的「系统代理」开关只写第一套。浏览器读得到,命令行工具永远看不到——这就是为什么它不走代理。
解决办法二选一:导出环境变量(HTTPS_PROXY 和 HTTP_PROXY),或者直接开 TUN 模式(后者对所有程序生效,且完全不需要变量)。
几个值得记住的限制:
| 限制 | 说明 |
|---|---|
| 不支持 SOCKS 代理 | socks5:// 会在启动时被报告并跳过。要指向代理软件的 HTTP 端口 |
| NO_PROXY 不支持 CIDR 网段 | 10.0.0.0/8 这类写法无效,要用主机名或域名后缀 |
| localhost 不用列 | 本地地址始终直连,否则它自己的界面都会绕回环 |
| 企业 TLS 拦截代理 | 需要额外指定组织的 CA 证书,且必须在启动前设置 |
技巧 3:把重复工作设成定时任务
「自动化任务」是一个需要手动开启的插件。开好之后,直接用自然语言创建提醒即可,底层会用到创建、列出、修改、删除这几个操作。
支持的调度方式相当全:
| 类型 | 适用场景 |
|---|---|
| 延迟若干秒 | 「20 分钟后提醒我」 |
| 绝对日期时间 | 「明天上午 10 点」 |
| 固定间隔 | 「每 2 小时检查一次」 |
| 每日 / 每周本地时间 | 「每周五 17:00 整理周报」 |
| cron 表达式 | 需要复杂规则时 |
一个小建议:用自然语言描述时间有歧义时,把时区写明确,比如「每天 Asia/Shanghai 时区 23:00 提醒我查看天气」。不写的话它会用浏览器时区来理解。
还有一个容易被忽略的好设计:会话没打开时,提醒照样在保存。到点了会恢复原来的会话把消息排进去,不会打断你在做的事情。
技巧 4:接一个记忆系统,让它跨会话记事
官方提供了三份默认关闭的参考配置,用来接入第三方记忆服务:
| 记忆系统 | 前置条件 | 特点 |
|---|---|---|
| Memorix | Node 22.18+ | 无需模型或向量服务,本地启发式模式可跑 |
| MCP 官方参考记忆 | 直接安装即可 | 存本地知识图谱;只做子串匹配,不是语义检索 |
| Engram | Go 1.25.10+ | 自动检测 Git 项目做隔离 |
这几份配置只是互操作参考,不代表官方认可或推荐。而且 Harness 只负责连接和发现工具,不负责帮你装服务、初始化数据库、选向量模型或建云端账号。
有个安全细节做得不错:启动这些子进程前,会主动移除名称通常表示凭据的环境变量和所有自身前缀的变量,避免密钥被顺走。
八、优缺点
| 优点 | 说明 |
|---|---|
| 门槛大幅降低 | 不用装 Node.js,不用碰终端,双击即用 |
| 后台常驻 + 完成通知 | 任务跑着你可以走开,跑完弹通知 |
| 与命令行版完全互通 | 会话、配置、插件都是通的,两个一起用也不冲突 |
| 插件生态活跃 | 约 1.5 万个带标签的公开仓库,且能对话生成插件 |
| 安全机制没被削弱 | 高危操作照常弹确认框;密钥只写不读 |
| 架构可替换性强 | 连智能体循环都能换,长期演进空间大 |
| 缺点 / 限制 | 说明 |
|---|---|
| 仍是开发者预览 | 官方明确说会有破坏性更新,不建议拿来跑生产 |
| 不支持 Intel Mac | 官网明确标注,只能 Apple 芯片 |
| 没有 Linux 官方包 | 官方口径是 macOS + Windows |
| 版本号带构建日期 | 走的是 nightly 通道,不是稳定版节奏 |
| 部分能力还在路上 | 沙箱、智能体团队、长期记忆、浏览器自动化、移动端都还在规划中 |
| OAuth 登录的提供商暂不支持 | 目前需要 API 密钥方式 |
九、两个必须提醒的点
| 提醒 | 具体做法 |
|---|---|
| 升级前备份数据 | 有版本会做一次性数据迁移(设置文件被导入改名、会话日志升级)。升级前先把数据目录整个复制一份 |
| 只从官方渠道下载 | 社区里有若干第三方封装版本。非官方包通常没有代码签名,macOS 未公证、Windows 会弹 SmartScreen 提示。要装就装官网的 |
写在最后
桌面版这件事,技术含量其实不高——就是把 Web UI 套了个原生壳。但它的意义不在技术,而在它把「谁能用」这个问题的答案扩大了。
命令行版本质上假设使用者是开发者:你得知道 Node.js 是什么、终端在哪、端口是什么意思。桌面版把这些假设全部去掉了,剩下一个双击。
而底层那套「一切皆插件」的架构,决定了它不会因为外壳变简单而能力缩水——门槛降低的是入口,不是上限。
当然,官方那句「仍在起步阶段」也得当真。它会变、会breaking、会有功能没做完。拿来尝鲜和探索很合适,拿来跑正经生产还得再等等。