Macro 的 Canvas 二维板怎么用:板上的 @ 链接是活块,权限和反链要分开看

2026-08-17

用过白板工具的人对 Canvas 这类功能通常没什么期待:画一堆框,连几根线,再往框里贴几个链接,两周后链接指向的任务已经关闭了,板子上还写着”进行中”。白板和真实工作之间隔着一层手工同步,这层同步没人愿意做,所以白板很快变成一张过期的图。

Macro 的 Canvas 想解决的正是这一层。官方文档对它的定位是”Macro 的白板 block:一个无限二维平面,用于思维导图、技术图、项目规划,或者只是把文件在视觉上归归类”。关键的一句在后面:与独立白板工具不同,你可以把工作区里任何东西的实时 @mention(任务、文档、邮件、频道、通话)直接放到板上,这样一张图就能指向它所描述的真实工作。

这句话里真正有信息量的是 “live @mentions”。它决定了 Canvas 不是画布上的一张贴纸,而是工作区数据的一个二维视图。下面按文档写明的部分拆开讲:板上能放什么、@ 链接怎么工作、和其它块是什么关系、权限怎么算,最后是官方文档确实没写的那几块。

Canvas 在 Macro 的数据模型里是什么位置

先把位置摆正,后面很多行为都是从这个位置推出来的。

Macro 的核心概念文档里写得很直白:工作区里的一切都是 block。当前的一方 block 类型是 md(文档)、emailchannelchat(agent)、automationproject(任务)、contactcompany(CRM)、callcanvascodeimagevideopdf,以及兜底的 unknown

canvas 就是这份清单里的一员,不是挂在旁边的独立小工具。这意味着它自动继承 block 的那套通用机制,文档里列出的有这么几条:

  • 每个 block 都有 References 面板,记录它被提及或被嵌入的所有位置(反链);
  • 每个 block 都用同一个共享对话框,访问级别是 owner / editor / commenter / viewer;
  • 统一搜索索引覆盖每一种 block 类型,可以按类型、按被提及的人过滤;
  • 文件夹用来组织工作区里的文档和文件,官方明确列出了 markdown 文档、PDF、图片、视频、代码文件和 canvases。

Canvas 自己的文档也把这几条又确认了一遍:canvases 用标准共享对话框(owner、editor、commenter、viewer);可以把 canvas 下载为文件;可以在 Macro 的其它任何地方 @mention 一个 canvas;它们像其它 block 一样出现在统一搜索里。关于 block 这套”乐高式”设计的整体思路,以及每种块共用哪些机制,见 blocks:七块共用一个数据库是什么意思

所以判断一个 Canvas 能力存不存在,第一步不是去翻 Canvas 那一页,而是去看 block 的通用能力清单——Canvas 那一页只写了它特有的部分。

板上能放什么:五类对象,性质完全不同

官方文档把可放置的内容分成五类。这五类的数据性质差别很大,混着理解容易出问题,所以列个表分清楚。

类别文档写明的内容数据性质
工作区 block@mention 任意 doc、task、email、channel、call、chat引用。渲染为实时 pill,携带目标的当前元数据(例如任务的 status 和 priority)
形状与文本矩形、椭圆、带样式的文本,可配置 fill、stroke、corner radius、opacity板子自有的图元
连接线直线、曲线、折线,两端可配箭头及其它端点样式板子自有的图元
手绘铅笔工具自由绘制板子自有的图元
图片粘贴、拖入,或从你的文件里选图片资源

第一行和后面四行不是一回事。后面四行是这张板子自己的内容,画在这里就只存在于这里;第一行是指针——pill 上显示的任务状态和优先级来自任务本身,不是你画上去时抄下来的一串字。这就是官方那句”a diagram can point at the real work it describes”的实际含义,也是它和贴一张 Figma 截图的根本区别。

另外一条容易漏的:片段(snippets)文档里说,在一行开头或空格后输入 ; 打开片段菜单,它在每一个 markdown 表面都能用,明确点名包括 canvas 文本框。也就是说板上的文本块不是纯字符串,它跟文档、任务、频道消息共用同一套 markdown 输入能力。

@ 链接怎么工作:pill 是活的,反链记在被指的那一头

Mentions 是 Macro 里 block 之间互相引用的方式。文档的定义是:在任何富文本表面输入 @ 会打开自动补全,选中的东西渲染为一个实时的内联 pill,携带目标的当前元数据,并且这次引用会作为反链记录在目标的 References 面板里

注意反链的方向:记录在被提及的那一头。文档给了一个真实例子——Macro 团队自己的”8 个月路线图文档”,成员能看到这份文档被另外几份文档提到过、被一个 canvas 提到过、在 #engineers 频道里被提到过;而作者本人还能看到它在自己与两位同事的私信里被提到过(其他人看不到这条,除非他们也在那个会话里)。

这个例子把 Canvas 的位置说透了:你在板上 @ 了一份文档,那份文档的 References 面板里就多了一条”被某个 canvas 提到”。所以 Canvas 不只是消费工作区数据,它同时在往工作区的引用图里写东西。反过来,半年后有人打开那份路线图文档,是能顺着反链找回这张板子的——板子不会因为没人主动收藏就失联。

Mentions 文档里还单列了一节 “Mentions in Canvas”,说法与 Canvas 页一致:用 canvas 把其它实体嵌到一个二维平面上,适合思维导图、连向任务的技术图、项目管理,或者纯粹把文件在视觉上存放归组。频道文档在”与 Macro 其它部分的集成”里也提了一句:Canvas 可以把频道消息嵌进图里。@ 提及在不同表面上的完整行为差异(哪些会通知、哪些会共享),单独整理在 @ 提及怎么把东西连起来

权限:分享板子和分享板上的东西不是同一件事

这是我认为最容易踩的一处,而且官方文档需要交叉两页才拼得出来。

Macro 的权限主线是”频道式共享”:当你在频道里提及某样东西,它就被共享给该频道的全体成员;有人加入频道即获得访问权,被移出即失去。这套设计是为了避免”能不能给我开个权限”的来回。

但 blocks 文档里有一句限定得很死的话:文档中的嵌入和提及不会自动授予权限,这一点与频道里的提及不同——频道成员会自动获得访问权,而你在文档里嵌入的文件,还得自己去共享一次。Mentions 文档的行为清单也是同一个口径:文档和 block 被提及时,在频道语境下会被共享,在评论或文档语境下不会。

Canvas 属于哪一边?官方文档没有为 canvas 单列这一条,Canvas 页只说了它用标准共享对话框。可以确定的是:自动授权这件事,官方明确写明只发生在频道语境里。因此保险的做法是——把一张板子共享给某人,不要默认对方就能打开板上每一个 pill 指向的对象;对方能看到的,是他本来就有权限看的那部分。真要让整组东西一起流转,官方推荐的路子是拿频道当权限容器(文档里建议每个团队用一个频道,这样团队需要的所有实体权限自动跟着成员进出走)。完整的权限规则(文档、任务、频道、通话各自的通知与共享差异)见 权限模型:谁能看到什么

还有一个小但实用的点:复制一个 canvas 的链接时,你当前的平移和缩放位置会被保留,链接打开时就框在你当时在看的那一块。对一张很大的板子来说,这决定了”我说的是这块”能不能一句话讲清楚——发链接就等于发坐标,不需要再补一句”往右下角找”。

官方快捷键页为 Canvas 单列的键位

Macro 的快捷键页把 canvas 单独列了一节。这些是文档原文列出的键位,照录如下:

键位作用
c + n新建 canvas(在创建类快捷键里)
v选择工具
h手形(平移)工具
r形状工具
x连接线工具
p铅笔工具
t文本工具
cmd + = / cmd + -放大 / 缩小
cmd + g / shift + cmd + g组合 / 取消组合
] / [置于最前 / 置于最后
方向键微调选中对象(按住 shift 步长更大)

Canvas 页另外提到,框选多个对象后可以对齐(左、中、右、上、中、下),常规的 cmd+c / cmd+x / cmd+vcmd+z 撤销和 delete 都按预期工作。快捷键体系是 Macro 的整体设计,不止 canvas 这一套,全量清单整理在 键盘流:五个键起步到全量快捷键

文档没写的、以及 Canvas 不适合干的事

按规矩把边界说清楚,免得按想象去用。

一、agent 不能替你画板。 Macro 的 MCP 工具注册表公开了十六个工具,其中与创建内容有关的只有 CreateDocument,它的参数是 documentNamefileContentfileExtensionisTask,描述里写明创建的是纯文本文件。工具清单里没有任何创建或编辑 canvas 的工具。所以”让 agent 把这个项目画成一张图”这类需求,官方 MCP 接口目前不提供。ListEntitiesincludeTypes 参数文档只给了 ["document", "email"] 作为示例,没有列出完整取值,因此 canvas 能不能被这个工具列出来,文档没说,我也不猜。

二、实时协作的官方说法里没点名 canvas。 blocks 文档讲实时协作时写的是:协作型 block(文档、PDF 标注)通过 Loro CRDT 在 Cloudflare Durable Objects 后端上同步,Rust 的 sync-service 为每份文档起一个 Durable Object “房间”,客户端走 WebSocket 连到 /document/:id,多人编辑、在线光标和完整离线支持由此而来。括号里举的例子是 docs 和 pdf markup,没有点名 canvas。canvas 是否走同一条通道、有没有同样的在线光标和离线能力,官方文档没有说明,不要按”应该也一样”去规划多人同时改一张板的流程。

三、产品文档之外,canvas 的公开信息非常少。 仓库的更新记录里与 canvas 直接相关的条目只有零星几条:2026-01 有一条 “drag/drop entities + move/copy + fix canvas mention nodes”,2026-02 有 “fix(canvas): no save on init”,2026-03 有 “fix(canvas): add shallow diff to canvas node update”、“fix[mobile]: infinite canvas loading” 和 “chg(canvas): use new markdown utils”。这些都是更新记录里的条目标题,官方没有展开讲,我也只能转述到这个程度。它至少说明 canvas 在被持续修,以及移动端曾有过加载问题。

四、它不是画精细图的工具。 官方给的能力只有矩形、椭圆、文本、三种连接线、铅笔和图片,可调的是 fill、stroke、corner radius、opacity。要出对外交付的示意图,这套图元不够用;Canvas 的价值不在画得好看,在于板上的 pill 指着真东西。README 里那句吐槽反过来正好是它的适用面:传统 issue 跟踪工具”相比二维画布过于死板、过于武断,跟你的项目实际运转方式对不上”——这是官方自己的说法。

五、统一记忆那边的边界。 统一记忆的示意图里,canvas 被列为汇入统一记忆的来源之一,但正文只说记忆在后台运行、可配置项有限,并没有展开 agent 到底怎么读一张板上的内容。想让 agent 用上板子里的信息,比起指望它自己去读,更稳的做法还是按 mentions 文档的建议——你已经知道该看哪个东西时,直接 @ 给它,省掉一轮搜索,也保证上下文对。

真要给一句使用建议:把 Canvas 当成”给一堆已有 block 摆一个空间关系”的地方,而不是当成信息的存放地。凡是你希望半年后还能被搜到、被引用、被 agent 读到的内容,让它以文档、任务、频道消息的形式存在,然后在板上 @ 过来。这样板子过期了也无所谓,重画一张就是了,底下的东西一个都没丢。

延伸阅读


本文依据 Macro 官方仓库(github.com/macro-inc/macro,AGPL-3.0 协议)的 apps/docs/ 产品文档、 MCP 工具参考与自托管说明整理,核对日 2026-08-17。 我们没有注册或运行过 Macro,因此不涉及界面外观与操作手感; 官方标注为计划中的能力文中已如实标明,不代表当前可用。 价格与额度以官网 macro.com 最新页面为准;许可证相关问题请咨询专业人士并以官方许可证原文为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。