子代理与工作流
子代理让模型把一项任务交给另一个在后台工作的代理;工作流让模型写一段脚本,把工作同时分给许多这样的代理。
打开它们
- 打开 更多选项 → 对话设置,或按 ⌘⇧,(Windows 上是 CtrlShift,)。
- 在 工具 页的 代理编排 分组里,打开 子代理(agent_spawn)和 工作流(workflow)。
内置 预设 mework 已把两者都打开。
子代理
模型调用 agent_spawn 时,Mework 在后台启动一个子代理,模型的这一轮照常继续。子代理是一次性的:启动后,没有办法再给它发消息或改变它的方向。
子代理只看到自己的任务,除非模型附上本对话的一份副本,或它的角色带有对话模板。它使用对话的工作区和工具(或角色的工具),但没有 agent_spawn、workflow、ask_user、fork、计划工具和交接工具。它的系统提示词以 subagent.addendum 这段文字结尾,你可以在 提示词档案 里修改。
子代理没有轮次上限,也没有时间限制。它一直工作到给出最终回复或被你停止;只有最终回复有上限,超过 64 KiB 的部分会被截掉。
同时能跑多少
每个对话同时最多运行 8 个后台任务,子代理、工作流运行和后台命令合起来计算。已有 8 个在运行时,再启动新的会被拒绝,直到其中一个结束;只有到了超时的命令例外,即使超出上限也照样转入后台。任务一结束就立即让出名额,不论它的结果有没有被取走。
审批
在 手动 下,每次新建子代理和每次运行工作流都要审批。在 允许编辑 下只有工作流运行需要审批,在 完全访问 下两者都不需要。之后,子代理或工作流步骤的每一次工具调用都按对话的 安全级别 判定。
结果怎样回来
模型用 task_wait 等待时拿到子代理的最终回复;不等待时,结果会在两个回合之间以一张 送达了后台结果 卡片交给它。任务结束时如果对话空闲,不论任务是怎样结束的,代理都会立即开启新的一轮来读取结果,对话不在屏幕上也一样;侧栏里这个对话所在的行会显示它正在工作。
代理角色
角色是一套有名字的配置,包括模型、思考程度、工具、技能、MCP 服务器、钩子、联网后端和开局历史。主代理为子代理或工作流步骤按名字选用角色,看不到、也改不了角色背后的模型。
角色在 对话设置 → 代理角色,预设的设置里也有同样的页面。角色随对话保存,并从对话所用的预设复制而来;没有角色文件。角色显示 模型不可用,表示找不到它的模型,比如它的提供商被关掉了;这时角色对主代理隐藏,等模型回来后恢复。
列表下方的 允许无角色子代理 默认关闭。它关闭且存在可用角色时,每个子代理和每个工作流步骤都必须指定角色。
角色窗口
- 角色设置:角色名称 是主代理选用的名字,子代理描述 告诉它何时选用。执行模型 和 思考程度 默认跟随对话。
- 工具:在你改动任何一行之前跟随对话的工具;改动后角色保留自己的列表。
- 高级工具:这个角色自己的联网搜索后端、网页抓取后端及其结果设置。
- 技能、MCP 和 钩子:与对话自己的这几页是同一份列表。在你改动任何一行之前跟随对话的选择;改动后角色保留自己的一份。角色自己选了 MCP 服务器,这些服务器的工具就全部交给它,不受 工具 列表限制。技能和 MCP schema 怎样送到模型面前,跟随对话的 技能按需加载 和 工具发现。子代理只运行工具调用前后、权限请求和指令加载这几类钩子。
- 对话模板:子代理的开局历史。它的用户消息里恰好有一个
{input}时,任务替换它;否则任务作为最后一条用户消息追加。工作流步骤不使用它。
角色的设置不在对话的提示缓存里,所以这些页面都没有锁定:改动对这个对话之后调用的子代理生效。唯一要等的是本轮开始之后才给角色选上的钩子:本轮的钩子确认会列出各角色的钩子,新选上的要等下一轮确认过才会运行。完全访问 下不需要确认。
关闭角色、改它的模型、重命名或删除它,会停止正以这个角色运行的子代理。
内置角色
预设 mework 自带四个角色,思考程度都是 medium,工具都跟随对话:Claude Agent 上的 Opus(claude-opus-5-5)和 Sonnet(claude-sonnet-5-5),以及 OpenAI Codex 上的 Sol(gpt-6.1-sol)和 Luna(gpt-6-luna)。允许无角色子代理 是关闭的。在登录 Codex 并拉取模型之前,Sol 和 Luna 显示 模型不可用。
工作流
工作流是模型写的一段 JavaScript 脚本。每次调用 agent() 就启动一个步骤:一个没有任何历史的子代理。workflow 调用立即返回,运行作为一个任务在后台继续。
脚本以 export const meta = { name, description } 开头,可以使用:
agent(prompt, opts):启动一个步骤,得到它的最终文本(给了schema时是校验通过的值);步骤失败或被跳过时得到null。选项包括agentType(角色名,步骤的模型也由它决定)和isolation: "worktree"。parallel(thunks)同时运行多个步骤;pipeline(items, ...stages)让每一项各自走过各个阶段。phase(title)在运行面板里给步骤分组,log(message)写入运行日志,脚本的返回值就是这次运行的结果。
一次运行须在 30 分钟内完成,从它开始运行时算起;审批卡等你回应的时间不算在内。最多同时运行 16 个步骤,具体取决于你的 CPU。步骤没有单独的超时,也不会自动重试。Mework 从不因为步骤长时间没有动静就结束它:私下推理的模型可能好几分钟什么都不发出。
在运行面板里,跳过 {label} 结束正在运行的步骤,它的 agent() 调用得到 null;重试 {label} 停下这一步并从头重新开始,脚本拿到的是新一次的结果。想重跑一次失败、被停止或跳过了步骤的运行,请让代理恢复它。没变的步骤立即重放,显示为 已缓存;从第一个改动过、失败或被跳过的步骤起,之后的每一步都重新运行。
工作树隔离
isolation: "worktree" 给一个步骤单独的 Git 工作树,让并行的步骤改文件时互不冲突。本机、WSL 和 SSH 机器上都一样可用:工作树建在工作区所在机器的 <repo>/.mework/worktrees/<run-id>/ws<N>,在从 HEAD 新建的分支上。工作区必须是仓库的根目录。
运行结束时,没有改动也没有新提交的工作树会被删除;其余的保留下来,运行日志里写明它的路径和分支,由你合并或删除。
注意 工作树从你最近一次提交开始。工作区里尚未提交的改动不在其中。
任务面板
从 更多选项 → 任务 打开,或在进行中的一轮下方点正在运行的任务数。面板列出本对话的子代理、工作流运行、shell 命令、终端、开发服务器和预览页;结束的任务移到可折叠的 已完成 分区。
- 点击子代理行,或时间线上它的 派生了子代理 卡片,查看它的记录。
- 点击工作流行打开运行面板:每个步骤一个方块、运行日志,以及每个运行中步骤上的 跳过 {label} 和 重试 {label},只要运行还在进行就一直可用。
想让本地小模型也为子代理和工作流步骤的行起标题、做解释,请在 本地小模型 下打开 也用于子代理。
后台 shell 命令
模型要求后台运行时,shell 命令进入后台,审批卡上标着 [后台],不论用的是哪种 shell。前台命令到了超时(默认 2 分钟)还没结束,也会转入后台继续运行,不论它是主代理、子代理还是工作流步骤运行的,即使已有 8 个任务在运行。子代理和工作流步骤也能启动后台命令。这些命令向启动它们的子代理或步骤汇报:它用 task_wait 等待它们,或在两个回合之间拿到结果;它给出最终回复时仍在运行的命令会被停止。
停止任务
用任务行上的方形按钮停止任务,或用 中止工作流 停止一次运行。只有你能停止任务,模型没有用来停止任务的工具。
停止生成 只结束当前这一轮:后台任务继续运行,直到你逐个停止它们,或删除这个对话。有子代理或工作流在运行时,自动压缩 无法交接这个对话。
退出与重启
关闭窗口时 Mework 收进菜单栏或系统托盘,任务照常运行。要停止一切,从这个菜单选 退出 Mework(Windows 上是 关闭 Mework)。
注意 退出 Mework 或程序崩溃,会结束所有子代理、工作流运行和后台命令,连同它们启动的进程。
下次启动时:
- 已写完最终回复的子代理,把回复作为已完成的结果送达,但不会为此单独开启一轮。
- 仍在工作的子代理,会立即作为已丢失告知模型。
- 工作流运行立即接着运行,不必等你打开它的对话。已完成的步骤直接沿用,只有未完成的步骤重新运行。
- 后台命令保留在列表里,标记为失败,不会重新运行。