背景任務
agent 可以在回答之後讓工作繼續執行:dev server、耗時很久的建置,或自行運作的 subagent。OAR 把這稱為背景任務。輸入區上方的任務面板會列出這些任務,讓你逐一停止,也能開啟指令的輸出;agent 對已結束任務的報告則會以一則獨立的回覆送達。
哪些算是背景任務 #
- agent 留在執行中的 shell 指令,例如 dev server 或耗時很久的建置。0.9.12 新增 在 Grok 上,則是每個執行超過兩秒的指令。
- 在背景運作的 subagent。Subagent 有自己的頁面;在這裡它們只是面板中的又一列。
- 監控任務,以及在 Claude 上的 Ultracode 工作流程(見 Ultracode 工作流程)。
當 agent 已經回答、只剩這類任務時,對話已不在執行回合,但也不算閒置。其他 agent 看到的是狀態 background_(見其他 agent 怎麼看到它)。你看到的則是任務面板:只要還有任務在執行,它就會一直顯示。對話清單用標題的顏色呈現這一點:有回合或背景工作在執行的 session 會保持亮綠色標題(見每一列顯示什麼)。
任務面板 #
面板就在訊息框正上方。它收合成一行,例如 2 background tasks running(2 個背景任務執行中),任務執行時附有轉圈圖示;列出已結束的指令時還會加上 · 1 finished。點選這一行即可開啟清單。沒有東西可顯示時面板會隱藏;列數超過可容納的範圍時,清單可以捲動。
每一列顯示:
| 部分 | 說明 |
|---|---|
| 圖示與類型徽章 | shell 指令為 Bash,subagent 為 Subagent(或 agent 自己的類型,例如 Explore),另有 Workflow(工作流程)、Monitor |
| 描述 | agent 為任務取的名稱。在 Claude 和 DeepSeek 上,點選 subagent 的描述會開啟它的紀錄。0.9.12 新增 點選 shell 指令或監控任務的描述會開啟它的主控台 |
| 活動行 | 任務此刻正在執行的工具呼叫,否則是它的進度摘要 |
| 模型與 token | 在供應商有回報時顯示 |
| 步數 | 0.9.12 新增 subagent 已發出的工具呼叫次數,例如 22 steps,在供應商有回報時顯示 |
| 測試執行小標籤 | 0.9.12 新增 指令的輸出是測試執行時顯示 ✓ 412 ✘ 2 |
| 靜默提示 | 0.9.12 新增 指令變得靜默時顯示 no output for 12 min。0.9.13 新增 管線接到 tail 的指令,滑鼠移上去會說明原因(管線接到 tail 的指令) |
| 經過時間 | 面板開啟時持續累計,顯示為 42s、4m 20s 或 1h 5m |
| Stop(停止) | 只停止這一個任務 |
執行中的列沒有另外的狀態標籤:面板中的任務就是在執行中。subagent 結束時就會離開面板;shell 指令或監控任務則可以作為已結束的列保留一小時。按下 Stop 後,按鈕會顯示 Stopping…(正在停止…),直到面板下次更新,最多 15 秒。
在 Copilot 的 SDK 引擎上,若 Copilot runtime 無法列出它的背景任務,shell 就沒有 Stop 按鈕。這種 shell 只能用 Kill session(強制結束 session)結束(見什麼會結束任務)。
預覽卡片也在同一個面板中,位於任務上方。見你會看到什麼。啟動伺服器的任務結束後,預覽仍會讓面板保持開啟。
任務主控台 0.9.12 新增 #
在面板中點選 shell 指令或監控任務的描述,就會開啟它的主控台:也就是指令的輸出,讓你不必問 agent 就能看到建置、dev server 或測試執行正在做什麼。在手機上它會佔滿整個螢幕。0.9.13 新增 在較寬的螢幕上,它會停在面板中該任務那一列的上方,讓那一列的測試小標籤、計時和 Stop 保持可見,並在旁邊即時更新。按 Esc 鍵、×、點選主控台外側或返回鍵都能關閉它。
- 最後 2,000 行會在開啟時顯示,新的輸出會即時接續。往上捲動時會停在原處,Jump to end ↓(跳到最後)會帶你回到結尾。
- 頂端的 Load earlier(載入更早的內容)會往回翻閱整份記錄,每次最多 2,000 行,直到載入約 5 MB 為止。超過之後,按鈕會顯示 older output not loaded(較早的輸出未載入)。0.9.13 新增 只要還有更早的輸出,主控台的標題列也有同一個按鈕,所以你在追蹤長記錄的結尾時也按得到。
- 只重繪同一行的進度列只顯示最後的狀態;連續重複多次的一行只顯示一次,並加上
×N。 - 顏色會保留,所以紅色的失敗仍是紅色。0.9.13 新增 反白文字會對調顏色,所以 vitest 的 RUN、PASS 和 FAIL 徽章會以填色顯示。其他控制碼會被捨棄,每行在 4,000 個字元處截斷。
- 憑證會被遮蔽:常見格式的 token 和金鑰、
Bearer與Basic標頭、網址中的密碼,以及API_或TOKEN= password:這類名稱後面的值,都會顯示為[redacted]。0.9.13 新增 下列內容也一樣:curl -u name:的密碼、password --password、--token與--secret的值、mysql -p…、docker login -p、sshpass -p、redis-、AWS secret access key、Slack webhook 路徑、網址中cli -a ?key=、&sig=與&token=的值,以及任何驗證方式的Authorization標頭。$API_或TOKEN $(cat ~/.這類參照則不受影響。面板中的任務列也以同樣方式清理:任務的描述、摘要和活動行。token)
標題列會顯示任務名稱、類型(Shell 或 Monitor)、已執行的時間,以及它的狀態是 running、completed、stopped 或 failed, exit code 1,或者 0.9.13 新增 waiting for its worker after the relay restart(見中繼重新啟動之後)。它也會顯示靜默提示和測試執行小標籤,任務執行期間還有自己的 Stop。
此中繼或其他中繼上的 agent 可以用 read_ 讀取同樣的輸出。各供應商提供什麼,見依供應商。
| 主控台顯示 | 原因 |
|---|---|
| No output yet. Lines appear as the task writes them.(尚無輸出。任務寫入時會逐行顯示。) | 任務到目前為止還沒寫入任何東西 |
| This task wrote no output.(此任務沒有寫入任何輸出。) | 它結束時沒有輸出 |
| This session did not report an output file for this task. Sessions started before the task console need a restart to show output.(此 session 未回報此任務的輸出檔案。在任務主控台之前啟動的 session 需要重新啟動才能顯示輸出。) | Claude、DeepSeek、Copilot 或 Grok session 沒有為這個任務指定檔案:它的 agent 在更新到 0.9.12 之前就已啟動,或者它是沒有 Stop 的 Copilot shell |
| Output is not available for this provider.(此供應商不提供輸出。) | 供應商沒有把這個任務的輸出交給中繼。0.9.13 新增 該列的滑鼠提示也會這麼說 |
| Output is not available for this task.(此任務沒有可用的輸出。) | 中繼知道這個任務,但沒有可讀取其輸出的檔案 |
| Sub-agents have no shell output; open the sub-agent view.(子 agent 沒有 shell 輸出;請開啟子 agent 檢視。) | 這個任務是 subagent:點它的標題會開啟它的紀錄 |
| Waiting for the worker to send the output…(正在等待 worker 傳送輸出…) | 輸出來自 agent 的處理程序,而它還沒回應 |
| The session's worker is not connected, so the output cannot be read now.(session 的 worker 未連線,因此暫時無法讀取輸出。) | agent 的處理程序沒有在執行 |
| This task's output is no longer available.(此任務的輸出已無法使用。) | 任務已結束超過一小時,或者它在更新到 0.9.13 之前執行,而中繼之後重新啟動過 |
靜默任務 #
執行中的 shell 指令或監控任務若一分鐘以上沒有寫入任何東西,它的列和主控台標題列會顯示這一點:no output for 12 min。達到 Settings → General → Mark a background task as quiet after(設定 → 一般 → 背景任務多久無輸出後標記為靜默)設定的時間後,提示會變成琥珀色。預設為 10 分鐘,可設 1 到 120 分鐘,並套用到此中繼上的所有瀏覽器。
靜默不等於卡住:有些步驟會很長一段時間不印出任何東西。開啟主控台看看最後幾行,然後再等等、把設定調高,或按 Stop 停止任務。中繼每 10 秒檢查一次輸出,所以提示最多可能延遲這麼久。
管線接到 tail 的指令 0.9.13 新增 #
管線接到 tail 的指令,例如 npm test 2>&1 | tail -40,在結束之前不會寫出任何東西:tail 會把最後幾行留到那時才輸出。它的主控台看起來就像卡住了。當任務的命令列顯示這種管線時,主控台會標出輸出停在哪裡,直到有更多輸出或任務結束:
Output stops here: this command pipes into tail, so the rest arrives when it ends.
Logging to a file instead (> run.log 2>&1) and following that file shows it live.
該列的 no output for N min 提示在滑鼠移上去時也會說明同樣的事。tail -f 和 head 會隨時把行傳下去,不會被標記。要即時觀看執行情形,請讓 agent 把記錄寫入檔案(> run.),再追蹤那個檔案。
Claude、DeepSeek、Copilot 和 Grok 會為此回報 shell 任務的命令列。中繼會遮蔽其中的憑證(和輸出一樣),並保留前 2,000 個字元。agent 在更新到 0.9.13 之前啟動的 session 不會回報命令列。
測試執行 #
當指令的輸出看起來像 vitest、Playwright、node:test、jest、pytest 或 turbo 的測試執行(也包括透過 pnpm 啟動的情況),它的列和主控台標題列會顯示一個帶有計數的小標籤:有測試失敗時以紅色顯示 ✓ 412 ✘ 2,全部通過時顯示 ✓ 38。把滑鼠移到小標籤上,可看到測試執行器,以及通過、失敗與略過的數量。計數會隨執行進度更新。0.9.13 新增 仍在進行的執行會依整份記錄計算,不論多長,並隨記錄增長持續讀取,所以即使輸出超過主控台顯示的範圍,小標籤也會涵蓋每一個測試。一旦測試執行器印出最後的摘要,就以摘要為準。
在主控台中,小標籤以及有測試失敗時顯示在旁邊的 first failure(首次失敗)按鈕,會跳到已載入輸出中第一個失敗的測試。如果它在更早的輸出中,主控台會告訴你;Load earlier 可以把它載入。
已結束的指令 #
中繼從檔案讀取輸出的 shell 指令或監控任務,結束後會以變暗的列在面板中保留一小時:完成時顯示 ✓,失敗時顯示 ✘,被停止時顯示 ■,0.9.13 新增 中繼無法得知它如何結束時顯示 ?(中繼重新啟動之後),並附上執行了多久和它的測試小標籤。它的主控台仍可開啟,所以 agent 繼續做別的事之後,你還是能查看執行失敗的原因。× 會隱藏這一列,直到你重新載入頁面。每個對話最多保留 20 個這樣的列。0.9.13 新增 它們在中繼重新啟動後仍會保留(見中繼重新啟動之後)。
任務結束時 #
任務結束時會離開面板,或者指令會保留為已結束的列。agent 會被喚醒,查看結果並回答。這個回答是一則接續回覆:它不是在回答你的訊息,標題列帶有 background continuation(背景接續)徽章。你可以像閱讀其他回覆一樣閱讀它。
就通知而言,接續回覆和其他回覆一樣,所以在回合結束時會通知你的裝置,在這裡也會通知:Settings → Notifications(設定 → 通知)中的 Turn completed(回合已完成)。監看這個 session 的 agent 則會收到 task_ 或 task_ 事件(見其他 agent 怎麼看到它)。
如果在任務結束與其接續回覆之間發生中繼重新啟動,接續回覆會被捨棄,不會重新執行。見重新啟動與繼續。
Ultracode 工作流程 #
Ultracode 工作流程是 Claude 的功能。面板會把它顯示為帶有展開箭頭的 Workflow 列。打開箭頭即可看到進度樹。
- 階段是標題,工作流程中的 agent 列在階段下面。
- 每個 agent 會顯示狀態圖示(
○排隊中、◐執行中、✓完成、✗失敗或被強制結束)、它的標籤,以及一行包含模型、token、工具呼叫次數和時間的資訊,重試之後還有attempt 2。執行中的 agent 還會加上它正在使用的工具。 - 記錄行(最後五行)位於各階段上方。
- 超過 100 個 agent 的樹會以 +N more agents(+N 個 agent)結尾。
工作流程執行時樹是展開的,結束並穩定後會收合。你用箭頭做的選擇,在該列留在面板期間都會保留。工作流程執行期間,樹可能缺少階段標題和記錄行;最終的樹會有這些內容。
工作流程結束時,總結它的回覆會在對話紀錄中保留一張收合的卡片:
🧩 Finished background task — review-shared-modules · 20 agents · 1.2M tok · 28m
打開它可以看到最終的樹。未知的欄位會省略;沒有完成的工作流程會在括號中說明結果,例如 Finished background task (failed),結果始終沒有送達時則是 (unconfirmed)。這張卡片會隨回覆一起儲存,重新載入後仍在。
背景任務逾時 #
Settings → General → Background task timeout(設定 → 一般 → 背景任務逾時)設定在回覆之後,單靠背景任務可以讓 session 繼續執行多久。它是一個從 0 到 10 小時、以 5 分鐘為一步的滑桿。預設為 4 小時。0 表示沒有上限:任務會一直執行,直到完成或被你停止。
時間到時,中繼會停止這些任務,agent 會像任何任務結束時一樣,在接續回覆中報告。在 Claude 和 DeepSeek 上,只有在除了任務之外沒有任何東西讓 session 持續時才會計時,而且只要中間有回合執行,就會從零重新開始。在 Copilot 的 SDK 引擎上,每個任務有自己的計時,從該任務啟動時開始。它和其他計時器的關係,見回合與佇列。
| 供應商 | 時間到時 |
|---|---|
| Claude、DeepSeek | 所有仍在執行的任務都會被停止。如果一分鐘後仍有任務列在清單上,中繼會把它從清單中移除,讓 session 收尾 |
| GitHub Copilot 和 OpenAI,SDK 引擎 | 中繼會取消每個超過時間的任務。runtime 多次拒絕取消的任務會從面板中移除。沒有 Stop 按鈕的 shell 無法取消:中繼會停止等待它,此時 0 會視為 30 分鐘 |
| Claude Cloud | 這個設定只決定回合要等待工作多久,設為 0 時是 60 分鐘。之後回合會結束,並附上一則註記,請你傳送訊息來查看結果 |
什麼會結束任務 #
| 你的操作 | 任務會怎樣 |
|---|---|
| 在執行中的回覆上按 Stop | 回覆結束。在 Copilot 上,它啟動的任務通常會繼續執行,各自有自己的 Stop;如果 runtime 無法只中斷回覆,Stop 也會取消背景 agent。在 Claude 和 DeepSeek 上,中繼會中斷回覆,agent 處理程序則繼續執行它的任務;只有在中斷失敗時,中繼才會結束該處理程序,任務也隨之結束 |
| 在某一列上按 Stop | 那個任務結束 |
| 封存或刪除對話 | 任務執行期間會被拒絕,並顯示通知。請先在面板中停止任務,沒有 Stop 按鈕的任務則使用 Kill session |
| Kill session | 停止 session 的 worker,連同它所有的任務。面板會清空。下一則訊息會重新啟動 agent |
| 逾時 | 見上文 |
| 中繼重新啟動 | 只要 worker 持續執行,就不會有影響。見下文 |
中繼重新啟動之後 0.9.11 新增 #
在中繼重新啟動期間持續執行的 worker 會保留它的任務,中繼會在該 worker 下一次心跳時再次向它索取。這些任務會以原本的開始時間回到面板,所以 session 看起來仍在工作:Suspend host(讓主機休眠)會等待它們,監看中的 session 也不會收到 all_。中繼離線期間結束的任務仍會回報它的結束。
worker 在更新到 0.9.11 之前啟動的 session 還無法回答這個問題。它會顯示一列 background work, details not reported since the relay restarted (Kill session in its ⋯ menu ends it)(背景工作,中繼重新啟動後未回報詳情,在其 ⋯ 選單中用 Kill session 結束),直到它回報變化為止。中繼啟動後的前 45 秒內,休眠也會等待尚未回報的 session。
0.9.12 新增 回來的任務的主控台可以再次開啟,並包含完整記錄;中繼檢查過輸出之後,靜默提示也會再次出現。
0.9.13 新增 中繼會把主控台的列存在它的資料庫中,所以主控台在重新啟動後也會保留:
- 已結束的列會帶著 ✓ 或 ✘ 回來,保留到它們那一小時結束。
- 執行中指令的主控台會立刻讀取輸出,不必等 worker 回報。在 worker 表示指令仍在執行之前,主控台會顯示它正在等待 worker,而且沒有 Stop。
- worker 沒有回來的指令(它隨中繼一起停止,例如在重新開機時)會在大約一分半後標記為已結束,絕不會再次顯示為執行中。中繼無法得知它是如何結束的,所以它的列會顯示中性的
?,而不是 ✓ 或 ✘,標題為 ended, result unknown(已結束,結果未知)。它的輸出在那一小時剩下的時間內仍可讀取。
在更新到 0.9.13 之前執行的指令沒有儲存的列;它們會在 worker 回報時回來,如上所述。
在 Linux 服務下,重新啟動會停止 worker,它們的任務也隨之停止;見重新啟動會保留什麼。
其他 agent 怎麼看到它 #
list_ 和 read_ 會為每個 session 提供一個 state:running_、background_(agent 已回答,背景工作仍在執行)或 idle。它們也會列出它的 tasks,即背景 agent 和 shell 任務,包括各自何時開始、最後一次活動的時間、如何結束,以及已知時的結束代碼。因此只有背景任務的 session 不會被視為不活躍。0.9.12 新增 在 Copilot 的 SDK 引擎上,已結束的任務會回報 completed、failed 或 stopped,shell 會回報結束代碼,subagent 則以它的結果(或錯誤)作為摘要;先前這類任務都以 unknown 結束。
監看這個 session 的 agent 可以被事件 task_ 和 task_ 喚醒,每個事件都附有任務的描述、結果和摘要。被停止或以非零代碼結束的任務都算失敗。它也可以要求 task_。0.9.13 新增 預設情況下,監看者會得知已結束的 subagent 和每個失敗的任務,但不會得知順利結束的 shell 指令或監控任務;要收到這些,必須指定 task_。
0.9.12 新增 read_ 也會提供每個任務的 task、是否有可讀取的輸出,以及指令的靜默時間和測試計數。0.9.13 新增 在供應商有回報時,它還會提供 shell 任務的命令列。任務的描述、摘要、最後一次工具呼叫和命令列中的憑證都會被遮蔽,和主控台一樣。接著 read_ 會讀取該輸出的結尾,清理方式與主控台相同。
依供應商 #
| 供應商 | 任務面板與逐一任務的 Stop | 主控台 0.9.12 新增 |
|---|---|---|
| Claude | 有:shell 指令、subagent、監控任務和 Ultracode 工作流程 | Claude CLI 為該指令寫入的檔案。在得知該檔案之前,顯示最後 8 KB,每 3 秒重新讀取一次 |
| DeepSeek 0.9.17 新增 | 同 Claude,但沒有 Ultracode 工作流程:DeepSeek 沒有 Ultracode effort | 同 Claude |
| GitHub Copilot 和 OpenAI,SDK 引擎 | 有:背景 agent 和 shell。部分 shell 沒有 Stop | 分離的 shell 自己的記錄。其他 shell 則是 runtime 回報的近期輸出,隨變化複製;標題列會顯示 output mirrored from the runtime's recent window(從執行環境最近視窗鏡像的輸出)。沒有 Stop 的 shell 沒有輸出可顯示 |
| GitHub Copilot 和 OpenAI,擴充功能引擎 | 沒有面板 | |
| Claude Cloud | 沒有面板。工作執行期間,回合會依 Background task timeout 保持開啟,結果以接續回覆送達 | |
| Cursor | 沒有面板 | |
| Grok | 0.9.12 新增 有:agent 開啟且執行超過兩秒的每個終端機,會顯示為帶有 Stop 的 Bash 列。agent 用完終端機或指令結束時,它就會離開面板 | 終端機的輸出,從第一個位元組開始保留,最多 50 MB |
| OpenAI Image | 不適用 |
Ultracode 樹和 Finished background task(已完成的背景任務)卡片只存在於 Claude。完整的功能對照表在供應商一覽。