本文来源:https://mp.weixin.qq.com/s/PNn0rJw0I_xRhwFx5-lIkw
若有版权问题,请来信告知:13951431913#139.com 或在右方提交评论。
聊聊背景

这台 Quote/0 是去年买的。当时我很喜欢它的硬件形态:小、薄、安静,放在桌面上像一张永远不会熄的纸。开箱后的新鲜感也确实维持了一阵子。
在之前的周刊里面有提到
i-vox,公众号:i-voxVol.05 奔赴热爱 | 极光与冰雪星露谷物语;Google与AirDrop;喜人与朝圣之路
后来它逐步成了摆件。偶尔放一句话、换一张图、看一眼天气,更多时候只是静静地立在表明器旁边。它的内容能力没有难题,难题在于这些内容和我的一天缺少联系:工作节奏变了,显示屏上还是那张昨天就看腻的卡片。
直到最近听说 MindReset 给 Dot. / Quote/0 做了官方 Skill,我才重新把它拿出来。这个 Skill 同时给出本地 MCP Server 和 Open API,Agent 可以列设备、读状态、查看 Loop 内容、切换内容,或者把文字、图片和 Canvas 直接推到显示屏上。
其中最让我在意的是 Canvas API。它允许 Agent 按当前状态生成结构化界面:字多一点还是少一点,黑底还是白底,时间放大还是任务放大,都可以在发送时决定。
于是我给自己出了一道题:一块已经吃灰一年的墨水屏,能不能变成 AI Agent 的桌面输出端?
答案是做一个 Attention OS。

微信、日历、CI、代码评审、各种 Agent,都在争夺注意力。每个工具都觉得自己很关键,最后的结果是:显示屏越来越多,注意力越来越碎。
这块显示屏不负责展示一整天的待办、所有指标和全部通知。它每次只选一条当前信号,决定该表明什么。告警浮现时给出行动项;会议临近时给出下一场会议;需要深度工作时保留当前唯一目标;任务完成后安静地留下一个 checkpoint。

这个方向让我觉得很有意思。桌面上的小屏终于有了一个更合适的角色:它不再抢占视线,它帮我筛掉不值得抢占视线的东西。
官方 Skill 到底给了什么
官方接口把能力分成了三层:设备、内容和 Canvas。
data、windowData、layoutFull |
Text API 合适一句提醒;Image API 合适固定海报或已有图片;Canvas API 合适我这次的情形,因为它把内容和布局拆开了。数据变化时,卡片跟着变化;优先级变化时,整张卡的视觉语言也能一起切换。
底层请求落在 POST /api/authV2/open/device/:deviceId/canvas。完整字段和设备设置说明可以在 Dot Skill / Open API 官方文档 里查看。

一次只表明一个信号的强规则
所谓 Attention OS,核心不在于信息源有多多元,而在于取舍足够明确。我给它设了一条很朴素的优先级:
CI 失败 / 构建异常 100设备离线 97Agent 卡住、需要输入 94 / 8830 分钟内的下一场会议 92两小时内的下一场会议 78当前深度工作目标 65任务完成后的 checkpoint 58安静待机 0日历、GitHub、Agent 状态、当前主任务都会产生候选信号。策略层只保留优先级最高的一条,再把它转换成合适 296×152 的 Canvas。
日历 / CI / Agent / 当前主任务 ↓ Attention Policy ↓ Canvas API ↓ Quote/0这点很关键。小屏的价值来自克制:同一时刻只有一个结论,且这个结论要能立刻理解、立刻行动。
它是怎么跑起来的
我没有让模型每隔几分钟随意生成一张图。整套流程被拆成了几个稳定步骤:
收集信号 → 排优先级 → 挑选卡片形态 → 生成 Canvas → 校验 → 发送 → 读取实机渲染结果第一步是 Content Studio。要先在 Quote/0 的 Loop 里创建一个 Canvas API 内容项。它相当于设备上预留的“远程画布槽位”。后续每次发送都带着这个内容项对应的 taskKey,设备才知道要更新哪一项内容。
第二步是信号收集。这个版本已经接入了当前主任务和 Agent 状态,也预留了日历、GitHub Actions 的输入口。实际接入时,它们都会被规整成同一种数据:标题、详情、优先级、来源与可选跳转链接。
第三步是策略。它只做一件事:从候选信号中挑出最高优先级的一条。这里我没有让大模型直接裁决,因为“会议还剩多久”“CI 是否失败”“Agent 是否卡住”都有明确规则,用确定性策略更可控,也更容易排查。
第四步才轮到 Canvas。发送给设备的内容由三部分组成:
{"data": { "headline": "Infra Weekly", "detail": "21:35 · 28 分钟后" },"windowData": { "default": ["结构化 UI 树"] },"layoutFull": { "tw": "p-0 bg-white" }}data 是这次要表明的内容,windowData 是布局树,layoutFull 是全局布局规格。换句话说,显示屏并不接收一张预先做好的 PNG;它接收一份可渲染的结构化描述,再由服务端生成适配墨水屏的图片。
最后是两个容易被忽略的保护措施。
四种状态,四种显示屏语言
假设 Android CI 有两个失败用例,显示屏会切到 ATTENTION。标题足够大,原因一句话说清,底部保留行动提示。

这张卡并不试图解释所有日志。完整信息仍然在 GitHub、终端和 IDE 里;墨水屏只负责把“该处理了”送到视线里。
会议进入 30 分钟窗口后,显示屏切成 NEXT UP。时间、会议名、倒计时和会前准备集中在同一块区域。

(当然这只是 showcase 并还未真的在公司用起来)
我很喜欢这种提醒方式。手机推送很容易被划掉,电脑角落的通知也容易被其他窗口盖住。墨水屏没有声音,没有弹窗,它只是在你抬头时把关键信息放在那里。
当天没有会议压力、没有构建异常、Agent 也没有卡住,显示屏进入 FOCUS MODE,只表明当前最关键的一件事。

“写完这篇公众号文章”这种提醒看上去很简单,却很合适放在桌面上。它给人的感觉更接近一张便签:持续存在,又不会像通知一样要求你立刻回应。
哪些是真实的,哪些是演示的
这次实验的设备、Canvas API 调用、内容切换和四张显示屏图片都来自同一台 Quote/0。每次发送后,我都借助设备状态接口取回服务端渲染出的图片,再把它们放进本文。
为了覆盖告警、会议、专注三类视觉状态,截图里的 CI 失败、会议和写文章任务使用了演示信号。它们的作用是验证优先级和布局是否正确,显示屏渲染本身完全走真实链路。
一块好显示屏,应该帮你留下什么
我以前总想把更多数据塞进桌面屏:天气、日历、股票、服务器、待办、使用量……后来发现,信息越完整,越容易变成背景噪音。
这次实验给了我一个更喜欢的答案:桌面屏应该保留经过判断后的结果。
它可以在构建失败时提醒我处理;在会议前留出准备时间;在一切正常时守住手头的任务;在工作完成后告诉我可以收尾。显示屏很小,反而逼着平台做出挑选。
如果把 AI 当作一个会执行任务的协作者,Quote/0 很合适做它的物理输出端。它留在桌面上,安静、可见、低干扰。下一步我会接入真实日历、GitHub Actions 和 Codex 任务状态,让这块显示屏真正跟着一天的工作节奏变化。
对我来说,这才是 AI 和硬件结合最舒服的一种形态:少一点打扰,多一点恰到好处的浮现。
最后
如果你也对此感兴趣,也可以自己上手 DIY 一下:
设备:Quote/0(296×152 墨水屏)接口:MindReset Dot Skill / Canvas API项目:Attention OS,按优先级把实时工作信号投射到桌面显示屏。