白板是多机器人协作的共享上下文机制:同一个飞书群里的多个机器人 / 会话共享一块本地 markdown 白板,用来沉淀跨会话、跨 bot 的「当前项目状态」(目标 / 组织方式 / 核心方案 / 关键进展 / 下一步)。语义定位是最新状态快照:update 整体覆盖、不堆历史,后来的 agent 一读就拿到最新共识,不必翻聊天记录。适合多 agent 协作、长任务断点、跨话题交接(交接流程本身见 session-handoff)。

默认关闭,懒创建

  • botmux whiteboard enable 只打开能力,不会立即建板;白板在某个群第一次需要时才懒创建。
  • disable 关闭能力,但已有白板保留在磁盘,Dashboard 仍可只读查看。
  • 未开启时:不创建白板、不绑定会话、不注入 prompt,agent 的读写命令也会被拒绝。
  • 也可在 Dashboard → 设置里切换开关。

共享粒度:按群

同一个群里的不同机器人、不同工作目录,默认共享同一块白板(绑定键 chat:<chatId>:default)。群即共享上下文板的边界:谁更新,所有人下一轮都看得到。

agent 读写协议

启用后,daemon 会在每轮注入一个 <whiteboard> 提示块,告知当前白板 id 和读写方式(只暴露白板 id 与命令,不暴露本地文件路径,并提示不要写入密钥 / 隐私)。推荐流程:

  1. 先读,拿内容和版本号:
botmux whiteboard read --id <id> --json
# { "id": "...", "updatedAt": "2026-...", "content": "..." }
  1. 融合新信息,整体重写为一份完整的当前状态。
  2. 带上刚才读到的版本号回写(乐观并发 / CAS):
botmux whiteboard update --id <id> --expected-updated-at <updatedAt> "新的完整状态"

若期间白板已被别的 agent 改过,返回 whiteboard_cas_mismatch(退出码 2)——重新 read 拿最新内容再融合重试即可。不传 --expected-updated-at 则退化为直接覆盖(向后兼容)。

也可以让 agent 走 botmux-whiteboard Skill:说「更新一下白板」「看看项目上下文」即触发,Skill 机制见 skill-cli。

并发与安全

机制行为
写锁串行化每块白板有独立文件锁,两个 agent 同时 update 不会写出半截文件;持有进程被 kill 后锁经死锁回收自动失效
CAS 冲突检测--expected-updated-at 让覆盖在「上次 read 后白板被改过」时被拒绝,避免静默丢更新
空内容拒写拒绝写入空白内容,防止误清空共享板
路径隐藏prompt 只给白板 id 和命令;并提示 agent 不要往白板写密钥 / 隐私数据

Dashboard 白板页

按「群 → 白板」分组:左侧列表按群分组,右侧详情看选中白板的元信息与当前内容预览。删除是受保护操作,需 dashboard token(删板文件 + 清索引绑定 + 清理会话引用)。白板读写 API 默认不对匿名只读访客开放(fail-closed),不泄露白板内容或本地路径。Dashboard 全貌见 dashboard。

命令一览

命令说明
whiteboard status查看开关与白板数量
whiteboard enable / disable开启 / 关闭能力
whiteboard list列出本机白板(只读,能力关闭时也可用)
whiteboard current [--create]查看当前群默认白板;--create 按需创建
whiteboard read --id <id> [--json]读 board.md;--json 输出 { id, updatedAt, content }
whiteboard update --id <id> [--expected-updated-at <ts>] <内容>整体覆盖当前状态(内容可走参数 / stdin / --content-file)
whiteboard write --yes --id <id> <内容>强制覆盖逃生口(需 --yes)
whiteboard create [--id ID] [--title T]显式新建一块白板

相关

  • multi-bot — 多机器人协作场景,白板是其共享记忆载体
  • daemon-worker — daemon 负责 <whiteboard> 提示块注入与读写门禁