assemble
4つのモデル、1つの回答、多数のラウンド。各ターンでは現在の最良の回答を読み、与えられた役割から批評し、改善版を書き出します。進行状況は会話ではなくファイルに保存されるため、各ターンは新しいコンテキストで開始されます(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を読み込みます。- モデルアダプタ(下記参照)を選択し、どの4つのモデルが実行されるか、タスクテキストがどこに送信されるかをユーザーに伝えます。モデルが
allowedModelsに含まれていない場合、またはlocalOnlyがtrueでモデルがリモートの場合は、そのモデルを除外し、その旨を伝えます。 - タスクと受入基準を短い段落で再度述べます。タスクが不明確な場合は、ラウンドを消費する前にユーザーに確認します。
.assemble/<slug>/を作成し、task.md、answer.md(空)、およびstate.md(references/state-format.mdに従う)を配置します。.assemble/が.gitignoreに含まれていることを確認します。
スケジュール
ラウンドは1モデルのターンです。パスは4つのモデルが順番に1ターンずつ行うことです。
| ブロック | パス数 | ターン数 | 累計 |
|---|---|---|---|
| 1 | 4 | 16 | 16 |
| 2 | 3 | 12 | 28 |
| 3 | 2 | 8 | 36 |
36ターン後、レポートを表示し、ユーザーに別のブロックを実行するかどうかを尋ねます。尋ねずに36を超えることはありません。
役割はパスごとにローテーションされ、すべてのモデルがすべての役割をプレイします。パスp(0ベース)では、モデルmはreferences/roles.mdのroles[(m + p) % 4]を担当します。
各ターン
ターンプロンプトはファイルのみから構築し、references/handoff-format.mdを使用します。
task.md- 現在の
answer.md - 前のターンの批評(最新の
round-NN.mdから) - このターンのロールカード
過去のラウンドを含めず、現在の回答を書いたモデルについても言及しません。その後:
- 選択したアダプタを使用して、このターンのモデルにプロンプトを送信します。
- 応答を、批評(各問題は
MUSTまたはNICEでタグ付け)、修正された回答、および判定にパースします。 - タスクがコードであり、
checksが設定されている場合、修正された回答をスクラッチコピーに適用し、チェックを実行し、失敗を批評にMUST項目として追加します。 round-NN.md(役割、モデルID、批評、チェック結果、判定、行差分サイズ)を書き込み、answer.mdを修正された回答で上書きします。state.mdを更新します:イテレーション、ブロック、パス、未解決のMUST数、変更なし連続数。- ユーザーに1行の進行状況メモを表示します:
Round 7/36 · skeptic · 2 MUST, 1 NICE · diff 14 lines。
モデルがエラーまたはタイムアウトした場合、round-NN.mdに記録し、そのターンをスキップして続行します。2つのモデルが連続して失敗した場合は、一時停止してユーザーに伝えます。
停止
ターンがMUST項目を発生させず、answer.mdの変更行数がnoChangeLines未満の場合、変更なしとカウントします。
次のいずれかの場合に早期停止します:
- 4ターン連続(フルパス)で変更なしの場合、または
- ターンが
<promise>CONVERGED</promise>で終了し、次のターンがMUST項目なしで確認した場合。
未解決のMUST数がブロック全体で減少しなかった場合、停止し、短い「スタック」メモを書きます:何がブロックしているか、何を試したか、ユーザーが何を決定するとアンブロックできるか。
レポート
実行が終了したら、.assemble/<slug>/report.mdを書き込み、表示します:
- 最終回答
- 実行したラウンド数と停止理由
- 各ブロックの主な変更点
- 未解決の
NICE項目 - 使用したモデルとその失敗
- 大まかなトークンとコストの見積もり(プロンプトと応答サイズの合計に、設定に価格があればそれを掛けた値)
モデルアダプタ
利用可能な最初のものを使用し、ユーザーにどのアダプタを選択したかを伝えます。
- ツール内サブエージェント。 ホストがサブエージェントを起動し、そのモデルを選択できる場合、ターンごとに1つ使用します。Cursorはベンダーを混在させることができます。Claude CodeとKiroはここではClaudeモデルのみを提供するため、4つはClaudeのバリアントになります。
- ベンダーCLI。 ターンごとに
scripts/run-model.sh <model-id> <prompt-file>を実行します。これは真のマルチベンダーオプションです。実行を開始する前に、各CLIが存在することを確認します(command -v)。 - 単一モデル。 すべてのターンを自分で実行し、そのターンの役割を演じます。そのターンのファイルのみを読み取り、各ターンを新しい開始として扱います。
オプションのツール固有のヘルパー(無人実行のためのClaude Code停止フックなど)は、リポジトリのadapters/フォルダにあります。