Skip to main content
Glama
termmirror

termmirror

termmirror

AIエージェントに実際の対話型ターミナルセッションを提供するMCPサーバー。そして、人間がそのセッションを閲覧して入力できるライブWebビューも備えています。

あるエージェントが別のエージェントのCLIを操作している様子を、ブラウザでライブ視聴

あるエージェントがtermmirrorを通じてClaude Codeセッションを操作しています。トラストプロンプトを受け入れ、質問をし、その答えを画面から読み取りました。ブラウザの表示はライブで、そこへの入力はそのまま同じターミナルに送られます。

キーストロークごとに操作されるvimセッション

同じツールで動くフルスクリーンのTUI: エージェントはvimを開き、ファイルの末尾に移動し、挿入モードに入り、1行入力しました。

特徴

  • 実際のPTYセッション。 node-ptyをバックエンドに、ヘッドレス端末エミュレーターが画面状態を保持します。tmuxや他の外部依存はありません。

  • TUI向けに設計。 代替画面の検出、コントロールキーとナビゲーションキーのエンコード、ソフトラップされた行を解除したスクロールバックを備えています。

  • 信頼性の高い待機。 waitはプログラムが応答して落ち着いた時点で戻るため、読んだ画面は入力前の状態ではなく、入力を反映したものになります。

  • ライブWebビュー。 どのセッションも実行中にブラウザで見られます。ページへの入力はそのままPTYに送られるため、人間が引き継いだり、制御を戻したりできます。

  • エージェント間連携。 あるエージェントが別のエージェントのCLIを、マルチターンの会話を通じて操作できるように設計されています。

Related MCP server: spectatty

要件

  • Node.js 20以上

  • macOSまたはLinux

インストール

git clone https://github.com/Ar9av/termmirror.git
cd termmirror
npm install && npm run build

Claude Codeにサーバーを登録します:

claude mcp add termmirror -- node /absolute/path/to/termmirror/dist/src/index.js

どのMCPクライアントでも動作します。サーバーはstdioで通信します。

使用方法

3つのツールを、この順序で使います:

send_input  →  wait  →  read_screen

read_screenは、今の見たままの画面を返します。出力されたすべてを記録したログではなく、スクリーンショットです。waitは、それを読む価値のあるものにする機能です。プログラムが応答して静かになるまでブロックするので、キー入力後の状態を見ることができます。

ツール

ツール

説明

create_session

セッションを開始します(デフォルトは$SHELL、または任意のコマンド)。IDと視聴用URLを返します。

send_input

セッションにテキストを入力します。必要に応じてEnterで送信します。

send_keys

ctrl+c、escape、tab、矢印キー、f1–f12、alt+Xなどを送信します。

read_screen

表示されている画面をプレーンテキストで返します。scrollbackで履歴を遡れます。

wait

セッションが応答して落ち着くまで(idle)、またはテキストが現れるまで(pattern)待機します。

list_sessions

稼働中・終了済みのすべてのセッションを、視聴URL付きで一覧表示します。

resize

ターミナルの寸法を変更します。

kill_session

セッションを終了します。

待機

idleがデフォルトであり、ほとんどの場合で正しい選択です。対話型プログラムは、作業中は継続的に再描画し、あなたの番になると沈黙します。したがって、沈黙は信頼できる完了シグナルです。マッチさせるプロンプトを出さないスピナーやTUIにも当てはまります。時間のかかる操作ではtimeoutを増やしてください。

no_outputという結果は、入力後に何も返ってこなかったことを意味します。プログラムがビジーで沈黙しているか、入力がまったく登録されなかったかのどちらかです。

期待するテキストが分かっている場合はpatternを使います。これは自分が入力したエコーを含む画面全体に対してマッチするため、ついさっき入力したマーカーではなく、プログラムが出力する何かを待つようにしてください。

セッションを視聴する

最初のセッションがポート7878でローカルWebサーバーを起動します。create_sessionが返すURLを開くと、セッションがライブで表示されます。ページに入力するとPTYに直接書き込まれるため、人間がパスワードを入力したり、エージェントに処理させたくないプロンプトに回答してから、制御を返すことができます。ハンドオフのプロトコルは不要で、単に同じターミナルを反対側から操作するだけです。

変数

効果

TERMINAL_UI_PORT

Webビュー用のポート(デフォルトは7878。0を指定すると空きポートを選びます)。

TERMINAL_NO_UI

1に設定すると、Webビューを完全に無効にします。

例

node examples/drive-claude.mjs "what is 2+2? reply with just the number"

あるエージェントがclaudeを起動し、トラストプロンプトを受け入れ、質問をして、その答えを画面から読み取ります。これはMCPインターフェースが公開しているツールと同じものを、逐一書き下したものです。

開発

npm run build    # compile TypeScript to dist/
npm test         # build, then run the test suite

テストスイートは、サーバーの他の部分が依存する待機セマンティクス、キーエンコード、スクロールバック、Webビューのライブストリームと引き継ぎ入力、そして実際のMCPプロトコルでのエンドツーエンド実行をカバーしています。

名前について

パッケージ名はtermmirrorで、mが2つです。alias/termirror/は、それに依存するスタブパッケージで、mが1つの表記でも正しい場所に解決されるようにするためのものです。

ライセンス

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI agents with fully interactive terminal sessions, including TUI support, keyboard control, and screen capture across Windows, Linux, and Mac.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to spawn and interact with real terminal sessions, capturing screenshots of rendered TUI output and sharing live sessions for debugging.
    2 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely execute terminal commands with persistent sessions, async jobs, and mission control, while providing a live dashboard for human oversight.
    4
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Give AI agents a persistent, interactive terminal with support for SSH, REPLs, database CLIs, TUI apps, and long-running processes.
    9
    41 PyPI
    12
    MIT