用飞书控制 DeepSeek Harness:dsh-lark-bridge 双向控制器

前言

DeepSeek Harness(dsh)是 DeepSeek AI 开源的智能体运行时,核心理念是「一切皆插件」:模型、工具、会话、审批、界面都可以用插件替换或组合。官方仓库写明它仍处于开发者预览阶段,接口可能不兼容升级。当前版本用 npx @deepseek-ai/dsh web 启动时,默认 Web 界面在 http://127.0.0.1:3080

对很多团队来说,真正卡住的不是「智能体能不能跑」,而是「人在飞书里,任务却在本机终端里」。改一句需求、批一次工具调用、看一眼进度,都要切回电脑。社区目录里有一类「通知与集成」插件专门补这块缺口。本文介绍其中的 dsh-lark-bridge:把飞书私聊、群聊、话题变成 DeepSeek Harness 的控制面,任务发过去,进度卡片回过来。

需要先说明:社区插件目录 deepseek-harness-plugin.com 是独立站点,和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。目录当前收录约 287 个插件,「通知与集成」分类约 9 个。安装任何插件前都应自己看源码和许可证。

这是什么

dsh-lark-bridge 是一款面向 DeepSeek Harness 的双向飞书 / Lark 控制器。GitHub 仓库由 imetn 维护,目录页分类为「通知与集成」,许可证为 MIT。package.json 中的版本是 0.1.0,主要语言是 TypeScript,要求 Node.js 22+。仓库 README 写明已针对 DeepSeek Harness 0.1.0-rc.6 验证。本文写作时,目录页与 GitHub 上的星标均为 7

它解决的问题很具体:你在飞书里发一条任务,Bridge 把它交给对应的 Harness Project 和 Session,用一张原生卡片原位更新进度;审批、提问、文件、图片和控制命令也走同一段会话回来。传输使用飞书开放平台的 WebSocket 长连接,不需要自己暴露公网 Webhook。

仓库地址:https://github.com/imetn/dsh-lark-bridge
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-lark-bridge/

核心功能

根据仓库 README 与 SECURITY.md,当前已经写明的能力如下。

1、从飞书创建、继续、纠偏、停止、恢复和检查 Harness Session。
2、每个群可以绑定独立的 Project、工作目录、模型路线、访问策略和卡片视图。
3、默认一个话题或线程对应一个隔离的 Session;同一话题里的回复共享上下文。
4、同一张卡片从运行中原位更新为完成、阻塞、取消或失败。卡片只展示受长度限制、已脱敏的工具摘要,不展示模型隐藏思维链。原始任务出现在飞书的引用回复里,卡片内部不再重复任务正文。
5、可以用卡片按钮批准一次工具调用,或回答 Agent 的结构化问题。一次审批按钮只授权当前这一次操作。
6、接收文字、图片和文件;Agent 可通过 lark_deliver 把工作区内的安全文件发回飞书。出站路径必须落在该 Project 的 workspaceRoot 内,符号链接逃逸会被拒绝。
7、卡片密度可选 compactstandarddeveloper,可按 Project 或当前 Session 设置。
8、使用 WebSocket 长连接,不部署公网回调服务。

飞书实体和 Harness 实体的默认对应关系可以记这张表:

飞书实体 Harness 实体 用法
机器人私聊 个人控制面 切换 Project,处理私密任务
一个群 一个 Project 承载一个代码库或长期工作流
一个话题或线程 一个 Session 把一个任务和后续交流放在一起

默认 groupSessionScope: threadsender 会为每位群成员保留独立 Session;chat 让全群共享一个 Session,README 明确写了:只有在你确实需要共享上下文时才用。

安装与启用

目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:

dsh plugin add github:imetn/dsh-lark-bridge

dsh 会从 GitHub 解析插件并装进当前配置。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。需要可复现安装时,按目录页说明固定 commit 哈希:

dsh plugin add github:imetn/dsh-lark-bridge#<commit>

<commit> 换成你审查过的提交哈希,不要直接复制占位符。

只执行上面这条命令,还不会自动创建飞书应用、写入凭据、生成 lark Profile。仓库 README 推荐的接入方式是 setup 向导。前置条件是:Node.js 22+、pnpm、已经可用的 DeepSeek Harness 模型配置,以及已安装的 dsh CLI,或附近一份官方 Harness 源码。进入希望机器人控制的 Project 目录后执行:

pnpm dlx github:imetn/dsh-lark-bridge setup --project "$PWD"

向导会做这些事:打开飞书 / Lark 官方授权页创建新的机器人应用;只申请 Bridge 用到的消息、附件、表情、事件和卡片回调能力;把 App Secret 写入 Harness 仅 Owner 可读的凭据文件,不写进 Profile;安装插件,幂等写入 lark Profile,绑定授权用户并启动 Bridge;平台返回用户 Open ID 后,机器人会发一张欢迎卡片。

自动流程固定使用 createOnly: true,不会选择或修改已有应用。字节租户加 --brand larkoffice,国际版 Lark 加 --brand lark

pnpm dlx github:imetn/dsh-lark-bridge setup --project "$PWD" --brand larkoffice

如果企业已经有应用,命令只验证凭据并写本机 Harness 配置,不会改现有应用:

printf '%s' "$LARK_APP_SECRET" | pnpm dlx github:imetn/dsh-lark-bridge setup \
  --project "$PWD" \
  --app-id cli_xxxxxxxxxxxxxxxx \
  --app-secret-stdin

企业策略不允许一键创建时,加 --manual。向导会打开开发者后台,让你输入 App ID 和 App Secret。手动创建时需要:启用机器人能力、选择长连接、发布一个版本,并配置 README 列出的权限与事件,主要包括 im:message.p2p_msg:readonlyim:message.group_at_msg:readonlyim:message:send_as_botim:resource;接收入站附件还需要 im:message:readonly;消息事件 im.message.receive_v1;卡片回调 card.action.trigger。群聊只申请 @机器人 消息,不需要读取群内全部消息。

package.json 声明了 dsh.bundle.patch,指向 ./cordis.patch.yml,并带有官方发现关键词 dsh-plugin。仓库提交了已构建的 lib/,并打包了飞书官方 SDK,README 写明从 Git 安装不需要现场构建。

典型用法

先在机器人私聊里发:

/status

再发一个小任务。回复卡片应展示 Project、结果、耗时,以及当前视图对应的信息。欢迎卡片里的按钮测试是可选项,不点也能直接发文字任务。随时可以用下面这条命令检查本机接入状态:

pnpm dlx github:imetn/dsh-lark-bridge doctor

常用控制命令来自 README,不要自己发明别的斜杠指令:

  • 文字或附件:继续当前 Agent
  • /steer <内容>:在运行中补充或纠正最近一步
  • /stop:取消当前任务
  • /approve/reject:处理当前一次工具审批的文字兜底
  • /new:创建新 Session
  • /sessions/resume:列出或恢复属于当前飞书来源的 Session
  • /projects/project:在私聊中列出或选择 Project
  • /bind [project-id]/unbind:管理群聊的 Project 绑定
  • /view compact|standard|developer:切换当前 Session 的卡片密度
  • /commands/help:查看 Harness 原生命令或 Bridge 帮助

Profile 只有一个可用 Project 时,Owner 第一次在群里 @机器人 会自动绑定。存在多个 Project 时,需要发送一次 @机器人 /bind [project-id]。卡片按钮也支持停止、新会话、状态、审批、视图切换和结构化提问。

卡片三档视图的差异如下:

  • compact:结果、耗时、关键操作
  • standard:精简视图加上 Project、模型、近期工具名、工具次数和总 token
  • developer:标准视图加上 cwd、Session ID、已脱敏工具摘要与耗时、输入 / 输出 / 缓存 token

向导会写入 ~/.dsh/profiles/lark/cordis.patch.yml。需要多个 Project 时,按 README 在这个文件里追加,例如:

- id: dsh-lark-bridge
  config:
    appId: cli_xxxxxxxxxxxxxxxx
    appSecretRef: DSH_LARK_APP_SECRET
    brand: feishu
    defaultProjectId: web
    groupSessionScope: thread
    projects:
      - id: web
        name: Web App
        cwd: /absolute/path/to/web-app
        workspaceRoot: /absolute/path/to/web-app
        cardPreset: developer
      - id: ios
        name: iOS App
        cwd: /absolute/path/to/ios-app
        workspaceRoot: /absolute/path/to/ios-app
        cardPreset: compact

每个 Project 还可以设置 chatIdsallowedOpenIdsprovidermodelinboundDir。从飞书完成的群绑定保存在仅 Owner 可读的 Bridge 状态文件中;静态 chatIds 优先。

有两个容易混的点。第一,dsh --profile lark 只启动 Bridge,不提供 HTTP 页面;http://127.0.0.1:3080 属于单独的 dsh web。第二,README 列出的常见故障:收不到消息时检查是否发布了应用版本、是否选择了长连接、消息事件和权限是否齐全;群聊无响应时先把机器人拉进群并 @ 它;卡片按钮无响应时补上 card.action.trigger,文字任务、/approve/reject 仍然可用。

适用场景与注意事项

适合已经在用 DeepSeek Harness、日常沟通又在飞书或 Lark 里的个人开发者和小团队:希望在手机或群聊里下任务、看进度、批一次工具调用,而不把本机终端一直开着。多代码库场景可以把每个群绑到不同 Project,用话题隔离 Session。

它不适合当成「把 Harness 公开到互联网上的网关」。SECURITY.md 写得很清楚:Bridge 会把获准的飞书用户变成本机 Harness Agent 的远程入口,每个允许的 open_id 都应视为拥有该 Harness profile 实际能力的操作者。Bridge 不能替代 Harness 沙箱、审批策略、操作系统权限和凭据保管。

安装和使用时建议同时记住这些边界:

  • 目录页与 README 都强调:插件以当前 dsh 进程权限运行,安装前检查源码和许可证;可复现安装请固定 commit。
  • App Secret 放在 Harness 仅 Owner 可读的凭据文件、密钥管理器或受保护的进程环境里,不要写进 Profile,也不要出现在聊天、日志、截图或提交里。
  • SECURITY.md 建议保持 allowAllUsersallowAllGroups 关闭,同时使用全局 allowedOpenIds 和更窄的 Project 名单;保持 requireMention: true;每个群只绑一个 Project;workspaceRoot 设成最小够用的目录。
  • Owner 通过官方授权身份绑定,或使用经过哈希保存、十分钟有效、只能用一次的 /claim 配对码。
  • 入站附件使用 0700 目录和 0600 文件,文件名会被净化并加随机后缀。
  • 脱敏是按常见密钥形态做的,异常格式可能漏网;获准操作者可以请求底层 Harness profile 允许的任何操作。群成员能看到该群可见的消息,即使其中只有部分人能操作机器人。
  • WebSocket 事件投递不是分布式锁:多个 Bridge 进程挂到同一个飞书应用上,可能把事件和内存中的交互状态拆散。一个飞书应用对应一个 Bridge,生产和开发应用分开。
  • DeepSeek Harness 仍是开发者预览,本插件验证过的版本是 0.1.0-rc.6。升级 Harness 前要再对一下插件的 peer 依赖。

同类目录里还有 dsh-lark 等飞书通道插件,维护者和许可证都不同。本文只依据 dsh-lark-bridge 自己的目录页和仓库说明,不把别的插件的能力算到它头上。

结语

dsh-lark-bridge 做的事情比较克制:不另起一套 Web 控制台,而是把飞书会话映射到 Harness 的 Project 和 Session,用一张卡片把进度、审批和文件送回去。对已经把日常协作放在飞书里的人来说,这条路径比反复切回本机终端更直接。

它是 MIT 许可的社区项目,不是 DeepSeek 官方应用。装之前看源码、看许可证、固定 commit,把飞书应用权限和本机 Harness 审批策略一起收紧,再开始把任务从聊天窗口丢进去。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-lark-bridge/
GitHub:https://github.com/imetn/dsh-lark-bridge
DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜