assemble
四个模型,一个答案,多轮迭代。每一轮读取当前最佳答案,按给定角色进行批判,并写出一版改进结果。进度保存在文件中,而非对话内,因此每轮都从全新的上下文开始(Ralph Wiggum 技术)。
命令
| 命令 | 操作说明 |
|---|---|
assemble <task> | 使用默认调度(36 轮)开始一次运行。 |
assemble --quick <task> | 一个区块,2 次遍历 × 4 个模型(8 轮)。 |
assemble resume [<slug>] | 继续最近(或指定名称)未完成的运行。 |
assemble cancel [<slug>] | 在状态文件中设置 status: cancelled 并停止。 |
assemble status | 显示当前迭代、区块、未解决的 MUST 项及使用的模型。 |
开始之前
- 加载
.assemble/config.json(如果存在),否则加载assets/config.example.json。 - 选择模型适配器(见下文),并告知用户哪些四个模型将参与运行,以及它们的任务文本将发送到哪里。如果有模型不在
allowedModels内,或者localOnly为真且某个模型是远程的,则移除该模型并告知用户。 - 用一段简短段落复述任务和验收标准。如果任务不明确,在消耗任何轮次前先询问用户。
- 创建
.assemble/<slug>/目录,包含task.md、answer.md(空文件)和state.md,格式参见references/state-format.md。确保.assemble/在.gitignore中。
调度计划
一轮(round)指一个模型的一次轮次。一次遍历(pass)指所有四个模型各执行一轮,按顺序进行。
| 区块 | 遍历次数 | 总轮数 | 累计轮数 |
|---|---|---|---|
| 1 | 4 | 16 | 16 |
| 2 | 3 | 12 | 28 |
| 3 | 2 | 8 | 36 |
在第 36 轮后,显示报告并询问用户是否要运行另一个区块。未经用户允许,绝不执行超过 36 轮。
角色在每个遍历中轮换,使得每个模型都能扮演所有角色:在第 p 次遍历(从 0 开始)中,第 m 个模型扮演 roles[(m + p) % 4],角色定义见 references/roles.md。
每轮操作
仅从文件中构建本轮提示,使用 references/handoff-format.md 中的格式:
task.md- 当前的
answer.md - 上一轮的批判(来自最新的
round-NN.md) - 本轮的角色卡片
不包含更早的轮次,也不说明当前答案是由哪个模型撰写的。然后:
- 使用选定的适配器将提示发送给本轮对应的模型。
- 解析回复,提取出批判(每个问题标记为
MUST或NICE)、修订后的答案以及判定结果。 - 如果任务是代码且配置了
checks,在临时副本中应用修订后的答案,运行检查,并将任何失败项作为MUST项添加到批判中。 - 写入
round-NN.md(包含角色、模型 ID、批判、检查结果、判定结果、行级差异大小),并用修订后的答案覆盖answer.md。 - 更新
state.md:当前迭代、区块、遍历、未解决的MUST项数量以及无变化连续次数。 - 向用户显示一行进度信息:
Round 7/36 · skeptic · 2 MUST, 1 NICE · diff 14 lines。
如果某个模型出错或超时,在 round-NN.md 中记录,跳过本轮,继续执行。如果连续两个模型失败,暂停并通知用户。
停止条件
当一轮未提出任何 MUST 项且对 answer.md 的修改行数少于 noChangeLines 行时,该轮计为无变化。
当满足以下任一条件时提前停止:
- 连续四轮(即一个完整遍历)都是无变化,或
- 一轮结束时包含
<promise>CONVERGED</promise>且下一轮确认无MUST项。
如果未解决的 MUST 项数量在一个完整区块内未减少,则停止并写一条简短的“卡住”说明:指出是什么阻碍了进展、已经尝试过的措施,以及用户可能做出什么决策来解除阻塞。
报告
运行结束时,写入 .assemble/<slug>/report.md 并显示:
- 最终答案
- 已执行的轮次数量及停止原因
- 每个区块中最主要的变化
- 任何未解决的
NICE项 - 使用的模型及其失败次数
- 粗略的 token 和成本估算(提示和回复大小的总和,乘以配置中给出的价格,如果有的话)
模型适配器
使用第一个可用的适配器,并告知用户选择了哪一个。
- 工具内嵌子代理。 如果宿主工具能够生成子代理并选择其模型,则为每轮使用一个子代理。Cursor 可以混合不同供应商。Claude Code 和 Kiro 在此仅提供 Claude 模型,因此四个模型将是 Claude 的变体。
- 供应商 CLI。 每轮执行
scripts/run-model.sh <model-id> <prompt-file>。这是真正的多供应商选项。在运行开始前检查每个 CLI 是否存在(使用command -v)。 - 单一模型。 自己执行每一轮,扮演该轮的角色。仅读取本轮的对应文件,并将每一轮视为全新的开始。
可选的工具专用辅助程序(例如用于无人值守运行的 Claude Code 停止钩子)存放在仓库的 adapters/ 文件夹中。