エージェントルーティング
インテリジェントな変換でAIエージェント間に出力を自動的に渡す。
エージェントルーティングは MadoHub のコア機能です。あるエージェントがタスクを完了すると、MadoHub は自動的に結果を抽出し、実行可能なプロンプトに変換して、別のエージェントに届けることができます。
仕組み
- トリガー — 接続されたソースタイルが設定されたトリガータイプ(アイドル検出、完了検出、キーワードマッチ、または継続)に基づいて発火します。
- 抽出 — MadoHub はエージェントの最後のレスポンスを読み取ります。Claude Code の場合、JSONL セッションファイルを使用してクリーンに抽出します。その他のエージェントは端末出力を直接読み取ります。
- 変換 — 抽出された出力はターゲットエージェント向けのプロンプトに変換されます。AI による書き換え、テンプレートラッピング、またはそのままの転送が使用できます。
- 配信 — 変換されたプロンプトは人間らしい遅延(1 行あたり 50–80ms)でターゲット端末に 1 行ずつ入力され、エージェントに応じた Enter シーケンスで送信されます。
JSONL セッション解決
Claude Code の場合、MadoHub はセッションログファイルを読み取ってクリーンなレスポンスを抽出します:
- 端末の tmux ペインを特定し、プロセスツリー(
ps -eo pid=,ppid=,comm=)を幅優先で辿り、コマンド名に claude/codex/amp/opencode のいずれかを含む最初の子孫プロセスを見つけます。その PID がエージェントプロセスです。 ~/.claude/sessions/{PID}.json(session id ではなくエージェントの PID がキー)を読み取り、そのsessionIdフィールドを取得します。~/.claude/projects/配下の各サブディレクトリを走査し、{sessionId}.jsonlという名前のファイル(トランスクリプト)を探します。- JSONL を解析して最後のアシスタントメッセージを抽出します。
これにより、ANSI コードや書式設定アーティファクトを避けて、生の端末スクレイピングよりもはるかにクリーンなコンテンツが得られます。
これとは別に、cwd_to_project_dir() はタイルの作業ディレクトリをプロジェクトディレクトリにマッピングします。/ を - に置き換え、完全一致がない場合は部分文字列検索にフォールバックします。
トリガータイプ
| タイプ | 動作 |
|---|---|
| on-idle | 完了キーワードのマッチ(IDLE_DELAY_MS)を待ち、その後 8 秒間の沈黙を待ちます。デフォルトで最も信頼性が高い。 |
| on-complete | on-idle とまったく同じ扱いです。同じ完了キーワードのマッチを待ち、同じ 8 秒間の沈黙遅延の後に発火します。 |
| on-keyword | カスタム正規表現パターンが出力にマッチしたときに発火します。 |
| always | すべての新しい端末出力を継続的にストリームします。 |
変換タイプ
| タイプ | 説明 |
|---|---|
| ai-routing | AI モデルを使用してターゲットエージェント向けのコンテキスト対応プロンプトを生成します。設定で API キーが必要です。カスタムテンプレートに対応。 |
| prompt-wrap | ユーザー提供のテンプレートで出力をラップします。変数:{output}、{round}、{maxRounds}、{source}。 |
| full-output | 端末出力の最後の 30 行をそのまま送信します。 |
| raw | 端末出力の最後の 10 行を送信します。 |
| summary | 出力の AI 生成サマリーを送信します。 |
ルーティングのディスパッチはデフォルトで madoagent パスを使用します(legacy、shadow も選択可能)。
コンテンツ配信
MadoHub は 50–80ms の遅延で 1 行ずつターゲット端末にコンテンツを入力し、人間の入力をシミュレートします。Enter キーの動作はエージェントによって異なります:
- Claude Code、Codex、Amp、OpenCode:ダブルキャリッジリターン(
\r\r)で送信します。Codex は 800ms の事前遅延と 2 回の押下間に 200ms、それ以外のエージェントは 500ms の事前遅延です。 - Shell:単一改行(
\n)で送信します。
ループ保護
ルーティング接続には無限ループを防ぐための組み込みセーフガードがあります:
| 設定 | デフォルト | 範囲 | 説明 |
|---|---|---|---|
| maxRounds | 5 | 1–20 | 自動停止前の最大ルーティングサイクル数。 |
| cooldownMs | 3s | 1–30s | トリガー間の最小遅延。 |
| stopKeyword | — | 任意の文字列 | 検出されたときにルーティングを停止します(例:"LGTM")。 |
ワークフロー例
ターミナル 1 (Claude Code) ターミナル 2 (Claude Code)
┌──────────────────────┐ → ┌──────────────────────┐
│ "Refactor auth module"│ │ Receives: │
│ │ │ "Review the refactor │
│ ✓ Done — 3 files │ │ in src/auth/..." │
└──────────────────────┘ └──────────────────────┘エージェント 1 がコードをリファクタリングします。完了すると、MadoHub は JSONL レスポンスを読み取り、AI ルーティングを使用して特定のファイルと変更を含むレビュープロンプトを生成し、エージェント 2 に配信します。