跳转至

自动化 (cron)

# `openclaw automations` {#openclaw-automations}

管理 Gateway 调度器的自动化任务。该命令注册为 `openclaw cron`,`openclaw automations` 是其别名。下面的每个子命令都可用两种拼写之一运行。

!!! tip

    运行 `openclaw automations --help` 可查看完整命令面。概念指南见 [Automations](../automation/cron-jobs.md)。

!!! note

    所有自动化变更操作(`add`/`create`、`edit`、`remove`、`run`)都需要 `operator.admin`。命令负载(command-payload)运行直接在 Gateway 进程中执行,而不是作为 agent 的 `tools.exec` 工具调用。`tools.exec.*` 和 exec 审批仍然管辖模型可见的 exec 工具。

每个自动化子命令都接受共享的 Gateway 连接选项。对于运行在非默认本地端口的 Gateway,使用 `--port <port>`;对于显式 WebSocket URL,使用 `--url <url>`。不要同时使用两者。`--port`、`--url`、`--token` 等连接选项可出现在子命令之前或之后。

自动化命令需要运行中的 Gateway。使用 token、password 或 `none` 认证时,对配置的本地回环(loopback)Gateway 的调用不会打开共享状态数据库进行设备认证。远程目标和显式 URL 目标仍保留其设备认证与配对要求。

## 快速创建任务 {#create-jobs-quickly}

`openclaw automations create` 是 `openclaw automations add` 的别名。对于新任务,先放调度表达式,再放 prompt:

```bash
openclaw automations create "0 7 * * *" \
  "Summarize overnight updates." \
  --name "Morning brief" \
  --agent ops

对于 agent 或 command 任务,--timeout-seconds 接受非负整数秒。在 add/create 或 edit 上设置 --timeout-seconds 0 可禁用调度器的墙上时钟(wall-clock)上限。创建时省略该标志则保留默认超时;编辑时省略该标志则已存储的超时不变。agent/provider 超时、启动看门狗(watchdog)以及 command-runner 限制仍然适用。系统事件任务不接受 --timeout-seconds;脚本任务改用 --script-timeout-seconds。

当任务应将完成后的 payload 以 POST 方式发送、而不是投递到聊天目标时,使用 --webhook <url>:

openclaw automations create "0 18 * * 1-5" \
  "Summarize today's deploys as JSON." \
  --name "Deploy digest" \
  --webhook "https://example.invalid/openclaw/cron"

对于在 OpenClaw 调度器内部运行的确定性 shell 风格任务,使用 --command,这类任务不会启动隔离的 agent/model 运行:

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

--command <shell> 会存储 argv: ["sh", "-lc", <shell>]。如需精确的 argv 执行,使用 --command-argv '["node","scripts/report.mjs"]'。Command 任务会捕获 stdout/stderr、记录正常的运行历史,并通过与隔离任务相同的 announce、webhook 或 none 投递模式路由输出。只打印 NO_REPLY 的命令会被抑制。

当列表和详情视图需要显示一个与自动化稳定名称不同的人类可读标签时,使用 --display-name <name>。可通过 automations add|edit --display-name 设置或更新该标签。使用 automations edit <job-id> --clear-display-name 可移除标签,并在列表和详情视图中恢复稳定名称。set 和 clear 选项不能同时使用。

调度类型

作为位置式创建语法的替代方案,automations add|create 接受以下一种调度标志。automations edit 使用相同的标志来替换任务的调度:

  • --at <when> 根据 ISO 时间戳或时长(如 20m)调度单次运行。没有偏移的时间戳默认使用 UTC,除非提供 --tz <iana>。
  • --every <duration> 设置重复间隔,如 10m、1h 或 1d。
  • --cron <expression> 设置五段或六段式 cron 调度。使用 --tz <iana> 指定评估时区,使用 --exact 禁用错峰(staggering),或使用 --stagger <duration> 设置错峰窗口。
  • --on-exit <shell> 启动一个被监视的命令,并在其退出时触发任务一次。--on-exit-cwd <path> 设置该命令的工作目录,且必须与 --on-exit 一起使用。
  • --stream-command <json> 接受一个非空的 JSON 字符串数组作为受监督的长期运行命令的参数,并根据其批量输出触发任务。--stream-cwd <path> 设置该来源的工作目录。--stream-mode line|match 选择每一行或仅匹配的行。匹配模式需要 --stream-match <regex>,该选项在行模式中无效。--stream-batch-ms <n> 设置静默窗口延迟(毫秒),--stream-max-batch-bytes <n> 设置每批的最大 UTF-8 字节数。

--tz 适用于 cron 调度和无偏移的 --at 时间戳,而 --exact 和 --stagger 仅适用于 cron 调度。这三个标志都不适用于 exit 或 stream 调度。流的生命周期、批处理限制和触发详情见 自动化调度。

创建时,省略 --command-cwd、--on-exit-cwd 或 --stream-cwd 将使用默认工作目录。显式传入空路径或仅含空白字符的路径会报错。编辑 stream 任务时,--stream-cwd "" 仍会清除其已配置的工作目录。

会话

--session 接受 main、isolated、current 或 session:<id>。

当会话上下文可用时,agent 回合任务默认使用创建时的对话。如果没有会话键,包括普通 CLI 调用和省略会话键的 API 调用,则目标回退到 isolated。

会话键
  • main 绑定到 agent 的主会话。
  • isolated 为每次运行创建全新的转录(transcript)和会话 ID。
  • current 绑定创建时的活动会话。
  • session:<id> 固定到显式的持久会话键。
隔离会话语义

隔离运行会重置环境会话上下文。通道和群组路由、发送/队列策略、提权(elevation)、来源(origin)以及 ACP 运行时绑定都会为新运行重置。安全偏好设置和用户显式选择的模型或认证覆盖项可以跨运行保留。

当操作员移除具有活动运行的自动化时,OpenClaw 会请求取消该运行。已准入的自动化可以移除自己的作业,而不会取消活动运行。JSON 移除响应在请求取消时包含 `activeRunCancellationRequested: true`。对于隔离自动化,可复用会话清理随后会等待活动运行停止,并在清理延迟期间报告 `sessionCleanup: "pending"`。运行历史会被保留。

如果会话清理失败,错误会被记入日志。没有活动运行的移除操作也会向调用方返回清理错误。使用 `openclaw sessions list --json` 查找剩余会话,然后在 Gateway 或 worker 恢复后使用 `openclaw sessions delete <key> --yes` 重试清理。

## 投递 {#delivery}

`openclaw automations add`、`openclaw automations list` 和 `openclaw automations show <job-id>` 会预览解析后的投递路由。对于 `channel: "last"`,预览会显示路由是从主会话还是当前会话解析而来,或者将以失败关闭(fail closed)方式失败。

如果现有会话元数据存储无法读取或其 schema 未就绪,预览会保留请求的目标,并报告其不可用的原因,而不会阻塞作业创建或列表展示。数据库不存在时,没有会话路由历史,并使用正常的投递回退。

带提供方前缀的目标可用于消除未解析的 announce 通道的歧义。例如,当 `delivery.channel` 被省略或为 `last` 时,`to: "telegram:123"` 会选择 Telegram。只有已加载插件所声明的前缀才是提供方选择器。如果 `delivery.channel` 是显式的,前缀必须与该通道匹配。`channel: "whatsapp"` 与 `to: "telegram:123"` 组合会被拒绝。`imessage:` 和 `sms:` 等服务前缀仍属于通道专属的目标语法。

!!! note

    隔离的 `automations add` 作业默认使用 `--announce` 投递。使用 `--no-deliver` 将输出保持为内部。`--deliver` 仍是 `--announce` 的弃用别名,后者在 2026.2.3 中取代了 `--deliver`。

### 投递归属 {#delivery-ownership}

隔离自动化的聊天投递由 agent 与 runner 共享:

- 当聊天路由可用时,agent 可以使用 `message` 工具直接发送。
- 仅当 agent 未直接向已解析的目标发送时,`announce` 才会对最终回复进行回退投递。
- `webhook` 将完成后的负载(payload)发布到 URL。
- `none` 禁用 runner 的回退投递。

使用 `automations add|create --webhook <url>` 或 `automations edit <job-id> --webhook <url>` 来设置 webhook 投递。不要将 `--webhook` 与聊天投递标志(如 `--announce`、`--no-deliver`、`--channel`、`--to`、`--thread-id` 或 `--account`)组合使用。

`automations edit <job-id>` 可以使用 `--clear-channel`、`--clear-to`、`--clear-thread-id` 和 `--clear-account` 取消设置单个投递路由字段(每个字段在与对应的设置标志组合时会被拒绝)。与 `--no-deliver` 仅禁用 runner 回退投递不同,这些标志会移除已存储的字段,使作业重新从默认值解析该部分路由。

`--announce` 是对最终回复的 runner 回退投递。`--no-deliver` 会禁用该回退,但不会在聊天路由可用时移除 agent 的 `message` 工具。

从活动聊天创建的提醒会保留实时聊天投递目标,用于回退 announce 投递。内部会话键可能为小写。不要将它们用作区分大小写的提供方 ID(如 Matrix 房间 ID)的权威依据。

### 失败通知 {#failure-delivery}

失败通知按以下顺序解析:

1. 作业 `failureAlert` 对象中的路由字段。
2. 作业上的 `delivery.failureDestination`,叠加在 `cron.failureAlert` 上的全局目标字段(`mode`、`channel`、`to`、`accountId`)之上。`cron.failureDestination` 块已于 2026.8.1 停用,由 `openclaw doctor --fix` 合并到这些字段中。
3. 作业的主要 announce 目标(当上述两项均未解析到具体目标时)。

具有其中一条路由的作业默认在连续 2 次失败且冷却 1 小时后触发执行失败警报。即使没有现有路由,按作业或全局的 `failureAlert` 对象也会显式激活/调整该策略。`failureAlert: false` 会禁用该作业的执行失败和必需投递失败警报,但不会禁用自动禁用安全通知。全局 `enabled: false` 会禁用继承,除非作业有自己的 `failureAlert` 对象。`delivery.bestEffort: true` 会抑制继承/默认的执行警报,但不会抑制显式的按作业策略。

相同原因导致的重复失败会在 Gateway 重启后仍归并为单一事件。原因或目标发生变化时,可在冷却期后再次通知;成功完成时发送一条恢复通知。跳过的运行和未知的投递结果不计为恢复。如果插件重新加载后脚本设置无法刷新工具,警报会说明自动恢复在脚本运行之前已失败。

!!! note

    主会话作业仅在主要投递模式为 `webhook` 时才能使用 `delivery.failureDestination`。隔离作业在所有模式下都接受它。

聊天失败通知包含 agent 配置的用户时区中的运行开始时间。Webhook 消息文本保持稳定,并将该时刻暴露为 `runAtMs`。

隔离自动化运行会将运行级别的 agent 失败视为作业错误,即使没有生成回复负载。模型和提供方失败仍会递增错误计数器并触发失败通知。

命令作业不会启动隔离的 agent 回合。退出码为零时记录 `ok`。非零退出、信号、超时或无输出超时记录 `error`,并可触发相同的失败通知路径。

必需完成投递是独立的:`status: "ok"` 与 `completionStatus: "failed"` 组合不会递增执行连续计数或退避。投递失败警报使用已解析的备用失败目标,不经过 `after` 阈值,并将重复失败归并为单一事件。针对已变更失败的警报遵循作业/全局共享的 `failureAlert.cooldownMs`(默认 1 小时),包括执行警报之后的首次投递失败。恢复通知不等待冷却期。警报绝不会重试刚刚失败的主要路由。



如果隔离运行在首次模型请求之前超时,`openclaw automations show` 和 `openclaw automations runs` 会包含特定阶段的错误。示例包括 `setup timed out before runner start`,或指明最后已知启动阶段(例如 `context-engine`)的停滞消息。对于基于 CLI 的提供商,模型前看门狗会保持激活,直到外部 CLI 回合开始。因此,会话查找、hook、auth、prompt 和 CLI 设置停滞都会作为模型前自动化失败报告。

## 调度 {#scheduling}

### 一次性任务 {#one-shot-jobs}

`--at <datetime>` 安排一次性运行。不带偏移量的日期时间按 UTC 处理,除非同时传入 `--tz <iana>`,后者会在给定 IANA 时区中解释墙上时间。

无效的 `--tz` 值会在保存任务前被拒绝;请使用 IANA 时区,例如
`America/New_York`。无效时间戳以及夏令时转换期间不存在的本地时间会作为 `--at` 错误单独报告。

!!! note

    一次性任务仅在 `completionStatus: "succeeded"` 后删除。必需投递失败或完成状态未知会使任务保持禁用,且没有下次运行,因此重启不会重放 payload 副作用。有意静默以及显式 `delivery.bestEffort: true` 的成功执行会正常完成并删除。使用 `--keep-after-run` 也可保留成功任务。

### 周期性任务 {#recurring-jobs}

配置的间隔和错峰窗口在人类可读输出中保留毫秒精度:`--every 90s` 显示为 `every 1m 30s`,`--stagger 1001ms` 显示为 `stagger 1s 1ms`。当列表列被截断时,使用 `automations show <job-id>` 查看完整时长。相对下次运行和上次运行标签仍会四舍五入。

周期性任务在连续错误后使用指数重试退避:30s、1m、5m、15m、60m。下一次成功运行后,调度恢复正常。

跳过的运行与执行错误分开跟踪。它们不影响重试退避,但 `openclaw automations edit <job-id> --failure-alert-include-skipped` 可以让失败告警选择接收重复的跳过运行通知。

本地配置的模型提供商的 base URL 位于回环地址、私有网络或 `.local` 上。对于目标为这类提供商的隔离任务,调度器在启动 agent 回合之前会运行轻量级提供商预检。调度器会在 `/api/tags` 探测 `api: "ollama"` 提供商。它会在 `/models` 探测其他本地 OpenAI 兼容提供商(例如 `api: "openai-completions"`,如 vLLM、SGLang 和 LM Studio)。如果端点不可达,调度器会将运行记录为 `skipped`,并在稍后的调度中重试。它会按端点缓存可达性结果 5 分钟,因此针对同一本地服务器的许多任务不会发送重复探测。

自动化任务、待处理运行时状态和运行历史保存在共享 SQLite 状态数据库中。它在 2026.6.1 中替换的文件存储仍会被导入一次:旧版 `jobs.json`、`<name>-state.json` 和 `runs/*.jsonl` 文件会被读取,然后重命名并添加 `.migrated` 后缀。导入后,请使用 `openclaw automations add|edit|remove` 编辑调度,而不是编辑 JSON 文件。

### 手动运行 {#manual-runs}

手动运行已禁用的任务不会启用其调度,也不会创建自动重试。使用 `openclaw automations enable <job-id>` 恢复计划运行。

`openclaw automations run <job-id>` 默认强制执行,并在 Gateway 持久化预留运行且将其接受到执行通道后返回。成功响应包括 `{ ok: true, enqueued: true, runId }`;任务可能仍在等待槽位。如果准入或调用方检查在队列接受之前失败,请求会失败,且不会报告已入队运行。如果 Gateway 在分发前退出,启动过程会在状态数据库中为该确切请求记录一个中断回执。此类分发前中断不会出现在已执行运行历史中。使用返回的 `runId` 检查已执行运行的结果:

```bash
openclaw automations run <job-id>
openclaw automations runs <job-id> --run-id <run-id>

当脚本需要阻塞直到该确切入队运行记录到终止状态时,添加 --wait:

openclaw automations run <job-id> --wait --wait-timeout 10m --poll-interval 2s

使用 --wait 时,CLI 会先调用 cron.run,然后轮询返回的 runId 对应的持久化 cron.runs 行。它不会重新读取可变的任务投递设置。JSON 将 payload 执行报告为 status,将整个运行完成报告为 completionStatus。只有 completionStatus: "succeeded" 时命令才以 0 退出。failed、unknown、执行错误或跳过、缺失的 runId 以及超时到期都会以非零退出(默认 10m,默认每 2s 轮询一次)。--poll-interval 必须大于零。已完成的 JSON 输出(包括运行摘要)会在命令退出前刷新,因此可以管道到 JSON 读取器。

Note

当你希望手动命令仅在任务当前已到期时运行时,使用 --due。如果 --due --wait 未入队运行,命令会返回正常的非运行响应,而不是轮询。

模型

automations add|edit --model <ref> 为任务选择一个允许的模型。automations add|edit --fallbacks <list> 设置每个任务的回退模型,例如 --fallbacks openrouter/gpt-4.1-mini,openai/gpt-5。传入 --fallbacks "" 表示严格运行且没有回退。automations edit <job-id> --clear-fallbacks 移除每个任务的回退覆盖。automations edit <job-id> --clear-model 移除每个任务的模型覆盖。之后任务遵循正常自动化模型选择优先级:如果存在已存储的自动化会话覆盖,则使用它,否则使用 agent 或默认模型。不能与 --model 组合使用。automations add|edit --thinking <level> 设置每个任务的 thinking 覆盖。automations edit <job-id> --clear-thinking 移除它,使任务遵循正常自动化 thinking 优先级。不能与 --thinking 组合使用。

Warning

如果模型不被允许或无法解析,调度器会以明确的验证错误使运行失败。它不会回退到任务的 agent 或默认模型选择。

The automation --model is a job primary, not a chat-session /model override. That means:

  • 当所选作业模型失败时,已配置的模型回退仍然适用。
  • 当存在按作业 payload 的 fallbacks 时,它会替换已配置的回退列表。
  • 空的按作业回退列表(作业 payload/API 中的 --fallbacks "" 或 fallbacks: [])会使运行变为严格模式。
  • 当作业有 --model 但未配置回退列表时,OpenClaw 会传递显式的空回退覆盖。因此,agent 主模型不会被追加为隐藏的重试目标。
  • 本地提供商预检会遍历已配置的回退,然后再将运行标记为 skipped。

openclaw doctor 会报告已经设置了 payload.model 的作业,包括提供商命名空间计数以及与 agents.defaults.model 的不匹配。当实时聊天和计划作业之间的认证、提供商或计费行为看起来不同时,请使用该检查。

隔离自动化模型优先级

隔离自动化运行按以下顺序解析活动模型:

  1. Gmail-hook 覆盖。
  2. 按作业的 --model。
  3. 已存储的自动化会话模型覆盖(当用户选择了某个模型时)。
  4. Agent 或默认模型选择。

快速模式

隔离自动化的快速模式遵循已解析的实时模型选择。它会解析已存储会话的 fastMode、按 agent 的 agents.entries.*.fastModeDefault、全局 agents.defaults.fastModeDefault,然后是所选模型的 params.fastMode。当解析后的模式为 auto 时,阈值使用所选模型的 params.fastAutoOnSeconds 值,默认为 60 秒。

实时模型切换重试

如果隔离运行抛出 LiveSessionModelSwitchError,调度器会在重试之前持久化当前活动运行已切换的提供商和模型。如果存在已切换的认证配置覆盖,它也会持久化该覆盖。外层重试循环在初始尝试之后限制为两次切换重试,然后中止,而不是无限循环。

运行输出与拒绝

过期确认抑制

隔离自动化轮次会抑制仅包含过期确认的回复。如果第一个结果只是临时状态更新,调度器会在投递前重新提示一次以获取真实结果。当最终答案由后代子 agent 运行负责时,它不会重新提示。

静默令牌抑制

如果隔离自动化运行仅返回静默令牌(NO_REPLY 或 no_reply),调度器会抑制直接出站投递和回退队列摘要路径。不会向聊天发布任何内容。

人类可读的 automations list 和 automations show 会将成功的有意抑制标记为 ok (suppressed),而不是投递警告。automations show 包含 last delivery suppression,并带有记录的原因(empty、silent、heartbeat 或 channel_transform)。JSON 保留 deliveryStatus: "not-delivered" 以及单独的 deliverySuppressionReason。没有有意原因的真实投递失败,在执行成功时仍显示 ok (not delivered)。

投递结果未确认的成功执行显示 delivery unknown,包括在收到响应头之前超时的 webhook 请求。该标签适用于必需投递和尽力投递;它并不声称投递失败。JSON 执行状态仍为 ok。

结构化拒绝

隔离自动化运行使用嵌入运行中的结构化执行拒绝元数据(编码为 SYSTEM_RUN_DENIED 或 INVALID_REQUEST 的致命 exec-tool 错误)作为权威的拒绝信号。它们也接受节点主机对携带其中一个代码的嵌套结构化错误所加的 UNAVAILABLE 包装。

只有当嵌入运行也提供结构化拒绝元数据时,调度器才会将最终输出文本或看似批准的拒绝短语归类为拒绝。因此,普通助手文本不会被当作被阻止的命令。

automations list 和运行历史会显示拒绝原因,而不是将阻止的命令报告为 ok。

保留

保留行为:

  • cron.sessionRetention 会修剪已完成的隔离运行会话。默认值为 24h。设置 false 或零时长(例如 "0h")可禁用它。
  • 终端运行历史保留 7 天,lost 行保留 24 小时。额外的上限仅保留每个作业和历史类别中最新的 2000 行。

迁移旧作业

Note

如果你有早于当前投递和存储格式的自动化作业,请运行 openclaw doctor --fix。doctor 会规范化旧版作业字段:jobId、schedule.cron、顶层投递字段(包括旧版 threadId)以及 payload provider 投递别名。它还会将 notify: true webhook 回退作业从已弃用的原始 cron.webhook 值迁移到显式 webhook 投递。之后它会移除该配置键。已经向聊天发送公告的作业会保留该投递,并获得一个完成 webhook 目标。如果没有旧版 webhook,doctor 会移除没有迁移目标的作业的无作用顶层 notify 标记。现有投递保持不变。因此 doctor --fix 会停止再次警告它们。

常见编辑

在不更改消息的情况下更新投递设置:

openclaw automations edit <job-id> --announce --channel telegram --to "123456789"

为隔离作业禁用投递:

openclaw automations edit <job-id> --no-deliver

为隔离作业启用轻量级引导上下文:

openclaw automations edit <job-id> --light-context

向特定频道发送公告:

openclaw automations edit <job-id> --announce --channel slack --to "channel:C1234567890"

向 Telegram 论坛主题发送公告:

openclaw automations edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42

创建具有轻量级引导上下文的隔离作业:

openclaw automations create "0 7 * * *" \
  "Summarize overnight updates." \
  --name "Lightweight morning brief" \
  --session isolated \
  --light-context \
  --no-deliver

--light-context 仅适用于隔离的代理轮次任务。对于自动化运行,轻量模式会保持引导上下文为空,而不是注入完整的工作区引导集。

使用精确的 argv、cwd、env、stdin 和输出限制创建命令任务:

openclaw automations create "*/30 * * * *" \
  --name "Position export" \
  --command-argv '["node","scripts/export-position.mjs"]' \
  --command-cwd "/srv/app" \
  --command-env "NODE_ENV=production" \
  --command-input '{"mode":"summary"}' \
  --timeout-seconds 120 \
  --no-output-timeout-seconds 30 \
  --output-max-bytes 65536 \
  --webhook "https://example.invalid/openclaw/cron"

常见管理命令

手动运行和检查:

openclaw automations list
openclaw automations list --agent ops
openclaw automations get <job-id>
openclaw automations get <job-id> --json
openclaw automations show <job-id>
openclaw automations run <job-id>
openclaw automations run <job-id> --due
openclaw automations run <job-id> --wait --wait-timeout 10m
openclaw automations run <job-id> --wait --wait-timeout 10m --poll-interval 2s
openclaw automations runs <job-id> --limit 50
openclaw automations runs <job-id> --limit 50 --json
openclaw automations runs <job-id> --run-id <run-id>
openclaw automations runs <job-id> --status error --query timeout
openclaw automations runs <job-id> --delivery-status not-delivered
openclaw automations runs <job-id> --sort asc --offset 200 --limit 50

automations runs 是推荐写法。cron runs 以及叶子本地的 --id <job-id> 形式仍然是受支持的兼容别名。

运行历史过滤器由 Gateway 在分页前应用。使用 --status 配合 all、ok、error 或 skipped;使用 --delivery-status 配合 delivered、not-delivered、unknown 或 not-requested。--query <text> 搜索运行摘要和错误。--sort asc|desc 选择最旧优先或最新优先顺序,--offset <n> 使用上一条命令返回的分页元数据在结果集中前进。

openclaw automations list 默认显示跨代理的已启用任务,包括无法解析所有者的任务。传入 --all 以包含已禁用任务,或传入 --agent <id> 按有效规范化代理 ID 过滤。所有权解析顺序为:任务声明的代理、其代理作用域会话密钥,然后是已配置的 system-agent 所有者。无法解析的任务不匹配代理过滤器。cron list 别名具有相同行为。

人类可读的 Agent ID 列显示有效所有者。JSON 列表行保留声明的 agentId,并包含 effectiveAgentId;当所有权无法解析时,其值为 null。

现有主会话任务在其代理不再是系统默认后,仍可以重命名、禁用或重新调度。创建主会话任务,或显式设置其代理、会话目标或负载类型,会重新验证当前主会话规则。

无法解析的所有者不会阻止调度器:该任务会被跳过,并在 state.lastError 中提供说明,而其他任务继续运行。运行 openclaw doctor --fix 以修复无法解析的多代理遗留所有权,设置 agents.defaults.systemAgent.agentId,或使用 openclaw cron edit <job-id> --agent <id> 修复该任务。运行时认可的单代理名册和遗留默认标记已经解析出所有者,无需迁移所有者。说明保留在任务上。由于没有启动代理运行,因此不会创建代理运行历史条目。

--json 始终请求 JSON 输出。结果本身已是机器可读结果的命令默认输出 JSON 结果:add/create、status、enable、disable、rm/remove/delete、run、edit、get 和 runs。它们接受 --json 作为显式机器输出写法。openclaw automations get <job-id> 直接返回存储的任务 JSON。当你想要带投递路由预览的人类可读视图时,使用 automations show <job-id>。

list 和 show 默认使用人类可读输出,并可通过 --json 切换为 JSON。scratch 默认读取原始 scratch 内容。使用 --json 时,它会打印 scratch 及修订元数据。Scratch 写入默认以 JSON 返回修订结果,并接受 --json 作为显式机器输出写法。

automations show 还接受精确的任务名称,匹配时不区分大小写。 任务 ID 优先。当多个任务匹配该名称时(包括已禁用任务),命令会报告歧义,并包含匹配任务的完整 ID、名称、调度摘要、启用状态和状态。请使用预期的任务 ID 而不是名称重试同一命令。

使用 --json 时,失败信封会在 error.matches 中包含这些摘要。 事件调度显示为 on-exit 或 stream,不包含其命令文本。

automations list --json 和 automations show <job-id> --json 会为每个任务包含一个顶层 status 字段,该字段根据 enabled、state.runningAtMs 和 state.lastRunStatus 计算。取值:disabled、running、ok、error、skipped 或 idle。JSON 状态保持规范且无装饰,因此外部工具可以直接读取任务状态,而无需重新推导。人类可读输出可能会为重复的 error 状态添加失败次数装饰。

automations runs 条目包含投递诊断信息,包括预期的自动化目标、已解析目标、消息工具发送、回退使用情况和已投递状态。

每个任务的私有 scratch(心跳检查清单和类似监控上下文):

openclaw automations scratch <job-id>                  # print current scratch content
openclaw automations scratch <job-id> --json           # scratch plus revision metadata
openclaw automations scratch <job-id> --set "text"     # replace scratch with exact text
openclaw automations scratch <job-id> --file notes.md  # replace scratch from a file (- for stdin)
openclaw automations scratch <job-id> --unset          # remove the scratch row

Scratch 存储在共享状态数据库中,上限为 256 KiB,并且永远不会包含在 automations list/automations get/automations runs 输出中。写入操作使用比较并交换机制,针对命令开始时读取的修订版本进行保护。也可以传入 --expected-revision <n> 以固定显式修订版本。有关心跳监控如何使用 scratch,请参阅 Heartbeat。

Agent 与会话重定向:

openclaw automations edit <job-id> --agent ops
openclaw automations edit <job-id> --clear-agent
openclaw automations edit <job-id> --session current
openclaw automations edit <job-id> --session "session:daily-brief"

openclaw automations add 在 agent-turn 任务中省略 --agent 时会发出警告,并回退到默认 Agent(main)。创建时传入 --agent <id> 可固定特定 Agent。

投递调整:

openclaw automations edit <job-id> --announce --channel slack --to "channel:C1234567890"
openclaw automations edit <job-id> --webhook "https://example.invalid/openclaw/cron"
openclaw automations edit <job-id> --best-effort-deliver
openclaw automations edit <job-id> --no-best-effort-deliver
openclaw automations edit <job-id> --no-deliver

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw