跳到主要内容
ZeroWorks

Tasks、后台工作与自动化

把目标拆成依赖图,在子会话中执行、验收和修复;查看任务结果,并区分正式任务、后台工作与定时自动化。

什么时候使用 Tasks

ZeroWorks 的正式 Task 是一份保存在工作区的 task.yaml:nodes 组成有向无环依赖图(DAG),每个执行节点对应一个子会话,父级编排会话汇总输出并核对任务验收标准。它适合多个步骤、可并行分支和需要最后复核的工作。

一个普通对话、对话里的后台命令和正式 Task 是不同对象。自动化解决「什么时候触发」,Task 解决「目标如何拆分、依赖如何流动、结果怎样验收」。

形式适合的工作创建之后
普通会话一次问答或可以连续处理的一段工作发送消息后执行
后台工作会话里的耗时命令、代理或工具任务由所属会话跟踪,不能当作持久 DAG
Task有依赖、分支和整体验收的工作保存规格及编排会话;需要单独启动
自动化按时间或应用事件重复动作事件命中才执行;提示动作会创建新会话

创建并运行任务

  1. 在侧栏打开 Tasks,再从列表/看板切换到 Board。若只为某个项目规划,先选项目筛选;新建任务会沿用当前项目范围。
  2. 点击顶部 New Task 打开任务编辑器,填入标题、目标与可核对的验收标准。Manual 手动添加子任务及依赖;Generate 根据目标生成计划,生成后先复核节点和引用。
  3. 确认项目、工作目录、来源、技能、模型连接和权限模式。项目绑定不会自动把不存在的来源或技能变成可用;非默认模型要配套正确的 llmConnection。
  4. 选择 Create 只保存并排入待办,Create and Run 才会保存后启动。已有任务对应 Save 和 Save and Run;也可在看板卡片上点播放启动规格中的整个 DAG。
  5. 展开卡片查看子会话进度,打开任务的 Results 查看每个节点的输出、错误和最终验收结论。需要上下文时进入对应子会话。
提示词示例

创建一个任务,盘点当前项目文档、检查说明之间的矛盾,最后汇总成审查结果。验收标准:每项结论都有文件位置,无法确认的事项单独列出。先创建到待办,不要运行;我会在任务编辑器里复核依赖和权限。

让 Agent 创建:create_task

支持该会话工具的运行环境可调用 create_task。title 与 description 必填,description 会成为 goal 和初始单节点的 prompt;工具只创建 task.yaml、待办卡片与编排会话,不会运行任务。

工具参数 acceptanceCriteria 使用驼峰命名;落盘规格是 acceptance_criteria。需要多节点图时,在创建后通过任务编辑器或编辑同一份规格补充 nodes,不能把 nodes 当成 create_task 的入参。

  • 可选 sources、skills 是工作区 slug 数组;llmConnection 和 model 指定连接与模型,workingDirectory 指定工作目录,projectId 指定项目。
  • 省略 projectId 时继承调用会话的项目;重复标题会获得新的唯一 slug,不覆盖已有任务。
  • 返回 slug、orchestratorSessionId、taskLabelId 和 warnings。未知来源/技能只产生警告,创建成功后仍要修正引用再运行。
代码示例
{
  "title": "Documentation review",
  "description": "读取项目文档,列出相互矛盾的说明,并为每项结论提供文件位置。",
  "acceptanceCriteria": "每项结论包含来源位置;不确定事项单列;不修改项目文件。"
}

当前 task.yaml 规格

任务规格保存在工作区 tasks/<slug>/task.yaml。下面展示两个无依赖读取节点并行、一个汇总节点等待两者的有效结构。编辑已有任务时保留它的真实 id 和目录 slug,并先校验,再运行。

id、title、goal 和至少一个 nodes 是必要字段。验收标准是任务级字符串 acceptance_criteria,不是 subtasks[].acceptance;每个 session 节点至少需要 id 和非空 prompt。

字段当前含义
depends_on上游节点 ID 数组;依赖全部 done 后才调度,无依赖节点可并行
prompt / inputs可引用 ${nodes.<id>.output} 与 ${params.<name>};inputs 把引用绑定为名字,在 prompt 中用 ${inputs.<name>}
defaults / 节点覆盖model、llmConnection、permissionMode;节点值优先于任务默认值
project / cwd / sources / skills项目 ID、工作目录绝对路径及来源/技能 slug;子会话继承任务上下文
max_parallel / token_budget任务并发上限及累计输入输出 token 预算;预算检查不会撤销在途操作
max_iterations整体验收失败后的修复次数:默认 3,最大 10,0 禁用修复
outputs输出名到引用字符串的映射;当前节点输出是自由文本
代码示例
id: documentation-review
title: Documentation review
goal: 盘点项目文档并整理有来源依据的审查结果
acceptance_criteria: |
  每项结论都给出文件位置。
  明确区分已确认问题与未确认事项。
  不修改项目文件。
runner: conduct
defaults:
  permissionMode: safe
max_parallel: 2
max_iterations: 2
token_budget: 60000
nodes:
  - id: inventory
    kind: session
    prompt: 读取项目文档,列出主题、用途和对应文件位置。
  - id: consistency
    kind: session
    prompt: 检查项目文档中的命令、目录和行为说明是否相互矛盾,给出文件位置。
  - id: report
    kind: session
    depends_on: [inventory, consistency]
    prompt: |
      根据以下两份输出整理审查结论,保留来源位置和不确定事项。
      文档盘点:${nodes.inventory.output}
      一致性检查:${nodes.consistency.output}
outputs:
  result: '${nodes.report.output}'

验收与有上限的修复

DAG 节点完成后,编排会话收到各节点输出,按 acceptance_criteria 复核最终结果;未填写时使用 goal。它需要给出明确的 VERDICT: PASS 或 VERDICT: FAIL 结论,完成子会话本身不等于任务验收通过。

FAIL 会在剩余 max_iterations 和 token 预算内触发修复:指定节点时重跑这些节点及其下游;未能定位有效节点时可能重跑更大的范围。修复会把失败原因送回新一轮节点提示,而不是无限重复。耗尽上限仍失败会进入需要复核状态。

  • 把验收写成能核对的证据:所需文件与内容、真实执行过的检查及退出结果、每项数据的来源。避免「效果很好」这类无法判断的标准。
  • 节点的工作要求写在 prompt;当前没有逐节点 acceptance 数组的独立验收机制。可单独加一个 depends_on 所有产出节点的复核 session 节点。
  • 节点 retry.limit 可对执行错误做有限重试;不要假定 retry.when: empty/invalid、退避或所有控制字段都已执行。最终修复次数和节点错误重试是不同预算。

编辑、结果与重启后恢复

恢复依赖仍有效的 task.yaml、运行日志和输出文件;进程退出期间不会继续执行。当前看板播放按钮调用 tasks:run 开始新运行,不是 tasks:resume;现有编辑器也没有通用的恢复按钮。不要把重新打开应用或再次点播放当作同一次运行自动恢复。需要续跑旧 runId 时,应使用具备该恢复接口的集成客户端。

运行器支持暂停与停止:暂停只停止调度新节点,在途子会话仍会完成;停止会中断在运行的节点。两者都不会自动撤销已产生的文件变更或外部动作。

  1. 从看板卡片编辑任务,在 Definition 调整目标、验收标准、子任务和依赖;保留原任务 slug。保存后下次运行读取新规格,已保存的历史结果不因此改写。
  2. 切换 Results,查看节点输出、运行错误和验收记录,必要时点 Refresh 或 Open session 进入对应会话。Results 从存储读取,重启后仍可查看。
  3. 需要保留某次运行时,记下 task slug 和 runId,并保留 tasks/<slug>/runs/<runId>/ 下的 run-log.jsonl、spec.json 与 nodes/<id>.json。
  4. 运行器的 tasks:resume 接口以 workspaceId、slug、runId 恢复同一次运行:复用已完成节点且仍存在的输出;当时在运行、被取消或输出丢失的节点会重新排队。

让耗时工作在后台运行

部分耗时命令可以作为后台任务运行,Agent 在等待结果时仍能继续处理其他工作。任务完成后,结果会回到所属对话。

提示词示例

请先确认项目现有的测试命令,再运行测试。如果耗时较长,请在后台执行,并在结束后告诉我通过情况和失败原因。

查看进度与停止任务

  1. 打开当前会话头部的后台任务入口,查看运行状态与已保留的输出。
  2. 展开具体任务,检查持续时间、进度或错误详情。
  3. 需要停止运行项时,先点停止,再在确认时限内再次点击;等待状态更新后再安排后续工作。

按计划重复一段流程

想让某件事按时自动发生,就配一条定时自动化:写好 cron 表达式与时区,到点工作台会新建一个会话,把提示发进去,Agent 在新会话里开始干活。

同一份自动化配置里还可以写触发条件、标签与权限模式,具体字段见「自动化」指南。

  1. 想清楚要重复的是什么:发一段提示去开新会话、调用一个 Webhook,还是跑一段脚本。
  2. 写出 cron 表达式与时区,时区一定要显式写明。
  3. 在自动化的详情页确认匹配条件与动作;命中计划后新会话会带上你指定的标签,方便之后筛选。
代码示例
{
  "version": 2,
  "automations": {
    "SchedulerTick": [
      {
        "cron": "0 9 * * 1-5",
        "timezone": "Asia/Shanghai",
        "labels": ["定时"],
        "actions": [
          { "type": "prompt", "prompt": "汇总本周完成的任务,列成一份简报" }
        ]
      }
    ]
  }
}

管理自动化与运行记录

定时自动化依赖运行工作区服务的主机,进程关闭期间不会执行。重启后应核对实际历史,不要把 Task 的日志恢复理解为所有错过计划都自动补跑。

  1. 从侧栏打开「自动化」,按定时、事件或智能体三类筛选找到要看的条目。
  2. 在详情页的「触发条件」「执行动作」「设置」几个分区里核对配置,需要时复制一份再改。
  3. 查看「历史」分区了解最近的执行结果;不再需要时删除或停用这条自动化。