所有頁面
本頁內容

背景任務

agent 可以在回答之後讓工作繼續執行:dev server、耗時很久的建置,或自行運作的 subagent。OAR 把這稱為背景任務。輸入區上方的任務面板會列出這些任務,讓你逐一停止,也能開啟指令的輸出;agent 對已結束任務的報告則會以一則獨立的回覆送達。

哪些算是背景任務 #

  • agent 留在執行中的 shell 指令,例如 dev server 或耗時很久的建置。0.9.12 新增 在 Grok 上,則是每個執行超過兩秒的指令。
  • 在背景運作的 subagent。Subagent 有自己的頁面;在這裡它們只是面板中的又一列。
  • 監控任務,以及在 Claude 上的 Ultracode 工作流程(見 Ultracode 工作流程)。

當 agent 已經回答、只剩這類任務時,對話已不在執行回合,但也不算閒置。其他 agent 看到的是狀態 background_only(見其他 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-cli -a、AWS secret access key、Slack webhook 路徑、網址中 ?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_task_output 讀取同樣的輸出。各供應商提供什麼,見依供應商。

主控台顯示 原因
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.log 2>&1),再追蹤那個檔案。

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_finished 或 task_failed 事件(見其他 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_idle。中繼離線期間結束的任務仍會回報它的結束。

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_sessions 和 read_session 會為每個 session 提供一個 state:running_turn、background_only(agent 已回答,背景工作仍在執行)或 idle。它們也會列出它的 tasks,即背景 agent 和 shell 任務,包括各自何時開始、最後一次活動的時間、如何結束,以及已知時的結束代碼。因此只有背景任務的 session 不會被視為不活躍。0.9.12 新增 在 Copilot 的 SDK 引擎上,已結束的任務會回報 completed、failed 或 stopped,shell 會回報結束代碼,subagent 則以它的結果(或錯誤)作為摘要;先前這類任務都以 unknown 結束。

監看這個 session 的 agent 可以被事件 task_finished 和 task_failed 喚醒,每個事件都附有任務的描述、結果和摘要。被停止或以非零代碼結束的任務都算失敗。它也可以要求 task_started。0.9.13 新增 預設情況下,監看者會得知已結束的 subagent 和每個失敗的任務,但不會得知順利結束的 shell 指令或監控任務;要收到這些,必須指定 task_finished。

0.9.12 新增 read_session 也會提供每個任務的 taskId、是否有可讀取的輸出,以及指令的靜默時間和測試計數。0.9.13 新增 在供應商有回報時,它還會提供 shell 任務的命令列。任務的描述、摘要、最後一次工具呼叫和命令列中的憑證都會被遮蔽,和主控台一樣。接著 read_task_output 會讀取該輸出的結尾,清理方式與主控台相同。

依供應商 #

供應商 任務面板與逐一任務的 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。完整的功能對照表在供應商一覽。