要点まとめ
- 2026年3月末のClaude Codeソースコード漏洩事件を受け、元プロダクトマネージャーがマルチエージェント調整層を独自に再設計・実装
open-multi-agentはTypeScript製の軽量OSSフレームワーク(ランタイム依存3件、ソースファイル27個)- Claude、GPT、GitHub Copilot、Ollamaなどあらゆるモデルに対応するモデル非依存設計
- CLIプロセス起動型の公式claude-agent-sdkとは異なり、完全インプロセス実行でサーバーレス・Docker・CI/CDに対応
- DAGベースのタスクスケジューラとメッセージバスにより、複雑なエージェント間依存関係を自動解決
背景と文脈
2026年3月31日、AI開発コミュニティを震撼させる出来事が起きた。AnthropicのAIコーディングツール「Claude Code」のソースコード約51万2000行が、npm公開パッケージのソースマップファイルとして誤って公開された。.npmignoreの設定ミスにより59.8MBのデバッグ用.mapファイルが含まれていた。
この発見者はSolayer LabsのインターンChaofan Shouで、X(旧Twitter)で拡散した後、数時間以内にGitHubに複数のミラーリポジトリが立ち上がり、最速でGitHub史上最速で5万スターを超えるリポジトリが誕生したと報告されている。
このソースコードには、CLIツールとしてのClaude Codeが内部でどのようにマルチエージェントを調整しているかを示すcoordinatorMode.tsが含まれていた。コーディネーターが複数のワーカーエージェントを管理し、タスクの依存関係を解決しながら並列実行する仕組みが、詳細に記されていた。
このアーキテクチャを分析したのが、元AnthropicプロダクトマネージャーのJack Chen氏だ。彼はAnthropicのコードを直接利用するのではなく、その背後にある設計パターンを独自に解釈・再実装し、open-multi-agentとして公開した。Claude Code Auto Modeが多くの開発者の注目を集めていた中、より低レベルなエージェント調整の仕組みが初めてOSS化されたことになる。
詳しく見ていく
open-multi-agentの基本コンセプト
open-multi-agentの設計思想は「ゴールを渡せばフレームワークが残りをやる」という一点に集約される。公式claude-agent-sdkはCLIプロセスを起動してエージェントを動かすため、サーバーレス環境での利用が難しい。一方、open-multi-agentはNode.jsプロセス内で全処理を完結させる。
# インストール(npmパッケージとして提供)
npm install @jackchen_me/open-multi-agent
# 必要な環境変数
export ANTHROPIC_API_KEY="sk-ant-..." # Claudeを使う場合
export OPENAI_API_KEY="sk-..." # OpenAIモデルを使う場合(任意)
export GITHUB_TOKEN="ghp_..." # GitHub Copilotを使う場合(任意)
基本的な使い方:runTeam()
最も直感的な使い方がrunTeam()だ。チームを定義してゴールを渡すだけで、タスク分解から実行まで自動化される。
import { OpenMultiAgent } from '@jackchen_me/open-multi-agent';
const orchestrator = new OpenMultiAgent();
// チームメンバーを定義
const team = orchestrator.createTeam([
{
name: 'architect',
model: 'claude-sonnet-4-6',
systemPrompt: 'You design clean API contracts and system architecture.',
tools: ['file_write'],
},
{
name: 'developer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You implement designs with clean, testable code.',
tools: ['bash', 'file_read', 'file_write', 'file_edit'],
},
{
name: 'reviewer',
model: 'gpt-4o', // モデルを混在させることも可能
systemPrompt: 'You review code for quality and security.',
tools: ['file_read', 'grep'],
},
]);
// ゴールを指定して実行(タスク分解は自動)
const result = await orchestrator.runTeam(
team,
'Create a REST API for a todo list with CRUD operations, tests, and OpenAPI docs'
);
console.log(result.output);
console.log(`Completed in ${result.duration}ms`);
このコードを実行すると、内部のコーディネーターエージェントがゴールを複数のタスクに分解し、適切なエージェントに割り当て、依存関係を考慮しながら順次・並列で実行する。
明示的なパイプライン:runTasks()
より細かくタスク間の依存関係を制御したい場合はrunTasks()を使う。
import { OpenMultiAgent, Task } from '@jackchen_me/open-multi-agent';
const orchestrator = new OpenMultiAgent();
const team = orchestrator.createTeam([/* エージェント定義 */]);
// タスクをDAGとして明示的に定義
const tasks: Task[] = [
{
id: 'fetch_requirements',
agent: 'architect',
prompt: 'Analyze the requirements from requirements.md',
// 依存なし → 最初に実行
},
{
id: 'design_api',
agent: 'architect',
prompt: 'Design the API contract based on requirements',
dependsOn: ['fetch_requirements'], // fetch_requirementsの後に実行
},
{
id: 'implement_endpoints',
agent: 'developer',
prompt: 'Implement the API endpoints from the design',
dependsOn: ['design_api'],
},
{
id: 'write_tests',
agent: 'developer',
prompt: 'Write integration tests for the endpoints',
dependsOn: ['implement_endpoints'],
},
{
id: 'security_review',
agent: 'reviewer',
prompt: 'Review the implementation for security vulnerabilities',
dependsOn: ['implement_endpoints'], // implement_endpointsの後、testsと並列実行
},
{
id: 'final_review',
agent: 'reviewer',
prompt: 'Final code review incorporating all feedback',
dependsOn: ['write_tests', 'security_review'], // 両方完了後に実行
},
];
const result = await orchestrator.runTasks(team, tasks);
write_testsとsecurity_reviewはともにimplement_endpointsに依存しているが、互いに依存していないため自動的に並列実行される。このDAGの最適化がopen-multi-agentの中核だ。
構造化出力とZodスキーマ
エージェントの出力を型安全なJSONとして受け取ることもできる。Zodスキーマで検証済みの出力が保証される。
import { z } from 'zod';
import { OpenMultiAgent } from '@jackchen_me/open-multi-agent';
const AnalysisSchema = z.object({
summary: z.string(),
issues: z.array(z.object({
severity: z.enum(['critical', 'high', 'medium', 'low']),
description: z.string(),
file: z.string().optional(),
})),
recommendations: z.array(z.string()),
score: z.number().min(0).max(100),
});
const orchestrator = new OpenMultiAgent();
const result = await orchestrator.runAgent({
name: 'security_analyzer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You are a security expert analyzing codebases.',
tools: ['file_read', 'grep'],
outputSchema: AnalysisSchema, // Zodスキーマを指定
}, 'Analyze the security of the current codebase');
// result.outputはAnalysisSchema型として型安全に使える
console.log(`Security score: ${result.output.score}/100`);
result.output.issues
.filter(i => i.severity === 'critical')
.forEach(i => console.error(`CRITICAL: ${i.description}`));
トレーシングとデバッグ
全LLMコールとツール実行を追跡するトレーシング機能が標準搭載されている。
const orchestrator = new OpenMultiAgent({
onTrace: (event) => {
// LLMコール、ツール実行、エラーをリアルタイム追跡
if (event.type === 'llm_call') {
console.log(`[${event.agent}] ${event.model} - ${event.tokens} tokens`);
} else if (event.type === 'tool_use') {
console.log(`[${event.agent}] Using tool: ${event.tool}`);
} else if (event.type === 'task_complete') {
console.log(`Task "${event.taskId}" completed in ${event.duration}ms`);
}
},
});
この機能により、どのエージェントがどのモデルを何トークン使ったかが可視化できる。コスト管理やパフォーマンス最適化に直接活用できる。
ローカルモデルとの統合
Ollamaなどのローカルモデルを組み合わせることで、API費用を抑えながら機密データを処理できる。
// 費用のかかるタスクはクラウドAPIに、センシティブな処理はローカルに
const team = orchestrator.createTeam([
{
name: 'planner',
model: 'claude-sonnet-4-6', // 高精度な計画立案
systemPrompt: 'You decompose complex goals into sub-tasks.',
tools: [],
},
{
name: 'local_processor',
model: 'ollama/llama3.2', // ローカルモデルで機密データ処理
systemPrompt: 'You process sensitive internal data.',
tools: ['file_read', 'file_write'],
baseURL: 'http://localhost:11434/v1', // Ollama endpoint
},
]);
マルチエージェントアーキテクチャと仕組み
open-multi-agentの全体的なアーキテクチャは以下の通りだ。ゴール入力からタスク実行・出力統合まで、5つのコアコンポーネントが連携する。
flowchart LR
A["ユーザー<br/>ゴール入力"] --> B["CoordinatorAgent<br/>ゴール→タスクDAG変換"]
B --> C["TaskQueue<br/>依存関係解析<br/>トポロジカルソート"]
C --> D["AgentPool<br/>並列実行制御<br/>セマフォ管理"]
D --> E1["Agent A<br/>bash/file_write"]
D --> E2["Agent B<br/>file_read/grep"]
D --> E3["Agent C<br/>bash/file_edit"]
E1 --> F["MessageBus<br/>エージェント間<br/>非同期通信"]
E2 --> F
E3 --> F
F --> G["SharedMemory<br/>コンテキスト共有"]
G --> C
G --> H["結果集約<br/>LLMAdapter出力"]
H --> I["構造化出力<br/>Zodスキーマ検証済み"]
コアコンポーネントの役割:
| コンポーネント | 役割 | 実装の特徴 |
|---|---|---|
CoordinatorAgent |
ゴール→タスクDAG変換 | LLMにタスク分解を委譲(プロンプトがロジック) |
TaskQueue |
依存関係解析・実行順序決定 | トポロジカルソートで最適化、エラーカスケード対応 |
AgentPool |
並列実行制御 | セマフォによる同時実行数制限、タイムアウト管理 |
MessageBus |
エージェント間非同期通信 | イベント駆動、疎結合設計 |
LLMAdapter |
複数モデルへの統一インターフェース | Anthropic/OpenAI/GitHub Copilot対応 |
特筆すべきは、コーディネーターの「タスク分解ロジック自体がLLMへのプロンプト」という設計だ。Claude Codeのリーク解析ブログ(alex000kim.com)でも指摘されていたように、「orchestration algorithm is a prompt, not code」という原則を採用している。ハードコードされたルールベースではなく、LLMの推論能力でタスク分解を行う柔軟なアーキテクチャだ。
他の選択肢との比較
現在マルチエージェントシステム構築に使える主要な選択肢を比較する。
| 項目 | open-multi-agent | Claude Agent SDK | LangGraph | Microsoft AutoGen |
|---|---|---|---|---|
| モデル依存性 | なし | Claudeのみ | 任意 | 任意 |
| 実行方式 | インプロセス | CLIプロセス起動 | グラフベース | マルチプロセス |
| 言語 | TypeScript | TypeScript/Python | Python | Python |
| サーバーレス対応 | ✅ 完全対応 | ❌ 非対応 | ✅ 対応 | ⚠️ 部分対応 |
| DAG自動解決 | ✅ 自動 | ❌ 手動 | ✅ 自動 | ✅ 自動 |
| メッセージバス | ✅ 標準搭載 | ❌ なし | ⚠️ 限定的 | ✅ あり |
| 構造化出力 | ✅ Zod対応 | ❌ なし | ⚠️ 別途実装 | ⚠️ 別途実装 |
| ローカルモデル | ✅ Ollama対応 | ❌ なし | ✅ 対応 | ✅ 対応 |
| 依存関係数 | 3件 | 多数 | 多数 | 多数 |
| ライセンス | MIT | Anthropic独自 | MIT | MIT |
open-multi-agentが特に優位なのは「TypeScript + サーバーレス + 少ない依存関係」の組み合わせだ。LangGraphはPythonエコシステムが前提で、Node.js環境では使いにくい。Claude Agent SDKはCLIプロセス起動のためサーバーレスに向かない。
OpenHandsのようなフルスタックのAIコーディングエージェントとは競合せず、より低レイヤーの「マルチエージェント協調ミドルウェア」として位置づけられる。自分のアプリケーションに組み込むライブラリとしての利用が主なユースケースだ。
AIエージェント開発への実務的影響
open-multi-agentが実務にもたらす変化は4点に整理できる。
① ベンダーロックイン回避 Anthropic、OpenAI、Googleの間でのモデル切り替えがフレームワークレベルで可能になる。AIモデルの価格・性能変化に応じた戦略的な選択が実現する。チームごとに異なるモデルを割り当てることもできるため、タスクの特性に合わせた最適化も容易だ。
② サーバーレス環境への展開 AWS Lambda、Google Cloud Functions、Vercel Edge Functionsでのマルチエージェント実行が可能になる。これまでは仮想マシンやコンテナが必要だったワークロードを、サーバーレスに移行できる可能性がある。特にバースト的な負荷変動(大量ドキュメント処理、夜間バッチなど)での費用対効果が高い。
③ CI/CDパイプラインへの統合 LangChainベースのエージェントをCI/CDに組み込む際、プロセス分離の問題で苦労した経験を持つチームは多い。open-multi-agentのインプロセス実行モデルはGitHub ActionsやJenkinsへの統合が素直に書ける。テスト自動化、コードレビュー自動化、ドキュメント生成の自動化が現実的な選択肢になる。
④ トレーシングによるコスト管理
onTraceコールバックで全LLMコールのトークン数・実行時間を記録できる。どのエージェントがコストの大部分を占めているかが可視化でき、モデルの格下げ(高精度モデル→軽量モデル)や並列化の効果測定が定量的にできる。
一方、注意点もある。open-multi-agentはリリースから1ヶ月未満の新しいOSSであり、プロダクション実績はまだ積み上がっていない。3.1kスター(2026年4月時点)の注目度はあるが、エンタープライズ環境での耐障害性テストや長期的なメンテナンスについては未知数だ。既存のClaude Code Auto Modeと組み合わせた場合の相互作用も検証が必要だ。
まとめ
Claude Codeのソースコード漏洩という想定外の出来事が、マルチエージェントシステムの設計パターンをOSSコミュニティに開示するきっかけとなった。open-multi-agentはその知見を独自に再実装したTypeScriptフレームワークで、モデル非依存・インプロセス実行・DAGスケジューラという特性が、既存選択肢の隙間を埋める。
特にTypeScriptエコシステムでサーバーレスやCI/CDにマルチエージェントを組み込みたいチームには、現時点で最も実用的な選択肢の一つだ。依存3件・ソース27ファイルの軽量設計は、フレームワークをブラックボックスとして扱わず、必要に応じてソースを読んで理解・改変できる透明性も魅力だ。
今後、エージェント系ツールの普及に伴い、このようなミドルウェア層のOSSが増えていくことが予想される。open-multi-agentの発展とコミュニティの反応は、マルチエージェントアーキテクチャの標準化に向けた重要な指標になるだろう。
参照ソース
- JackChen-me/open-multi-agent - GitHub
- Ivan Burazin on X (2026-04-03)
- Claude Code Source Leaked via npm Packaging Error, Anthropic Confirms - The Hacker News
- The Claude Code Source Leak: fake tools, frustration regexes, undercover mode - Alex Kim’s blog
- Daytona Raises $24M Series A to Build Agent-Native Compute Infrastructure - Tech.eu