AI 外殼框架要退場了嗎?
AI 外殼框架要退場了嗎?
Theo Browne 認為,隨著模型開始用外殼框架(harness)產生的資料訓練,外殼框架正逐漸隱形,開發者對特定外殼框架的忠誠度也會像當年的編輯器之爭一樣消退;他並將 T3 Code 定位為免費、開源的代理式開發環境(ADE)。
Podcast 專家音訊節目
收錄於 888news Podcast 智庫專區,包含精華摘要與上市公司即時行情
Theo Browne 是 T3 Code 這個代理式開發環境的創作者。他主張,AI 執行框架(harness)如今已淪為實作細節,多數開發者根本不該再在意;業界對它的執迷,不過是「Tab 對空白鍵」之爭的最新翻版。不過整集節目大部分篇幅其實跟 harness 無關:他帶觀眾走過軟體抽象層不斷向上推移的歷史,替 harness、介面、代理三者劃出分類學上的界線,最後用一段很個人的論述,說明工程師為何該欣然接受自己的專業有一天不再重要。
Browne 談這個題目格外有說服力,因為他賣的產品正是刻意不當 harness。他花了不少時間精確定義名詞——LLM、harness、工具層(tool plane)、資料層(data plane)、介面、代理、ADE——因為在他看來,外界對 T3 Code 的種種誤解,多半來自開發者分不清這幾層。讀完這篇,你應該能掌握一套談論代理堆疊的實用詞彙,清楚知道幾個具名產品(Claude Code、Claude Agent SDK、Codex、MCP 伺服器、T3 Code)各自落在哪一層,也能理解 Browne 的預測:選 harness 這件事,很快就會跟選模型一樣稀鬆平常。
Harness 就是新版的「Tab 對空白鍵」,而開發者天生就是會在意
Browne 的核心論點是:在真正重要的事情裡,harness 的選擇已經排到最底層,跟縮排風格差不多,為它爭得面紅耳赤根本是力氣用錯地方。他開場引用了「一個叫 Theo 的人」的推文,把 harness 偏好比作 Tab 對空白鍵,接著才揭曉作者就是自己。他表明目標是讓這支影片成為他在這個題目上的最後一支。
他的論證建立在一套「開發者在乎什麼」的層級上,由最不重要排到最重要:Tab 對空白鍵、函式定義慣例與基礎演算法、框架、語言、應用架構、實際做事的工程師,最後是公司賣的產品。他坦承這個排序會惹毛資工基本教義派——他把演算法排在框架和語言之下——並預告推論會在後面補上。
他描述的機制是抽象層隨時間不斷往上移。工程師以前對每個目標處理器的指令集斤斤計較;C 語言問世後,一般開發者就不必再管 CPU 上跑的是哪些指令。格式化工具和 linter 終結了格式之戰。Tab 補完、乃至後來的 AI,則侵蝕了背演算法的必要——Browne 說他三四年前玩 Advent of Code 成績不錯,靠的就是講出演演算法名稱然後按 Tab。他如此詮釋開發者為何抗拒這種變化:
「工程師天生就會去在意那些他們根本不該在意的事。」
他把這種傾向歸因於成長背景,反問觀眾有多少人小時候被父母說過「整天玩電腦,以後在現實世界裡一點用也沒有」,並指出臺下沒有一個人因此停下來。
Harness 之上的每一層都在鬆動,框架和語言也不例外
Browne 沿著自己的層級往上走,主張每一層都在失去掌控力。他說 Next.js 已經失去開發者社群的關注:最近幾次發行在 Twitter 上的流量還不如他隨手發的 T3 Code 貼文,而今年 Next.js 任何一次發行所獲得的最高關注,來自他自己那則引用推文,內容只是點出「根本沒發生什麼事」。他提到自己的頻道多年來就是靠當 Next.js 的「頭號護航者」建立起來的,而這個轉變在無人察覺的情況下發生了。
他認為語言如今「就是個實作細節……像規格表上的一粒灰塵」。他舉例說有人把 TypeScript 程式碼改寫成 Rust,也有人把 TypeScript 本身改寫成 Rust,並表示語言可以「在一個迴圈裡、花不了多少時間」就換掉。
架構是下一個承受壓力的層。他說模型還沒達到他的標準,但已經聽得懂架構問題,也能在好設計裡挑出漏洞。他舉了個親身例子:發現一些不該發生的故障後,他開了 Claude,讓它在自己的後端架起告警、監控與追蹤,找出故障發生的位置、時間與區域,產出一份報告,他轉給了 Cloudflare。據他所述,Cloudflare 的技術長向他道謝並要求更多資訊,因為公司先前完全不知道有這些問題。他的結論一如既往地直白:
「如果你還覺得這些東西沒在變,我很遺憾,你三個月內就會丟飯碗。接受現實,不然就淘汰。」
Harness 是廚房;沒有 harness 的 LLM 只能描述這頓飯
本集的定義核心:LLM 只能吃文字、吐文字。其他所有歸功於 AI 的事——駭進系統、重建軟體、重塑經濟——全都來自 harness。Browne 用類比而非圖解來說明,他自嘲那張圖畫得很糟,什麼也沒表達。
一個廚師待在掛著「廚房」牌子的房間裡,手上卻沒有任何器具,選單再厲害也煮不出菜。一個程式設計師坐在螢幕前卻沒有鍵盤,連陣列都排不了序。手再萬能,沒有東西可握也是白搭。同理,「LLM 用文字能做的只有比劃」——等同於手語——直到它有了工具、有了能讓文字轉化為行動的系統。
從機制上說,harness 告訴模型它有一套特殊語法:你這樣回,我就幫你讀檔、改檔、推上 GitHub、執行指令、存取記憶體,或花錢呼叫 API。模型吐出語法,harness 負責執行。
接著他帶觀眾玩分類遊戲,把產品歸類為介面或 harness:
| 產品 | 分類 | Browne 的理由 |
|---|---|---|
| Twitch、YouTube | 介面 | 沒什麼好爭議 |
| Claude Agent SDK | Harness | 賦予 Claude 工具、代理迴圈與上下文管理能力,讓它能讀檔、執行指令、編輯程式碼 |
| Claude Code(桌面應用程式) | 介面,內含 harness | 應用程式本身是介面;內含的 harness 是 Agent SDK |
| Claude Code CLI | 介面 | Anthropic 自家檔案稱它是「為日常互動使用打造的終端機介面」 |
| T3 Code | 不是 harness,是介面 | 節目後段說明 |
| Claude Code 的 TypeScript 外掛 | 兩者皆非,是外掛 | 加入跳至定義、尋找參照等工具 |
| Kua | 兩者皆非,是一組工具 | 開源的電腦操作控制系統,加入截圖、點選、輸入等工具;即將進到 T3 Code |
他把 Claude Code 的拆分建立在 Anthropic 的檔案上:Agent SDK 用來把 Claude Code 的代理嵌入你自己的 Python 或 TypeScript 應用程式,CLI 則建議用於互動式開發。令人混淆的是 Claude Code 的執行檔本體——那個執行檔是 harness,SDK 讓它更好用,CLI 則是介面。
工具層與資料層是不同層次,而 T3 Code 落在後者
Browne 把整個堆疊拆成工具層——harness 暴露給模型的東西——與資料層,後者他定義為「讓代理能觸及 harness 之外事物的介面」。他的類比是:工具是你放進廚房裡的東西;MCP 伺服器則是留在廚房裡的一本食譜,模型讀不讀隨它。
多數 harness 都內建工具。Pi 除了 bash 幾乎什麼都沒有;Claude Code 和 Agent SDK 則有 spawn-subagent、read-file、edit-file、read-skill、create-artifact、bash 等一整套。工具是 harness 專屬的:寫一個工具,就等於交付一段在 harness 內執行的程式碼,不論是 TypeScript、JavaScript、Python、bash 指令碼,或是一支打外部 API 的輕薄執行檔。
MCP 伺服器是繫結,不是程式碼。T3 Code 的 MCP 伺服器理論上可以為每個 harness 各寫一套自訂工具,但把它放在 MCP 層,所有程式碼都留在 T3 Code 裡,harness 只需把指令交給 T3 Code 執行,自己不必執行程式碼。實際好處是:用每月 20、100 或 200 美元的訂閱裝好 Claude Code,再裝上 T3 Code,Claude Code 照常運作,所有 skill 和外掛原封不動——外加 T3 Code 的 MCP,可以另開一條 Codex 執行緒、在 Anti-Gravity 或 Grok Build 上跑子代理、跨 harness 搜尋 T3 Code 的歷史紀錄,還能在執行緒之間傳訊息。
架構上的理由才是關鍵:這些能力若長在 harness 裡,就會被卡在那一層。正因為它們位在 harness 之上,一個 harness 才能實質上操控另一個——T3 Code 扮演的正是居中傳遞訊息的仲介。
T3 Code 是 ADE,不是 harness,使用者卻老是搞混
Browne 把代理定義為 harness 加 LLM 的組合——模型,加上讓它能完成有範圍或無範圍任務的工具、上下文與系統提示。T3 Code 不屬於其中任何一層。它是他所謂的代理式開發環境(agentic development environment,ADE),類比於 IDE:這是你實際操作的介面,讓你看見正在發生什麼事、能遠端操控、管理環境、跨機器更新 harness。
他遇到的混淆很具體,而且一再發生。使用者從 Claude Code 換到 T3 Code,加上 Codex,發現自己的 skill 不見了,就傳訊息問他為什麼。他的回答是:你把 skill 加在 Claude Code 上,不是加在 Codex 上。在他們的心智模型裡,他們換掉了整個盒子——模型、harness、介面全換——但實際上只換了介面。他的廚房類比這時變成美食街:T3 Code 不是廚房,而是你挑選要吃哪家廚房的地方;跑去熊貓快餐點墨西哥捲餅,只會讓所有人一頭霧水。
他把這種混淆看成好事。就像你可以換掉模型字串或 API 端點,你也應該能一鍵換 harness——這很重要,因為原本深耕 Codex 的開發者,在 Opus 5.5 推出後轉去 Claude Code,一切得從頭學。T3 Code 讓他們能在 Claude Code 和 Codex 之間切換。
他也主張 harness 和模型正在收斂。以前模型是帶著工具呼叫能力訓練出來的,harness 再繞著它調整;現在模型直接拿 harness 的資料訓練,所以 Claude 模型在 Claude Code 裡表現更好,OpenAI 模型在 Codex 裡理應也更好——不過他說 Codex 的系統提示生態「簡直一場鬧劇」,所以並未如此。如果 OpenAI 追上來了,他預測 Codex 對 OpenAI 模型的加成,會遠勝 Claude Code 對它們的加成。
Harness 之戰只是 3–5% 的差距,而 Browne 選擇不參戰
Browne 承認自己不久前也是過度投入這場爭論的人之一。他拍過一支長片,詳細解釋為什麼你該用 Claude Code 來跑你的 Codex 訂閱,而不是用 Codex 本身,而且那套設定他現在還留著——但他說差距大約只有 3–5%,任何更大的落差都是 LLM 層的缺陷,遲早會被修掉。
對於那些催他去試某個跑分贏過 Claude Code 的 harness 的訊息,他不以為然:恭喜你用上一代模型、或用在 Claude Code 上沒訓練過的開放權重模型,拿下 3% 的勝利;也恭喜你花比我的訂閱更多的錢,換到更少的 Token、完成更少的工作。
他堅稱自己對「harness 不重要」這個結論沒有任何偏見——如果 harness 真的重要,他大可以自己做一個好的,靠這個贏得使用者。但他選了更難的路。OpenCode 比 T3 Code 好做得多,正因為它不必遷就每個 harness 各自的怪癖;T3 Code 裡那套跨 harness 管理子代理的程式碼,他說「爛透了」,但這就是讓 harness 對使用者成為實作細節所付的代價。
工程師會緊抓著自己入行時當紅的那一層
Browne 對開發者為何抗拒層級更迭的解釋是世代性的——按職涯而非年齡劃分。音樂品味在中學定型後就一路不變;工程師則會依附自己入行時最令人興奮的那一層,並且對「已經不酷的那一層的上一層」格外死忠。
他自己的路徑是:入行時語言之戰正在收尾、框架之戰正要開打。他的 YouTube 頻道起飛時,主題是 Next.js 對 SvelteKit 對 SolidJS 對 Nuxt——大約就在這集節目的兩年前。他說自己喜歡這種更迭,部分歸因於 ADHD,也說自己對轉向 AI 早有準備,因為網頁開發本來就一直在變。他描述自己從在 Twitch 和 AWS 用 Python、Ruby、Elixir 做後端,轉到前端的 TypeScript 與函式式程式設計。
最近一段對話正好說明這種轉變有多快。他跟 Claude Code 的創作者 Boris 聊天——Boris 是 Meta 時期 React 團隊的原始成員,跟 TypeScript 原始團隊的許多人交情匪淺——Browne 發現 Boris 知道他是誰,卻完全不知道他曾是網頁開發領域的創作者。兩人有許多共同朋友,包括 Boris 在 Meta 面試並錄用過的人。Browne 的解讀是:現在他們兩個都不以網頁開發為人所知了。
滑板那段插曲承載了整集的情感論證。Browne 是「goofy」站姿(右腳在前),卻練成了反向站姿(switch stance)的招式——雷射翻(laser flip)和反向卡斯伯翻(switch Casper flip)——因為滑板這項運動鼓勵你用兩種方式做同一件事;不像籃球,用雙手投籃只會被笑。他提到田徑跨欄的左腳起跳/右腳起跳大約各半,不像慣用手是六比一;而「goofy」這個詞,據說源自一段高飛(Goofy)右腳在前衝浪的影片。他從中得到的啟示是:他學會了愛上做那些在外人看來毫無道理的事,而一個招式你練得越精,要改練反向版本就越難。
「如果我的代理在寫我的程式碼,我 TypeScript 再強也沒用。如果 React 成了所有人都在用的新框架,我 Angular 再強也沒用。」
他用同一副眼鏡看 TypeScript 的轉換期。身為沒有 JavaScript 包袱的後端開發者,他立刻擁抱 TypeScript,卻對那些拒絕轉換的 JavaScript 老手感到不耐,有些人至今還在說 TypeScript 浪費時間和腦力。他說多數開發者一生頂多經歷一次這種轉換。他的可證偽預測是:今天所有用 Vim 的人,至少一半五年後還在用 Vim,其中大多數人將不再有軟體業的工作;而轉換的那一半會賺明顯更多的錢——不是因為 Vim 不好,而是因為對那一層在意到這種程度的人,已經被它錨住了。
他把這個論點延伸到模型死忠派:除了 Codex 模型什麼都不用、或除了 Claude 模型什麼都不用,讓你「跟那些 Vim 老骨頭一樣糟」。他說 Claude 現在很強,但隨時可能翻盤——說不定這支影片上線時就已經變了。
支援這套論點最有力的證據,來自 Effect 的創作者
Browne 承認自己看錯了一類人。他原以為 Effect 團隊——那些把 TypeScript 型別系統摸透到能在語言裡再造一套語言的人——會是那種把自己那一層打磨到天荒地老、絕不離開的人。啟發這集節目的推文,正出自 Effect 創作者 Michael 之手:「自從開始用 T3 Code,我就不再在意用的是哪個 harness 了。我其實恨不得把它們全部扔掉。」
Browne 說他也有同感,只是從沒講得這麼乾脆。他預期 ADE 這個類別會走上 IDE 的老路——從熱門話題變成隱形存在——甚至懷疑人們最後就只是在 Slack 裡下提示。但眼下他非常想要一個好的 ADE,因為從去年十二月起他就一直很挫折:當時他見識到 Google 用 Anti-Gravity 在做什麼,覺得一小部分不錯,其餘全是垃圾。他於是做了 T3 Code,一個免費、開源、可自行客製、他能自己動手修的工具,並且明講他從來就不想造 harness——他做過的假 harness 純粹是為了跑基準測試。
節目最後,他請觀眾把這支影片、或 t3.gg 上那篇〈什麼是 harness〉的文章,轉給任何堅稱 T3 Code 是 harness 的人。他提到整件事的起點,是一位搞不清楚 harness 是什麼的 Next.js 基金會成員,想拿「你做了個 harness」來酸他。他警告,如果他又得再談一次 harness,那一定是有人搞砸了什麼;而如果他哪天拍了一支 Anti-Gravity 的影片,那也不代表 Google 做了什麼好事。
未解的張力在於:Browne 的產品,恰恰依賴於他說不該在意的那份複雜度。T3 Code 的價值來自吸收各 harness 之間的差異,讓使用者永遠看不到它們——這意味著 harness 的碎片化,既是他希望消失的問題,也是他這項工具存在的理由。如果各家實驗室真如他所預測,把 harness 變得隱形,那麼 ADE 這一層就會成為下一個不再重要的東西,而他自己也這麼說。真正值得追蹤的,是他關於模型與 harness 耦合的具體預測:如果 OpenAI 補上能力差距,Codex 對 OpenAI 模型的加成理應明顯優於 Claude Code,而目前助長這場爭論的 3–5% harness 差距,也該徹底消失。