自动化负载

任务运行什么、在哪里运行:四种负载类型、各自标志,与四种会话执行风格。本文是定时任务指南的一部分。

负载

每个任务携带恰好一种负载类型,由标志选择:

负载标志运行内容
系统事件--system-event <text>所属智能体主会话中的普通回合
智能体消息--message <text>一次模型支持的智能体回合
命令--command <shell> 或 --command-argv <json>Gateway 主机上的 shell/进程,不调用模型
脚本--script <file|->使用所属智能体工具的无头 code-mode 脚本

Doctor 把旧的 heartbeat monitor 转换为普通可编辑的 agentTurn 任务;Gateway 启动不再从配置重建系统级 monitor。用 openclaw automations list --all 同时查看启用与禁用的任务,见官方 Heartbeat 迁移文档。

每周 Skill Workshop 策展(声明键 skill-collection-review:<agentId> 与更早的 skillCollectionReview 负载类型)已退役:Gateway 加载 cron 存储时删除这些行且不建替代;声明键命名空间保留。已学 skill 清理不再需要计划,见官方 Unused-skill cleanup 文档。

Agent-turn 选项

  • --message(字符串,必需):agent-turn 任务的提示词(main/isolated/current/custom 会话均适用)。创建时保留非空提示词的首尾空白;纯空白输入按缺失处理。
  • --model(字符串):模型覆盖;必须解析到允许的模型,否则运行以校验错误失败。
  • --fallbacks(字符串):按任务的 fallback 模型列表,如 --fallbacks openai/gpt-5.6-sol,openrouter/meta-llama/llama-3.3-70b-instruct:free;--fallbacks "" 为无 fallback 的严格运行。
  • --clear-fallbacks(布尔):在 automations edit 上移除按任务 fallback 覆盖,回到配置的 fallback 优先级;不能与 --fallbacks 同用。
  • --clear-model(布尔):移除按任务模型覆盖,回到正常自动化模型优先级(存储的 automation 会话覆盖 → 智能体/默认模型);不能与 --model 同用。
  • --thinking(字符串):thinking 级别覆盖(off|minimal|low|medium|high|xhigh|adaptive|max|ultra);可用级别仍取决于所选模型与智能体运行时。
  • --clear-thinking(布尔):移除按任务 thinking 覆盖;不能与 --thinking 同用。
  • --light-context(布尔):跳过工作区 bootstrap 文件注入。
  • --skip-if-scratch-empty(布尔):当存储 scratch 显式为空时跳过该回合;scratch 缺失仍运行。用 --no-skip-if-scratch-empty 关闭。
  • --include-reasoning(布尔):把智能体返回的推理随有意义的结果一起投递;仅推理不会把安静检查变成通知。--no-include-reasoning 将其排除在投递外。与模型 thinking 级别相互独立。
  • --tools(字符串):限制任务可用工具,如 --tools exec,read;--tools "" 为空允许列表(禁用全部智能体工具,含条件触发器用的工具)。

工具授权模型:能运行工具的新任务总是存储显式工具策略。创建时不带 --tools(或带 *)存储 *——每次运行用 owner 会话的当前工具策略(含 group/agent/sandbox/运行时限制)。智能体请求有限列表时被封顶到其创建回合可用工具、不能扩大存储列表;请求的名字/组/模式若无捕获工具匹配,智能体创建的任务与工具上限编辑以该条目报错而不是保存部分列表(含创建者运行时无法携带的 Codex app 工具)。automations edit --clear-tools 恢复 *。早于显式策略的任务保持现行为直到显式编辑或重建。智能体创建的脚本负载、条件触发器与创建者捕获了 Codex app 权限的任务存储创建回合的工具:脚本只能到达其列表点名的 MCP 服务器,app 权限绑定该列表。

早期版本在智能体创建的 agent-turn 上保存创建回合工具列表副本;该副本可能缺创建者有的工具(如原生 shell)。这些任务现在像 * 任务一样用其 owner 对话的工具运行,存储副本原样保留;创建者捕获 Codex app 权限的继续用副本。

把账户绑定任务改为不跑工具的负载再改回 agent-turn,保留其账户限制;负载转换不会把任务重新授权为操作员创建。

Doctor 仅对 agent-turn、脚本负载与带条件脚本的任务检查计划工具权限;无条件脚本的命令负载不需要智能体工具来源,其保留的账户限制不变。

管理编辑不能把缺失的策略元数据恢复为操作员权限。丢失策略的遗留任务,可由已认证操作员显式重新授权,或由已认证创建者以新工具上限重建。

创建者的 exec 能力固定到 Gateway 时,自动化保留该目标。tools.exec.host: "auto" 下保存的目标决定放置位置;当前显式主机设置或必需沙箱隔离与之冲突时阻止命令而不是移到别的主机。当前工具与审批策略仍然适用。

工具上限含 message 时,计划 agent-turn 可在受支持渠道插件上无入站聊天地读取消息与渠道信息。操作员创建的任务用当前操作员读取策略;智能体创建的保留其记录的创建者来源与账户,渠道委托读取限制仍适用;投递设置不授予读取。脚本负载与条件触发器在 message 动作准入时用同一记录的创建者来源;渠道对读取与变更仍执行自己的限制。

计划 agent-turn 可检查自己的任务并在完成时移除它(无交互发送者也行)。该自作用域 automations 工具不授予管理员权限或对其他任务的控制;显式工具策略拒绝仍适用。

已认证操作员回合可用 sessionTarget: "session:<同一会话键>" 把 agentTurn 调度回其确切现有对话。新任务私有保留原认证来源,续跑可完成授权工作(如检查并合并该对话的 PR)而无需操作员再发消息。每次出现按当前策略复验原操作员 scopes/角色/设备/授权/模型限制与精确会话身份——保留原操作员范围上限,不是新的 PR 专用权限或给自动化的普遍授权。存储的工具上限、沙箱与当前工具拒绝仍适用;计划自动化管理保持自作用域。

同样适用于已认证操作员回合链接到其创建对话的新 isolated/current agent-turn 任务:任务私有保留创建者来源、在自己的分离会话运行,并在每次出现与其效果前复验原操作员 scopes/角色/设备/授权。设备或授权被撤销、或角色变化时,下次出现被拒绝并提示从已认证回合重建自动化,任务被禁用;运行中的撤销停止该运行剩余的操作员效果。

创建对话被 reset 时,链接的分离任务保持运行(解除绑定、无该对话工作区/内存,仍复验创建者设备与授权);对话被移除或归档则暂停任务。

已存储任务不变:不给现有任务推断来源——此行为之前创建的任务保持其记录的所有权检查。从该对话内已认证 Control UI 回合绑定仅按会话键命名对话的旧任务,会存储该回合来源(见官方 Binding older jobs 文档)。对访客、脚本、未链接任务、非已认证操作员回合创建的任务(如 CLI 的 cron.add)或其他对话永不捕获来源。已认证 owner 更新可再次绑定到更新后的任务;无该认证的可执行编辑丢弃来源。仅显示编辑与禁用/重启用保留存储来源;名字、调度与其他可执行输入保持绑定。新的 owner 捕获只应用于被捕获的定义(即使另一管理者在更新提交前编辑了任务)。禁用或移除任务仍取消其活动出现;重启用不复活已取消的出现。

续跑等待其当前对话回合结束后才读取当前任务并在启动时检查来源;触发器提供的上下文不改变存储定义。升级后既有存储来源仍有效(含被调度器禁用的任务);被拒绝的来源记录为终态失败而不是反复重试同一权限错误。

显式命名对话中的 at agent-turn 续跑等待结果期间,可用 automations 的 action: "next_check"、in: "3m" 重新武装同一任务——不新建任务、不改其目标/任务/权限。无 next-check 提议时,普通一次性完成与 deleteAfterRun 行为不变。

手动运行在请求通过准入后使用与定时触发相同的计划执行上下文。结束启动运行的聊天回合或工具调用不会使任务工具访问过期;任务仍用其存储权限与当前工具限制——手动启动不把调用者的额外权限授予任务。

每次新的计划消息调用启动时检查当前全局/智能体/profile/provider 工具策略;配置变更作用于后续调用,已准入的调用保留其配置。禁用/移除任务、撤销 message 能力或撤销其调用者/插件权限会停止该出现后续受影响的读取(含下一次 provider 请求或结果投递前的挂起读取);重启用不恢复该出现被撤销的访问。

由已验证本地管理员创建的新账户绑定任务保留该认证本地来源,允许经其保存的创建者账户做 provider 允许的读取。从同一本地来源编辑其 toolsAllow 上限显式重新授权既有任务;描述/显示标签/精确无操作编辑保留记录来源。面向模型的名称、提示词、工具、调度等可执行行为的变更需要新来源授权,无来源时清除旧来源。仅远程管理无法提供本地来源授权;无可证来源的旧任务保持阻塞直到重新授权或从新授权来源重建。

计划回合还可 edit/delete/pin/unpin Discord 消息。智能体创建的任务用其记录的创建者账户与 Discord 委托目标限制;操作员创建的用 Discord 操作员目标策略。受信操作员任务可额外用 channel-edit(含既有频道与线程编辑选项);账户创建的任务不继承操作员管理。此类写入需要任务工具策略含 message、启用的账户与动作、以及 bot 所需 Discord 权限;需配合支持计划写入的 Discord 插件(见官方 scheduled channel administration 文档)。

账户绑定任务在已认证 Discord 回合授权其当前定义后可用 Discord channel-edit:OpenClaw 私有保留该请求者的 Discord 账户与发送者身份,Discord 当前频道/线程权限必须允许该编辑;原会话创建者与配置的 OpenClaw owner 不能替代这些原生权限。来自任务所属对话与账户的可执行编辑把任务绑定到当前授权编辑者(含提示词/模型/名称/调度/投递/工具策略);无匹配已认证 Discord 请求者的可执行编辑清除该权限并停止旧出现后续原生动作;描述与显示标签变更保留。旧任务、旧写入者编辑过的任务与请求者授权被清除的任务需要先在原 Discord 对话与账户内用显式有限 toolsAllow 列表(含 message)编辑或原地重建;执行授权也缺失时从该对话重建——仅管理访问不恢复缺失授权。编辑者须已有自动化管理访问;其他行为保持既有策略,CLI 编辑不能发明 Discord 请求者。这些请求者事实从公开任务结果中省略,无需新设置。

频道名查找与后续写入请求保留当前任务与插件权限。配置变更作用于下次消息调用;禁用或收窄任务本身停止当前调用中的后续请求与重试。权限在响应挂起期间结束时,已确认的写入仍返回其结果。

推理账户连续性

新的隔离 agent-turn 任务私有保留其选择的存储推理账户与兼容认证路由。OAuth 与 API 密钥可同时启用:更改交互默认、profile 顺序或任务普通模型选择不会切换任务的账户或计费路由。自动所有权与显式用户 profile 固定相互独立。同一授权内的 token 刷新允许;删除、替换或撤销该授权会停止任务而不是回退到别的账户。模型与路由兼容性仍适用。

创建时,账户捕获跟随计划模型选择(含 per-agent 或全局 subagents.model 中允许的 model@profile 值);不允许的计划模型回退且不保留该模型账户。

要刻意换账户,用模型/profile 选择更新任务(如 --model "openai/gpt-4.1@work")捕获新授权。无记录推理 owner 的遗留任务,openclaw doctor --fix 记录其下次未绑定运行将用的账户:显式选择,否则正常运行账户顺序中的第一个(忽略临时限速冷却)。设了 auth.order 时即此前每次运行用的账户;未设时按最近使用在同类型账户间轮换,Doctor 记录其一。多个账户可选时 Doctor 报出其余账户与更改命令。Doctor 还可在显式选择的 Codex 运行时上收编主机管理账户并记录该运行时;原生拥有或模型锁定的会话不变。Doctor 用正常自动化模型选择、保留继承默认与 fallback 列表、不动既有绑定、提交前备份 cron 状态。缺失账户与需 owner 授权的个人账户保持不变并给出按任务的收编说明。

托管更新与标准容器入口在激活前运行修复性 Doctor;手动源码升级必须先 openclaw doctor --fix 再启动 Gateway。启动时报告可能未迁移的主机账户任务但不捕获凭据、不改写任务。

环境变量或 provider 配置中的密钥无存储账户可记。这类路由上的任务保持未绑定、用该密钥运行;一旦有存储账户符合其路由,任务带收编说明停止而不是切换。任务创建遵循同一规则。账户拒绝结束运行,绝不回退到其他模型或 provider。无凭据模型无需账户仍可用。

未绑定的 CLI 运行时自动化用 CLI 自己的登录、不需要推理绑定;OpenClaw 不在该原生专用路径转发存储推理 profile。有保存推理绑定的任务继续用该账户。已知 provider 认证环境变量与后端凭据排除在环境覆盖后被移除(即使设置了实测 preserve-env 选项);上下文窗口等运行时设置保留。配对节点的运行:Gateway 对每个节点扣留主机凭据;通告原生专用认证支持的节点用自己的 provider 清单移除凭据;旧节点保留本地环境行为、不收新调用参数——更新节点并批准其新能力以启用节点侧过滤。

原生运行时拥有的任务保留其运行时既有授权检查;原生连接不能静默替换任务记录的主机管理推理账户。授权的原生创建者显式更新可采纳其运行时权限;授权的 --model anthropic/<model>@anthropic:claude-cli 编辑可在任务执行路由使用该 CLI 时以 Claude CLI 原生登录替换存储账户(保留任务身份/历史/工具上限);普通模型或默认更改从不清除存储账户。把任务移到不同凭据 owner 的智能体需要显式账户采纳。工具与投递账户独立于推理账户。

--model 在任何会话携带偏好之前选择任务主模型;不抹除会话保存的 /model 偏好(任务模型清除后该偏好可再次生效)。配置的 fallback 链仍适用。无法解析或不允许的模型以显式校验错误失败而不是静默回退默认。任务有 --model 而无显式或配置 fallback 列表时,OpenClaw 传递空 fallback 覆盖,而不是把智能体主模型静默追加为隐藏重试目标。

provider 超时后的 fallback 继续同一计划回合并复用其保存的用户输入;失败尝试不完成回合、不复制计划提示词。

按任务难度选模型而非智能体默认:例行自动化(汇总/分诊/分类/状态检查)用轻模型更好——单次更便宜更快、跨计划累积;深度推理任务保留默认模型;轻主模型失败需升级时用 --fallbacks。

隔离任务的模型选择优先级(从高到低):

  1. 任务负载 model(显式配置;不允许的模型使运行失败)
  2. Gmail 钩子模型覆盖(仅当运行来自 Gmail 且该覆盖被允许)
  3. 用户选择的存储 automation 会话模型覆盖
  4. 智能体/默认模型选择

用户选择的存储会话模型是精确选择(见官方 selection source policy):失败时运行报告失败而不是从配置 fallback 回答。主/自定义(session:<key>)会话的 agent-turn 与用户选择过会话模型的主会话系统事件同样如此;按任务 --fallbacks 仍适用。

Fast 模式跟随解析后的实时选择。隔离自动化按序解析:存储会话 fastMode → per-agent agents.entries.*.fastModeDefault → 全局 agents.defaults.fastModeDefault → 所选模型 params.fastMode。Auto 模式用模型 params.fastAutoOnSeconds 截断(默认 60 秒)。

运行时报告 token 用量而无成本时,自动化用所选智能体本地 models.json 价格与该运行保留的模型元数据估算。

运行命中实时模型切换交接时,调度器以切换后的 provider/model 重试并为活动运行持久化该模型选择。有记录推理账户的任务保留该账户及其兼容认证路由——切换不能采纳别的账户。重试有界:初次尝试加 2 次切换重试后调度器中止而不是循环。

隔离运行启动前,OpenClaw 检查已配置的 api: "ollama" 与 api: "openai-completions" provider 中 baseUrl 为 loopback/私网/.local 的可达本地端点。预检走过任务配置的 fallback 链,只有全部候选不可达才把运行记 skipped;--fallbacks "" 使该检查严格到仅主模型,用户选择的存储会话模型严格到该模型。端点宕机以清晰错误记 skipped 而不是发起注定失败的模型调用。结果按端点缓存 5 分钟(不按任务/模型)——许多到期任务共享一个挂掉的本地 Ollama/vLLM/SGLang/LM Studio 时只花一次检查而不是请求风暴。跳过的预检运行不递增执行错误退避;沿用既有失败告警策略(无需 failureAlert.includeSkipped),周期任务保持启用并在后续预检发现 provider 可达时自动恢复。

客户端预检超时不缓存;下次计划运行重新检查端点而不是继承别的运行的超时。

本地检查只开合一次 TCP 连接、不发 HTTP 请求或 provider 凭据,认证本地服务器不会记下伪 /models 授权失败。TLS、认证与模型错误由推理处理;经托管代理路由的端点把连通性检查推迟给推理而不是直连测试。

任务 scratch 与安静结果

每个任务可在共享状态数据库中的 scratch 里保留私有任务上下文,上限 256 KiB。存在的 scratch 注入任务的有界运行上下文;任务列表、完整任务定义与运行历史响应都不含它。

警告:不要把 API 密钥、token 或其他机密放进 scratch。即使列表与历史响应不含它,它仍会成为模型提示词上下文。

openclaw automations scratch <job-id> --set "Check only for newly blocked work."
openclaw automations scratch <job-id> --json

scratch 更新用版本 compare-and-swap:CLI 写前读当前版本;--expected-revision <n> 固定已知版本。自动化回合内,automations 工具暴露自作用域 scratch_get/scratch_set/record_result,不授予对其他任务 scratch 或设置的访问。scratch_get 返回内容与当前版本;scratch_set 整体替换内容(null 清除)并要求该次读取的 expectedRevision——若提示词说 scratch 被缩短,先重读完整内容再替换;版本冲突时重新读取并对账内容而不是覆盖他人编辑。

可见结果用普通最终回复、沉默用 NO_REPLY。record_result 接受一种结局(no_change/progress/done/blocked/needs_attention);no_change 无需摘要,其余结局需要 1–2000 字符的修剪摘要。它记录结果本身不发送通知;结构化结果保留在运行历史。成功运行后,最后一个有意义的结果随任务保存并作为有界上下文进入下次提示词——即使最终回复沉默。安静检查与执行失败不覆盖该结果、不向对话追加结果样板。这不是投递重试队列:no_change 保持 runner 投递安静而不隐藏执行失败;progress/done/blocked/needs_attention 摘要是运行的创作结果——运行越过的早期工具失败不再给本会沉默的运行追加通用 ⚠️ <tool> failed 通知(失败在转录与进度道仍可见)。自适应调度仍在限速任务上用 next_check。scratch 是上下文不是另一个调度器:运行时不解析 tasks: 块、不读 HEARTBEAT.md。

payload.skipIfScratchEmpty: true(--skip-if-scratch-empty)时,空白文本、注释、标题、围栏标记与空清单残桩都算空清单。用 --unset 移除 scratch 不同:缺失的 scratch 不抑制运行。想让任务无条件停止就禁用它。

命令负载

命令负载在 Gateway 调度器内运行脚本、不启动模型回合:在 Gateway 主机执行、捕获 stdout/stderr、记入运行历史、复用与 agent-turn 相同的 announce/webhook/none 投递模式。

注意:agent-turn 自动化的 exec 需要审批时,卡片投递到已连接审批界面并等待决定;回答 Always allow 铸造作用域常设授权,后续出现不再提示——生命周期/列表/撤销见执行审批的"自动化的常设授权"节。命令负载是操作员管理的 Gateway 自动化面,不是智能体的 tools.exec 调用:创建/更新/移除/手动运行自动化任务需要 operator.admin;计划命令运行作为该管理员署名的自动化在 Gateway 进程内执行。智能体 exec 策略(tools.exec.mode、审批提示、按智能体工具允许列表)管辖模型可见的 exec 工具,不管辖命令负载。

openclaw automations create "*/15 * * * *" \
  --name "Queue depth check" \
  --command "scripts/check-queue.sh" \
  --command-cwd "/srv/app" \
  --announce \
  --channel telegram \
  --to "-1001234567890"

--command <shell> 存储 argv: ["sh", "-lc", <shell>];要精确 argv 而不经 shell 解析用 --command-argv '["node","scripts/report.mjs"]'。可选 --command-env KEY=VALUE(可重复)、--command-input、--timeout-seconds(默认 10 分钟)、--no-output-timeout-seconds、--output-max-bytes 控制进程环境、stdin 与输出上限。automations edit 时 --command-env 替换全部存储环境覆盖——要保留的变量逐个重复;成功编辑后 CLI 在 stderr 警告被丢弃的键名(永不警告值),任务不可读时该警告尽力而为。投递文本来自进程输出:非空 stdout 优先;stdout 空而 stderr 非空投递 stderr;两者都有时发送小段 stdout:/stderr: 块。退出码 0 记 ok;非零退出、信号、超时或无输出超时记 error 并可触发失败告警。只打印 NO_REPLY 的命令走正常静默令牌抑制、不向聊天投递。运行期限停止命令时,运行历史保留其捕获输出与命令超时原因(在有界进程清理后);完成投递在该期限后不再开始。

脚本负载

脚本负载与触发器脚本在同一 code-mode 执行器中无头运行,不启动对话式智能体回合。默认可用;cron.triggers.enabled: false 同时禁用脚本负载、条件触发脚本与流式调度的创建和执行。脚本任务只支持 main 与 isolated 会话目标。脚本只获得自作用域 automations 动作(status/list/get/remove/runs/next_check),无 add/update/run/wake;要稍后恢复对话就调度 agentTurn。

openclaw automations create "0 * * * *" \
  --name "Hourly queue check" \
  --script ./automation/check-queue.js \
  --script-timeout-seconds 300 \
  --script-tool-budget 50 \
  --session isolated \
  --announce

--script <file|-> 从文件或 stdin 读 JavaScript;CLI 保留路径首尾空格,请把路径作为单个 shell 参数引用。超时默认 300 秒、上限 900;工具预算默认 50 次调用、上限 200。这些负载预算独立于更小的触发器门评估预算。

脚本负载可像交互 Code Mode 一样调用已配置 MCP 服务器工具:MCP.<server>.<tool>({ ...input })。MCP 按服务器选择启用——在任务 toolsAllow(--tools)中点名每个服务器(精确工具如 wispr-flow__search_meetings 或服务器作用域通配如 wispr-flow__*)。通配 *、缺失 toolsAllow、无服务器前缀的通配、或从不提及 MCP 的脚本都不会启动服务器。点名服务器内,所属智能体工具策略仍适用。每次运行为点名服务器启动自己的运行时:连接时间计入脚本超时、每次调用计入工具预算,运行结束退役运行时。点名服务器启动失败则 MCP 中缺席;脚本因此失败时,运行错误以 MCP server "<name>" is unavailable: <reason> 结尾。

脚本可返回含以下可选字段的对象:

  • notify:经任务 announce/webhook/none 投递的文本;省略则不投递。main 任务中该文本成为系统事件。
  • wake:"now" 请求立即处理 notify(或紧凑完成事件);旧值 "next-heartbeat" 把通知指派给符合条件的计划自动化,缺目标时报错。
  • state:JSON 状态,上限 16 KB,仅在成功运行后持久化;下次运行收到冻结副本作 trigger.state(与触发器脚本一致)。该命名空间只有一个持久 owner——脚本负载不能与同一任务上的条件触发器组合。
  • nextCheck:时长如 "15m";仅对启用限速的任务有效,用与 agent-turn 提议相同的限速钳制。

抛错、超时、工具预算耗尽、无效结果与无限速的 nextCheck 都是正常自动化运行错误:进入运行历史、退避与失败告警处理,不持久化返回状态。插件重载使缓存的脚本准备失效:插件在准备期间退役时,OpenClaw 在原期限内启动脚本前刷新工具一次;脚本开始后的失败不触发该准备重试;刷新失败时运行历史与失败告警说明自动准备恢复失败、脚本未运行。修改运行中任务的脚本负载或保存状态可保护该编辑不被旧脚本的返回状态影响(含 Gateway 重启后恢复的完成);完成的运行保留其历史。

编写周期任务

周期任务每次触发重跑相同指令——模型每次从零推导的东西每次都花同样的时间与 token。把判断留给模型、把可重复部分移入代码:

  • 把列举与 diff、去重、检查点/水位放进工作区脚本,负载用单次 exec 调用运行;
  • 详细说明放工作区文件、消息引用它(如"遵循 scripts/<job>.md")——多数修复只需改工作区文件而不是更新任务;
  • 消息直接点名运行应使用的确切工具 id 与参数形态,而不是让模型去发现;
  • 把 toolsAllow 封顶到运行实际需要的工具;
  • 脚本能判定无事可做时,用条件触发器、命令负载或脚本负载让安静触发跳过模型(脚本仅在 toolsAllow 点名时可调用 MCP:<server>__<tool> 或 <server>__<server>* 形式;cron.triggers.enabled: false 时触发器与脚本负载不可用);
  • 运行失败时让它失败而不是自己发错误:触发器/脚本负载 JavaScript 抛出、命令负载非零退出。返回 error 字段的脚本仍算成功。调度器拥有失败记账——只有失败告警等待连续失败;运行自身输出仍按任务投递设置走。

执行风格

计划自动化中的 Codex app

Codex 创建的自动化可保留已认证创建线程可用的 app ID 与权限上限。执行时 OpenClaw 要求同一已准备的 Codex profile 与账户,再按当前 app 策略收窄存储上限。被撤销的 app、账户/运行时变化与交互审批要求会带恢复信息停止执行——绝不回退到更宽或不同凭据。无捕获 app 封套的旧任务保持普通非 app 行为;仅当确需 Codex app 访问时重建或重新授权。见官方 Native Codex plugins 文档。

风格--session 值运行位置适合
主会话main所属智能体的主会话提醒、系统事件
隔离isolated专用 cron:<jobId>报告、后台杂务
当前会话current创建对话的子运行需要感知对话上下文的周期工作
自定义会话session:custom-id持久命名会话跨次积累历史的工作流

创建请求带会话上下文时,agent-turn 任务默认用创建对话;无会话键的调用者(含不提供的 CLI/API 调用者)回退 isolated。系统事件默认 main;命令与脚本负载仍默认 isolated。

announce 下,智能体/命令/脚本结果属于接收它的聊天或主题:配置了不同投递目的地时结果发给该目的地,无外部路由时发给创建对话;隔离运行仍不读该对话历史。生成检查与防重复见官方 Automation delivery 文档。

主会话 vs current vs isolated vs custom

主会话任务经所属智能体普通会话队列运行系统事件或 agent-turn 负载,带该会话既有上下文与投递上下文;自动化保持运行直到回合落定——仅入队不算成功。内部自动化回合不延长每日/空闲重置新鲜度;仅可见用户活动更新会话新鲜度。当前会话任务作为创建对话的子运行:每次运行有自己的 cron:<jobId> 会话、使用该对话的资源与权限、读取对话的有界尾部、把最终可见助手结果投递到解析目的地(无外部路由即创建对话)。隔离任务以全新会话运行专用智能体回合。自定义会话(session:xxx)跨运行保留上下文,支持"每日站会基于昨天总结"这类积累工作流。

current 绑定对话上下文而非原智能体执行;announce 结果属于解析后的投递目的地。子运行有自己独立的会话身份与捕获的工具限制,对话自身的会话行不被它改变。对话为 current 时,链接的 current 任务用该对话的 dashboard 与内存;它用自己的计划模型(--model 或智能体默认)与创建时记录的运行时和推理账户——之后切换对话模型/运行时不改变任务的运行。无记录账户的任务(如用自己登录的 CLI 后端)继续跟随对话模型选择;OpenClaw 开始记录运行时之前记录账户的任务同样如此,直到再次用 --model <provider/model>@<profile> 选择账户。链接到创建对话的 current/isolated 任务在对话为 current 时于该对话保存的工作区与工作目录(工作区根而非子目录)运行,并保持对话的必需沙箱。未链接或对话已 reset 的任务用计划智能体的工作区;对话被移除/归档或绑定 worktree 消失则暂停。运行中 reset 对话会结束运行:OpenClaw 工具拒绝后续效果,CLI 后端进程被停使其文件工具不能再写工作区。不继承对话的 cloud worker 放置。发到任务 cron 会话的消息寻址其最新运行(与绑定对话无关);经该稳定 cron 键的在途回合在键被重指派时取消。提示词里的任务专属 checkout 路径不授予访问——用任务继续仓库工作前先核验其执行环境能访问所需 checkout 与工具,否则把工作留给既有执行 owner。提交到对话的结果本身不恢复原智能体。

自定义会话 agent-turn 进入会话普通回合队列并等待活跃工作结束再准备上下文,计划 tick 不会使进行中的压缩失效;自动化保持运行直到回合落定。已保存的认证续跑在执行与投递全程保留原来源及其当前权限。

稍后回到该对话(如复查 CI):加一个一次性 at 任务,payload: { kind: "agentTurn", message: "下一回合的指令" }、sessionTarget: "session:<Runtime 里的会话键>"——它在既有对话内运行,带相同历史与保存的工作区/worktree。

session.scope: "global" 下,session:global 指向所选智能体既有的全局对话(与其主会话别名相同);保留字面 global 键,显式限定智能体的命名键是另一目标。

自定义会话 agent-turn 使用既有会话保存的工作区与工作目录(含托管 worktree)。请求者作用域任务只能为其所属对话使用保存工作区;受信操作员计划任务可指向别的对话的保存工作区。缺失、退役或不匹配的 worktree 停止运行而不是回退默认工作区。文件系统遏制与任务工具限制仍适用——任务提示词里的路径不授予访问。持久会话轮替保留保存的工作区绑定、权限模式、遏制根与继承工具限制;其他分离运行仅从 current 创建对话继承(同上)。新 session:custom-id 无既有会话时从配置的智能体工作区开始。需要安静命名会话工作时用 delivery: { mode: "none" } 且无外部目标,避免 runner 兜底公告。

主会话自动化事件是自包含提醒:只含自己的 job scratch 与指派给该次出现的通知,不含其他 monitor 的清单或无关排队事件——必需指令放进任务负载或 scratch。主会话 agent-turn 支持普通 announce 投递(含 owner 目标);主会话系统事件与脚本任务不能用单独聊天 announce 目标——启用它的编辑被拒绝且不改任务。主 webhook 投递仍受支持。

隔离任务的"全新会话"是什么意思

每次运行新的转录/会话 id。OpenClaw 携带安全偏好(thinking/fast/verbose 设置、标签、显式用户选择的模型/认证覆盖),但不继承旧自动化会话行的环境对话上下文:渠道/群组路由、发送或队列策略、提权、origin 或 ACP 运行时绑定。需要周期任务刻意建立在同一对话上下文上时用 current 或 session:<id>。发到任务 cron:<jobId> 会话的消息(如 sessions_send)寻址其最新运行;运行结束时仍在排队的消息可能失败,下次运行重指派键、后续运行不带它——把后续运行需要的信息放进任务负载或 scratch。

无人值守运行契约

OpenClaw 运行时上的计划回合在无关 MCP 服务器配置编辑期间继续;MCP owner 仍会退役变更的连接,保留的调用不能用已退役连接。接收自身 MCP 配置的其他原生运行时保留其配置检查。未开始的工作可在相关策略变更后自动重新准入;可能已产生效果的工作可见地失败而不是重放那些效果。

隔离自动化与钩子 agent-turn 明确无人值守:没有人在场澄清或批准。最终回复必须是交付物本身而不是计划、确认或请求输入。智能体无事可做时记 no_change(无摘要)并返回 NO_REPLY。未变化状态与重复的已知阻塞保持安静;需要行动的新阻塞与变化获得简洁结果。显式要求的周期报告与摘要仍按请求节奏运行投递。执行失败保持可见而不被当作无变化。机器可判定的条件用现成确定性条件触发器或脚本在无变化时跳过推理,而不是付一次模型回合去重新发现该事实。

完成的模型运行不证明所请求任务成功。调度器不把助手措辞分类为执行错误:阻塞报告是普通输出(含子代理的落定最终答案),按任务投递策略走,本身不触发重试、错误退避、失败告警或 owner 对话修复。运行时失败(provider 错误、执行超时)仍使运行失败并走正常调度器失败策略;必需投递失败分开跟踪(见官方 Failure notifications)。

受信计划任务的任务自身指令有意要求提问或计划时指令优先,智能体可移除不再需要的任务。外部钩子回合只收到通用无人值守契约,不跨外部内容边界收到该覆盖或自移除指引。

子代理与 Discord 投递

子完成不恢复隔离自动化回合。编排者要对子结果行动(集成或验证其工作)时,必须以 collect: true 生成并在结束回合前用 agents_wait 收集;子输出本身即交付物时 fire-and-forget 委派也有效。

隔离自动化运行编排子代理时,投递偏好最终后代输出而非过期父级中间文本。后代任务仍在运行或落定时,OpenClaw 抑制该部分父级更新而不是公告它——含让位给后继的编排者与结果投递仍挂起的已完成后代。该等待共享既有运行期限、取消即止。delivery.mode: "none" 的运行若回合只把工作交给子级,则在同一期限下等待子级并把子级最终回复记为运行输出(不发送)。子代理必须返回有意义结果或具体阻塞,即使投递为 none;只返回 NO_REPLY 的子级进入 missing-answer 恢复——仍无结果或超时则自动化失败。成功子级:spawn-only 交接用仍保留中的完整最终答案(非 4096 字符生命周期预览);完整答案不再可用时保留既有预览(含尾部 …)。纯文本 Discord announce 目标只发送一次最终助手文本而不是重放流式/中间文本+最终答案;媒体与结构化 Discord 载荷仍分开投递以不丢附件与组件。

译注:本页对应官方文档 Automation payloads,按官方仓库固定提交 bf26a4c(2026-11-06 检出)逐节核对;正式发布前字段、默认值与行为应以官方最新文档复核。