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

OAR が公開するもの、しないもの

このページでは、OAR が公開するものとしないものを 1 か所にまとめます。それぞれの事実の詳しい説明は別のページにあり、各セクションの最後にそのページへのリンクがあります。要点は次のとおりです。リレーはあなたとして動作し、アクセストークンはリレーを完全に制御する権限であり、あなたが作る一部のリンクは意図的に公開されます。

信頼モデル #

リレーはオペレーティングシステムのユーザーとして動作し、そのエージェントも同じユーザーとして、そのユーザーの権限で動作します。あなたがマシン上でできることは何でも、エージェントに頼めば実行されます。エージェントのシェルを制限するものはありません。エージェントは設定ファイル(つまりアクセストークン)、データベース(プロバイダーのキーとペアリングしたリレーのトークンを含む)、プロバイダーのログインファイルを読めます。アクセストークンはリレーを完全に制御する権限であり、したがってそのエージェントにできることすべてを制御できます。トークンを持つ人は、エージェントにホスト上でコマンドを実行させられます。OAR はこれらのエージェントに届く範囲を加えますが、サンドボックスは加えません。

唯一の例外は Claude Cloud です。そのエージェントは、あなたのマシンではなく、Anthropic のサンドボックス内で GitHub リポジトリのクローンを使って作業します(マシンの外に出るものを参照)。

エージェントが触れられるもの #

作業フォルダーはエージェントが作業する場所であり、壁ではありません。OAR が強制するものとしないものは次のとおりです。

OAR が強制するもの OAR が強制しないもの
workspaceRootAllowList は、会話を開始できるフォルダーと、Change CWD(作業フォルダーを変更)で移動できるフォルダーを制限します。未設定の場合は、存在するどのフォルダーも許可されます。 エージェントのシェルを作業フォルダー内に制限するものはありません。リレーのユーザーが読み書きできる場所ならどこでも読み書きできます。
リレーモードは、エージェントにどこまで自由に動いてよいかを伝えます。一部のプロバイダーはその一部を強制します。GitHub Copilot と OpenAI の SDK エンジンは、plan では読み取り専用でない操作をすべて拒否し、ask では先に確認を求めます。 Claude と 0.9.17 で追加 DeepSeek は、すべてのモードで、確認なしにすべてのツールを実行します。Grok の権限リクエストはすべて承認されます。拡張機能エンジンでは、OAR は権限を一切確認しません。そこでのモードは、エージェントが従う指示にすぎません。
静的プレビューが提供できるのは、作業フォルダー内のフォルダーだけです。 許可リストは Default(既定)のフォルダーを確認せず、参照できる範囲も制限しません。

詳細:チャットを開始できる場所の制限、リレーモード、エージェントとトークン。

サインインなしで届くもの #

会話、ファイル、設定、エージェントを読んだり変更したりするものは、すべてアクセストークンを必要とします。例外は次のとおりです。

対象 公開されるもの オフにする方法
サインインページと静的なアプリ Web アプリとそのサインイン欄です。あなたのデータは何も含みません。 オフにはできません。リレーをインターネットから切り離す(localhostOnly)か、前段にアクセスルールを置いてください。
共有リンク(/shared/…) 会話のトランスクリプトです。読み取り専用で、各メッセージのモデルも表示されます。リレーホストのパスはフィルターされます(既定ではファイル名のみ)。また、隠したメッセージは送られません。開かれるたびに記録されます。 Settings → Sharing(設定 → 共有)で Stop sharing(共有を停止)または Renew link(リンクを更新)を使うか、会話を削除します。古いアドレスはその後、ただの 404 を返します。リンクに有効期限はありません。
プレビューのリンク プレビューした開発サーバーまたはフォルダーです。リンクのランダムなトークンが唯一の保護です。 プレビューの Close(閉じる)を押すか、/preview close を使います。レーンは設定するまでオフです。プレビューはリレーの再起動後も残り、閉じるか会話を削除したときに終わります。

リレーの前段に置いた Cloudflare Access のアプリケーションは、/shared/* と /api/shared/* を通さない限り、共有リンクの閲覧者も止めてしまいます。この 2 つのパスを通すと、それらは意図的に公開されることになります(Cloudflare Access)。

詳細:共有中のリンク、閲覧者に見えるもの、プレビュー、トークンが必要なもの。

サインインしたブラウザーが届く範囲 #

トークンを持つブラウザーは、リレー上のすべての会話を開け、ファイルブラウザーも使えます。Linux と macOS では、ドライブのルートが、作業フォルダーの内外を問わず、リレーのユーザーが読めるあらゆるファイルを提供します。名前の変更と削除は、そのユーザーが書き込める場所ならどこでも働き、削除したものはごみ箱に入りません。Windows では、ブラウザーはリレーが一覧に出すドライブに限られます。エージェントの画像を表示するメディアのルートも同じように動作します。リレーのユーザーが読めるあらゆる絶対パスを提供しますが、トークンを含むリクエストに対してだけです。

詳細:ファイルブラウザー、画像とメディア。

シークレット #

シークレット 保存場所
アクセストークン config.json に平文で保存されます。リレーはこのファイルをオーナーだけが読める状態に保ちます。ブラウザーもサインインの Cookie として保持します。
Cloudflare トンネルのトークン config.json(cloudflaredTunnel.token)または環境変数です。
OpenAI、Cursor、0.9.17 で追加 DeepSeek、0.9.18 で追加 Claude API のキー データベースです。ブラウザーには一切送られません。それぞれ自分のプロバイダーのワーカーにだけ届きます。DeepSeek のキーがマシンの外に出るのは DeepSeek のベース URL に対してだけで、Claude API のキーは https://api.anthropic.com に対してだけです。
ペアリングしたリレーのトークン データベースです。ブラウザーにもエージェントにも一切送られません。
共有リンクのトークン、プッシュのキー データベースです。
Claude、Grok、GitHub Copilot のログイン マシン上の各プロバイダー自身のフォルダー(~/.claude、~/.grok、Copilot CLI のログイン)です。OAR はどれも保存しません。DeepSeek のチャットはどれも使いません。0.9.18 で追加 Claude API のチャットは Claude のフォルダーを共有しますが、ログインではなく保存したキーで動作します。
リレーの環境にある Claude のログイントークン(CLAUDE_CODE_OAUTH_TOKEN) 0.9.17 で追加 どのプラットフォームでも、Claude と Claude Cloud のワーカーにだけ渡されます。以前は、ほかのワーカーも受け取ることがありました。
リレーの環境にある Anthropic のキーまたはトークン(ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN) 0.9.17 で追加 どのワーカーにも渡されません。以前はすべてのワーカーが受け取り、Claude のチャットは Claude のログインではなくそれで動作していました。0.9.18 で追加 サブスクリプションでの Claude のチャットが、Claude Code 自身の設定にある API キーで起動した場合も停止されます。Claude を参照してください。

エージェントはリレーと同じユーザーとして動作します。そのため、「オーナーのみ」とするファイルモードではエージェントを締め出せません。エージェントは config.json、データベース、プロバイダーのフォルダーを読めます。OAR にはそれらをエージェントから隠す仕組みはありません。リレー自身のワーカーと、エージェントがリレーに接続するために使うツールは、config.json からアクセストークンを読みます。relay_tool がエージェントに別のリレーのトークンを渡すことはありません。呼び出しはあなたのリレーを経由し、リレーがトークンを付け加えます。それでも、エージェントはそのトークンをデータベースから読むことはできます。データベースのバックアップには上記のキーとトークンが含まれるので、状態フォルダーと同じように非公開にしてください。

0.9.17 で追加 DeepSeek のチャットのエージェントは、自分の環境から DeepSeek のキーを読めます。リレーは、セッションワーカーが送る内容を保存または表示する前に、その中のキーを [redacted] に置き換えます。これでキーはトランスクリプトに残りませんが、キーを手に入れようとするエージェントを止めることはできません。キーの保存場所を参照してください。

0.9.18 で追加 Claude API のチャットでの Claude API のキーにも、同じことが言えます。このチャットは Claude のログインがある Claude のフォルダーを共有するため、リレーは保存したキーを設定内のどの認証情報よりも優先させ、Claude Code がキーの取得元として別のものを報告したターンを停止します。Claude Code は、その報告の少し後に最初のモデルリクエストを送ります。そのため、停止する前に 1 回のモデルリクエストが別の認証情報ですでに送られている可能性があります。このチェックは、誤った認証情報の使用をその 1 回のモデルリクエストに抑えるもので、防ぐものではありません。Claude API → セキュリティを参照してください。

0.9.18 で追加 リレーが保持するキーで動作する DeepSeek と Claude API のチャットでは、Claude Code はすべてのフックとステータスラインをオフにして起動します。あなたのものもチャットのフォルダーのものも同様で、環境にキーがある状態でそれらが実行されることはありません。管理された設定にあるフックは引き続き実行されます。Claude のログインで動作するチャットでは、フックとステータスラインはそのまま有効です。

0.9.17 で追加 Claude Code のセッションの中(例:エージェントのシェル)から起動したリレーは、そのセッションの変数(セッション ID、メッセージング用のソケットとトークンを含む)をワーカーに渡さなくなりました。Claude Code の中から起動したリレーを参照してください。

詳細:シークレットの保存場所、エージェントのワーカーに届く変数。

リレー間 #

ペアリングでは、トークンが渡されることがあります。相手のリレーがあなたのリレーに呼び返すために別のトークンを必要とする場合、紹介にはあなたのトークンが含まれ、ペアリングを削除してもそのトークンは取り消されません。Agents may(エージェントの権限)のレベルと Accept prompts from other relays' agents(他のリレーのエージェントからのプロンプトを受け付ける)が制限するのは、エージェントがツールを通じて行うことであり、トークンを持つ人が直接行うことではありません。レベルは Read only(読み取り専用)、Read and prompt(読み取りとプロンプト)、Full(フルアクセス)で、新しいペアリングは Full から始まります。ペアリングしたリレーは、会話の中でメンションするまでロックされています。2 つのリレーを経由したプロンプトは 3 つ目には渡されません。また、あなたからのメッセージがないまま 30 回プロンプトが続くと、次のプロンプトではカードで確認を求められます。

詳細:リモートリレーとペアリング。

1 つのリレー上のエージェント間 #

エージェントセッションは既定でオフです。オンにすると、エージェントは会話の中で最初のセッションを開始する前にあなたに確認を求める必要があり、同時に作業できるそのエージェントのセッションは最大 4 つで、エージェントが開始したセッションは自分でセッションを開始できません。ask と plan のモードでは、すべての書き込みアクションで先に確認を求められます。

承認カードには、そのボタンで答えてください。OAR 自身の承認カードで承認になるのは、Allow という語だけです(大文字小文字は問いません)。ほかに入力したテキストはすべて拒否となり、エージェントはそこから理由を受け取りません。

詳細:エージェントセッション、承認カード。

ネットワーク #

  • 接続できる人。 localhostOnly は既定で true で、リレーを 127.0.0.1 にバインドします。それ以外の値ではすべてのインターフェースにバインドし、リレーはリクエストの送信元を確認しません。LAN アクセスはただの http なので、トークンは暗号化されずにネットワークを通ります(接続できる人)。
  • トンネル。 自分のネットワークの外からは、トンネルまたはプロキシを通じて HTTPS を使ってください。SSH トンネル、Cloudflare Tunnel、リバースプロキシ。
  • サインイン。 0.9.11 で追加 1 つのアドレスから 1 分以内に 10 回誤ったトークンが送られると、そのアドレスはその 1 分の残りの間締め出され(429)、拒否はログに記録されます。リレー自身のマシンからのリクエストで、何も転送していないものは締め出されません。ロックアウトは推測を遅くするだけで、保護の要はあくまで長いランダムなトークンです。Cookie は HttpOnly で、30 日間有効です(保護の仕組み)。
  • アドレス内のトークン。 ?token= はページのアドレスでだけ働きます。ページはヘッダーでサインインし、アドレスからトークンを取り除きます。それでも、その最初のアドレスはブラウザーの履歴や、プロキシやトンネルのログに残ることがあります(トークンの提示方法)。
  • ライブ接続。 0.9.11 で追加 リレー自身のオリジンからのブラウザーだけを受け付けるため、別のサイトのページがあなたのサインインの Cookie に便乗して接続することはできません。Host ヘッダーを書き換えるプロキシの背後では、公開オリジンを allowedOrigins に記載してください。
  • 転送ヘッダー。 0.9.11 で追加 X-Forwarded-For、X-Forwarded-Host、X-Forwarded-Proto、X-Real-IP は、リレーが trustProxy で信頼するプロキシ(既定ではループバック上のもの)から来た場合にだけ有効です。クライアントのアドレス(ロックアウト、レート制限、共有のアクセスログ)と、新しい共有リンクのホストとスキームはこの設定を通して読み取られるので、直接接続したクライアントはこれらを選べません。
  • 再起動とキューを空にする操作。 再起動、再起動の取り消し、Empty queue(キューを空にする)に必要なのはトークンだけで、どのデバイスからでも使えます。リモートのユーザーに使わせたくない場合は、プロキシで拒否してください(リレーのマシンだけが使えるエンドポイント)。
  • セッションワーカーのパスガード。 エージェントのワーカーが使うパスと、画像操作の実行は、トンネルのマーカー(cf-ray、または tunnelMarkerHeaders にあるもの)も X-Forwarded-For、Forwarded、X-Real-IP も含まないリクエストを送るループバックのピアにだけ応答します。これらを何も付け加えない転送(SSH のリバーストンネルなど)はローカルに見えます。その場合、パスを守るのはトークンだけです(パスガード)。
  • Cloudflare トンネルのトークン。 コマンドラインで cloudflared に渡されるため、マシンのほかのユーザーはプロセスの一覧でそれを見られます(Cloudflare Tunnel)。
  • SSH トンネルのクリーンアップ。 autoReclaimPort(既定でオン)は、リモートのポートを保持している自分の SSH ログインのプロセスを終了します。reclaimStaleSshSessions は、そこにある自分のアイドル状態の SSH セッションも終了します(リモートのポートが使われているとき)。

マシンの外に出るもの #

OAR にテレメトリーはありません。リレーは OAR にもほかの誰にも使用データを送りません。リレーが接続するのは次のホストで、次の目的に限られます。

  • oar.sh(オプトインした場合のみ)。 Settings → General(設定 → 一般)の Check for updates automatically(自動で更新を確認)は既定でオフです。オンにすると、リレーはすぐに https://oar.sh/latest.json に問い合わせ、その後は起動のたびと、約 12 時間ごとに問い合わせます。リクエストはただの GET で、Accept: application/json と、一度応答を受け取った後は If-None-Match を付けます。バージョン、トークン、アカウント、マシンの情報は一切含みません。Check for updates(更新を確認)ボタンと、--to なしの oar update も同じファイルを読みます。リレーの環境に OAR_NO_UPDATE_CHECK=1 を設定すると、これらはすべて止まります。更新の確認を参照してください。
  • npm(更新するとき)。 npm install -g は npm レジストリと通信します。
  • 各プロバイダー(ターンごと)。 あなたのメッセージと、エージェントがタスクのために読んだものは、会話の背後にあるプロバイダーに送られます。GitHub Copilot、OpenAI(または設定したベース URL)、Claude、Claude API、Cursor、Grok、DeepSeek(または設定したベース URL)です。適用されるのは OAR の規約ではなく、それらのプロバイダーの規約です。
  • DeepSeek。 0.9.17 で追加 リレーは DeepSeek のキーを https://api.deepseek.com、または Settings → Providers → DeepSeek(設定 → プロバイダー → DeepSeek)の Advanced(詳細設定)で設定したベース URL(https、または同じマシン上に限り http)に送り、ほかのホストには送りません。送るのは、キーやベース URL を保存したときや 🤗 Select Models(モデルを選択)で一覧を再読み込みしたときにモデルを一覧するため、そして残高を読むため(下記)です。DeepSeek のチャットの Claude Code は、ほかの Claude Code のチャットと同じセッションコンテキストで、そのアドレスの下の /anthropic にターンを送ります。OAR は Claude Code 自身の Anthropic への通信(更新、テレメトリー)をオフにします。DeepSeek を参照してください。
  • Claude API。 0.9.18 で追加 リレーは Claude API のキーを https://api.anthropic.com に送り、ほかのホストには送りません。送るのは、キーを保存したとき、Claude API をオンにしたとき、一覧を再読み込みしたときに、そのキーのモデルを一覧するためです。Claude API のチャットの Claude Code は、そのキーを使ってそこにターンを送ります。Claude API を参照してください。
  • Claude Cloud。 エージェントは Anthropic で、あなたのリポジトリのクローンを使って動作します。リレーは Claude のログイントークンを https://api.anthropic.com に送り、ほかのホストには送りません。Claude Cloud を参照してください。
  • プランの使用状況(Check Usage を開いたとき)。 リレーは、マシン上で見つけたログインを使ってアカウントを読みます。GitHub(api.github.com。GH_TOKEN、GITHUB_TOKEN、または gh のログインを使用)、Grok(cli-chat-proxy.grok.com。Grok CLI のログインを使用)、Anthropic(Claude Cloud がオンの場合)、0.9.17 で追加 DeepSeek(残高。DeepSeek がオンの間、保存したキーで DeepSeek のベース URL から読み取り)、そしてダッシュボードのセッショントークンを入力した場合に限り cursor.com です。Check Usage(使用状況の確認)を参照してください。
  • GitHub Actions。 スリープの確認のために、リレーは作業フォルダーのリポジトリに対して gh run list を実行します(ホストのスリープ)。
  • ペアリングしたリレー。 エージェントが relay_tool を通じて送るものは、そのリレーのトークンとともに、そのリレーのアドレスに送られます(リモートリレー)。
  • プロバイダーのインストーラー(確認したとき)。 Claude または Grok の Install(インストール)は、プロバイダー自身のインストーラースクリプト(claude.ai、x.ai)をリレーのユーザーとして実行します(Claude、Grok)。
  • プッシュ通知。 ブラウザーのベンダーのプッシュサービスを経由します。別の設定を選ばない限り、テキストは汎用的なものです(通知に表示される内容)。

Markdown、数式、ハイライトのライブラリーは、リレーではなくブラウザーが、アプリを開くたびに cdn.jsdelivr.net(Markdown、数式、ターミナル)と cdnjs.cloudflare.com(ハイライト)から読み込みます。tmux セッションのターミナル表示は、cdn.jsdelivr.net が失敗したときに unpkg.com からターミナルのライブラリーを読み込みます。これらのホストには、アプリを開くすべてのブラウザーのリクエストが見えます。画像、メディア、数式を参照してください。

ログ #

リレーは自分のコンソールを、状態フォルダーの logs/relay-console.log に、行ごとのタイムスタンプ付きでコピーします。5 MB でローテーションし、古いファイルを 3 つ残します。行を書き込む前に、リレーはあなたのアクセストークンと、?token= や &token= の後の値を [token] に置き換えます。OAR_NO_CONSOLE_LOG=1 でこのファイルをオフにできます。1 回だけの誤ったトークンは記録されませんが、締め出されたアドレスは [auth] で始まる行で記録されます。プレビューは短いハッシュで示され、トークンで示されることはありません。共有の閲覧は閲覧者のアドレスとともに記録され、Store viewer IP addresses(閲覧者の IP アドレスを保存)がオフの場合は not stored と記録されます。

ワーカーのログ(worker-<session>.log)には各セッションワーカーの出力が入っており、ワーカー自身が書き込むため、上記の置き換えを通りません。削除した会話のファイルは残ります。リレーの前段にあるリバースプロキシやトンネルは独自のログを持ち、そこには ?token= 付きのアドレスが残ることがあります。管理対象の Cloudflare トンネルは、トークンを <redacted> と表示します。すべてのログを非公開として扱い、どこかに投稿する前には内容を読んでください。

詳細:ログ。

リレーを公開する前に #

  1. トークンはランダムにして、共有するアドレスに含めないでください。漏れた場合は oar setup --new-token を実行します。これですべてのデバイスがサインアウトされ、ペアリングしたリレーも締め出されます。
  2. リレーには HTTPS(トンネルまたはリバースプロキシ)で接続してください。プロキシやトンネルが同じマシンで動作する場合は、localhostOnly をオンのままにします。
  3. 別のマシンにあるプロキシの背後では、trustProxy をそのプロキシに設定し、Host を書き換える場合は allowedOrigins も設定します(別のマシン上のプロキシ)。ヘッダーを一切付け加えない転送には、tunnelMarkerHeaders にマーカーのヘッダーが必要です。リモートのユーザーにリレーを再起動させたくない場合は、プロキシでそれらのエンドポイントを拒否します。
  4. リレーは、その権限、ファイル、ログインをエージェントに与えてもよいユーザーとして実行してください。会話を特定のフォルダーでだけ開始させたい場合は workspaceRootAllowList を設定し、それがシェルを制限しないことを覚えておいてください。
  5. 会話は、Preview as shared(共有時の表示を確認)で読んでから共有し、含めてはいけないものは隠してください。自由記述のテキストでは、パスのフィルターはベストエフォートです。不要になったリンクは Settings → Sharing で停止してください。
  6. プレビューを公開するのは、リンクを持つ誰に見せてもよいものだけにし、終わったら閉じてください。プレビューはリレーの再起動後も残ります。
  7. エージェントセッションは、必要でない限りオフのままにしてください。ペアリングしたリレーでは、Agents may のレベルを意図して選び、必要でない場合は Accept prompts from other relays' agents をオフにしてください。
  8. 承認カードではボタンをクリックしてください。
  9. oar.sh と一切通信したくない場合は、OAR_NO_UPDATE_CHECK=1 を設定してください。