小岛AI
| ONLINE |

posts/claude-background-computer-use.md

Claude 退到后台,审批弹窗反而成了新阻塞

小岛AI 2026 / 09 / 03

Claude 今天把一个很碍手的东西拿走了。

鼠标争夺战。

按照 Anthropic 更新后的官方说明,Claude Cowork 和 Claude Code 现在可以在后台操作电脑。macOS 15 及以上版本默认使用后台窗口,它不会抢走你的鼠标和键盘,发现你正在输入时通常还会等一等。电脑保持唤醒,Claude Desktop 保持打开,任务就能继续跑。

好家伙,终于不用看着光标在屏幕上慢慢挪了。

可我盯住的不是那个会动的光标,而是另一件事。**一个需要人坐在屏幕前监督的权限系统,突然获得了离开屏幕继续工作的能力。**前台少了一次打断,后台却多了一笔谁批准、批准多久、失败后从哪恢复的账。

这不是一句「注意安全」能糊过去的账。

Anthropic 把能力边界写得很坦白。电脑操作目前只向 Pro 和 Max 计划开放测试。Claude 会优先选连接器,再选浏览器,实在没有合适工具才直接点屏幕。它会在访问每个应用前请求许可,也会扫描提示词注入迹象,但官方同时明确写着,电脑操作与本机应用之间没有沙箱,护栏也不可能完美。

能力退到后台以后,监督机制不能只剩一个偶尔冒出来的弹窗。

后台窗口仍需要可见的控制面

任务可以退到后台,权限、状态和停止入口不能一起消失。

弹窗管的是应用,长任务管的是意图

很多桌面 Agent 的权限设计,还是典型的前台交互思路。它问「允许访问 VS Code 吗」,你点一次允许,然后任务继续。

短任务里这很自然。你就在旁边,知道它为什么要打开 IDE,也能看见下一步发生了什么。

长任务换了个玩法。

同一个 VS Code 权限,可以用来打开一个测试项目,也可以用来翻另一个工作区里的 .env。同一个浏览器权限,可以用来查文档,也可能在页面内容诱导下打开一个不该去的链接。**应用级授权回答的是能不能碰,任务级授权回答的是为了什么、碰到哪、什么时候必须停。**两者不是一回事。

Claude Code 的权限文档其实已经给了很好的底座。规则可以分成 allowaskdeny,而且权限由运行时强制执行,不靠模型自己记住。这里有点子牛逼,因为提示词写得再诚恳,也不如一个模型绕不过去的 deny 靠谱。

问题在于,后台任务不能把每个不确定动作都变成同步弹窗。人离开以后,弹窗没人点,任务就会安静地卡住。更糟的是,有些系统为了减少卡住,干脆把大量动作设成自动允许。前者把 Agent 变成后台屏保,后者把权限系统变成一张空白支票。

我自己的判断是,后台电脑 Agent 需要的不是更多弹窗,而是一份有时限的任务合同。启动前把范围说清楚,运行时只对越界动作升级,结束后让所有临时能力自动失效。

一份最小合同可以长这样。

task: audit-ios-onboarding
allowed_apps:
  - Xcode
  - Simulator
  - Safari
allowed_paths:
  - ./apps/ios
denied_actions:
  - publish
  - purchase
  - delete_user_data
expires_in: 45m
stop_when:
  - login_required
  - secret_detected
  - external_upload_requested
deliverables:
  - screenshots
  - findings.md
  - action-log.jsonl

这不是 Anthropic 当前产品里的配置格式,而是一份可以直接拿去改造自己工作流的工程草图。重点不在 YAML,重点在五个字段都得有答案。

允许哪些应用和路径,决定正常活动半径。明确拒绝哪些动作,给高风险操作装断路器。过期时间让临时授权不会跟着会话活到天荒地老。停止条件告诉系统哪些情况必须找人。交付物则规定任务不能只说「完成了」,还要把截图、发现和动作记录摆出来。

坦率讲,如果一项任务没法在开始前写清这五件事,我不会让它在后台碰真实桌面。不是模型不够聪明,是我自己还没把边界想明白。

审批要变成事件,不能继续当成打断

前台任务遇到高风险动作时,最顺手的设计是弹窗。后台任务需要换一种状态机。

低风险动作在合同范围内自动继续,例如打开指定项目、启动模拟器、截取测试页面。中风险动作进入 waiting_approval,给用户发一条带上下文的通知,写清准备做什么、会碰哪些数据、批准后有效多久。高风险动作直接拒绝,不提供「这次先放过」按钮。

你想想看,真正有用的审批信息,不是「Claude 想访问 Safari」,而是「为了核对登录页,Claude 想在未来十分钟内只读访问 Safari 的本地测试地址,不会提交表单,也不会使用已登录站点」。前一句逼人凭感觉点按钮,后一句才让人有条件做判断。

这里还要补一刀,**审批凭证必须短命,而且要绑定具体动作。**批准访问某个本地页面,不应该顺手放开整个浏览器会话。批准读取一个工作区,不应该变成读取全部主目录。十分钟后没用掉就过期,任务重试也不能自动复用旧批准。

这块需要注意一下,Claude 官方已经提醒,屏幕操作会截取已授权应用的画面,能看到屏幕上的个人信息和敏感文档。一个应用里的动作还可能影响另一个应用。邮件里的链接可以打开 Chrome,即使 Claude 没有 Chrome 的查看权限,系统也未必能阻止浏览器被启动。授权链路不是一排独立开关,它更像一串会互相带动的齿轮。

Dispatch 的安全说明把这条链写得更直白。手机上的指令可以触发桌面读取、移动或删除文件,操作连接服务和浏览器。一个被篡改的指令、一条钓鱼链接,都可能沿链路扩散成难以撤销的动作。

因此后台任务的日志不能只是聊天记录。至少要能回答,任务何时拿到哪项权限,打开了哪个应用,执行了什么动作,为什么停下,收尾时留下哪些本地改动。日志里不要塞密码、Cookie 或完整屏幕内容,记录事件和证据索引就够了。

厉害了,原本一个「让 Claude 帮我测下 App」的口语任务,到这里已经长成一个小型作业系统。

但这笔复杂度不能省。前台监督靠人的眼睛兜底,后台监督只能靠机器留下的状态兜底。

真正会卡住的,是锁与恢复

Claude Code 的电脑操作文档还有个很工程师的细节。computer use 从第一次操作开始持有机器级互斥锁,同一时间只允许一个会话控制电脑,而且任务完成并不会释放锁,只有退出会话才会释放。

这个设计很好理解。两个 Agent 同时抢鼠标、改窗口焦点,画面会迅速变成行为艺术。

可一旦能力进入后台,锁就从安全细节变成调度核心。一个会话完成了正文任务却没有退出,后面的任务会一直拿不到电脑。一个任务卡在无人处理的审批上,整个队列也可能跟着停。用户表面上只看到「后台没结果」,系统内部却不知道该重试、该取消,还是该等人回来。

互斥锁与检查点决定后台任务能否恢复

一次只让一个会话控制电脑,还要让失败任务能从检查点安全恢复。

怎么解?我会把电脑控制权做成带租期的 lease,也就是一张会过期的临时占用券,而不是没有期限的锁。任务运行时定期续租,进程消失或心跳中断后,调度器等待一个安全窗口再回收。回收之前先保存最近的检查点,记录当前应用、已完成步骤、本地改动和下一步动作。

重试也不能从第一步莽一遍。

假设任务已经生成了报告,又在上传前失败。重新运行时如果直接再生成一份,可能覆盖用户修改,或者创建两份内容不同的文件。每个动作都要有幂等键,让系统知道「这一步已经成功,不要再做」。涉及提交、发送、上传和删除时,恢复流程默认停在人类确认前,不跨过副作用边界。

怎么说呢,后台 Agent 最怕的不是报错。报错至少诚实。最难受的是它不知道自己做到了哪,还很有信心地从头来一遍。

检查点也给验收留了入口。任务结束时,不能只返回一段漂亮总结。它要交出实际改动文件、关键步骤截图、失败和重试次数、未完成事项,以及可以一键撤销的操作清单。让「我完成了」变成一组能复查的证据。

这套东西听起来有点重,但可以从很小的范围开始。先选一个没有敏感数据的测试应用,只开放一个项目目录,只允许读和点击,把会产生外部副作用的动作全部拒绝。跑十次,记录卡在哪些审批、哪类页面误判、哪一步最常重试。等日志能解释每次失败,再逐步放开写入和跨应用操作。

官方同样建议从研究、整理等简单任务起步,不要把电脑操作用于金融账户、法律合同、医疗信息和他人个人资料。完整边界可以看安全使用 Cowork。这不是保守,这是在给一个还处于测试期的能力安排正确的试航水域。

我跟你说,后台电脑操作当然值得兴奋。它把 Agent 从「你看着我做」推到了「你去忙,我交付结果」。但产品真正跨过去的,不只是窗口层级,而是人的注意力边界。

任务可以退到后台。

权限、证据和停止按钮,得一直亮着。