🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

彩色桌面客户端 988hj7tczd-oss/harness-desktop

DeepSeek Harnessv0.1.4
988hj7tczd-oss64 天前有提交已提供中文文档扫描:高危

开箱即聊,主题配色随你调,任务面板追踪进度

33.3/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:要求 dsh 0.1.1-rc.2,而最新版为 0.2.1-rc.2;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 988hj7tczd-oss/harness-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
静态安装检查未通过,可能需要源码安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 64 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

要求 dsh 0.1.1-rc.2,而最新版为 0.2.1-rc.2;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包harness-desktop @ 0.1.4
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✗dsh CLI 依赖要求 0.1.1-rc.2 · 最新 0.2.1-rc.2 不兼容
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/19 20:26:25

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本命令参数由运行时变量拼接读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 81 处,展示前 57 条)
  • 读取本地文件
    scripts/ensure-electron.mjs:29
    if (!existsSync(electronDir)) {
  • 读取本地文件
    scripts/ensure-electron.mjs:37
    if (existsSync(bin)) {
  • 执行外部命令来自配置/变量
    scripts/ensure-electron.mjs:48
    const res = spawnSync(process.execPath, [installScript], {
  • 读取本地文件
    scripts/ensure-electron.mjs:53
    if (res.status === 0 && existsSync(bin)) {
  • 发起网络请求
    adapter/dsh-client.ts:81
    res = await fetch(`${this.baseUrl}/api/${method}`, {
  • 发起网络请求
    adapter/dsh-client.ts:109
    const res = await fetch(`${this.baseUrl}/api/host.describe`, {
  • 发起网络请求
    adapter/dsh-client.ts:126
    return this.request('host.describe', {})
  • 发起网络请求
    adapter/dsh-client.ts:130
    return this.request('session.list', {})
  • 发起网络请求
    adapter/dsh-client.ts:134
    return this.request('session.create', payload)
  • 发起网络请求
    adapter/dsh-client.ts:138
    return this.request('session.history', payload)
  • 读取本地文件
    electron/credential-store.ts:22
    if (!existsSync(file)) return {}
  • 读取本地文件
    electron/credential-store.ts:23
    const parsed = JSON.parse(readFileSync(file, 'utf8')) as Record<string, unknown>
  • 写入本地文件
    electron/credential-store.ts:36
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    electron/credential-store.ts:37
    writeFileSync(file, `${JSON.stringify(map, null, 2)}\n`, 'utf8')
  • 读取本地文件
    electron/dsh-manager.ts:28
    if (existsSync(c)) return c
  • 读取本地文件
    electron/dsh-manager.ts:39
    if (fromNpm && existsSync(fromNpm)) {
  • 执行外部命令表达式求值
    electron/dsh-manager.ts:174
    private async spawn(): Promise<void> {
  • 执行外部命令来自配置/变量
    electron/dsh-manager.ts:184
    const child = spawn(exec, args, {
  • 读取本地文件
    electron/ipc.ts:187
    if (existsSync(sessionDir)) rmSync(sessionDir, { recursive: true, force: true })
  • 删除本地文件递归
    electron/ipc.ts:187
    if (existsSync(sessionDir)) rmSync(sessionDir, { recursive: true, force: true })
  • 写入剪贴板
    electron/ipc.ts:197
    clipboard.writeText(String(text ?? ''))
  • 读取本地文件
    electron/ipc.ts:232
    const stat = statSync(path)
  • 读取本地文件
    electron/ipc.ts:238
    const buf = readFileSync(path)
  • 发起网络请求
    electron/ipc.ts:327
    const res = await fetch(
  • 写入本地文件
    electron/ipc.ts:337
    writeFileSync(save.filePath, buf)
  • 写入本地文件
    electron/ipc.ts:353
    writeFileSync(save.filePath, content, 'utf8')
  • 请求外部主机api.deepseek.com
    electron/ipc.ts:371
    const res = await fetch('https://api.deepseek.com/models', {
  • 发起网络请求
    electron/ipc.ts:371
    const res = await fetch('https://api.deepseek.com/models', {
  • 读取本地文件
    electron/memory.ts:24
    if (!existsSync(file)) {
  • 读取本地文件
    electron/memory.ts:28
    const parsed = JSON.parse(readFileSync(file, 'utf8')) as MemoryUnit
  • 写入本地文件
    electron/memory.ts:38
    mkdirSync(join(file, '..'), { recursive: true })
  • 写入本地文件
    electron/memory.ts:39
    writeFileSync(file, `${JSON.stringify(unit, null, 2)}\n`, 'utf8')
  • 读取本地文件
    electron/profile-setup.ts:37
    if (!existsSync(join(src, 'index.js'))) {
  • 写入本地文件
    electron/profile-setup.ts:43
    mkdirSync(join(target, '..'), { recursive: true })
  • 读取本地文件
    electron/profile-setup.ts:46
    if (existsSync(manifestPath)) {
  • 读取本地文件
    electron/profile-setup.ts:47
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
  • 写入本地文件
    electron/profile-setup.ts:52
    writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8')
  • 读取本地文件
    electron/profile-setup.ts:65
    if (!existsSync(join(profileDir, 'package.json'))) {
  • 读取本地文件
    electron/settings-store.ts:40
    if (!existsSync(this.file)) return {}
  • 读取本地文件
    electron/settings-store.ts:41
    return JSON.parse(readFileSync(this.file, 'utf8')) as Partial<AppSettings>
  • 写入本地文件
    electron/settings-store.ts:49
    mkdirSync(dirname(this.file), { recursive: true })
  • 写入本地文件
    electron/settings-store.ts:50
    writeFileSync(this.file, JSON.stringify(this.settings, null, 2), 'utf8')
  • 读取本地文件
    scripts/after-pack.mjs:34
    if (existsSync(pkgDir)) {
  • 执行外部命令固定命令
    scripts/after-pack.mjs:41
    execFileSync('npm', ['pack', `${scoped}/${pkgName}`, '--pack-destination', projectRoot], {
  • 读取本地文件
    scripts/after-pack.mjs:47
    const tgzFile = readdirSync(projectRoot).find((f) => f.includes(pkgName) && f.endsWith('.tgz'))
  • 删除本地文件递归
    scripts/after-pack.mjs:52
    rmSync(tmpDir, { recursive: true, force: true })
  • 写入本地文件
    scripts/after-pack.mjs:53
    mkdirSync(tmpDir, { recursive: true })
  • 执行外部命令固定命令
    scripts/after-pack.mjs:54
    execFileSync('tar', ['-xzf', tgz, '-C', tmpDir], { cwd: projectRoot, stdio: 'pipe' })
  • 读取本地文件
    scripts/after-pack.mjs:56
    if (!existsSync(unpacked)) throw new Error('tarball 无 package/ 目录')
  • 写入本地文件
    scripts/after-pack.mjs:57
    mkdirSync(scopedDir, { recursive: true })
  • 删除本地文件递归
    scripts/after-pack.mjs:58
    rmSync(pkgDir, { recursive: true, force: true })
  • 删除本地文件递归
    scripts/after-pack.mjs:60
    rmSync(tmpDir, { recursive: true, force: true })
  • 删除本地文件
    scripts/after-pack.mjs:61
    rmSync(tgz, { force: true })
  • 读取本地文件
    scripts/after-pack.mjs:62
    if (!existsSync(pkgDir)) throw new Error(`解包后仍不存在: ${scoped}/${pkgName}`)
  • 读取本地文件
    scripts/after-pack.mjs:76
    const pkg = JSON.parse(readFileSync(join(projectRoot, 'package.json'), 'utf8'))
  • 读取本地文件
    scripts/after-pack.mjs:96
    if (!existsSync(src)) {
  • 删除本地文件递归
    scripts/after-pack.mjs:119
    rmSync(dest, { recursive: true, force: true })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.deepseek.com

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 自定义主题配色
  • 任务面板追踪进度

彩色可定制外观的 DeepSeek Harness 桌面客户端

README

由 DeepSeek 最新模型翻译生成
harness-desktop — DeepSeek Harness 彩色桌面端(开箱即用版) 开箱即用的 AI 助手工作台 · DeepSeek Harness 的开箱即用桌面客户端。 下载、安装、双击、开聊——无需终端,无需配置环境。 Release License Platform English 英文 README:README_EN.md 彩色外观 · 随你配色 把这台工作台调成你的颜色:深色 / 浅色 / 跟随系统三种主题,DeepSeek 蓝 / 绿 / 紫 / 橙四种主题色,再加上字体大小与消息密度——全部即时生效、重启保留,让每一天的 Harness 都换个心情。 splash 截图 启动界面(深色) splash 主界面(浅色 · 官方 DeepSeek Harness Web UI 集成 + 品牌) main 特性 - 开箱即用:内置 DeepSeek Harness 引擎,装完即聊;首启 4 步向导 3 分钟上手 - 原汁原味的官方 UI:窗口直接加载引擎官方 Web UI(同源加载,非 iframe)——会话、轨迹、设置都是官方体验,不做第二套界面
展开完整文档(README 剩余 1 节)
harness-desktop — DeepSeek Harness 彩色桌面端(开箱即用版)

开箱即用的 AI 助手工作台 · DeepSeek Harness 的开箱即用桌面客户端。
下载、安装、双击、开聊——无需终端,无需配置环境。

Release License Platform English

英文 README:README_EN.md

彩色外观 · 随你配色

把这台工作台调成你的颜色:深色 / 浅色 / 跟随系统三种主题,DeepSeek 蓝 / 绿 / 紫 / 橙四种主题色,再加上字体大小与消息密度——全部即时生效、重启保留,让每一天的 Harness 都换个心情。

splash

截图

启动界面(深色)

splash

主界面(浅色 · 官方 DeepSeek Harness Web UI 集成 + 品牌)

main

特性

- 开箱即用:内置 DeepSeek Harness 引擎,装完即聊;首启 4 步向导 3 分钟上手
- 原汁原味的官方 UI:窗口直接加载引擎官方 Web UI(同源加载,非 iframe)——会话、轨迹、设置都是官方体验,不做第二套界面
- 官网同源背景皮肤:复刻 DeepSeek Harness 官网 hero 的 WebGL2 流体辉光背景(深/浅双主题配方、鼠标辉光交互、低配机自动降级静态渐变),官方界面侧栏/输入区同步质感
- 一键更新:左下角「更新」按钮自动发现新版本——后台静默下载、进度可视化、一键重启安装;保持最新则无打扰
- 流式聊天:打字机输出 + 思考过程可视化,如 ChatGPT 般顺滑
- 任务面板:任务追踪 / 自动复盘 / 失败重试,一条消息一个任务
- Agent 进化:记忆自动沉淀(偏好/项目约定/成功做法)+ 同类任务自动提炼技能,越用越顺手
- 安全:严格 CSP / 单实例锁 / 附件限制 / safeStorage 密钥加密
- 系统托盘常驻:关闭最小化到托盘,后台持续运行
- 三平台原生构建:GitHub Actions 矩阵,macOS / Windows / Linux 各自在原生 runner 上构建

快速开始

安装(三平台)

macOS / Windows / Linux 安装包:GitHub Releases 下载对应平台安装包(dmg / exe / AppImage / deb)

npm 一键安装(自动下载对应平台安装包):

npm install -g harness-desktop
npm 新版默认拦截安装脚本,如需自动下载安装包加参数:
npm install -g --allow-scripts=harness-desktop harness-desktop
harness-desktop # 启动安装

Homebrew(macOS):

brew tap 988hj7tczd-oss/harness-desktop
brew install harness-desktop

直接下载:

| 平台 | 安装包 |
| macOS Apple Silicon | harness-desktop-0.1.4-arm64.dmg |
| macOS Intel | harness-desktop-0.1.4.dmg |
| Windows x64 | harness-desktop.Setup.0.1.4.exe |
| Linux x64 | harness-desktop-0.1.4.AppImage / harness-desktop_0.1.4_amd64.deb |

国内加速(Gitee 镜像):https://gitee.com/jerryweizhihao/harness-desktop

首启运行 → 4 步向导(欢迎 → 配置 API Key → 选择工作区 → 完成)→ 开始对话

API Key:前往 platform.deepseek.com 获取(示例中所有密钥均为占位符 YOUR_API_KEY)

未提供安装包时可用开发模式运行:
pnpm install
pnpm dev

命令行使用

npm 一键安装 + 启动:

安装(自动下载对应平台安装包)
npm install -g harness-desktop
npm 新版默认拦截安装脚本,如需自动下载加参数:
npm install -g --allow-scripts=harness-desktop harness-desktop

启动安装(打开已下载的 dmg/exe/AppImage) harness-desktop

检查是否已下载 harness-desktop --check

Homebrew(macOS):

brew tap 988hj7tczd-oss/harness-desktop
brew install harness-desktop

直接下载安装包:

macOS (Apple Silicon)
curl -L -o harness-desktop.dmg "https://github.com/988hj7tczd-oss/harness-desktop/releases/download/v0.1.4/harness-desktop-0.1.4-arm64.dmg"
Windows
curl -L -o harness-desktop.exe "https://github.com/988hj7tczd-oss/harness-desktop/releases/download/v0.1.4/harness-desktop.Setup.0.1.4.exe"
Linux
curl -L -o harness-desktop.AppImage "https://github.com/988hj7tczd-oss/harness-desktop/releases/download/v0.1.4/harness-desktop-0.1.4.AppImage"
chmod +x harness-desktop.AppImage && ./harness-desktop.AppImage

国内加速(Gitee 镜像):https://gitee.com/jerryweizhihao/harness-desktop

开发指南

pnpm install # 安装依赖
pnpm dev # 开发模式:vite + electron(HMR)
pnpm build # 构建 renderer + main
pnpm test # 运行单元测试(Vitest)
pnpm typecheck # TS 类型检查
pnpm dist # 打包 macOS dmg + Windows exe(输出到 out/)
pnpm dist:mac # 仅 macOS
pnpm dist:win # 仅 Windows

macOS 签名与公证流程见 docs/SIGNING.md。

技术栈

- 引擎:DeepSeek Harness @deepseek-ai/dsh@0.1.1-rc.2(跟踪官方 latest,同步官方功能)
- 桌面壳:Electron 43 + electron-builder
- 前端:React 18 + TypeScript + Vite(手写 CSS + --dsw- token,无重型 UI 库)
- 隔离层:adapter/ 独立封装 dsh API,上游变更只改 adapter,renderer 永不见 dsh 原始字段

DSH 生态

- 📦 awesome-dsh-plugin — DeepSeek Harness 插件精选列表(本项目已收录于 Desktop Clients 板块)
- 🖱️ dsh-computer-use — Computer Use 插件:给 harness-desktop 增加"虚拟鼠标真人操作"能力
- 🌐 独立站:aibunkhouse.com · 工具页:aibunkhouse.com/tools

已知限制(诚实标注)

- 未签名:当前 macOS/Windows 产物未做代码签名/公证,安装时系统可能提示"无法验证开发者";macOS 应用内自动更新依赖代码签名(未签名时静默跳过,请用 GitHub Release 手动下载更新);签名流程见 docs/SIGNING.md
- 体积:安装包约 130-230MB(内置完整 dsh 引擎 + Electron 框架)
- 三平台:macOS / Windows / Linux 均已在各自原生环境构建(GitHub Actions 矩阵),Windows 已实机验证可用
- dsh 引擎:处于 rc 预览期,本项目跟踪官方 latest 0.1.1-rc.2

License

MIT

非 DeepSeek 官方产品,与 DeepSeek 无附属关系;DeepSeek Harness 为 DeepSeek AI 的开源项目。*
预览分享卡片长什么样 ↓988hj7tczd-oss/harness-desktop
分享 · DeepSeek Harness Hub
988hj7tczd-oss/harness-desktop

开箱即聊,主题配色随你调,任务面板追踪进度

回到顶部