一位工程師人在小木屋,無線網路爛到「晚點再推」都很合理,卻還能只靠手機上的 Linear 推進三個有份量的修改。

這句話真正怪的地方不是「手機也能工作」,而是任務板開始像程式碼庫的遙控器。按下去的不是滑鼠游標,而是一張任務卡;被啟動的不是人類記憶,而是一個 Codex 工作區。

先把重複劇情扣掉:CP-179 已經介紹過 Symphony 的社群版骨架——Linear 任務單接到 Codex 工作區,重點是管理「工作」而不是管理 agent。官方版新增的價值,是把這個「任務板遙控 codebase」的模式寫成規格、參考實作和失敗回饋流程。

Linear 在這篇可以先想成任務板;PR 是一包準備審查與合併的修改;Codex App Server 暫時想成「外部工具叫 Codex 接工作的門」。名詞很多,但真正要看的只有一件事:任務板怎麼從待辦清單變成操作介面。

Clawd 偷偷說:

Clawd 會先記小木屋那張圖,不會先記 500% 那個數字 (◕‿◕)

數字容易變簡報煙火;畫面比較殘酷。它暗示工程入口正在鬆動:不是每件事都要從 IDE 開始,前提是工作要先被整理成代理程式接得住、工程師看得懂、系統追得上的形狀。


任務板以前只是地圖,現在開始像遙控器

任務板原本只是地圖:哪張卡還沒做、哪張卡進行中、哪張卡等 review。真正的工作通常藏在人的 IDE、終端機、聊天視窗和短期記憶裡。

Symphony 想改掉這件事。任務卡沒有被封鎖,就能開出對應的 Codex 工作區;代理程式如果掛掉,可以重啟;做完的修改、測試輸出、影片證據,回到卡片旁邊,變成一包可審查的結果。

所以小木屋那位工程師不是用手機寫程式碼。手機上看到的是這張卡目前狀態:Codex 是否接到、結果是否回來、證據夠不夠、下一步能不能放行。手機不是縮小版 IDE,而是任務狀態的遙控器。

OpenAI 內部某個生產力工具團隊先做過一個激進實驗:專案程式碼庫不收人類手寫程式碼,全部交給 Codex 生成。真正爆掉的不是 Codex 寫不出來,而是工程師同時顧三到五個 Codex 對話後,開始忘記哪個在跑、哪個卡住、哪個需要接手。

遙控器的價值就在這裡:它不是讓人類按更多按鈕,而是讓工作狀態不要塞在人腦裡。


遙控器按下去,回來的是審查材料

想像任務板上有一張卡:修一個介面問題。條件寫得很死:不能破壞既有測試;完成時要附測試結果;如果畫面有變,還要有產品裡跑起來的影片。

以前這張卡會先落到工程師腦袋裡。工程師開 IDE、開 Codex 對話、貼需求、等它跑、切回終端機看測試、再回任務板更新狀態。

在 Symphony 的版本裡,這張卡本身就是入口。需求如果寫清楚,結果可能不只是「Codex 改好了」一句話,而是一包審查材料:修改內容、測試紀錄、可驗證的畫面,甚至是功能在真實產品裡跑起來的影片。

這也解釋為什麼產品經理和設計師會出現在故事裡。他們不需要抓程式碼庫,也不用顧 Codex 對話;需求寫清楚,就可能先拿回可看的版本。工程師仍然負責方向、風險、可維護性、測試、衝突處理,以及最後是否合併。

部分團隊在導入後前三週,已合併 PR 增加 500%。這個數字要連同邊界一起讀:部分團隊、前三週、已合併 PR。它是早期案例自述,不是全公司長期產能永久翻五倍。


SPEC.md 是遙控器的接線圖

第一版 Symphony 很粗:一個 Codex 對話定期去看 Linear,有新任務就開工。能動,但不穩。後來它搬進 OpenAI 那個「不接受人類手寫程式碼」的程式碼庫,靠既有測試與工具穩下來,最後變成用 Symphony 開發 Symphony。

開源版沒有把內部完整系統整包丟出來,而是先給 SPEC.md 和參考實作。這比較像接線圖:任務怎麼進來、Codex 怎麼接、結果怎麼回去,寫到外部團隊能照著重做。

接著是規格檢查:讓 Codex 根據同一份規格,用不同技術棧各做一次。目的不是養一排版本,而是逼規格露出缺口。某段描述在一種環境能跑,換一種環境就歪掉,問題可能不是技術棧麻煩,而是 SPEC.md 少寫了一個工程師平常會默默補上的動作。

Clawd 吐槽時間:

這段比 500% 更值得偷學。規格文件平常很容易變漂亮作文:大家點頭、PR 合併,三個月後才發現每個人腦中的版本都不一樣。

叫代理程式照同一份規格用不同方式做幾次,就是便宜版壓力測試。文件如果真的清楚,會活下來;如果只是看起來清楚,第一輪實作就會開始冒煙。


遙控器最重要的是撞牆後會記住

那張介面卡第一次不一定會成功。Codex 可能改到錯的地方,可能測試漏跑,可能影片沒附,可能把一個看似簡單的畫面問題牽進更大的架構判斷。

最省事的做法是工程師手修。這能救一個 PR,但救不了下一張卡。Symphony 的工程習慣,是把失敗當成系統材料:失敗模式可以變成測試、檢查、操作指令、工作說明。代理程式撞牆的位置,下一輪就該多一支護欄。

這也解釋為什麼 Symphony 不打算被包成獨立產品長期維護。它會刻意保持小,重點不是賣一套萬用任務板,而是示範 Codex App Server 這扇門可以怎麼接外部工作系統。Linear 只是這次被接上的那一端;真正被展示的是模式。

如果任務板真的變成 codebase 遙控器,最大的風險不是按鈕太少,而是按鈕太容易按。所以邊界比入口重要:模糊、需要高判斷力、驗收條件還沒長出來的問題,仍然適合工程師直接跟 Codex 互動。

Symphony 適合的是另一類工作:目標能寫清楚,檢查能自動跑,結果能被審查,失敗能回饋成下一輪規則。任務描述如果太模糊,系統就無法可靠分派;任務描述足夠明確,後面的生成、驗證和審查才有路徑可走。

回到小木屋那支手機。真正厲害的不是手機可以遠端控制 Codex,而是那張任務卡已經被整理到足夠清楚:工程師不用坐在 IDE 前,系統也知道下一步該往哪裡走。

這才是 Symphony 官方版補上的工程問題:寫程式變快以後,工作要怎麼被交出去、驗回來,並把失敗轉成下一輪可重用的檢查。