自动任务

自动任务

自动任务通过 cron 计划、事件或 Webhook 触发器自动执行工作流,是工单之外让智能体干活的另一种方式。

自动任务

自动任务是一种在触发条件满足时自动执行的工作流规则。触发器可以是 Cron 计划、工作区事件或入站 Webhook。触发后,自动任务会执行一个动作——创建工单、派发智能体任务或发送通知。

如果说工单是“事件驱动”的人工与智能体交互,那自动任务就是“自动化驱动”的后台作业——条件满足即自动执行,无需人工干预。两者都是让智能体干活的方式,只是触发时机与驱动方式不同。

自动任务位于侧边栏的 自动任务 下。

触发器类型

类型触发时机
定时Cron 表达式与当前时间匹配时。
事件工作区内发生特定事件时(如工单状态变更、智能体任务完成等)。
WebhookHTTP POST 请求到达自动任务的唯一 URL 时。

单个自动任务可配置多种触发器。

动作类型

动作说明
创建工单触发时,将自动任务的指令作为工单描述,创建并分配工单,然后启动执行者。整体类似自动完成一次手动创建并分配工单的流程,工作过程会在独立工单中跟踪。
仅运行不创建工单,直接使用指令启动一次独立的智能体任务。体验上类似在聊天中向智能体发送该指令,但它不是聊天消息或对话轮次,而是归属于本次自动任务运行。
发送通知向指定工作区成员发送站内通知,不启动智能体任务。

动作类型可在自动任务详情页修改。指令 字段在三种动作类型中共用:

  • 创建工单 — 作为工单描述
  • 仅运行 — 作为智能体任务指令
  • 发送通知 — 当动作配置中未填写消息时,用作通知内容

动作配置

每种动作类型在自动任务详情页侧边栏中有独立的配置字段。

创建工单

字段说明
工单标题要创建的工单标题。为空时默认为 Job: <名称>
优先级工单优先级:低 / 普通 / 高 / 紧急(留空为普通)。
所属项目将工单分配到的项目。
智能体 / 团队接收工单的智能体或团队(在"智能体分配"区域设置)。

仅运行

字段说明
智能体 / 团队要派发任务的智能体或团队(在"智能体分配"区域设置)。

任务指令来自自动任务的 指令 字段。

团队分配: 两种动作类型均支持分配给团队而非单个智能体。分配团队时,平台会在派发时选取团队中最空闲的成员执行任务。

发送通知

字段说明
消息通知内容。为空时回退到 指令 字段。

任务所有者

每个自动任务都有一个 所有者——即创建该任务的成员。所有者显示在自动任务详情的侧边栏中,当工作区使用"仅自己"权限规则时,所有者决定了谁可以编辑或删除该任务。

操作所需 Scope所有权规则
创建自动任务jobs:write
编辑自动任务jobs:write仅自己:只有任务所有者可以编辑
删除自动任务jobs:delete仅自己:只有任务所有者可以删除

创建自动任务

  1. 在侧边栏打开 自动任务
  2. 点击 新建自动任务
  3. 填写:
    • 名称 — 描述性标签(如 每日巡检慢查询周报值班告警
    • 描述 — 可选说明,解释该自动任务的作用和存在原因
    • 目标 — 可选的预期结果或成功标准
    • 触发器类型 — 定时、事件或 Webhook
    • 动作类型 — 触发后执行的操作
  4. 点击 创建
  5. 在详情页,在侧边栏设置 指令 和各动作专属配置

定时触发器

定时触发器使用标准的 5 字段 Cron 表达式:分钟 小时 日 月 星期。时间以工作区时区计算。

示例:

Cron含义
0 9 * * 1每周一 9:00
*/15 * * * *每 15 分钟
0 0 1 * *每月 1 日午夜
0 17 * * 1-5工作日 17:00
30 8 * * 6,0周六和周日 08:30

平台的 Cron 调度器会轮询到期的触发器。时间误差可能有几秒——不建议将定时触发器用于硬实时场景。

事件触发器

事件触发器监听工作区内部的实时生命周期事件(如工单流转、智能体任务完成、评论发布或运行时下线),并在匹配预设条件时自动触发执行任务。

通过事件触发器,你可以构建自闭环的自动化流水线——例如:“当线上 Bug 工单状态变为 Done 时,自动指派智能体执行复盘分析”“当 GPU 运行时异常下线时,自动创建报警工单并通知负责人”

支持的事件类型与动作

事件类型 (event)说明支持的动作 (actions)
ticket工单生命周期事件created(创建)、updated(属性/状态更新)、deleted(删除)
agent_task智能体任务执行状态completed(已完成)、failed(失败)、interaction(等待交互)、created(创建)、updated(更新)
comment工单评论与讨论created(新评论)、updated(编辑)、deleted(删除)
runtime守护进程与执行节点offline(下线/断开)、register(新上线)、updated(状态更新)

4 层布尔过滤逻辑

事件触发器的规则体系支持精细的四层布尔组合:

  1. 规则卡片之间(Rule Cards)— OR:一个触发器可配置多项事件规则,命中任意一项即可触发;
  2. 动作列表(actions)— OR:在同一规则内,匹配列表中的任意一个动作(例如 actions: ["created", "updated"]);
  3. 条件列表(conditions)— AND:在同一规则内,所声明的所有条件字段必须同时满足
  4. 数组枚举值(Array Values)— OR:单个条件字段若传入数组,命中其中任意一个值即视为匹配(例如 priority: [3, 4] 匹配高或紧急)。

常用条件字段与枚举参考

conditions 对象中,可使用各事件支持的结构化字段进行过滤:

  • 工单(ticket
    • status:状态枚举(0 待办、1 待处理、2 进行中、3 审核中、4 已完成、5 阻塞、6 已取消)
    • priority:优先级(0 无、1 低、2 普通、3 高、4 紧急)
    • assigneeType:执行者类型(0 人类成员、1 智能体、3 团队)
    • projectId:关联项目 UUID
    • labels:包含指定标签
  • 智能体任务(agent_task
    • status:任务状态(10 待处理、20 排队中、30 执行中、40 已完成、50 失败、60 已取消)
    • failureReason:失败错误码(如 runtime_process_crashedrun_timeout
    • agentId:执行智能体 UUID
  • 运行时(runtime
    • status:节点状态(0 离线、1 在线、2 繁忙、3 异常)
    • provider:接入 CLI 类型(如 claudekimicodex

自环触发防护(Self-Trigger Prevention)

自动任务引擎内置了防死循环机制:由某个 Job 执行动作(如创建工单、发表评论或启动任务)而间接产生的下游事件,绝不会反向重新激活该 Job 自身,确保流水线安全稳定运行。

[!NOTE] 动作类型约定:事件触发器专用于响应式自动化与即时流转,支持 assign_agent(执行智能体任务)send_notification(发送站内通知) 动作。如果事件发生后需要创建正式工单,建议在智能体指令(Goal)中让其根据事件 Payload 调用 mopheus ticket create 动态按需建单。

CLI 配置示例

目前事件触发器支持通过 Mopheus CLI 进行声明与更新:

# 1. 监听「高优工单更新为已完成」或「智能体任务执行失败」
mopheus job trigger-add <job-id> \
  --kind event \
  --label "故障流转与任务失败监听" \
  --event-filter '[
    {
      "event": "ticket",
      "actions": ["updated"],
      "conditions": {
        "status": 4,
        "priority": [3, 4]
      }
    },
    {
      "event": "agent_task",
      "actions": ["failed"],
      "conditions": {
        "failureReason": "runtime_process_crashed"
      }
    }
  ]'

# 2. 通过外部 JSON 规则文件添加事件触发器
mopheus job trigger-add <job-id> --kind event --event-filter-file ./event-rules.json

# 3. 更新现有触发器的事件规则
mopheus job trigger-update <job-id> <trigger-id> --event-filter '[{"event":"comment","actions":["created"]}]'

# 4. 查询工作区支持的完整事件与变量 Schema
mopheus job event-schema

控制台可视化:配置完成后,在 Web 控制台的 自动任务详情 → 触发器 标签页中,系统会以可视化的状态胶囊卡片、AND / OR 连接微标及自然语言本地化完整展示当前的规则链路。

Webhook 触发器

Webhook 触发器会为自动任务生成唯一 URL,显示在自动任务详情页的 Webhook 标签页中:

POST https://<server_url>/api/v1/webhooks/jobs/<token>

向该 URL 发送带有 JSON 正文的 HTTP POST 请求,自动任务即会触发。Token 在创建触发器时生成并嵌入 URL 中——基础用法不需要额外的 Authorization 请求头。

认证方式

方式原理
URL Token密钥嵌入在 URL 路径中,持有 URL 的任何人都可以触发自动任务。
HMAC 签名额外配置一个签名密钥,每次请求必须携带有效的签名请求头。

HMAC 签名

为触发器添加签名密钥后,服务端会拒绝所有未携带有效 X-Webhook-Signature(或兼容 GitHub 的 X-Hub-Signature-256)请求头的请求。

签名格式为 sha256=<请求体的 HMAC-SHA256 十六进制编码>

curl 示例:

BODY='{"event":"test"}'
SECRET="your-signing-secret"
SIG="sha256=$(echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')"

curl -X POST "https://<server_url>/api/v1/webhooks/jobs/<token>" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: $SIG" \
  -d "$BODY"

Python 示例:

import hmac, hashlib, requests

secret = "your-signing-secret"
body = b'{"event":"test"}'
sig = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()

requests.post(
    "https://<server_url>/api/v1/webhooks/jobs/<token>",
    data=body,
    headers={"Content-Type": "application/json", "X-Webhook-Signature": sig},
)

触发器有效期

定时Webhook 触发器都支持可选的截止时间。超过截止时间后,触发器会自动停用——对于 Webhook 触发器,所有传入请求将返回 403;对于定时触发器,则不再触发。适合需要有时限集成但又不想手动清理的场景。

在 CLI 中,添加或更新触发器时可以用 --expires-at 设置截止时间(接受 RFC3339 或 YYYY-MM-DD HH:MM 格式):

# 为定时触发器设置截止时间
mopheus job trigger-add <job-id> --kind schedule --cron "0 9 * * 1-5" --expires-at "2026-12-31T00:00:00Z"

Token 轮换

如果 URL Token 泄露,可在 Webhook 标签页中轮换 Token。轮换会立即使旧 URL 失效——请在轮换前通知所有上游调用方更新 URL。

启用与停用

每个自动任务都有启用开关。停用后的自动任务:

  • 不会按计划触发
  • 拒绝传入的 Webhook 请求
  • 配置保持不变——重新启用后无需任何重新配置即可恢复

智能体就绪检查

执行动作前,自动任务引擎会检查目标智能体是否就绪。若不满足条件,本次调度会被跳过(而非失败):

  • 智能体不存在或已归档
  • 智能体未绑定运行时
  • 智能体的运行时处于离线或错误状态

被跳过的运行会在运行历史中显示 已跳过 状态和原因,不计为失败,也不触发重试。

运行记录

每个自动任务都有运行历史,列出每次触发的详情——触发时间、触发原因和执行结果。失败的运行会显示错误原因,可从详情页重放。

状态含义
运行中正在执行。
已完成成功完成。
失败以错误结束。
已跳过调度时智能体未就绪。

失败不会自动重试。如果 Webhook 事件至关重要,请配置上游系统在收到非 2xx 响应时进行重试。

命令行参考

# 列出当前工作区的所有自动任务
mopheus job list

# 创建自动任务
mopheus job create \
  --name "每日巡检" \
  --trigger-type schedule \
  --action-type create_ticket \
  --instruction "连接生产数据库,检查 pg_stat_activity 中的长事务和锁等待,生成长事务报告" \
  --action-config '{"title":"每日巡检","priority":2}' \
  --cron "0 9 * * 1-5" \
  --timezone "Asia/Shanghai"

# 创建 Quartz 七字段工作日 09:00 计划
mopheus job create \
  --name "工作日报告" \
  --trigger-type schedule \
  --action-type create_ticket \
  --cron-dialect quartz \
  --cron "0 0 9 ? * 2-6 *" \
  --timezone "Asia/Shanghai"

# 为自动任务添加 cron 触发器
mopheus job trigger-add <job-id> \
  --kind schedule \
  --cron "0 9 * * 1-5" \
  --timezone "Asia/Shanghai"

# 手动触发自动任务
mopheus job trigger <id>

# 更新自动任务
mopheus job update <id> --instruction "新的智能体指令"
mopheus job update <id> --enabled false

# 查看运行历史
mopheus job runs <id>

# 删除自动任务
mopheus job delete <id>

# 管理触发器
mopheus job trigger-list <job-id>
mopheus job trigger-delete <job-id> <trigger-id>
mopheus job trigger-rotate-url <job-id> <trigger-id>

运行 mopheus job create --help 查看完整的动作配置字段说明。

对于计划任务,传入 --cron 会同时创建首个触发器。默认 standard 的字段顺序是 分钟 小时 日 月 星期quartz 的字段顺序是 秒 分钟 小时 日 月 星期 年。 例如 0 0 9 ? * 2-6 * 表示工作日 09:00 执行,其中 ? 表示不指定日字段。 --start-at 设置最早可运行时间,未指定时为当前时间;--expires-at 是排他截止时间, 该时间及之后的运行不会执行。