如何让 Rowboat 的 agent 在 Spaces 白板上绘图? 如何让 Rowboat 的 agent 在 Spaces 白板上绘图【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat想让 Rowboat 的 agent 画一张流程图或架构图时可以直接让它画在 space 的共享白板上——就是 space 顶栏 Board 按钮或 ⌘4打开的那块 Excalidraw 画布。绘图由 agent 的两个内置工具whiteboard-read/whiteboard-draw完成agent 读取白板现有元素把一组操作add / connect / update / delete应用到场景上再通过 space 资产通道写入新快照所有开着这块白板的人会在一个事件往返内看到新增内容。前提是你的 Rowboat 已连接一个 SpaceHarbor orgagent 运行在 core 中——本地模式和 rowboat-server 远程模式都带这两个工具无需额外 IPC/RPC 配置。白板是什么whiteboards/*.excalidraw资产白板就是 space 资产树里whiteboards/前缀下的一组文件扩展名固定为.excalidraw默认白板路径是whiteboards/board.excalidraw顶栏 Board 按钮打开最近使用的白板没有时首次使用即创建默认白板一个 space 可以有多个命名白板侧栏 Whiteboards 区、画布右上角的名称切换器里可建新白板画到具名白板时传board: name快照是单行.excalidrawJSON。不超过 900KBWHITEBOARD_TEXT_SNAPSHOT_MAX_BYTES时存为文本资产超过则回落到 blob 版本——画板 UI 和 agent 工具共用同一阈值你不需要关心切换。agent 怎么画两个工具就是全部接口agent 从不手写 Excalidraw JSON。whiteboard-draw的执行流程是 read → apply → serialize → propose读入当前场景在 纯函数层 上应用操作并维护version/versionNonce/ 分数索引 / 墓碑删除等不变量序列化后经read_asset/propose_change提交。遇到conflict有人同时保存就在currentContent上重放同一批操作再提交最多 3 次。支持的 4 种操作op作用关键字段add加一个带标签的框rectangle/ellipse/diamond或独立文本texttext、定位用x/y或rightOf/leftOf/below/above、gap默认 80、可选styleconnect两个元素间画箭头默认arrowkind: line为无箭头直线from、to、可选labelupdate改已有元素的 text / 位置 / 尺寸 / 样式id 要改的字段delete删除元素其标签和箭头绑定一并移除id定位规则很关键框会自动按标签撑开尺寸所以第二个元素之后的坐标是猜不准的、会重叠。正确做法是第一个元素用x/y新白板从x: 0, y: 0开始其余元素相对它用rightOf/below等放置整张流程图在一次调用里完成。工具自身的示例ops参数就是这样的纯 JSON 数组[ {op: add, id: a, shape: rectangle, text: Sign up, x: 0, y: 0}, {op: add, id: b, shape: ellipse, text: Done, rightOf: a}, {op: connect, from: a, to: b, label: then} ]白板 skill 里的完整示例画了一张注册验证流程[ {op: add, id: signup, shape: rectangle, text: Sign up, x: 0, y: 0}, {op: add, id: verify, shape: diamond, text: Email verified?, rightOf: signup}, {op: add, id: home, shape: rectangle, text: Home, rightOf: verify}, {op: add, id: resend, shape: rectangle, text: Resend link, below: verify}, {op: connect, from: signup, to: verify}, {op: connect, from: verify, to: home, label: yes}, {op: connect, from: verify, to: resend, label: no} ]另外两个参数reason是一行给队友看的说明会显示在白板的 history 里来自某个 thread 时以· thread:rootId结尾board省略时就是该 space 的默认白板。在 Space 会话中触发在 space 的聊天里直接告诉 agent 要画什么即可让它把那块白板解析到具体对象有两种方式见 skill 挂载逻辑在输入框的 菜单里提及某块白板菜单列出该 space 的白板按最近使用时间排序当下在 Spaces 里开着某块白板然后从它的聊天入口发消息。任一方式都会让spaceswhiteboard两个 skill 挂到这一轮whiteboard-read/whiteboard-draw工具随之可用。spaceId若不在上下文里agent 会先用list_spaces查。如果白板还不存在whiteboard-read不会报错它返回exists: false附上该 space 现有白板列表和一条next提示whiteboard-draw首次绘制即创建白板第一个元素放x: 0, y: 0。所以白板不存在时直接让它画就行。验证绘制是否成功whiteboard-draw成功后返回的字段就是核对清单success: true、board路径、version提交后的资产版本、created是否本次新建、added/updated/deleted本批改动清单、warnings如有、bounds整板范围、counts各类型元素计数。三个落点可以确认结果画布实时出现agent 的写入是持久change事件打开该白板的每个客户端都会拉取新快照并逐元素 reconcile新增内容在一个事件往返内出现在所有人的画布上history 条目白板的历史里能看到那条reason再读一次下一轮让 agent 再跑whiteboard-read新元素会以 id、标签、位置出现在清单里——后续connect/update/delete引用的 id 就来自这里。限制与出错时看什么v1 白板只有图形 文本编辑器层禁用了图片工具场景里进不了图whiteboard-read的other字段列出自由手绘、frame 等工具不支持编辑的类型agent 的规则是不覆盖、绕开摆放。全批原子操作列表里出现一个未知 id整批不写入任何内容错误信息说明原因重叠的两个元素之间connect也是硬错误报错会点名两个框并给出改法用相对放置。add落在已有元素上则是 warning仍然写入。冲突重试上限写入过程中白板持续被改有人正在画3 次重试后返回The board kept changing under the write (someone is drawing right now). Nothing was written; try again in a moment.——此时什么都没写稍后重试即可。单次操作数上限 200MAX_OPS一张图应建在单次调用的一个ops列表里对应一条 history 记录。删除是墓碑isDeleted标记而非移除未打开白板的客户端下次保存前不会被误复活。想继续深入实现细节可看 设计文档§7 决策 2 与 §10 Agent access 是 agent 绘图路径的完整说明和 工具实现。【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考