現在是下午 4 點,從午餐後就有三個 coding 代理在同一個 repository 上工作。一個修好了購物車總額的四捨五入,一個加了折扣碼,一個寫了測試。三個都回報 "done"。在任何東西碰到 main 之前,你會想知道兩件事:有沒有兩個代理改寫了同一個函式?三個改動合在一起還能不能通過測試?
一個 codebase,三個畫面
osFoundry 是一款桌面應用程式,把聊天、代理、檔案和工具放在同一個視窗裡;在程式碼方面,它提供三個彼此相關的畫面。Code 是你同時把任務交給多個代理的地方:每個 run 都有自己的 Git 分支和自己的工作資料夾(worktree),你可以先審查、測試、預覽合併結果,再決定要不要動手。不會有任何東西自己合併。IDE 是針對本機資料夾的程式碼編輯器,有檔案總管、版本控制、終端機、Problems 和 Tests 面板,還有一欄看得到你目前開啟檔案的助理。Wiki 會讀取你電腦上的 repository,寫出引用 path:line 的文件頁面,並在被引用的程式碼改變時標記該頁。Code 和 Wiki 是分頁,跟 Maestro、Model chat、Multi chat 和 Research 並排;IDE 則在側邊欄有自己的項目。如果你用過附 Git 面板的 VS Code,IDE 會讓你覺得很熟悉。Code 比較像是 pull request 收件匣,只是作者換成了你的代理,而且分支從來沒離開過你的筆電。
看一下 Code 分頁
這個畫面上可以看到的東西(run 是範例資料):
- 側欄頂端的橫幅。"3 agents finished · they disagree on 1 file" 會在你打開任何一個 diff 之前,就先點出檔名,這裡是
src/cart.js。按下 Review together 按鈕就會開始共同審查。 - run 側欄。run 會依照它們需要你做什麼來分組:Ready to review、Needs attention,以及收合起來的 History。每一列會顯示任務、新增和刪除的行數、代理工作了多久,以及它的分支。
- 中間的對話。點一個 run,就能看到當初交代代理做什麼,以及它在工作時說了什麼。
- 右側面板。Changes、Files、Commits、Review 和 PR 分頁會顯示每個 run 的實際 diff,先是尚未 commit 的工作,接著是已經 commit 到它分支上的內容。
- 右下角的 Merge station。選好已完成的 run,就在這裡測試它們,並預覽把它們合在一起的結果。
使用情境:一位 tech lead 在同一個 repo 上用三個代理
Dana 帶一個小型網頁團隊,把一個結帳功能的 sprint 拆成三個代理 run:修正購物車總額的四捨五入、在結帳流程加入折扣碼、替價格格式化函式寫測試。每個 run 都是從 New run 開始,配一行任務描述和挑好的代理,所以各自有自己的分支和資料夾,工作時誰也不會踩到別人的檔案。
橫幅說它們意見不一致時,她勾選三個 run,按下 Review together。Merge 面板顯示 "3 runs · conflicts not checked yet · 3 not yet tested",這是一句誠實的「還不知道」,而不是綠燈。下方的 src/cart.js 被標成 contested,各分支的 hunk 並排列出:四捨五入的修正和折扣碼都改寫了 total()。
接著她對每個 run 按下 test。測試會在該 run 自己的 worktree 裡執行,所以她自己的 checkout 完全不會被動到。預設是 "Tests must pass before a branch can merge",這條規則可以在 Settings 裡修改。三個都通過了,但各自通過不等於合起來也通過,所以她按下 Preview combined merge。應用程式會先在一份用完即丟的副本裡合併這些分支,再回報結果:兩個可以乾淨合併,一個有衝突。
她把兩個乾淨的分支合併進自己目前的分支。直到這一刻,她的分支才有變動。折扣碼的分支保留下來,讓代理可以在四捨五入修正的基礎上重做它的改動。如果她想要的是每次嘗試裡最好的部分,而不是整個分支,可以用 Combine into a branch 一個個勾選 hunk,用它們建立新的分支。
還有一個在漫長工作日裡很重要的細節:如果應用程式在 run 還在工作時停止,這個 run 回來時會顯示 Interrupted,而不是 "running",並附註它的分支已保留。
使用情境:一個人開發、跟助理一起重構
Kenji 一個人維護一個網路商店的前端。今天早上他要改 formatPrice,但不太確定有哪些地方呼叫它。他從側邊欄在 IDE 裡開啟專案資料夾。編輯器的版面就是大家熟悉的那樣:左邊是 Explorer 和 Source Control,中間是分頁,下方是 Terminal、Output、Problems 和 Tests,右邊是 Assistant,他可以在那裡開一個同步的聊天,或是只留在裝置上的本機聊天。
他在 formatPrice 上按右鍵,選 Show Code Graph。面板會列出 Callers 和 Calls。實心圓點代表這個呼叫是直接從程式碼讀出來的;空心圓點代表是推測出來的,那一個就值得自己再看一眼。Impact of change 會一路追到呼叫者的呼叫者,在這個例子裡顯示 "15 symbols · 14 files · 3 tests"。點一列就會跳到那一行,Send to chat 則會把整張圖當作上下文交給助理。
稍後,助理幫他改了一個設定檔。在 Source Control 裡這個檔案顯示為已修改,打開時會有一個小機器人標記,狀態列也會顯示它最後是由 AI 寫入的,附上模型和它給的理由。Review 會開啟一個並排 diff,對照的是那次寫入前一刻存下的副本,所以他只會看到那一個改動。這裡顯示 timeout 從 30 秒被砍到 3 秒,正好就在一行註解下面,註解寫著大型上傳要 20 秒以上。他在 commit 之前就抓到了。
如果代理寫入一個他還有未儲存修改的檔案,編輯器會告訴他:你編輯期間這個檔案在磁碟上被改過了,並讓他選 Keep mine 或 Use the disk version,而不是默默替他挑一個。
使用情境:一位只需要看懂程式碼、不用修改的支援工程師
Priya 在客服部門工作,常被問到產品某個部分的行為是怎樣。她看得懂程式碼,但不想在一個不屬於她的 repository 裡到處 grep。她在 Wiki 裡用 Open a folder(或用 https 或 git@ 網址執行 Clone a public repository),應用程式就會在她的電腦上讀取專案結構。
在寫入任何東西到專案之前,Wiki 會先問。對話框會寫出它要在 repo 裡建立的確切資料夾,如果她按 Not now,就什麼都不會寫入。同意之後,她可以用 Generate pages,或針對單一主題用 Write a page。設定決定每一頁要根據多少原始碼來寫(Depth:Quick、Standard 或 Deep),以及要檢查多少論述(Verification:Off、Sample 或 Full,Full 大約會讓費用翻倍)。產生頁面之前就會先顯示費用。
每一頁都會引用 path:line,點一下引用就會在 IDE 裡開啟那一行。一個月後,側欄裡有一頁被標記,因為 "a file this page cites has changed since it was written",提醒她要先重新產生再相信內容。遇到臨時的一次性問題,她會用頁面旁邊的聊天,回答同樣會引用該專案的 path:line,她也可以直接用白話要求新頁面,例如 "write a page about the retry policy"。這些頁面本身就是 repository 裡的 markdown 檔案,所以團隊可以在跟程式碼同一個 pull request 裡審查它們。
Code、IDE 和 Wiki 之間怎麼交棒
這三個畫面會互相傳遞工作,也會交給應用程式的其他部分。Wiki 的引用會在 IDE 裡開到被引用的那一行,反方向則可以用 IDE 裡的 Wiki for this folder 按鈕。IDE 的 Assistant 和 Wiki 頁面旁的聊天都是建立在 Maestro 上,也就是你在 osFoundry 其他地方用的同一個助理,所以在那裡提問的方式跟任何 Maestro 聊天都一樣。想要依照意思、而不是精確字詞來搜尋 codebase 的話,Indexes 會建立一個 Maestro 可以使用的本機搜尋索引。等 Code 裡的某個 run 準備好離開你的筆電時,Open PR 會替它的分支開一個 pull request。
大家最先問的問題
一定要用桌面應用程式嗎?
是的。Code、IDE 和 Wiki 都要用到本機資料夾、Git worktree、shell 和語言伺服器,所以它們在 osFoundry 桌面應用程式裡執行。
代理會不會自己合併到我的分支?
不會。run 都在各自的分支、各自的資料夾裡工作。只有在你按下 merge 時,你目前的分支才會改變,而且預設只限測試通過的分支。
Wiki 是像 Notion 那樣的團隊 wiki 嗎?
不是。它是從程式碼 repository 寫出文件,引用檔案和行號,並在那段程式碼改變時標記頁面。它是給 codebase 文件用的,例如架構總覽或新人上手筆記。
有衝突的分支會怎樣?
它會留在原地。你可以先合併乾淨的分支,再讓代理在它們之上重做有衝突的那個,或用 Combine into a branch 挑選個別的 hunk。
桌面應用程式可以在 osfoundry.io/zh/download 免費下載。





