frankenterm は何をしますか?
AIエージェント群のためのターミナルハイパーバイザー:リアルタイムペインキャプチャ、ステートマシンパターン検出、WezTerm上でコーディングエージェントの群れを調整するJSON API。
概要
frankenterm はWezTermターミナルエミュレータ用のプラグインであり、複数のAIコーディングエージェントを統一的に管理・監視するための基盤を提供します。各ターミナルペインで動作するエージェント(Claude Code、Codex、Cursorなど)の出力をリアルタイムにキャプチャし、ステートマシンパターン検出を用いてエージェントの状態を識別します。また、JSON APIを公開することで、外部のオーケストレーターやスーパーバイザーエージェントが各エージェントの状態を問い合わせ、制御することを可能にします。
主な機能
- リアルタイムペインキャプチャ: 各WezTermペインの出力を継続的に監視し、テキストとして取得
- ステートマシンパターン検出: エージェントの出力から「エラー」「準備完了」「処理中」などの状態を自動認識
- JSON REST API: 外部プログラムやAIエージェントがペインの状態を統一的にクエリ・操作できるAPI
- エージェント非依存: 特定のAIエージェントに依存せず、あらゆるターミナルベースのエージェントと連携可能
- WezTermプラグイン: Luaで記述され、WezTermのプラグインシステムを通じて簡単に導入
セットアップ
- WezTermがインストールされていることを確認してください。
- リポジトリをクローンまたはダウンロードします。
- WezTermの設定ファイル(通常
~/.config/wezterm/wezterm.lua)にプラグインを登録します。
local wezterm = require 'wezterm'
wezterm.plugin.require('https://github.com/Dicklesworthstone/frankenterm')
- WezTermを再起動し、複数のペインで異なるAIエージェントを起動します。
- デフォルトではAPIは
http://localhost:9876で利用可能になります。
API エンドポイント
GET /panes
すべてのアクティブなペインのリストとその現在の状態を返します。
レスポンス例:
{
"panes": [
{
"pane_id": 1,
"window_id": 0,
"title": "Claude Code",
"state": "ready",
"last_output_snippet": "..."
},
{
"pane_id": 2,
"window_id": 0,
"title": "Cursor",
"state": "error",
"last_output_snippet": "Error: ..."
}
]
}
POST /panes/:id/send
指定されたペインにテキストを送信します(エージェントへの指示など)。
リクエスト例:
{
"text": "続けてください"
}
GET /panes/:id
特定のペインの詳細情報(完全な出力履歴、状態遷移など)を取得します。
ステートマシンパターン
frankentermは各ペインの出力を解析し、定義されたパターンに従って状態を遷移させます。デフォルトでは以下の状態を認識します:
| 状態 | 説明 | トリガーパターン例 |
|---|---|---|
ready | エージェントが次の指示を待機 | >, $, Ready |
busy | エージェントが処理中 | Processing..., 考え中... |
error | エラーが発生 | Error:, Traceback |
done | タスク完了 | Task complete, 完了 |
カスタムパターンは設定ファイルを通じて追加できます。
設定オプション
WezTermの設定ファイルで以下のオプションを設定できます:
local frankenterm = wezterm.plugin.require('https://github.com/Dicklesworthstone/frankenterm')
frankenterm.setup({
api_port = 9876, -- APIサーバのポート
capture_interval_ms = 200, -- ペインキャプチャの間隔(ミリ秒)
max_output_history = 1000, -- ペインごとの保持する出力行数
custom_states = {
{
name = "debugging",
pattern = "DEBUG",
description = "デバッグモード中"
}
}
})
ユースケース
- 大規模コードベースのリファクタリング: 複数のエージェントに異なるファイルやモジュールのリファクタリングを並行して実行させる
- CI/CDパイプラインの監視: 各ステップの実行状況をエージェントが監視し、障害時に自動対応
- 複数言語・フレームワーク対応: 各ペインで異なる言語やフレームワーク用のエージェントを起動し、協調させる
- 研究・実験: 異なるAIモデルやプロンプト戦略を同時に比較評価
注意事項
- frankentermはWezTerm上でのみ動作します(他のターミナルエミュレータでは利用不可)。
- 各エージェントが標準入出力を適切に扱うことを前提としています。
- セキュリティ上の理由から、APIはデフォルトでlocalhostにバインドされています。リモートアクセスが必要な場合は適切な認証機構を追加してください。
ライセンス
MIT License - 詳細はLICENSEファイルを参照してください。