swarm について
swarm は、独立したタスクを複数のサブエージェントに並行して割り当てるスキルです。並行数を制限し、入力順に結果を返すほか、個別の失敗が他のタスクに影響しないため、一括要約や分類、調査に適しています。
主な機能
- 01タスクの並行割り当て
- 02最大 10 件の並行数制限
- 03入力順での結果収集
- 04タスク単位の失敗処理
活用シーン
- 01複数ファイルの並行要約
- 02チケットの一括分類
- 03複数トピックの並行調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ langchain-ai/ deepagents --skill swarmインストール後、Claude Code で/swarmを入力して読み込まれたか確認します。
同梱ファイルscripts/index.ts
詳細
Swarm
タスクのリストをサブエージェントに並行して割り振り、並列数を制限しながら結果を収集して、簡潔な要約を返します。
読み込み
REPL の eval ツールは、@/skills/* からの ES モジュールのインポートをサポートしています。
await import("@/skills/swarm") を使ってこのスキルを読み込みます。REPL は、これらのパスをスキルのバックエンドに解決するカスタムモジュールローダーをインストールします。index.ts を eval の本文にインラインで記述しないでください。
インポートがサポート対象で、テスト済みの方法です。ソースをコピーする方法は、ロジックを重複させ、スキルの更新に追従できなくなるため、アンチパターンです。
使用する場面
多数の独立したタスク(たとえば、「この 20 個のファイルをそれぞれ要約する」「この 50 件のチケットをそれぞれ分類する」「この 15 個のトピックを調査する」)があり、順番にではなく並行して実行したい場合に使用します。
使い方
runSwarm(...) は配列ではなく、要約オブジェクトを返します。タスクごとの出力を得るには .results を分割代入してください。要約オブジェクト自体は反復処理できません。
const { runSwarm } = await import("@/skills/swarm");
const { results, completed, failed } = await runSwarm({
tasks: [
{ description: "Summarize /notes/alpha.md" },
{ description: "Summarize /notes/beta.md" },
{ description: "Summarize /notes/gamma.md" },
],
concurrency: 3, // optional, defaults to 5, capped at 10
subagentType: "general-purpose", // optional; per-task override wins
});
console.log(`${completed} ok, ${failed} failed`);
for (const r of results) {
console.log(r.id, r.status, r.output ?? r.error);
}
契約
runSwarm(opts) 関数は次の値を受け取ります。
tasks(必須):{ description: string, subagentType?: string }の配列です。concurrency(任意、デフォルトは5、上限は10):サブエージェントを並行して呼び出す最大数です。subagentType(任意、デフォルトは"general-purpose"):各タスクの実行を依頼するデフォルトのサブエージェントです。タスクごとに指定したsubagentTypeが優先されます。
要約オブジェクトを返します。
{
total: number; // tasks.length
completed: number; // subagents that returned a result
failed: number; // subagents that threw
results: { // one entry per task, in input order
id: number; // 0-indexed position in `tasks`
status: "completed" | "failed";
output?: string; // on success — subagent's final message
error?: string; // on failure — error message
}[];
}
設計上の注意
- ディスパッチには
tools.taskを使用します。これは REPL の PTC レイヤーによって利用可能になります。このスキル自体はサブエージェントを登録しません。エージェントがすでに利用できる機能を使ったファンアウトパターンです。 - 失敗はタスクごとに捕捉されます。1 つのサブエージェントが失敗しても、スウォーム全体は中断されません。
failedの件数と、タスクごとのstatusを確認してください。 - 並列数は、すべてのタスクに対する
Promise.allではなく、セマフォ方式のプールで制限されます。たとえば、concurrency=5で 100 個のタスクを実行する場合、メモリ使用量とツール呼び出し頻度を予測しやすくなります。