vibeshare-live について
vibeshare-liveはURLでターミナルセッションをリアルタイム共有し、読み取り専用の視聴とホスト承認制の参加申請に対応します。エージェントCLI、シェル、TUIのセッションを見せたい開発者向けで、共有はローカルで実行され、同意記録で管理されます。
主な機能
- 01URLによるターミナルセッション共有
- 02読み取り専用の視聴と参加申請
- 03ホストによるコラボレーター承認
- 04コマンド起動またはtmux経由の接続
- 05ローカルの同意記録とアクセス制御
活用シーン
- 01ライブのエージェントセッションを見せる
- 02視聴者からの共同作業申請を受け付ける
- 03実行中のコマンドをチームで共有する
MCP 対応
MCPサーバーは`vibeshare_create`、`vibeshare_viewers`、`vibeshare_stop`ツールを公開します。エージェントは共有を作成・管理できますが、参加申請の承認はCLIから人が行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | いいえ | 表示名の上書き値。 |
| access | enum | いいえ | デフォルトは spectate(読み取り専用)です。spectate | invite |
| expiry | string | いいえ | 1h、24h、7d、……または "stop"(デフォルト)。 |
| session | string | いいえ | 共有内容のラベル(例:エージェントやタスク)。 |
| passphrase | string | いいえ | 閲覧者が入力する必要のある任意のパスフレーズ。 |
詳細
vibeshare
ライブのエージェントコーディングセッションを URL で共有できます。traces.com のようなオープンソースの CLI ファーストツールです。閲覧者は読み取り専用で視聴でき、招待リンクでは参加リクエストを送って共同作業者になれます(ホストがその場で承認します)。
Vibe Suite の一部です。エージェント型コーディング CLI(Claude Code、Codex、Gemini、Grok/pi、Kimi)向けのコンパニオンツールです。@pooriaarab/vibe-core(同意台帳、フックバス、バッジ)を基盤とし、CLI + npm パッケージ + MCP サーバーとして提供されます。
ローカルファースト:共有セッションはお使いのマシン上で実行されます。 同意台帳がすべての共有を制御し(share:session スコープ)、ストリームはホストから直接配信されます。サーバーには何も保存されません。
あらゆるハーネスで動作
vibeshare はライブのターミナルセッションを共有します。PTY をラップするため、内部で動作するプログラムは問いません。エージェント CLI、シェル、TUI のいずれも、ブラウザー上の xterm.js で忠実に表示されます(色、カーソル、全画面表示)。
セッションを共有する 2 つの方法:
- 起動時にラップ(tmux 不要):
vibeshare --public -- <harness>— vibeshare が親プロセスとなり、PTY でキャプチャします。例:vibeshare --public -- claude、-- codex、-- gemini、-- aider、-- opencode、-- kimi、-- amp、または任意のシェル/コマンド。 - 実行中のセッションに接続(tmux が必要): tmux 内でハーネスを実行し、
vibeshare attach <pane>を実行するとライブで接続します。ハーネスに依存せず、アプリではなくターミナルをキャプチャします。
動作確認済みのハーネス(すべて実際の TUI をライブ表示します):Claude Code(claude)、OpenAI Codex(codex)、Gemini CLI(gemini)、aider(pip install aider-chat が必要)、opencode、Moonshot Kimi(kimi)、pi(grok/glm)、Sourcegraph amp(独自の PATH 設定が必要)。その他(Continue、Goose、Crush、Qwen、Cursor Agent、Warp、Zed、…)も同様にラップできます。これらは通常のターミナルプログラムです。
| 必要な操作 | コマンド |
|---|---|
| 新しい claude セッションを共有 | vibeshare --public -- claude |
| 実行中のセッションを共有 | tmux 内で実行 + vibeshare attach <pane> |
| ローカルのみで共有 | vibeshare -- <cmd> |
モード: --public(getvibe.dev 経由の WebRTC P2P + エンドツーエンド)、--tunnel <provider>(12 プロバイダー、エンドツーエンド)、またはローカルループバック/LAN。プレゼンスと発言者が分かるチャットも含まれます。
デモ
▶ ローンチ動画を見る — claude がマルチプレイヤーになりました。
https://github.com/pooriaarab/vibeshare/raw/main/branding/launch-video.mp4
インストールとビルド
npm install
npm run build # tsup → dist/ (cli.js, index.js, mcp.js + types)
npm run typecheck # tsc --noEmit
npm test # vitest
CLI
vibeshare # share your shell, spectate read-only
vibeshare --invite --expire 1h # viewers may request to join; auto-expires
vibeshare --pass hunter2 # passphrase second factor
vibeshare -- npm test # share a specific command
vibeshare --host 0.0.0.0 # share on your LAN (default: loopback only)
vibeshare viewers # who's watching, pending join requests
vibeshare viewers --approve <id> # promote a viewer to collaborator
vibeshare viewers --kick <id> # remove a viewer, live
vibeshare stop # end the share (works from another terminal)
vibeshare を実行するとリンクが表示されます:
● local · no data out
sharing: npm test
url: http://127.0.0.1:50613/s/KKxzdjLpr_km
access: spectate (read-only)
expires: until you stop
manage: vibeshare viewers · vibeshare stop
URL を開くと、自己完結型の視聴者ページが表示されます(閲覧者はインストール不要)。セッションは SSE 経由でライブ配信され、招待リンクには「参加をリクエスト」ボタンが表示されます。初回実行時には同意を求められます(スキップするには --yes を指定)。許可内容は ~/.vibeshare/consent.json にローカル保存され、いつでも取り消せます。
読み取り専用は実際に徹底されています。閲覧者が書き込めるルートはありません。ホストが正式なサーバーであり、共同作業者への昇格は、ホストが承認したリクエストを通じてのみ行われます(ViewerRegistry.canWrite() が唯一のゲートです)。
安定した接続(TURN)
--public での共有は、デフォルトでは STUN のみを使ったピアツーピア接続です(無料、インフラ不要)。これはほとんどの NAT 環境で動作します。閲覧者が対称 NAT や隔離されたネットワークの背後にいて、「ホストを待機中」のままになる場合は、TURN リレーを追加してください。ICE 設定はホストで指定され、シグナリング経由で閲覧者に自動的に伝播されるため、両端でリレーを使用できます。
優先順位は上から順です:
--ice-servers '<json>'CLI フラグ — RTCIceServer オブジェクトの JSON 配列VIBESHARE_ICE_SERVERS環境変数(同じ JSON)~/.vibeshare/config.json→"iceServers"キー- デフォルト:
[{ "urls": "stun:stun.l.google.com:19302" }](STUN のみ)
// ~/.vibeshare/config.json — self-hosted coturn, or a provider
// (metered.ca, Twilio, Cloudflare Calls TURN, …)
{
"iceServers": [
{ "urls": "stun:stun.l.google.com:19302" },
{
"urls": "turn:turn.example.com:3478",
"username": "vibeshare",
"credential": "long-lived-or-temporary-secret"
}
]
}
認証情報はホスト自身のものです(慣例として有効期間の短いトークンを使用します)。シグナリングチャネルを通じて閲覧者に送られ、ブラウザーがリレーに接続できるようになります。不正なフラグ/環境変数の JSON は報告されてスキップされ、次のソースへフォールバックします。共有が中断されることはありません。
npm ライブラリ
import { createShare, grantConsent } from 'vibeshare';
grantConsent('share from my tool'); // once; local ledger
const { url, feed, viewers, revoke } = await createShare({
session: 'npm test',
access: 'spectate', // or 'invite'
expiry: '1h', // or 'stop'
});
feed.publish('tests starting…');
viewers.on('request', (v) => viewers.approve(v.id));
await revoke();
share:session の許可がない場合、createShare は ConsentRequiredError をスローします。ShareManager、LocalHttpTransport、FileConsentStore を使って、必要な処理をご自身で用意してください。
MCP サーバー
{
"mcpServers": {
"vibeshare": { "command": "vibeshare-mcp" }
}
}
ツール:vibeshare_create、vibeshare_viewers、vibeshare_stop — エージェントは「このセッションを共有しますか?」と提案できます。MCP クライアントのツール承認プロンプトが同意行為となり、その内容はメモとともに記録されます。参加リクエストの承認は引き続き人間のみが行い、CLI を使用します。
アーキテクチャと vibelive との接点
vibeshare が担うのはリンクとゲートです。セッションの内容は、順序付きフィードとして観覧者に配信されます。意図的に設けられた接点は、トランスポート(src/transport.ts)の 1 つだけです。
LocalHttpTransport(実装済み、デフォルト):観覧者ページ、SSE ストリーム、ループバックのホスト制御 API を、ユーザーのマシンから配信します。サーバーには何も保存されません。RelayTransport(vibelive とともに導入予定):公開vibeshare.ioURL を提供する、単純な E2E リレー/P2P メッシュです。同じShareTransportインターフェースを使用し、差し替えのみで利用できます。共同作業者からの入力ルーティングもこの接点の一部であり、ViewerRegistry.canWrite()を通過する必要があります。
それ以外のすべて — 同意、アクセス制御、パスフレーズゲート、有効期限切れ時のティアダウン、観覧者レジストリ、アクセス取り消し — は実装済みで、テストも完了しています。
プロトタイプ
元の UX プロトタイプ(ビルドなし、ネットワークなし)は、docs/prototype.html を開いてください。仕様書:docs/spec.md。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。