执行任务
了解智能体的一次执行如何排队、运行、停止和重试。
每次智能体开始工作,Melso 都会创建一条执行任务(task)。它记录这次执行由什么触发、交给了哪个智能体、当前进行到哪里,以及最后是否成功。
Issue 与执行任务
Issue 保存一项工作的目标、讨论、负责人和最终状态;执行任务记录智能体对这项工作的一次执行。
| Issue | 执行任务 | |
|---|---|---|
| 记录什么 | 一项持续推进的工作 | 智能体的一次执行 |
| 持续多久 | 可以反复讨论、补充和重新分配 | 从触发开始,到完成、失败或取消为止 |
| 数量关系 | 一个 issue 可以包含多次执行 | 每次执行都有独立记录 |
因此,同一个 issue 可以先后交给不同的智能体,也可以在一次失败后重新执行。每次都会产生新的 task,之前的记录不会被覆盖。
触发来源
以下操作都可能触发一次执行:
- 把 issue 分配给智能体或小队。
- 在评论中提及智能体。
- 在对话中向智能体发送消息。
- 由自动化按计划或外部事件触发。
不同入口提供的上下文不同,但执行方式相同:Melso 创建 task,运行时领取它,再调用智能体配置的 AI 编程工具。
执行过程
一条 task 通常会经过以下状态:
| 状态 | 表示什么 |
|---|---|
deferred | 已安排稍后触发,到达指定时间后进入队列 |
queued | 正在等待运行时领取 |
dispatched | 运行时已经领取,正在启动 AI 编程工具 |
waiting_local_directory | 目标本地目录正被另一条执行占用,等待目录锁释放 |
running | AI 编程工具正在执行 |
completed | 这次执行已正常结束 |
failed | 执行出错或中断 |
cancelled | 执行被手动停止 |
运行时在线时,新 task 通常会很快开始;如果 task 入队后运行时离线,它会留在队列中等待恢复。排队超过 2 小时仍未被领取时,task 会以失败结束。
如果系统在触发前已经知道目标运行时离线,部分即时操作会直接提示当前无法运行,而不是继续创建一条无法领取的 task。
心跳正常的运行时可以执行长时间任务,服务器不会仅因为运行时间较长就强制结束它。运行时会根据实际活动判断进程是否已经卡住;相关设置见环境变量。
查看执行记录
打开 issue,在 执行日志中可以看到它产生的所有 task。每一行会显示触发来源、执行智能体、状态和时间。
你可以在这里:
- 打开执行记录,查看智能体的消息、工具调用和错误信息。
- 停止已安排稍后触发、排队、启动、等待本地目录或运行中的 task。
- 对失败或已取消的 task 发起重试。

修改 issue 的负责人或状态不会停止已经开始的执行。需要中断时,在执行日志中停止对应的执行任务。删除 issue 时,关联的活动 task 才会一并取消。
失败与自动重试
运行时短暂离线、守护进程重启、执行超时或 AI 编程工具网络中断等临时故障,可以触发自动重试。普通 task 默认最多执行两次;工具网络中断最多执行三次。
智能体自身返回的错误通常不会自动重试。例如鉴权失效、额度不足、配置错误或模型无法完成请求,都需要先处理原因,再手动重试。
自动化的仅运行模式不会自动重试,以免和下一次计划执行重叠。创建 issue模式产生的是普通 issue task,基础设施故障仍按上面的规则重试。两种模式都可以在自动化运行历史中查看最终结果。
当一条 issue 上没有其他活动 task,也没有新的重试等待执行时,失败会让处于 in_progress 的 issue 回到 todo。
失败原因参考
执行日志和用量统计中常见的失败原因分两类:不带前缀的原因码由平台记录;agent_error.* 由 AI 编程工具的报错归类而来。
平台侧
| 原因 | 含义 | 处理 |
|---|---|---|
runtime_offline | 执行期间运行时离线 | 恢复运行时后重试,见守护进程与运行时 |
queued_expired | 排队超过 2 小时无运行时领取 | 确认运行时在线后重试 |
runtime_recovery | 守护进程重启后回收了中断的执行 | 直接重试 |
cancelled | 被手动停止,或随归档、删除一并取消 | 无需处理 |
timeout | 超过守护进程配置的执行时长上限 | 缩小 issue 范围,或调整守护进程的 agent_timeout |
iteration_limit | 达到执行轮次上限 | 缩小 issue 范围 |
agent_blocked | 智能体主动报告无法继续 | 按它在评论中的说明补充信息 |
api_invalid_request | 平台 API 拒绝了非法请求 | 重试;反复出现时报告问题 |
codex_semantic_inactivity | Codex 长时间无有效输出被判停滞 | 重试,或调整 Codex 停滞超时 |
工具侧(agent_error.*,前缀省略)
| 原因 | 含义 | 处理 |
|---|---|---|
provider_auth_or_access | 模型服务认证失败或无访问权限(401/403) | 在该 AI 编程工具中重新登录,或检查 API key |
provider_quota_limit | 配额或余额用尽(402) | 充值或更换账号 |
provider_capacity_or_rate_limit | 限流或容量不足(429/529) | 稍后重试 |
provider_server_error | 模型服务端错误(5xx) | 稍后重试 |
provider_network | 到模型服务的网络故障 | 会自动重试;持续出现时检查执行电脑的网络 |
model_not_found_or_unavailable | 模型不存在或当前不可用 | 在智能体设置中改选可用模型 |
context_overflow | 上下文超出模型窗口 | 缩小 issue 范围或减少输入内容 |
missing_config | 缺少 API key 等必需配置 | 补齐智能体环境变量或工具配置 |
runtime_missing_executable | 找不到 AI 编程工具的可执行文件 | 重新安装该工具,见安装 AI 编程工具 |
runtime_version_unsupported | AI 编程工具版本过旧 | 升级该工具 |
process_failure | 工具进程异常退出 | 查看执行日志定位后重试 |
empty_or_unparseable_output | 工具无输出或输出无法解析 | 重试;反复出现时检查工具安装 |
agent_timeout | 工具长时间无响应被终止 | 重试或缩小 issue 范围 |
unknown | 未能归类的失败 | 查看执行日志中的原始报错 |
手动重试
在执行日志中点击某一行的重试按钮,会再次调用当时执行这条 task 的智能体。即使 issue 后来换了负责人,也不会改用新负责人。
重试会尽量保留上一次已经写入本地目录的文件。如果原会话仍然安全,并且由同一个运行时领取,也会继续之前的会话。上下文溢出或无效请求等会污染会话的错误,则会在原工作目录上开启新会话。原目录已经不存在时,会改用新的工作目录。
也可以通过 CLI 重新运行当前 issue:
melso issue rerun <issue-id>这种方式没有指定某一条历史 task,因此会使用 issue 当前的智能体负责人,并从新的会话和工作目录开始。
执行完成与 issue 完成
completed 只表示这一次执行正常结束,不代表 issue 的目标已经得到确认。你仍然可以检查结果、继续讨论、补充要求或再次触发智能体。
Issue 是否完成,以实际工作进展和它的状态为准。
状态与超时速查
以下数字对应服务器的默认配置,供排查时快速对照。
| 状态 | 含义 | 超时与后果 |
|---|---|---|
deferred | 已安排稍后触发 | 到达预定时间后进入 queued,再按下面的规则计时 |
queued | 等待运行时领取 | 超过 2 小时未被领取即以失败结束,不会自动重试 |
dispatched | 运行时已领取,正在启动工具 | 停留超过 5 分钟按失败处理 |
waiting_local_directory | 等待本地目录锁释放 | 没有独立超时;目录释放后回到启动流程 |
running | AI 编程工具正在执行 | 不设固定时长上限;以运行时心跳判定存活,心跳每 15 秒一次,失去心跳的运行时最迟约 3 分钟被判为离线,其上的 task 随之失败 |
自动重试只覆盖以下临时故障,且仅适用于挂在 issue 或对话上的 task(自动化仅运行模式除外):
| 可自动重试的失败原因 | 执行次数上限 |
|---|---|
| 运行时离线 | 默认 2 次(首次执行 + 1 次重试) |
| 守护进程重启后回收 | 默认 2 次 |
| 平台判定执行超时 | 默认 2 次 |
| Codex 长时间无有效输出 | 默认 2 次 |
| Skill 包下载失败 | 默认 2 次(此时智能体进程尚未启动,已下载的包走本地缓存) |
| 工具网络中断 | 最多 3 次,最后一次延迟约 5 秒发起 |
其余失败原因(鉴权、额度、配置、模型等)都不会自动重试,需要先处理原因再手动重试。
接下来
- 守护进程与运行时 — 了解 task 在哪台电脑上执行。
- 分配 issue 给智能体 — 从 issue 发起一次执行。
- 提及智能体 — 在评论中补充要求或邀请其他智能体参与。