在找调度功能?请参阅 自动化 以选择合适的机制。本页是后台工作的活动台账,而不是调度器。
并非每次代理运行都会创建任务。heartbeat 回合和普通的交互式聊天不会。所有 cron 执行、ACP 启动、子代理启动以及 CLI 代理命令都会创建任务。
TL;DR
- 任务是记录,不是调度器——cron 和 heartbeat 决定 何时 运行工作,任务记录 发生了什么。
- ACP、子代理、所有 cron 作业和 CLI 操作都会创建任务。heartbeat 回合不会。
- 每个任务都会经历
queued → running → terminal(succeeded、failed、timed_out、cancelled 或 lost)。 - Cron 任务在 cron 运行时仍然持有该作业时保持存活;如果 内存中的运行时状态已经丢失,任务维护会先检查持久化的 cron 运行历史,再将任务标记为 lost。
- 完成是推送驱动的:分离运行可以在结束时直接通知或唤醒 请求者会话/heartbeat,因此状态轮询循环通常不是合适的模式。
- 隔离 cron 运行和子代理完成会尽力在最终清理记账之前,为其子会话清理已跟踪的浏览器标签页/进程。
- 隔离 cron 投递会在后代子代理工作仍在收尾时抑制过时的中间父级回复,并且在最终后代输出先到达时会优先采用它。
- 完成通知会直接投递到某个通道,或排入下一次 heartbeat。
openclaw tasks list显示所有任务;openclaw tasks audit可暴露问题。- 终态记录会保留 7 天,然后自动裁剪。
快速开始
- 列出和筛选
- 检查
- 取消和通知
- 审计和维护
- 任务流
什么会创建任务
| 来源 | 运行时类型 | 创建任务记录的时机 | 默认通知策略 |
|---|---|---|---|
| ACP 后台运行 | acp | 启动一个子 ACP 会话 | done_only |
| 子代理编排 | subagent | 通过 sessions_spawn 启动子代理 | done_only |
| Cron 作业(所有类型) | cron | 每次 cron 执行(主会话和隔离会话) | silent |
| CLI 操作 | cli | 通过网关运行的 openclaw agent 命令 | silent |
| 代理媒体任务 | cli | 由会话支持的 image_generate/music_generate/video_generate 运行 | silent |
Cron 和媒体的通知默认值
Cron 和媒体的通知默认值
主会话 cron 任务默认使用
silent 通知策略——它们会创建记录用于跟踪,但不会生成通知。隔离 cron 任务也默认是 silent,但因为它们在自己的会话中运行,所以更显眼。基于会话的 image_generate、music_generate 和 video_generate 运行也使用 silent 通知策略。它们仍然会创建任务记录,但完成会作为一次内部唤醒交回原始代理会话,以便代理可以写出后续消息并自行附加已完成的媒体内容。请求者代理遵循其正常的可见回复约定:在配置时自动发送最终回复,或者在会话要求使用消息工具回复时使用 message(action="send") 加 NO_REPLY。如果请求者会话不再活跃,或者其活动唤醒失败,并且完成代理遗漏了部分或全部生成的媒体,OpenClaw 会向原始通道目标发送一次幂等的直接回退,仅包含缺失的媒体。Concurrent media-generation guardrail
Concurrent media-generation guardrail
当基于会话的媒体生成任务仍在运行时,媒体工具还会作为防止意外重试的护栏。对同一提示词重复调用
image_generate 会返回匹配的活动任务状态,而不同的图片提示词可以启动它自己的任务。music_generate 和 video_generate 调用仍会返回该会话的活动任务状态,而不是启动第二个并发生成。若你希望从代理侧进行明确的进度/状态查询,请使用 action: "status"。哪些情况不会创建任务
哪些情况不会创建任务
- Heartbeat 回合——主会话;请参阅 Heartbeat
- 普通的交互式聊天回合
- 直接
/command响应
任务生命周期
| 状态 | 含义 |
|---|---|
queued | 已创建,等待代理开始 |
running | 代理回合正在执行 |
succeeded | 成功完成 |
failed | 以错误结束 |
timed_out | 超过了配置的超时时间 |
cancelled | 被操作员通过 openclaw tasks cancel 停止 |
lost | 在 5 分钟宽限期后,运行时失去了权威的后备状态 |
succeeded,普通运行错误会最终标记为 failed,而超时或中止结果会最终标记为 timed_out。如果操作员已经取消了该任务,或者运行时已经记录了更强的终态,例如 failed、timed_out 或 lost,那么稍后到达的成功信号不会降低该终态状态。
lost 是具备运行时感知的:
- ACP 任务:支撑的 ACP 子会话元数据消失了。
- 子代理任务:支撑的子会话从目标代理存储中消失了。
- Cron 任务:cron 运行时不再将该作业视为活动项,并且持久化的 cron 运行历史未显示该运行的终态结果。离线 CLI 审计不会把它自己空的进程内 cron 运行时状态视为权威。
- CLI 任务:带有 run id/source id 的任务使用实时运行上下文,因此
即使网关持有的运行消失,残留的子会话或聊天会话行也不会让它们继续存活。
没有运行身份的旧版 CLI 任务仍然回退到子会话。
由网关支持的
openclaw agent运行也会根据其运行结果最终定稿, 因此已完成的运行不会一直保持活跃,直到 sweeper 将它们标记为lost。
投递和通知
当任务到达终态时,OpenClaw 会通知你。投递路径有两种: 直接投递 - 如果任务有一个通道目标(requesterOrigin),完成消息会直接发送到该通道(Telegram、Discord、Slack 等)。群组和频道任务完成则会改为通过请求者会话路由,以便父代理可以写出可见回复。对于子代理完成,如果可用,OpenClaw 还会保留绑定的 thread/topic 路由,并且在放弃直接投递之前,可以从请求者会话存储的路由(lastChannel / lastTo / lastAccountId)中补全缺失的 to / account。
会话排队投递——如果直接投递失败或未设置来源,该更新会作为系统事件排入请求者会话,并在下一次 heartbeat 时显示。
这意味着通常的工作流是推送式的:先启动一次分离的工作,然后让运行时在完成时唤醒或通知你。只有在需要调试、干预,或进行明确审计时,才轮询任务状态。
通知策略
控制你从每个任务中接收到多少信息:| 策略 | 投递内容 |
|---|---|
done_only(默认) | 仅投递终态(succeeded、failed 等)——这是默认值 |
state_changes | 每一次状态转换和进度更新 |
silent | 完全不投递 |
CLI 参考
tasks list
tasks list
tasks show
tasks show
tasks cancel
tasks cancel
cancelled,并在适用时发送传递通知。tasks notify
tasks notify
tasks audit
tasks audit
openclaw status 中。| 发现项 | 严重性 | 触发条件 |
|---|---|---|
stale_queued | warn | 排队超过 10 分钟 |
stale_running | error | 运行超过 30 分钟 |
lost | warn/error | 由运行时支持的任务所有权消失;保留的 lost 任务在 cleanupAfter 之前显示为警告,之后变为错误 |
delivery_failed | warn | 传递失败且通知策略不是 silent |
missing_cleanup | warn | 终态任务缺少 cleanup 时间戳 |
inconsistent_timestamps | warn | 时间线违规(例如结束时间早于开始时间) |
tasks maintenance
tasks maintenance
- ACP/子代理任务会检查其支撑的子会话。
- 子会话带有 restart-recovery tombstone 的子代理任务会被标记为 lost,而不是被视为可恢复的支撑会话。
- Cron 任务会检查 cron 运行时是否仍然持有该作业,然后在回退到
lost之前,从持久化的 cron 运行日志/作业状态中恢复终态。只有 Gateway 进程对内存中的 cron 活跃作业集合拥有权威性;离线 CLI 审计会使用持久化历史,但不会仅因为本地 Set 为空就把 cron 任务标记为 lost。 - 带有运行身份的 CLI 任务会检查拥有该任务的实时运行上下文,而不只是子会话或聊天会话行。
- 子代理完成会尽力在清理公告继续之前,为子会话关闭已跟踪的浏览器标签页/进程。
- 隔离 cron 完成会尽力在运行完全拆解之前,为 cron 会话关闭已跟踪的浏览器标签页/进程。
- 隔离 cron 投递在需要时会等待后代子代理的后续工作,并抑制过时的父级确认文本,而不是直接公告它。
- 子代理完成投递仅使用子级最近可见的助手文本。工具/工具结果输出不会被提升为子级结果文本。终态失败运行会公告失败状态,而不会回放捕获到的回复文本。
- 清理失败不会掩盖真实的任务结果。
cron:<jobId>:run:<uuid> 会话注册表行,同时保留当前正在运行的 cron 作业对应的行,并且不影响非 cron 的会话行。tasks flow list | show | cancel
tasks flow list | show | cancel
聊天任务面板(/tasks)
在任何聊天会话中使用 /tasks 来查看与该会话关联的后台任务。面板会显示活跃和最近完成的任务,以及运行时、状态、时间信息和进度或错误详情。
当当前会话没有可见的关联任务时,/tasks 会回退到 agent 本地任务计数,因此你仍能获得概览,而不会泄露其他会话的详情。
如需完整的操作员账本,请使用 CLI:openclaw tasks list。
状态集成(任务压力)
openclaw status 包含一目了然的任务摘要:
- 活跃 -
queued+running的数量 - 失败 -
failed+timed_out+lost的数量 - 按运行时 - 按
acp、subagent、cron、cli的细分
/status 和 session_status 工具都使用一个具备清理感知的任务快照:优先显示活跃任务,隐藏过期的已完成行,并且只有在没有活跃工作时才显示最近的失败。这使状态卡片专注于当前最重要的内容。
存储与维护
任务存放位置
任务记录持久化在 SQLite 中,路径为:Gateway 通过使用 SQLite 默认的 autocheckpoint 阈值以及定期和关闭时的
TRUNCATE 检查点,来限制 SQLite 写前日志的大小。
自动维护
每 60 秒 运行一次 sweeper,并处理四件事:对账
检查活跃任务是否仍有权威的运行时支撑。ACP/subagent 任务使用子会话状态,cron 任务使用活跃作业所有权,而带有运行身份的 CLI 任务使用所属的运行上下文。如果该支撑状态消失超过 5 分钟,则任务会被标记为
lost。设置清理时间戳
为终态任务设置
cleanupAfter 时间戳(endedAt + 7 天)。在保留期内,lost 任务在审计中仍作为警告出现;在 cleanupAfter 过期后,或清理元数据缺失时,它们会变成错误。保留期: 终态任务记录会保留 7 天,然后自动裁剪。无需配置。
任务如何与其他系统关联
任务与任务流
任务与任务流
Tasks and cron
Tasks and cron
Cron job definitions, runtime execution state, and run history live in OpenClaw’s shared SQLite state database. Every cron execution creates a task record - both main-session and isolated. Main-session cron tasks default to
silent notify policy so they track without generating notifications.详情参见 Cron Jobs。任务与 heartbeat
任务与 heartbeat
Heartbeat 运行是主会话轮次——它们不会创建任务记录。任务完成时,它可以触发 heartbeat 唤醒,以便你及时看到结果。详情参见 Heartbeat。
任务与会话
任务与会话
任务可以引用
childSessionKey(工作运行的位置)和 requesterSessionKey(发起者)。会话是对话上下文;任务是在此之上的活动跟踪。任务与 Agent 运行
任务与 Agent 运行
任务的
runId 连接到正在执行工作的 agent run。Agent 生命周期事件(开始、结束、错误)会自动更新任务状态——你无需手动管理生命周期。