第十章:我是如何剖析 CLI 里的终极 Agent 能力的(电脑控制与浏览器接管)

张开发
2026/6/22 9:02:53 15 分钟阅读
第十章:我是如何剖析 CLI 里的终极 Agent 能力的(电脑控制与浏览器接管)
大家好。我又来了抱着打破砂锅问到底的态度把 Claude Code 源码的src/utils/目录彻底翻了个底朝天。结果我发现了一个足以颠覆大家对命令行工具认知的秘密。你以为 Claude Code 只是一个能在终端里敲敲命令、改改代码的辅助工具大错特错在它的源码深处竟然藏着全套的**桌面控制Computer Use和浏览器自动化Chrome 接管**模块。是的只要给它权限它完全可以把你的电脑当成自己的游乐场。今天咱们就来扒一扒Claude Code 是如何突破终端黑框框的束缚化身为全能 Agent智能体的。我将带你直接深入源码用真实的依据来说话。学习目标在这篇绝对硬核的压轴之作里你会学到跨语言的底层调用Node.js CLI 如何通过 Rust 和 Swift 模块控制你的鼠标键盘。巧妙的窗口管理策略大模型截屏时如何避免拍到自己Terminal 穿透技术。浏览器接管MCP 协议如何成为 CLI 与 Chrome 扩展之间的通信桥梁。云端接力探索神秘的Ultraplan指令看它如何将重度任务卸载到云端多智能体。源码探秘当 AI 长出手眼1. 桌面控制Computer Use鼠标、键盘与截屏当我打开src/utils/computerUse/executor.ts文件时我看到了极其震撼的注释和代码。Anthropic 的工程师们在这里集成了两个底层原生模块直接跨语言调用操作系统的底层能力ant/computer-use-input底层使用 Rust依赖enigo库专门负责模拟鼠标移动、点击和键盘敲击。ant/computer-use-swift底层使用 macOS 原生 Swift API如SCContentFilter和NSWorkspace专门负责高性能截屏和获取前台应用信息。也就是说如果 Claude 遇到了一个它无法通过命令行解决的 Bug它甚至可以自己打开模拟器通过视觉截屏分析 UI 界面然后直接用鼠标去点击界面的按钮防穿帮设计Terminal as Surrogate Host这里有一个极其精妙的设计。因为大模型是在终端里运行的如果它截屏难道截到的全是满屏幕滚动的代码日志在源码的注释里工程师详细解释了getTerminalBundleId()的作用代码会检测当前运行的终端应用比如 iTerm2 还是 macOS Terminal并在截屏时主动把终端窗口从画面中排除Capture Excluding。同时它甚至在点击事件时绕过终端窗口确保点击能精准落在背后的目标应用上。源码中是这样处理剪贴板的它没有依赖庞大的 Electron 模块而是直接调用了 macOS 的pbcopy和pbpaste非常轻量硬核// 节选自 src/utils/computerUse/executor.tsasyncfunctionreadClipboardViaPbpaste():Promisestring{const{stdout,code}awaitexecFileNoThrow(pbpaste,[],{useCwd:false,})if(code!0){thrownewError(pbpaste exited with code${code})}returnstdout}为什么目前不支持 Windows在探索这段代码时我发现了一个关键的跨平台限制桌面控制目前被强行锁死在了 macOS暂时不支持 Windows。工程师直接在核心执行器的入口写死了拦截// 节选自 src/utils/computerUse/executor.tsexportfunctioncreateCliExecutor(opts:{...}):ComputerExecutor{if(process.platform!darwin){// darwin 即 macOSthrownewError(createCliExecutor called on${process.platform}. Computer control is macOS-only.,)}// ...}这并非他们不想支持而是卡在了智能截屏与窗口管理。底层键盘鼠标库ant/computer-use-input(Rust/enigo) 其实是跨平台的但为了实现上述精妙的“终端穿透”系统截屏模块ant/computer-use-swift深度依赖了 macOS 原生的SCContentFilter和NSWorkspace。在未来Anthropic 只需补充一个调用 Windows DXGI 和 Win32 API 的底层包就能平滑解锁 Windows 桌面。2. 浏览器接管Claude in Chrome如果你觉得控制鼠标还不够来看看src/utils/claudeInChrome/mcpServer.ts。官方在这里利用 MCPModel Context Protocol协议搭建了一个桥接服务。它的作用是让 CLI 工具能够直接与你浏览器里的Claude for Chrome插件进行实时通信。源码显示这个桥接不仅支持通过 WebSocket 连接到官方的 Bridge 服务器还支持本地连接。// 节选自 src/utils/claudeInChrome/mcpServer.tsfunctiongetChromeBridgeUrl():string|undefined{constbridgeEnabledprocess.env.USER_TYPEant||getFeatureValue_CACHED_MAY_BE_STALE(tengu_copper_bridge,false)if(!bridgeEnabled){returnundefined}if(isEnvTruthy(process.env.USE_LOCAL_OAUTH)||isEnvTruthy(process.env.LOCAL_BRIDGE)){returnws://localhost:8765}// ...returnwss://bridge.claudeusercontent.com}在createChromeContext函数中CLI 注册了处理工具调用的回调比如当浏览器插件断开连接时会提示用户Browser extension is not connected. Please ensure the Claude browser extension is installed and running...这意味着大模型如果需要查阅文档或进行端到端测试它可以直接通过 MCP 协议向 Chrome 插件发送指令获取当前页面的 DOM 结构绕过反爬虫、点击网页上的某个链接、或者在输入框里填入测试数据。Claude Code 彻底打通了从“本地源码修改”到“浏览器预览与测试”的全链路自动化。与桌面控制不同浏览器接管已完美支持 Windows虽然电脑控制目前只支持 macOS但我在源码中发现浏览器自动化这部分是完全跨平台的。在src/utils/claudeInChrome/setupPortable.ts里工程师不仅支持了 macOS 和 Linux甚至连 Windows 的各个 Chromium 内核浏览器路径都穷举了一遍// 节选自 src/utils/claudeInChrome/setupPortable.tsexportfunctiongetAllBrowserDataPathsPortable():BrowserPath[]{// ...switch(process.platform){// ...casewin32:{if(config.windows.path.length0){// 专门针对 Windows 的 AppData 目录结构进行了判断constappDataBaseconfig.windows.useRoaming?join(home,AppData,Roaming):join(home,AppData,Local)paths.push({browser:browserId,path:join(appDataBase,...config.windows.path),})}continue}}// ...}他们甚至硬核到将 Windows 上的 Chrome、Edge、Brave、Arc、Vivaldi 等主流浏览器的用户配置路径全写进了枚举配置里。所以只要你在 Windows 电脑上使用支持的浏览器MCP 桥接通道畅通无阻大模型依然可以愉快地帮你自动跑测试、查资料。3. 云端大脑接力神秘的 Ultraplan大模型在本地终端里跑受限于 Token 窗口遇到极其复杂的架构重构任务怎么办在src/utils/ultraplan/ccrSession.ts里我找到了答案。这里隐藏着一个强大的端云协同机制。CCR 代表 Claude Code Remote当任务过于庞大时系统会将任务打包传送到云端多智能体环境中执行。源码中定义了详细的轮询和状态解析逻辑它会不断地拉取云端的执行事件pollRemoteSessionEvents直到获取到一个被批准的最终执行计划Exit Plan。// 节选自 src/utils/ultraplan/ccrSession.tsexporttypeScanResult|{kind:approved;plan:string}|{kind:teleport;plan:string}|{kind:rejected;id:string}|{kind:pending}|{kind:terminated;subtype:string}|{kind:unchanged}exportclassExitPlanModeScanner{// ... 纯状态分类器用于解析 CCR 事件流ingest(newEvents:SDKMessage[]):ScanResult{// 遍历云端返回的事件寻找 EXIT_PLAN_MODE_V2_TOOL_NAME 相关的工具调用// ...}}更令人拍案叫绝的是源码中有一个名为__ULTRAPLAN_TELEPORT_LOCAL__的魔法字符串Sentinel。当你在浏览器的云端任务界面点击“传送回终端执行”时云端会将这个标记连同制定好的计划一起发回本地你的 CLI 接收到后就会像拿到剧本一样开始在你的本地机器上飞速敲代码这种端云协同、算力卸载的架构本地负责执行云端负责深度思考和推演绝对是未来 AI 编程工具的发展方向最后这才是完全体的 Agent看完src/utils/computerUse/、claudeInChrome/和ultraplan/的源码我深受震撼。Anthropic 并没有把 Claude Code 局限为一个“聊天机器人 文件读写器”而是把它定位成了一个长了手、长了眼、还能召唤云端分身的超级数字员工。它能敲 Bash 命令能控制你的鼠标键盘能读懂你的 Chrome 浏览器遇到搞不定的活儿还能呼叫云端大哥帮你推演架构。能把这么多超前的黑科技塞进一个 NPM 安装包里并且在代码架构上保持得如此优雅大量使用 MCP 解耦跨语言调用处理得滴水不漏这源码扒得实在是太值了。一键三连奥关注不迷路哈

更多文章