程式任務
程式看板將一份寫下的需求簡報,以你想要的最少繁文縟節,變成已合併的程式碼:寫下你需要的東西,用互動式的規劃代理程式將它 Plan(規劃成可審閱的階段),或以 One shot 一次搞定,看著代理程式在它自己的 git worktree 裡工作,以固定於行的註解審閱 diff,然後合併。每個階段是一欄;每項任務是一張卡片。
側邊欄在靠近頂部保留一個纖細的 TASKS 區段——一條脈動列會摘要看板(9 項已規劃 · 1 項進行中 · 2 項待審閱),並以橘色徽章計算在 Testing/Review 等待的卡片,以及當某個代理程式需要你的輸入時的紅色徽章。點按區段標題或該列即可開啟看板,或在任何地方按 ⇧⌘T。
| 欄 | 這裡放什麼 |
|---|---|
| Backlog | 你寫好但尚未開始的需求簡報。每張卡片提供 Plan 與 One shot。 |
| Plan | 規劃代理程式從需求簡報歸檔的階段卡片——已編號、懂得依賴、可多選。 |
| In Progress | 代理程式正在積極處理的階段與 One shot 任務,各自位於自己的 worktree 中。 |
| Testing/Review | 等你處理的已完成工作:卡片會開啟顯示分支 diff 的審閱視窗。 |
| Done | 已合併、已開 pull request,或未合併即關閉的任務。 |
此頁面上的一切在遠端豐富型用戶端上運作方式完全相同——看板、規劃視窗與審閱視窗全都透過控制 API 鏡像。
撰寫任務
+ New Task(或點按某張 backlog 卡片)會開啟編輯器:
- 一個 Title,以及以 Markdown 撰寫的 description,附有 Write / Preview 切換。需求簡報會成為代理程式的提示,所以請像寫提示那樣寫它。
- Workspace 與 Agent——任務會在所選的工作區內,以其某個已設定的代理程式執行。
- Start the agent in——工作區內的一個資料夾。當它本身是一個 git 儲存庫時,任務會在那裡於一個全新的 worktree 與分支中執行。
- Create folder & git repo if needed——用於全新開發:當資料夾尚非其自身的儲存庫時,開始或規劃會先執行
mkdir+git init(附一個空的根提交)。對於現有儲存庫內的資料夾,請保持關閉。
Backlog 中的需求簡報提供兩個按鈕:
- One shot 會將任務直接送入 In Progress:代理程式自主完成整件事,並在 Testing/Review 把 diff 交給你。
- Plan 會先開啟一個規劃工作階段。
規劃
Plan 會啟動一個 可見且互動 的規劃工作階段並開啟其視窗——一個原生的對話檢視,不需要終端機。工作階段以 你的需求簡報 開場,並以卡片形式呈現;代理程式以唯讀方式探索儲存庫、敘述它所發現的內容,並在需求簡報留有真正的抉擇時提出問題。
問題會以 分頁卡片 的形式抵達——每個問題一個分頁,精確地反映代理程式在它自己工作階段中所顯示的選擇器。答案在本機收集,並在你按下 Submit 之前都可編輯,按下後會一次送出整組;誤點永遠不是定案。你也可以在視窗底部的輸入框中鍵入自由格式的答案,或按 Open Terminal 觀看原始工作階段。
當代理程式取得所需,它會將計畫歸檔到看板上——在 Plan 欄中排好序的 階段卡片,每張大約是一個可審閱的 pull request 的工作量,彼此之間帶有依賴關係——並記錄一份計畫概觀。視窗接著會顯示 Plan is ready 連同階段數與一個 Close 按鈕,規劃工作階段的分頁會自行關閉,而需求簡報會離開 Backlog(其階段取代了它;把它們全部刪除,它就會回來)。
規劃受到看管:若工作區重新開機、代理程式被結束,或工作階段在階段歸檔前死亡,卡片的旋轉圖示會以一個具體原因結束——點按 Plan 以重試——而不是永遠轉個不停。
Plan 欄
階段卡片依計畫順序編號,並帶有:
- 當該階段需要先讓較早的階段 Done 時的 依賴徽章(一把附有階段編號的鎖)。
- 當你在其依賴關係完成前就啟動它時的 queued 徽章——一旦它們全部 Done,它就會自動開始。
- 其母需求簡報的名稱。
用核取方塊選取多個階段,選取列便會出現:Start N selected 會將每個都 One shot(受依賴關係管制的階段會進入佇列)、Clear 會放棄選取,而 Delete 會在一次確認後移除整個選取。編輯某個階段會顯示其 Depends on 清單——每個同層階段都附一個核取方塊,因此可以手動重新安排依賴關係。
階段會 完全自主地 執行——一旦開始,就不預期任何互動輸入。
In Progress
已啟動的任務會在需要時啟動工作區、建立儲存庫的一個全新 worktree,並以需求簡報作為提示啟動代理程式。卡片會顯示即時的代理程式狀態圓點、其開始時間,以及當代理程式卡在某個問題上時以紅色顯示的 Needs your input——點按卡片會跳至即時工作階段。側邊欄的 TASKS 徽章會計算這些,所以你絕不會漏掉任何一個。
當代理程式回報完成時,任務會移至 Testing/Review,其終端機分頁會自行關閉——一個已完成的工作階段不會被留著佔用分頁列。若代理程式改為當機,卡片會轉紅,而不是假裝在工作。
Testing/Review
Testing/Review 卡片會開啟 審閱視窗:該分支相對於其父級的完整 diff,從 VM 即時讀取,附有每個檔案的展開器、新增/移除計數,以及代理程式所記錄的任何計畫。
像審閱 pull request 一樣審閱:
- 行內註解:將游標移到任何新增行或上下文行上,並點按邊界的泡泡,即可將一則註解附到那確切的行上;固定的註解會呈現在其所屬的行下方。檔案層級與一般性的註解也可運作。
- Send Back to In Progress 會把每一則草擬的註解交付給代理程式——格式為 In
foo.js, line 196: use a different method——而任務會回到 In Progress 進行另一輪。代理程式會在同一個 worktree 與分支上恢復。 - Merge——這個分割按鈕的預設值會合併進父分支;長按它可使用 Squash & Merge、Create Pull Request…(當工作區有 GitHub token 時),或合併進任何其他分支。一次乾淨的合併會關閉它自己的終端機分頁;衝突則會改為開啟一個解決衝突的工作階段。
- Close Without Merging 會丟棄該輪,同時把紀錄保留在 Done 中。
提示: 同樣的行內註解工作流程也存在於看板 之外:當作用中的分頁執行著一個程式代理程式時,檔案總管的 diff 窗格會長出同樣的邊界泡泡,而 Send to agent 會把你的註解直接批次送進該工作階段——不必建立任何任務就能進行程式碼審閱。
移除卡片
每張卡片在游標移過時會長出一個 ✕(以及一個 Remove from board 的內容選單項目),並置於一次確認之後。對於背後有真實工作的卡片,對話框會提供選擇:Stop Agent & Delete Worktree(In Progress)或 Delete Worktree & Branch(Testing/Review)會把一切拆除,而 Remove Card Only 會讓工作階段與簽出在工作區內原封不動。
儲存與 API
任務會持久化在工作區儲存旁的單一檔案中,採用原子寫入與 ISO-8601 日期:
~/Library/Application Support/BromureAC/tasks.json
整個看板會鏡像到應用程式的控制通訊端上,供豐富型用戶端與指令碼使用:
| 端點 | 用途 |
|---|---|
GET /tasks | 列出每一項任務。 |
POST /tasks | 建立或更新(upsert)一份任務文件。 |
POST /tasks/<id>/start | 啟動它(worktree + 代理程式)。 |
POST /tasks/<id>/plan | 啟動規劃工作階段。 |
POST /tasks/<id>/comment | 新增一則審閱註解(text,選用 file 與 line)。 |
POST /tasks/<id>/send-back | 交付未送出的註解並把任務退回 In Progress。 |
POST /tasks/<id>/merge | 合併(squash,選用 target)。 |
POST /tasks/<id>/open-pr | 建立 pull request 而非合併。 |
POST /tasks/<id>/to-testing, /to-in-progress | 手動移動它。 |
POST /tasks/<id>/destroy | 停止代理程式、刪除 worktree 與分支、移除卡片。 |
DELETE /tasks/<id> | 僅移除卡片。 |
在底層,規劃代理程式與任務代理程式會透過一個以工作階段為單位的 看板 MCP 伺服器(vsock,主機端)回話給看板:board_get_task、board_set_plan、board_create_subtasks 與 board_ready_for_review 就是階段如何被歸檔、以及一項完成的任務如何宣告自己的方式——無需輪詢、無需抓取。這些工具會為每個受支援的代理程式自動接線:Claude Code 載入以分支為單位的 MCP 設定,Codex 取得以每次呼叫為單位的 mcp_servers 覆寫,而 Grok 讀取一份寫入工作階段簽出中(並排除於其 diff 之外)、以專案為範圍的 .grok/settings.json。