跳转到内容

实时画面卡

任务在后台运行时,屏幕角落会有一张小卡片,实时显示 DeskMind 正在操作的那个窗口,下面用文字写出它正在做的这一步。这是 Mac App 0.4.0 的新功能,默认开启。要关掉,在 View(显示)菜单里取消勾选 显示任务窗口的实时画面。这个设置从下一个任务开始生效;想暂停当前任务的画面,把卡片收起即可。

任务操作的窗口通常不在你眼前:可能压在你自己的窗口后面,也可能在另一块屏幕上。屏幕顶部的灵动岛告诉你任务在做什么,卡片让你看到那个窗口现在的样子。

  • 标题栏: 小方、应用名,以及第几步或当前状态。
  • 画面: 任务窗口的完整画面,被其他应用的窗口挡住时也一样。橙点标出上一步操作的位置,点击时会荡开一圈波纹。DeskMind 从不移动你自己的鼠标指针。
  • 画面下方一行: 正在做的这一步,用文字写出,比如「输入 “hello”」。

看小方的眼睛就知道现在的状态。它脚边的橙点是状态灯。

小方 状态
眼睛盯着橙点 工作中,眼睛跟着操作位置移动
抬头 需要你:有问题要问,或要你批准
^ ^ 完成了
– – 没做完、被停下,或窗口看不见

鼠标移到卡片上,按钮才会出现。

操作 结果
拖动卡片 吸附到最近的角落,之后的任务也停在那里。
双击,或点 放大 画面从最大 360 × 240 点放大到最大 720 × 480 点,保持窗口比例。再来一次就缩回。
点 收起 卡片变成 260 × 36 的胶囊,显示状态和这一步。收起期间暂停截取画面。
点 停止任务(■) 停止任务。
需要你时点卡片 打开 DeskMind 窗口,在那里回答。
  • 从不抢键盘,也从不跑到最前面。 你在别处打的字照常进到别处。
  • 避开任务窗口。 如果你选的角落会挡住那个窗口,卡片就换到下一个不挡的角落:先换到同一条边的另一头,再换到同一侧的上下另一角,最后是对角。
  • 应用铺满屏幕时,点击会穿过卡片。 大多数人习惯把应用开到最大,这时四个角都会挡住窗口。卡片于是停在离任务最近几次操作最远的角落,点击直接穿过它落到应用上。把鼠标在卡片上停半秒,按钮就能用了。任务的点击落下时不会在卡片上停留,所以总能穿过去。
  • 告诉你结果,然后离开。 任务结束时,卡片在最后一张画面上显示 完成了、没做完 或 已停止,停留 2.5 秒后淡出。如果你在这之前就开始了新任务,旧卡片会立刻消失。
情况 卡片怎么做
窗口被其他应用的窗口挡住 照样显示完整的窗口。截取时把其他应用的窗口排除在外。
同一个应用的另一个窗口盖在任务窗口上 在 0.4.0 里,这个窗口也会出现在画面中,和你屏幕上此刻看到的一样。
窗口移动、改变大小或换到另一块屏幕 跟着窗口走,大约每 0.5 秒检查一次。
窗口横跨两块屏幕 卡片显示其中一块屏幕上的那部分。
窗口被最小化、关掉,或在另一个桌面空间 保留最后一张画面,调暗,并显示「窗口不可见」。窗口回来,画面也回来。
同一个应用还开着别的窗口 DeskMind 指明它操作的窗口之后,卡片只显示那个窗口,绝不切换到别的窗口。在那之前,以及只靠像素识别、拿不到窗口列表的应用,卡片显示该应用最大的窗口。
应用还没打开 任务开始前,DeskMind 先在后台打开它。拿到第一张画面之前,卡片显示「启动中」。
任务有问题要问,或需要你批准 卡片显示「需要你」,小方抬头。点卡片,在 DeskMind 里回答。
你截图或共享屏幕 卡片是普通窗口,所以会出现。
模型看屏幕时 模型永远看不到卡片。每一步的截图只截任务窗口本身。
你录制任务 录像里不含卡片。录制整个屏幕时会包含。

开着实时画面运行任务时,macOS 会在菜单栏显示屏幕录制指示。卡片用的是 DeskMind 已有的「屏幕录制」权限。

  • 任务窗口。 DeskMind 指明它操作的窗口之后,卡片只显示那个窗口,从不切换到同一个应用的其他窗口,也不切换到屏幕上的其他东西。在那之前,以及只靠像素识别的应用,卡片显示该应用最大的窗口。其他应用的窗口不会进入画面。在 0.4.0 里,如果同一个应用的另一个窗口盖在任务窗口上,它会出现在画面中,和你屏幕上看到的一样。
  • 画面不离开后台助手。 截取画面和绘制卡片都由持有「屏幕录制」权限的后台助手 DeskMind Hands 完成。画面不会传给 DeskMind App,不存盘,也不会离开你的 Mac。

卡片大约每 0.2 秒拍一张,用的是 ScreenCaptureKit 的单张截图。它不开持续的抓取流,因为抓取流一开,模型就会变慢。

我们在一台 M4 Pro(macOS 27.2)上用固定的 MLX 负载测过:

模型旁边同时在跑的截取 每轮耗时
无 102 毫秒
抓取流,每秒 2 帧或 10 帧 121–125 毫秒
单张截图,每秒 10 张也一样 101–107 毫秒

在这组测试里,抓取流一开,每轮慢约 20%;在真实运行中,基于抓取流的卡片也让决策慢了约 20%。改用单张截图后,一次真实任务的对照里(第 4–9 步),关掉卡片时平均每次决策 5.35 秒,开着时 5.56 秒,慢约 4%。这些都是一台 Mac 上的小样本,测量记录见加入卡片的那个 PR。录制任务会让决策变慢,也是这个原因,见成绩与局限。

另外两个选择:

  • 从整块屏幕截取,排除其他应用的窗口,再裁到任务窗口。 所以窗口被其他应用挡住时也能完整显示。如果改成在截取设置里直接指定这个窗口,macOS 26 及以后会在它上面加紫色的「正在共享」标记。
  • 按卡片尺寸的两倍像素截取,但不超过窗口本身的像素。 这样在 Retina 屏上清晰,又不用每秒五次复制整个 5K 窗口。

卡片本身在 app/Helper/LiveCard.swift。不需要屏幕的那部分判断在 app/Shared/LiveView.swift:显示哪个窗口、卡片多大、放在哪个角、橙点画在哪、什么时候接收点击。这些由 app/tests/DecisionTests.swift 做单元测试。桌面测试 app/tests/e2e/live_view.sh 会在一个临时的文本编辑文档上驱动真实的卡片,全程不按任何键,也不把任何应用切到前台。