バックグラウンドタスク
エージェントは返信した後も、作業を動かしたままにできます。開発サーバー、時間のかかるビルド、単独で作業するサブエージェントなどです。OAR ではこれをバックグラウンドタスクと呼びます。入力欄の上にあるタスクパネルがこれらのタスクを一覧にし、タスクごとに停止したり、コマンドの出力を開いたりできます。終了したタスクについてのエージェントの報告は、独立した返信として届きます。
バックグラウンドタスクに含まれるもの #
- シェルコマンド:エージェントが動かしたままにしたもので、開発サーバーや時間のかかるビルドなどです。0.9.12 で追加 Grok では、2 秒より長く実行されるすべてのコマンドです。
- サブエージェント:バックグラウンドで作業するものです。サブエージェントには専用のページがあります。ここではパネルの行の 1 つにすぎません。
- モニターと、Claude では Ultracode ワークフロー(Ultracode ワークフローを参照)。
エージェントが返信を終え、こうしたタスクだけが残っているとき、会話はターンを実行していませんが、アイドルでもありません。他のエージェントからは background_ という状態に見えます(他のエージェントからの見え方を参照)。自分からはタスクパネルとして見え、タスクが動いている間は表示されたままです。会話リストではタイトルの色で示されます。ターンかバックグラウンドの作業が動いているセッションは、明るい緑のタイトルのままです(行に表示される内容を参照)。
タスクパネル #
パネルはメッセージ欄のすぐ上にあります。1 行に折りたたまれていて、たとえば 2 background tasks running(2 件のバックグラウンドタスクを実行中)のように表示されます。タスクの実行中はスピナーが付き、終了したコマンドが一覧にあるときは · 1 finished が付きます。この行をクリックすると一覧が開きます。表示するものがないときパネルは隠れ、収まりきらない数の行があるときは一覧がスクロールします。
各行には次のものが表示されます。
| 部分 | 内容 |
|---|---|
| アイコンと種類のバッジ | シェルコマンドには Bash、サブエージェントには Subagent(サブエージェント)または Explore のようなエージェント自身の種類、Workflow(ワークフロー)、Monitor |
| 説明 | エージェントがそのタスクに付けた名前です。Claude と DeepSeek では、サブエージェントの説明をクリックするとその記録が開きます。0.9.12 で追加 シェルコマンドやモニターの説明をクリックすると、そのコンソールが開きます |
| アクティビティ行 | タスクが今実行しているツール呼び出し、なければ進捗の要約です |
| モデルとトークン | プロバイダーが報告する場合に表示されます |
| ステップ | 0.9.12 で追加 サブエージェントの場合、これまでのツール呼び出しの回数です(例: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(停止) | このタスクだけを停止します |
実行中の行には、状態を示す専用のラベルはありません。パネルにあるタスクは実行中です。サブエージェントは終了するとパネルから消えます。シェルコマンドやモニターは、終了した行として 1 時間残ることがあります。Stop を押すと、パネルが次に更新されるまで(最大 15 秒)ボタンは Stopping…(停止中…)と表示されます。
Copilot の SDK エンジンでは、Copilot のランタイムがバックグラウンドタスクを一覧にできないとき、シェルに Stop ボタンがありません。そのようなシェルは Kill session(セッションを強制終了)でしか終了できません(タスクを終わらせるものを参照)。
プレビューカードも同じパネルにあり、タスクの上に並びます。表示される内容を参照してください。プレビューは、そのサーバーを起動したタスクが終了した後もパネルを開いたままにします。
タスクコンソール 0.9.12 で追加 #
パネルでシェルコマンドかモニターの説明をクリックすると、そのコンソールが開きます。コマンドの出力が表示されるので、ビルド、開発サーバー、テストの実行が何をしているかを、エージェントに尋ねずに確認できます。スマートフォンでは画面いっぱいに表示されます。0.9.13 で追加 幅の広い画面では、パネルにあるそのタスクの行の上で終わるので、行のテストのチップ、時計、Stop は見えたまま、横でライブに更新されます。Escape キー、×、コンソールの外側のクリック、または戻るボタンで閉じます。
- 最後の 2,000 行が開いたときに表示され、新しい出力はライブで続きます。上にスクロールしている間はその位置にとどまり、Jump to end ↓(末尾へ移動)で戻れます。
- 上部の Load earlier(以前の分を読み込む)で、ログ全体を一度に最大 2,000 行ずつさかのぼれます。約 5 MB 読み込むまで使えます。それを超えると、ボタンは older output not loaded(以前の出力は読み込まれていません)と表示されます。0.9.13 で追加 以前の出力があるときは、コンソールのヘッダーにも同じボタンがあるので、長いログの末尾を追いながらでも手が届きます。
- プログレスバーのように 1 行を描き直す出力は、最後の状態だけが表示されます。同じ行が何回も続くときは、
×Nを付けて 1 回だけ表示されます。 - 色はそのまま残ります。赤い失敗表示は赤のままです。0.9.13 で追加 反転テキストは色が入れ替わるので、vitest の RUN、PASS、FAIL のバッジは塗りつぶして表示されます。その他の制御コードは取り除かれ、1 行は 4,000 文字で切られます。
- 認証情報は伏せられます。よくある形式のトークンやキー、
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 のシークレットアクセスキー、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 もあります。
このリレーや別のリレーのエージェントは、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.(このセッションはこのタスクの出力ファイルを報告していません。タスクコンソールより前に開始したセッションは、出力を表示するには再起動が必要です。) | Claude、DeepSeek、Copilot、Grok のセッションが、このタスクのファイルを伝えていません。そのエージェントが 0.9.12 への更新より前に起動したか、Stop のない Copilot のシェルです |
| 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.(サブエージェントにはシェル出力がありません。サブエージェントビューを開いてください。) | タスクはサブエージェントです。タイトルをクリックするとその記録が開きます |
| Waiting for the worker to send the output…(ワーカーが出力を送るのを待っています…) | 出力はエージェントのプロセスから届きますが、まだ応答がありません |
| The session's worker is not connected, so the output cannot be read now.(セッションのワーカーが接続されていないため、現在は出力を読み取れません。) | エージェントのプロセスが動いていません |
| This task's output is no longer available.(このタスクの出力はもう利用できません。) | タスクが終了して 1 時間以上たったか、0.9.13 への更新より前に実行され、その後リレーが再起動しました |
無出力のタスク #
実行中のシェルコマンドやモニターが 1 分以上何も書き込んでいないと、その行とコンソールのヘッダーに no output for 12 min のように表示されます。Settings → General → Mark a background task as quiet after(設定 → 一般 → バックグラウンドタスクを無出力と見なすまでの時間)の時間を過ぎると、ヒントが琥珀色になります。既定は 10 分で、1〜120 分の範囲で設定でき、リレー上のすべてのブラウザーに適用されます。
無出力は停滞と同じではありません。長い間何も出力しない手順もあります。コンソールを開いて最後の行を確認し、待つか、設定値を上げるか、タスクを Stop してください。リレーは 10 秒ごとに出力を確認するので、ヒントはその分だけ遅れることがあります。
tail にパイプしたコマンド 0.9.13 で追加 #
npm test 2>&1 | tail -40 のように tail にパイプしたコマンドは、終了するまで何も書き込みません。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 は行を届いた順に渡すので、印は付きません。実行をライブで見たいときは、エージェントにファイルへログを書き出すよう頼み(> run.)、そのファイルを追ってください。
この判定のために、Claude、DeepSeek、Copilot、Grok はシェルタスクのコマンドラインを報告します。リレーは出力と同じようにコマンドライン内の認証情報を伏せ、先頭の 2,000 文字を保持します。0.9.13 への更新より前にエージェントが起動したセッションは、コマンドラインを報告しません。
テストの実行 #
コマンドの出力が vitest、Playwright、node:test、jest、pytest、turbo(pnpm 経由で起動した場合も含む)のテスト実行に見えるとき、その行とコンソールのヘッダーに件数のチップが表示されます。テストが失敗したときは赤で ✓ 412 ✘ 2、失敗がないときは ✓ 38 です。チップにホバーすると、テストランナーと、成功・失敗・スキップの件数が表示されます。件数は実行の進行に合わせて更新されます。0.9.13 で追加 実行中のテストは、長さに関係なくログ全体で数えられ、ログが伸びるにつれて読み進められます。そのため、出力がコンソールの表示範囲を超えても、チップはすべてのテストを数え続けます。テストランナーが最後に要約を出力すると、その内容で確定します。
コンソールでは、チップと、テストが失敗したときにその横に表示される first failure(最初の失敗)ボタンで、読み込み済みの出力の中の最初に失敗したテストへ移動します。それが古い出力の中にある場合はコンソールがそう伝えるので、Load earlier で読み込んでください。
終了したコマンド #
リレーがファイルから出力を読むシェルコマンドやモニターは、終了後 1 時間、薄く表示された行としてパネルに残ります。完了したときは ✓、失敗したときは ✘、停止したときは ■、0.9.13 で追加 どう終わったかをリレーが知り得ないときは ? が付き(リレーの再起動後)、実行時間とテストのチップも表示されます。コンソールは引き続き開けるので、エージェントが次の作業に移った後でも、実行が失敗した理由を読めます。× を押すと、ページを再読み込みするまでその行が隠れます。このような行は 1 つの会話につき最大 20 件まで保持されます。0.9.13 で追加 これらの行はリレーの再起動後も残ります(リレーの再起動後を参照)。
タスクが終了したとき #
タスクが終了すると、パネルから消えます。コマンドの場合は終了した行として残ります。エージェントが起こされ、結果を確認して返信します。この返信が継続応答です。自分のメッセージへの返信ではなく、ヘッダーに background continuation(バックグラウンド継続)のバッジが付きます。他の返信と同じように読めます。
通知の扱いでは、継続応答は他の返信と同じです。そのため、ターンの終了時に通知するデバイスは、ここでも通知します。設定は Settings → Notifications(設定 → 通知)の Turn completed(ターン完了)です。セッションを監視しているエージェントには、代わりに task_ または task_ イベントが届きます(他のエージェントからの見え方を参照)。
タスクの終了から継続応答までの間にリレーが再起動すると、継続応答は破棄され、再実行されません。再起動と再開を参照してください。
Ultracode ワークフロー #
Ultracode ワークフローは Claude の機能です。パネルでは、山形の矢印が付いた Workflow の行として表示されます。矢印を開くと進捗のツリーが表示されます。
- フェーズは見出しで、ワークフローのエージェントがその下に並びます。
- 各エージェントには、状態アイコン(
○キュー待ち、◐実行中、✓完了、✗失敗または強制終了)、ラベル、そしてモデル、トークン、ツール呼び出しの回数、時間、再試行後はattempt 2を示す行が表示されます。実行中のエージェントには、使用中のツールも表示されます。 - ログ行は最後の 5 行がフェーズの上に表示されます。
- エージェントが 100 を超えるツリーは、末尾が +N more agents(+N 件のエージェント)になります。
ツリーはワークフローの実行中は開いていて、落ち着くと折りたたまれます。矢印で選んだ開閉の状態は、行がパネルにある間は保たれます。ワークフローの実行中は、ツリーにフェーズのタイトルやログ行がないことがありますが、最終的なツリーにはそろいます。
ワークフローが終わると、それをまとめた返信に、折りたたまれたカードがトランスクリプト内に残ります。
🧩 Finished background task — review-shared-modules · 20 agents · 1.2M tok · 28m
開くと最終的なツリーが表示されます。不明な項目は省かれます。完了しなかったワークフローは、Finished background task (failed) のように括弧内でどう終わったかを示し、結果が届かなかったときは (unconfirmed) と表示します。カードは返信と一緒に保存され、再読み込みした後も残ります。
Background task timeout(バックグラウンドタスクのタイムアウト) #
Settings → General → Background task timeout(設定 → 一般 → バックグラウンドタスクのタイムアウト)は、返信の後にバックグラウンドタスクだけでセッションを実行状態に保てる時間を設定します。0〜10 時間を 5 分刻みで選ぶスライダーです。既定は 4 時間です。0 は無制限を意味し、その場合タスクは終了するか停止されるまで実行されます。
時間が来るとリレーはタスクを停止し、エージェントは他のタスクの終了時と同じく、継続応答でそれを報告します。Claude と DeepSeek では、タスク以外にセッションを動かしているものがない間だけ時間が数えられ、その間にターンが実行されるたびにゼロから数え直されます。Copilot の SDK エンジンでは、タスクごとに独自の時計があり、そのタスクの開始時に数え始めます。他のタイマーとの関係はターンとキューにあります。
| プロバイダー | 時間が来たとき |
|---|---|
| Claude、DeepSeek | 動いているタスクがすべて停止されます。1 分後もまだ一覧に残っているタスクがあれば、リレーはそれを一覧から外し、セッションを終息させます |
| GitHub Copilot と OpenAI、SDK エンジン | リレーは時間を過ぎた各タスクをキャンセルします。ランタイムが何度もキャンセルを拒むタスクはパネルから外されます。Stop ボタンのないシェルはキャンセルできません。リレーはそのシェルを待つのをやめ、その場合 0 は 30 分として扱われます |
| Claude Cloud | この設定は、ターンが作業を待つ時間だけを決めます。0 の場合は 60 分です。その後、結果を確認するにはメッセージを送るよう伝えるメモを付けてターンが終わります |
タスクを終わらせるもの #
| 操作 | タスクへの影響 |
|---|---|
| 実行中の返信で Stop | 返信が終わります。Copilot では、その返信が開始したタスクは通常そのまま動き続け、それぞれに Stop があります。ランタイムが返信だけを中断できない場合は、この Stop でバックグラウンドエージェントもキャンセルされます。Claude と DeepSeek では、リレーは返信を中断し、エージェントのプロセスはタスクを続けます。中断に失敗したときだけ、リレーはプロセスを終了し、タスクも一緒に終わります |
| 行の Stop | そのタスクが終わります |
| 会話のアーカイブまたは削除 | タスクの実行中は、通知とともに拒否されます。先にパネルでタスクを停止するか、Stop ボタンのないタスクには Kill session を使ってください |
| Kill session | セッションのワーカーを停止し、そのすべてのタスクも停止します。パネルは空になります。次のメッセージでエージェントが再び起動します |
| タイムアウト | 上記を参照してください |
| リレーの再起動 | ワーカーが動き続けている限り、何も起きません。下記を参照してください |
リレーの再起動後 0.9.11 で追加 #
リレーの再起動をまたいで動き続けるワーカーはタスクを保持し、リレーはワーカーの次のハートビートでタスクを改めて問い合わせます。タスクは元の開始時刻のままパネルに戻るので、セッションはまだ作業中と見なされます。Suspend host(ホストをスリープ)はそれらを待ち、監視しているセッションには all_ が伝えられません。リレーが止まっている間に終了したタスクも、その終了を報告します。
0.9.11 への更新より前にワーカーが起動したセッションは、まだこの問い合わせに答えられません。そうしたセッションは、変化を報告するまで background work, details not reported since the relay restarted (Kill session in its ⋯ menu ends it)(バックグラウンドの作業。リレーの再起動以降は詳細が報告されていません。⋯ メニューの Kill session で終了します)という 1 行を表示します。リレーの起動後 45 秒間は、スリープもまだ報告していないセッションを待ちます。
0.9.12 で追加 戻ってきたタスクのコンソールはログ全体とともに再び開けます。リレーが出力を確認すると、無出力のヒントも再び表示されます。
0.9.13 で追加 リレーはコンソールの行をデータベースに保存するので、コンソールも再起動後に残ります。
- 終了した行は、残りの 1 時間、✓ または ✘ とともに戻ります。
- 実行中のコマンドのコンソールは、ワーカーが報告する前でもすぐに出力を読みます。コマンドがまだ実行中だとワーカーが伝えるまで、コンソールはワーカーを待っていると表示し、Stop はありません。
- ワーカーが戻らなかったコマンド(たとえば再起動時にリレーと一緒に止まったもの)は、約 1 分半後に終了と見なされ、再び実行中になることはありません。どう終わったかをリレーは知り得ないので、その行には ✓ や ✘ の代わりに中立の
?が表示され、ended, result unknown(終了、結果不明)というタイトルが付きます。出力は残りの 1 時間、読み取れます。
0.9.13 への更新より前に実行されたコマンドには保存された行がありません。上記のとおり、ワーカーが報告したときに戻ります。
Linux のサービスでは、再起動によってワーカーが停止し、そのタスクも停止します。再起動で保持されるものを参照してください。
他のエージェントからの見え方 #
list_ と read_ は、各セッションに state を返します。値は running_、background_(エージェントは返信済みで、バックグラウンドの作業がまだ動いている)、idle のいずれかです。また、そのセッションの tasks(バックグラウンドエージェントとシェルタスク)を一覧にし、それぞれの開始時刻、最後に何かをした時刻、終わり方、判明している場合は終了コードを示します。そのため、バックグラウンドタスクだけが残るセッションは、非アクティブとは見なされません。0.9.12 で追加 Copilot の SDK エンジンでは、終了したタスクは completed、failed、stopped のいずれかを報告し、シェルは終了コードを、サブエージェントは結果(またはエラー)を要約として報告します。以前は、このようなタスクは unknown として終わっていました。
セッションを監視するエージェントは、イベント task_ と task_ で起こしてもらえます。どちらにもタスクの説明、結果、要約が含まれます。停止されたタスクや、0 以外のコードで終了したタスクは失敗として扱われます。task_ を求めることもできます。0.9.13 で追加 既定では、監視する側には、終了したサブエージェントと、失敗したすべてのタスクが伝えられますが、正常に終わったシェルコマンドやモニターは伝えられません。それらを受け取るには task_ を指定します。
0.9.12 で追加 read_ は、各タスクの task、読み取れる出力があるかどうか、コマンドの場合は無出力の時間とテストの件数も返します。0.9.13 で追加 プロバイダーが報告する場合は、シェルタスクのコマンドラインも返します。タスクの説明、要約、最後のツール呼び出し、コマンドラインは、コンソールと同じように認証情報が伏せられます。そのうえで read_ が、その出力の末尾をコンソールと同じように処理して読み取ります。
プロバイダー別 #
| プロバイダー | タスクパネルとタスクごとの Stop | コンソール 0.9.12 で追加 |
|---|---|---|
| Claude | あり:シェルコマンド、サブエージェント、モニター、Ultracode ワークフロー | Claude CLI がそのコマンド用に書き込むファイルです。そのファイルが判明するまでは、最後の 8 KB を 3 秒ごとに読み直します |
| DeepSeek 0.9.17 で追加 | Claude と同じですが、Ultracode ワークフローはありません。DeepSeek には reasoning effort の Ultracode がないためです | Claude と同じ |
| GitHub Copilot と OpenAI、SDK エンジン | あり:バックグラウンドエージェントとシェル。一部のシェルには Stop がありません | デタッチされたシェルでは、そのシェル自身のログです。その他のシェルでは、ランタイムが報告する直近の出力を、変化に合わせてコピーします。ヘッダーには output mirrored from the runtime's recent window(ランタイムの直近ウィンドウから反映した出力)と表示されます。Stop のないシェルには表示できる出力がありません |
| GitHub Copilot と OpenAI、拡張機能エンジン | パネルなし | |
| Claude Cloud | パネルなし。作業の実行中、ターンは Background task timeout の間開いたままになり、結果は継続応答として届きます | |
| Cursor | パネルなし | |
| Grok | 0.9.12 で追加 あり:エージェントが開き、2 秒より長く実行されるすべてのターミナルが、Stop 付きの Bash の行として表示されます。エージェントがそのターミナルを使い終えるか、コマンドが終了するとパネルから消えます | ターミナルの出力です。最初のバイトから最大 50 MB まで保持します |
| OpenAI Image | 該当なし |
Ultracode のツリーと Finished background task(完了したバックグラウンドタスク)のカードは Claude にだけあります。機能の一覧表はプロバイダーの概要にあります。