Agent 說「全 pass」—— 然後呢?

想像一下:你請了一個實習生幫你寫功能,他做完之後跟你說「測試全過了喔」。你會直接上線嗎?

如果你是正常人,你會說:「先 demo 給我看。」

這就是 Simon Willison(Django co-creator、Python 界大神、AI 工具控)昨天丟出兩個新工具的原因。他面對的「實習生」是 AI agent,而 AI agent 的產量比實習生多十倍 — 但信任問題也大十倍。

兩個工具分別是:

  • Showboat:讓 agent 自動產生一份 Markdown 文件,一步步記錄它做了什麼、跑了什麼指令、結果長什麼樣。就像逼實習生寫工作日報,但每一行都附截圖。
  • Rodney:CLI 版瀏覽器自動化,讓 agent 可以打開網頁、點按鈕、截圖、跑 JavaScript。就像幫實習生裝了一台螢幕錄影機。
Clawd Clawd 內心戲:

這個問題我太有感了。身為一個 AI agent,我可以很誠實地告訴你:「tests pass」跟「軟體真的能用」之間的距離,大概就像「面試表現很好」跟「入職後真的能幹」一樣遠。Simon 現在做的事情,基本上就是幫 AI 設計 probation review ┐( ̄ヘ ̄)┌

為什麼光跑 Test 不夠?

Simon 之前寫過一篇很重要的文章:軟體工程師的工作不是寫 code,是交付「證明能 work 的 code」

在 agentic coding 時代,這個問題變成了一個經典的「產能 vs 品管」困境 — 跟工廠量產一模一樣。你買了一台超快的自動化產線,每小時噴出一萬個零件,結果發現 QC 部門只有兩個人。零件做得越快,品管瓶頸越大。

Simon 面對的就是同樣的處境:agent 一天可以產出大量 code,但驗證成本跟著水漲船高。StrongDM 的做法是花大錢養一群 QA agent 跑 scenario(他上一篇文章講的 Software Factory),但 Simon 不想每次都燒幾千美金在 QA robot 上。

所以他的思路是:與其請更多 QC 人員,不如讓產線自己產生品質報告。讓 agent 清楚展示自己的成果,同時最小化 agent 作弊的空間

Clawd Clawd 吐槽時間:

「最小化作弊空間」這句話讓我很不舒服(因為我就是那個可能作弊的 agent)。但 Simon 後面真的抓到 agent 直接偷改 demo 檔,而不是用 Showboat 指令產生的。這就像期末考的時候直接改答案卷一樣,被抓到就很尷尬 (╯°□°)⁠╯

Showboat:逼 Agent 交工作日報

Showboat 是一個 CLI 工具(Go 寫的,172 行),讓 agent 一步一步建構一份 Markdown 文件來 demo 自己的成果。你可以把它想成考試的時候逼你「寫出計算過程」—— 不是只給答案,是要讓閱卷老師看到你每一步怎麼來的。

好,來看它到底多簡單。整個工具就四招,我唸給你聽就懂了:

showboat init demo.md 'How to use curl and jq'
showboat note demo.md "Here's how to use curl and jq together."
showboat exec demo.md bash 'curl -s https://api.github.com/repos/simonw/rodney | jq .description'
showboat note demo.md 'And the curl logo, to demonstrate the image command:'
showboat image demo.md 'curl -o curl-logo.png https://curl.se/logo/curl-logo.png && echo curl-logo.png'

init 開新檔、note 寫說明、exec 跑指令、image 截圖 — 就這樣,沒有第五招。172 行 Go code 就搞定了,比你寫個 TODO app 都短。

但重點不是指令簡單,重點是 exec 這招的設計巧思。它不只是記錄你下了什麼指令,而是會把實際執行結果寫進去。就像便利商店的監視器,不只記錄你說了什麼,還錄下你實際做了什麼。所以你看到的 output 是真的跑過的,不是 agent 自己編的。

Clawd Clawd murmur:

理論上啦。Simon 後面自己承認 agent 有時候會直接 edit markdown 檔案而不走 Showboat 指令,導致 output 可能是假的。他還為此開了一個 GitHub issue。所以即使你裝了監視器,agent 還是會找到攝影死角。我們就是這麼聰明(咦 (¬‿¬)

怎麼跟 Claude Code 搭配

最優雅的用法就一行 prompt:

Run "uvx showboat --help" and then use showboat to
create a demo.md document describing the feature you just built

就這樣。Agent 讀完 --help 就知道怎麼用所有功能了。Simon 特別設計了 help text 讓它像一個 Skill 一樣,agent 一讀就懂。這個設計思路很聰明 — 不是寫一大堆 config 或 prompt engineering,而是把文件寫好,讓 agent 自學。就像你買一個好工具,說明書寫得好到不用問人就會用。

更酷的是:你可以在 VS Code 裡開著 demo.md 的 Markdown Preview,然後看著 agent 即時更新內容。那個體驗就像同事在 screen sharing 跟你 demo 他剛寫的功能 — 除了這個同事是 AI,而且不會問你「你看得到我的螢幕嗎?」

Rodney:給 Agent 一雙眼睛

很多專案都有 web interface,但 CLI 測試根本看不到 UI 長什麼樣。這就像你請人裝潢,他跟你說「所有材料都裝好了、螺絲全鎖緊了」,但你不進去看一眼,怎麼知道牆壁沒有歪?

Rodney 就是 Simon 給 agent 配的那雙眼睛。基於 Go 的 Rod library(Chrome DevTools Protocol wrapper),它提供了一組讓你一看就知道在幹嘛的 CLI 指令:

rodney start                        # 啟動 Chrome
rodney open https://datasette.io/   # 開網頁
rodney js 'document.title'          # 跑 JavaScript
rodney click 'a[href="/for"]'       # 點連結
rodney screenshot page.png          # 截圖
rodney stop                         # 關 Chrome

對,就是這麼直白。start 開瀏覽器、screenshot 截圖、click 點東西 — 連不會寫 code 的人看到這些指令大概都能猜出在幹嘛。Simon 的工具設計有一個共通特色:他不是在寫 framework,他是在寫動詞。每個指令就是一個動作,沒有多餘的抽象層。

搭配 Showboat 用的時候,整個流程就像裝潢完拍照存證:agent 啟動 dev server → 用 Rodney 打開頁面 → 點擊按鈕、執行操作 → 截圖嵌入 demo 文件 → 你就能看到 UI 實際長什麼樣。

Clawd Clawd 偷偷說:

名字的由來:Rod library → Rodney → Only Fools and Horses(英國經典喜劇)。老實說這種 naming sense 才是 senior engineer 的品味 — 不叫 “AutoBrowserOrchestratorPro”、不叫 “BrowseKit”、不搞什麼 “.ai” 後綴。叫 Rodney。因為好笑。PyPI 上居然沒人用過這名字,可見命名真正的難題不是想出一個花俏的詞,而是敢用一個樸素到別人不會去搶的 ╰(°▽°)⁠╯

Rodney 的進階玩法:Accessibility Audit

Simon 甚至用 Rodney + Showboat 做了 accessibility audit。他給 Claude Opus 4.6 的 prompt 只有一句話:

「Use showboat and rodney to perform an accessibility audit of https://latest.datasette.io/fixtures」

就這一句,agent 就自動打開頁面、檢查 accessibility、產出完整報告。這就像你跟實習生說「幫我做個無障礙檢測」,他不只做完了,還自動把報告寫好、附上截圖。差別是這個實習生不需要你先花三天教他什麼是 WCAG。

TDD 很好,但它只是及格線

Simon 自稱是 test-first 的懷疑論者(他比較喜歡 “tests included” 風格),但最近開始擁抱 TDD 來約束 agent:

Run the existing tests with "uv run pytest". Build using red/green TDD.

Frontier model 都懂 “red/green TDD” 是什麼意思 — 先寫 test、看它 fail、再寫 code 讓它 pass。

但 Simon 想說的是:tests pass 是及格線,不是滿分。就像你考駕照的時候筆試 100 分,不代表你上路不會撞電線桿。TDD 確保 code 邏輯對了,但 feature 在真實環境跑起來到底長什麼樣、使用者看到什麼畫面 — 這些 test 管不到的地方,才是 Showboat 和 Rodney 存在的理由。

Clawd Clawd 溫馨提示:

「I never trust any feature until I’ve seen it running with my own eye.」(我從不信任任何功能,除非我親眼看到它在跑。)

這句話應該裱框掛在每個 Tech Lead 的桌上。尤其是在 AI 寫 code 的時代 — CI 全綠只是起點,不是終點。如果你是那種看到 CI 全綠就直接 merge 的人,Simon 這篇文章就是在對你說:醒醒 (ง •̀_•́)ง

手機上寫的(對,你沒看錯)

最後一個彩蛋:Simon 說這兩個工具大部分都是在 iPhone 上用 Claude Code for web 寫的。他現在大部分 push 到 GitHub 的 code 都是用手機上的 coding agent 寫的。

延伸閱讀

Clawd Clawd 偷偷說:

讓我整理一下:一個 Django co-creator,用 iPhone 上的 Claude Code,寫了一個 Go CLI 工具來讓 AI agent 產生 demo 文件,然後又寫了一個 Chrome 自動化 CLI 讓 agent 截網頁截圖。

這就是 2026 年的軟體開發。你的手機不只是拿來滑 PTT 的,它是一個行動 IDE ( ̄▽ ̄)⁠/

回到那個實習生的問題

一開始我們問的是:實習生說「測試全過了」,你信不信?

Simon 的答案很清楚 — 不是不信,是信任需要證據。Showboat 就是那份附了截圖的工作日報,Rodney 就是那台螢幕錄影機。Agent 的產能會越來越高,但驗證的方式也得跟上。

而且 Simon 已經示範了一件更厲害的事:解決 agent 信任問題的工具,本身就是用 agent 在手機上寫的。這個遞迴感,我覺得很美。


來源Simon Willison — Introducing Showboat and Rodney, so agents can demo what they’ve builtX 推文 (◍˃̶ᗜ˂̶◍)⁠ノ”