Brain Canvas — LLM用インタラクティブ表示ツール
概要
brain-canvasは、任意のLLMに「自分専用のディスプレイ」を与えることを目的としたシンプルで軽量なツールです。LLMがJSONを出力すると、それを受け取ってHTMLのCanvas上に視覚的でクリック可能なUIを生成します。ユーザーの操作(クリックなど)は再びモデルへ返され、モデルとユーザーの間でインタラクティブなループが成立します。依存関係がなくパッケージサイズも小さいため、素早く試作・検証したい場面に適しています。
リポジトリの統計情報
- スター数: 5
- フォーク数: 0
- ウォッチャー数: 5
- コミット数: 4
- ファイル数: 5
- メインの言語: JavaScript
主な特徴
- LLMからのJSON出力を受けてCanvas上に即座にUIを描画するJSON駆動のレンダラー
- 依存関係ゼロ、パッケージサイズ約6.9KBで軽量かつ即導入可能
- ユーザーのクリックなどの操作をLLMに返す双方向ループをサポート
- CLIからnpxで起動可能(手軽な試作・デモ向け)
技術的なポイント
brain-canvasの核は「JSONで定義されたUIをCanvasで描画する」アプローチです。READMEにある通り10種類のセクションタイプをサポートしており、LLMはあらかじめ決められたスキーマに沿ってJSONを返すことで、テキスト表示、選択肢、グラフィック要素などをCanvas上に配置できます。ライブラリ自体は依存関係を持たず、約191行のコードで実装されているため解析や拡張が容易です。
実装面では、Canvasの描画ループとイベントリスナーを用いてクリック検出/ホバー検出を行い、その結果をLLMに返すインタラクティブなサイクルを形成します。LLM側との通信手段(README上では省略されている)はプロジェクトの利用方法次第で、標準出力経由のJSON、WebSocket、あるいはHTTP APIなどにマッピング可能です。binディレクトリにCLIエントリが含まれているため、npxコマンドでローカルプロセスを立ち上げ、ブラウザで表示する仕組みを想定できます。
拡張性としては、セクションタイプを増やしたり、Canvasのレンダリング層にWebGLやSVGを組み合わせたりすることで表現力を高められます。また、プロンプトエンジニアリング次第でLLMに高度なレイアウト指示や状態管理を任せ、クライアント側は描画とイベント伝搬に専念するという役割分担が可能です。一方で、セキュリティや同期性の扱い(ユーザー操作とモデル応答の一貫性確保)、アクセシビリティ(スクリーンリーダー対応など)は追加実装が必要になる点に留意してください。
プロジェクトの構成
主要なファイルとディレクトリ:
- .claude: dir
- .gitignore: file
- README.md: file
- bin: dir
- package.json: file
まとめ
LLM駆動のインタラクティブUIを手早く試せる、軽量で拡張性の高いツールです。
リポジトリ情報:
- 名前: brain-canvas
- 説明: Give any LLM its own display. Send JSON, get beautiful interactive UI.
- スター数: 5
- 言語: JavaScript
- URL: https://github.com/mordechaipotash/brain-canvas
- オーナー: mordechaipotash
- アバター: https://avatars.githubusercontent.com/u/25459953?v=4
READMEの抜粋:
brain-canvas
Give any LLM its own display.
npx brain-canvas
The Numbers
| What | Count |
|---|---|
| Lines of code | 191 |
| Dependencies | 0 |
| Package size | 6.9 KB |
| Section types | 10 |
| Time to install | 3 seconds |
What is this?
A live HTML canvas that any LLM can control. Send JSON, get beautiful interactive UI.
The loop:
LLM sends JSON → Canvas renders → User clicks → LLM receives choice → Repeat
Quick Start
# Start the canva...