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

飞书智能体桥 bihangchi9-creator/lark-agent-bridge

DeepSeek Harnessv0.0.3
bihangchi9-creator46 天前有提交已提供中文文档扫描:含敏感能力

把本地编码智能体接到飞书 / Lark 群聊——一个群,一段对话,一条钉死的运行时。可桥接 dsh进程内插件、CLI…

48.6/100
综合分
33
GitHub 星标
293
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @bihangchi9/lark-agent-bridge
npm 源 · @bihangchi9/lark-agent-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · platform
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 46 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包@bihangchi9/lark-agent-bridge @ 0.0.3
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:05:59

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 42 处,展示前 41 条)
  • 写入本地文件
    lib/credentials.js:39
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/credentials.js:40
    writeFileSync(path, `${url}\n`, { mode: 0o600 });
  • 删除本地文件
    lib/credentials.js:46
    rmSync(registerUrlPath(), { force: true });
  • 读取本地文件
    lib/credentials.js:55
    const raw = readFileSync(credentialsPath(), 'utf8');
  • 写入本地文件
    lib/credentials.js:76
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/credentials.js:78
    writeFileSync(path, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    lib/credentials.js:79
    chmodSync(path, 0o600);
  • 读取本地文件
    lib/runtime.js:49
    const raw = JSON.parse(readFileSync(this.path, 'utf8'));
  • 写入本地文件
    lib/runtime.js:73
    mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/runtime.js:75
    writeFileSync(this.path, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
  • 读取本地文件
    lib/cli-adapter.js:232
    const raw = JSON.parse(readFileSync(this.threadsPath, 'utf8'));
  • 写入本地文件
    lib/cli-adapter.js:244
    mkdirSync(dirname(this.threadsPath), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/cli-adapter.js:245
    writeFileSync(this.threadsPath, `${JSON.stringify({ threads: Object.fromEntries(this.threads) }, null, 2)}\n`, { mode: 0o600 });
  • 读取本地文件
    lib/cli-adapter.js:331
    accessSync(path, constants.X_OK);
  • 读取本地文件
    lib/ide-adapter.js:44
    const info = lstatSync(this.socketPath);
  • 读取本地文件
    lib/session-catalog.js:82
    const raw = JSON.parse(readFileSync(this.path, 'utf8'));
  • 写入本地文件
    lib/session-catalog.js:98
    mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/session-catalog.js:100
    writeFileSync(this.path, payload, { mode: 0o600 });
  • 读取本地文件
    lib/allowlist.js:54
    const raw = JSON.parse(readFileSync(this.path, 'utf8'));
  • 写入本地文件
    lib/allowlist.js:66
    mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/allowlist.js:68
    writeFileSync(this.path, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    lib/attachments.js:70
    await mkdir(messageDir, { recursive: false, mode: 0o700 });
  • 删除本地文件
    lib/attachments.js:88
    await rm(dest, { force: true }).catch(() => { });
  • 删除本地文件
    lib/attachments.js:98
    await rm(dest, { force: true }).catch(() => { });
  • 读取本地文件
    lib/attachments.js:110
    const configuredRoot = await realpath(workspaceRoot);
  • 读取本地文件
    lib/attachments.js:111
    const existing = await lstat(dir).catch(() => undefined);
  • 写入本地文件
    lib/attachments.js:114
    await mkdir(dir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    lib/attachments.js:115
    const info = await lstat(dir);
  • 读取本地文件
    lib/attachments.js:118
    const resolved = await realpath(dir);
  • 读取本地文件
    lib/attachments.js:132
    const root = await realpath(dir);
  • 读取本地文件
    lib/attachments.js:134
    for (const entry of await readdir(root)) {
  • 删除本地文件
    lib/attachments.js:142
    await rm(p, { force: true });
  • 删除本地文件
    lib/attachments.js:146
    await rm(p, { force: true, recursive: info.isDirectory() });
  • 读取本地文件
    lib/chat-preset.js:48
    const raw = JSON.parse(readFileSync(this.path, 'utf8'));
  • 写入本地文件
    lib/chat-preset.js:72
    mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/chat-preset.js:74
    writeFileSync(this.path, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    lib/workspace.js:23
    await mkdir(workspaceRoot, { recursive: true });
  • 读取本地文件
    lib/workspace.js:24
    const root = await realpath(workspaceRoot);
  • 读取本地文件
    lib/workspace.js:26
    const existing = await lstat(dir).catch(() => undefined);
  • 写入本地文件
    lib/workspace.js:29
    await mkdir(dir, { recursive: true });
  • 读取本地文件
    lib/workspace.js:30
    const resolved = await realpath(dir);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

功能亮点

  • 接入飞书群聊
  • 一个群对应一个项目目录
  • 桥接dsh编程智能体

原生 DeepSeek Harness (dsh) 插件,把 dsh 编程智能体接入飞书/Lark 群聊——一个群对应一个项目目录。

v0.0.32026-09-18
· 变更 · GitHub 仓库现在叫 lark-agent-bridge。 · 更新了包的仓库元数据,以及 npm 和 GitHub 的文档链接。 · 更新了源码克隆示例,改用新的仓库路径。 · 兼容性 · ~/.dsh-lark-bridge/ 下已有的运行时状态保持不变。 · 内部固定安装使用不可变的 GitHub Release Assets,仓库改名后校验和依然稳定。
immutable-bridge-sources-202609182026-09-18
· 不可变源码归档 这些资产为内部安装器保留精确的历史 public-bridge 源码归档,不可变,也不受仓库改名或 codeload 归档重新生成的影响。 别把这个版本当成运行时代码发布。
v0.0.22026-09-17
· npm 公开发布 已发布包:@bihangchi9/lark-agent-bridge@0.0.2 · 新增 / 更新 · 把 npm 优先安装写成推荐路径,供用户使用。 · 展示从已发布的 scoped 包安装时,macOS/Linux 和 Windows 各自的安装命令。 · 记录独立命令行用法,同时保留二进制名: - lark-agent-bridge - lark-agent-register · 保留源码检出安装说明,供贡献者和离线兜底使用。 · 更新打包的 SKILL.md,写入 scoped npm 包工作流。 · 已验证 · 21 个测试文件 / 146 个测试通过。 · TypeScript 类型检查和构建通过。 · 干净的 npm 安装已验证。 · 两个 bin shim、lib/index.js、打包的预设、安装脚本和模块导入均已验证。 · 说明 历史 GitHub 标签 v0.0.1 保持不变,作为较早的仓库里程碑。npm scoped 包线从 npm 版本 0.0.1 和 0.0.2 开始;本次发布对应 npm 0.0.2。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
Lark Agent Bridge npm 包:@bihangchi9/lark-agent-bridge · git 仓库:lark-agent-bridge 把本地编码智能体接到飞书 / Lark 群聊——一个群,一段对话,一条钉死的运行时。可桥接 dsh(进程内插件)、CLI 智能体(traex / codex,由 daemon spawn)、IDE 窗口(socket attach)或自研 agent,统一走一个网关。 English README 在飞书里发一条消息,一个真正的编码智能体(带自己的工具、自己的项目目录、自己的持久对话)就在群里回你。每个群聊都是一个隔离的工作区,只钉一条运行时,所以团队可以并行跑多个项目、多个 agent,一个群一个。 它能做什么 - 飞书 ⇄ 你的智能体。 飞书消息驱动一个活着的智能体;回复以「实时更新的飞书消息」流式返回。回的是本群钉住的那条运行时(dsh / CLI / IDE / 自研)。 - 四类宿主,一套契约。 每条运行时都实现同一个 AgentAdapter:dsh 进程内当插件;CLI spawn traex/codex;IDE attach 正在跑的窗口;自研加载你自己的模块。线与线之间不互相顶替。 - 一个群,一段对话,一条运行时。
展开完整文档(README 剩余 1 节)
Lark Agent Bridge

npm 包:@bihangchi9/lark-agent-bridge · git 仓库:lark-agent-bridge

把本地编码智能体接到飞书 / Lark 群聊——一个群,一段对话,一条钉死的运行时。可桥接 dsh(进程内插件)、CLI 智能体(traex / codex,由 daemon spawn)、IDE 窗口(socket attach)或自研 agent,统一走一个网关。

English README

在飞书里发一条消息,一个真正的编码智能体(带自己的工具、自己的项目目录、自己的持久对话)就在群里回你。每个群聊都是一个隔离的工作区,只钉一条运行时,所以团队可以并行跑多个项目、多个 agent,一个群一个。

它能做什么

- 飞书 ⇄ 你的智能体。 飞书消息驱动一个活着的智能体;回复以「实时更新的飞书消息」流式返回。回的是本群钉住的那条运行时(dsh / CLI / IDE / 自研)。
- 四类宿主,一套契约。 每条运行时都实现同一个 AgentAdapter:dsh 进程内当插件;CLI spawn traex/codex;IDE attach 正在跑的窗口;自研加载你自己的模块。线与线之间不互相顶替。
- 一个群,一段对话,一条运行时。 每个 chat id 映射到一个固定目录(<workspaceRoot>/<chatId>)和一条用 /agent 选定的运行时。不同群互不干扰文件,一条消息不会广播给多个 agent。钉的运行时挂了(比如 IDE 窗口关了),这个群 fail-closed,不改绑。
- 按群持久会话。 一个群的对话在重启后依然保留(按策略指纹门控的「恢复或新建」,/new 真正清空)。
- 收文件。 文件直接发给机器人即可——bridge 下载到本群工作区的 .attachments/<messageId>/ 目录并把路径交给智能体。限制:每条消息最多 5 个附件,图片 ≤10MB,其它文件 ≤20MB,超出会被明确拒绝;文件名自动消毒,7 天后自动清理。图片能否被识别取决于所选模型的视觉能力。
- 零配置启动。 首次启动若没有凭证,会自动跑二维码注册向导——用飞书 App 一扫就自动连上,不用去开放平台后台一步步翻。
- 斜杠命令。 /help、/new、/where、/models、/agent、/whoami 在本群本地管理;owner 可用 /agent、/model、/preset、/allow、/disallow。/agent 把本群钉到一条已安装运行时上,断线不会改绑。

一张图看懂架构

① 飞书开放平台 ← 在这里注册机器人(自动二维码向导帮你搞定) │ 给你: app_id + app_secret ▼ ② lark-agent-bridge 网关 ← 拿着钥匙,主动连飞书长连接, │ 把每条消息变成一个回合, │ 按 chat 路由到它钉住的运行时 ▼ ③ 钉住的运行时 ← 四选一:
• dsh — 进程内 Cordis 插件(dsh web)
• CLI — daemon spawn traex / codex
• IDE — daemon attach 正在跑的窗口(socket)
• 自研 — daemon 加载你自己的 AgentAdapter 模块

机器人注册完全在飞书这一侧。网关用 WebSocket 长连接主动连飞书(所以不需要公网 IP、也不需要回调地址)。dsh 时网关就是 dsh web 加载的插件;CLI / IDE / 自研 时是一个独立 daemon(node lib/daemon.js),跟 dsh 宿主无关。

pnpm build
node lib/daemon.js
LARK_BRIDGE_RUNTIME=traex node lib/daemon.js
LARK_BRIDGE_IDE_SOCKET=/tmp/ide.sock node lib/daemon.js
LARK_BRIDGE_CUSTOM_ADAPTER=./examples/custom-adapter.mjs node lib/daemon.js

CLI spawn 二进制;IDE attach 当前用户拥有且组/其他用户不可写的 Unix socket JSONL sidecar(chmod 600 /path/to.sock;窗口关了这条线断);自研加载 AgentAdapter 模块(见 examples/custom-adapter.mjs)。一个群仍然是一段对话,/agent 钉死,断线不改绑。

字节内部 overlay(SSO / bytecli / 扩展档位)在本地 internal/,已被 gitignore。不要推到这个 GitHub 仓库,走内部 skill 市场发布。

环境要求

- 一个能用 dsh web 启动的 DeepSeek Harness(dsh) 代码库。
- Node.js ^22.19.0 || >=24.0.0。
- 一个 DeepSeek API key(设 DEEPSEEK_API_KEY,或配到 dsh 的凭证里)。
- 一个 飞书账号 用来扫码(向导会替你创建应用)。

安装

方式一:npm 包(普通用户推荐)

已发布的 npm 包包含编译后的 JavaScript、两个权限档位 preset、内置 dsh-tool-lark-cli 包和安装脚本。请安装在一个稳定目录中:注册 bundle 时 dsh 会链接到这个位置。

macOS / Linux
mkdir -p ~/lark-agent-bridge && cd ~/lark-agent-bridge
npm init -y
npm install @bihangchi9/lark-agent-bridge
bash node_modules/@bihangchi9/lark-agent-bridge/scripts/setup.sh

Windows PowerShell
New-Item -ItemType Directory -Force -Path "$HOME\lark-agent-bridge" | Out-Null
cd "$HOME\lark-agent-bridge"
npm init -y
npm install "@bihangchi9/lark-agent-bridge"
powershell -ExecutionPolicy Bypass -File node_modules\@bihangchi9\lark-agent-bridge\scripts\setup.ps1

脚本会预检 Node、安装 lark-workspace / lark-readonly preset,并注册 bridge bundle 及其 dsh-tool-lark-cli 依赖。当 dsh 命令可用时,脚本直接走官方 dsh plugin,它会自动初始化尚不存在的 web / headless profile。安装完成后直接启动即可,不需要 --patch 参数:

macOS / Linux
DSH_PERMISSION_MODE=danger-full-access dsh web

Windows PowerShell
$env:DSH_PERMISSION_MODE = "danger-full-access"; dsh web

换 profile / 自定义 dsh 目录:

DSH_PROFILE=headless DSH_HOME=/path/.dsh bash node_modules/@bihangchi9/lark-agent-bridge/scripts/setup.sh

如果只使用独立 CLI daemon,不需要注册 dsh profile:

npx -p @bihangchi9/lark-agent-bridge lark-agent-register
npx -p @bihangchi9/lark-agent-bridge lark-agent-bridge

方式二:源码一键安装(贡献者)

先构建。 Git 仓库只提供 TypeScript 源码,编译产物 lib/ 被 git 忽略——全新 clone 没有构建产物。插件入口是 lib/index.js,不构建就注册会让 dsh 拿到一个空包、宿主加载失败。pnpm setup 会替你构建。

git clone https://github.com/bihangchi9-creator/lark-agent-bridge.git
cd lark-agent-bridge
pnpm setup # macOS / Linux(scripts/setup.sh)——构建 + 链接 + 注册
pnpm setup:win # Windows(scripts/setup.ps1)

脚本会:预检 Node 版本 → 构建插件(构建失败会明确报错并中止) → 安装权限档位 preset → 安装 dsh-tool-lark-cli → 注册 bridge bundle。当 dsh 命令可用时,脚本直接走官方 dsh plugin,它会自动初始化尚不存在的 web / headless profile,无需先手动启动一次 dsh web。
安装完成后直接启动即可,不需要 --patch 参数:

macOS / Linux
DSH_PERMISSION_MODE=danger-full-access dsh web

Windows PowerShell
$env:DSH_PERMISSION_MODE = "danger-full-access"; dsh web

换 profile:DSH_PROFILE=headless pnpm setup;自定义 dsh 目录:DSH_HOME=/path/.dsh pnpm setup(Windows 同样支持这两个环境变量)。如果系统里找不到 dsh 命令,脚本只能走手动 fallback,此时要求目标 profile 已经初始化;若不存在,脚本会在构建和复制 preset 之前退出,不留下半安装状态。

方式三:从源码使用 dsh 官方命令(务必先构建!)

git clone https://github.com/bihangchi9-creator/lark-agent-bridge.git
cd lark-agent-bridge
pnpm install && pnpm build # 必需——link 安装会从本目录拉取 lib/
然后从你的 dsh 代码库目录执行:
dsh plugin --profile web add link:/path/to/lark-agent-bridge

dsh plugin 会在 profile 目录里执行 pnpm add,并自动把声明了 dsh.bundle 的包加进 dsh.profile.bundles。卸载/升级同样是官方命令:dsh plugin --profile web remove @bihangchi9/lark-agent-bridge / dsh plugin --profile web update @bihangchi9/lark-agent-bridge。

⚠️ link: 安装会把 profile 依赖指向本目录。之后若移动或删除本目录,下次 dsh web 无法解析 bundle 而启动失败。请保持 clone 位置不变,或改用方式一。

方式四:手动源码安装(贡献者 / 离线 fallback)

仅在 npm 安装脚本和官方 dsh plugin 命令都不适用时使用,需要和你的 dsh 代码库放在一起安装。

1. 克隆到 dsh 代码库旁边,安装并构建
git clone https://github.com/bihangchi9-creator/lark-agent-bridge.git
cd lark-agent-bridge
pnpm install
pnpm build # 把 src/ 编译到 lib/(插件加载前必需)

然后把它注册成 dsh 的一个 bundle(装进 profile 即自动加载,无需 --patch):

2. 链接进 profile 的 node_modules(bundle 解析锚点) macOS / Linux:
mkdir -p ~/.dsh/profiles/web/node_modules/@bihangchi9
ln -s "$(pwd)" ~/.dsh/profiles/web/node_modules/@bihangchi9/lark-agent-bridge
Windows PowerShell(目录联接,无需管理员权限): New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.dsh\profiles\web\node_modules\@bihangchi9" New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\web\node_modules\@bihangchi9\lark-agent-bridge" -Target (Get-Location).Path

3. 在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 末尾加上包名:
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@bihangchi9/lark-agent-bridge"]

启动(裸命令即可,插件随 bundle 自动加载):

在你的 dsh 代码库里
DSH_PERMISSION_MODE=danger-full-access dsh web

DSH_PERMISSION_MODE=danger-full-access 会把智能体的审批策略设为 never。这是必需的,因为飞书用户没法点本地的审批弹窗。请只在你信任的环境里使用。

平台差异速查(Windows vs macOS/Linux)

| 事项 | macOS / Linux | Windows |
| npm 安装(用户) | bash node_modules/@bihangchi9/lark-agent-bridge/scripts/setup.sh | powershell -ExecutionPolicy Bypass -File node_modules\@bihangchi9\lark-agent-bridge\scripts\setup.ps1 |
| 源码安装(贡献者) | pnpm setup(scripts/setup.sh) | pnpm setup:win(scripts/setup.ps1) |
| dsh 主目录 | ~/.dsh(即 $HOME/.dsh) | %USERPROFILE%\.dsh |
| 目录链接 | ln -s(符号链接) | New-Item -ItemType Junction(目录联接,无需管理员权限) |
| 环境变量写法 | DSH_PERMISSION_MODE=danger-full-access dsh web | PowerShell:$env:DSH_PERMISSION_MODE="danger-full-access"; dsh web;cmd:set DSH_PERMISSION_MODE=danger-full-access && dsh web |
| 注册链接文件 | ~/.dsh-lark-bridge/register-url.txt | %USERPROFILE%\.dsh-lark-bridge\register-url.txt |
| 后台常驻 | launchd(macOS)/ systemd(Linux) | 任务计划程序(schtasks) |
| 扫码注册 / 构建 / 聊天命令 | 全平台一致 | 同左 |

两个安装脚本均幂等。npm 包路径为:预检 → 复制 preset → 链接/注册 bundle;源码路径额外包含构建步骤。

首次运行:注册你的机器人

每个人都要注册自己的飞书机器人——你不能把 app_secret 给别人,那等于把机器人的控制权交出去。

首次启动、没有凭证时,插件会在终端打印二维码(后台运行时还会把链接写到 ~/.dsh-lark-bridge/register-url.txt)。步骤:

1. 打开飞书手机 App,扫描二维码。
2. 在手机上确认创建一个自建应用。
3. 插件收到凭证,存到 ~/.dsh-lark-bridge/credentials.json,并自动连上飞书。
4. 把机器人拉进一个群(或私聊它),开始对话。

想手动做 / 重新注册 / 换账号?跑独立向导:

pnpm register # 源码仓库
npx -p @bihangchi9/lark-agent-bridge lark-agent-register # npm 包

已经有凭证了?直接用环境变量跳过向导:

export LARK_APP_ID=cli_xxx
export LARK_APP_SECRET=yyy
export LARK_TENANT=feishu # 国际版 larksuite.com 用 lark

在群里怎么用

| 命令 | 作用 |
| (任意文字) | 发给本群智能体的提示词 |
| /help | 显示帮助 |
| /new | 开一个全新会话(清空本群上下文) |
| /where | 显示本群的项目目录 |
| /models | 列出可用 provider/model |
| /model [provider/model] | (仅 owner)查看或切换本群模型 |
| /preset [workspace\|read-only\|full] | (仅 owner)查看或切换本群权限档位 |
| /agent [id] | 查看本群运行时;owner 可钉死(目前只有 dsh)。断线不会改绑 |
| /whoami | 显示身份、本群运行时和授权状态 |
| /allow | (仅 owner,群聊)在本群授权,允许成员使用机器人 |
| /disallow | (仅 owner,群聊)撤销本群授权 |

在群聊里,要 @ 机器人才会触发(除非关掉了 mention 要求)。在私聊里,直接发消息即可。

配置

每个字段都可以来自插件 config: 块 或 环境变量(推荐用环境变量,更省事)。

| 配置项 | 环境变量 | 默认值 | 含义 |
| appId | LARK_APP_ID | — | 飞书 app id(cli_...) |
| appSecret | LARK_APP_SECRET | — | 飞书 app secret |
| tenant | LARK_TENANT | feishu | feishu(feishu.cn) 或 lark(larksuite.com) |
| provider | DSH_LARK_PROVIDER | dsh 默认 | LLM 提供方 |
| model | DSH_LARK_MODEL | dsh 默认 | 创建智能体用的模型 |
| workspaceRoot | DSH_LARK_WORKSPACE_ROOT | ~/dsh-lark-workspaces | 按群文件夹的根目录 |
| allowDm | DSH_LARK_ALLOW_DM | true | 是否响应私聊 |
| requireMention | DSH_LARK_REQUIRE_MENTION | true | 群里是否必须 @ 才触发 |
| turnTimeoutMs | DSH_LARK_TURN_TIMEOUT_MS | 600000 | 单次 agent 回合硬超时;超时会销毁卡住的会话 |
| allowedChats | DSH_LARK_ALLOWED_CHATS | [] | 允许使用机器人的群 chatId(逗号分隔)。空 = 任何群都不允许(fail-closed) |
| allowedUsers | DSH_LARK_ALLOWED_USERS | [] | 允许私聊使用机器人的用户 open_id(逗号分隔)。空 = 私聊只允许 owner |
| accessMode | DSH_LARK_ACCESS_MODE | workspace | 默认档位:read-only、workspace 或 full |
| extraPresets | DSH_LARK_EXTRA_PRESETS | {} | 额外 id:preset-name 配置 |
| ssoGatedPresets | DSH_LARK_SSO_GATED_PRESETS | [] | 切换及每次使用前都必须通过宿主 SSO 的档位 |
| ssoCheckCmd | DSH_LARK_SSO_CHECK_CMD | — | SSO 状态命令(argv 执行,不经过 shell) |
| ssoOkMarker | DSH_LARK_SSO_OK_MARKER | Authenticated | SSO 成功输出必须包含的文本 |
| presetModels | DSH_LARK_PRESET_MODELS | {} | presetId:provider:model 模型路由 |

凭证读取顺序:内联 config → 环境变量 → 注册向导写的文件。

访问控制(安全模型)

机器人的安全边界 = "谁能给机器人发消息":每条消息都会变成一次宿主机权限的智能体回合,所以默认严格拒绝:

- owner 永远放行:注册时扫码的那个人就是 owner(open_id 存于 credentials.json);老安装会在启动时通过应用信息 API 自动回填。
- 群聊:只有 chatId 在 DSH_LARK_ALLOWED_CHATS 里的群可以用。
- 私聊:只有 open_id 在 DSH_LARK_ALLOWED_USERS 里的用户可以用(owner 除外)。
- fail-closed:owner 未知且白名单为空时,所有消息都被拒绝,拒绝回复里会带上 chatId 方便你配置。

配置示例:

允许群 oc_xxx1、oc_xxx2,允许用户 ou_friend 私聊
export DSH_LARK_ALLOWED_CHATS="oc_xxx1,oc_xxx2"
export DSH_LARK_ALLOWED_USERS="ou_friend"

需要 application-info 权限才能运行时解析 owner;注册向导直接捕获 open_id,通常不需要额外配置。强烈建议任何暴露给团队以外的人使用的部署都配置白名单。

权限档位(爆炸半径)

即使消息通过了授权门,agent 能碰到什么仍然按档位收敛(DSH_LARK_ACCESS_MODE,默认 workspace):

| 档位 | preset | agent 能做什么 |
| read-only | lark-readonly | 只能搜索/读取文件——不能写、不能执行、不能联网 |
| workspace(默认) | lark-workspace | 读写/编辑文件;没有 shell、没有网络、没有子代理(不可执行任意代码)。自带 lark_cli 工具:通过宿主已授权的 lark-cli 操作飞书(IM、文档、表格、日历……),以 argv 数组 spawn、带超时和输出上限——有飞书能力,但不开放 shell |
| full | 部署默认 | 宿主提供的全部能力(含 bash、网络、子代理) |

preset 是 dsh 的"工具集组合"概念:宿主沙箱对所有 preset 一致,档位的可执行差异 = 哪些工具存在。工作区档把攻击面的皇冠(任意代码执行 + 网络出口 + 委托)整个拿掉。

安装 preset:pnpm setup / pnpm setup:win 会自动把它们装进 dsh 的 harness-home 用户根目录。手动安装(发现无缓存):

把项目里的 presets/ 装进 dsh 的 preset 根
mkdir -p ~/.dsh/.agent-presets
cp -r presets/lark-workspace presets/lark-readonly ~/.dsh/.agent-presets/

进一步的收敛(宿主级):dsh 的权限预设 workspace-write(沙箱=工作区内写 + 越界需审批)可以让 fs 写入硬性限制在工作区内——但该模式对远程用户是"越界即拒绝"(审批弹窗无人点),且会改变 bash 行为,启用前需在目标部署验证。当前插件层档位已经移除 bash/web/子代理,是收益/风险比最高的部分。

与 lark-cli 搭配使用

如果你已经在用 lark-cli / Lark 系列 skill 来操作飞书(文档、表格、IM、日历……),本插件正好和它互补:继续用 lark-cli 做结构化的飞书操作,让 Lark Agent Bridge 做那个「住在群聊里的对话式编码智能体」。非常欢迎把两者结合起来用——比如在群里让智能体起草内容,再用 lark-cli 的 skill 把它推进飞书文档。

排障

- 机器人不吭声 /「(no output)」 —— 确认模型能被解析(dsh 的默认模型服务要配好,或设 DSH_LARK_MODEL)。
- 「missing Feishu credentials」 —— 向导没走完;重新跑 pnpm register,或导出 LARK_APP_ID / LARK_APP_SECRET。
- 看不到二维码(dsh 在后台跑) —— 用浏览器打开 ~/.dsh-lark-bridge/register-url.txt 里的链接。
- 群消息被忽略 —— 需要 @ 机器人,或设 DSH_LARK_REQUIRE_MENTION=false。

致谢

Lark Agent Bridge(npm @bihangchi9/lark-agent-bridge,仓库 lark-agent-bridge)是对 zarazhangrui 的 lark-coding-agent-bridge(最初名为 feishu-claude-code-bridge)的二创,经由 trae-to-lark 演化而来。本项目是一个 dsh 原生插件的从零重写。所有原始工作仍遵循其 MIT 许可;完整的版权链见 LICENSE 与 NOTICE。

许可

MIT
预览分享卡片长什么样 ↓bihangchi9-creator/lark-agent-bridge
分享 · DeepSeek Harness Hub
bihangchi9-creator/lark-agent-bridge

把本地编码智能体接到飞书 / Lark 群聊——一个群,一段对话,一条钉死的运行时。可桥接 dsh进程内插件、CLI…

回到顶部