Communityコーディング&開発github.com

Dicklesworthstone/frankenterm

AIエージェント群のためのターミナルハイパーバイザー:リアルタイムペインキャプチャ、ステートマシンパターン検出、WezTerm上でコーディングエージェントの群れを調整するJSON API

frankenterm とは?

frankentermは、WezTerm上で動作するAIエージェント群のためのターミナルハイパーバイザーです。複数のコーディングエージェント(Claude Code、Codex、Cursorなど)が同時にターミナルペインで作業する際、各ペインの出力をリアルタイムでキャプチャし、ステートマシンベースのパターン検出を用いてエージェントの状態(エラー、準備完了、進行中など)を識別します。さらに、JSON APIを提供するため、外部のオーケストレーターやマネージャーエージェントが各エージェントの状態を統一的に監視・制御できます。これにより、多数のAIエージェントを協調させて大規模なソフトウェア開発タスクを遂行する際の障害(ペイン管理の複雑さ、状態把握の困難さ、APIの非互換性)を解決します。

対応~Claude Code~Codex CLI~Cursor
npx skills add Dicklesworthstone/frankenterm

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

frankenterm は何をしますか?

AIエージェント群のためのターミナルハイパーバイザー:リアルタイムペインキャプチャ、ステートマシンパターン検出、WezTerm上でコーディングエージェントの群れを調整するJSON API。

概要

frankenterm はWezTermターミナルエミュレータ用のプラグインであり、複数のAIコーディングエージェントを統一的に管理・監視するための基盤を提供します。各ターミナルペインで動作するエージェント(Claude Code、Codex、Cursorなど)の出力をリアルタイムにキャプチャし、ステートマシンパターン検出を用いてエージェントの状態を識別します。また、JSON APIを公開することで、外部のオーケストレーターやスーパーバイザーエージェントが各エージェントの状態を問い合わせ、制御することを可能にします。

主な機能

  • リアルタイムペインキャプチャ: 各WezTermペインの出力を継続的に監視し、テキストとして取得
  • ステートマシンパターン検出: エージェントの出力から「エラー」「準備完了」「処理中」などの状態を自動認識
  • JSON REST API: 外部プログラムやAIエージェントがペインの状態を統一的にクエリ・操作できるAPI
  • エージェント非依存: 特定のAIエージェントに依存せず、あらゆるターミナルベースのエージェントと連携可能
  • WezTermプラグイン: Luaで記述され、WezTermのプラグインシステムを通じて簡単に導入

セットアップ

  1. WezTermがインストールされていることを確認してください。
  2. リポジトリをクローンまたはダウンロードします。
  3. WezTermの設定ファイル(通常 ~/.config/wezterm/wezterm.lua)にプラグインを登録します。
local wezterm = require 'wezterm'
wezterm.plugin.require('https://github.com/Dicklesworthstone/frankenterm')
  1. WezTermを再起動し、複数のペインで異なるAIエージェントを起動します。
  2. デフォルトでは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ファイルを参照してください。

関連スキル