OAR 會暴露什麼、不會暴露什麼
本頁把 OAR 會暴露什麼、不會暴露什麼集中在一個地方說明。每一項事實都有它主要所在的頁面;每一節最後都會連到那裡。簡單來說:中繼以你的身分行事,存取 token 就是對它的完全控制權,而你建立的少數幾種連結是刻意公開的。
信任模型 #
中繼以某個作業系統使用者的身分執行,它的 agent 也以該使用者的身分、帶著該使用者的權限執行。凡是你能在這台機器上做的事,都可以要求 agent 去做。沒有任何東西會限制 agent 的 shell。agent 可以讀取設定檔(連同其中的存取 token)、資料庫(其中有供應商金鑰和配對的中繼的 token),以及各供應商的登入檔案。存取 token 能完全控制中繼,因此也能控制它的 agent 能做的事:持有它的人就能讓 agent 在主機上執行指令。OAR 擴大了這些 agent 能觸及的範圍,但沒有加上任何沙箱。
唯一的例外是 Claude Cloud:它的 agent 在 Anthropic 的沙箱中處理 GitHub 儲存庫的複本,而不是在你的機器上工作(見什麼會離開你的機器)。
Agent 可以碰觸什麼 #
工作資料夾是 agent 工作的地方,但它不是一道牆。以下是 OAR 會強制執行和不會強制執行的事:
| OAR 會強制執行 | OAR 不會強制執行 |
|---|---|
workspace 會限制對話可以在哪些資料夾中開始,以及可以用 Change CWD(變更工作資料夾)移到哪些資料夾。未設定時,任何現有的資料夾都允許。 |
沒有任何東西會把 agent 的 shell 限制在工作資料夾中。凡是中繼的使用者能讀寫的地方,它都能讀寫。 |
| 中繼模式告訴 agent 可以多自由地行動。有些供應商會強制執行其中一部分:GitHub Copilot 和 OpenAI 的 SDK 引擎在 plan 中會拒絕任何非唯讀的動作,在 ask 中會先詢問你。 | Claude,以及 0.9.17 新增 DeepSeek,在所有模式中執行每個工具時都不會詢問你。Grok 的權限請求全部都會被核准。在擴充功能引擎上,OAR 不檢查任何權限。在那裡,模式只是 agent 會遵循的一項指示。 |
| 靜態預覽只能提供工作資料夾內的資料夾。 | 允許清單不會檢查 Default(預設)資料夾,也不會限制你能瀏覽的內容。 |
詳情:限制對話可以從哪裡開始、中繼模式和 Agent 與 token。
不登入也能存取的內容 #
凡是讀取或變更你的對話、檔案、設定或 agent 的東西,都需要存取 token。以下是例外:
| 項目 | 暴露什麼 | 如何關閉 |
|---|---|---|
| 登入頁面和靜態 App | 網頁 App 和它的登入框。其中不含你的任何資料。 | 無法關閉。讓中繼不要連上網際網路(localhost),或在它前面加上存取規則。 |
分享連結(/) |
對話的對話紀錄,唯讀,並附上每則訊息使用的模型。中繼主機的路徑會被過濾(預設只顯示檔名),你隱藏的訊息不會送出。每次開啟都會被記錄。 | 在 Settings → Sharing(設定 → 分享)中按 Stop sharing(停止分享)或 Renew link(更新連結),或刪除對話。之後舊位址只會回應單純的 404。連結永遠不會過期。 |
| 預覽連結 | 被預覽的 dev server 或資料夾。連結中的隨機 token 是它唯一的保護。 | Close(關閉)預覽,或執行 /。在你設定之前,預覽通道是關閉的。預覽在中繼重新啟動後仍然存在,直到你關閉它或刪除它的對話時才會結束。 |
中繼前方的 Cloudflare Access 應用程式也會擋住分享連結的觀看者,除非放行 / 和 /,而這會刻意讓這兩個路徑公開(Cloudflare Access)。
詳情:你的分享連結、觀看者會看到什麼、預覽和哪些需要 token。
已登入的瀏覽器能存取什麼 #
持有 token 的瀏覽器可以開啟中繼上的每個對話,而且能使用檔案瀏覽器。在 Linux 和 macOS 上,磁碟機根目錄會提供中繼的使用者能讀取的任何檔案,不論是否在工作資料夾內。重新命名和刪除會在該使用者有寫入權限的任何地方生效,而且刪除不會移到垃圾桶。在 Windows 上,瀏覽器僅限於中繼列出的磁碟機。顯示 agent 圖片的媒體路由也是一樣:它會提供中繼的使用者能讀取的任何絕對路徑,但只提供給帶有 token 的請求。
機密 #
| 機密 | 存放位置 |
|---|---|
| 存取 token | config.,純文字。中繼會讓這個檔案只有擁有者能存取。瀏覽器也持有它,作為登入 cookie。 |
| Cloudflare tunnel token | config.(cloudflared)或環境中。 |
| OpenAI、Cursor、0.9.17 新增 DeepSeek 和 0.9.18 新增 Claude API 的金鑰 | 資料庫。它們絕不會傳送給瀏覽器。每個金鑰只會到達它自己供應商的 worker;DeepSeek 金鑰只會為了送往 DeepSeek 基礎 URL 而離開這台機器,Claude API 金鑰則只會送往 https://。 |
| 配對的中繼的 token | 資料庫。它絕不會傳送給瀏覽器或 agent。 |
| 分享連結 token、推播金鑰 | 資料庫。 |
| Claude、Grok 和 GitHub Copilot 的登入 | 各供應商在這台機器上自己的資料夾(~/.、~/.、Copilot CLI 的登入)。OAR 不儲存其中任何一個。DeepSeek 對話不使用其中任何一個。0.9.18 新增 Claude API 對話共用 Claude 資料夾,但以已儲存的金鑰執行,而不是用登入。 |
中繼環境中的 Claude 登入 token(CLAUDE_) |
0.9.17 新增 在每個平台上都只交給 Claude 和 Claude Cloud 的 worker。以前其他 worker 也可能拿到它。 |
中繼環境中的 Anthropic 金鑰或 token(ANTHROPIC_、ANTHROPIC_) |
0.9.17 新增 不交給任何 worker。以前每個 worker 都會拿到它,而且 Claude 對話會用它執行,而不是用 Claude 登入。0.9.18 新增 以訂閱執行的 Claude 對話,如果啟動後用的是 Claude Code 自己設定中的 API 金鑰,也會被停止;見 Claude。 |
agent 以和中繼相同的使用者身分執行。因此,標示「只有擁有者」的檔案模式擋不住 agent:它可以讀取 config.、資料庫和供應商資料夾。OAR 中沒有任何東西會對它隱藏這些。中繼自己的 worker,以及 agent 用來連到中繼的工具,都從 config. 讀取存取 token。relay_ 絕不會把另一個中繼的 token 交給 agent:呼叫會經過你的中繼,由它加上 token。但 agent 仍然可以從資料庫讀到那個 token。資料庫的備份含有上述的金鑰和 token,所以請像對待狀態資料夾一樣,讓它保持私密。
0.9.17 新增 DeepSeek 對話的 agent 可以從它的環境中讀到 DeepSeek 金鑰。在儲存或顯示 session worker 送出的任何內容之前,中繼會把其中的金鑰替換成 [redacted],讓它不會出現在對話紀錄中,但這擋不住想拿到金鑰的 agent。見金鑰存放在哪裡。
0.9.18 新增 Claude API 對話中的 Claude API 金鑰也是如此。這種對話共用存放你 Claude 登入的 Claude 資料夾,所以中繼會固定使用已儲存的金鑰,蓋過該資料夾設定中的任何憑證,並且在 Claude Code 回報它的金鑰來自其他來源時停止該回合。Claude Code 會在回報之後片刻送出它的第一個模型請求,所以在停止之前,可能已經有一個模型請求用另一個憑證送出了:這項檢查會把錯誤的憑證限制在那一個模型請求,但無法防止它。見 Claude API → 安全性。
0.9.18 新增 在 DeepSeek 和 Claude API 對話中(它們以中繼持有的金鑰執行),Claude Code 啟動時會關閉所有 hook 和狀態列,包括你的和對話資料夾的,讓它們無法在環境中帶著金鑰執行。受管理設定中的 hook 仍會執行。以你的 Claude 登入執行的對話則保留它們。
0.9.17 新增 從 Claude Code session 內部(例如 agent 的 shell)啟動的中繼,不再把該 session 的變數(其中包括它的 session id、訊息 socket 和 token)交給它的 worker。見從 Claude Code 內部啟動的中繼。
詳情:機密存放在哪裡、哪些變數會傳到 agent 的 worker。
中繼之間 #
配對可能會交出一個 token:如果另一個中繼需要不同的 token 才能回頭呼叫你的中繼,介紹時就會帶上你的 token,而移除配對並不會撤銷它。Agents may(agent 可以)等級有 Read only(唯讀)、Read and prompt(讀取並傳送提示)和 Full(完整存取),新的配對從 Full 開始。這個等級和 Accept prompts from other relays' agents(接受其他中繼 agent 的提示)限制的是 agent 透過工具能做的事,而不是 token 持有者直接能做的事。配對的中繼在對話中會保持鎖定,直到你提及它。跨過兩個中繼的提示不會再傳給第三個,而且在沒有你的訊息的情況下累積 30 個提示後,下一個提示會以卡片詢問你。
詳情:遠端中繼與配對。
同一個中繼上的 agent 之間 #
Agent session 預設為關閉。開啟後,agent 在一個對話中啟動第一個 session 之前必須先詢問你,它的 session 同時最多只能有 4 個在工作,而且由 agent 啟動的 session 本身不能再啟動 session。在 ask 和 plan 模式中,每個寫入動作都會先詢問。
請用按鈕回答核准卡片。在 OAR 自己的核准卡片上,只有 Allow 這個字(不分大小寫)才會核准。你輸入的任何其他文字都會拒絕,而且 agent 不會從中得到任何理由。
詳情:Agent session 和核准卡片。
網路 #
- 誰能連線。
localhost預設為Only true,會把中繼綁定到127.。其他任何值都會綁定所有介面,而且中繼不會檢查請求來自哪裡。區域網路存取是純0. 0. 1 http,所以 token 會以未加密的方式經過你的網路(誰能連線)。 - Tunnel。 在你的網路之外,請透過 tunnel 或 proxy 使用 HTTPS:SSH tunnel、Cloudflare Tunnel、反向 proxy。
- 登入。 0.9.11 新增 一分鐘內來自同一個位址的十個錯誤 token,會把該位址鎖在外面,直到這一分鐘結束(
429),而且這次拒絕會被記錄。來自中繼本機、且沒有經過任何轉送的請求永遠不會被鎖住。鎖定能減慢猜測;真正的保護仍是一個夠長的隨機 token。cookie 是 HttpOnly,有效期 30 天(登入的防護)。 - 位址中的 token。
?token=只對頁面位址有效;頁面會以標頭登入,並把它從位址中移除。那第一個位址仍可能留在瀏覽器歷史記錄中,以及 proxy 或 tunnel 的記錄中(出示 token 的方式)。 - 即時連線。 0.9.11 新增 它只接受來自中繼自己來源的瀏覽器,所以其他網站上的頁面無法搭你登入 cookie 的便車連進來。在會改寫
Host標頭的 proxy 後面,請把公開的來源列在allowed中。Origins - 轉送標頭。 0.9.11 新增
X-、Forwarded- For X-、Forwarded- Host X-和Forwarded- Proto X-只有來自中繼透過Real- IP trust信任的 proxy 時才算數,預設是迴路位址上的 proxy。用戶端位址(鎖定、速率限制、分享存取紀錄)以及新分享連結的主機和協定,都是透過它讀取的,所以直接連線的用戶端無法自己選擇它們。Proxy - 重新啟動和清空佇列。 重新啟動、取消重新啟動和 Empty queue(清空佇列)只需要 token,可以從任何裝置執行。如果遠端使用者不得使用它們,請在 proxy 上拒絕這些請求(只有中繼所在機器能使用的端點)。
- Session worker 路徑保護。 你的 agent 的 worker 使用的路徑,以及影像操作的執行,只回應來自迴路位址、且請求中不帶 tunnel 標記(
cf-,或ray tunnel中的某個標頭),也不帶Marker Headers X-、Forwarded- For Forwarded或X-的對端。不加上任何這些標頭的轉送者,例如 SSH 反向 tunnel,看起來就像本機;這時只有 token 在保護這個路徑(路徑保護)。Real- IP - Cloudflare tunnel token。 它是透過指令列傳給
cloudflared的,所以這台機器上的其他使用者可以在處理程序清單中看到它(Cloudflare Tunnel)。 - SSH tunnel 清理。
auto(預設開啟)會結束你的 SSH 登入中佔用遠端連接埠的處理程序;Reclaim Port reclaim還會結束你在那裡閒置的 SSH session(遠端連接埠被佔用)。Stale Ssh Sessions
什麼會離開你的機器 #
OAR 沒有遙測。中繼不會把任何用量資料傳給 OAR 或其他任何人。它只會連絡以下這些主機,而且只為了以下這些原因:
- oar.sh,僅在你選擇加入時。 Settings → General(設定 → 一般)中的 Check for updates automatically(自動檢查更新)預設為關閉。開啟後,中繼會立即向
https://查詢,之後在每次啟動時,以及大約每 12 小時查詢一次。請求是一個單純的oar. sh/ latest. json GET,帶有Accept: application/,在有過回應之後還會帶上json If-。它不帶任何版本、token、帳戶或機器資訊。Check for updates(檢查更新)按鈕和不帶None- Match --to的oar update讀取的是同一個檔案。中繼環境中的OAR_會停止這一切。見更新檢查。NO_ UPDATE_ CHECK= 1 - npm,在你更新時。
npm install -g會和 npm registry 通訊。 - 每個供應商,每個回合。 你的訊息,以及 agent 為了任務讀取的任何內容,都會送到對話背後的供應商:GitHub Copilot、OpenAI(或你設定的基礎 URL)、Claude、Claude API、Cursor、Grok 或 DeepSeek(或你設定的基礎 URL)。適用的是它們的條款,而不是 OAR 的。
- DeepSeek。 0.9.17 新增 中繼會把 DeepSeek 金鑰送到
https://,或送到 Settings → Providers → DeepSeek(設定 → 供應商 → DeepSeek)中 Advanced(進階)下設定的基礎 URL(api. deepseek. com https,或僅限同一台機器上的http),不會送到其他主機:用途是在你儲存金鑰或基礎 URL、或在 🤗 Select Models(選擇模型)中重新整理清單時列出模型,以及讀取餘額(見下文)。DeepSeek 對話的 Claude Code 會把它的回合送到該位址下的/,並帶著和任何 Claude Code 對話相同的 session 上下文。OAR 會關閉 Claude Code 自己連往 Anthropic 的流量(更新、遙測)。見 DeepSeek。anthropic - Claude API。 0.9.18 新增 中繼會把 Claude API 金鑰送到
https://,不會送到其他主機:用途是在你儲存金鑰、開啟 Claude API 或重新整理清單時,列出該金鑰可用的模型。Claude API 對話的 Claude Code 會帶著金鑰把它的回合送到那裡。見 Claude API。api. anthropic. com - Claude Cloud。 agent 在 Anthropic 執行,處理你儲存庫的複本。中繼會把 Claude 登入 token 送到
https://,不會送到其他主機。見 Claude Cloud。api. anthropic. com - 方案用量,在你開啟 Check Usage(檢查用量)時。 中繼會用它在這台機器上找到的登入讀取你的帳戶:GitHub(
api.,使用github. com GH_、TOKEN GITHUB_或TOKEN gh的登入)、Grok(cli-,使用 Grok CLI 的登入)、Anthropic(開啟 Claude Cloud 時)、0.9.17 新增 DeepSeek(餘額,在 DeepSeek 啟用期間以已儲存的金鑰向 DeepSeek 基礎 URL 讀取),以及只有在你輸入了儀表板 session token 時才會連絡的chat- proxy. grok. com cursor.。見 Check Usage。com - GitHub Actions。 為了休眠檢查,中繼會對你的工作資料夾所在的儲存庫執行
gh run list(主機休眠)。 - 配對的中繼。 agent 透過
relay_送出的內容,會帶著該中繼的 token 送到它的位址(遠端中繼)。tool - 供應商安裝程式,在你確認時。 Claude 或 Grok 的 Install(安裝)會以中繼的使用者身分執行供應商自己的安裝腳本(
claude.、ai x.)(Claude、Grok)。ai - 推播通知。 它們會經過你瀏覽器廠商的推播服務,而且除非你另作選擇,內容都是通用文字(通知會顯示什麼)。
是你的瀏覽器,而不是中繼,在每次開啟 App 時從 cdn.(Markdown、數學、終端機)和 cdnjs.(語法標示)載入 Markdown、數學和語法標示函式庫。tmux session 的終端機檢視在 cdn. 失敗時,會從 unpkg. 載入它的終端機函式庫。這些主機會看到每個開啟 App 的瀏覽器的請求。見圖片、媒體與公式。
記錄 #
中繼會把它的主控台輸出複製到狀態資料夾中的 logs/,每一行都附有時間戳記。檔案達到 5 MB 時會輪替,並保留三個較舊的檔案。寫入一行之前,中繼會把你的存取 token,以及 ?token= 或 &token= 之後的任何值,替換成 [token]。OAR_ 會關閉這個檔案。單一個錯誤 token 不會被記錄;被鎖住的位址則會,以一行開頭為 [auth] 的記錄。預覽以一個短雜湊命名,絕不會用它的 token。分享的讀取會連同觀看者的位址一起記錄,或在 Store viewer IP addresses(儲存觀看者的 IP 位址)關閉時記為 not stored。
worker 記錄(worker-<session>.)存放每個 session worker 的輸出,由 worker 自己寫入,不經過上述的遮蔽。已刪除對話的檔案會保留下來。中繼前方的反向 proxy 或 tunnel 會保留它自己的記錄,其中可能含有帶 ?token= 的位址,而受管理的 Cloudflare tunnel 會把它的 token 顯示為 <redacted>。請把所有記錄都視為私密,並在貼到任何地方之前先讀過。
詳情:記錄。
在暴露中繼之前 #
- 讓 token 保持隨機,也不要放進你分享的位址中。如果它外洩了,請執行
oar setup --new-,這會把每台裝置登出,並把配對的中繼擋在外面。token - 透過 HTTPS 連到中繼:使用 tunnel 或反向 proxy。當 proxy 或 tunnel 在同一台機器上執行時,讓
localhost保持開啟。Only - 在另一台機器上的 proxy 後面時,把
trust設為該 proxy,如果它會改寫Proxy Host,也要設定allowed(另一台機器上的 proxy)。完全不加任何標頭的轉送者,需要在Origins tunnel中設定一個標記標頭。如果遠端使用者不得重新啟動中繼,請讓 proxy 拒絕這些端點。Marker Headers - 以一個你願意把它的權限、檔案和登入交給 agent 的使用者身分執行中繼。如果對話只應在某些資料夾中開始,請設定
workspace,並記得它不會限制 shell。Root Allow List - 只有在用 Preview as shared(預覽分享後的樣子)讀過對話之後才分享它,並隱藏不該出現的內容。在自由文字中,路徑過濾只能盡力而為。在 Settings → Sharing 中停止你不再需要的連結。
- 只為你可以給任何持有連結的人看的東西發布預覽,用完就關閉它。它在中繼重新啟動後仍會存在。
- 除非需要,否則讓 agent session 保持關閉。對於配對的中繼,請刻意選擇 Agents may 等級,並在不需要的地方關閉 Accept prompts from other relays' agents。
- 點選核准卡片上的按鈕。
- 如果你完全不想和 oar.sh 有任何連絡,請設定
OAR_。NO_ UPDATE_ CHECK= 1