怎麼把 coding agent 從「要盯著看」養成「敢自動合併」——verification、skill 與硬約束架構

文字解析 · 1 支影片 · 產生於 2026-10-01 00:54

🎧 語音解析📝 筆記✍️ 練習

🎧 語音解析 26m02s · TTS 講解與作者原聲交錯;點章節可跳。
邊聽邊看逐句講稿,點任一句從那裡開始
章節(20)

1. Outline

  1. 起點 · Lauren Tan grokbot workshop 中文字幕
    Cursor 工程師 Lauren Tan 以「信任曲線」串起一條完整路徑:先用 verification 讓 agent 能自己驗證,再把觀察到的失敗模式寫成 skill 並用 eval 維護,最後把工程標準硬化進架構與 CI,直到 agent 可以自動合併 PR。

2. YouTuber 的思維推導

Lauren Tan grokbot workshop 中文字幕

Casey · 59m41s · 字幕 en · vision=on (使用者指定 vision=true;講者全程分享螢幕,手繪信任曲線、貢獻量圖表、skill 檔案、feature map、Benny 回報畫面與分層防線圖都是「看了才懂」的內容。) · YouTube

預估 vs 實際耗時
階段預估實際
fetch 6s 2s
segment 2m29s 7m00s
shot 1m14s 7s
analyze 18m00s 13m00s
render 5s –

Lauren Tan 的推導從一個她親身經歷過的落差出發:她同時做過工程經理與個人貢獻者,發現「管人」和「管 agent」需要的其實是同一個變數——信任。她先把信任畫成一條曲線(縱軸 trust、橫軸能同時跑幾個 agent),指出曲線最陡的那一段(從 1 個到 10–20 個)才是真正的關卡,並用自己五個月內從「幾乎沒產出」到「上個月合併一千個 PR」的貢獻圖佐證這條路走得通。接著她拆出爬坡的三個答案,順序是有依賴關係的:第一是 verification——讓 agent 自己把程式跑起來、抓 trace、操作 UI,因為沒有它,你自己就是那個 verifier,也就是無法平行化的瓶頸;第二是把觀察到的每一種失敗模式寫成 skill(她的 P-Stack 就是這樣一個一個長出來的),並用 eval 當作 skill 的單元測試,讓 skill 的品質可以被量測、被爬山優化;第三是把「人要求 agent 遵守的東西」從人的腦袋搬進程式庫本身——因為 skill、rules、style guide 都是軟的,agent 會忘,只有架構與 CI 是硬的。

這第三點又反推出一個和直覺相反的結論:有大量護欄的 brownfield 老專案其實處境不錯,真正危險的是完全 vibe code 出來、沒人讀程式碼的 greenfield 原型,它會長成她口中的 organic architecture。所以她花了六百多個 PR 把 Grokbot 重構到嚴格的 Dune 架構,換到「早上醒來二十個 PR 已經自動合併而她不擔心」的狀態。最後她把整條線收攏:這一切的 ROI 不是讓她一個人變快,而是讓 PM、設計師這些非工程專家也能安全地送出合格的 PR——嚴格的約束不是刁難,而是把貢獻的門檻從「懂這個程式庫」降到「照著唯一那條最短路徑走」。

推理鏈:每段留給下一段的線索

每一列是一段,箭頭後的字是這段留給下一段的線索。點段落標題跳到該段。

  1. 講者背景:從 Meta React 到 Cursor → 類比的兩端(管人/管 agent)已經擺好,但還沒說這個類比要用來解決什麼問題。下一段要先把問題本身指名道姓地講出來。
  2. 核心問題:你怎麼信任 agent → 信任被立為主軸了,但目前還只是一種感受,沒辦法回答「我現在在哪、下一步要往哪走」。下一段要把它畫成一條可以定位自己的曲線。
  3. 信任曲線:從盯著看到自動合併 → 這條曲線目前完全是她的主觀感受,聽眾沒有理由相信「爬上去真的會有產出」。下一段要拿客觀數字來對照這條曲線。
  4. 產出曲線佐證這條路走得通 → 她把「量大不等於品質好」變成公開待答的問題,並暗示答案是「只要 agent 設定得好」。下一段要給出這個設定裡最重要的那一項。
  5. 第一項技能:verification → verification 目前只被定義成一種「能力」,還沒說沒有它會慘到什麼程度、以及實際上怎麼做出一個。下一段用她自己的慘痛經驗把這兩件事一起補上。
  6. control glass:人不該是驗證瓶頸 → agent 現在會操作應用程式了,但它其實不知道這個應用程式裡有哪些功能、怎麼走到它們。下一段補上這塊缺口。
  7. feature map:教 agent 怎麼走到功能 → feature map 是從一個具體失敗長出來的補丁。下一段要把「觀察失敗 → 寫成 skill」這個動作本身講成一條通則。
  8. P-Stack 是觀察失敗模式長出來的 → skill 可以一直長出來,但沒有人保證它真的有效,產品一變它也會過期。下一段回答維護與品質量測的問題。
  9. 用 eval 當 skill 的單元測試 → eval 能判斷 skill 有沒有效,但它不會告訴你該做哪個 skill。下一段講那個更難、也更靠人的部分。
  10. 當後座駕駛,再讓 eval 爬山 → 她給了「工程師像主廚」的比喻,卻還沒說第一間廚房該開在哪裡。下一段回答「實際上從哪裡開始做」。
  11. 先在本地觀察,再放上雲端 → 雲端 agent 的效益展示得太誘人,正因如此下一段要先擋住「那我直接跳到那裡」的念頭。
  12. 沒有捷徑:信任要自己長出來 → 信任這條主線到這裡收完了,但她一開始畫的大綱上還有第三塊沒開:重構與重寫。下一段換題目。
  13. 真正的風險是沒有護欄的綠地專案 → 她指出無護欄的綠地專案最危險,但還沒說自己怎麼補救 Grokbot。下一段給出她付出的代價與換到的東西。
  14. 投資約束,換來不用讀程式碼 → 她說 Grokbot 的 CI「很煩、什麼都檢查」,但煩在哪還是個抽象形容。下一段把這些約束一條一條拆開來看。
  15. Dune 的硬約束:連註解都禁 → 這些約束目前還是散落的個別條文,強弱也不一樣。下一段把它們排成有層次的防線,並指出哪幾層才靠得住。
  16. 分層防線:硬的擋、軟的補 → 分層防線的前兩層靠工具硬擋,那就得問這些工具本身夠不夠嚴。下一段把問題推到技術選型,以及怎麼把 review 也變成規則。
  17. 選技術棧,也把 review 變成規則 → 把規則硬化聽起來很理想,但重構、eval 與這些檢查都要燒 token。下一段正面回答成本問題。
  18. token 成本:這筆投資的 ROI → 她說這些約束讓 PM 與設計師也能安全貢獻,但那還需要一個他們願意用的入口。下一段介紹那個入口。
  19. Grokbot:非工程師的 Cursor 時刻 → 介面讓非工程師進得來了,但他們送出的 PR 憑什麼能安全合併——最後一段要把這條線和前面的架構線接起來收束。
  20. 收尾:嚴格架構讓更多人能貢獻

3. 逐段說明

Lauren Tan grokbot workshop 中文字幕

1. 講者背景:從 Meta React 到 Cursor 0:00–2:47

Lauren Tan 自我介紹:在 Cursor 五個月,先前在 Meta React 團隊做 React compiler,更早在 Netflix 當過 tech lead 與工程經理兩年。她點出這次分享的主軸——在管理職與個人貢獻者之間來回的經驗讓她發現,管理人的技巧和「管理 agent」有大量相似之處。主持人補充今天也會聊到 Cursor 剛發表的 Grokbot。

承上 前情提要裡提到這是一場「怎麼跟 agent 一起寫程式」的實務分享。這一段用上的背景是講者的雙重身分:她既做過 React compiler 這種極深的工程工作,也在 Netflix 當過兩年 tech lead 與工程經理——後面整場所有「管理 agent」的類比,credibility 都建立在這兩段經歷上。

推理因為開場必須先讓聽眾願意接受後面那些相當激進的主張(自動合併 PR、禁註解),所以作者先把資歷攤開,而且刻意把重點壓在「在管理職與個人貢獻者之間來回」這件事上,讓「管人的技巧和管 agent 的技巧高度重疊」這個類比在第一分鐘就先站住腳,之後每一段都可以直接引用它而不必再解釋。

AI 補充她提到的 React compiler 值得補一句:那是一個會自動幫 React 元件插入 memoization 的編譯器,本質上就是「把工程師本來要手動遵守的規則,交給工具強制執行」——這正好是本場後半段所有主張的原型。理解這點,就會明白她後面說「把 review 留言變成 lint 規則」並不是臨時想到的比喻,而是她一路以來的職業直覺。另外,她說自己在 Cursor 只待了五個月,這個時間長度在後面會反覆被拿來當刻度,因為她要證明的正是「這條學習曲線可以在幾個月內爬完」。

術語:individual contributor

React Compiler

React 編譯器

自動幫 React 元件加上 memoization、免去人工 useMemo/useCallback 的編譯器。

在它出現以前,React 的效能優化靠工程師手動包 useMemo、useCallback、memo,錯一個就沒效果或造成 bug。React Compiler 把這些規則變成編譯期的自動轉換,工程師只要寫符合 React 規則的程式碼即可。它的核心精神是「不要靠人記住規則,讓工具強制執行」,這和講者後面主張的「把約束編碼進 CI 與架構」是同一套思路的兩個版本。

相關術語: individual contributor (她做這個時的角色)

出處:第 1 段「講者背景:從 Meta React 到 Cursor」

individual contributor

個人貢獻者(IC)

不帶人、直接產出技術成果的工程職涯路線,相對於管理職。

多數公司把工程職涯分成 IC 與 manager 兩條線,兩者的技能組差異很大:IC 靠自己解決問題,manager 靠設計環境、分派任務與建立信任讓別人解決問題。講者在兩條線之間來回過,所以她能同時看到「自己動手」和「透過別人完成」的差別。這場分享的核心主張就是:用 agent 寫程式時,你被迫從 IC 模式切換到 manager 模式。

相關術語: React Compiler (她 IC 期的代表作)

出處:第 1 段「講者背景:從 Meta React 到 Cursor」

留給下一段 類比的兩端(管人/管 agent)已經擺好,但還沒說這個類比要用來解決什麼問題。下一段要先把問題本身指名道姓地講出來。

2. 核心問題:你怎麼信任 agent 2:47–4:08

她把整場的主題定為「信任」。寫了很久程式的工程師對什麼是好工程有很多主見,但看到 agent 亂猜、幻覺、第一百次信誓旦旦說「我找到兇手了」卻抓錯問題,信任就流失了。沒有信任就發揮不出 agent 的價值。對應到管理:一個不信任下屬的經理,只能進入微管理模式,整天盯著別人的螢幕檢查有沒有把 bug 送上線。

承上 承接上一段留下的問題「管理類比要用來解什麼」:答案是信任。她把管理裡最基本的那個變數,直接搬過來當成人與 agent 之間的核心問題。

推理因為上一段已經把管理與 agent 並列,所以作者接著挑出管理關係裡最根本的那一維——信任——當成整場的座標軸。她的論證是雙向的:往內看,寫程式久了的人有一套自己的工程標準,看到 agent 亂猜就會扣分;往外看,一個不信任下屬的經理只剩微管理一種模式。兩邊指向同一個結論:信任不是感受問題,而是決定你能用什麼工作模式的結構性限制。

AI 補充她講的那個場景——agent 第一百次很有把握地說「我找到兇手了」但抓錯——真正的傷害不在於它答錯,而在於它答錯時的語氣和答對時一模一樣。用機器學習的話說,這是 calibration(信心校準)問題:一個會說「我不確定」的模型比一個永遠很篤定的模型好用得多,因為前者的輸出可以分流(確定的直接採用、不確定的人工看),後者則逼你每一次都得全部檢查。這一點值得特別記住,因為她後面所有的解法,本質上都是在替 agent 補上它自己給不出的那個「信心來源」:能跑起來、能驗證、有硬性的規則擋著。

agent

代理程式/智能代理

能自主使用工具、在多輪迴圈中執行任務的 LLM 應用,而不只是一問一答。

與單純的聊天機器人不同,agent 會自己決定要讀哪個檔案、跑哪個指令、要不要再試一次,因此它的錯誤會累積成一連串動作而不只是一句錯話。也正因為它自主,人才需要「信任」這個概念——你信任的不是某一次的答案,而是它整條決策鏈的品質。全場所有技巧都在回答同一個問題:怎麼讓這條決策鏈值得放手。

相關術語: hallucination (它最常見的失效)

出處:第 2 段「核心問題:你怎麼信任 agent」

hallucination

幻覺

模型產生看起來合理、語氣篤定,但事實上不成立的內容。

在寫程式的情境裡,幻覺通常長成「指認一個並不存在的成因」或「呼叫一個不存在的 API」。它之所以難處理,是因為模型不會在幻覺時降低語氣的確定性,人得自己去驗證每一句話。講者的觀察更精準:她發現 agent 斷言某段程式碼有問題時,翻 tool call 會看到它根本沒讀過那段程式碼——也就是說幻覺的根源常常是「證據蒐集不足」而不是「推理錯誤」,這也決定了解法的方向。

相關術語: agent (發生在其身上)

出處:第 2 段「核心問題:你怎麼信任 agent」

留給下一段 信任被立為主軸了,但目前還只是一種感受,沒辦法回答「我現在在哪、下一步要往哪走」。下一段要把它畫成一條可以定位自己的曲線。

3. 信任曲線:從盯著看到自動合併 4:08–6:00

她畫了一張不科學但很傳神的曲線描述自己的歷程。一年前大家還沒在用 agent 寫程式時,人只能深深待在迴圈裡,同時盯一兩個 agent、看每一行輸出、坐在旁邊一直下 prompt,沒辦法再平行下去——你連一個 agent 的輸出都不信任,怎麼可能開一百個。五個月下來她爬上了這條曲線,現在 agent 會自動合併 PR,早上起來已經有二十個 PR 落地,而且品質是好的。

手繪的「信任曲線」是整場的骨架:橫軸是信任程度、縱軸是能平行化的 agent 數量,後面每一段都在回指這張圖的某個位置
4:50 · 手繪的「信任曲線」是整場的骨架:橫軸是信任程度、縱軸是能平行化的 agent 數量,後面每一段都在回指這張圖的某個位置
承上 承接上一段把信任立為主軸:她現在要把這個抽象的變數畫成一張圖,讓人能在上面指出自己的位置。

推理因為上一段說信任決定工作模式,所以作者接著把「信任」與「模式」放到同一張圖的兩軸上,讓兩者的關係變成可以指認的位置而不是形容詞。她再用自己一年前與現在的兩個極端當錨點——一年前只能同時盯一兩個 agent、逐行看輸出;現在 agent 自動合併 PR,她早上起來直接在 main 上 review 二十個已落地的 PR——把這條曲線的起點與終點都填上具體行為。

AI 補充截圖裡這張手繪圖(tldraw)值得逐項讀:縱軸寫的是 trust,橫軸寫的是 number of agents,刻度依序是 1 → 1 to 5 → 5 to 10 → 10 to 20 → hundreds → thousands,曲線在最左邊幾乎垂直往上竄,到 10 to 20 附近開始明顯轉平。這個形狀本身就是一個論點:真正吃力的是從 1 個走到十幾個 agent 那一段——那段要換到的信任增幅最大;一旦跨過去,往 hundreds、thousands 幾乎是水平延伸,邊際成本很低。換句話說,這不是一條「投入越多就線性拿越多」的曲線,而是一道門檻。她講「不能一次跳到一百個 agent」時,指的就是這個形狀,而不是單純的謹慎建議。

術語:trust curvein the loop

trust curve

信任曲線

以信任程度為縱軸、能同時運作的 agent 數量為橫軸的一條凹向上曲線,用來定位自己現在的階段。

這是講者自製的心智模型,不是業界標準名詞,但它很好用,因為它把「我該不該放手」轉成「我現在在曲線的哪一點」。曲線先陡後平的形狀意味著門檻集中在前段:從逐行監看走到能同時跑十幾個 agent,需要的是能力建設(verification、skill、護欄),而不是膽量。整場後面所有做法,都可以看成「怎麼把自己往右推一格」。

相關術語: in the loop (曲線最左端的狀態)、auto-merge (曲線右端的狀態)

出處:第 3 段「信任曲線:從盯著看到自動合併」

in the loop

人在迴圈裡

每一步都由人親自檢視、確認、再下指令的工作模式。

在自動化領域,human-in-the-loop 原本是安全設計的褒義詞,但在這裡它是效率的天花板:只要每一步都得等人看過,吞吐量就等於人的注意力上限。講者的重點不是「人不該在迴圈裡」,而是「人不該一直在迴圈裡的同一個位置」——她後面會說在建立 skill 的初期反而要深深待在迴圈裡觀察,等 skill 成熟後才退出來。

相關術語: trust curve (位於其左端)

出處:第 3 段「信任曲線:從盯著看到自動合併」

auto-merge

自動合併

PR 通過所有檢查後不經人工按鈕就自動合併進主幹。

自動合併在傳統團隊裡也存在,但通常搭配「人已經 review 過、只是等 CI 綠燈」。講者的用法更激進:agent 開的 PR 在她沒看過的情況下就合併,她改成事後在 main 上 review。這種模式只有在「CI 檢查夠硬、架構夠制式」的前提下才不會炸掉,也因此它同時是整場的結論與整場的前提。

相關術語: trust curve (位於其右端)

出處:第 3 段「信任曲線:從盯著看到自動合併」

留給下一段 這條曲線目前完全是她的主觀感受,聽眾沒有理由相信「爬上去真的會有產出」。下一段要拿客觀數字來對照這條曲線。

4. 產出曲線佐證這條路走得通 6:00–7:26

她秀出自己在 Cursor 的貢獻量圖表,說明它幾乎和信任曲線同形:剛加入的第一個月不熟程式庫、產出很低,隨著對 agent 越來越有信心,速度一路往上,上個月合併了一千個 PR,這個月才十二號就快八百個。她主動承認大家一定會質疑這些程式碼的品質,而這正是接下來要回答的問題——只要 agent 設定得好,別人也能到差不多的水準。

貢獻量圖表是她「這套方法真的有產出」的唯一證據,也讓後面所有做法有一個可對照的量級
6:40 · 貢獻量圖表是她「這套方法真的有產出」的唯一證據,也讓後面所有做法有一個可對照的量級
承上 承接上一段留下的「這條曲線只是主觀感受」:她拿出一張和信任曲線同形的客觀數據圖來對照。

推理因為上一段的曲線缺乏外部佐證,所以作者接著把它疊到一個誰都能查的指標上——她個人的 commit/PR 產出量。論證方式是形狀比對:第一個月不熟程式庫、產出貼地,之後隨著對 agent 的信心上升,產出跟著陡升,上個月一千個 PR,這個月才十二號就快八百個。她接著主動把最尖銳的反問先講出來(這些程式碼品質如何?),把它轉成整場後半段要回答的題目。

AI 補充截圖裡是她的 GitHub 貢獻卡片:帳號 poteto、3,159 commits、排名第 6,長條圖從 Jan '22 一路排到 Jul '26,前面幾年幾乎貼著底線,只有最右邊 Jan '26 之後那幾根竄到 750 附近,她還在上面手繪了一條虛線箭頭標出轉折。這裡有一個她沒點破但很關鍵的推論方向問題:這張圖本身只證明「產出變多」,不證明「因為信任 agent 才變多」,也不證明品質。她自己顯然知道,所以立刻把「品質」拿出來當成待答問題——這是她整場論證誠實的地方,也是接下來每一段的實際任務:不是再證明量,而是證明量的背後有東西撐著。

術語:pull request

pull request

合併請求(PR)

把一組修改提出來、經檢查與 review 後合併進主分支的單位。

PR 是本場所有量化說法的計數單位(一千個 PR、六百個 PR、二十個 PR),所以它的大小定義很重要——同樣的工作可以是一個大 PR 或十個小 PR。講者後面會說她刻意鼓勵 agent 把工作拆成多個 PR,因為 PR 同時是「檢查的單位」和「回退的單位」。理解這點,才不會把她的數字單純讀成產能宣傳。

相關術語: auto-merge (作用於其上)

出處:第 4 段「產出曲線佐證這條路走得通」

留給下一段 她把「量大不等於品質好」變成公開待答的問題,並暗示答案是「只要 agent 設定得好」。下一段要給出這個設定裡最重要的那一項。

5. 第一項技能:verification 7:26–8:50

她給出爬坡的第一個答案:工具箱裡最重要的能力是 verification——讓 agent 能真的把程式跑起來,取 CPU trace、抓 heap snapshot、開 iOS 模擬器,用使用者實際接觸產品的方式去實測。這件事才真正把迴圈閉起來。它不保證 agent 寫出好程式,但至少能保證寫出正確的程式,而這是能開始信任它的一大步。

承上 承接上一段留下的問題「設定得好是指什麼」:她給出工具箱裡排第一的能力——verification。

推理因為上一段把品質變成待答題,所以作者接著直接點名她認為最關鍵的一項能力:讓 agent 能真的把程式跑起來、取 CPU trace、抓 heap snapshot、開 iOS 模擬器,用使用者實際接觸產品的方式去測。她的論證關鍵是那句限定詞——這不保證 agent 寫出「好」程式,只保證它寫出「正確」的程式。這個區分很重要,因為它把「品質」拆成兩個可以分別處理的問題,本段只負責前一半。

AI 補充「閉迴圈」這個說法值得展開:沒有 verification 時,agent 的迴圈是「改程式 → 結束」,正確與否要等人回報;有了 verification,迴圈變成「改程式 → 執行 → 觀察結果 → 再改」。差別不只是多一步,而是錯誤訊號的來源從人變成環境——環境不會累、不會不耐煩,也可以同時服務二十個 agent。這正好接回信任曲線的形狀:verification 是把橫軸從個位數推到十幾個的那個機制。另外她列的四個例子(跑程式、CPU trace、heap snapshot、iOS 模擬器)不是隨口舉的,而是涵蓋了正確性、CPU 效能、記憶體、以及使用者實際介面四個不同層次的驗證。

verification

驗證(能力)

讓 agent 自己把程式跑起來、實測並確認結果是否符合預期的能力。

這裡的 verification 不是「寫測試」那麼窄,而是「用使用者接觸產品的同一種方式去操作它」——包含開應用程式、點 UI、抓效能資料。它與單元測試的差別在於覆蓋的是端到端行為,而不是函式契約。講者把它排在所有技巧的第一位,理由是其他技巧(skill、eval、架構約束)都預設你能判斷 agent 做對了沒有,而 verification 就是那個判斷本身。沒有它,後面的每一項都沒有立足點。

相關術語: trust curve (推進其橫軸)、CPU trace (其一種手段)

出處:第 5 段「第一項技能:verification」

CPU trace

CPU 追蹤紀錄

記錄一段時間內程式各函式佔用 CPU 的時間軸資料,用來找效能瓶頸。

在瀏覽器/Electron 環境裡通常用 Chrome DevTools 的 Performance 面板錄製,產出的視覺化就是 flame graph。trace 的價值在於它是客觀證據:與其問 agent「你覺得哪裡慢」,不如給它一份 trace 讓它指出哪個函式吃掉了幀時間。講者的整個 control glass skill,某種意義上就是為了讓 agent 能自己錄 trace 而存在。

相關術語: verification (屬於其手段)、heap snapshot (同類但測記憶體)

出處:第 5 段「第一項技能:verification」

heap snapshot

堆積快照

把某一瞬間記憶體中所有物件與參照關係存下來的快照,用來找記憶體洩漏。

與 CPU trace 對照著看最清楚:trace 回答「時間花在哪」,snapshot 回答「記憶體被誰佔住、為什麼放不掉」。典型用法是在兩個時間點各拍一張、比對差異,看哪些物件該被回收卻還被某條參照鏈拉著。在長時間執行的桌面應用程式(例如 Electron 做的編輯器)裡,記憶體洩漏比在一般網頁裡嚴重得多,因為使用者不會每十分鐘重新整理。

相關術語: CPU trace (同類但測時間)

出處:第 5 段「第一項技能:verification」

留給下一段 verification 目前只被定義成一種「能力」,還沒說沒有它會慘到什麼程度、以及實際上怎麼做出一個。下一段用她自己的慘痛經驗把這兩件事一起補上。

6. control glass:人不該是驗證瓶頸 8:50–12:04

她用自己的親身經驗說明沒有 verification 有多痛。剛進 Cursor 第一週就被調去救 agent window(內部代號 glass)的效能,她自己開 Chrome DevTools 抓 trace、截圖丟給 agent,agent 每次都很有把握地指認一個原因,改下去卻不是。她點破關鍵:沒有 verification skill 時,你自己就是那個 verifier,也就是瓶頸——貼截圖、貼 console error、來回解釋,完全沒辦法平行化。於是她做了第一個 skill:control glass,教 agent 用 Chrome DevTools protocol(或 Apple 的模擬器工具)自己操作應用程式、自己抓 trace。

螢幕上打開的 control glass skill 檔案,是「skill 就只是一份 markdown」這個主張的具體樣貌
9:15 · 螢幕上打開的 control glass skill 檔案,是「skill 就只是一份 markdown」這個主張的具體樣貌
承上 承接上一段留下的「沒有 verification 會怎樣、要怎麼做一個」:她用剛進 Cursor 第一週的親身經驗回答前半,用第一個 skill 回答後半。

推理因為上一段把 verification 講成抽象能力,所以作者接著把它的反面演一遍:她被丟去救 agent window(內部代號 glass)的效能,自己開 Chrome DevTools 錄 trace、截圖丟給 agent,agent 每次都很篤定地指認一個原因,改下去卻不對。她從這個經驗抽出一句精準的診斷——沒有 verification skill 時,你自己就是 verifier,也就是瓶頸——然後順著這個診斷做出 control glass,把「操作應用程式、抓 trace」這件事交還給 agent。

AI 補充「你就是 verifier」這句話要跟上一段的閉迴圈連起來讀才完整:貼截圖、貼 console error、來回解釋,每一次往返都要消耗人的一次注意力,於是 agent 的數量上限就等於人的注意力除以每次往返的成本——這就是信任曲線左端為什麼那麼陡的機制層面解釋。截圖裡打開的正是這個 skill 的本體:`.cursor/skills/client/control-glass/SKILL.md`,標題寫著 Control Glass via Playwright,開頭一句話就說明用途——透過 CDP 驅動一個跑起來的 Cursor dev build,檢視 DOM、截圖、點擊、輸入、讀 accessibility tree、跑 JS、profile、節流 CPU/網路、串接 console 或網路輸出。特別值得注意的是它花了大量篇幅在講 worktree 與主 checkout 的分流(主 checkout 用 CDP port 9222,worktree 必須帶 `--worktree` 用自己的 port 與獨立 user-data-dir,否則會污染使用者本人的登入狀態),還提供一個唯讀的 `doctor` 指令回答「這個實例值不值得驅動」。也就是說,一個好用的 verification skill 大半的內容不是「怎麼操作」,而是「怎麼在多個 agent 同時跑的時候不互相干擾」——這正是平行化的前提。左邊的檔案樹也透露了規模:control-glass 只是幾十個 skill 之一,旁邊還有 autofix-ui、bisect-glass-perf-regression、check-glass-perf-regression、cursor-startup-perf 等等。

術語:flame graph

skill

技能檔

一份用 markdown 寫成、教 agent 在特定情境下該怎麼做事的指令檔。

講者反覆強調 skill 「就只是 markdown」,這不是自謙而是重點:它的門檻低到任何人都能寫一份,價值來自內容而非機制。一份好的 skill 通常包含前提條件、可用的指令、常見陷阱與慣例,等於把資深工程師腦中的隱性知識外顯出來。它與程式碼的差別在於它是軟性的——agent 可能不照做,這個弱點會在後面談分層防線時變成關鍵論點。

相關術語: verification (常見的一種)、Chrome DevTools Protocol (其驅動手段)

出處:第 6 段「control glass:人不該是驗證瓶頸」

Chrome DevTools Protocol

Chrome 開發者工具協定(CDP)

用程式遠端控制 Chromium 瀏覽器與擷取其偵錯資料的協定。

DevTools 這個 UI 本身其實就是 CDP 的一個客戶端,所以只要接上這個協定,程式能做的事和你手動打開 DevTools 一樣多:點擊元素、讀 DOM、錄效能 trace、攔截網路。Electron 應用程式(例如 Cursor)底層是 Chromium,因此同一套協定可以直接拿來驅動桌面應用。這就是為什麼 control glass 能把「開應用程式、操作它、錄 trace」整包交給 agent,而不需要任何額外的自動化平台。

相關術語: skill (被其使用)

出處:第 6 段「control glass:人不該是驗證瓶頸」

flame graph

火焰圖

把 CPU trace 的呼叫堆疊畫成層層堆疊長條的視覺化,寬度代表耗時。

橫軸是時間、縱軸是呼叫深度,越寬的長條代表越吃時間,因此找瓶頸就是找最寬的那一塊。它的難處在於需要對程式庫夠熟才知道那個很寬的函式是誰、為什麼被呼叫——講者第一週看不懂自己的 flame graph,正是因為程式庫對她全新。這個細節解釋了為什麼光把截圖丟給 agent 沒用:雙方都缺的不是圖,而是把圖對應回程式碼的脈絡。

相關術語: CPU trace (其視覺化形式)

出處:第 6 段「control glass:人不該是驗證瓶頸」

worktree

工作樹

Git 讓同一個 repo 同時 checkout 多個分支到不同目錄的機制。

傳統上一個 repo 只能有一份工作目錄,切分支就得先收好手邊的改動;worktree 讓你在不同目錄同時開好幾個分支,彼此獨立。在多 agent 的情境裡它幾乎是必要條件——每個 agent 在自己的 worktree 裡改程式、跑自己的 dev build,才不會互相蓋掉。截圖裡的 skill 花很多篇幅講 worktree 要用獨立的 CDP port 與 user-data-dir,就是這個道理:隔離不只在檔案層,也要在執行期。

相關術語: skill (其隔離前提)

出處:第 6 段「control glass:人不該是驗證瓶頸」

留給下一段 agent 現在會操作應用程式了,但它其實不知道這個應用程式裡有哪些功能、怎麼走到它們。下一段補上這塊缺口。

7. feature map:教 agent 怎麼走到功能 12:04–15:23

會操作還不夠。skill 做好之後 agent 能跑起 agent window 了,卻完全不知道它是什麼——有人說「左側欄很卡」「PR 分頁壞了」,agent 只能瞎點、到處 grep,體驗糟到她得在螢幕上畫箭頭。解法是 skill 裡附的 feature map:一份從使用者視角描述所有功能怎麼抵達的檔案,含子功能、鍵盤快捷鍵,甚至 CDP 選取元素用的 DOM 屬性。有了它,連「一張截圖加三個問號」這種極低品質的回報,agent 都能對應到實際功能。她的 P-Stack 外掛裡有 create verification skill,會掃過程式碼幫你建出初版 feature map,還有 maintain verification skill 負責維持更新。

feature map 檔案本身:看到它的結構才理解「把導航知識寫成文件」是什麼意思
12:20 · feature map 檔案本身:看到它的結構才理解「把導航知識寫成文件」是什麼意思
sidebar 那一條的展開內容(子功能、快捷鍵、DOM 選取屬性),示範一個條目要寫到多細才有用
15:00 · sidebar 那一條的展開內容(子功能、快捷鍵、DOM 選取屬性),示範一個條目要寫到多細才有用
承上 承接上一段留下的缺口「會操作但不知道有什麼可操作」:這一段給出補法——一份從使用者視角描述所有功能怎麼抵達的文件。

推理因為上一段做出的 skill 只解決了「怎麼驅動」,所以作者接著處理暴露出來的下一個失敗:有人回報「左側欄很卡」「PR 分頁壞了」,agent 只能瞎點、到處 grep,糟到她得在螢幕上畫箭頭指路。她的解法不是把 skill 寫得更聰明,而是補一份知識——feature map,把導航知識從她的腦袋搬進檔案。驗收標準也很具體:連「一張截圖加三個問號」這種極低品質的回報,agent 都要能對應到實際功能。

AI 補充截圖裡的 feature map 比口頭描述具體得多,值得逐項看。它不是一個檔案而是一個目錄:`.cursor/skills/client/control-glass/references/features/`,一個功能一個 md(sidebar.md、notifications.md、pull-requests.md、terminal.md、settings.md、plan.md、named-agents.md、subscriptions.md、cdp-cookbook.md…),另外有一份 `cross-cutting-flows.md` 專門放跨功能的流程。README 開頭把定位講得很死:這些檔案教的是「怎麼使用一個功能」,不是「它怎麼被實作」,實作細節要去讀程式碼,因為程式碼變得比文件快——這一句其實是文件能長期存活的關鍵設計,把最容易過期的部分排除在外。它還定義了 baseline preconditions(dev build 要跑著、要已登入、sidebar 要可見、不能有 modal 開著)與 driving conventions(選取元素優先用 ARIA label 與 `data-component`、`data-action-id`、`data-message-*`、`data-tool-*`)。第二張截圖是 sidebar.md 的「How to get to it (user POV)」小節,密度高得驚人:Cmd/Ctrl+B 開關側欄、拖曳右緣調寬並可雙擊還原、隱藏後 hover 會出現 hovercard 預覽、Cmd/Ctrl/Alt+F 開自訂選單、Grouping 與 Ordering 的所有選項、Show/Filters 能切換哪些 metadata、以及 `glass_sidebar_archive_toggle` 這個 feature flag 開啟時行為會不同。看到這個密度才會理解她說的「教 agent 導航」是什麼等級的工作量——也才會理解為什麼她需要 create verification skill 自動產初版、maintain verification skill 持續更新,人手寫不可能跟得上。

feature map

功能地圖

從使用者視角描述每個功能是什麼、怎麼抵達、怎麼用程式驅動的一組文件。

它刻意只寫「怎麼用」不寫「怎麼實作」,因為實作變得快、使用方式相對穩定,這讓文件的維護成本可控。內容通常包含進入路徑、鍵盤快捷鍵、子功能、以及自動化時用來選取元素的屬性,等於把產品知識與自動化知識合成一份。它補的是 verification skill 的盲點:skill 教 agent 怎麼按按鈕,feature map 告訴它按鈕在哪、叫什麼。沒有它,agent 面對模糊的使用者回報只能亂試。

相關術語: skill (附屬於其中)、ARIA label (其選取依據)

出處:第 7 段「feature map:教 agent 怎麼走到功能」

ARIA label

無障礙標籤

掛在 DOM 元素上、供輔助技術辨識元素用途的無障礙屬性。

它本來是為了螢幕閱讀器而存在,但因為它描述的是元素的「語意用途」而不是版面位置或樣式,所以比 CSS class 穩定得多——改版換樣式時 class 常常整批變動,ARIA label 通常不動。這讓它成為自動化選取元素的首選,也是截圖裡 driving conventions 第一條就寫它的原因。順帶一個推論:把無障礙做好,等於順手把應用程式變得對 agent 友善。

相關術語: feature map (被其記錄)

出處:第 7 段「feature map:教 agent 怎麼走到功能」

留給下一段 feature map 是從一個具體失敗長出來的補丁。下一段要把「觀察失敗 → 寫成 skill」這個動作本身講成一條通則。

8. P-Stack 是觀察失敗模式長出來的 15:23–19:09

P-Stack(potato stack,玩笑地致敬 Y Combinator CEO Garry Tan 的 G-Stack)不是設計出來的,是長出來的:從 control glass 開始,每次觀察到 agent 的一種失敗模式,就把它變成一個 skill。她舉的例子是 agent 被問「這功能為什麼壞了」時信誓旦旦地斷言原因,但看 tool call 會發現它根本沒讀那段程式碼——於是就有了「不要猜、去把程式碼讀出來、多用 subagent」這樣的 skill。她再次用管理類比:面對一個程式能力很強但零商業脈絡、五秒前才報到的新人,你教他的方式就是寫下來;skill 不過是 markdown,但足以把 agent 拉到更好的位置(有人稱為拉到不同的 latent space,白話說就是餵高品質的 token,讓它去 pattern match 更聰明的那一層)。

承上 承接上一段留下的「把單一補丁講成通則」:她用 P-Stack 的來歷說明這套工具箱不是設計出來的,是一次一個失敗模式長出來的。

推理因為上一段的 feature map 是針對一種失敗的針對性補丁,所以作者接著把這個動作抽象化成方法:每觀察到一種失敗模式,就把它變成一個 skill。她舉的第二個例子和第一個形成對照——agent 被問「這功能為什麼壞了」時信誓旦旦地斷言原因,但翻 tool call 會發現它根本沒讀那段程式碼,於是就有了「不要猜、去把程式碼讀出來、多用 subagent」這樣的 skill。接著她再度動用開場那個管理類比收束:面對一個程式能力很強但零商業脈絡、五秒前才報到的新人,你教他的方式就是寫下來。

AI 補充這裡有一個推理上的關鍵細節值得單獨拉出來:她判斷 agent 在幻覺的依據不是「答案錯了」,而是「tool call 顯示它沒讀過相關程式碼」。這是一個過程指標而非結果指標,而過程指標的好處是可以在錯誤造成後果之前就發現——這也解釋了她後面為什麼堅持要打開所有 tool call、讀 agent 的思考區塊。至於 P-Stack 這個名字:P 是 potato(她的 Twitter 帳號 poteto),是在調侃 Y Combinator 執行長 Garry Tan 的 G-Stack,兩人同姓但沒有親戚關係。她提到的 latent space 說法則是社群裡的比喻性用語,實際機制比較樸素:模型是在既有的上下文條件下預測下一個 token,餵進高品質的內容會讓後續輸出的分佈往「寫這種內容的人會接著寫什麼」偏移——沒有真的移動到另一個空間,但實務效果確實像是換了一個更強的模式在對話。

P-Stack

P 堆疊(potato stack)

講者把自己一連串 skill 打包而成的 Cursor 外掛,名字是在玩 G-Stack 的梗。

它不是先設計好架構再實作的產品,而是從 control glass 一路累積出來的 skill 集合,內容反映的是她個人的工程標準。她明確表示不鼓勵盲目採用,比較好的用法是 fork 一份改成自己的——因為每個人在意的工程標準不同。這個態度和她整場的主張一致:重點不是用誰的 skill,而是把你自己在意的東西編碼下來並且能驗證。

相關術語: skill (由其組成)

出處:第 8 段「P-Stack 是觀察失敗模式長出來的」

latent space

潛在空間

模型內部表示概念的高維向量空間;社群借它來形容「把 agent 帶到更聰明的模式」。

嚴格說來,餵高品質的 prompt 並沒有把模型移動到另一個空間,改變的是條件機率分佈——模型在既有上下文下預測下一個 token,上下文的品質會決定它模仿誰。講者自己也說這是「一種花俏的說法」。之所以值得記住這個比喻,是因為它捕捉到一個真實現象:同一個模型在不同 prompt 品質下的表現差距,可以大到像是換了個模型。這正是 skill 這種純文字檔能產生效果的原因。

相關術語: skill (其效果的解釋)

出處:第 8 段「P-Stack 是觀察失敗模式長出來的」

subagent

子代理

由主 agent 派出、帶著獨立上下文執行子任務並回報結果的 agent。

它最大的價值是上下文隔離:讓子 agent 去把整個目錄讀完、只回報結論,主 agent 的上下文就不會被大量原始資料塞爆。對付「不讀程式碼就亂猜」這種失敗模式特別有效,因為讀程式碼很燒上下文,而 subagent 把這個成本外包出去了。它也是後面 eval 機制的基本零件——一次派出一批 subagent 各跑一次同樣的任務,才有辦法做出可比較的評分。

相關術語: agent (其分身)、hallucination (用來抑制它)

出處:第 8 段「P-Stack 是觀察失敗模式長出來的」

見仁見智 18:23
「pull the agent to a different latent space」
「把 agent 拉到不同的 latent space」是社群流行的比喻,不是機制上的描述。給高品質 prompt 並沒有讓模型換到另一個表示空間,改變的是它在既有上下文下的輸出分佈(條件機率)。講者自己也說這是「花俏的說法」,但聽者容易把它當成技術事實。
依據: 講者原話下一句即為 which is kind of like a fancy way of just saying…
留給下一段 skill 可以一直長出來,但沒有人保證它真的有效,產品一變它也會過期。下一段回答維護與品質量測的問題。

9. 用 eval 當 skill 的單元測試 19:09–22:27

主持人問這些 skill 怎麼維護。她的答案是 eval——心智模型就是「agent 的單元測試」,不需要特別框架,自己就能寫。P-Stack 的 potato mode 裡有一份 eval playbook:由主協調 agent 先訂出這個 skill 該做到什麼的評分準則,再派出一批 subagent,每個放在刻意命名得看不出是在被評測的目錄裡(agent 察覺自己被評測就會改變行為)。Cursor 支援很多模型,所以同一個 skill 可以跨模型評測,看它在你實際使用的模型矩陣上表現如何。她每次改 skill 都會跑一次。

eval playbook 在 P-Stack 裡的實際位置與內容,說明「自己寫 eval」不是抽象建議
21:10 · eval playbook 在 P-Stack 裡的實際位置與內容,說明「自己寫 eval」不是抽象建議
承上 承接上一段留下的「skill 怎麼保證有效、怎麼維護」:主持人正好問了這題,她的答案是 eval。

推理因為上一段的方法會不斷產生新的 skill,所以作者接著必須回答品質問題,而她選的心智模型是「agent 的單元測試」——這個類比一次解決兩件事:它說明 eval 該在什麼時候跑(每次改 skill 就跑),也說明它不需要什麼特殊框架(自己就能寫)。她接著描述 P-Stack 的 eval playbook 實作:主協調 agent 先訂出評分準則,再派出一批 subagent,每個放在刻意命名得看不出是在被評測的目錄裡,最後跨模型跑一輪看表現。

AI 補充「目錄要命名得讓 subagent 看不出自己在被評測」這個細節其實是整段最值得記住的一句,它承認了一件事:agent 有評測意識,察覺自己被評測時行為會變,於是量到的分數就不是它平常的表現。這是 LLM 評測領域的真問題,跟人類的霍桑效應同構。順帶補一步她跳過的推論——為什麼 eval 一定要用一批 subagent 而不是跑一次就好:模型輸出有隨機性,單次結果無法區分「skill 改好了」和「這次運氣好」,要跑一批才有分佈可看。這也回頭解釋了上一段的 subagent 為什麼是必要零件。截圖是她整場的大綱頁(tldraw 手寫),三個 bullet 剛好就是這場的骨架:verification/high quality skills that teach agents to work like real software engineers: eg pstack/refactoring-rewriting architecture to be agent friendly,旁邊分別註記 evals! 與 (greenfield vs brownfield)。看這張圖可以確認 eval 在她的結構裡是掛在第二點下面的支撐,不是獨立的第四點;畫面上那個綠色的 UH 塗鴉則是與會者在共享畫面上亂畫留下的。

eval

評測

用一組任務與評分準則量測 agent 或 prompt/skill 表現的測試。

把它想成「agent 的單元測試」很好用,但有一個關鍵差異:單元測試是決定性的(同樣輸入必定同樣輸出),eval 不是,所以它需要多次取樣並看分佈,而不是看單次通過與否。也因此 eval 通常會產生分數而不是紅綠燈,這讓它可以被「爬山」優化。講者的用法很務實:不追求學術等級的嚴謹,只要能回答「我改的這版 skill 有沒有比上一版好」。

相關術語: skill (測試其對象)、rubric (其評分依據)、subagent (其執行單位)

出處:第 9 段「用 eval 當 skill 的單元測試」

rubric

評分準則

把「做得好」拆成可逐項打分的具體條目清單。

沒有 rubric 的評分只能得到「感覺還行」,有 rubric 才能指出是哪一項退步了,也才能讓不同的評分者(包含另一個模型)給出一致的分數。講者讓主協調 agent 先產出 rubric 再開始評測,等於逼它先把「這個 skill 到底該做到什麼」寫死,避免評測目標隨結果漂移。這個順序本身就是防作弊設計。

相關術語: eval (其組成部分)

出處:第 9 段「用 eval 當 skill 的單元測試」

evaluation awareness

評測意識

模型察覺自己正在被評測,因而改變行為的現象。

線索可能來自目錄名稱、任務描述的語氣、或明顯是測試用的資料,模型一旦察覺就可能表現得比平常更謹慎,讓評測結果偏樂觀。這使得 eval 的環境設計變得跟評分標準一樣重要——講者的做法是把工作目錄命名得毫無評測氣味。它與人類研究裡的霍桑效應是同一類問題:觀察行為本身會改變被觀察者。

相關術語: eval (威脅其效度)

出處:第 9 段「用 eval 當 skill 的單元測試」

留給下一段 eval 能判斷 skill 有沒有效,但它不會告訴你該做哪個 skill。下一段講那個更難、也更靠人的部分。

10. 當後座駕駛,再讓 eval 爬山 22:27–25:43

她坦承維護 skill 其實很難,需要品味與觀察力:你要很擅長當「後座駕駛」,像 pair programming 時看同事寫程式會忍不住問「為什麼不這樣做」。建立自己的 skill 的初期不能只當被動觀察者,要打開所有 tool call、讀 agent 的思考區塊,才看得到它在哪裡失敗,然後為那個點做一個 skill。驗證信不信得過也是同一個迭代迴圈:eval 可以產生分數,再用另一個模型的 judge agent 交叉檢查避免偏誤,然後用 slash loop 一直跑到全部十分為止。control skill 就是這樣近乎放手地磨出來的。她順帶給出後面會再用到的比喻:現在的工程師更像餐廳主廚,不再自己煮每一道菜,而是帶著線上廚師與副主廚,工作是設計整個廚房環境、分派任務。

承上 承接上一段留下的「eval 不會告訴你該做哪個 skill」:她坦承這部分很難,靠的是品味與觀察,並給出具體的觀察方法。

推理因為上一段的 eval 只能驗證既有 skill,所以作者接著補上產生 skill 的那一半——你要很擅長當「後座駕駛」,像 pair programming 時看同事寫程式會忍不住問「為什麼不這樣做」。她給的操作方式很具體:初期不能只當被動觀察者,要打開所有 tool call、讀 agent 的思考區塊,才看得到它在哪裡失敗,然後為那個點做一個 skill。接著她把兩半接起來:有了 eval 分數就能爬山——用另一個模型的 judge agent 交叉檢查避免偏誤,再用 slash loop 一直跑到全部十分為止。

AI 補充這段的結構其實是一個完整的迭代迴圈,值得畫出來:人工觀察 tool call 找出失敗模式 → 寫成 skill → 用 eval 量分 → 讓模型自己爬山改到滿分 → 回到觀察。人只出現在第一步和最後一步,中間可以全自動,這就是她說 control skill「近乎放手」磨出來的意思。judge agent 換一個模型也不是儀式:同一個模型既寫又評,它偏好的風格會同時出現在兩邊,分數就失去鑑別力——換模型是為了讓評分者的偏誤與被評者的偏誤不相關。要注意「爬到十分」有個天花板:分數只反映 rubric 寫了什麼,rubric 沒寫到的維度爬再高也不會變好,所以人的品味最終還是體現在 rubric 上。她順帶給出的主廚比喻——不再自己煮每道菜,而是帶著線上廚師與副主廚、設計整個廚房環境——是開場那個管理類比的升級版:從「管人」變成「設計環境」,這正好預告了她後面要談的架構約束。

術語:hill climbing

pair programming

結對編程

兩個人共用一台機器寫程式,一人打字一人觀察與提問。

傳統上分成 driver(打字的人)與 navigator(觀察、提問、想大方向的人),價值來自即時的第二視角。講者用它來類比人與 agent 的關係,但角色分配反過來了:agent 是 driver,人是 navigator。這也解釋了為什麼她說初期不能當被動觀察者——navigator 如果不出聲,pair programming 就只剩一個人在寫。

相關術語: in the loop (其人力版本)

出處:第 10 段「當後座駕駛,再讓 eval 爬山」

judge agent

評審代理

專門負責替其他 agent 的輸出打分的 agent,通常刻意換用另一個模型。

又稱 LLM-as-a-judge,是目前評測開放式輸出最實用的方法,因為這類輸出沒有標準答案可比對。它的主要風險是自我偏好偏誤:模型傾向給「和自己風格相近」的輸出高分,所以讓寫的模型和評的模型不同是常見對策。講者的做法正是如此,用另一個模型交叉檢查主協調 agent 的評分。

相關術語: eval (其評分角色)、rubric (依其打分)

出處:第 10 段「當後座駕駛,再讓 eval 爬山」

hill climbing

爬山法

反覆做小改動、只保留讓分數變好的那些,逐步逼近高分的最佳化方法。

它的前提是有一個可重複量測的分數,這就是為什麼 eval 必須先存在——沒有分數就沒有山可爬。它的經典缺點是會卡在局部最佳解,而在這個情境下還多一個限制:分數只反映 rubric 涵蓋的維度,rubric 漏掉的東西爬再高也不會改善。實務上就是用 slash loop 這類機制讓 agent 反覆跑 eval 並修改 skill,直到全部項目滿分。

相關術語: eval (以其為目標函數)

出處:第 10 段「當後座駕駛,再讓 eval 爬山」

留給下一段 她給了「工程師像主廚」的比喻,卻還沒說第一間廚房該開在哪裡。下一段回答「實際上從哪裡開始做」。

11. 先在本地觀察,再放上雲端 25:43–29:05

被問到實際要怎麼開始,她建議先從本地做起,因為本地才觀察得到:讓 agent 把應用程式叫起來,你看著它怎麼呼叫 API、怎麼跟程式互動。但她自己幾乎全押在 cloud agent 上——只要花一點時間把環境和這些 control / verification skill 設好,收益不只是讓你一個人變強,而是整個團隊、整間公司。她舉內部的 agent「Benny」為例:它接收所有 bug 回報,自動在雲端開一台桌面、在自己的電腦裡跑 Cursor,用同一套 control skill 操作應用程式去重現問題。畫面上這次的結果是 Benny 成功重現了 bug、但確認 main 上已經修好,只要再出一版就行——這些資訊完全不用她花一小時陪著 agent 查。

Benny 自動重現 bug 並回報「已在 main 修復」的實際輸出,是「投資 skill 會複利」最具體的一次展示
28:20 · Benny 自動重現 bug 並回報「已在 main 修復」的實際輸出,是「投資 skill 會複利」最具體的一次展示
承上 承接上一段留下的「第一間廚房開在哪」:主持人追問實際操作,她的答案是先本地、再雲端,而且理由和上一段的觀察方法直接相扣。

推理因為上一段強調人要親眼看到 agent 在哪裡失敗,所以作者接著推出「從本地開始」——本地才觀察得到:讓 agent 把應用程式叫起來,你看著它怎麼呼叫 API、怎麼跟程式互動。但她立刻補上自己的實際重心:她幾乎全押在 cloud agent 上,因為只要花一點時間把環境和這些 control/verification skill 設好,收益不只是讓你一個人變強,而是整個團隊與整間公司。她用內部 agent「Benny」把這個複利講成一個具體畫面。

AI 補充這裡有一個容易被略過的因果鏈:本地與雲端的差別不只是機器在哪,而是「誰在看」。本地是為了讓人看得到 agent 的行為以便寫 skill;雲端是等 skill 夠好之後,把人從觀察位置上撤下來。所以這個順序不是保守建議,而是前一段那個迭代迴圈的必然結果。截圖是 Benny 在 Slack 的 #glass-oncall-assistant 頻道裡的一則回覆,把複利講得很清楚:原始回報來自 tyson,是一段自然語言描述加一段螢幕錄影——「切換 panel focus 會一直打開空白的 apps 側欄,即使我明確關掉它;另外如果 focus 在文字輸入框就不會打開」。Benny 的回覆標題是 Reproduced but already fixed on main,下面兩行結論:在前一個 commit 上重現成功、在修正後的版本上消失,並附上 view cloud agent 連結可以回看它做了什麼。值得注意的是它做的不只是「重現」,而是在兩個 commit 上各跑一次做了對照——這等於自動完成了一次小規模的 bisect,而這正好需要前面那個 control skill(能操作應用程式)加上 feature map(知道 apps 側欄在哪、怎麼觸發 panel focus)才做得到。

cloud agent

雲端代理

在遠端環境自行取得任務、執行並回報結果的 agent,不需要人在旁邊開著機器。

它與本地 agent 的差別不只是硬體位置,而是觸發方式:本地 agent 由人下 prompt 啟動,雲端 agent 可以被事件觸發(新的 bug 回報、CI 失敗、排程),因此能在人睡覺時工作。代價是你看不到過程,所以它預設你的 verification 與 skill 已經夠可靠——這就是為什麼它排在本地之後。它的收益是共享的:同一套環境設定,全公司的人都能用。

相關術語: verification (以其為前提)、trust curve (位於其右段)

出處:第 11 段「先在本地觀察,再放上雲端」

留給下一段 雲端 agent 的效益展示得太誘人,正因如此下一段要先擋住「那我直接跳到那裡」的念頭。

12. 沒有捷徑:信任要自己長出來 29:05–32:19

她強烈勸阻跳級:還在曲線底部就想一次開一千、一萬個雲端 agent,只會燒掉大量 token 又很貴。主持人幫忙收斂成一條路徑——先做 verification 讓 agent 至少能產出正確的程式,本地信得過之後再擴到雲端讓它自動接收訊號、回一個 PR,最後才是自動合併、在 main 上事後 review。她補充這條曲線本質上是「你個人對 agent 的信任程度」,沒有捷徑;P-Stack 這類外掛能加速,但她明確不鼓勵盲目信任她,比較好的做法是 fork 一份改成自己的。因為每個人的工程標準不同,重點是把你在意的東西編碼成 skill,並且能驗證 agent 真的照做。

承上 承接上一段留下的「Benny 太誘人、聽眾會想直接跳過去」:她立刻回頭壓住這個念頭,並把整條路徑重新排一次。

推理因為上一段展示的成果會誘發跳級,所以作者接著明確勸阻:還在曲線底部就想一次開一千、一萬個雲端 agent,只會燒掉大量 token 又很貴。主持人幫忙把整場收斂成一條可執行的路徑——先做 verification 讓 agent 至少能產出正確的程式,本地信得過之後再擴到雲端讓它自動接收訊號、回一個 PR,最後才是自動合併、在 main 上事後 review。她確認這條路徑,並強調曲線的本質是「你個人對 agent 的信任程度」,沒有捷徑;P-Stack 這類外掛能加速,但她明確不鼓勵盲目信任她,比較好的做法是 fork 一份改成自己的。

AI 補充「為什麼不能跳級」值得補一個她沒明說的機制層面理由:跳級的失敗不是「agent 做不出東西」,而是「做出來的東西你沒能力判斷對錯」。一千個雲端 agent 產出的一千個 PR,如果沒有 verification 與硬約束,最後還是回到你一個人身上逐一審查——瓶頸只是從輸入端移到輸出端,總吞吐量沒變,卻多付了大量 token。這也是她那句「這條曲線是你個人的信任程度」的實際含意:曲線量的其實是你的判斷能力,不是 agent 的能力。她說「fork 一份改成自己的」而不是照用,理由也在這裡——別人的 skill 編碼的是別人在意的工程標準,用它得到的信任是借來的,撐不住你自己的判斷。

token

詞元

模型處理文字的最小單位,也是計費與上下文長度的計算單位。

一個英文單字大致是 1–2 個 token,中文一個字往往就是 1 個以上,所以同樣的內容不同語言的成本不同。它之所以在這場反覆出現,是因為 token 同時是三種成本:金錢(按量計費)、時間(生成速度)、以及注意力(上下文塞滿了模型就會顧此失彼)。她說「跳級會燒掉大量 token」指的是第一種,但後面談重構 ROI 時三種都在場。

相關術語: cloud agent (其主要消耗者)

出處:第 12 段「沒有捷徑:信任要自己長出來」

留給下一段 信任這條主線到這裡收完了,但她一開始畫的大綱上還有第三塊沒開:重構與重寫。下一段換題目。

13. 真正的風險是沒有護欄的綠地專案 32:19–36:33

她轉到第三塊:重寫與重構。業界普遍勸人不要重寫,但她認為要看情況,而且判斷標準跟直覺相反。既有的 brownfield 專案其實處境不錯——大公司的基礎建設本來就是為「團隊裡能力最弱的工程師」設計的:框架、慣例、護欄、限制權限,避免實習生把正式資料庫清掉;這些護欄現在剛好讓 agent 也不容易闖禍。真正的最大風險(同時也是最大機會)是綠地專案:Grokbot 這種快速 vibe code 出來的原型,人根本沒在讀程式碼,等於完全沒有護欄,agent 拿到任務就挑最方便的方式解決,久了程式庫會朝她在推文裡說的「organic architecture」失控生長——你看不懂它,agent 也只是照著一堆捷徑在堆。

她翻出的那則 organic architecture 推文,是這一段對「無護欄程式庫會長成什麼樣」的完整定義
36:10 · 她翻出的那則 organic architecture 推文,是這一段對「無護欄程式庫會長成什麼樣」的完整定義
承上 承接上一段留下的「大綱上第三塊還沒開」:她轉到重寫與重構,並且立刻提出一個和業界共識相反的判斷標準。

推理因為前面兩塊(verification、skill)都在改變「agent 怎麼工作」,所以作者接著轉向改變「agent 在什麼環境裡工作」。她的論證從一個反直覺的觀察開始:業界普遍勸人不要重寫,但要看情況,而且情況跟直覺相反。既有的 brownfield 專案處境其實不錯——大公司的基礎建設本來就是為「團隊裡能力最弱的工程師」設計的:框架、慣例、護欄、限制權限,避免實習生把正式資料庫清掉;這些護欄現在剛好也擋住 agent。真正的最大風險同時也是最大機會,是綠地專案。

AI 補充這段最有力的一句其實是她的玩笑話「在 AI slop 之前,我們就有 human slop」——它拆掉了「程式碼品質下降是 AI 造成的」這個預設,把問題改寫成規模問題:幾萬人的 monorepo 早就面對過「大量能力不均的貢獻者同時改同一份程式碼」,而大公司的答案不是要求每個人都變強,是把標準做進工具裡。她的推論就是把 agent 直接放進「能力不均的貢獻者」這個位置——這一步是整場後半段的樞紐。反過來看綠地專案為什麼危險也就清楚了:Grokbot 這種快速 vibe code 出來的原型,人根本沒在讀程式碼,等於完全沒有護欄,agent 拿到任務就挑最方便的方式解決,久了會長成她所謂的 organic architecture——不是被設計出來的,是被一堆捷徑堆出來的,你看不懂它,agent 也只是照著堆。截圖捕捉到的是她正要去翻那則推文、把大綱頁留在畫面上的瞬間,剛好可以看到第三個 bullet 的原文:refactoring/rewriting architecture to be agent friendly,旁邊註記 (greenfield vs brownfield)——也就是這一段的完整標題。

術語:vibe coding

brownfield

棕地專案

已經存在、帶著歷史包袱與既有慣例的程式庫。

名字來自都市開發:棕地是已開發過、需要在既有結構上動工的土地。工程師的直覺通常把它當負擔(程式碼難懂、限制多),但講者指出限制正是它的優勢——那些框架、慣例與權限控管本來就是為了防止最弱的貢獻者闖禍而存在,現在剛好對 agent 也有效。她的結論是 brownfield 專案處在一個比大家以為的更好的位置。

相關術語: greenfield (相反)、guardrail (通常已具備)

出處:第 13 段「真正的風險是沒有護欄的綠地專案」

greenfield

綠地專案

從零開始、沒有既有包袱也沒有既有約束的新程式庫。

傳統上被視為工程師的夢想,因為可以自由選型、不必遷就歷史。講者反轉了這個評價:沒有包袱也意味著沒有護欄,而 agent 在沒有護欄的環境裡會用最方便的方式解題。所以綠地既是最大風險也是最大機會——機會在於你有機會從第一天就把約束設對,風險在於多數原型根本沒人這樣做。

相關術語: brownfield (相反)、vibe coding (常見成因)

出處:第 13 段「真正的風險是沒有護欄的綠地專案」

vibe coding

憑感覺寫程式

幾乎完全交給 agent 生成、人不細讀程式碼只看結果的開發方式。

它做原型極快,因為省掉了理解與審查的時間,Grokbot 本身就是這樣做出來的。代價是程式庫進入「沒有人真正理解它」的狀態:人看不懂,agent 也只是延續既有的捷徑。講者的立場不是反對 vibe coding,而是指出它不能持續——原型驗證完之後必須補上約束,否則會長成 organic architecture。

相關術語: organic architecture (其長期結果)、greenfield (常見於此)

出處:第 13 段「真正的風險是沒有護欄的綠地專案」

organic architecture

有機生長的架構

沒有人設計、由 agent 一次次選最方便的捷徑堆出來的程式庫結構。

這是講者在推特上用的說法,帶著反諷:有機聽起來很好,但這裡指的是無人監督的自然生長。它的特徵是每一步在當下都合理(都是最快的解法),但整體沒有一致的形狀,也沒有任何不變量。最麻煩的是它會自我延續——agent 最愛照抄既有模式,所以捷徑一旦成為既有模式就會被不斷複製。

相關術語: vibe coding (由其造成)、guardrail (缺乏其約束)

出處:第 13 段「真正的風險是沒有護欄的綠地專案」

guardrail

護欄

限制貢獻者能做什麼、讓錯誤做法難以完成的機制,如框架慣例、權限限制、CI 檢查。

它與「指引」的差別在於強制力:指引靠人記得,護欄讓你做不到。大公司的護欄是為了讓能力最弱的成員也不會造成重大損害而設計的(例如不給實習生正式資料庫的寫入權限),而這個設計目標剛好也適用於 agent。講者整場後半段的主張,可以濃縮成「把你在意的每一件事都變成護欄,而不是留在 review 留言裡」。

相關術語: brownfield (其典型所在)、organic architecture (用來預防它)

出處:第 13 段「真正的風險是沒有護欄的綠地專案」

留給下一段 她指出無護欄的綠地專案最危險,但還沒說自己怎麼補救 Grokbot。下一段給出她付出的代價與換到的東西。

14. 投資約束,換來不用讀程式碼 36:33–40:45

結論是新程式庫一開始就要有很強的約束。她自己花了六百多個 PR 把整個 Grokbot 重構到新架構(內部代號 Dune),代價是大量 token,換到的是現在幾乎不再看程式碼、早上醒來二十個 PR 已經合併也不擔心有人半夜合進效能退步。她強調這不只利己:設計師、PM 甚至 GTM 的人都能安全地為 Grokbot 加功能。被問到 PR 大小,她說沒有硬上限,從五十行到上千行都有,但她會鼓勵 agent 把工作拆成多個 PR——git 歷史是很豐富的脈絡來源,每個 PR 原子性地描述一件事,出問題時才好定位與回退,而不是一個四萬行的 PR 裡誰也不知道混進了什麼。

承上 承接上一段留下的「她自己怎麼補救 Grokbot」:她給出帳單——六百多個 PR 的重構,以及換到的狀態。

推理因為上一段判定綠地專案的風險來自缺乏約束,所以作者接著給出對應的處方與代價:新程式庫一開始就要有很強的約束,而她自己是花了六百多個 PR 把整個 Grokbot 重構到新架構 Dune 才補上這件事。她把收穫講得很具體——現在幾乎不再看程式碼,早上醒來二十個 PR 已經合併也不擔心有人半夜合進效能退步——並且強調這不只利己:設計師、PM 甚至 GTM 的人都能安全地為 Grokbot 加功能。被問到 PR 大小時她順勢補上一個原則:沒有硬上限,但鼓勵 agent 把工作拆成多個 PR。

AI 補充「不看程式碼」聽起來像放棄品質,但她的邏輯其實是把檢查的位置換了:品質不是在 review 時檢查,而是在架構與 CI 裡先擋掉,人只在事後抽驗。這一步只有在下一層的約束真的夠硬時才成立,所以這段本質上是在替後面的內容押注。至於拆 PR 的理由她講得很精準——git 歷史是很豐富的脈絡來源,每個 PR 原子性地描述一件事,出問題時才好定位與回退,而不是一個四萬行的 PR 裡誰也不知道混進了什麼。這個理由在 agent 時代反而更重要:當你不讀程式碼,git 歷史就是你唯一還讀得動的東西,而 revert 也就成了你最後的安全網;如果一個 PR 混了五件事,revert 就會連帶砍掉四件無辜的修改,安全網等於失效。

Dune

Dune(架構代號)

Cursor 內部為 Grokbot 打造的應用架構代號,設計目標是讓 agent 能安全地寫程式。

她自己給的心智模型是「給 Electron app 用、專為 agent 撰寫而設計的 Next.js」——也就是一個高度約定俗成、少決策的框架。它不打算開源,比較像是一組原則與慣例的集合。理解它的關鍵是設計目標:不是為了讓人寫得舒服(她自己說在 Grokbot 裡寫程式很煩),而是為了讓錯誤的寫法在 CI 就死掉,而 agent 會替人吸收掉那些煩躁。

相關術語: guardrail (其具體實作)、greenfield (用來救它)

出處:第 14 段「投資約束,換來不用讀程式碼」

revert

回退

把某個已合併的變更整包撤銷,讓程式庫回到它進來之前的狀態。

它是「事後 review」這種工作模式的最後防線:既然不在合併前擋,就必須能在出事後快速拿掉。它的成本完全取決於 PR 的原子性——一個只做一件事的 PR 可以乾淨地 revert,一個混了五件事的大 PR 則會連帶砍掉四件無辜的修改。這就是為什麼講者鼓勵 agent 拆 PR,而不只是因為小 PR 好讀。

相關術語: pull request (以其為單位)、auto-merge (其配套安全網)

出處:第 14 段「投資約束,換來不用讀程式碼」

留給下一段 她說 Grokbot 的 CI「很煩、什麼都檢查」,但煩在哪還是個抽象形容。下一段把這些約束一條一條拆開來看。

15. Dune 的硬約束:連註解都禁 40:45–44:59

她描述 Dune 的 CI 有多煩:什麼都檢查。React 最大的地雷是 useEffect,所以 Dune 直接禁用,CI 會失敗並罵你——Dune 的心智模型大致是「給 Electron app 用、專為 agent 撰寫而設計的 Next.js」。更讓人挑眉的是她連程式碼註解都禁了,因為九成九的情況 agent 寫的註解是在記錄無關的歷史,例如把她針對某個 PR 的一句「這裡不要這樣寫」寫成程式碼裡的永久全域規則。原則是:agent 做不好的事情,就全部禁掉。另一個實例是 Electron 的行程隔離——renderer 執行緒要在 16 毫秒內畫完一幀才有 60 FPS,一旦不小心把計算重或 IO 多的程式碼拉進 renderer 就會掉幀、卡頓;agent window 就因為隔離做得差而反覆退步。

承上 承接上一段留下的「CI 到底煩在哪」:她開始逐條展示 Dune 的約束,而且挑的都是會讓人挑眉的那幾條。

推理因為上一段把「強約束」講成一句原則,所以作者接著用具體條文證明她說的強是什麼等級。她的例子是有梯度的:先講一個工程師會點頭的(React 最大的地雷是 useEffect,所以 Dune 直接禁用,CI 會失敗並罵你),再講一個會讓人挑眉的(禁止程式碼註解),最後給出貫穿這些條文的原則——agent 做不好的事情,就全部禁掉。她再用 Electron 的行程隔離說明這些條文是從哪裡來的:renderer 要在 16 毫秒內畫完一幀才有 60 FPS,一旦把計算重或 IO 多的程式碼拉進 renderer 就會掉幀,而 agent window 就因為隔離做得差而反覆退步。

AI 補充禁註解這條的理由值得完整重述,因為它不是討厭註解,而是一個關於「脈絡層級」的觀察:agent 會把她針對某個 PR 的一句「這裡不要這樣寫」寫成程式碼裡的永久全域規則——它分不清「這次的指正」和「永遠的規則」。這其實是同一個病的另一種症狀:agent 對脈絡的時效性沒有概念,就像它會把過期的 skill 當成現行規則一樣。順帶補一個她口語上跳過的技術細節:Electron 的 main 與 renderer 嚴格說是兩個獨立的行程(process)而非執行緒,各有自己的事件迴圈,靠 IPC 溝通——這個區別正好是重點所在,因為「行程隔離」的價值就在於一邊卡住不會直接凍住另一邊;她說「隔離做得差」指的是程式碼在 import 層被意外拉到 renderer 那一側,而不是 OS 層的隔離失效。16 毫秒這個數字則是 1000/60 的結果,它是硬性的物理預算,所以任何一個超過它的長任務都會直接被使用者看見。

術語:foot gunrenderer processmain process

useEffect

useEffect(React 副作用 Hook)

React 中用來在渲染之後執行副作用(訂閱、同步外部系統)的 Hook。

它被大量誤用來做「衍生資料計算」與「事件回應」,而這兩件事都有更好的做法,誤用的結果是多餘的重新渲染、競態條件與難以追蹤的資料流。React 官方文件本身就有一整篇在講「你可能不需要 useEffect」。Dune 直接禁用它並讓 CI 失敗,是把「這是地雷」這個知識從人的記憶搬進工具的典型例子。

相關術語: foot gun (是其典型)、React Compiler (同一問題的另解)

出處:第 15 段「Dune 的硬約束:連註解都禁」

foot gun

自傷陷阱

API 或語言裡那種很容易被誤用、誤用後會傷到自己的設計。

字面意思是「朝自己腳開槍的槍」,指的不是不能用,而是預設用法就容易出錯。判斷一個東西是不是 foot gun 的實務標準很簡單:如果你在 code review 裡反覆為同一件事留言,那它就是。這也直接呼應講者後面的主張——每次留這種言,都應該去想怎麼把它變成一條硬規則。

相關術語: useEffect (其代表案例)

出處:第 15 段「Dune 的硬約束:連註解都禁」

renderer process

渲染行程

Electron 中負責繪製 UI 的行程,每個視窗一個,本質上是一個 Chromium 分頁。

它的工作有硬性時間預算:要維持 60 FPS,每一幀必須在約 16 毫秒內畫完。任何在它裡面執行的計算或 IO 都在跟畫面搶這 16 毫秒,所以「哪些程式碼可以進 renderer」是效能上最關鍵的界線。Grokbot 用目錄結構加上 CI 的相依圖檢查把這條界線變成機械性的規則,就是為了讓這個判斷不再依賴任何人的記憶。

相關術語: main process (與其對照)、jank (被拖累時的症狀)

出處:第 15 段「Dune 的硬約束:連註解都禁」

main process

主行程

Electron 應用的主控行程,負責視窗管理、原生 API 與不該阻塞畫面的工作。

它沒有畫面更新的時間預算,所以是重運算與 IO 該待的地方,兩邊透過 IPC 溝通。實務上的難點不在於知道這件事,而在於防止程式碼在 import 的過程中被「順便」拉到錯的一側——一個共用的工具模組被 renderer import,它的相依就整串跟著進來了。這正是 Grokbot 用相依圖檢查來擋的東西。

相關術語: renderer process (與其對照)

出處:第 15 段「Dune 的硬約束:連註解都禁」

jank

卡頓

畫面更新不及時造成的掉幀與不順暢感。

它的直接成因是 long task——單一任務佔用超過一幀的預算(約 16 毫秒),期間畫面無法更新。使用者感受到的不是「慢」而是「頓」,而且比整體慢一點更容易被察覺,因為人對節奏的變化極度敏感。它難修的原因是每一個造成 jank 的改動單獨看都很小,只有累積起來才顯現,所以必須靠 CI 在每個 PR 就擋住,而不是等使用者抱怨。

相關術語: renderer process (發生於其中)、CPU trace (用來診斷它)

出處:第 15 段「Dune 的硬約束:連註解都禁」

見仁見智 41:26
「we've banned use effect」
全面禁用 useEffect 是相當激進的取捨。React 官方的立場是它被大量誤用,但它仍是「與外部系統同步」(訂閱、手動 DOM 操作、非 React 的第三方元件)的正規逃生口;完全禁用意味著這些情境必須由框架另外提供替代機制。在 Dune 這種自帶完整框架的環境裡說得通,直接照抄到一般 React 專案則可能無路可走。
依據: React 官方文件〈You Might Not Need an Effect〉建議的是減少誤用,而非停用
見仁見智 42:00
「banned code comments as well」
她給的理由(agent 常把針對單一 PR 的一句指正寫成永久的全域註解)是真實觀察,但結論偏一刀切。註解仍是記錄「為什麼這樣做」的少數手段,尤其是繞過某個外部限制或非直覺的取捨;把它整個禁掉等於把這類資訊全部推給 commit message 與 PR 描述,而那些東西在讀程式碼時並不在眼前。這是取捨而非定論。
依據: 同段講者自述理由為「99% 的情況 agent 寫的註解在記錄無關的歷史」
留給下一段 這些約束目前還是散落的個別條文,強弱也不一樣。下一段把它們排成有層次的防線,並指出哪幾層才靠得住。

16. 分層防線:硬的擋、軟的補 44:59–48:46

這些教訓被編碼進框架並變成硬失敗:Grokbot 裡實際有 electron main 與 electron renderer 兩個目錄,CI 會檢查相依圖,確保沒有跨目錄的錯誤 import。她把防線分成幾層:最強的是架構本身——agent 最愛照抄既有模式,所以把建立功能的方式弄得非常制式,一個 feature 的所有程式碼(entry point、transcript card 等等)都放在同一個目錄,agent 不必四處 grep,八成的工作都封裝在那裡。她的關鍵原則是「最短路徑就是最好的路徑」:agent 本來就愛抄捷徑,那就把捷徑設計成正確解。往下是靜態分析、CI 檢查、大量針對觀察到的壞模式寫的 lint、編譯器診斷,這些會讓 CI 變紅;再往下的 BugBot 規則、skill、風格指南則是軟的,agent 會忘記、不見得每次照做,可以疊上去但不能當唯一防線。

她口中「多個層次」的那張分層圖,是本段所有規則的組織方式,也是整場最可直接照抄的一張
45:45 · 她口中「多個層次」的那張分層圖,是本段所有規則的組織方式,也是整場最可直接照抄的一張
圖上被標成硬約束(會讓 CI 變紅)與軟約束的分界,正是她主張「不要只靠軟規則」的依據
48:10 · 圖上被標成硬約束(會讓 CI 變紅)與軟約束的分界,正是她主張「不要只靠軟規則」的依據
承上 承接上一段留下的「這些條文散落且強弱不一」:她把它們排成有先後強弱的五層,並指出分界線在哪。

推理因為上一段列出的規則種類太雜(架構、CI、lint、註解、目錄),所以作者接著給出組織方式:把防線分層,最強的是架構本身——agent 最愛照抄既有模式,所以把建立功能的方式弄得非常制式,一個 feature 的所有程式碼(entry point、transcript card 等等)都放在同一個目錄,agent 不必四處 grep,八成的工作都封裝在那裡。她從這裡導出關鍵原則「最短路徑就是最好的路徑」:agent 本來就愛抄捷徑,那就把捷徑設計成正確解。往下是靜態分析、CI 檢查與 lint,再往下的 BugBot 規則、skill、風格指南則是軟的。

AI 補充第一張截圖上她手寫的清單就是這段的骨架,按強度排序:1. codebase、2. static analysis (lint/compiler/ci)、3. rules/bugbot、4. skills、5. "style guide"。第二張截圖拍到分界的說明與上方的 Dune 文件,資訊量更大。文件先列出 agent 的行為傾向當作前提(選擇最短且能編譯的路徑、避免刪除看不到呼叫端的程式碼、即使與系統不變量衝突也照著被要求的實作走),再從這些傾向推出 Dune 的五條規則:一、慣例路徑要比捷徑需要更少決策;二、被禁止的相依要機械性地失敗;三、每個持久狀態只有一個明顯的寫入者;四、新的產品工作是加獨立的檔案,而不是在共用根目錄長分支;五、例外必須窄、必須明講,而且要當成架構變更來審。文件還列出五個「公共名詞」(Feature、Entrypoints、Transcript cards、Client、Host),並規定 Dune 住在 `sand/dune`、應用程式住在 `sand/src`,Dune 永遠不 import 應用程式的程式碼。把這些和第一條原則對讀就會發現整套設計是同一個念頭:不是要求 agent 別抄捷徑,而是先觀察它會抄哪些捷徑,再把那條捷徑改成正解。至於分界線,她講得很直白——前兩層會讓 CI 變紅,屬於硬約束;第三到五層 agent 會忘記、不見得每次照做,可以疊上去但不能當唯一防線,否則程式庫遲早變成一團垃圾。這正好回頭解釋了前面兩段:她敢不看程式碼,是因為她信的是第一、二層,不是第四層的 skill。

術語:AGENTS.mdco-location

static analysis

靜態分析

不執行程式、只靠讀原始碼或型別資訊就找出問題的檢查。

它涵蓋型別檢查、lint 規則、相依圖檢查與編譯器診斷,共同特徵是結果決定性、可以在 CI 上機械執行。它與 verification 是互補的兩極:靜態分析在不跑程式的前提下證明某些錯誤不存在,verification 則實際跑起來看行為對不對。講者把它排在第二層,因為它雖然不如架構強(架構是讓錯誤寫法根本沒地方寫),但仍然是硬的——不過就是不過。

相關術語: guardrail (其硬性形式)、verification (互補)

出處:第 16 段「分層防線:硬的擋、軟的補」

BugBot

BugBot(Cursor 的自動 review)

Cursor 提供、在 CI 上自動 review PR 並留下意見的工具。

它讀 PR 的 diff、依照設定的規則給出評論,本質上是把資深工程師的 review 自動化。講者把它歸在第三層的軟約束:它會提醒,但不保證每次都抓到、也不會強制擋下合併。這個定位很重要——把 BugBot 當唯一防線,等於用機率性的檢查守護確定性的規則。

相關術語: static analysis (比它更硬)

出處:第 16 段「分層防線:硬的擋、軟的補」

AGENTS.md

AGENTS.md(agent 指引檔)

放在程式庫裡、告訴 agent 這個專案的慣例與注意事項的說明檔。

它是目前跨工具較通用的一種約定,agent 在動工前會讀它,作用類似給新人的 README。它的強度和 skill 一樣屬於軟約束:內容再完整,agent 仍可能在上下文很長時忽略其中某幾條。所以它適合承載「怎麼做比較好」,而不適合承載「絕對不可以」——後者要交給 CI。

相關術語: skill (同屬軟約束)

出處:第 16 段「分層防線:硬的擋、軟的補」

dependency graph

相依圖

把模組之間誰 import 誰畫成的有向圖,用來檢查是否出現不該有的相依。

它的價值在於能表達「A 目錄的程式碼不得被 B 目錄 import」這種架構層級的規則,而這是型別檢查與一般 lint 抓不到的。Grokbot 用它來守 electron main 與 electron renderer 的界線,讓一個原本靠人記得的效能原則變成機械性的 CI 失敗。這是「把架構意圖變成可執行檢查」最直接的一種例子。

相關術語: static analysis (屬於其手段)、renderer process (用來守其邊界)

出處:第 16 段「分層防線:硬的擋、軟的補」

co-location

就近放置

把同一個功能相關的所有程式碼放在同一個目錄,而不是依檔案類型分散。

傳統的分法是按類型切(components/、hooks/、utils/…),改一個功能要跨五個目錄;co-location 則按功能切,改一件事只動一個目錄。對 agent 來說這個差別被放大了:它省下的不只是走路距離,而是大量用來搜尋與確認的上下文。講者說「八成的工作都封裝在那裡」,指的就是 agent 不必先花力氣建立整個程式庫的地圖才能動工。

相關術語: Dune (其核心慣例)、feature map (同精神但對使用者)

出處:第 16 段「分層防線:硬的擋、軟的補」

留給下一段 分層防線的前兩層靠工具硬擋,那就得問這些工具本身夠不夠嚴。下一段把問題推到技術選型,以及怎麼把 review 也變成規則。

17. 選技術棧,也把 review 變成規則 48:46–51:08

既然要靠硬約束,技術選型就變重要。她舉 Rust 重新變紅的原因:編譯器夠嚴格、有 borrow checker 要應付,只要確保 agent 不寫 unsafe 區塊,能編過大致就能信它是對的——這種信心讓人類工程師不必自己去檢查。反過來,最糟的位置是「困在 code review 之地」:程式庫的不變量全靠人讀程式碼、逐條留言來維持。她的判準很直接:每次你必須這樣留言,都該視為一種壞味道,並問自己怎麼把它變成一條 lint 規則、一個 CI failure,或乾脆從根本上讓這個問題不可能發生。

承上 承接上一段留下的「工具本身夠不夠嚴」:她把這個問題推到技術選型,並給出一個可以立刻執行的判準。

推理因為上一段的結論是要靠會讓 CI 變紅的硬層,所以作者接著指出這一層的上限其實由技術棧決定。她舉 Rust 重新變紅的原因:編譯器夠嚴格、有 borrow checker 要應付,只要確保 agent 不寫 unsafe 區塊,能編過就有一定程度的信心——這種信心讓人類工程師不必自己去檢查。反過來,最糟的位置是「困在 code review 之地」:程式庫的不變量全靠人讀程式碼、逐條留言來維持。她的判準因此非常直接:每次你必須這樣留言,都該視為一種壞味道,並問自己怎麼把它變成一條 lint 規則、一個 CI failure,或乾脆從根本上讓這個問題不可能發生。

AI 補充「code review 之地」這個診斷值得跟前面的信任曲線接起來看:靠人 review 維持的不變量,維持成本正比於 PR 數量,所以它會在你想往曲線右邊走的時候率先崩潰——這正是為什麼她把「還在靠 review 留言」視為結構性問題而不只是效率問題。她給的三段式處方也有明確的優先序,而且和上一段的分層完全對應:變成 lint 規則(第二層)、變成 CI failure(第二層)、或讓問題根本不可能發生(第一層,最強)。要注意 Rust 的例子在推理上有個限度:編譯器保證的是記憶體安全與型別正確,不是邏輯正確——能編過的 Rust 程式一樣可以算錯答案。她真正的論點應該讀成「編譯器擋掉的那一類錯誤,人就不必再檢查了」,而不是「編過就不用驗證」;否則會和她自己排第一位的 verification 相矛盾。

術語:code smell

borrow checker

借用檢查器

Rust 編譯器中在編譯期驗證所有權與參照生命週期的機制。

它在編譯期就擋掉懸空指標、重複釋放與資料競爭這一整類錯誤,代價是寫程式時必須把所有權關係講清楚,也就是所謂「跟編譯器吵架」。對 agent 來說這個代價比對人低得多:反覆修改直到編譯通過,正好是它擅長的迴圈。這就是講者說 Rust 在 agent 時代重新變紅的理由。

相關術語: static analysis (其極致形式)、unsafe (被其繞過)

出處:第 17 段「選技術棧,也把 review 變成規則」

unsafe

unsafe 區塊

Rust 中明確標示、允許繞過編譯器安全檢查的程式碼區塊。

它的存在是必要的(要呼叫 C 函式庫、寫底層資料結構時免不了),但它把安全責任從編譯器轉回給人。這也是為什麼講者特別加上那個前提:只要確保 agent 不寫 unsafe,「能編過就大致可信」才成立——一旦允許 unsafe,整個信任基礎就被打穿了。它是一個很好的例子,說明硬約束通常都附帶一個必須被守住的逃生口。

相關術語: borrow checker (繞過它)

出處:第 17 段「選技術棧,也把 review 變成規則」

invariant

不變量

程式庫在任何時候都必須成立的性質,例如「這個目錄不得 import 那個目錄」。

不變量的價值完全取決於它被維持的方式:靠人記得就等於沒有,靠工具強制才是真的。講者整段的主張可以濃縮成一句——把不變量從人的腦袋搬到編譯器與 CI 裡。有趣的是她展示的 Dune 文件裡也寫著 agent 的一個行為傾向是「即使與系統不變量衝突,也會照著被要求的實作走」,這正是為什麼不變量不能只寫在文件裡。

相關術語: guardrail (維持其手段)、code smell (靠人維持時的徵兆)

出處:第 17 段「選技術棧,也把 review 變成規則」

lint rule

lint 規則

靜態檢查工具裡的一條規則,用來自動抓出特定的壞寫法。

它是把 review 意見自動化最便宜的一階:寫一次規則,之後每個 PR 都免費執行。它的限制是只能表達語法或簡單語意層級的模式,跨檔案、跨模組的架構規則要靠相依圖檢查或型別系統。講者的實務建議是把它當成 review 留言的第一個去處——留言兩次以上還沒變成 lint 規則,就是在浪費人力。

相關術語: static analysis (屬於其一種)、code smell (回應它)

出處:第 17 段「選技術棧,也把 review 變成規則」

code smell

程式碼壞味道

本身不是錯誤、但通常暗示背後有結構性問題的徵兆。

傳統上指的是程式碼裡的徵兆(函式過長、重複邏輯)。講者做了一個有意思的推廣:她把「你必須在 PR 上留這種言」本身當成壞味道——徵兆不在程式碼裡,而在流程裡。這個轉換很有價值,因為它讓團隊的協作習慣也變成可以被重構的對象。

相關術語: lint rule (其應有去處)、invariant (暗示其失守)

出處:第 17 段「選技術棧,也把 review 變成規則」

見仁見智 49:23
「if the code compiles, it's probably works and it's good」
Rust 編譯器保證的是記憶體安全與型別正確,不是邏輯正確——能編過的程式一樣可能算錯答案、呼叫錯 API、寫錯商業規則。講者自己有加上 more or less、somewhat、probably 等緩衝詞,但這句話容易被讀成「編過就不用驗證」,而那會和她自己排在第一位的 verification 相矛盾。合理的讀法是:編譯器擋掉的那一類錯誤人不必再查,其他類別仍然要靠測試與實際執行。
依據: 同一場她把 verification 列為最重要的能力(約 07:52 起)
留給下一段 把規則硬化聽起來很理想,但重構、eval 與這些檢查都要燒 token。下一段正面回答成本問題。

18. token 成本:這筆投資的 ROI 51:08–53:59

有人問這一切對 token 預算正常的人是否現實。她坦白自己在 AI 實驗室、token 無上限,不會說每個人都該照抄,但認為不破產也做得到,而對工程主管來說這是 ROI 問題:前期重構、補齊約束確實很燒 token,但如果世界正走向由 agent 寫掉大部分程式碼,你會希望團隊保持精簡而不是變成一萬人的工程組織、背上大量規劃與溝通成本。她對 agent 價值的定義是「讓你做到以前做不到的事」:以一個人之力在程式庫裡建立並落實這種等級的約束,在前 agent 時代要花好幾年。而真正的判斷是——花錢請人來做,還是花 token 把程式庫整理到連最笨的 agent 都能寫好?做到之後,非旗艦等級的模型也能寫出很好的程式碼。

承上 承接上一段留下的成本問題:既然重構與硬化都要燒 token,她被問到這對 token 預算正常的人是否現實。

推理因為上一段的處方在成本上並不中性,所以作者接著必須正面處理它,而她的回答分成兩層。第一層是誠實揭露立場:她在 AI 實驗室、token 無上限,不會說每個人都該照抄,但認為不破產也做得到。第二層是把問題重新框架成 ROI:前期重構、補齊約束確實很燒 token,但如果世界正走向由 agent 寫掉大部分程式碼,你會希望團隊保持精簡,而不是變成一萬人的工程組織、背上大量規劃與溝通成本。她並給出對 agent 價值的定義——讓你做到以前做不到的事,而不是把 token 灑在每一件小事上。

AI 補充她真正的判斷句是那句對照:花錢請人來做,還是花 token 把程式庫整理到連最笨的 agent 都能寫好?這個對照之所以有力,是因為它把兩邊放進同一個單位(錢),而且兩邊的性質不同——請人是持續的月成本,重構是一次性的資本支出,而且一旦做完,後續每一個 agent、每一位新同事都免費受益。用她自己的話說,以一個人之力在程式庫裡建立並落實這種等級的約束,在前 agent 時代要花好幾年。這裡還藏著一個回頭生效的推論:程式庫整理好之後,非旗艦等級的模型也能寫出很好的程式碼——也就是說,投資在環境上可以換到模型層級的降級空間,而模型成本是持續性的。換句話說,這筆一次性支出的回報不只是產能,還包括長期單位成本的下降。

ROI

投資報酬率

投入的成本與其帶來的回報之比,用來判斷一筆支出值不值得。

在這裡的關鍵是把成本的型態分清楚:重構是一次性支出,請人是持續支出,而 token 的持續消耗又會隨著程式庫變好而下降(可以改用較便宜的模型)。只看前期帳單會覺得昂貴,把時間軸拉長並算上「全隊共享」才看得到真實比例。講者的立場也很清楚:她不主張把 token 灑在每一件小事上,而是主張投在那些以前一個人根本做不到的事情上。

相關術語: token (其成本項)、Dune (其投資標的)

出處:第 18 段「token 成本:這筆投資的 ROI」

留給下一段 她說這些約束讓 PM 與設計師也能安全貢獻,但那還需要一個他們願意用的入口。下一段介紹那個入口。

19. Grokbot:非工程師的 Cursor 時刻 53:59–57:46

她補充剛發表的 Grok 4.6:更聰明、benchmark 很好,而每 token 成本與 4.5 相同,等於同樣價錢買到更多智慧;他們刻意在成本與智慧的 Pareto frontier 上找甜蜜點,而不是造最大的模型。回到組織問題:Cursor 原本只有 agent window、CLI、IDE,都是開發者取向的 power user 工具,非工程職能用起來並不愉快。Grokbot 的介面像 iMessage,很好上手也很好玩,可以給 agent 取名字、一個帳號一個 agent,用很自然的方式做編排;PM 可以請 agent 摘要「Lauren 昨晚做了什麼」,也開始自己送出修 bug 的 PR,她 review 完常常直接蓋章。

Grokbot 像 iMessage 的介面:她主張「這是非技術者的 Cursor 時刻」,看到畫面才知道這個類比在說什麼
57:25 · Grokbot 像 iMessage 的介面:她主張「這是非技術者的 Cursor 時刻」,看到畫面才知道這個類比在說什麼
承上 承接上一段留下的「非工程師需要一個願意用的入口」:她先補完模型端的成本消息,再回答這個入口是什麼。

推理因為上一段把 ROI 建立在「更便宜的智慧」上,所以作者接著順勢補上剛發表的 Grok 4.6:更聰明、benchmark 很好,而每 token 成本與 4.5 相同,等於同樣價錢買到更多智慧;她並解釋這是刻意的取捨——在成本與智慧的 Pareto frontier 上找甜蜜點,而不是造最大的模型。接著她回到組織問題:Cursor 原本只有 agent window、CLI、IDE,都是開發者取向的 power user 工具,非工程職能用起來並不愉快;Grokbot 的介面像 iMessage,很好上手也很好玩,可以給 agent 取名字、一個帳號一個 agent,用很自然的方式做編排。

AI 補充「這是非技術者的 Cursor 時刻」這個說法的分量在於它指出了一個常被忽略的瓶頸:限制非工程師使用 agent 的往往不是能力,而是介面預設了太多開發者的心智模型(檔案樹、終端機、diff)。把互動改成聊天串、把 agent 擬人化成一個有名字的同事,需要學的東西就從「工具怎麼用」變成「怎麼跟人交代事情」——後者他們本來就會。她舉的兩個實例剛好一收一發:PM 可以請 agent 摘要「Lauren 昨晚做了什麼」(消費資訊),也開始自己送出修 bug 的 PR(生產程式碼),而她 review 完常常直接蓋章。截圖這時其實還停在她的 Dune 文件與那張分層清單上——她講 Grokbot 時沒有換畫面。這個巧合反而很說明問題:能讓 PM 送出的 PR「直接蓋章」的,不是 iMessage 般的介面,而是畫面上那五條 Dune 規則與兩層硬檢查。介面決定誰進得來,架構決定他們送出來的東西能不能合。

Pareto frontier

柏拉圖前緣

在多個彼此衝突的目標下,無法再改善其中一項而不犧牲另一項的最佳解集合。

在模型上,兩個目標是成本與智慧:位於前緣上的模型代表「同樣的成本下沒有更聰明的、同樣的智慧下沒有更便宜的」。這個框架解釋了為什麼一直造更大的模型不必然是進步——大模型可能推理成本高到離開前緣。講者說他們在找甜蜜點而不是最大的模型,講的就是這件事。

相關術語: ROI (同一取捨觀)、benchmark (衡量其一軸)

出處:第 19 段「Grokbot:非工程師的 Cursor 時刻」

benchmark

基準測試

用一組公開標準題目量測模型能力、方便跨模型比較的測試。

它與前面提到的 eval 目的不同:benchmark 比的是模型的通用能力,eval 比的是「我的 skill 在我的任務上有沒有變好」。benchmark 的已知弱點是題目可能洩漏進訓練資料,導致分數高於實際表現,所以它適合當粗略篩選而不是最終依據。講者提 benchmark 好只是引子,她真正在意的是每 token 的成本沒變。

相關術語: eval (通用版對照)

出處:第 19 段「Grokbot:非工程師的 Cursor 時刻」

orchestration

編排

同時指揮多個 agent 分工、協作與交接的做法。

傳統上編排要靠工具的圖形介面或設定檔來表達依賴關係,門檻不低。Grokbot 的做法是把它降維成社交隱喻——一個帳號一個 agent、各有名字,你就用平常交代同事的方式分派工作。這個設計呼應了整場的管理類比:如果管 agent 真的像管人,那介面就該長得像跟人講話。

相關術語: cloud agent (其編排對象)、agent (多個之間的協調)

出處:第 19 段「Grokbot:非工程師的 Cursor 時刻」

見仁見智 54:46
「the cost per token is the same as 4.5」
這是她臨場補充的價格資訊,她自己也先聲明「希望我沒講錯」。定價會隨時間調整,而且輸入、輸出、快取讀取的單價通常不同,「每 token 成本相同」不一定對所有計價項目都成立。要引用這個數字前,請以官方定價頁的當期資訊為準。
依據: 講者原話前一句為 hopefully I'm not saying this incorrectly
留給下一段 介面讓非工程師進得來了,但他們送出的 PR 憑什麼能安全合併——最後一段要把這條線和前面的架構線接起來收束。

20. 收尾:嚴格架構讓更多人能貢獻 57:46–59:41

她把兩條線收在一起:PM 與設計師能直接送出合格的 PR,正說明 Dune 那些嚴格約束撐住了——嚴格不是為了刁難人,而是讓不是工程專家的人也能高水準地貢獻,整個 Grokbot 團隊因此跑得很快。最後是問答收尾與致謝,並歡迎大家在 Twitter 上私訊她繼續問。

承上 承接上一段留下的「非工程師送出的 PR 憑什麼能合」:她把答案指回 Dune,讓介面線與架構線在這裡收在一起。

推理因為上一段的現象(PM 與設計師直接送出合格的 PR)需要一個解釋,所以作者在收尾時把它當成證據反推:這正說明 Dune 那些嚴格約束撐住了。於是全場的價值主張在最後翻轉了一次——嚴格不是為了刁難人,而是為了讓不是工程專家的人也能高水準地貢獻,整個 Grokbot 團隊因此跑得很快。最後是問答收尾與致謝,並歡迎大家在 Twitter 上私訊她繼續問。

AI 補充這個收尾把整場的兩條線接成一個閉環,值得回頭確認一次它的完整形狀:信任 → verification 讓 agent 能自證 → skill 把失敗模式編碼 → eval 讓 skill 可被量測 → 架構與 CI 把最重要的規則硬化 → 因為規則是硬的,人不必讀程式碼 → 因為不必讀程式碼,非專家也能貢獻 → 更多人能貢獻,投資才划算。最後這一環特別關鍵,因為它把「嚴格約束」從成本項改寫成擴張項:一般人直覺會認為嚴格的規範會勸退貢獻者,她的經驗剛好相反——當唯一那條路被設計成最短的路,不熟悉這個程式庫的人反而更容易走對。這也回答了整場最初那個問題「你怎麼信任 agent」:信任的對象從來不是模型本身,而是那個讓錯誤難以發生的環境。

留給下一段 總結收束。

4. 總結

整場的推理鏈只有一條,但扣得很緊。她先用自己在管理職與個人貢獻者之間來回的經歷立下類比:人與 agent 之間的核心變數是信任,而信任決定你只能微管理、還是能平行化。這個變數被畫成一條信任曲線,並用她個人的 PR 產出量圖表佐證「爬上去真的有產出」,同時把最尖銳的反問(量大不等於品質好)攤開來當成後半場的題目。第一個答案是 verification——讓 agent 能真的把程式跑起來、抓 trace,這不保證好程式,但保證正確的程式;反面則是她自己的慘痛經驗:沒有 verification 時,人就是那個瓶頸。做出 control glass skill 後暴露出下一個缺口:agent 會操作卻不知道有什麼可操作,於是有了 feature map。這個補丁再被抽象成通則——每觀察到一種失敗模式就寫成一個 skill,P-Stack 就是這樣長出來的;而 skill 的品質靠 eval(agent 的單元測試)維護,該做哪個 skill 則靠人當「後座駕駛」讀 tool call 找出來。接著她把場景從本地推到雲端(Benny 自動重現 bug 報告),並立刻擋住跳級的念頭:曲線本質是你個人的信任程度,沒有捷徑。後半場換一個維度:不是改變 agent 怎麼工作,而是改變它在什麼環境裡工作。大公司的護欄本來就是為能力最弱的工程師設計的,剛好也擋住 agent;真正危險的是沒有護欄的綠地專案,vibe code 出來的程式庫會朝 organic architecture 失控生長。她的處方是花六百多個 PR 把 Grokbot 重構到 Dune 架構,用禁 useEffect、禁註解、目錄相依檢查這類硬失敗把工程標準寫死,並把防線分層:架構最強、靜態分析與 CI 次之,BugBot 規則與 skill 這些軟層只能疊加不能當唯一依靠。由此導出兩個可直接執行的判準——「最短路徑就是最好的路徑」,以及「每次你必須在 PR 上留言糾正,都是把它變成 lint 規則或 CI failure 的訊號」。最後兩段把成本與收益接回來:這些投資很燒 token,但它讓一個人做到以前做不到的事,也讓 PM 與設計師能安全地直接送出 PR——嚴格架構不是刁難,而是讓更多人能高水準貢獻。

勘誤總整理

確定錯誤/已過時見仁見智(取決於版本或情境)

段落原話(transcript 逐字)說明
8. P-Stack 是觀察失敗模式長出來的
18:23
「pull the agent to a different latent space」「把 agent 拉到不同的 latent space」是社群流行的比喻,不是機制上的描述。給高品質 prompt 並沒有讓模型換到另一個表示空間,改變的是它在既有上下文下的輸出分佈(條件機率)。講者自己也說這是「花俏的說法」,但聽者容易把它當成技術事實。
依據: 講者原話下一句即為 which is kind of like a fancy way of just saying…
15. Dune 的硬約束:連註解都禁
41:26
「we've banned use effect」全面禁用 useEffect 是相當激進的取捨。React 官方的立場是它被大量誤用,但它仍是「與外部系統同步」(訂閱、手動 DOM 操作、非 React 的第三方元件)的正規逃生口;完全禁用意味著這些情境必須由框架另外提供替代機制。在 Dune 這種自帶完整框架的環境裡說得通,直接照抄到一般 React 專案則可能無路可走。
依據: React 官方文件〈You Might Not Need an Effect〉建議的是減少誤用,而非停用
15. Dune 的硬約束:連註解都禁
42:00
「banned code comments as well」她給的理由(agent 常把針對單一 PR 的一句指正寫成永久的全域註解)是真實觀察,但結論偏一刀切。註解仍是記錄「為什麼這樣做」的少數手段,尤其是繞過某個外部限制或非直覺的取捨;把它整個禁掉等於把這類資訊全部推給 commit message 與 PR 描述,而那些東西在讀程式碼時並不在眼前。這是取捨而非定論。
依據: 同段講者自述理由為「99% 的情況 agent 寫的註解在記錄無關的歷史」
17. 選技術棧,也把 review 變成規則
49:23
「if the code compiles, it's probably works and it's good」Rust 編譯器保證的是記憶體安全與型別正確,不是邏輯正確——能編過的程式一樣可能算錯答案、呼叫錯 API、寫錯商業規則。講者自己有加上 more or less、somewhat、probably 等緩衝詞,但這句話容易被讀成「編過就不用驗證」,而那會和她自己排在第一位的 verification 相矛盾。合理的讀法是:編譯器擋掉的那一類錯誤人不必再查,其他類別仍然要靠測試與實際執行。
依據: 同一場她把 verification 列為最重要的能力(約 07:52 起)
19. Grokbot:非工程師的 Cursor 時刻
54:46
「the cost per token is the same as 4.5」這是她臨場補充的價格資訊,她自己也先聲明「希望我沒講錯」。定價會隨時間調整,而且輸入、輸出、快取讀取的單價通常不同,「每 token 成本相同」不一定對所有計價項目都成立。要引用這個數字前,請以官方定價頁的當期資訊為準。
依據: 講者原話前一句為 hopefully I'm not saying this incorrectly

5. 推薦三個下一步

1. 往下挖深:自己動手做 agent 的 eval

她說 skill 的維護靠 eval、選題靠人,但只描述了 P-Stack 裡 eval playbook 的樣子。要真的照做,缺的是 rubric 怎麼訂、judge model 怎麼避免偏誤、分數怎麼拿來爬山這些具體做法。

YouTube 搜尋:LLM eval rubric LLM as a judge agent evals for coding agents evaluation awareness LLM

2. 往旁邊對照:別人的 agent 工作流與 skill 寫法

P-Stack 是她個人工程標準的編碼,她自己也說不要盲目信任、應該 fork 成自己的。看幾套不同的 skill/AGENTS.md 實務,才知道哪些是通則、哪些只是 Cursor 內部的特殊解。

YouTube 搜尋:AGENTS.md best practices Claude Code skills workflow agentic coding workflow subagents Garry Tan G-stack plugin

3. 往上應用:把工程標準硬化進自己的程式庫

整場最可直接照抄的是「把人工 review 變成硬約束」,但她沒示範怎麼做。要落地就得知道自訂 lint 規則、目錄相依邊界檢查、architecture fitness function 這些工具實際長什麼樣。

YouTube 搜尋:write custom eslint rule dependency cruiser architecture boundaries architecture fitness functions monorepo import restrictions CI

📄 全部影片 · 主題區: 工程職涯與架構角色