私はふだん、いくつもの AI コーディングセッションを同時に開いたままにしています。機能を書く Claude Code セッション、レビューをする Codex セッション、そしてさまざまなタスクを実行する Pi セッションです。それぞれは単体でもかなり有能です。問題は、これらが**互いを見られない**ことです。Claude が書いたばかりの diff を Codex に見てもらいたいとき、私は自分でそれをコピーし、ウィンドウを切り替え、ペーストし、さらに返答を持ち帰らなければなりません。つまり、人間が 2 つの AI の間のクリップボードになってしまうのです。
Claude Code と Codex には、どちらにも実はネイティブのクロスセッション機能があります。しかし、それらはそれぞれの製品の内部でしか動かず、製品の境界で止まってしまいます。そこで私は ocs (Open Cross-session) を作りました。これは、Claude Code、Codex、Pi、そしてターミナルエージェントが互いにメッセージを送り、互いを起こせるようにする単一ファイルのバイナリです。サーバーも、アカウントも不要で、すべてのデータはローカルの ~/.ocs に残ります。
実際に使うとどう見えるか
インストール後は、どのセッションにも「これを見るのを手伝ってくれるエージェントを探して」と言えば、自分で相棒を探しに行きます。手動で使うのも簡単です。
ocs who # このマシンで<ruby>動作中<rt>どうさちゅう</rt></ruby>のセッションはどれか
ocs dm codex-01a06a98 "Help me review this diff" # Codex に<ruby>送<rt>おく</rt></ruby>って<ruby>起<rt>お</rt></ruby>こす
ocs rename reviewer # <ruby>現在<rt>げんざい</rt></ruby>のセッションに<ruby>覚<rt>おぼ</rt></ruby>えやすい<ruby>名前<rt>なまえ</rt></ruby>を<ruby>付<rt>つ</rt></ruby>ける
ocs send dev "How’s progress? @reviewer" # <ruby>複数参加<rt>ふくすうさんか</rt></ruby>のチャンネル。@ された<ruby>相手<rt>あいて</rt></ruby>が<ruby>起<rt>お</rt></ruby>こされる
相手側が受け取るのは「ファイルにもう1行追加された」ものではなく、セッションの中に直接現れるメッセージで、最後にはそのまま使える返信コマンドが付いています。
[ocs wakeup] claude-7043ea85 mentioned you in #dm-… (seq 7)
Help me review this diff
Reply: ocs dm claude-7043ea85 "<your reply>"
Thread: ocs read dm-…
その返信コマンドに従うと、こちら側が起こされます。2つのエージェントはこのように行ったり来たりチャットでき、あなたは ocs watch で横から見守れます。
0.6: コンピューター間で
最新の 0.6 では、これがローカルネットワークまで拡張されました。私の家には Mac と Windows マシンが 1 台ずつあり、いまでは Mac 上の Claude が、Windows マシン上の Claude や Codex に「Windows でビルドを実行して」を直接引き渡せます。
# Machine A # Machine B
ocs lan up ocs lan up
ocs lan pair # pairing code を表示 → ocs lan pair 7K2M-9QXD-…
ocs dm claude-1a2b3c4d@mini "Help me run the build on Windows"
見知らぬマシンがあなたの AI セッションにメッセージを注入できるようにするということは、セキュリティを最初から考慮する必要があるということです。そのため、この部分は「ローカルネットワーク上に悪意ある存在がいるかもしれない」という前提で設計されています。
- 同一性は公開鍵だけに基づく: それぞれのマシンは Ed25519 鍵を 1 つ持ちます。IP アドレス、マシン名、相手が自称する名前は、ヒントとしてしか扱われません。
- 「初回使用時に信頼」はせず、1 度だけペアリングする: ペアリングコードには、発行者の公開鍵フィンガープリントのプレフィックスが含まれます。接続後、まずピアの公開鍵がチェックされ、それに通ってからはじめて、そのマシンは自身の同一性とリクエストを送ります。
- 相互認証と暗号化を全体で行う: 署名付き X25519 ハンドシェイク + AES-256-GCM、さらに前方秘匿性つきです。
- ペアリングされていないマシンは何もできない: 有効なペアリングコードを引き換えることを除き、ほかのリクエストはすべて拒否され、フレームサイズでさえ 1 KiB に制限されます。ペアリングコードは 5 回間違えると無効化されます。
- デフォルトではオフ:
ocs lan upを実行したときだけ起動します。リモートマシンからのメッセージは、常にローカルではname@the-label-you-gave-itとして表示され、このラベルは相手側からは変更できません。
落とし穴: 「成功」は配達されたことを意味しない
メッセージングシステムを作るとき、もっとも危険なのはエラーではありません。実際にはメッセージを失っているのに、成功したように見えることです。ocs のいくつかの厳格なルールは、まさにここから生まれました。
1. Claude が ok を返しても、メッセージが会話に入ったとは限りません。 Claude Code セッションにメッセージを注入すると、ソケットは ok:true を返します。しかし Claude の crossSessionInbound はデフォルトで hold です。つまりメッセージはレビューキューに入り、誰も処理しなければ 5 分後に無言で破棄されます。そのため ocs は、この ok を「配達済み」とは扱いません。ocs doctor はこの設定をチェックし、accept に変更するよう案内します。
2. codex queue はストレージに書き込むだけで、配達ではありません。 Terminal Codex は公式の codex queue 経由でしかメッセージを受け取れませんが、それはメッセージをスレッドストレージに書き込むだけです。対象セッションがずっと前に終了していても、成功を返します。ocs は送信前に、まずセッションが生きていることを証明します。そのロールアウトファイルを保持しているプロセスを lsof で見つけます。後になって、インデックス関連の一部のサードパーティプロセスもこれらのファイルを保持できることが分かったため、もう一つの身元確認を追加しました。保持者自身、またはその祖先プロセスのどれかが実際に codex でなければ、オフラインとして扱われ、メッセージはオンラインになるまで inbox に残ります。
3. 結果が不明なら、絶対に再送しません。 ChatGPT Desktop との通信は、そのプライベート IPC を通ります。フレームがすでに書き込まれたのに応答が届かない場合、メッセージは届いたかもしれませんし、届いていないかもしれません。その時点で再送すると、最悪のケースでは、相手側が同一の指示を 2 回受け取り、作業を 2 回実行します。ocs は「結果不明」を一級の状態として扱い、別に報告します(終了コード 3)。自動で再試行することは決してなく、判断は人間、または上位レイヤーに委ねます。
4. シーケンス番号の信頼できる唯一の情報源は、必ず 1 つだけでなければなりません。 各メッセージには、単調増加する seq があります。初期バージョンでは「現在の seq」を別ファイルに保存していました。その後、「ログ書き込み完了」と「seq ファイルはまだ更新されていない」の間にクラッシュが 1 回発生し、再起動後に重複した seq が送られました。リーダーは seq で重複排除したため、後続のメッセージが永久に隠されてしまいました。現在では、seq はロック下でログ末尾を読み取ることにより、ログそのものだけから導出されます。そしてこの問題はリグレッションテストで固定されています。
これらの落とし穴は、それぞれ単独では難しくありません。難しいのは、それらがすべて通常のテストを通ってしまうことです。
インストール
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/leeguooooo/open-cross-session/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/leeguooooo/open-cross-session/main/install.ps1 | iex
インストーラーは、Claude Code、Codex、Pi 向けの ocs スキルもインストールします。インストール後、ヘルスチェックのために ocs doctor --fix を 1 回実行してください。macOS、Linux、Windows をサポートしており、MIT のもとでオープンソースとして公開されています。
あなたのユースケースが 1 つのローカルネットワークを超える場合——異なるネットワーク、チームでの共同作業、または組織間の作業——でも、同じ利用モデルを Agent Party に移せます。Agent Party はホスト型とプライベートデプロイの両方をサポートしています。
- GitHub: leeguooooo/open-cross-session
- プロトコルと脅威モデル: docs/lan.md
質問やアイデアがあれば、GitHub で issue を開くか、下にコメントを残してください。
著者: Guo Li (leeguoo)、フルスタックエンジニア。最近は、AI エージェントが実際に仕事を完了できるよう支援する一連のツールを構築しています: chrome-use、iphone-use、mail-use など。

微信
支付宝
コメント
コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。