基于 DeepSeek Harness 的本地优先桌面智能体工作空间
68.9/100
综合分
668
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lencx/Minke该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包minke(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 09:17:08
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 96 处,展示前 82 条)
- 读取本地文件config/path-aliases.mts:63
return statSync(candidate).isFile(); - 写入本地文件desktop/main/app-data-paths.ts:20
mkdirSync(dataPath, { recursive: true, mode: 0o700 }); - 发起网络请求desktop/main/app-update-runtime.ts:232
this.#downloadSession.fetch(input, { - 读取本地文件desktop/main/app-update-runtime.ts:333
const root = await lstat(join(this.#options.userDataPath, "updates")); - 读取本地文件desktop/main/app-update-runtime.ts:340
const directory = await lstat(cached.directory); - 写入本地文件desktop/main/app-update-runtime.ts:369
await chmod(path, 0o700); - 写入本地文件desktop/main/app-update-runtime.ts:391
await mkdir(updatesRoot, { - 读取本地文件desktop/main/app-update-runtime.ts:395
const updatesRootDetails = await lstat(updatesRoot); - 写入本地文件desktop/main/app-update-runtime.ts:404
await chmod(updatesRoot, 0o700); - 写入本地文件desktop/main/app-update-runtime.ts:408
await chmod(downloadRoot, 0o700); - 写入本地文件desktop/main/app-update-runtime.ts:422
await rename(downloadRoot, cached.directory); - 删除本地文件desktop/main/app-update-runtime.ts:425
await rm(downloadRoot, { - 删除本地文件desktop/main/app-update-runtime.ts:439
await rm(download.directory, { - 读取本地文件desktop/main/app-update.ts:276
(async (path) => await readFile(path, "utf8")), - 读取本地文件desktop/main/app-update.ts:450
const pathDetails = await lstat(path); - 读取本地文件desktop/main/application.ts:283
existsSync(minkeConfig.path) ? () => shortcutStore.read() : undefined, - 读取本地文件desktop/main/application.ts:292
const hasLegacyTerminalSettings = existsSync(minkeConfig.path); - 发起网络请求desktop/main/application.ts:645
telegramNetworkSession.fetch( - 发起网络请求desktop/main/application.ts:669
discordNetworkSession.fetch( - 写入剪贴板desktop/main/application.ts:705
writeText: (value) => clipboard.writeText(value), - 写入本地文件desktop/main/crash-report.ts:33
await mkdir(directory, { recursive: true, mode: 0o700 }); - 写入本地文件desktop/main/crash-report.ts:41
await writeFile(path, report, { mode: 0o600, flag: "wx" }); - 读取本地文件desktop/main/crash-report.ts:43
const names = (await readdir(directory)).filter(name => REPORT_NAME.test(name)).sort(); - 删除本地文件desktop/main/crash-report.ts:44
for (const name of names.slice(0, Math.max(0, names.length - 10))) await unlink(join(directory, name)); - 读取本地文件desktop/main/data-home-migration.ts:152
const details = await lstat(path); - 读取本地文件desktop/main/data-home-migration.ts:173
linkTarget: await readlink(path), - 读取本地文件desktop/main/data-home-migration.ts:190
for await (const chunk of createReadStream(entry.absolutePath)) { - 读取本地文件desktop/main/data-home-migration.ts:207
return await readFile(entry.absolutePath); - 读取本地文件desktop/main/data-home-migration.ts:237
await lstat(destination); - 写入本地文件desktop/main/data-home-migration.ts:244
await rename(stagedPath, destination); - 写入本地文件desktop/main/data-home-migration.ts:255
await writeFile(stagedPath, entry.content, { - 写入本地文件desktop/main/data-home-migration.ts:263
await copyFile( - 写入本地文件desktop/main/data-home-migration.ts:269
await chmod(stagedPath, entry.mode & 0o777); - 写入本地文件desktop/main/data-home-migration.ts:291
await rename(stagedPath, destination); - 读取本地文件desktop/main/data-home-migration.ts:295
return (await readdir(path)) - 写入本地文件desktop/main/data-home-migration.ts:646
await mkdir(targetParent, { - 删除本地文件递归desktop/main/data-home-migration.ts:713
await rm(stagingRoot, { recursive: true, force: true }); - 删除本地文件desktop/main/data-home-migration.ts:1005
await rm(temporaryPath, { force: true }); - 读取本地文件desktop/main/data-home-structured-merge.ts:329
await realpath(current), - 读取本地文件desktop/main/data-home.ts:112
return (await stat(path)).isDirectory(); - 读取本地文件desktop/main/harness-launch.ts:24
await readFile(join(runtimeRoot, "dsh-runtime.json"), "utf8"), - 发起网络请求desktop/main/harness-permission-policy.ts:98
void Promise.resolve().then(() => microphone.request()).then( - 读取本地文件desktop/main/harness-runtime.ts:236
access(layout.entryPath), - 读取本地文件desktop/main/harness-runtime.ts:237
access(layout.pnpmEntry), - 读取本地文件desktop/main/harness-runtime.ts:238
access(layout.runtimeBin), - 读取本地文件desktop/main/harness-runtime.ts:239
access(layout.productPatch), - 写入本地文件desktop/main/harness-runtime.ts:241
await mkdir(this.#options.dshHome, { recursive: true }); - 执行外部命令来自配置/变量desktop/main/harness-runtime.ts:248
const child = spawn( - 读取本地文件desktop/main/local-model-command.ts:131
await access( - 读取本地文件desktop/main/local-model-command.ts:135
return (await stat(path)).isFile(); - 执行外部命令来自配置/变量desktop/main/local-model-status.ts:20
execFile(command, args, { - 执行外部命令来自配置/变量desktop/main/login-shell-environment.ts:90
const child = spawn(shell, ["-ilc", DUMP], { - 执行外部命令固定命令desktop/main/macos-quarantine.ts:12
execFile( - 发起网络请求desktop/main/main-window.ts:186
(url, init) => this.#surfaceSession.fetch(url, init)); - 读取本地文件desktop/main/minke-config.ts:168
JSON.parse(await readFile(this.path, "utf8")), - 写入本地文件desktop/main/minke-config.ts:398
await mkdir(dirname(this.path), { - 写入本地文件desktop/main/minke-config.ts:406
await writeFile( - 写入本地文件desktop/main/minke-config.ts:414
await rename(temporaryPath, this.path); - 删除本地文件desktop/main/minke-config.ts:416
await rm(temporaryPath, { force: true }); - 删除本地文件desktop/main/plugin-cache.ts:14
await rm(legacyPluginCatalogCacheFilePath(userDataPath), { - 读取本地文件desktop/main/profile-migration.ts:84
try { return await readFile(path, "utf8"); } - 读取本地文件desktop/main/profile-migration.ts:107
const saved = JSON.parse(await readFile(marker, "utf8")) as { version?: number }; - 写入本地文件desktop/main/shortcut-persistence.ts:29
await mkdir(userData, { recursive: true, mode: 0o700 }); - 写入本地文件desktop/main/shortcut-persistence.ts:32
await writeFile(temporary, raw, { mode: 0o600, flag: "wx" }); - 写入本地文件desktop/main/shortcut-persistence.ts:33
await rename(temporary, path); - 删除本地文件desktop/main/shortcut-persistence.ts:34
} finally { await unlink(temporary).catch(error => { if (error.code !== "ENOENT") throw error; }); } - 读取本地文件desktop/main/shortcut-persistence.ts:38
try { return await readFile(path, "utf8"); } - 读取本地文件desktop/main/windows-quarantine.ts:35
await readFile(streamPath, "utf8"), - 发起网络请求packages/im-discord/src/rest.ts:612
response = await this.#fetch( - 读取本地文件packages/im-gateway/src/sqlite-mailbox.ts:490
if (!existsSync(directory)) { - 写入本地文件packages/im-gateway/src/sqlite-mailbox.ts:491
mkdirSync(directory, { mode: 0o700, recursive: true }); - 写入本地文件packages/im-gateway/src/sqlite-mailbox.ts:495
chmodSync(directory, 0o700); - 写入本地文件packages/im-gateway/src/sqlite-mailbox.ts:2643
if (existsSync(path)) chmodSync(path, 0o600); - 读取本地文件packages/im-gateway/src/sqlite-mailbox.ts:2643
if (existsSync(path)) chmodSync(path, 0o600); - 发起网络请求packages/im-telegram/src/network.ts:415
const response = await this.#fetch( - 发起网络请求packages/im-weixin/src/network.ts:633
const response = await this.#fetch(options.url, { - 发起网络请求packages/model-runtime/src/core.ts:320
const response = await host.fetch(url, { - 执行外部命令来自配置/变量packages/remote-access/src/cloudflare.ts:91
return spawnChild(command, [...args], options); - 读取本地文件packages/remote-access/src/discovery.ts:141
await access( - 读取本地文件packages/remote-access/src/discovery.ts:145
return (await stat(path)).isFile(); - 执行外部命令来自配置/变量packages/remote-access/src/tailscale.ts:91
execFile( - 执行外部命令来自配置/变量packages/remote-access/src/tailscale.ts:121
return spawnChild(command, [...args], options);
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-client-shortcuts@deepseek-ai/dsh-client-ui-settings-general@deepseek-ai/dsh-client-ui-sidebar-browser@deepseek-ai/dsh-typert-protocol给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
6 张 · 点击查看大图功能亮点
- 本地优先桌面工作空间
README
由 DeepSeek 最新模型翻译生成Minke
基于 DeepSeek Harness 的本地优先桌面智能体工作空间
English · 简体中文
Minke 是基于 DeepSeek Harness 的本地优先桌面智能体工作空间,将对话、文件、终端和浏览器整合在一起,支持 macOS、Windows 和 Linux。会话和配置保存在本机。
Minke 是独立社区项目,正在持续开发中;已发布安装包可能与当前源码有所不同。
核心亮点
- 浏览器共同操作 — Agent 在可见的网页中执行任务,你可以随时接管,并将页面标注发回对话。
- 一体化工作空间 — 并排使用对话、文件和终端,通过分屏与底栏组织工作,直接编辑文件、预览文档和审阅修改。
- 跨设备访问 — 从手机或其他电脑通过 Web / PWA 访问工作空间,也可以通过微信、Telegram 和 Discord 发起任务。
- 云端与本地模型 — 使用云端模型或自定义接口,自动发现 LM Studio、Ollama 模型,并按需启动本地服务。
- 智能体与插件扩展 — 使用 DSH 的预设、技能、子代理和定时任务,通过原生插件管理扩展能力。
从其他设备远程访问
Minke 的远程访问是由 Minke Host 支撑的响应式 Web 客户端,并不是 Electron 窗口的视频流或触控投影。
展开完整文档(README 剩余 1 节)
Minke 基于 DeepSeek Harness 的本地优先桌面智能体工作空间 English · 简体中文 Minke 是基于 DeepSeek Harness 的本地优先桌面智能体工作空间,将对话、文件、终端和浏览器整合在一起,支持 macOS、Windows 和 Linux。会话和配置保存在本机。 Minke 是独立社区项目,正在持续开发中;已发布安装包可能与当前源码有所不同。 核心亮点 - 浏览器共同操作 — Agent 在可见的网页中执行任务,你可以随时接管,并将页面标注发回对话。 - 一体化工作空间 — 并排使用对话、文件和终端,通过分屏与底栏组织工作,直接编辑文件、预览文档和审阅修改。 - 跨设备访问 — 从手机或其他电脑通过 Web / PWA 访问工作空间,也可以通过微信、Telegram 和 Discord 发起任务。 - 云端与本地模型 — 使用云端模型或自定义接口,自动发现 LM Studio、Ollama 模型,并按需启动本地服务。 - 智能体与插件扩展 — 使用 DSH 的预设、技能、子代理和定时任务,通过原生插件管理扩展能力。 从其他设备远程访问 Minke 的远程访问是由 Minke Host 支撑的响应式 Web 客户端,并不是 Electron 窗口的视频流或触控投影。你可以在手机上继续对话、启动智能体任务、管理项目文件,并使用实际运行在 Minke 电脑上的终端。 Minke 在手机与桌面上的远程工作空间 [!NOTE] Tailscale Serve HTTPS、Tailscale Direct IP 和 Cloudflare Access 均已完成端到端测试回归,目前都可以使用。 - Tailscale Serve HTTPS(推荐) — 适合已经加入同一 tailnet 的设备,提供安全的 HTTPS 地址,并支持安装 PWA。 - Tailscale Direct IP(高级) — 仅绑定当前设备的 Tailscale IPv4。流量仍由 Tailscale 端到端加密,但访问地址是 HTTP,不属于浏览器安全上下文。 - Cloudflare Access — 通过受身份策略保护的 Named Tunnel 从公网访问,手机无需安装 Tailscale;使用前需配置 Cloudflare Tunnel、Access 应用和允许访问的身份。 推荐方案:Tailscale Serve Minke 可以通过 Tailscale Serve 私密地提供响应式 Web 界面。Harness 仍然只监听本机回环地址,不会暴露到局域网,也不会启用公开的 Tailscale Funnel。 1. 在运行 Minke 的电脑和手机上安装 Tailscale,登录同一个 tailnet,并确认电脑已连接。 2. 打开 Minke 的 连接 → 设备访问 → 远程访问,选择 HTTPS Serve 并启用远程访问。Minke 会在后台连接,无需重启应用。 3. 在手机上打开界面显示的 https://…ts.net 地址。 安装为 PWA 通过 Tailscale Serve 或 Cloudflare Access 的 HTTPS 地址打开远程页面,点击侧边栏中的 安装 Minke,并接受浏览器的安装提示。在 iPhone 或 iPad 上,请使用 分享 → 添加到主屏幕。 安装后会以独立应用模式启动;网络较差时会展示连接中或离线状态,而不是静默展示缓存的工作空间内容。 Minke 同一时间只启用一条远程链路,并只在应用运行期间持有前台代理,退出时会将其停止。远程页面能够启动 Agent 任务,并使用 Minke 已授权的本机工具,因此请只允许可信的 tailnet 成员或 Cloudflare Access 身份访问。 安装 请仅从 Minke 官方 GitHub Releases 页面下载安装包。 | 平台 | 架构 | 安装包 | | macOS | Apple Silicon(arm64) | .dmg | | macOS | Intel(x64) | .dmg | | Windows | x64 | .exe | | Linux | Debian / Ubuntu(x64) | .deb | | Linux | Fedora / RHEL(x64) | .rpm | | Linux | x64(便携 AppImage) | .AppImage | 打包后的 macOS、Windows 和 Linux 版本都会自动检查稳定更新。Minke 会为当前系统选择名称固定的 DMG、EXE、DEB、RPM 或 AppImage,校验 GitHub 不可变 Release、下载地址链、精确大小、SHA-256 和系统可用的来源属性,再询问是否打开。可在 设置 → Minke → 偏好设置 → 软件更新 中关闭后台下载;关闭后必须先确认“下载更新”。 也可随时在 关于 Minke → 检查更新 中手动触发。安装过程始终需要用户明确确认。 用户操作和各平台行为见桌面应用更新说明。 macOS 1. 下载并打开 .dmg 文件。 2. 将 Minke.app 拖入“应用程序”目录。 3. 当前预发布版本尚未经过 Apple 公证。请先尝试在 系统设置 → 隐私与安全性 中使用 Apple 提供的“仍要打开”流程。 4. 仅当你明确接受风险且系统流程不可用时,才对已安装应用的精确路径移除 quarantine: xattr -dr com.apple.quarantine "/Applications/Minke.app" 5. 从“应用程序”目录打开 Minke。 [!CAUTION] 移除 quarantine 属性会绕过一项 macOS 安全检查。Minke 更新器绝不会自动执行该命令。请仅将它作为最后手段,对从官方 Releases 页面下载的 Minke.app 使用,并且不要把路径替换为宽泛目录。 在 macOS 上授权凭据存储 Minke 仅在你打开连接并点击授权凭据访问后请求钥匙串权限。如果 macOS 弹出系统窗口,请输入 Mac 登录密码并选择始终允许;如果拒绝了访问,点击 重新请求授权即可。 如果凭据存储仍不可用,一种可能原因是应用签名无效或被修改,导致 macOS 无法识别 Minke 的钥匙串身份。先校验应用: codesign --verify --deep --strict --verbose=2 "/Applications/Minke.app" 如果可信的旧预发布构建校验失败,并且不便重新安装,请先完全退出 Minke,再修复签名并重新打开: /usr/bin/codesign --force --deep --sign - --timestamp=none "/Applications/Minke.app" \ && /usr/bin/codesign --verify --deep --strict --verbose=2 "/Applications/Minke.app" \ && /usr/bin/open "/Applications/Minke.app" [!WARNING] 临时重签会替换已安装应用的现有签名。不要对具有有效 Developer ID 签名且经过 Apple 公证的版本执行;请改为重新安装官方构建。不要删除 ~/.minke/secrets 或“钥匙串访问”中的 Minke Safe Storage 项,已有通道凭据依赖这些数据。 Windows 1. 下载 Windows x64 .exe 安装程序。 2. 运行安装程序,并按照界面提示完成安装。 3. 新发布的预览版本可能触发 Windows 信誉安全提示。请先确认安装程序来自 Minke 官方 Releases 页面,再决定是否继续。 Linux 根据发行版下载对应安装包,可以通过图形化软件管理器打开,也可以在终端中安装。 Debian / Ubuntu: sudo apt install "/path/to/minke-package.deb" Fedora / RHEL: sudo dnf install "/path/to/minke-package.rpm" 请将示例路径替换为实际下载的安装包路径。 从源码构建 请在与目标安装包相同的操作系统和 CPU 架构上构建 Minke。构建产物位于 out/make,本项目不支持在单一宿主机上进行跨平台打包。 当前源码使用 DSH v0.2.1-rc.2。源码提交和应用的补丁记录在 runtime 配置中;功能变化和迁移事项见 DSH 升级说明。 macOS 和 Linux 下,Minke 启动时会读取一次登录 shell 的环境,让工具、模型服务和插件命令使用其中的 PATH 与代理设置。每次 shell 尝试限时 10 秒,失败后尝试其他系统 shell,全部失败则沿用启动环境;可通过 MINKE_LOGIN_SHELL_TIMEOUT_MS 设置毫秒数。已选 Data Home 和 Minke 的运行时参数保持不变。 环境依赖: - 支持 submodule 的 Git,并确保已检出 vendor/deepseek-harness 子模块。 - Node.js 24 或更高版本。 - pnpm 11.28.5;执行脚本前需已安装仓库依赖。 - macOS:Apple Silicon 或 Intel Mac,并安装 Xcode Command Line Tools;.dmg 只能在 macOS 上构建。 - Windows:Windows x64;如果原生依赖需要在本地编译,可能还需要安装 Visual Studio 2022 Build Tools,并选择 Desktop development with C++ 工作负载。 - Linux:Linux x64,并安装原生编译工具链、fakeroot、dpkg,以及 rpm 或 rpm-build。 首次检出源码并安装仓库依赖后,先准备 Harness runtime: pnpm run harness:stage 该命令会安装并构建项目固定版本的 DeepSeek Harness 源码,然后将可复用的桌面 runtime 生成到 runtime/host。首次检出源码,或固定的 Harness 源码及 runtime 契约发生变化后,需要执行一次。 使用开发模式启动 Minke: pnpm start pnpm start 会刷新已准备 runtime 中的 Minke 集成,并启动开发应用。校验通过且内容无变化时,会跳过产品包构建和 runtime 刷新;构建产物有修改或缺失时会重新构建或修复。 开发版将桌面设置和浏览器数据存入 work/development/electron,Harness 数据存入 work/development/harness,与正式版数据隔离;这些目录已被 Git 忽略。显式设置 DSH_HOME 可以覆盖开发版 Harness 目录,建议指定独立测试目录。 为当前平台生成安装包: pnpm make pnpm make 会先重新执行一次完整的 runtime 准备流程,再将当前平台的安装包生成到 out/make。 macOS 可选:使用同一个签名证书打包,可减少升级后的钥匙串重复授权提示: MINKE_MACOS_SIGN_IDENTITY="Developer ID Application: …" pnpm make
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lencx/Minke
基于 DeepSeek Harness 的本地优先桌面智能体工作空间
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7