すべてのページ
このページの内容

会話の共有

共有を使うと、会話に公開の読み取り専用リンクが付きます。リンクを送った相手は、サインインせずにブラウザーでトランスクリプトを読め、会話の進行もそのまま追えます。送信、停止、変更をしたり、リレー上のほかのものを開いたりすることはできません。リンクに何を表示するかは自分で決められます。個々のメッセージを隠すことができ、リレーのホストのパスは伏せられます。自分には常に会話全体が表示され、Settings → Sharing(設定 → 共有)にはすべてのリンクが、誰が開いたかのログ付きで一覧になります。

リンクは公開されます

アドレスを知っている人は誰でも共有されたトランスクリプトを読め、アドレスはほかの人に渡すこともできます。リレーは開いた人が誰かを確認しません。その会話 1 つ分のパスワードと同じように扱い、送る前に Preview as shared(共有時の表示を確認)で会話を読んでください。

リンクの作成 #

  1. 会話を開きます。
  2. その ⋯ メニューを開き、➡️ Share conversation(会話を共有)を選びます。

ダイアログは出ません。リレーがリンクを作成してクリップボードにコピーし、そのことを短い通知で知らせます。

Share link copied to clipboard.

ブラウザーがページによるクリップボードへの書き込みを許可しない場合は、代わりに通知にアドレスそのものが表示されるので、そこからコピーします。

アドレスは https://relay.example.com/shared/ の後に長いランダムなトークン(16 進数 64 文字)が続く形です。ホストはリレーへの接続に使ったものです。別のマシン上のプロキシの背後では、リレーがそのプロキシを信頼していれば、プロキシが報告するホストになります。リレーがサブパス(config.json の remotePath)の下で提供されている場合は、サブパスもアドレスに含まれます。

➡️ Share conversation をもう一度選んでも 2 つ目のリンクはできません。会話に有効なリンクがある間は、同じアドレスが返ってきます。どの会話も共有でき、アーカイブ済みの会話も共有できます。

共有中のリンク 0.9.11 で追加 #

Settings → Sharing には、現在リンクを持つすべての会話が一覧になり、共有した日時(と更新した日時)、最後に開かれた日時、開かれた回数と閲覧者の数が表示されます。タイトルをクリックすると会話が開きます。各行には次のものがあります。

ボタン 動作
Copy link(リンクをコピー) リンクをコピーします。
Renew link(リンクを更新) 確認の後、会話に新しいリンクを付けてコピーします。古いリンクはすぐに使えなくなります。アクセスログは新しいリンクに引き継がれます。リンクが想定より広く出回ったときに使います。
Stop sharing(共有を停止) 確認の後、リンクを終了します。リンクはすぐに使えなくなり、今まさに読んでいる人にも同じです。アクセスログは削除されます。
Access log(アクセスログ) リンクのアクセスログを展開します。

開いている会話が共有中のときは、その ⋯ メニューにも ⛔ Stop sharing があり、こちらも先に確認を求めます。

停止または更新した後 #

停止したリンクや更新前のリンクは、ページもデータも、ただの 404 を返します。一度も存在しなかったリンクとまったく同じです。そのリンクで開いたままの共有ページは、次の再読み込みで止まります。これは約 1 秒以内です。停止した後にもう一度 ➡️ Share conversation を選ぶと、新しいトークンで新しいリンクが作成されます。古いアドレスが戻ってくることはありません。

同じ操作はアプリを使わずに、認証トークン(アクセス)をヘッダーに付けて行うこともできます。たとえばスクリプトから共有を停止するには次のようにします。

curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
  https://relay.example.com/api/conversation/CONVERSATION_ID/share

同じアドレスへの POST でリンクを作成し、POST …/share/renew で更新し、GET /api/shares で一覧を取得します。

アクセスログ #

一覧の各行を展開すると、そのアクセスログが新しい順に表示されます。1 件のエントリは共有ページを 1 回開いたことを表し、再読み込みのたびには記録されません。ページは約 1 秒ごとに会話を再読み込みしますが、数えるのは最初の読み込みだけです。同じ閲覧者が 10 秒以内にもう一度読み込んでも 1 回と数えます。読まずに 30 分たってから戻ってきた閲覧者は、もう一度数えます。たとえばバックグラウンドのタブでスリープしていたページです。ページを使わずにリンクを読み取るスクリプトも同じように数えるので、エントリを残さずにリンクを読むことは誰にもできません。

エントリの項目 由来
時刻 ページが開かれた時刻です。
IP アドレス リレーから見た閲覧者のアドレスです。プロキシの背後では、リレーがそのプロキシを信頼していればプロキシが報告するアドレスになり、そうでなければすべての閲覧者がプロキシのアドレスになります。Store viewer IP addresses(閲覧者の IP アドレスを保存)がオフだったときは IP not stored(IP は保存されていません)と表示されます。
国 Cloudflare トンネルが付加する国コードで、信頼されたプロキシからのものだけを使います。それ以外では空です。
viewer … アドレスとブラウザーから作る短い鍵付きハッシュです。同じ閲覧者が開くたびに同じ値になり、アドレスを保存していないときも同じです。
ブラウザー 閲覧者のブラウザーが送ったユーザーエージェントを、テキストのまま表示します。

一覧には新しい順に 200 回分が表示され、全部で何回あるかも示されます。

ログはリンクを更新しても引き継がれます。リンクが共有されている間は保持され、共有を停止するか会話を削除すると削除されます。

Access log の下にある Store viewer IP addresses(既定でオン)は、新しいエントリにアドレスを残すかどうかを決めます。オフにすると、新しいエントリにはアドレスが残らず、共有の読み取りについてのリレー自身のログ行にも残りません。すでにアドレスが保存されている場合、OAR はそれも削除するかを尋ねます。Remove them(削除する)はすべてのアクセスログのエントリと、共有の読み取りのステータスログからアドレスを消し、エントリそのものは残ります。Keep them(残す)はそのままにします。この設定はリレーのすべてのリンクに適用されます。

Paths and file names(パスとファイル名) 0.9.11 で追加 #

共有ビューには、リレーのホストのパスがそのままの形では載りません。リレーはリンクに提供するすべての内容を、Settings → Sharing の Paths and file names の設定に従って伏せます。

選択肢 /srv/projects/shop/src/cart.js について閲覧者に見えるもの
Show every path and file name(すべてのパスとファイル名を表示) パスがそのまま
Hide the path, show the file name(パスを隠してファイル名を表示)(既定) cart.js
Hide paths and file names(パスとファイル名を隠す) ‹hidden›

この設定はリレーのすべてのリンクに、共有ページの次の再読み込みから適用されます。自分の表示には常にすべてが表示されます。

フィルターが捉えるもの:

  • 常に: ツールの引数に含まれるパス、ファイルの指定(@file:、@folder:、相対的なものも含む)、添付ファイルの名前、サブエージェントの記録、差分のファイルヘッダー。
  • 自由なテキストの中では、 つまり返信、思考、ツールの出力、コードブロックでは:リレーが把握しているフォルダー(会話の作業フォルダー、ワークスペースのルート、ホームフォルダー、リレー自身のデータフォルダーとアップロードフォルダー)とその後に続く部分、Windows と Unix の絶対パス、~/… のパス、区切り文字に挟まれたユーザー名。これはベストエフォートです。
  • 捉えないもの: 自由なテキスト中の相対パス(src/cart.js)、/tmp のような 1 階層だけのパス、Web アドレス、画像の中にあるもの。

Preview as shared(共有時の表示を確認) #

会話の ⋯ メニューにある 🔍 Preview as shared は、リンクを作成せず、どのアクセスログにもエントリを残さずに、リンクでの表示どおりに会話を開きます。緑の印は、パスの代わりに閲覧者に表示されるものを示します。琥珀色の印は、まだパスのように見えるものを示します。ファイル拡張子付きの相対パス、home/… や Users/… の部分、単語としてのユーザー名、そして Show every path and file name のときはすべての絶対パスです。琥珀色の印を読み、必要以上の情報を明かしているメッセージは隠してください。

アーカイブ、削除、コンパクト化したとき #

  • Archive(アーカイブ)を実行してもリンクは終了しません。アーカイブした会話もリンクから読めたままで、アーカイブを解除しても何も変わりません。
  • Delete(削除)を実行するとリンクは終了し、アクセスログも削除されます。リンクは 404 を返します。
  • コンパクト化(会話のコンパクト化を参照)は、会話をアーカイブして新しい会話で続けます。リンクは古いアーカイブ済みの会話に残り、それまでと同じ内容を表示し続けます。新しい会話にはリンクがないので、自分で共有するまでは共有されません。

アーカイブと削除については会話リストを参照してください。

閲覧者に見えるもの #

リンクを開くと、サイドバーと入力欄のない通常のチャットのレイアウトで会話が表示されます。タイトルは会話のタイトルです。

会話の部分 共有ビューでの扱い
自分のメッセージと返信 表示されます。パスは伏せられます。
ツールのアクティビティ行と思考 表示されます。パスは伏せられます。
添付ファイルと画像 エージェントが生成した画像も含めて、伏せた名前で表示されます。閲覧者は、自分に見えているメッセージに付いたものを開けます。
サブエージェントの行 表示されます。0.9.11 で追加 行を開くとサブエージェントの記録が読み取り専用で開きます。Stop(停止)はなく、ほかと同じようにパスが伏せられます。
プレビューのカード ラベルだけが表示され、リンクは表示されません。テキストのどこかに引用されたプレビューのリンクは [preview link removed] と表示されます。共有された会話は、プレビューしているアプリを公開しません。
リレーイベントの行(セッションの監視によるもの) イベントの行として表示されます。テキストには監視対象のセッションの名前が入ります。
別のリレーから届いたメッセージ バッジ付きで表示されます。そのリレーのアドレスと相手の会話の id は取り除かれ、リレーの名前、相手の会話のタイトル、プロバイダー、モデルは残ります。
質問カードとプランボード 表示されません。閲覧者が受け取るデータに含まれないため、閲覧者にはエージェントがその前後に書いた内容だけが見えます。
メッセージのテキスト中にある、リレー上のファイルを指す画像とファイルリンク 閲覧者には読み込まれません。それらのファイルにはオーナーのサインインが必要です。
自分が隠したメッセージ まったく送信されません。
ピン留めしたメッセージと 🙈 の一覧 表示されません。オーナーだけのものです。
作業フォルダー、セッション、ランタイムの詳細 送信されません。
検索、コンテキストボタン、モデルとモードの選択欄、全画面表示、アプリのインストール 使えません。

ページが読み込むデータには、各メッセージに使われたモデルも含まれます。共有ページは検索エンジンにインデックスしないよう求めます。

ライブ更新 #

共有ページは、前面に表示されている間 0.9 秒ごとに会話を再読み込みするので、会話が進むと新しいメッセージが表示されます。リレーへのライブ接続は開かず、バックグラウンドのタブにあるページは再読み込みしません。上にスクロールして読んでいる閲覧者が末尾に引き戻されることはありません。

閲覧中の人数 #

開いている共有ページは、それぞれ 12 秒ごとにリレーへ存在を知らせます。何人が読んでいるかは、自分の表示で会話のタイトルのツールチップとして表示されます。たとえば 2 watchers currently reading this conversation です。この表示は、少なくとも 1 人が読んでいる間だけ現れます。45 秒間応答のない閲覧者は数から外れます。

個々のメッセージを隠す #

自分の表示では、各メッセージに Hide(非表示)ボタンがあり、メッセージにポインターを重ねると表示されます(タッチ画面ではメッセージをタップします)。押すとメッセージが共有ビューから外れます。削除はされません。メッセージは 1 件ずつ隠れます。自分の質問を隠してもそれへの返信は隠れず、その逆も同じです。返信のツールのアクティビティと思考は返信と一緒に扱われます。

  • 自分の表示ではメッセージはそのまま残り、Hidden from shared viewers(共有の閲覧者には非表示)と示されます。ボタンは Unhide(再表示)に変わり、押すとメッセージは再び閲覧者に見えるようになります。
  • 閲覧者には、その場所に何も表示されません。メッセージはトランスクリプトから単に消えています。隠したメッセージの添付ファイルもリンクから取得できません。ただし、同じファイルが表示されているメッセージに添付されている場合は別です。
  • 変更のたびに通知で確認が表示されます:Message hidden from shared viewers. または Message visible to shared viewers.
  • まだキューに入っているメッセージや、実行中のターンのメッセージには Hide は表示されません。ターンの後に隠してください。

隠したメッセージは、後から作成する新しいリンクも含めて、会話のすべてのリンクで隠れます。この印はリレーを再起動しても残ります。

🙈 の一覧 0.9.11 で追加 #

会話に隠したメッセージがある間、ヘッダーの 📍 の横に、その件数付きの 🙈 ボタンが表示されます(共有ビューには表示されません)。ピン留めしたメッセージと同じように、隠したメッセージの一覧が開きます。

  • 行を押すとそのメッセージへ移動します。履歴のずっと上にあるメッセージでも移動でき、行には Unhide があります。
  • Unhide all(すべて再表示)は先に確認を求めます。ターンがまだ実行中のメッセージは隠れたままで、一覧にその名前が示されます。
  • 件数と一覧はまだ読み込まれていないメッセージも対象にし、ほかのタブやデバイスも再読み込みなしで変更に追従します。

閲覧者にできること #

共有ビューの ⋯ メニューには、☀️ Day mode(Day モード)または 🌙 Night mode(Night モード)の 1 項目だけがあり、その閲覧者のページのテーマを切り替えます。そのほかに閲覧者ができるのは、トランスクリプトのスクロール、以前のメッセージの読み込み、折りたたまれたアクティビティを開くこと、サブエージェントの記録を開くこと、添付ファイルを開くことです。入力欄は無効で、Shared conversation (read-only)(共有された会話、読み取り専用)と表示されます。閲覧者が何をしても会話は変わりません。

制限 #

会話ごとに同時に数える閲覧者の数 200(sharedPresenceMaxPerConversation)。
全体で同時に数える閲覧者の数 5000(sharedPresenceMaxGlobal)。
有効期限 ありません。リンクは、共有を停止するか、更新するか、会話を削除するまで使えます。

どちらの上限も config.json にあります。上限に達すると、最も長くアイドル状態の閲覧者が数から外れ、新しい閲覧者の場所が空きます。上限が制限するのは数、つまり閲覧中の人数として表示される数だけです。トランスクリプトのリクエスト自体は上限を確認しないので、数に入らない閲覧者も読むことはできます。

リレーへの接続 #

共有ページとその画像は、oar.sh やほかのサービスではなく、自分のリレーが提供します。閲覧者は、自分のいる場所からリレーのアドレスに接続できる必要があります。自分のマシンでだけ待ち受けているリレー(localhostOnly)は、ほかの人には開けません。自分のネットワークの外に共有するには、トンネルを通してリレーに接続できるようにします。

トンネルにアクセスルールがある場合は、共有リンクにも適用されます。ホスト名の上に Cloudflare Access のアプリケーションがあると、閲覧者はサインインを求められ、リンクは閲覧者には使えません。ただし、そのアプリケーションが /shared/* と /api/shared/* をログインなしで通す場合は別です。/api/shared/* にキャッシュルールを設定することも避けてください。ページは会話を追うためにそのアドレスを再読み込みするので、キャッシュされた応答があると古い状態が表示され続けます。

プロバイダー別 #

プロバイダーによる違いはありません。共有は保存された会話を読み取るので、GitHub Copilot、OpenAI、Claude、Claude Cloud、Cursor、Grok、DeepSeek のチャットでも、生成した画像がリンクを通して提供される OpenAI Image のチャットでも、同じように動作します。0.9.11 で追加 共有ビューで返信に赤い ran on …(実行環境)チップが付くのは、その返信が実際に会話本来のプロバイダーとは別のプロバイダーで実行されたときだけです。

うまくいかないとき #

表示される内容 原因と対処
リンクが 404 を返す 共有が停止された、リンクが更新された、または会話が削除されました。Settings → Sharing に使えるリンクが一覧になっています。
閲覧者がサインインを求められる、または古い状態が表示される リレーの前段にある Cloudflare Access かキャッシュルールが原因です。リレーへの接続を参照してください。
アクセスログのすべてのエントリが同じアドレスになる 別のマシン上にあるプロキシを、リレーが信頼していません。trustProxy を設定してください。
共有ビューにまだパスが表示される 相対パスか、画像の中にあります。Preview as shared で確認し、メッセージを隠してください。

閲覧者が読むトランスクリプトについては、トランスクリプトを参照してください。