Cua — 讓 AI 用任何模型操控電腦的開源基礎設施
讓 AI 用電腦,最難的部分其實不是 AI。
這句話聽起來怪,因為過去兩年所有人的注意力都在模型上——它看不看得懂截圖、推不推得出下一步該點哪。但這件事其實早就解掉了。現在隨便一個支援 computer-use 的 LLM,給它一張螢幕截圖,它就能告訴你「滑鼠移到座標 (840, 312) 按一下,然後輸入這串字」。看畫面、理解、輸出操作指令,這條鏈路已經是商品。真正讓你做不出一個能用的桌面 Agent 的,是螢幕背後那台電腦。
虛擬機誰來開?開好之後螢幕截圖怎麼抓出來?模型吐回來的「點 (840, 312)」這個滑鼠事件,要怎麼真的注入到那台機器裡?Linux、macOS、Windows、Android 各自一套 API,差異怎麼抹平?最要命的是——Agent 在那邊亂點的時候,怎麼確定它不會把你正在用的這台筆電給搞爛?
這些全部都不是模型問題。是基礎設施問題。而 Cua(Computer-Use Agent,15.5K stars,MIT 授權)做的事,就是把這一整層包起來。
模型是可替換零件,環境才是地基
先把這件事講透,因為它是理解 Cua 為什麼長這樣的關鍵。
你可以把整個 computer-use Agent 拆成兩半。上半是「腦」——看畫面、做決策,這是模型的工作。下半是「身體」——一台真的能被操控、被觀察、被隔離的電腦,這是環境的工作。大家盯著上半看了兩年,但能不能交付一個可用的產品,卡點幾乎都在下半。
Cua 對這件事的態度很乾脆:腦袋是可以隨時換的零件。它透過 liteLLM 統一呼叫,目前支援 20+ 種模型,你的 Agent 程式碼不會因為今天用 Claude、明天換 GPT-4o 而要重寫。它甚至有個叫 Composite Agent 的設計,讓你用 model_a+model_b 的語法把兩個模型串起來——一個負責「看」(grounding,認出畫面上哪個是按鈕),一個負責「想」(reasoning,決定該按哪個):
1 | # GTA1 負責 UI 元素偵測,GPT-4o 負責推理決策 |
你看,連「腦」本身都能拆成兩塊隨意組裝。這正好說明了它的世界觀:模型那層是流動的、可插拔的,所以工程的重心不在那。重心在底下那台機器。
打個比方。把 AI Agent 想成一個剛拿到駕照的學徒,模型是他的判斷力——能不能看懂路況、決定要不要踩煞車。但你不會讓一個學徒直接開你的車上高速公路。你會給他一個駕訓場:場地是封閉的,撞了也只是撞護欄,練完場地一推平就能重來。Cua 就是那個駕訓場。它真正的價值,不在於把學徒教得多聰明,而在於它先把那個「撞了不會出人命」的封閉場地給你蓋好了。
把地基拆開來看
Cua 是個 monorepo,裡面塞了十幾個子專案,但核心邏輯只有三層,由上往下一層比一層更貼近硬體:
- cua-agent——Agent Loop 引擎。負責跑「截圖 → 送 LLM → 拿回操作指令 → 執行 → 再截圖」這個循環。它接的是上面那 20+ 種模型。
- cua-computer——統一操作介面。把滑鼠、鍵盤、螢幕、剪貼簿這些操作抽象成一組固定的 API,這樣不管底下是什麼系統,上層程式碼都長一樣。
- Sandbox——虛擬環境管理。根據你指定的 Image 類型,自動去選對應的執行底層:Docker 跑 Linux 容器、QEMU 跑各種 VM、Lume 跑 macOS VM(Apple Silicon 限定)、或直接連 cua.ai 雲端。
中間那層 cua-computer 是整個設計最聰明的地方。它把「人類能對一台電腦做的事」整理成 12 個介面:mouse、keyboard、screen、shell、clipboard、window、terminal、files、mobile(Android 觸控)、apps、tunnel。你寫 Agent 的時候,呼叫的永遠是這組抽象,至於底下這台機器到底是 Ubuntu 容器還是 macOS VM,你不用管——差異被這層吃掉了。最小的範例長這樣:
1 | from cua import Sandbox, Image |
注意 Sandbox.ephemeral 這個字。ephemeral 是「短暫的、用完即丟」的意思——這個沙箱開出來,async with 區塊一結束就自動銷毀。這不是裝飾。它正是前面那個「撞了不會出人命」承諾的具體實作:Agent 在這裡面再怎麼亂搞,跑壞了、裝了奇怪的東西、把系統搞到開不了機,都無所謂,反正它本來就要被銷毀,下一次重開一個乾淨的。要把整段控制權交給一個會自己亂點的 AI,這層隔離不是加分項,是前提。
一個你不會在規格表上注意到的細節
Cua 裡面有個元件叫 Cua Driver,我覺得它解的問題最能說明這群人到底在想什麼。
一般的 computer-use 方案有個很煩的副作用:Agent 在操作的時候,它要搶走你的滑鼠跟鍵盤焦點。也就是說 AI 在那邊點來點去的那幾分鐘,你這台電腦等於被它徵用了,你只能在旁邊乾瞪眼,手不能碰。對一個想讓 AI 在背景幫你跑雜事的人來說,這很荒謬——我請了個助理,結果他工作的時候我自己得停工。
Cua Driver 用 macOS 的私有 API(SkyLight)把這件事繞過去了:截圖不需要視窗跑到前景、滑鼠鍵盤事件直接注入到指定的那個視窗、而且 Agent 有它自己獨立的游標(用覆蓋層顯示)。結果就是 AI 在操控某個視窗的同時,你還能用你自己的滑鼠在別的視窗繼續做事,兩條游標各做各的。它甚至能透過 MCP 協定接進 Claude Code:
1 | # 把 Cua Driver 加到 Claude Code 當 MCP server |
接上之後,Claude Code 就能直接操控你的 Figma、瀏覽器或其他原生 app——從寫程式、做 UI、到開瀏覽器測試,一條龍。當然這招有代價:用了私有 API,所以只支援 macOS,而且要開 Accessibility 和 Screen Recording 權限,沒辦法跨平台。
我之所以特別講這個,是因為「搶不搶焦點」這種事不會出現在任何功能比較表上。它只有真的天天用、被那個「AI 工作時我不能用電腦」煩過的人,才會把它當回事去解。這通常是一個工具值不值得看的訊號。
它不適合什麼,得先說清楚
工具介紹文最容易騙人的地方,就是只講它行的部分。Cua 有幾條硬限制,你決定要不要投時間之前該知道:
macOS 虛擬化只限 Apple Silicon——這是 Apple Virtualization.Framework 的限制,不是 Cua 偷懶,Intel Mac 跟 Linux/Windows 上你別想跑 macOS VM。cua-som(負責 UI 元素偵測那塊)依賴 ultralytics,是 AGPL-3.0 授權,商業使用要特別留意,其他模組才是 MIT。Anthropic 那邊建議截圖解析度上限 1024×768,超過會被內部縮放、可能害座標對不準。Android runtime 跟 Windows 的 Hyper-V sandbox 都還在早期開發。本地跑 UI-TARS、Qwen3-VL 這類視覺模型需要 GPU(CUDA 或 Apple Silicon MPS),不然就得走雲端、自己準備 API key。
換句話說,如果你是要在 CI 裡用 Linux 容器跑 GUI 自動化測試、或在 Apple Silicon 上讓 Agent 操作原生 app,Cua 現在就很好用;但如果你期待它在 Intel Mac 上變出一台 macOS VM,那是物理上做不到的事。
真正改變的不是這個工具
退一步看,Cua 的故事其實在講一件更大的事。
當一個能力的「模型部分」變成商品——任何人都能用一行設定切換 20 種模型、computer-use 不再是某家獨佔的黑魔法——價值就會整個往下移,移到那層沒人想碰、但少了就什麼都跑不起來的工程:怎麼讓它在隔離環境裡安全地跑、跑完能乾淨銷毀、出錯不會波及你真正在用的機器。Cua 之所以拿得到 15.5K 顆星,不是因為它的 Agent 比別人聰明,正好相反——它幾乎不碰「聰明」這件事,它把聰明留給可替換的模型,自己專心去鋪那層地基。
這個模式值得記住,因為它不只發生在 computer-use。每一次有個 AI 能力從「魔法」變成「商品」,下一個值錢的位置,就是那層把魔法變得能安全、能重複、能交付的基礎設施。看懂哪一層正在變成商品,你大概就猜得到下一個機會在哪。
本文整理自個人知識庫筆記,原始專案請見 trycua/cua(GitHub)。Cua 為 MIT 授權(cua-som 模組為 AGPL-3.0),技術細節以官方文件為準。










