voyager
Nagi-ovo
Enhancement suite for Gemini, AI Studio, Claude & ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件;其中的提示词管理器可用于任意网站,如 DeepSeek Harness。
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:xiaowei2025cqu23phy/dsh-desktop
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
中文 | English
DeepSeek Harness 的桌面客户端(Electron + TypeScript)。
harness 是个很能干的 agent 运行时,但它长在浏览器标签页里:你得记着开、记着看,离开电脑就只能干等。这个项目把它搬进桌面,并补上三件在浏览器里做不到的事:
全程本地运行,密钥与会话不出你的机器。
本项目遵循自定义许可协议(见 LICENSE),核心条款:
@tencent-connect/qqbot-nodejs、Electron 等)遵循各自许可证,详见 THIRD_PARTY_NOTICES.md 与下文「参考与致谢」。%APPDATA%/DeepSeek Harness Desktop),永远不会进入安装包或提交到仓库。%APPDATA% 下的配置与壁纸(deleteAppDataOnUninstall = false)。LICENSE 与 THIRD_PARTY_NOTICES.md(第三方组件清单),位于安装目录的 resources/ 下;免安装版在 resources/ 同级。从 GitHub Releases 下载,三种形态任选:
| 形态 | 文件 | 说明 |
|---|---|---|
| 安装版(推荐) | DeepSeek-Harness-Desktop-Setup-*.exe |
NSIS 安装程序,双击安装,自动创建开始菜单与桌面快捷方式,可选安装目录 |
| 便携版 | DeepSeek.Harness.Desktop-*.win.zip |
解压即用,免安装,适合 U 盘携带 |
| 源码版 | 克隆仓库npm install && npm start |
自行构建 |
安装版卸载时保留用户配置与壁纸(不会删除 %APPDATA% 数据);如需彻底清理请手动删除 %APPDATA%/DeepSeek Harness Desktop。
系统要求:Windows x64、Node.js ≥ 22.13(建议 24 LTS)。 打包版自带 Electron 运行时,数据库用其内置的
node:sqlite,不需要额外装数据库。系统 Node 只在两种情况下用到:源码构建/跑测试,以及用npx托管拉起 harness。 提示:先运行npx @deepseek-ai/dsh web并配置好模型密钥,再打开桌面端,体验最佳。
安装包不包含智能体运行时与任何配置/密钥(隐私设计),新电脑只需三步:
winget install OpenJS.NodeJS.LTS;node -v 能看到版本号即成功;npm config set registry https://registry.npmmirror.com;不需要手动安装 dsh:桌面端首次启动会用
npx自动下载智能体运行时; 想用 QQ 机器人再加一步:QQ 开放平台注册机器人,把 AppID/Secret 填入「设置 → QQ 机器人」(见 QQ-BOT.md)。
📖 完整安装、配置、手机端与 QQ 机器人使用步骤见 实操指南(汉英双语),接入钉钉/飞书/Home Assistant/iOS 捷径等更多方式见 接入指南。 🤖 QQ 机器人完整指南(部署/平台权限/指令集/FAQ)见 docs/QQ-BOT.md;📱 手机 PWA 特色功能见 docs/PWA.md。
任务 @工作区名 或「进入工作区后直接发」;进展 显示阶段(思考/工具/输出/完成+产物提示);任务过程默认静默、播报 按需开;机器人对话(私聊/群聊)集中放在可见的「机器人对话」工作区;群聊仅聊天、不响应任何指令(含查询)并带安全提醒;归档的会话可随时 恢复 <会话id>;完整指令集与部署/权限指引见 QQ-BOT.md。dsh web,没有则自动拉起(默认 npx @deepseek-ai/dsh web),崩溃自动重启。主窗口与壁纸穿透(主窗口壁纸会透出到内嵌对话页):

手机 PWA 远程控制(扫码连接 → 选择工作区与模型 → 一键运行任务 → 实时流式查看):

AI 屏保(空闲全屏展示 agent 实时工作画面,壁纸可自定义):

演示使用内置"鲸鱼海洋"示例壁纸录制,不涉及任何个人壁纸或会话内容。
npm install
npm start # 构建并启动桌面端
首次启动会自动探测 http://127.0.0.1:3080:已有 harness 则直接接入;没有则自动执行 npx --yes @deepseek-ai/dsh web --port 3080 拉起(需要 Node.js ≥ 22.13)。
提示:先运行
npx @deepseek-ai/dsh web并配置好模型密钥,再打开桌面端,体验最佳。
顶栏的「默认模型」下拉框列出当前已配置的全部 Provider 与模型:
session.selectModel 写入,harness 会同时持久化为新会话的默认模型,热生效、无需重启。credentials.set 安全写入,不会明文落盘到配置。「设置 → AI 屏保」:
| 配置 | 说明 |
|---|---|
| 启用空闲检测 | 空闲达到阈值后自动进入全屏屏保 |
| 空闲几分钟后触发 | 默认 5 分钟 |
| 自动启动 agent 任务 | 默认关闭。进入屏保只显示环境画面(时钟/状态),不消耗任何资源;勾选后才会自动创建会话执行任务 |
| 任务提示词 | 自定义屏保任务(默认:浏览科技新闻并整理要点) |
| 任务工作目录 | 可选,指定 agent 的工作目录 |
| 任务超时(分钟) | 默认 10 分钟。任务超时自动停止——防止 agent 失控循环烧 CPU(这是重要护栏) |
屏保画面实时渲染 agent 的思考、输出文本与工具调用卡片(流式渲染为增量追加,不因长输出卡顿)。退出方式:点击、按键、滚轮、触摸均可立即退出;鼠标移动不触发退出(避免鼠标抖动导致屏保闪退)。退出后任务默认保留在后台继续运行,下次进入屏保会「继续上次任务」;关闭「保留任务」则在每次进入时重启新任务。任务会话自动命名「AI 屏保任务 HH:MM」,便于在 Web UI 中识别。
防循环弹出:系统屏保拉起(/s)与空闲检测自动激活都受 5 分钟退出冷却约束——用户点击退出后,5 分钟内不会被系统/空闲检测再次拉起,避免"关了又弹"。用户主动点击「AI 屏保」按钮不受此限制。
注册为 Windows 系统屏保:点击「注册为系统屏保」后,Windows 的锁屏/超时机制会用 /s 参数拉起本应用直接进入全屏模式(注册表 HKCU\Control Panel\Desktop\SCRNSAVE.EXE,无需管理员权限;注册前自动备份原设置,取消时恢复)。
体验提示:AI 屏保是「观看模式」——它全屏展示 agent 正在做什么,而不是接管你的鼠标键盘。空闲时让 agent 干活前,先想清楚任务是否真的需要跑(模型调用消耗 token、工具调用消耗 CPU)。
npx @deepseek-ai/dsh 自动下载)、官方指定版本(如 @deepseek-ai/dsh@0.1.1-rc.2)、本机仓库脚本(浏览选择 run-local.cmd),也可手动输入自定义命令(如 pnpm dsh web --port {port})。「设置 → 外观」可分别自定义:
%APPDATA%/DeepSeek Harness Desktop/wallpapers),原图移动/删除不影响;支持 png/jpg/jpeg/gif/webp/bmp。「设置 → 远程访问」启用后,桌面端开一个局域网网关(默认端口 3082,可修改,Bearer token 认证):
http://<电脑IP>:3082)安装为 App(PWA):
http://192.168.x.x 视为非安全上下文,不会注册 Service Worker——此时 PWA 仍可正常当浏览器标签页使用(在线收发消息/任务/审批),只是不缓存应用壳;安全策略:远程访问默认启用 2 小时后自动关闭(可在设置中调整过期策略),到期需在桌面端重新启用;仅可信局域网可达,禁止内网穿透/公网转发。 控制权全在桌面端:一键暂停全部连接(会立即断开已建立的连接,而不是等到下次请求)、单设备暂停/拉黑(拉黑后令牌正确也拒绝)、锁屏/睡眠自动暂停、可只监听当前局域网 IP。
手机端功能:
/permission 命令,需新版 harness)「设置 → QQ 机器人」填入在 QQ 开放平台 注册机器人得到的 AppID/AppSecret 即启用(留空自动禁用),并在开放平台关闭机器人的「允许被添加为好友」(首次启用时会强制确认:只有你本人能把机器人加为好友/拉进群)。想再收紧可填「允许的用户 openid」(留空 = 不限制;QQ 的 openid 识别需企业主体,个人主体拿不到自己的 openid,发一条消息即可在设置页状态里看到自己的),也可设置默认工作区/目录(任务命令未指定时自动使用)。在 QQ 私聊机器人发送指令(发送任意无法识别的消息,机器人会自动回复完整指令集与示例):
| 指令 | 说明 | 示例 |
|---|---|---|
状态 / 会话 / 工作区 / 模型 |
查询类 | 状态、工作区 |
任务 <描述> |
默认工作区执行任务 | 任务 分析这个仓库的架构 |
任务 @<工作区名> <描述> |
指定工作区执行 | 任务 @qqbot 修复登录 bug |
任务 目录:<路径> <描述> |
指定目录执行(仅限工作区/预设根目录内) | 任务 目录:D:/work 写一个脚本 |
进入 |
纯对话:不绑定工作区/目录,朋友模式 | 进入 |
进入 <工作区名/目录> |
在该工作区对话(助手模式) | 进入 qqbot、进入 D:/work |
| (对话模式) | 直接发消息即可,无需前缀;agent 回复自动推送给你,全程无"已发送"噪音;退出 结束 |
帮我看看项目里的 TODO → 💬 回复 → 退出 |
进展 <会话id> |
任务实时进展(状态/工具统计/最新输出) | 进展 session-xxxxxxxx |
停止 <会话id> / 打开 <会话id> |
停止任务 / 查看会话内容 | 停止 session-xxxxxxxx |
允许 / 拒绝 |
审批应答:agent 请求权限时允许/拒绝(多个待审批时带会话 id) | 允许、拒绝 session-xxxxxxxx |
选 <编号> |
选择题应答:回答 agent 提问(多选 选 1 3,自定义 选 自定义:…,多题批次 #2 选 1) |
选 2 |
定时 <时长> <任务> |
定时任务:定时 10分钟 检查更新(10 分钟/5m/2小时/1天 一次性;定时 每天9:00 写日报 每天) |
定时 10分钟 检查更新 |
定时列表 / 取消定时 <编号> |
查看/取消已排定时任务 | 取消定时 2 |
目录 <路径> / 文件 <路径> |
浏览工作区目录 / 查看文本文件(白名单内) | 目录 D:/work、文件 D:/work/README.md |
导出 <会话id> |
将会话导出为 Markdown(保存在桌面端exports/ 目录) |
导出 session-xxxxxxxx |
用量 |
今日用量统计(会话数/回合数/Token) | 用量 |
角色 <设定> |
角色扮演:设置对话模式角色(仅纯对话生效,与朋友提示词叠加);角色 无 清除 |
角色 你是温柔的英语老师 |
| (私聊发图片) | 图片理解:对话模式下直接发图片,agent 看图分析 | 发一张截图 →看看这张图有什么问题 |
按钮操作:任务启动后自动附带「⏹ 停止 / 📋 进展 / 📖 打开」按钮;审批推送带「✅ 允许 / ❌ 拒绝」;单选提问带选项按钮——点一下即操作/应答,基本不用打字。
模式提示词:任务 xxx 等指令下,agent 以专业助手身份工作;对话模式下以朋友口吻聊天;两套提示词可在桌面端「设置 → QQ 机器人」自定义(留空 = 不注入)。角色扮演:角色 <设定> 为对话模式叠加角色(如"你是温柔的英语老师"),角色 无 清除,在桌面端同样可预设默认角色。
图片理解:对话模式下直接给机器人发图片(私聊),agent 自动"看图说话",无需任何额外配置。
对话可见性:QQ/Telegram 的对话会话在手机 PWA 侧边栏「🤖 机器人对话」分组置顶显示,点开即可看到完整聊天记录并实时流式同步。
典型流程:工作区 查看列表 → 进入 qqbot → 连续对话 → 退出。
基于 @tencent-connect/qqbot-nodejs(WebSocket 长连接),协议参考 QQ 开放平台 API v2 文档(消息收发/消息类型/事件订阅)与 Agent QQBot 接入指南。QQ 官方机器人以被动回复为主,但与机器人交互后 48 小时内支持主动推送;长回复自动分段。agent 需要审批/提问时会主动推送通知(QQ 交互窗口内与 Telegram 均可即时送达;低风险审批带「允许/拒绝」内联按钮,点一下即可应答;高风险操作——写入/删除/执行等——只转桌面端确认,聊天侧「允许」无效),推送失败时待办仍会附加在下次消息的回复末尾提醒。手机端同样支持审批:会话中出现审批/提问卡片,一键允许/拒绝或作答。QQ/Telegram 均可开启默认对话模式:非指令消息直接进入纯对话(不绑定工作区),无需先发「进入」。
npm run build # tsc 编译 main/preload/renderer/remote 到 dist/,再 esbuild 打包 PWA、复制静态资源
npm start # 构建 + electron .
npm test # 离线测试套件(无需 harness):指令解析、RPC 协议、审批流、任务队列、SQLite、网关断开
npm run lint # ESLint(flat config,含类型感知规则)
npm run smoke # 冒烟测试:验证 RPC 客户端与模型目录(需 harness 运行中)
npm run pack # 打包安装版 + 免安装 zip 到 release/
npm run pack:zip # 只出免安装 zip
npm run pack:portable # 只出单文件 portable exe
类型检查分三套(主进程 / 渲染进程 / PWA);另有 tsconfig.scripts.json 对 scripts/*.mjs 做 checkJs 扫描。CI 在 push 与 PR 上跑:三套类型检查 + 脚本 checkJs + 构建 + ESLint + npm test。
脚本 checkJs 只以
scripts/目录下的报错判定成败:scripts/*.mjs会require编译产物dist/,而dist/是 tsc 的降级输出(类型断言在 emit 时被擦除),对它做checkJs得到的报错不代表源码有问题——源码已由上面三套类型检查完整覆盖。CI 因此显式过滤掉dist/的噪声。
调试开关:
--remote-debugging-port=9222 启动时启用 CDP,可用 node scripts/cdp-eval.mjs '<表达式>' 检查页面状态。--ss-debug 启动时,屏保窗口保持打开(禁用空闲退出),便于调试屏保画面。node scripts/mux-test.mjs <baseUrl> 端到端管线测试:设置默认模型 → 建会话 → 发提示 → 订阅事件流(会消耗少量模型调用)。src/main/ 主进程
index.ts 入口(单实例锁、/s 屏保参数、事件桥、启动编排)
config.ts 配置读写与老配置迁移(userData/config.json)
ipc.ts IPC 处理器注册
harness.ts harness 进程托管(探测/接管/拉起/健康检查/崩溃重启)
client.ts HTTP RPC 客户端(POST /api/<method> + mux 事件流)
rpc-protocol.ts RPC 协议适配器(typert 斜杠 / 旧版点协议的能力表与参数壳)
gateway.ts 局域网网关(Bearer token、设备审批、RPC 与文件白名单、SSE)
tls-cert.ts 自签 X.509 证书生成(纯 node:crypto,供 PWA 离线外壳用)
remote-commands.ts 远程指令处理器(QQ/TG/PWA 共用:任务、审批、提问、会话、定时)
remote-util.ts 远程指令的纯工具函数(可单测)
qq-bot.ts QQ 适配器(门禁、按钮身份、推送、诊断)
qq-commands.ts QQ 指令解析(纯函数,可单测)
qq-onboard.ts QQ 扫码绑定流程
telegram-bot.ts Telegram 适配器
models.ts 模型目录、默认模型切换、自定义 Provider 向导
screensaver.ts AI 屏保(空闲检测、全屏窗口、任务编排、系统屏保注册)
appearance.ts 三端壁纸与拼豆滤镜
workspace-registry.ts 工作区注册表与路径白名单
db.ts SQLite 本地存储(活动/审计/任务队列,含旧 JSON 迁移)
event-hub.ts mux 事件广播
notifications.ts 通知分级与勿扰时段
updater.ts 版本检查
diagnostics.ts 诊断信息收集
settings-heal.ts harness 配置自愈(改写前自动备份)
tray.ts / windows.ts 托盘与窗口管理
src/preload.ts 预加载(IPC 桥,渲染进程不直接接触 Electron)
src/renderer/ 渲染进程(经典脚本,无打包器)
index.html 主窗口(控制条 + 工作台 + webview)
main.ts 主窗口逻辑
screensaver.html 全屏屏保(实时 agent 画面)
src/remote/ 手机 PWA(网关直接托管)
index.html app.ts 单页应用
sw.js 离线外壳(仅 HTTPS 下可注册)
manifest.webmanifest + 图标
scripts/ 构建、冒烟、端到端与离线测试脚本
桌面端直接实现 deepseek-harness 的 HTTP RPC 协议,并兼容两代 harness:
@deepseek-ai/dsh 0.1.2-rc.1+(typert 斜杠协议):探测时自动协商协议与参数壳,支持浏览器 token 鉴权(?token= 换持久 cookie);模型目录走 session/modelCatalog、Provider 目录走 llm/listProviders / llm/listConfigurableProviders,自定义 Provider 写入走 settings/update + settings/mutate + credentials/set。llm.models、llm.providers、workspace.*、host.describe 等方法自动回退兼容。POST /api/<method>,body 为 {type:'client-request', rpcId, method, payload},响应 {type:'server-response', rpcId, result};回环地址免令牌。GET /api/events.mux(SSE / WebSocket 自动协商),推送 session/event 等帧,屏保、手机 PWA 与机器人通道据此实时渲染。session.history):先取 session/list 的 projections.asOfSeq,再调 session/page 拉取记录,过滤出 message 级事件回放给手机 / QQ / 屏保。session.list/create/prompt/cancel/rename/selectModel、session.modelCatalog、session.page、llm.listProviders/listConfigurableProviders/discoverModels、settings.update/mutate、credentials.set、workspace.create/rename/delete。协议细节随 harness 演进可能变化;桌面端对参数壳(typert:_request / request / 平铺)按方法自适应,并在官方版缺失旧方法时提供降级或桥接(如 workspace.list 由会话 cwd 合成)。
本项目站在众多优秀开源项目的肩膀上,在设计与实现中参考、依赖并致谢以下项目及其维护者:
| 项目 | 贡献 | 许可 |
|---|---|---|
| deepseek-ai/deepseek-harness | 核心 Agent 引擎与 HTTP RPC / 事件流协议(dsh-host-apiproxy:一元 RPC、mux 事件流、settings/credentials/llm 域),桌面端、手机 PWA 与机器人通道都建立在它之上 |
MIT |
| tencent-connect/qqbot-nodejs | QQ 开放平台机器人 Node SDK:WebSocket 网关、消息收发、主动推送(48h 窗口)与内联键盘审批按钮 | MIT |
| tencent-connect/qqbot-agent-sdk | 扫码登录(onboard:create_bind_task / AES-GCM 凭据解密)与审批内联键盘的协议参考实现 | MIT |
| tencent-connect/dsh-qqbot | 官方 QQ×DSH 插件:指令集、会话映射与事件展示的设计参考 | 各自许可 |
| electron 与 electron-builder | 桌面壳与打包分发 | MIT |
| node-qrcode | 手机扫码配对与 QQ 扫码登录的二维码生成 | MIT |
QQ 机器人通道的协议细节参考了 QQ 开放平台 API v2 文档 与 Agent QQBot 接入指南。
同时感谢 DeepSeek Harness 社区与本项目测试过程中提供反馈的各位使用者。完整第三方组件与许可证清单(含间接依赖)见 THIRD_PARTY_NOTICES.md,发布包内随附一份。
如果你也是这些项目的维护者——谢谢你们的工作,让这个项目成为可能 🙏
觉得有用?欢迎加入内测交流群反馈问题、提出建议;也可以请作者喝杯咖啡 ☕
| 内测交流群(QQ) | 微信赞赏 |
|---|---|
![]() |
![]() |
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: desktop-app、qq、qq-bot、telegram-bot。