raxol について
Raxolは、単一のアプリケーションをターミナル、ブラウザー、SSHセッション、エージェント向けに描画するElixir/OTPランタイムです。対話型UIコンポーネントからMCPツールを生成し、エージェントが構造化されたコンポーネントツリーを操作できます。
主な機能
- 011つのTEAモジュールで4つの表示面
- 02ターミナル、ブラウザー、SSHでの描画
- 03コンポーネントからMCPツールを生成
- 04コンポーネント単位のクラッシュ分離
- 05ホットコードリロードとクラスタリング
- 06UIとの構造化されたエージェント操作
活用シーン
- 01ターミナルとブラウザーで共用するUIの構築
- 02エージェントによるUIコンポーネントの操作
- 03SSH経由でのアプリケーション提供
- 04stdio経由でClaude CodeにMCPツールを提供
MCP 対応
対話型コンポーネントは、ボタンのクリックやテキスト入力などのMCPツールを自動的に公開します。`mix mcp.server`でstdio上のMCPサーバーを起動でき、HarnessのMCPツールではセッション開始、プロンプト送信、記録の読み取り、一覧表示も行えます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Raxol
再帰的に、axol。永遠にFOSS。
アプリを1つ書くだけで、ターミナル、ブラウザー、SSH セッション、またはエージェントにレンダリングできます。
アプリケーションは、OTP GenServer として実行される、単一の TEA モジュール(init、update、view)です。Raxol は、1つのコードベースからそのモジュールを4つのサーフェスにレンダリングします。
+---> Terminal (termbox2 NIF)
|
TEA module (GenServer) -+---> Browser (Phoenix LiveView)
|
+---> SSH (Erlang :ssh)
|
+---> Agent (MCP tools)
注目すべきはランタイムです。アプリには Component ごとのクラッシュ分離、再起動なしのホットコードリロード、CRDT による分散クラスタリングが備わっており、エージェント向けサーフェスでは、LLM がピクセルを読み取るのではなく、構造化された Component ツリーとやり取りします。これらはすべて、停止できず、状態を失うことができず、実行中にコードをホットスワップするシステム向けに構築された VM に由来する BEAM の特性です。
Bubble Tea、Ratatui、Textual は優れたレンダラーです。A2UI と AG-UI は、エージェントと UI 間のワイヤーフォーマットを定義しています。Raxol は、1つのソースモジュールから4つすべてのサーフェスをレンダリングするランタイムです。フレームワークの比較についてはWhy OTPを、Hermes や Omnigent などの Python エージェントスタックとランタイムを比較した内容についてはWhy Raxolをご覧ください。
エージェント
Raxol は、人間だけでなくエージェント向けのランタイムでもあります。インタラクティブな Component はすべて MCP ツールを自動的に公開します(Button は click、TextInput は type_into/clear/get_value を提供)。また、フォーカスレンズにより、各インタラクションで関連するツールをおよそ15個に絞り込みます。A2UI と AG-UI がワイヤーレベルでエージェントと UI の通信方法を定義するのに対し、raxol は1つの Component ツリーから UI とエージェント向けサーフェスを生成します。同じソースから、2つのビューを生成します。
import Raxol.MCP.Test
import Raxol.MCP.Test.Assertions
session = start_session(MyApp)
session
|> type_into("search", "elixir")
|> click("submit")
|> assert_component("results", fn c -> c[:content] != nil end)
|> stop_session()
mix mcp.server は Claude Code との連携用に stdio で MCP サーバーを起動し、mix raxol.code は、変更を伴うすべてのツール呼び出しが ALLOW/ASK/DENY 認可エンジンによって制御される、インタラクティブなターミナルコーディングエージェント(axol の顔)です。Coding Agentをご覧ください。
Code はコーディングエージェント製品で、実際に操作できる2つのサーフェスを提供します。mix raxol.code はインタラクティブなターミナル TUI(axol の顔 ≡··≡)で、mix raxol.p はそのヘッドレス版です(argv からプロンプトを受け取り、stdout に回答を出力し、stderr にコントラクトイベントを出力)。パイプや CI で利用できます。変更を伴うすべてのツール呼び出しは、ALLOW/ASK/DENY 認可エンジンによって制御されます。クローンから、セットアップコマンドを1つ実行し、起動コマンドを1つ実行するだけです。
(cd packages/raxol_agent && mix deps.get) # once
bin/raxol-code # the TUI, your cwd as the workspace
API キーを設定していない場合でも、失敗する代わりに TUI がプロバイダーウィザードを開きます。/inspect(または packages/raxol_agent から mix raxol.inspect)を実行すると、現在のディレクトリでエージェントが使用する設定ソースをすべて確認できます。
セッションは永続化されます。各セッションのイベントはディスクにジャーナルとして記録されるため、--continue と --resume <id> を使うとモデルコンテキストとスクロールバックをまとめて復元でき、--replay <id> はジャーナルからトランスクリプトを直接出力します(--to-offset N を指定すると、そのオフセットで停止します)。/rewind で以前のターンに戻り、/share で、セッションをリアルタイムで追従する読み取り専用トランスクリプトへの、署名付き24時間有効リンクを発行できます(RAXOL_SHARE_SECRET と、Raxol.Agent.Code.ShareLive をマウントするホストが必要です)。
同じ TUI は SSH 経由でも利用できます。mix raxol.code --ssh --ssh-tenants /srv/tenants を実行すると、1 つのデーモンで多数のユーザーをホストできます。各ユーザーはそれぞれ独自の公開鍵、作業ディレクトリの jail、セッションストア、課金 ID を持ちます(クライアントは ssh <you>@your-host -p 2222 だけです)。シングルテナント(--authorized-keys)とホスト型デプロイ(RAXOL_SSH_CODE=true)については、Coding Agent をご覧ください。
2 つの無人操作用インターフェースが、同じエージェントを実行します。bin/raxol-acp(または mix raxol.acp)は、エディターがエージェントを自ら起動する場合に、Agent Client Protocol 経由で stdio 上にエージェントを提供します。Raxol.Agent.Harness.McpTools は harness_start_session、harness_send_prompt、harness_read_transcript、harness_list_sessions を MCP レジストリに登録するため、MCP クライアントが開始したセッションを後から TUI で再開できます。ACP インターフェースは完全なツールセットを実行し、すべての機密性の高い呼び出しを session/request_permission のラウンドトリップで承認確認します。判断が得られない場合はフェイルクローズとなります。つまり、クライアントが拒否する、タイムアウトする、または権限機能を実装していない場合は、書き込みを拒否して読み取りを続けます。MCP インターフェースは読み取り専用のままです。承認プロンプトに応答する人がいないため、write_file、edit_file、bash は提供されません。
これらすべてのインターフェースを支えるのが、エージェントセッションエンジンである Harness です。耐久性のあるイベントジャーナル(Raxol.Agent.Journal)、型付きイベント/コマンド契約(Raxol.Agent.Contract)、イベントストリームを純粋に畳み込んで得られるインターフェース状態(Raxol.Harness.Projection)を備え、その下には段階的な中断、方向付け、支出/影響範囲のゲートがあります。同じエンジンで、Raxol 独自のループだけでなく、外部エージェント CLI(claude、cursor)も監督できます。Harness architecture をご覧ください。
エージェントのサブシステムは、スタンドアロンパッケージとして提供されています。
- Pay(
raxol_payments):ウォレット、台帳で強制される支出上限、エージェントが HTTP 402 に遭遇した際の透明性の高い自動支払いを提供します。5 つのプロトコル(x402、MPP、Xochi cross-chain、Permit2、Riddler)に対応しています。 - Earn(
raxol_earn):販売側の機能です。提供内容を宣言し、2 つのコールバックを実装すると、購入者エージェントがそれを見つけて資金をエスクローし、Virtuals の ACP ジョブライフサイクル(request、negotiation、transaction、evaluation、completed)を通じてオンチェーンで決済します。ジョブごとに 1 つの監督対象プロセスが実行されます。プレアルファ版です。 - Improve(
raxol_agent):解決済みのタスクを再利用可能なSKILL.mdにします。バックグラウンドレビュー担当が各ターンの後に低コストモデルで実行され、進行中のターンのレイテンシやコンテキストを消費することなく、永続的なメモリーと新しいスキルを記録します。 - Reach(
raxol_gateway):多くのチャットプラットフォームに対応する単一のアダプター契約、チャットごとのプロセスセッション、認証用の DM ペアリング、履歴を保ったままプラットフォーム間で会話を移動する/handoffを提供します。 - Bridge(
raxol_agent_client_protocol):Agent Client Protocol の Elixir/OTP 実装です。コードエディターと AI コーディングエージェント間の JSON-RPC 2.0 ワイヤープロトコルで、Zed をはじめとする拡大中のエコシステムが採用しています。双方向のエージェント/クライアントロール、プラグイン可能なトランスポート(stdio、インプロセス)、ベンダー拡張として耐久性のある再開可能なセッション(オフセットベースの再接続/再生)を備えています。raxol 内部への依存はありません。プレアルファ版です。
インストール
# mix.exs
def deps do
[{:raxol, "~> 2.7"}]
end
または、新しいプロジェクトを生成します。
mix raxol.new my_app
Nix を使うと、nix develop で BEAM と NIF の完全なツールチェーンが揃ったシェルが起動します(ローカルに Elixir をインストールする必要はありません)。
nix develop github:DROOdotFOO/raxol # dev shell with elixir, erlang, NIF + speech deps
試してみる
インストールは不要です。raxol.io では、同じカタログをブラウザー上で実行でき、各デモはそれぞれ 1 つの LiveView で構成されています。この画面を提供しているのが、このリポジトリの web/ アプリです。自分で実行する方法は web/README.md をご覧ください。ターミナルでは次のようにします。
git clone https://github.com/DROOdotFOO/raxol.git
cd raxol && mix deps.get
mix raxol.playground # 42 live demos, browse/search/filter
目玉のデモは、スケジューラーの使用率、メモリーのスパークライン、プロセステーブルを表示するライブ BEAM ダッシュボードです。
mix run examples/demo.exs
エージェントの例、スウォームのデモ、REPL など、学習の全工程については examples/README.md をご覧ください。
ヘッドレス環境(CI、コンテナー、エージェント)で作業していますか?ビルドとテストの全工程で tty は不要です。
mix local.hex --force # fresh machines and CI: install Hex without a prompt
mix deps.get
mix compile # termbox2 NIF needs make + a C compiler
SKIP_TERMBOX2_TESTS=true MIX_ENV=test mix test --exclude slow --exclude integration --exclude docker
MIX_ENV=test mix raxol.rate # RATE: render-determinism golden suite
前提条件、品質ゲート、制約のあるサンドボックスに関する注意事項は、開発をご覧ください。
パフォーマンス
Apple M1(Elixir 1.20 / OTP 29)でフレーム全体を 5.0ms で処理し、60fps の予算の 31% を使用します。
| 内容 | 時間 |
|---|---|
| フレーム全体(作成+塗りつぶし+差分) | 5.0 ms |
| ツリーの差分(100 ノード、変更 1 件) | 32 us |
| セル書き込み(単一) | 1.4 us |
| バッファー作成(80x24) | 0.32 us |
| エミュレーターの取り込み(解析+適用、プレーン) | 1.7 ms |
| 80x24 バッファーあたりのメモリー | 2 KB |
2026-08-07 に fce2465bb で mix run bench/suites/comparison/framework_comparison.exs(full mode)を使用して測定しました。取り込みの行は、単体の ANSI レキサーではなく、エミュレーターの処理全体(解析と状態の適用)を示しています。単体の ANSI レキサーはプレーンテキストを 1 マイクロ秒未満で処理します(mix raxol.bench parser)。
Unix/macOS バックエンドでは termbox2 NIF を使用し、Windows では純粋な Elixir ドライバーを使用します(利用可能ですが、まだ調整されていません)。詳しくはベンチマークスイートをご覧ください。
ドキュメント
ドキュメントの目次から始めるか、次の項目をご覧ください。
開発
ソースから作業するには、Elixir/OTP(バージョンは mise.toml を参照)と C ツールチェーンが必要です。termbox2 NIF のコンパイルには make と cc を使用します(Debian/Ubuntu では apt-get install build-essential)。nix develop を実行すると、必要なものがすべてそろったシェルが起動します。以下のコマンドはすべてヘッドレスで実行できます。ビルド、テストスイート、ゴールデンチェックにターミナルは必要ありません。
git clone https://github.com/DROOdotFOO/raxol.git
cd raxol
mix local.hex --force # fresh machines and CI: install Hex without a prompt
mix deps.get
mix compile # builds the termbox2 NIF
SKIP_TERMBOX2_TESTS=true MIX_ENV=test mix test --exclude slow --exclude integration --exclude docker
MIX_ENV=test mix raxol.rate # RATE: render-determinism golden suite
mix raxol.check # full gate: format, compile, credo, dialyzer, security, docs, rate, test
mix raxol.check --quick # skip dialyzer
mix raxol.demo # built-in demos (needs a terminal)
SKIP_TERMBOX2_TESTS=true を設定すると、実際のローカルターミナルが必要なテスト(pty のライフサイクルやタイミングに依存するテストスイート)が除外されます。CI でも同じ変数を設定しています。除外フラグを付けずに mix test を実行すると、外部サービスが必要な統合テストも実行されます(ワークフローのチェックポイントテストでは、RAXOL_WORKFLOW_PG_URL で指定した PostgreSQL が必要です)。そのため、外部サービスを用意していない場合は、上記のコマンドを使用してください。HOME が読み取り専用のサンドボックスでは、mix を実行する前に、書き込み可能なディレクトリーを MIX_HOME と HEX_HOME に指定してください。
起源
Raxol は、融合する 2 つのアイデアから始まりました。1 つは、AI エージェントが人間と同じように実際のターミナルエミュレーターを操作する、AGI のためのターミナルです。もう 1 つは、Gundam Wing Suit のコックピットのインターフェースです。そこでは、障害の切り分け、リアルタイムの応答性、センサーフュージョンが生存に直結します。Gundam の話は冗談のように聞こえます。しかし、制約を見てみると、まさに OTP が実現するために作られたものです。停止できず、状態を失うことができず、稼働中にコンポーネントをホットスワップしなければならないシステムです。
構想の全体像については、Raxol: The Terminal For My Gundamをご覧ください。
Raxol で構築
Xochi は、プライベートなクロスチェーン DEX(6 つのチェーンをまたぐインテントベースのスワップ、3 秒未満の決済、デフォルトでステルスアドレスを使用、ZKSAR 準拠証明)であり、取引画面全体が raxol で構築されています。1 つのコンポーネントツリーから、SSH トレーダーターミナル、LiveView Web UI、Riddler の 2 ミリ秒未満のソルバー向けソルバーエージェント画面、ソルバーの健全性をセンサーフュージョンで監視する運用コックピットの 4 つの画面を提供します。ソルバーは、専用のフェイルクローズ型スタック(買い手が事前署名したインテント、台帳で強制される支出制限、未設定のまま実行されるのを拒否するデプロイガード)を介して実行され、このスタックは意図的に MCP の対象外とされています。そのため、資金を移動する操作が汎用ツール呼び出しから到達可能になることはありません。
Brendan Turner による foglet-bbs は、SSH 専用のレトロな電子掲示板(bbs.foglet.io、ssh bbs.foglet.io)で、raxol の SSH 対応を徹底的にストレステストして完成度を高めました。
ライセンス
MIT です。LICENSE.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。