Mux は自律型AIエージェントを構築するためのライブラリです。Think-Actループ、ツール実行、LLMプロバイダー抽象化、マルチエージェント調整を担うことで、開発者はステートマシンの配線ではなくツールとビジネスロジックの定義に集中できます。
2つの実装で提供:
- mux (Go) —
go get github.com/2389-research/mux - mux-rs (Rust) —
Cargo.tomlにmux = "0.10"
どちらも同じアーキテクチャと機能セットを持ちます。スタックに合わせて言語を選んでください。
できること
マルチプロバイダーLLM抽象化。 1つのクライアントインターフェースで Anthropic (Claude)、OpenAI、Google Gemini、OpenRouter、Ollama をカバー。コンストラクタを変えるだけでプロバイダーを切り替えられます。5つすべてがストリーミングとツール呼び出しに対応。
ユニバーサルツールインターフェース。 組み込み関数、MCPサーバーツール、外部サービスを問わず、すべてのケイパビリティが同じツールインターフェースを実装します: 名前、説明、承認要件、実行。スレッドセーフなレジストリにツールを登録すれば、オーケストレーターが残りを処理します。
承認ゲート。 ツールは呼び出しごとに承認が必要かどうかを宣言します。エグゼキューターは機密性の高い操作を実行する前に承認関数を確認します。コンテキスト依存: 書き込みツールは承認を要求しつつ、読み取りツールは自由に実行できます。Rust実装にはallow/denyルール、globパターン、条件関数を持つフルポリシーエンジンが追加されます。
MCPクライアント。 stdioまたはstreamable HTTPで外部MCPサーバーに接続。ツールを一覧取得し、JSON-RPC 2.0で呼び出し、ユニバーサルツールインターフェースに自動的に変換します。
エージェント階層。 親エージェントはツールアクセスを制限した子エージェントを生成します。拒否されたツールはツリーを下って積み重なります。各エージェントは階層的なIDを持ち、生成時と完了時にライフサイクルフックを発火します。
非同期実行と永続化。 ポーリング、有界待機、キャンセルを使ってエージェントを非同期実行。会話履歴をJSONまたはJSONLトランスクリプトとして保存し、復元して中断箇所から再開できます。
仕組み
3つのレイヤー:
- LLMクライアント — 異なるAPIを1つのリクエスト/レスポンス形式に正規化するプロバイダークライアント。ストリーミング、トークン追跡、設定可能なデフォルト値を持ちます。
- オーケストレーター — Think-Actループ。LLMを呼び出し、レスポンスからツール呼び出しを解析し、エグゼキューター経由でツールを実行し、結果をフィードバックして、モデルがツール呼び出しを止めるまで繰り返します。各ステージでフックを発火します。会話履歴が長くなりすぎるとコンパクト化します。
- エージェント — オーケストレーターをエージェントごとのツールフィルタリング、子エージェント管理、非同期実行、トランスクリプト永続化でラップします。事前構築済みプリセット (Explorer、Planner、Researcher、Writer、Reviewer) が一般的なパターンをカバーします。
サポートパッケージ: ツールレジストリとエグゼキューター、MCPプロトコル統合、ルールベースアクセス制御、エージェント間の共有リソースロック、ライフサイクルイベントフック。
Rust 追加機能
Rustワークスペースには追加クレートが含まれます:
- mux-ffi — Swift (iOS/macOS) および Kotlin (Android) 向け UniFFI バインディング
- code-agent — リファレンスエージェント実装
- agent-test-tui — エージェント動作をテストするインタラクティブTUI
必要要件
Go: Go 1.24+ と少なくとも1つのLLM APIキー (ANTHROPIC_API_KEY、OPENAI_API_KEY、または GEMINI_API_KEY)
Rust: Rust 2024エディション (1.85+)、tokioランタイム、選択したLLMプロバイダーのAPIキー
