DeepSeek Harness(dsh)接入飞书/Lark 机器人,扫码即用:流式卡片、项目工作区、并行任务、多角色智能体、跨会话通知、对话内模型与密钥管理,还有安全网守护(dsh 崩溃后飞书仍可自救)。
47.5/100
综合分
39
GitHub 星标
484
npm 周下载
—/5
用户评分
数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-lark-botnpm 源 · dsh-lark-bot 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 69 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(runtime_smoke_failed · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-lark-bot @ 0.19.16
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 22:41:10
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 333 处,展示前 77 条)
- 读取本地文件dist/plugin.js:18
return paths.find((path) => existsSync(path)); - 读取本地文件dist/plugin.js:22
return readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() || entry.isSymbolicLink()).map((entry) => join2(root, entry.na - 读取本地文件dist/plugin.js:43
if (existsSync(path)) return path; - 读取本地文件dist/plugin.js:232
const pkg = JSON.parse(readFileSync(pkgPath, "utf8")); - 读取本地文件dist/plugin.js:247
const pkg = JSON.parse(readFileSync(join4(own.root, "package.json"), "utf8")); - 读取本地文件dist/plugin.js:284
const parsed = JSON.parse(readFileSync2(manifest, "utf8")); - 写入本地文件dist/plugin.js:476
await mkdir4(root, { recursive: true }); - 写入本地文件dist/plugin.js:477
await writeFile4(join7(root, "package.json"), packageJsonFor2(profile, own), "utf8"); - 写入本地文件dist/plugin.js:478
await writeFile4(join7(root, "cordis.yml"), "[]\n", "utf8"); - 写入本地文件dist/plugin.js:479
await writeFile4(join7(root, "cordis.patch.yml"), acpPatchYaml(provider, model, own), "utf8"); - 写入本地文件dist/plugin.js:914
await mkdir(directory, { recursive: true }); - 写入本地文件dist/plugin.js:917
await writeFile(temporary, data, options.mode === void 0 ? void 0 : { mode: options.mode }); - 删除本地文件dist/plugin.js:1434
await rm(lockPath, { force: true }).catch(() => void 0); - 发起网络请求dist/plugin.js:2334
await harness.client.request("attachment/upload", { images: encoded }), - 发起网络请求dist/plugin.js:3112
const response = await fetch(`${this.baseUrl}/api/${method}`, { - 发起网络请求dist/plugin.js:3169
const response = await fetch(`${this.baseUrl}/`, { - 删除本地文件递归dist/plugin.js:5401
await rm2(found, { recursive: true, force: true }); - 发起网络请求dist/plugin.js:6457
await ctx.secretService.request({ scope: ctx.scope, chatId: ctx.chatId, ...ctx.threadId ? { threadId: ctx.threadId } : {}, ownerId: ctx.senderId, targ - 发起网络请求dist/plugin.js:8389
const response = await fetch(url, { method: "POST", headers, body: body3, signal: controller.signal }); - 发起网络请求dist/plugin.js:10023
...ctx.secretService && ctx.senderId ? { requestSecret: (reference, purpose) => ctx.secretService.request({ - 删除本地文件dist/plugin.js:14317
await rmdir(path).catch(() => void 0); - 删除本地文件dist/plugin.js:14336
await rm3(ownerPath, { force: true }); - 删除本地文件dist/plugin.js:14337
await rmdir(path).catch(() => void 0); - 删除本地文件dist/plugin.js:14352
if (await olderThan(path, INIT_GRACE_MS)) await rmdir(path).catch(() => void 0); - 执行外部命令来自配置/变量dist/plugin.js:16791
return spawn5(command, [...args], { - 执行外部命令来自配置/变量dist/plugin.js:16852
execFile3( - 执行外部命令来自配置/变量dist/plugin.js:18217
const child = spawn7(process.execPath, [ - 读取密钥环境变量dist/plugin.js:18695
process.env.DSH_LARK_NOTIFY_TOKEN = notifyToken; - 读取密钥环境变量dist/plugin.js:19044
process.env.DSH_LARK_SECRET_URL = notifyServer.secretUrl ?? ""; - 写入剪贴板dist/client.js:220
await navigator.clipboard.writeText(command); - 读取密钥环境变量dist/notify.js:83
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/notify.js:96
const response = await fetch(endpoint, { - 读取密钥环境变量dist/ask.js:95
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/ask.js:104
const response = await fetch(endpoint, { - 读取密钥环境变量dist/plan.js:184
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/plan.js:192
response = await fetch(endpoint, { - 读取密钥环境变量dist/plan.js:223
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/plan.js:227
const response = await fetch(endpoint, { - 读取密钥环境变量dist/approval.js:150
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/approval.js:157
const response = await fetch(endpoint, { - 读取密钥环境变量dist/file.js:55
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/file.js:61
const response = await fetch(endpoint, { - 读取密钥环境变量dist/secret.js:47
const endpoint = config.endpoint ?? process.env.DSH_LARK_SECRET_URL; - 读取密钥环境变量dist/secret.js:48
const token = config.token ?? process.env.DSH_LARK_NOTIFY_TOKEN; - 发起网络请求dist/secret.js:51
const response = await fetch(endpoint, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ token, sessionId, tar - 读取本地文件dist/cli.js:18
return paths.find((path) => existsSync(path)); - 读取本地文件dist/cli.js:22
return readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() || entry.isSymbolicLink()).map((entry) => join2(root, entry.na - 读取本地文件dist/cli.js:43
if (existsSync(path)) return path; - 读取本地文件dist/cli.js:232
const pkg = JSON.parse(readFileSync(pkgPath, "utf8")); - 读取本地文件dist/cli.js:247
const pkg = JSON.parse(readFileSync(join4(own.root, "package.json"), "utf8")); - 读取本地文件dist/cli.js:284
const parsed = JSON.parse(readFileSync2(manifest, "utf8")); - 写入本地文件dist/cli.js:484
await mkdir4(root, { recursive: true }); - 写入本地文件dist/cli.js:485
await writeFile4(join7(root, "package.json"), packageJsonFor2(profile, own), "utf8"); - 写入本地文件dist/cli.js:486
await writeFile4(join7(root, "cordis.yml"), "[]\n", "utf8"); - 写入本地文件dist/cli.js:487
await writeFile4(join7(root, "cordis.patch.yml"), acpPatchYaml(provider, model, own), "utf8"); - 执行外部命令来自配置/变量dist/cli.js:1035
return spawn5(command, [...args], { - 执行外部命令来自配置/变量dist/cli.js:1120
const child = spawn5(command, [...args], { - 写入本地文件dist/cli.js:1163
await mkdir(directory, { recursive: true }); - 写入本地文件dist/cli.js:1166
await writeFile(temporary, data, options.mode === void 0 ? void 0 : { mode: options.mode }); - 删除本地文件dist/cli.js:1683
await rm(lockPath, { force: true }).catch(() => void 0); - 发起网络请求dist/cli.js:2583
await harness.client.request("attachment/upload", { images: encoded }), - 发起网络请求dist/cli.js:3362
const response = await fetch(`${this.baseUrl}/api/${method}`, { - 发起网络请求dist/cli.js:3419
const response = await fetch(`${this.baseUrl}/`, { - 删除本地文件dist/cli.js:4019
await rmdir(path).catch(() => void 0); - 删除本地文件dist/cli.js:4038
await rm2(ownerPath, { force: true }); - 删除本地文件dist/cli.js:4039
await rmdir(path).catch(() => void 0); - 删除本地文件dist/cli.js:4054
if (await olderThan(path, INIT_GRACE_MS)) await rmdir(path).catch(() => void 0); - 删除本地文件dist/cli.js:4061
if (abandoned) await rm2(ownerPath, { force: true }); - 执行外部命令来自配置/变量dist/cli.js:4813
execFile( - 发起网络请求dist/cli.js:9365
await ctx.secretService.request({ scope: ctx.scope, chatId: ctx.chatId, ...ctx.threadId ? { threadId: ctx.threadId } : {}, ownerId: ctx.senderId, targ - 发起网络请求dist/cli.js:11297
const response = await fetch(url, { method: "POST", headers, body: body3, signal: controller.signal }); - 发起网络请求dist/cli.js:12878
...ctx.secretService && ctx.senderId ? { requestSecret: (reference, purpose) => ctx.secretService.request({ - 执行外部命令来自配置/变量dist/cli.js:19029
const child = spawn7(process.execPath, [ - 读取密钥环境变量dist/cli.js:19582
process.env.DSH_LARK_NOTIFY_TOKEN = notifyToken; - 读取密钥环境变量dist/cli.js:19931
process.env.DSH_LARK_SECRET_URL = notifyServer.secretUrl ?? ""; - 执行外部命令固定命令dist/cli.js:20126
const child = spawn8( - 执行外部命令固定命令dist/cli.js:22237
const child = process.platform === "win32" ? spawn9("powershell.exe", [
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-attachment@deepseek-ai/dsh-sdk-client@deepseek-ai/dsh-sdk-jsonrpc-server@deepseek-ai/dsh-sdk-protocol@deepseek-ai/dsh-settings@deepseek-ai/dsh-skill@deepseek-ai/schemastery@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 扫码接入飞书
- 流式卡片
- 并行任务
最近更新
在 GitHub 查看全部 →v0.19.162026-08-25
· v0.19.16 — 超大入站图片按比例缩小
· 根因已修复:上游 dsh 附件存储(dsh-attachment-local)对长边超过 maxImageDimension(默认 2000px)的入站图片一律拒绝,报 IMAGE_DIMENSION_TOO_LARGE。手机长截图(如 1080×2344)因此整轮失败,报错还容易误导人,可模型明明已经支持图片输入。
· 修复:入站图片现在会在 prepareAttachments 里按比例缩小,赶在附件上传之前,让长边不超过上限。缩放按比例进行(sharp fit:'inside' + withoutEnlargement),保留源格式(png/jpeg/webp/gif),小图原样不动。
· 可配置:长边上限由 DSH_LARK_IMAGE_MAX_DIMENSION 控制(默认 2000,与宿主存储一致)。设为 0 即关闭缩放。
· sharp 是可选依赖,懒加载,并有优雅降级:拿不到时图片原样透传,准入逻辑照旧——不会引入硬失败。
---
· 变更内容
· ✨ 功能
· 上传前把超大入站图片按比例缩小
· 🚀 发布
· v0.19.16(超大入站图片按比例缩小)
完整变更日志:
v0.19.152026-08-25
· v0.19.15 — 微信 / QQ 真正完成扫码绑定(替换占位轮询)
· 用真实实现替换占位的设备流程轮询,扫码能真正完成绑定,不再总是超时退回手动输入。
· QQ(已验证协议,参照 NousResearch/hermes-agent qqbot/onboard.py):create_bind_task(本地生成 AES-256-GCM 密钥)→ poll_bind_result → 本地解密 client_secret → 自动生成渠道(destination: user:,secret: appId:clientSecret)。二维码内容编码任务 id。
· 微信个人号(iLink):get_bot_qrcode → get_qrcode_status。扫码确认后的 token/user 字段名从社区客户端推断,已标记待实机验证;/channels accept 仍是手动兜底。
· QqSink 现在把 user: 目标路由到 C2C 私信接口(/v2/users/{openid}/messages),扫过码的 QQ 用户能收到通知。
· 绑定服务商支持注入 key / fetch,方便测试;新增单元测试,覆盖 QQ 解密与完成/过期流程、微信完成流程。
---
· 变更内容
· ✨ 功能 / 新功能
· 实现真正的 QQ/微信扫码绑定完成(替换占位轮询)
· 🚀 发布 / 发布
· v0.19.15(微信 / QQ 真正完成扫码绑定)
完整变更日志:
v0.19.142026-08-25
· v0.19.14 — 扫码绑定通知渠道(微信 / QQ)
· 扩展 #113 引导流程:现在任何 IM 通知渠道都能通过扫描飞书会话里显示的二维码来创建。/channels add --qr 会渲染一张二维码图片并发送到飞书会话中,用对应的 IM 应用扫码即可绑定渠道,并以 0600 权限持久化保存(密钥不会回显)。wechat(个人微信,iLink)和 qq(QQ 开放平台 Bot)是两个优先支持的渠道;/channels accept 是超时或手动兜底方案。
· 新增 src/notify/sinks/wechat.ts(WeChatIlinkSink,ilink/bot/sendmessage,bearer token + 每用户 context_token)和 src/notify/sinks/qq.ts(QqSink,官方 QQ access token + /v2/groups/{openid}/messages)。两者都只支持推送,某个渠道失败不会阻塞其他渠道。
· 新增 src/onboard/sink-qr.ts(SinkQrProvider 接缝 + 有界轮询)、src/onboard/sink-qr-providers.ts(WeChat get_bot_qrcode / QQ create_bind_task 设备流服务商)和 src/onboard/qr-image.ts(用 qrcode 把二维码值渲染成 PNG 缓冲区)。
· 桥接层新增 sendImage 渠道能力(CommandChannel.sendImage),二维码以图片形式投递到飞书会话中,并支持运行卡片重新锚定。
· 飞书开放平台自动化(管理员授权 URL + 事件订阅 / 权限导入 / 版本提交辅助函数,src/onboard/open-platform.ts)和快捷命令面板目录(src/onboard/quick-commands.ts)的脚手架。两者在对照线上开放平台验证之前,都会降级为文档中说明的手动兜底方案。
· ⚠️ 微信 iLink 设备流契约和 QQ 开放平台绑定轮询都实现了手动 /channels accept 兜底;端到端自动绑定还需要用真实凭据做一轮验证。飞书版本提交 / 审核是平台控制的手动步骤。
---
· 变更内容
· ✨ 功能 / 新功能
· 新增微信(iLink)/ QQ 推送端,以及通知渠道的扫码绑定引导
· 📚 文档 / 文档
· 记录扫码绑定通知渠道;新增开放平台与快捷命令脚手架
· 在 llms.txt 和路线图中提及通知转发功能
· 开启 cleanUrls——Cloudflare 原生提供干净 URL,无需重写规则
· 使用默认 .html URL,避免 Cloudflare 干净 URL 重定向循环
· 用 VitePress 重建落地页 / 文档站(Kimi Code 风格)
· React Router + Tailwind 落地页,带分类使用文档
· 🚀 发布 / 发布
· v0.19.14(微信 / QQ 通知渠道扫码绑定)
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-lark-bot
🌏 English · 🌐 官网 wiki dsh-lark-bot.arr2018.dpdns.org
把 DeepSeek Harness 装进飞书 · 扫码 30 秒 · 手机指挥本机 coding agent · 崩溃了飞书也照样回你
产品简介
让 DeepSeek Harness 成为你飞书里的一员,在手机、群聊、话题里直接指挥本机 coding agent。
走飞书 WebSocket 长连接,不需要公网 IP、域名、服务器或内网穿透;Linux / macOS / Windows 通用,Node.js ≥ 22。
快速开始
前置:本机已安装 DeepSeek Harness(dsh)并配置好 DEEPSEEK_API_KEY;Node.js ≥ 22.19;一个飞书 / Lark 账号。
npx dsh-lark-bot@latest setup --profile dsh-lark # ① 一键安装(装进 dsh profile + 默认装「安全网守护」)
dsh --profile dsh-lark # ② 启动
③ 首次启动终端打印二维码 → 飞书 App 扫码创建或选择 PersonalAgent 应用 → 绑定后直接私聊发消息;群聊 / 话题默认 @bot。
展开完整文档(README 剩余 1 节)
dsh-lark-bot 🌏 English · 🌐 官网 wiki dsh-lark-bot.arr2018.dpdns.org 把 DeepSeek Harness 装进飞书 · 扫码 30 秒 · 手机指挥本机 coding agent · 崩溃了飞书也照样回你 产品简介 让 DeepSeek Harness 成为你飞书里的一员,在手机、群聊、话题里直接指挥本机 coding agent。 走飞书 WebSocket 长连接,不需要公网 IP、域名、服务器或内网穿透;Linux / macOS / Windows 通用,Node.js ≥ 22。 快速开始 前置:本机已安装 DeepSeek Harness(dsh)并配置好 DEEPSEEK_API_KEY;Node.js ≥ 22.19;一个飞书 / Lark 账号。 npx dsh-lark-bot@latest setup --profile dsh-lark # ① 一键安装(装进 dsh profile + 默认装「安全网守护」) dsh --profile dsh-lark # ② 启动 ③ 首次启动终端打印二维码 → 飞书 App 扫码创建或选择 PersonalAgent 应用 → 绑定后直接私聊发消息;群聊 / 话题默认 @bot。 - 已有应用可跳过扫码:DSH_LARK_APP_ID=cli_xxx DSH_LARK_APP_SECRET=<secret> DSH_LARK_TENANT=feishu dsh --profile dsh-lark。 - 升级:npx dsh-lark-bot@latest upgrade --profile dsh-lark --yes。 不用碰命令行:管理员直接在飞书发 /upgrade 即可。 核心能力 全网独家 - 安全网守护:dsh 崩溃后飞书仍会回复你,/safemode 进入仅核心安全模式直接自愈;重启后自动恢复排队任务,/jobs 可显式重试。多数桥接方案是「串行单聊 + 崩溃就失联」。 - 多机器人可信交接:bot add 增加独立实例,可信机器人在同群真实 @ 交接,连续协作有上限。 - 完善的工作区与会话管理:每会话自动创建隔离 git worktree 项目工作区;/session 浏览 / 绑定会话,/archive + /retention 自动归档与清理,会话列表不会烂掉。 - 完善的版本管理机制:管理员直接在飞书发 /upgrade 后台更新、验证并重载;有新版本才提醒,不打断当前工作。 - dsh Web 可视化设置:官方 Settings → Plugins 页面点选工作目录、模型、并行数、提醒,不用背环境变量。 其他核心能力 - 并行多任务:同一群聊同时跑多个任务、会话隔离。 - 多角色 Agent:/role 切换或指派 PM / 开发 / 文档等角色,各带人设、模型偏好与规则。 - 对话内管理模型与密钥:一张 /config 卡片切换供应商、热更新密钥,不用离开飞书。 - 快速 / 平衡 / 深度模式:/mode 一键选任务强度,下一轮生效且不打断当前任务。 - 关键任务先拍板:lark_request_plan_approval 先出完整计划,再批准或附意见继续规划。 - 跨会话通知 + @人:A 群跑完任务主动推送到 B 群 / 私聊并 @ 你。 - 通知转发到常用 IM(纯通知):把完成 / 失败 / 审批与突发 / 故障通知,经 /channels 配置后单向推送到 Telegram / 企业微信群机器人等;只推送、无入站交互,飞书仍是唯一完整交互平台,未配置时行为不变。/channels add --qr <wechat|qq|telegram> 让用户在飞书会话里收到二维码图片,用对应 IM 扫码即创建并绑定通知渠道。 流式过程卡以飞书原生折叠面板实时展示阶段、耗时与工具状态。 命令速览 命令帮助、状态与卡片均中英文;/help 为全量权威清单,全部命令见 docs/MANUAL.md。 | 命令 | 作用 | | /config | 模型 / Provider / 凭据管理卡片(/model、/provider(s)、/key 为同一张卡的别名) | | /new /reset | 开始新会话 | | /status | 查看状态卡(工作区 / 模型 / session / run / token / 任务账本) | | /mode(/effort) | 选择快速 / 平衡 / 深度任务强度 | | /cd <path> | 切到该目录的独立会话 | | /ws list\|save\|use\|remove | 管理命名工作空间 | | /jobs [list\|show\|retry] | 对账并重试排队/运行/失败/中断任务 | | /session、/session bind | 浏览 / 显式绑定 DSH session | | /role list\|show\|set\|clear | 查看 / 绑定角色 | | /notify <scope\|chatId> <text> | 跨会话发送通知(管理员) | | /notifications [show\|off\|on …] | 配置完成 / 失败 / 审批提醒(sinks= 转发到其他 IM 渠道) | | /channels [list\|show\|add\|accept\|remove\|enable\|disable …] | 管理出站通知渠道(管理员);add --qr <wechat\|qq\|telegram> 扫码即建 | | /stop | 终止当前任务 | | /upgrade | 自更新(管理员) | | /doctor | 生成脱敏诊断包(管理员) | | /help | 查看命令清单 | ⚠️ 仅认准官方渠道:唯一官方仓库 PlutoKeating/dsh-lark-bot,唯一官方 npm 包 dsh-lark-bot / dsh-feishu-bot(维护者 plutokeating)。本项目*从不提供 .exe 或 “下载即运行”的安装包,任何以此名义分发的页面 / 仓库均为假冒 / 恶意来源。官方安装唯一命令: npx dsh-lark-bot@latest setup --profile dsh-lark。详见文末「安全提醒」。 常见问题 Q: DeepSeek Harness 怎么接入飞书? A: 装好 Node ≥ 22 与 dsh(已配 DEEPSEEK_API_KEY)后,执行 npx dsh-lark-bot@latest setup --profile dsh-lark,再 dsh --profile dsh-lark 扫码绑定即可;私聊直接发消息,群聊 / 话题默认 @bot。 Q: 需要公网 IP、域名或服务器吗? A: 不需要。飞书走 WebSocket 长连接(出站),本机在 NAT 后面也能用,免公网服务器、免域名、免内网穿透。 Q: 和别的 DeepSeek Harness 飞书插件有什么区别? A: 功能组合最全——安全网守护、并行多任务、多角色 Agent、多机器人交接、持久任务对账、会话归档、跨会话通知、dsh Web 可视化设置、对话内模型 / 密钥管理、执行模式、计划门禁、飞书内自更新。标准 dsh profile bundle,setup 是唯一安装路径。 Q: 会不会有假冒版本? A: 唯一官方仓库 / npm 包见上方「仅认准官方渠道」;本项目从不提供 .exe 或“下载即运行”安装包,任何分发 exe 的都是假冒来源。 兼容性 - DeepSeek Harness(dsh):已验证 0.1.0-rc.8(2026-08-25),经官方 @deepseek-ai/dsh-sdk-client / dsh-acp 接入;锁定版本与升级政策见 docs/COMPATIBILITY.md。 - 运行时:Node.js ≥ 22.19;平台:Linux / macOS / Windows。adapter 默认 sdk(原生续跑 / 流式 / 图片块),可切 acp / headless / web。 配置说明 - 推荐:本机 dsh Web → Settings → Plugins → dsh-lark-bot,直接查看 / 修改服务区域、App ID、App Secret、工作目录、默认模型、并行数、adapter 与提醒;App Secret 只写不回显。 - 也可用 /config、/providers、/provider、/key 在飞书内核验供应商 / 模型 / 凭据并写操作(仅管理员)。 - 环境变量统一 DSH_LARK_ 前缀,状态根目录为 ~/.dsh-lark,模板见 .env.example;完整环境变量矩阵见 docs/MANUAL.md §9。 行为细节(崩溃对账、会话隔离、计划门禁、逐操作审批、多机器人交接、安全网守护等)见 docs/FEATURES.md;权限与数据见 docs/MANUAL.md §6 与 SECURITY.md。 安全与许可 - 许可证:GNU AGPL-3.0(见 LICENSE)。开源可自托管,个人 / 内部使用免费;商用 / SaaS / 闭源二开需另行授权。 - 安全:默认拒绝、密钥脱敏、路径 containment、SSRF 防护、过期事件拒绝、交互工具默认禁用——见 SECURITY.md;安全漏洞请走 GitHub Security Advisory 私下报告。 升级与卸载 npx dsh-lark-bot@latest upgrade --profile dsh-lark --yes # 升级(或飞书内管理员 /upgrade) - 禁用:启动 profile 前导出 DSH_LARK_DISABLED=1(插件保留但停止桥接引擎)。 - 卸载:dsh plugin --profile dsh-lark remove dsh-lark-bot;本地状态(配置 / 会话 / 归档 / 角色)留在 ~/.dsh-lark。 关于项目 - 开发:pnpm install && pnpm typecheck && pnpm test && pnpm build;生态交付标准见 docs/ECOSYSTEM.md,AI Agent 工作流见 AGENTS.md。双包发布 pnpm publish:dual(dsh-lark-bot + dsh-feishu-bot,共享 dist)。 - 作者:PlutoKeating(主页)。 - 协作者:zhuguangjun2002 · chensimo1992-sys · estelledc · fredjiangyysx · Geoffrey-hougaojie · hellxiaoao · koprivnikarurnaa-oss · Normanyin · pancong0711 · qvivp。 - 文档:QUICK_START(安装/快速开始)· MANUAL(完整手册+命令+环境变量)· FEATURES(能力行为细节)· COMPATIBILITY· ARCHITECTURE· API· roadmap。 社区与生态 | 平台 | 状态 | | awesome-dsh-plugin | ✅ 已收录(#1408) | | awesome-dsh-plugins | ✅ 已收录 · 运行级可用 | | dshfind | ✅ 已收录 | | dshbase | ✅ 已收录 · 实测可装 | | dsh-plugin.org | ✅ 已收录 · 官方源已核验 | | omdsh-dev/community | ✅ 收录申请通过 · 讨论活跃 | 安全提醒 2026-08-17 发现假冒仓库 tarraencompassing61/dsh-lark-bot:非 fork 重新上传、114 个 commit 中 113 个作者为 PlutoKeating、删除全部 CI、关闭 Issues、Releases 为 0,却以“下载 Windows exe 双击运行”的 README 冒充官方分发。本项目从不提供 exe,任何此类下载均为假冒 / 恶意来源。 取证存档:docs/security/2026-08-17-impostor-repo-evidence/ ·官方下载渠道:docs/DOWNLOAD.md · 持续监控:pnpm security:monitor 免责声明 本项目为非官方社区工具,与 DeepSeek、字节跳动 / 飞书(Lark)无关联,亦未获得其背书。DeepSeek Harness、Feishu / Lark 及相关商标归各自权利人所有。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
PlutoKeating/dsh-lark-bot
DeepSeek Harness(dsh)接入飞书/Lark 机器人,扫码即用:流式卡片、项目工作区、并行任务、多角色智能体、跨会话通知、对话内模型与密钥管理,还有安全网守护(dsh 崩溃后飞书仍可自救)。
相关插件 · 平台集成
智能体工程课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