所有页面
本页内容

后台任务

智能体可以在回答之后让工作继续运行:一个开发服务器、一次耗时很长的构建,或一个独立工作的子智能体。OAR 把这称为后台任务。输入区上方的任务面板会列出这些任务,让你逐个停止它们并打开命令的输出;智能体对已结束任务的报告会作为一条单独的回复到达。

什么算作后台任务 #

  • 智能体留下继续运行的 shell 命令,例如开发服务器或耗时很长的构建。0.9.12 新增 在 Grok 上,则是每个运行超过两秒的命令。
  • 在后台工作的子智能体。子智能体有单独的页面;在这里,它们只是面板中的又一行。
  • Monitor 任务,以及在 Claude 上的 Ultracode 工作流(参见 Ultracode 工作流)。

当智能体已经回答、只剩下这类任务时,对话不再运行一轮,但也并非空闲。其他智能体看到的是状态 background_only(参见其他智能体如何看到它)。你看到的是任务面板,只要还有任务在运行,它就一直显示。对话列表通过标题的颜色体现这一点:有一轮或后台工作正在运行的会话会保持亮绿色标题(参见一行显示什么)。

任务面板 #

面板紧挨在消息框上方。它折叠为一行,例如 2 background tasks running(2 个后台任务正在运行),任务运行时带有一个旋转图标;列出已结束的命令时还会显示 · 1 finished。点击这一行即可打开列表。没有可显示的内容时面板会隐藏;行数超出可显示的范围时,列表可以滚动。

每一行显示:

部分 含义
图标和类型徽标 shell 命令为 Bash,子智能体为 Subagent(子智能体)(或智能体自己的类型,例如 Explore),此外还有 Workflow(工作流)、Monitor
描述 智能体给任务起的名称。在 Claude 和 DeepSeek 上,点击子智能体的描述会打开它的记录。0.9.12 新增 点击 shell 命令或 Monitor 任务的描述会打开它的控制台
活动行 任务此刻正在运行的工具调用,否则为它的进度摘要
模型和 token 在提供商报告时显示
步数 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(停止) 只停止这一个任务

运行中的行没有单独的状态标签:面板中的任务就是正在运行的任务。子智能体结束时会离开面板;shell 命令或 Monitor 任务可以作为已结束的行保留一小时。按下 Stop 后,按钮会显示 Stopping…(正在停止…),直到面板下一次更新,最长 15 秒。

在 Copilot 的 SDK 引擎上,当 Copilot 运行时无法列出其后台任务时,shell 就没有 Stop 按钮。这样的 shell 只能用 Kill session(强制结束会话)结束(参见什么会结束任务)。

预览卡片也位于同一个面板中,排在任务上方。参见你会看到什么。启动预览服务器的任务结束后,预览仍会让面板保持打开。

任务控制台 0.9.12 新增 #

在面板中点击 shell 命令或 Monitor 任务的描述,就会打开它的控制台,即命令的输出。这样你无需询问智能体,就能看到构建、开发服务器或测试运行正在做什么。在手机上,它会占满屏幕。0.9.13 新增 在较宽的屏幕上,它止于面板中该任务所在行的上方,因此这一行的测试小标签、计时和 Stop 会保持可见,并在它旁边实时更新。按 Escape、×、点击它的外部或按返回按钮都会关闭它。

  • 打开时显示最后 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 个字符处截断。
  • 凭据会被抹去:常见格式的令牌和密钥、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 秘密访问密钥,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。

此中继或其他中继上的智能体可以用 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.(此会话未报告此任务的输出文件。在任务控制台之前启动的会话需要重启才能显示输出。) Claude、DeepSeek、Copilot 或 Grok 会话没有为该任务指明文件:它的智能体是在更新到 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.(子智能体没有 shell 输出;请打开子智能体视图。) 该任务是子智能体:它的标题会打开它的记录
Waiting for the worker to send the output…(正在等待 worker 发送输出…) 输出来自智能体的进程,而它还没有响应
The session's worker is not connected, so the output cannot be read now.(会话的 worker 未连接,因此暂时无法读取输出。) 智能体的进程没有在运行
This task's output is no longer available.(此任务的输出已不可用。) 任务在一个多小时前就已结束,或者它在更新到 0.9.13 之前运行,且中继此后重启过

静默任务 #

正在运行的 shell 命令或 Monitor 任务如果一分钟或更长时间没有写入任何内容,会在它的行和控制台标题栏中注明: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 会随到随传,因此不会被标记。要实时观察运行情况,请让智能体把日志写入文件(> run.log 2>&1),然后跟随该文件。

Claude、DeepSeek、Copilot 和 Grok 会为此报告 shell 任务的命令行。中继会像处理输出那样抹去其中的凭据,并保留前 2,000 个字符。智能体在更新到 0.9.13 之前启动的会话不会报告命令行。

测试运行 #

当命令的输出看起来像 vitest、Playwright、node:test、jest、pytest 或 turbo 的测试运行时(通过 pnpm 启动时也一样),它的行和控制台标题栏会显示一个带计数的小标签:有测试失败时显示红色的 ✓ 412 ✘ 2,没有失败时显示 ✓ 38。将鼠标悬停在小标签上,可查看测试运行器以及通过、失败和跳过的数量。计数会随运行的进行而更新。0.9.13 新增 仍在进行的运行会按其整个日志计数,无论日志多长,并随日志增长继续读取,因此即使输出超出了控制台显示的范围,小标签也会计入每一个测试。一旦运行器打印出最终摘要,就以该摘要为准。

在控制台中,点击小标签或旁边的 first failure(首次失败)按钮(有测试失败时显示)会跳转到已加载输出中的第一个失败测试。如果它位于更早的输出中,控制台会提示这一点;Load earlier 可以把它加载进来。

已结束的命令 #

中继从文件读取输出的 shell 命令或 Monitor 任务,在结束后会以变暗的行在面板中保留一小时:完成时为 ✓,失败时为 ✘,被停止时为 ■,0.9.13 新增 中继无法知道它如何结束时为 ?(中继重启之后),并附带运行时长和测试小标签。它的控制台仍可打开,因此在智能体转去做别的事之后,你仍然可以查看某次运行失败的原因。× 会隐藏这一行,直到你重新加载页面。每个对话最多保留 20 个这样的行。0.9.13 新增 它们在中继重启后仍会保留(参见中继重启之后)。

任务结束时 #

任务结束时会离开面板,或者命令会作为已结束的行保留下来。智能体会被唤醒,查看结果并作出回答。这个回答是一条续接回复:它不是对你某条消息的回答,其标题栏带有 background continuation(后台续接)徽标。你可以像阅读其他回复一样阅读它。

在通知方面,续接回复与其他回复相同,因此会在一轮结束时通知你的设备,在这里也会通知你,对应的是 Settings → Notifications(设置 → 通知)中的 Turn completed(本轮已完成)。监视该会话的智能体则会收到 task_finished 或 task_failed 事件(参见其他智能体如何看到它)。

如果在任务结束与其续接回复之间发生了中继重启,续接回复会被丢弃,而不会重新运行。参见重启与恢复。

Ultracode 工作流 #

Ultracode 工作流是 Claude 的一项功能。面板会把它显示为带展开箭头的 Workflow 行。点开展开箭头即可查看进度树。

  • 阶段显示为标题,工作流的智能体位于其下。
  • 每个智能体都会显示一个状态图标(○ 排队中,◐ 运行中,✓ 已完成,✗ 失败或被终止)、它的标签,以及一行包含模型、token、工具调用次数和用时的信息;重试之后还会显示 attempt 2。运行中的智能体还会显示它正在使用的工具。
  • 日志行(最后五行)位于各阶段上方。
  • 超过 100 个智能体的树以 +N more agents(+N 个智能体)结尾。

工作流运行期间,树是展开的;工作流结束后,树会折叠。只要这一行还在面板中,你用展开箭头做出的选择就会保留。工作流运行期间,树可能缺少阶段标题和日志行;最终的树会包含它们。

工作流结束时,总结它的回复会在对话记录中保留一张折叠的卡片:

🧩 Finished background task — review-shared-modules · 20 agents · 1.2M tok · 28m

打开它可以查看最终的树。未知的字段会被省略;没有完成的工作流会在括号中说明情况,例如 Finished background task (failed),或者在结果始终没有到达时显示 (unconfirmed)。该卡片会随回复一起保存,重新加载后仍然存在。

后台任务超时 #

Settings → General → Background task timeout(设置 → 常规 → 后台任务超时)设定在回复之后,仅靠后台任务可以让会话保持运行多长时间。它是一个滑块,范围为 0 到 10 小时,步长为 5 分钟。默认值是 4 小时。0 表示没有上限:任务会一直运行,直到完成或被你停止。

时间到后,中继会停止这些任务,智能体会像对待任何结束的任务一样,在续接回复中报告情况。在 Claude 和 DeepSeek 上,只有当除了任务之外没有别的东西让会话保持运行时才会计时,而只要中间运行了一轮,计时就会从零重新开始。在 Copilot 的 SDK 引擎上,每个任务都有自己的计时,从该任务启动时开始。它与其他计时器的关系见轮次与队列。

提供商 时间到后
Claude、DeepSeek 每个仍在运行的任务都会被停止。如果一分钟后仍有任务被列出,中继会把它从列表中删除,并让会话收尾
GitHub Copilot 和 OpenAI,SDK 引擎 中继会取消每个已超出时限的任务。运行时多次拒绝取消的任务会从面板中删除。没有 Stop 按钮的 shell 无法被取消:中继会不再等待它,此时 0 按 30 分钟计算
Claude Cloud 该设置只决定这一轮等待这项工作多长时间,设为 0 时为 60 分钟。之后这一轮结束,并附上一条提示,让你发送消息以了解结果

什么会结束任务 #

你的操作 任务会怎样
对正在运行的回复按 Stop 回复结束。在 Copilot 上,它启动的任务通常会继续运行,每个任务都有自己的 Stop;如果运行时无法只中断回复,Stop 也会取消后台智能体。在 Claude 和 DeepSeek 上,中继会中断回复,智能体进程会继续执行它的任务;只有在中断失败时,中继才会结束该进程,任务也随之结束
对某一行按 Stop 该任务结束
归档或删除对话 有任务运行时会被拒绝,并显示一条通知。请先在面板中停止任务,或者对没有 Stop 按钮的任务使用 Kill session
Kill session 停止会话的 worker,连同它的所有任务。面板会清空。下一条消息会重新启动智能体
超时 见上文
中继重启 只要 worker 继续运行,就没有影响。见下文

中继重启之后 0.9.11 新增 #

在中继重启期间持续运行的 worker 会保留它的任务,中继会在该 worker 下一次发送心跳时再次向它询问这些任务。它们会以原来的开始时间回到面板中,因此会话显示为仍在工作:Suspend host(让主机休眠)会等待它们,监视中的会话也不会收到 all_idle。在中继离线期间结束的任务仍会报告其结束。

worker 在更新到 0.9.11 之前启动的会话还无法回答这个询问。它会显示一行 background work, details not reported since the relay restarted (Kill session in its ⋯ menu ends it)(后台工作,中继重启后未报告详情,在其 ⋯ 菜单中用 Kill session 结束),直到它报告变化为止。中继启动后的前 45 秒内,休眠也会等待尚未报告的会话。

0.9.12 新增 回到面板的任务,其控制台可以再次打开,并带有完整的日志;中继查看过输出后,静默提示会再次出现。

0.9.13 新增 中继会把控制台的行保存在它的数据库中,因此控制台在重启后也会保留:

  • 已结束的行会带着它们的 ✓ 或 ✘ 回来,并保留到其一小时期限结束。
  • 运行中命令的控制台会立即读取其输出,不必等其 worker 报告。在 worker 确认命令仍在运行之前,控制台会显示它正在等待其 worker,并且没有 Stop。
  • worker 没有回来的命令(例如在重启电脑时,它随中继一起停止了)会在大约一分半钟后被标记为已结束,绝不会再次显示为运行中。中继无法知道它是如何结束的,因此它的行显示一个中性的 ?,而不是 ✓ 或 ✘,标题为 ended, result unknown(已结束,结果未知)。在这一小时剩下的时间里,它的输出仍然可以读取。

在更新到 0.9.13 之前运行的命令没有存储的行;它们会在其 worker 报告时回来,如上所述。

在 Linux 服务下,重启会停止 worker,它们的任务也随之停止;参见重启会保留什么。

其他智能体如何看到它 #

list_sessions 和 read_session 会为每个会话给出一个 state:running_turn、background_only(智能体已经回答,后台工作仍在运行)或 idle。它们还会列出其 tasks,即后台智能体和 shell 任务,以及每个任务何时启动、上次何时有活动、如何结束,以及已知时的退出码。因此,只有后台任务的会话不会显示为不活动。0.9.12 新增 在 Copilot 的 SDK 引擎上,已结束的任务会报告 completed、failed 或 stopped,shell 会报告其退出码,子智能体会把其结果(或错误)作为摘要报告;在此之前,这类任务都以 unknown 结束。

监视该会话的智能体可以被事件 task_finished 和 task_failed 唤醒,每个事件都带有任务的描述、结果和摘要。被停止的任务,或以非零退出码退出的任务,都算作失败。它也可以请求 task_started。0.9.13 新增 默认情况下,监视者会得知已结束的子智能体和每个失败的任务,但不会得知正常结束的 shell 命令或 Monitor 任务;要获得这些,需要指定 task_finished。

0.9.12 新增 read_session 还会给出每个任务的 taskId、它是否有可读取的输出,以及命令的静默时长和测试计数。0.9.13 新增 在提供商报告时,它还会给出 shell 任务的命令行。任务的描述、摘要、最后一次工具调用和命令行中的凭据都会被抹去,与控制台中一样。然后,read_task_output 会读取该输出的末尾部分,清理方式与控制台相同。

按提供商 #

提供商 任务面板和每个任务的 Stop 控制台 0.9.12 新增
Claude 有:shell 命令、子智能体、Monitor 任务和 Ultracode 工作流 Claude CLI 为该命令写入的文件。在知道该文件之前,读取最后 8 KB,每 3 秒重新读取一次
DeepSeek 0.9.17 新增 与 Claude 相同,但没有 Ultracode 工作流:DeepSeek 没有 Ultracode 推理强度 与 Claude 相同
GitHub Copilot 和 OpenAI,SDK 引擎 有:后台智能体和 shell。有些 shell 没有 Stop 分离 shell 自己的日志。其他 shell 显示运行时报告的近期输出,并在其变化时复制;标题栏显示 output mirrored from the runtime's recent window(从运行时最近窗口镜像的输出)。没有 Stop 的 shell 没有可显示的输出
GitHub Copilot 和 OpenAI,扩展引擎 没有面板
Claude Cloud 没有面板。工作运行期间,这一轮会在 Background task timeout 设定的时间内保持打开,结果以续接回复的形式到达
Cursor 没有面板
Grok 0.9.12 新增 有:智能体打开的每个运行超过两秒的终端,显示为带有 Stop 的 Bash 行。当智能体用完该终端或命令退出时,它会离开面板 终端的输出,从第一个字节开始保留,最多 50 MB
OpenAI Image 不适用

Ultracode 树和 Finished background task(已完成的后台任务)卡片只在 Claude 上存在。完整的功能对照表见提供商一览。