| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
飞书 bot 在替你干活,桌面上得有个小家伙让你看见它在干活。
| 悬停工作一览 · 默认两条 | 近期日程 · 独立展开 |
|---|---|
![]() |
![]() |
小绝诞生于 2026 年 7 月 25 日 · 飞书绝活大会北京场,画风来自大会点位海报的贴纸语言。
现在大家的飞书里都养着几个 bot:写周报的、跑流程的、回消息的。
但 bot 干活是个黑盒。它什么时候开始干、干到哪一步、干成了还是干砸了,你得自己切回飞书、翻到那个会话、往上翻聊天记录才知道。群里有人 @ 你、私聊来了新消息,也一样——飞书不在前台,世界就安静得好像什么都没发生。
小绝是把这层状态从飞书里拽出来、放到桌面上的一只宠物:
它不止是个状态灯。点一下气泡,直接跳进飞书那条消息所在的会话;右键菜单能给它派活——整理今日待办、总结过去 6 / 12 / 24 小时的飞书消息,它跑去翻你的群和私聊,让大模型总结好,再私聊发回给你。
鼠标悬停桌面宠物会打开“工作一览”:待办、待审批和近期日程分别显示总数与前 2 条,超过 2 条时可独立展开或收起。展开复用同一份 60 秒缓存,不会因为查看更多内容再次请求飞书。
双击桌面宠物,或从右键菜单选择“打开小绝助手”,可以打开 Electron 桌面助手。网页端的完整功能入口是 http://localhost:7100/workbench;直接在浏览器打开网页不会显示桌面助手的小型展开面板。
桌面助手支持两类操作:
发送后输入框立即清空;自然语言写操作先生成结构化预览,再由用户确认。
点击桌面助手右上角关闭按钮,或在没有其他待确认操作时按 Esc,会询问是否保留上下文:
勾选“今天不再询问”后,当天后续关闭会自动沿用本次的“保留”或“清空”选择;偏好按本机日期保存,次日自动失效并重新询问。若选择了“清空”,当天新产生的对话在后续关闭时也会自动清空。目前界面内没有提前重置当天偏好的入口。
Esc 的处理顺序是:关闭“是否保留上下文”弹窗、取消任务完成确认、进入关闭流程。折叠工作概览或从待办切换到其他标签页,也会取消尚未提交的任务完成确认。
| 能力 | 桌面助手 | 网页工作台 |
|---|---|---|
| 列表交互 | 点击审批后在当前条目内展开主要摘要 | 左侧列表只负责选择,右侧显示完整详情,不在列表内展开缩略卡 |
| 审批内容 | 发起人和主要摘要 | 完整表单、出差等结构化字段、费用明细与附件元数据 |
| LLM 评估 | 不在摘要面板中自动评估 | 选择审批后自动读取缓存或生成风险建议,可手动重新评估 |
| 审批操作 | 跳转飞书、在网页端打开、无意见快捷通过或拒绝;提交前仍需确认 | 可填写或留空审批意见,二次确认后通过或拒绝 |
| 附件 | 不展示、不请求附件内容 | 只列出附件元数据;用户点击“按需打开”后才访问附件 URL |
LLM 评估只是辅助建议,不会自动提交审批决定。若审批没有返回可操作的 task_id,或飞书标记为不支持 API 审批,应使用“飞书中打开审批”。
费用区会并列展示两个来源:“飞书公式返回”直接读取审批表单中名为“费用汇总”的字段;“明细计算”由网页前端对每一项可识别的金额求和。只有所有明细都带有效金额时才计算总数,缺少公式字段或金额时显示“未返回”或“待核验”,不会用 ¥0.00 代替缺失数据。
需要 Node.js ≥ 22.22.0 和 macOS。
npm install
npm run pet # 构建 + 启动桌面宠物(日常启动用 npm run pet:run)宠物窗口内嵌事件服务器(desktop/server.cjs,:7100),看板同时挂在 http://localhost:7100/,不依赖浏览器和 Vite 也能跑。
打通飞书消息感知和工作台前,需要安装 lark-cli。首次使用先初始化应用配置;收到版本更新提示时使用内置更新命令:
lark-cli config init --new # 首次配置应用
lark-cli update # 同时更新 CLI 和配套 Skills更新后,如果正在通过 AI Agent 使用 lark-cli Skills,需要退出并重新打开 Agent。右键菜单的消息总结会按需启动一次性任务,不需要再单独启动 watcher;需先在飞书开放平台开通同名 scope,再完成用户授权:
lark-cli auth login --scope "im:chat:read im:message.history:readonly im:message.group_msg:get_as_user im:message.p2p_msg:get_as_user im:message.reactions:read contact:user.base:readonly"只有需要持续监控指定重点群的消息气泡和 18:00 日报时,才需要额外配置并启动长驻监工:
cp feishu/.env.local.example feishu/.env.local # 可选:填入要重点监听的群 chat_id
npm run pet:watch # 启动监工(PET_REPORT_DRYRUN=1 时总结只上看板不发飞书)chat_id 可通过 lark-cli im +chat-list --as user 查找。当前用户 open_id 默认从 lark-cli auth status --json 自动读取,无需写入 .env.local。
工作台操作的是用户自己的审批、任务和主日历,需要额外完成用户授权:
lark-cli auth login --scope "approval:task:read approval:instance:read approval:task:write task:task:read task:task:write calendar:calendar.event:read calendar:calendar.event:create calendar:calendar.event:update"应用还需要在飞书开放平台开通相同 scope。也就是说,工作台权限同时受“应用已开通权限”和“当前用户已授权”两层控制;多次 auth login --scope 会增量补充用户授权。工作台顶栏会检测用户 token 状态,授权过期或 scope 不足时显示并可复制最小权限命令。
日程查询、创建和修改都直接使用飞书的 primary 主日历别名,不额外申请读取日历资料的权限。calendar:calendar.free_busy:read 只用于查询空闲时间,不影响指定时间创建日程或会议。如果授权返回 These permissions are restricted by your organization's security policy,说明该权限被组织策略限制,重复登录或在个人授权页勾选权限无法解决,需要组织管理员调整策略;在策略放开前,对应能力不可用,其他已获授权的功能不受影响。
如需使用“查找空闲时间”建议,再单独增量授权:
lark-cli auth login --scope "calendar:calendar.free_busy:read"审批通过或拒绝属于高风险写操作,必须在界面确认具体审批和动作后才会提交,审批意见可以留空。
在你 bot 干活的代码里,关键节点 POST 一下就行:
curl -X POST http://localhost:7100/api/event \
-H 'Content-Type: application/json' \
-d '{"state":"working","label":"正在生成周报"}'六档状态:idle / thinking / working / success / error / sleeping。 也可以直接用 feishu/pet-hook.mjs 脚本,或参考 feishu/pet-bot.example.mjs (飞书官方 SDK 长连接模式,不用公网回调,群里发「摸摸」「投喂」就能逗宠物)。 完整协议见 feishu/README.md。
审批建议按脱敏后的审批内容和模型配置计算哈希,缓存到 ~/.xiaojue-pet/approval-evaluations.json。审批内容或模型配置未变化时会复用缓存,避免每次选择审批都消耗 token;点击“重新评估”会强制发起新请求。缓存最多保留 200 条,没有自动过期时间(TTL);它保存评估结果、哈希和时间戳,不保存原审批 JSON 或附件文件。
| 数据 | 位置 | 说明 |
|---|---|---|
| LLM 配置与 API Key | ~/.xiaojue-pet/llm.json | API Key 在界面回显时会脱敏,但文件本身是本机明文 JSON,不存入系统 Keychain;程序会将文件权限设为 0600 |
| 审批评估缓存 | ~/.xiaojue-pet/approval-evaluations.json | 最多保存 200 条评估结果,无 TTL,新建时仅当前用户可读写 |
| 消息、汇报和指令归档 | ~/.xiaojue-pet/archive.json | 可能包含飞书消息摘要和 LLM 汇报正文 |
| 桌面助手上下文与当日关闭偏好 | Electron/Chromium 的本地存储 | 包含最近对话、草稿和界面状态,不包含待执行计划 |
| 消息监工配置 | feishu/.env.local | 保存群 chat_id 和用户 open_id,已被 .gitignore 排除 |
这些数据都没有端到端加密。不要把 ~/.xiaojue-pet/、feishu/.env.local、lark-cli 登录目录或终端中的 token 提交到 Git、发到群里或复制给不可信程序。共享电脑上建议限制 llm.json 和 archive.json 的文件权限,例如设置为仅当前用户可读写。清空桌面助手上下文不会清除 LLM 配置、消息归档或审批评估缓存。
事件服务器默认只监听 127.0.0.1:7100,并校验浏览器来源;写请求还要求 JSON 和本地客户端标识。这些检查用于减少普通网页误调用,不能防御已经能在本机运行的恶意进程。不要把 PET_HOST 改为 0.0.0.0,也不要通过公网代理或端口转发暴露工作台,否则其他人可能借用你的 lark-cli 用户权限发起飞书操作。
飞书访问令牌由 lark-cli 管理,项目固定使用用户身份访问个人审批、任务和主日历。不要把用户身份和 bot 身份混用,也不要在日志或问题反馈中粘贴 access token、app secret 或完整临时附件 URL。
desktop/ Electron 主进程 / 托盘 / 内嵌事件服务器 feishu/ 飞书 CLI 封装 / 监工 / LLM 客户端 / hook 与互动 bot 示例 src/pages/ 网页看板 / 消息归档 / 飞书工作台 / 桌面助手界面 src/lib/ 工作台前端 API、数据归一化与类型 src/pet/ 像素 sprite 与动画舞台(网页看板与桌面窗口共用) public/ 皮肤形象 / 海报画风素材 / 实拍截图 pet.html 桌面宠物窗口页(透明底) index.html 网页调试看板
欢迎更多 PR,合入即列名。
MIT © 黑哥 (heigeai)
| Back | FazBrowse Home | New Git URL |