From ccwire
CC間通信プロトコル。複数のClaude Codeセッション間でリアルタイムにメッセージをやり取りする。wire_register, wire_send, wire_receive等のMCPツールでセッション登録・メッセージ送受信を行う。
npx claudepluginhub chronista-club/claude-plugins --plugin ccwireThis skill uses the workspace's default tool permissions.
CC間通信プロトコル。複数のClaude Codeセッションが同一マシン上で並行稼働する環境で、セッション同士がメッセージを交換する仕組み。
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
CC間通信プロトコル。複数のClaude Codeセッションが同一マシン上で並行稼働する環境で、セッション同士がメッセージを交換する仕組み。
VP の HD(Heaven's Door)が tmux セッション作成時に ccwire DB へ直接登録する。 SessionStart hook は不要。TUI 終了時に自動で unregister される。
MCP の currentSessionName 同期のため、会話の最初に一度だけ wire_register(name="セッション名") を実行する。
環境変数でセッション名を指定し、手動で wire_register を実行する:
| 環境変数 | 必須 | 説明 |
|---|---|---|
CCWIRE_SESSION_NAME | Yes | セッション名 |
CCWIRE_TMUX_TARGET | No | tmux ターゲット |
SessionEnd フックで自動 unregister される。
wire_register(name="nexus-main")
wire_send(to="issue-2", content="認証モジュールのリファクタリングをお願い", type="task_request")
メッセージタイプ:
| type | 用途 |
|---|---|
task_request | タスク依頼(デフォルト) |
response | 返答・報告 |
status_update | ステータス変更通知 |
question | 質問・確認 |
health_ping | ヘルスチェック |
conflict_warning | コンフリクト警告 |
wire_receive(limit=10)
wire_receive(from="nexus-main", type="task_request")
from: 送信元セッション名でフィルタtype: メッセージタイプでフィルタbroadcast_cursor(タイムスタンプ)で既読管理wire_ack(message_id="msg-xxxx-xxxx")
wire_broadcast(content="全セッション: mainブランチを更新しました。pullしてください。")
wire_sessions()
wire_status(status="busy") # 自分のステータスを変更
wire_status() # 全体のステータス表示
ステータス値: idle(待機中), busy(作業中), done(完了)
wire_unregister(name="issue-2") # 指定セッションを解除
wire_unregister() # 自分自身を解除
wire_thread(message_id="msg-xxxx-xxxx")
reply_toチェーンを自動的に辿ってLinked Listとして再構成wire_control(session="issue-2", action="accept")
wire_control(session="issue-2", action="text", text="y")
enter: Enter キー送信accept: y + Enter(Permission prompt の承認)reject: n + Enter(拒否)interrupt: Ctrl+C(中断)text: テキスト入力 + Enter対象セッションに tmux_target が設定されている必要がある。
| ツール | パラメータ | 説明 |
|---|---|---|
wire_register | name, tmux_target? | セッション登録 |
wire_unregister | name? | セッション登録解除(省略時は自分自身) |
wire_send | to, content, type?, reply_to? | メッセージ送信 |
wire_receive | limit?, from?, type? | 未読メッセージ取得(フィルタ可) |
wire_broadcast | content | 全体ブロードキャスト |
wire_sessions | - | セッション一覧 |
wire_status | status? | ステータス更新/取得 |
wire_ack | message_id | 受信確認 |
wire_thread | message_id | スレッド全体を取得(reply_toチェーンを辿る) |
wire_control | session, action, text? | tmuxペインにキーストローク送信 |
{
"id": "msg-<uuid>",
"from": "nexus-main",
"to": "issue-2",
"type": "task_request",
"content": "メッセージ内容",
"timestamp": "2026-02-17T09:00:00Z",
"reply_to": null,
"status": "pending"
}
Session A (nexus-main):
wire_send(to="issue-2", content="REQ-AUTH-001の実装をお願い", type="task_request")
Session B (issue-2):
wire_receive() → タスクを受信
wire_ack(message_id="msg-xxx")
# ... 作業 ...
wire_send(to="nexus-main", content="REQ-AUTH-001完了しました", type="response", reply_to="msg-xxx")
Session A:
wire_broadcast(content="mainブランチを v2.0.0 にタグ付けしました")
Session B, C, D:
wire_receive() → ブロードキャストを受信
VP (HD) ──── register/heartbeat/unregister ────┐
▼
CC Session A ◄──► MCP tools ◄──► ccwire MCP Server ◄──► ~/.cache/ccwire/ccwire.db (SQLite WAL)
CC Session B ◄──► MCP tools ◄──► ccwire MCP Server ◄──► ↑
CC Session C ◄──► MCP tools ◄──► ccwire MCP Server ◄──────────┘
各 MCP サーバーは起動時に ~/.cache/ccwire/ ディレクトリを fs.watch で監視する。他セッションが DB にメッセージを書き込むと、ファイル変更を検知して自セッション宛の未配信メッセージを自動チェックし、tmux 経由で通知する。
ccwire.db および ccwire.db-wal(WAL モード対応)wire_receive のポーリング不要で、メッセージ到着をリアルタイムに検知ccwire MCPツールが使えない状況(相手がまだ未登録、プラグイン未導入等)では、tmux send-keys でCCの入力欄に直接テキストを送ることができる。
必須ルール: send-keys とEnter は必ず2回に分けて送る
# 正しい例: メッセージとEnterを別々のコマンドで送る
tmux send-keys -t cw:0.0 "メッセージ内容"
tmux send-keys -t cw:0.0 Enter
# 間違い: 1つのコマンドでメッセージとEnterを同時に送る
# → 入力が確定せずメッセージが届かない場合がある
tmux send-keys -t cw:0.0 "メッセージ内容" Enter
Enterがないとメッセージは入力欄に表示されるだけで、CCには送信されない。Enterでメッセージが到達する。 また、メッセージとEnterを同一コマンドで送ると入力が確定しないケースがあるため、必ず別コマンドに分けること。
必須ルール: Enter送信の5秒後に到達確認する
Enter を送った後、相手のセッションが実際に反応して進行しているか確認する。メッセージがスタックしている(入力欄に残ったまま未送信)場合は、再度 Enter のみを送る。
# 1. メッセージ送信
tmux send-keys -t cw:0.0 "メッセージ内容"
# 2. Enter送信
tmux send-keys -t cw:0.0 Enter
# 3. 5秒待機後に到達確認(sleep 5 → tmux capture-pane で確認、または wire_receive で返信確認)
ccwire MCPが使える場合は、tmux send-keys ではなく
wire_sendを使うこと。構造化された通信ができ、配信保証もある。
last_seen を自動更新し、heartbeat が途切れたセッションは自動削除wire_register 時に process.pid を記録。クリーンアップ時に PID 生存を確認し、プロセスが死んだセッションを即座に削除(tmux 非依存)