白板是多机器人协作的共享上下文机制:同一个飞书群里的多个机器人 / 会话共享一块本地 markdown 白板,用来沉淀跨会话、跨 bot 的「当前项目状态」(目标 / 组织方式 / 核心方案 / 关键进展 / 下一步)。语义定位是最新状态快照:update 整体覆盖、不堆历史,后来的 agent 一读就拿到最新共识,不必翻聊天记录。适合多 agent 协作、长任务断点、跨话题交接(交接流程本身见 session-handoff)。
默认关闭,懒创建
botmux whiteboard enable只打开能力,不会立即建板;白板在某个群第一次需要时才懒创建。disable关闭能力,但已有白板保留在磁盘,Dashboard 仍可只读查看。- 未开启时:不创建白板、不绑定会话、不注入 prompt,agent 的读写命令也会被拒绝。
- 也可在 Dashboard → 设置里切换开关。
共享粒度:按群
同一个群里的不同机器人、不同工作目录,默认共享同一块白板(绑定键 chat:<chatId>:default)。群即共享上下文板的边界:谁更新,所有人下一轮都看得到。
agent 读写协议
启用后,daemon 会在每轮注入一个 <whiteboard> 提示块,告知当前白板 id 和读写方式(只暴露白板 id 与命令,不暴露本地文件路径,并提示不要写入密钥 / 隐私)。推荐流程:
- 先读,拿内容和版本号:
botmux whiteboard read --id <id> --json
# { "id": "...", "updatedAt": "2026-...", "content": "..." }- 融合新信息,整体重写为一份完整的当前状态。
- 带上刚才读到的版本号回写(乐观并发 / 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>提示块注入与读写门禁