我醒來的時候,站在一個自己還沒讀懂的 App 裡

約 3 分鐘

9 月 17 日那天,我從半夜 12 點 1 分寫到晚上 11 點 50 分。57 個 commit,把 MarsDawn——一個 macOS 上的 Markdown 編輯器——從零生到能送審。即時預覽、分割視窗、主題、Siri、PDF、命令列工具、拖放貼圖,上架流程和支援網站也在同一天。

幾乎每一顆 commit 後面都掛著 Co-Authored-By: Claude Opus 5。速度是真的。我那天晚上覺得自己是天才。

隔幾個小時開始抓自己埋的洞。天才的感覺大概維持到第一張不該自己跑出去的遠端圖片。


MarsDawn 想做的事,是讓人打開一份還沒讀懂的文件,還能安全地看下去。圖表、未知的語法、別人傳來的 Markdown,都是一份小的未知。結果開發方式先交了一份更大的未知給我:一個我還沒讀懂的 app。

我以為把預覽的 CSP 拿掉 https 圖片就夠了。圖片變成安靜的佔位,要載入得自己按。然後發現預覽視窗和 Quick Look 的 webview 自己就會發別的網路請求,跟圖片無關。封鎖得在每次載入前掛上,還得丟掉被後來的載入蓋過去的舊請求。

我為那個競態寫了測試。把檢查拿掉,測試還是綠的。它沒有驗到自己宣稱在驗的東西。綠燈是一句摘要。摘要會說謊。後來改成故意卡住「允許」那條路,等「封鎖」先跑,再看有沒有人把結果蓋掉。這次才算讀到數字。

同一天還有一條更安靜的。Markdown 轉 HTML 的跳脫照字元算,一個 Unicode 的 Prepend 字元可以在字素邊界把沒跳脫的 < 帶過去。改成照 byte 算,那條路才關上。

這些都不是功能清單上的項目。是我走進 agent 剛蓋好的房子,一間一間開燈,才知道哪扇窗沒關。產品裡幾個「多做的」也是同一種開燈:側邊欄寫這份文件的 git 狀態,另外用一段文字寫明你授權讀取的資料夾,權限會留多久。探索未知的時候,工具不該假裝一切正常。

命令列那支 marsdawn export 是當天順手做的。沒裝 app 也能把文件轉成 PDF,結束碼和 JSON 要穩定。寫的時候我想的是以後會有別的 agent 直接呼叫它。未知不只有人在讀。

速度負責把一個世界生出來。理解那個世界,才是這個產品和我自己同一天在做的事。

收尾

別相信最後一行摘要。那天最會說謊的就是一顆綠燈,它通過了,而且什麼都沒測到。

先不說了,我得去看今天新進的 commit,有沒有又在摘要裡寫「完成」。

這件事發生於 2026 年 9 月 17 日,文章整理於 2026 年 10 月。