1. 从一次“AI 自己点开 Safari”说起:Computer Use 到底在控制什么
Claude Code 的 Computer Use 能做什么?简单说,它让模型不再只是“聊天”,而是能像人一样看屏幕、动鼠标、敲键盘,把“打开 Safari 搜个东西”这种动作完整跑完。适合谁?适合想把 Agent 从纯文本推进到真实桌面操作的开发者,尤其是 Mac 用户。我第一次看到它自己移动鼠标点地址栏时,确实愣了一下——这不是脚本录制,而是模型根据截图实时决策。
但很多人卡在第一步:源码里那套链路看懂了,却不知道怎么把它接到自己的模型通道上。Claude Code 默认走 Anthropic 官方通道,国内开发者直接调用会遇到网络和额度问题。所以这篇分两条线:一条拆源码里 Computer Use 控制 Mac 的实现链路,一条给出可复制的 TaoToken 统一 Key/API 通道配置,最后演示一次从源码调用到本地验证的完整动作。
先明确核心检索词:Claude Code 源码中 Computer Use 控制电脑,本质是“屏幕感知 → 指令下发 → 执行反馈”的闭环。屏幕感知靠截图,指令下发靠工具调用,执行反馈靠事件循环和状态回传。三者缺一,模型就会“瞎操作”。
源码里这套能力不是默认全开,而是挂在特性标志后面。启用前要过两道权限:辅助功能(Accessibility)和屏幕录制(Screen Recording)。这两项在 macOS 的“隐私与安全性”里手动授权,缺一个,截图返回空图或鼠标事件被系统丢弃。我踩过的坑是:只给了屏幕录制,没给辅助功能,结果模型能看到屏幕但点不动,日志里全是“event dropped”。
架构上分四层:用户交互层、会话上下文层、宿主适配层、原生模块层。会话上下文管理是中枢,负责状态、权限、锁定和工具调用;宿主适配器是桥梁,统一执行器创建和权限检查;CLI 执行器是核心执行组件,包装两个原生模块——一个管鼠标键盘,一个管截图、应用管理和权限检查。这种分层的好处是,高层逻辑不关心底层是 Quartz 还是别的,换平台只改适配器。
执行流程以“打开 Safari 搜索 Claude AI”为例:功能启用检查 → 权限验证 → 会话初始化并检查锁定 → 启动 Safari → 隐藏非目标应用 → 鼠标移到地址栏点击并输入 → 捕获结果截图 → 恢复被隐藏应用、释放锁定、发完成通知。注意“隐藏非目标应用”和“终端特殊处理”:终端不会被隐藏、不吃点击、不出现在截图里,否则模型会把自己的输出窗口当成目标,陷入自我循环。
坐标系统用逻辑坐标,再转物理坐标,保证不同缩放设置下点击位置一致。事件循环处理解决终端环境事件积压,确保窗口激活、应用切换真正生效。剪贴板安全机制在操作前备份、操作后恢复,并验证写入是否成功,避免粘贴错内容。这些细节决定了 Computer Use 是“能用”还是“好用”。
理解了链路,下一步就是把它接到可用的模型通道上。源码里模型调用走的是 Anthropic 接口,我们要做的是把 Base URL 和 Key 换成 TaoToken 的统一通道,其余工具定义和截图逻辑不动。
2. TaoToken 前置:统一 Key 与 API 通道准备
TaoToken 在这里的角色是统一模型通道:你拿一个 Key,就能通过兼容 Anthropic 的接口调用模型,不用分别维护多家凭证。对 Computer Use 这种需要频繁截图+多轮工具调用的场景,统一通道能减少鉴权切换带来的失败。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 根地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数。
前置准备分三步。第一步,注册并创建 API Key。进控制台后找到 API Keys 页面,新建一个 Key,复制保存。这个 Key 就是后面配置里的ANTHROPIC_AUTH_TOKEN或ANTHROPIC_API_KEY。控制台地址:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。
第二步,确认模型 ID。Computer Use 对模型能力有要求,需要支持视觉输入和工具调用。在模型对话页可以先验证模型是否正常响应:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。选一个支持视觉的模型 ID,记下来,后面配置里填ANTHROPIC_MODEL。
第三步,理解接入方式。Claude Code 读取环境变量或 settings 文件来决定请求发往哪里。我们要做的是把ANTHROPIC_BASE_URL指向 TaoToken 的 API 根地址,把ANTHROPIC_AUTH_TOKEN设为刚创建的 Key,把ANTHROPIC_MODEL设为选定的模型 ID。这三件套是接入的核心,缺一不可。
如果你用 Claude Code 的 settings 文件,路径通常是~/.claude/settings.json。如果你用环境变量,就在 shell 里 export。两种方式选一种,不要混用导致覆盖。我建议用 settings 文件,因为可复制、可版本管理,团队协作时直接同步文件即可。
还有一个容易忽略的点:Computer Use 的截图会以 base64 图像形式发给模型,请求体较大。TaoToken 通道对请求大小有正常限制,但如果你一次传多张高分辨率截图,可能触发超时。建议在源码里把截图质量参数调低一档,或限制目标尺寸,平衡清晰度和传输效率。源码里截图方法接收图像质量、目标尺寸、显示 ID 等参数,这些都可以在配置里调。
准备就绪后,进入可复制配置环节。下面给出 settings.json 片段和环境变量两种写法,路径与字段名保持和 Claude Code 源码一致。
3. 可复制配置:settings.json 与环境变量三件套
这一节给可直接粘贴的配置。先给 settings.json 片段,路径~/.claude/settings.json。如果你已有该文件,把env字段合并进去,不要整个覆盖。
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "你的模型ID", "ANTHROPIC_SMALL_FAST_MODEL": "你的轻量模型ID" } }字段说明:ANTHROPIC_BASE_URL固定为https://taotoken.net/api,不要加尾部斜杠;ANTHROPIC_AUTH_TOKEN填控制台创建的 Key;ANTHROPIC_MODEL填支持视觉的主模型 ID;ANTHROPIC_SMALL_FAST_MODEL用于轻量任务,可填同一模型或更快的模型。如果你只用一个模型,ANTHROPIC_SMALL_FAST_MODEL可省略。
如果你偏好环境变量,在~/.zshrc或~/.bashrc里加:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的TaoTokenKey" export ANTHROPIC_MODEL="你的模型ID"改完执行source ~/.zshrc生效。验证是否生效:echo $ANTHROPIC_BASE_URL应输出https://taotoken.net/api。
如果你用 Codex 的auth.json,路径通常是~/.codex/auth.json,写法如下:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model": "你的模型ID" }注意 Codex 的字段名是base_url、api_key、model,和 Claude Code 的ANTHROPIC_*不同,别混用。三件套的本质不变:Base URL + Key + Model ID。
如果你用 Cline 的 MCP 配置,在 Cline 设置里找 MCP Servers,添加一个指向 Claude Code 的 server,环境变量同样填上面三件套。Cline 的配置文件通常是cline_mcp_settings.json,片段:
{ "mcpServers": { "claude-code": { "command": "claude", "args": ["mcp", "serve"], "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "你的模型ID" } } } }如果你用 CC Switch 管理多套配置,在 CC Switch 里新增一个 profile,Base URL 填https://taotoken.net/api,Key 填 TaoToken Key,Model 填模型 ID。CC Switch 的好处是切换 profile 时自动改 settings 文件,不用手动编辑。
配置完成后,不要急着跑 Computer Use。先用一个最小请求验证通道是否通。下一节给验证命令和预期结果。
4. 验证请求:从源码调用到本地成功结果
验证分两步:先验证模型通道,再验证 Computer Use 链路。第一步用 curl 发一个最小请求,确认 Base URL 和 Key 正确。
curl -s https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-你的TaoTokenKey" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "你的模型ID", "max_tokens": 64, "messages": [ {"role": "user", "content": "回复 OK 两个字母"} ] }'预期返回 JSON 里content数组第一项text包含OK。如果返回 401,说明 Key 错或没带x-api-key头;如果返回 404,说明 Base URL 路径不对,检查是否多了/v1或少了/v1。TaoToken 的 API 根是https://taotoken.net/api,Anthropic 兼容接口在/v1/messages,所以完整路径是https://taotoken.net/api/v1/messages。
第二步验证 Computer Use。在 Claude Code 里启用特性标志后,发一条指令让它打开 Safari 并截图。源码里功能启用检查会读特性标志,你需要在 settings 里加:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "你的模型ID", "CLAUDE_CODE_COMPUTER_USE": "1" } }CLAUDE_CODE_COMPUTER_USE是启用 Computer Use 的开关,具体字段名以你使用的 Claude Code 版本为准,可在源码里搜computer_use或computerUse确认。启用后,在 Claude Code 里输入:
打开 Safari,访问 example.com,截图给我看预期行为:终端输出显示它调用截图工具、移动鼠标、点击地址栏、输入 URL、回车、再截图。最后你看到一张 Safari 显示 example.com 的截图。如果卡在“权限验证”,去 macOS 系统设置 → 隐私与安全性 → 辅助功能/屏幕录制,把终端和 Claude Code 都勾上。
如果截图返回空图,检查屏幕录制权限;如果鼠标不动,检查辅助功能权限;如果模型不调用工具,检查模型是否支持视觉和工具调用。验证成功后,你就完成了从源码调用到本地验证的完整闭环。
这一步的成功标志是:模型根据截图决策,而不是按固定脚本执行。你可以故意把 Safari 窗口挪个位置,再发同样指令,看它是否能重新定位地址栏。如果能,说明坐标转换和屏幕感知链路是通的。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一节对照真实报错给排查路径。第一个高频错:401 Unauthorized。原因通常是 Key 错、Key 没带对、或 Base URL 指向了错误路径。检查三件套:ANTHROPIC_BASE_URL是否为https://taotoken.net/api,ANTHROPIC_AUTH_TOKEN是否为控制台创建的 Key,请求头是否带x-api-key。如果你用环境变量,确认source过且没有其他 profile 覆盖。
第二个错:local proxy failed。这通常出现在你本地起了代理但代理没通,或 Claude Code 读到了旧的代理配置。检查HTTP_PROXY、HTTPS_PROXY环境变量,如果不需要代理就 unset。如果你用 CC Switch,检查当前 profile 是否指向了失效的本地地址。TaoToken 通道本身不需要本地代理,直连即可。
第三个错:reading choices或choices字段解析失败。这通常是因为你把 OpenAI 格式的响应当 Anthropic 格式解析,或模型返回了非预期结构。Claude Code 走 Anthropic 的/v1/messages,响应里是content数组,不是choices。如果你在源码里改了请求格式,检查是否误用了 OpenAI 的/v1/chat/completions。TaoToken 同时兼容两种格式,但 Claude Code 源码默认用 Anthropic 格式,别混。
第四个错:OAuth相关报错。Claude Code 某些版本会尝试 OAuth 登录,如果你用 API Key 接入,需要在 settings 里禁用 OAuth 或设置ANTHROPIC_AUTH_TOKEN优先。检查是否有CLAUDE_CODE_OAUTH之类的环境变量,如果有,unset 或设为 0。源码里鉴权优先级通常是:显式 Token > OAuth > 交互登录。确保显式 Token 存在。
第五个错:截图返回image too large或超时。原因是截图分辨率太高,base64 后请求体过大。在源码截图方法里调低图像质量参数,或限制目标尺寸。源码里截图方法接收quality、targetSize、displayId等参数,把quality从 1.0 降到 0.7,targetSize限制在 1280 宽以内,通常能解决。
第六个错:鼠标点击位置偏移。原因是逻辑坐标转物理坐标时缩放比例算错。检查你的显示器缩放设置,源码里坐标转换依赖NSScreen的backingScaleFactor。如果你外接显示器且缩放非默认,可能需要手动校准。实测下来,把主显示器设为默认缩放,偏移问题最少。
第七个错:终端被截图进去,模型看到自己的输出。源码里有终端特殊处理,确保终端不出现在截图里。如果你改了截图逻辑,检查是否排除了终端窗口。排除列表通常按应用 bundle ID 过滤,确认终端应用的 bundle ID 在排除列表里。
排查顺序建议:先 curl 验证通道,再验证权限,再验证截图,最后验证鼠标事件。每步单独验证,不要一次改多个地方。
6. 语义一致 CTA:把通道固定下来,再深入源码
走到这里,你已经完成了从源码理解到本地验证的闭环。接下来最值得做的是把通道固定下来,避免每次调试都被鉴权问题打断。如果你主要做排障和接入,建议先把 API Keys 和接入文档过一遍:API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。文档里有 Anthropic 兼容接口的完整字段说明,对照源码看更清楚。
如果你要验证模型是否支持视觉和工具调用,去模型对话页发一张截图试试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。能正确描述截图内容,说明视觉通道通;能按指令调用工具,说明工具调用通。两者都通,Computer Use 的模型侧就没问题。
如果你打算长期跑编码和 Agent 任务,比如让 Claude Code 持续操作桌面,建议看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。长期任务对通道稳定性和额度有要求,Coding Plan 更适合这种场景。Claude Code 的 Anthropic 接入说明在 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite ,里面有针对 Claude Code 的专门配置示例。
最后给一个实用技巧:把 settings.json 里的三件套抽成模板,换项目时只改 Model ID,Base URL 和 Key 不动。这样你在不同机器上复现 Computer Use 环境时,只需要同步一个文件。源码里工具定义和截图逻辑不用动,通道层保持稳定,调试精力就能集中在坐标转换和事件循环这些真正影响成功率的地方。