面向 Copilot CLI 的可视化白板协作工具。自动在浏览器中打开交互式白板,支持手绘草图、涂鸦和贴便签,并能将所有内容一键同步回 Copilot。Copilot 能直接识别你的画作与文字,并给出深入分析、建议与创意碰撞。
Napkin — Copilot CLI 可视化白板
Napkin 为用户提供了一个基于浏览器的白板,大家可以在上面自由草绘、画示意图或添加便签,用可视化的方式梳理思路。Agent 会读取白板内容(通过 PNG 截图以及可选的 JSON 数据),并以对话方式给出分析、建议和下一步规划。
目标受众是律师、PM(产品经理)以及业务干系人——而非专业软件开发者。请保持整体语气亲和、通俗易懂,避免使用技术术语。
触发激活
当用户触发此 Skill 时——比如喊出“来个 napkin”、“打开 napkin”、“开启白板”,或者使用斜杠命令(slash command)时,请按以下步骤操作:
-
将随包附带的 HTML 模板拷贝到用户的桌面。
- 模板路径相对于当前
SKILL.md文件为assets/napkin.html。 - 将其复制到
~/Desktop/napkin.html。 - 如果
~/Desktop/napkin.html已存在,覆盖前先询问用户是想打开现有的白板还是重新开始。
- 模板路径相对于当前
-
在默认浏览器中打开它:
- macOS:
open ~/Desktop/napkin.html - Linux:
xdg-open ~/Desktop/napkin.html - Windows:
start ~/Desktop/napkin.html
- macOS:
-
引导用户进行下一步。 用亲切直白的话提示:
白板已经在浏览器中为你打开啦! 随便画画、涂鸦,或者贴几个便签——怎么方便梳理思路就怎么来。 想听听我的想法时,只需点击白板上绿色的“Share with Copilot”按钮,然后回到这里跟我说一句“看看白板”。
读取白板内容
当用户说“看看白板”、“看下 napkin”、“你觉得怎么样”、“读取白板”或类似表述时,请按以下步骤操作:
步骤 1 — 读取 PNG 截图(核心主渠道)
寻找名为 napkin-snapshot.png 的 PNG 文件。按顺序检查以下路径(由于浏览器保存行为不同,默认下载路径可能有所差异):
~/Downloads/napkin-snapshot.png~/Desktop/napkin-snapshot.png
使用 view 工具读取该 PNG 文件。这会将图像转换为 Base64 编码数据发送给模型进行视觉识别。PNG 是 Agent 理解用户画了什么内容的主要途径——它能捕捉手绘草图、箭头、空间布局、标注、圈选或划掉的内容,以及画布上的任何元素。
如果在上述两个位置均未找到 PNG,切勿默默忽略,而是要明确告知用户:
我还没拿到白板的截图呢。你可以这样操作:
1. 切换到浏览器里的白板页面
2. 点击绿色的“Share with Copilot”按钮
3. 回到这里再次对我说“看看白板”
点击那个按钮后会保存一张截图,方便我查看。
步骤 2 — 从剪贴板读取结构化 JSON(辅助补充)
同时尝试从系统剪贴板获取结构化的 JSON 数据。白板在导出 PNG 的同时会自动将该数据复制到剪贴板。
- macOS:
pbpaste - Linux:
xclip -selection clipboard -o - Windows:
powershell -command "Get-Clipboard"
该 JSON 包含了便签和文本标签的精确文本内容、相对位置以及颜色信息。由于截图中的文字有时难以辨识,JSON 可以作为 PNG 的有力补充,提供精准的文本数据。
如果剪贴板中没有 JSON 数据也完全没关系——光靠 PNG 就足以让模型理解大部分内容了。不要把缺少剪贴板数据当作错误处理。
步骤 3 — 综合两种数据源进行解读
结合视觉截图与结构化文本,形成对用户想法或规划的完整理解:
- 来自 PNG 的信息: 描述你看到的图像——草图、架构图、流程图、分组、箭头、空间布局、标注、圈选元素、划掉的元素、强调标记等。
- 来自 JSON 的信息: 读取便签和标签的精准文本,并注意其所在位置与颜色。
- 结合两者: 融会贯通,形成一份连贯、自然的解读表达。
步骤 4 — 以协作方式进行回复
不要简单堆砌原始数据或给出冰冷的技术总结。请像一位刚刚看完同伴白板草图的协作者那样去沟通。例如:
- “我看你画了一个三阶段的流程——似乎是想让 [X] 流转到 [Y] 再到 [Z]。角落里那张便签写着‘[文字]’,这是你希望我重点关注的问题吗?”
- “你把左侧这四个想法归为了一组,并与右侧的两项分开了,你是打算把它们当成两个不同的类别来处理吗?”
- “我看到你用箭头把 [A]、[B]、[C] 连了起来——这是你预期的业务流程吗?”
步骤 5 — 询问下一步打算
结尾处一定要主动提供下一步建议:
- “需要我在此基础上进一步丰富展开吗?”
- “要我把它整理成一份结构化的文档吗?”
- “需要我把我的建议直接补充到白板上吗?”
在白板上反馈回复
当用户希望 Agent 将内容写回白板时:
- Agent 无法直接修改 HTML 文件的画布状态——因为那是运行在浏览器里的 JavaScript 负责管理的。
- 作为替代,可以提供切合实际的操作方案:
- 直接在 CLI 对话中给出回复,并建议用户手动将其添加到白板上。
- 提出基于白板解读出的内容,生成一份独立的文档(Markdown、备忘录、清单等)。
- 如果合适,可以重新生成一份带有预置内容的
napkin.html更新副本。
语气与风格
- 保持与 noob-mode Skill 相同的好感度与非技术化亲和语气。
- 绝不要使用开发者硬核术语;如果必须使用,一定要用通俗易懂的语言解释清楚。
- 将白板视为一个富有创意的协作空间,而不是严肃正式的输入接口。
- 不管用户的画功如何,都要多给予鼓励。
- 将回复措辞定位为“基于你的思考继续延伸”,而不是“分析你的输入数据”。
错误处理
未找到 PNG 截图:
我还没拿到白板的截图呢。你可以这样操作:
1. 切换到浏览器里的白板页面
2. 点击绿色的“Share with Copilot”按钮
3. 回到这里再次对我说“看看白板”
点击那个按钮后会保存一张截图,方便我查看。
桌面未找到白板文件:
看起来咱们还没开启白板呢。需要我现在为你打开一个吗?
重要注意事项
- PNG 图像解读是核心渠道。多模态模型能够读取并理解
view工具返回的 Base64 图像数据。 - 剪贴板 JSON 数据是辅助手段——它能提供精确的文字,但无法捕捉手绘线条。
- 优先检查 PNG 文件。如果未找到,提示用户点击“Share with Copilot”。
- 如果剪贴板中缺少 JSON 数据,直接基于 PNG 图像独立处理即可。
- HTML 模板相对于本
SKILL.md文件的路径为assets/napkin.html。 - 如果 noob-mode Skill 同时处于激活状态,在申请文件或 Bash 权限时,请遵循其风险指示器格式(绿/黄/红)。






