OAR

Open Agent Relay

你的 coding agents,隨處掌槳。

OAR(Open Agent Relay,開放代理中繼)是一個自架的網頁中繼,讓你用任何瀏覽器操控跑在自己機器上的 coding agents——手機、平板,或第二台電腦。

curl -fsSL oar.sh/install | sh

執行前先讀過這支腳本。Linux 和 macOS 不需要 Node.js——沒有或版本太舊時,安裝程式會自己帶一份。Windows 需要 Node.js 22.13 以上。

自架你的機器,你的金鑰MIT中繼端零遙測

實戰

真實的工作,人在哪都能做

這些畫面重現自 OAR 自己的對話紀錄——一個 Cloudflare 郵件伺服器和一款多人遊戲,全程從瀏覽器操控。讀 agent 的思考、回答它的提問,在回合中途隨手導正。

OAR 在手機上:一個 agent 回報三個 subagent 交出了零相依的 SMTP client、1,105 個測試全綠,回覆寫著「測過了,能跑」 OAR 在手機上:一個 agent 回報三個 subagent 交出了零相依的 SMTP client、1,105 個測試全綠,回覆寫著「測過了,能跑」
在手機上——你不在的時候,三個 agent 已經交出一個 SMTP client。
OAR 桌面畫面:agent 回報自己的部署讓每一個信箱都掛掉,解釋 migration 的順序為何釀成這件事,並指出正式環境壞掉的期間,37 個整合測試全都通過 OAR 桌面畫面:agent 回報自己的部署讓每一個信箱都掛掉,解釋 migration 的順序為何釀成這件事,並指出正式環境壞掉的期間,37 個整合測試全都通過
「deploy」——一個字丟出去,換來 agent 鉅細靡遺地回報自己的失敗。
OAR 展開 Thoughts 區塊:agent 推敲 Durable Object 的 input gating 如何讓一次檢查從 await 之間溜過去,接著回報六則訊息生出六個物件,修好後 78 個測試全綠 OAR 展開 Thoughts 區塊:agent 推敲 Durable Object 的 input gating 如何讓一次檢查從 await 之間溜過去,接著回報六則訊息生出六個物件,修好後 78 個測試全綠
讀的是推理,不只是答案——思考就攤在畫面上。
OAR 提問卡片:agent 詢問 planDelivery 該如何處理 SPF 與 DKIM 都沒過的信件,給出三個選項和一個自由填答欄,標題列顯示有一則待答問題 OAR 提問卡片:agent 詢問 planDelivery 該如何處理 SPF 與 DKIM 都沒過的信件,給出三個選項和一個自由填答欄,標題列顯示有一則待答問題
需要做決定時它會問——然後等你從口袋裡回答。
OAR 在回合中途導正:先前一則訊息標示為回合中途送出、已和回覆一併處理,新的請求正在執行並附有 Stop 按鈕,另一則草稿停在 Steer 按鈕旁 OAR 在回合中途導正:先前一則訊息標示為回合中途送出、已和回覆一併處理,新的請求正在執行並附有 Stop 按鈕,另一則草稿停在 Steer 按鈕旁
回合中途導正——你的下一個念頭,直接併入正在進行的工作。
OAR 的多選提問卡片:agent 詢問哪些信箱事件要發送網頁推播,四個選項勾了三個,多選已開啟,一個按鈕就能一次送出所選內容 OAR 的多選提問卡片:agent 詢問哪些信箱事件要發送網頁推播,四個選項勾了三個,多選已開啟,一個按鈕就能一次送出所選內容
有些問題不只一個答案——全部勾起來,一次回覆。

Agent 團隊

一個回合,一整組人馬

agent 可以把工作拆給並行的 subagent——而 OAR 會把每一個都留在畫面上:各自跑在哪個模型上、此刻正在執行的指令、即時 token 計數、已經跑了多久,還有一顆在手機上也按得動的 Stop 按鈕。

  • 背景任務會繼續跑,不管你是在讀、在導正,還是乾脆走開。
  • 每個 subagent 都能單獨追蹤、單獨取消。
  • 直接支援 Claude 與 Copilot 的 task 系統,背景 agent 和分離的 shell 都算在內,不必額外設定。
OAR 顯示一個 Claude session,三個背景 subagent 並行處理 SMTP client、API 與寄送路徑,以及設定介面——每一個都有即時 token 計數、已耗時間和 Stop 按鈕 OAR 顯示一個 Claude session,三個背景 subagent 並行處理 SMTP client、API 與寄送路徑,以及設定介面——每一個都有即時 token 計數、已耗時間和 Stop 按鈕
三個 agent 分攤同一項工作——即時 token 計數,外加各自一顆 Stop 按鈕。
OAR 在 Copilot 上執行背景任務:兩個背景 agent 分別跑在 GPT-5.6-sol 與 Haiku 4.5,加上一個被監看的 Bash shell,各自顯示目前指令、token 計數、已執行時間與 Stop 按鈕,上方是一則背景延續回覆 OAR 在 Copilot 上執行背景任務:兩個背景 agent 分別跑在 GPT-5.6-sol 與 Haiku 4.5,加上一個被監看的 Bash shell,各自顯示目前指令、token 計數、已執行時間與 Stop 按鈕,上方是一則背景延續回覆
Copilot 上也是同一組人馬——背景 agent 與 shell,各自標出模型,各有一顆 Stop。

監看 session

讓 agent 盯著 agent

agent 可以訂閱其他 session——在同一個中繼上,或在配對好的中繼上——那邊一有動靜就會被叫醒:一則等著回答的提問、一個錯誤、一則回覆、一項跑完的背景任務、一個安靜下來的 session。不必輪詢:OAR 會在監看者的對話裡寫下一則簡短的註記,接下來就交給 agent 處理。

  • 訂閱只負責通知。事件不會核准任何操作,也不會回答任何問題;agent 能做的事,跟訂閱之前完全一樣。
  • 一個對話的第一筆訂閱,要你在卡片上核准。之後標題列會顯示 watching N sessions,每一筆都附有 Unsubscribe。
  • 跨配對的中繼也行:每個事件都會標明來自哪個中繼,連線中斷期間發生的事,會合成一列重播送達。
  • 一連串湧進的事件只算一則訊息,忙碌的一小時會整理成一份摘要——提問和錯誤照樣立刻送到。
  • agent 彼此對話時,註記和回覆會收合成一列;每個 subagent 的完整紀錄,點一下就能打開。
OAR:一個發佈用的 session 正在監看另外兩個 session——跑完的回覆以精簡的中繼事件列送達,「watching 2 sessions」清單已展開並附有 Unsubscribe,agent 想再監看配對中繼上一個 session 的請求,正在一張 Allow / Deny 卡片上等你決定 OAR:一個發佈用的 session 正在監看另外兩個 session——跑完的回覆以精簡的中繼事件列送達,「watching 2 sessions」清單已展開並附有 Unsubscribe,agent 想再監看配對中繼上一個 session 的請求,正在一張 Allow / Deny 卡片上等你決定
一個 session 監看另外兩個:它們的事件以精簡的列送達,新的訂閱要等你按下 Allow。
OAR:一則回覆列出它跑過的兩個 subagent,附上模型、token 數和執行時間;下方是配對中繼上的 agent 送來的提示和這邊的回覆,收合成一列:「note from ci-box · 每晚 benchmark · replied」 OAR:一則回覆列出它跑過的兩個 subagent,附上模型、token 數和執行時間;下方是配對中繼上的 agent 送來的提示和這邊的回覆,收合成一列:「note from ci-box · 每晚 benchmark · replied」
subagent 以列的形式回報,點開就是完整紀錄;另一個中繼的 agent 送來的註記和回覆,收合成一行。

Runtimes

一個中繼,八種 runtime

每個對話各自挑 runtime。一條佇列、一份紀錄、一套介面。

OAR 桌面畫面:一段在 Agent 模式下使用 deepseek-flash 的 DeepSeek 對話;提示要求找出今天 DeepSeek 的重要新聞並附上來源;回覆列出三個簡短重點和六個連到 DeepSeek API 文件的連結,它的工具活動列出三次 WebSearch 呼叫,其中一次用中文 OAR 桌面畫面:一段在 Agent 模式下使用 deepseek-flash 的 DeepSeek 對話;提示要求找出今天 DeepSeek 的重要新聞並附上來源;回覆列出三個簡短重點和六個連到 DeepSeek API 文件的連結,它的工具活動列出三次 WebSearch 呼叫,其中一次用中文
DeepSeek 也行:Claude Code 跑在 DeepSeek 的 API 上,這裡用的是 deepseek-flash。三次網路搜尋,其中一次用中文,還有一則附上來源的回答。

主題

白天與夜晚

OAR 有日間模式和夜間模式,這一頁的每張截圖都會跟著頂端的切換鈕變。拖動分隔線比較兩者;旁邊的手機顯示的是這一頁目前沒在用的模式。

OAR 桌面畫面,一則帶有語法上色程式碼區塊的回覆:同一個畫面,可移動分隔線的左邊是日間模式、右邊是夜間模式
一則帶程式碼區塊的回覆:左邊日間,右邊夜間。拖動分隔線,或用方向鍵。
手機上的 OAR,日間模式:同一則回覆和它的程式碼區塊 手機上的 OAR,夜間模式:同一則回覆和它的程式碼區塊
同一段對話在手機上——用的是這一頁目前沒在用的模式。

功能

你會拿到什麼

方案用量

隨時知道方案還剩多少

OAR 會逐家追蹤供應商的方案用量,全部收進同一個對話框。回合進行中打開「檢查用量」,就看得出整晚讓 agent 跑下去還撐不撐得住——在供應商把你擋下來之前,而且就在你操控 agent 的同一個瀏覽器分頁裡。

  • Claude 訂閱:5 小時的 session 視窗、每週上限,以及這次 session 各個模型各花了多少。
  • Copilot:premium request 配額,外加 SDK worker 的每回合明細——AI credits、token、model call。
  • DeepSeek:餘額、選用的每月預算、每天與各模型的估計花費,以及網路搜尋的次數。
  • Claude API:今天與本月各模型的估計花費,以及選用的每月上限長條。
  • Cursor 和 Grok 各有自己的卡片,資料來自同一個面板。
  • 數字出自 worker 自己的回報和各家的配額 API,你在做事的同時就會更新。
OAR 用量對話框顯示在手機上,Max 方案的 Claude 卡片:目前的 5 小時 session 用到 72%,每週上限 41%,每週 Opus 23%,下方是各模型的 session 花費明細 OAR 用量對話框顯示在手機上,Max 方案的 Claude 卡片:目前的 5 小時 session 用到 72%,每週上限 41%,每週 Opus 23%,下方是各模型的 session 花費明細
手機上的 Claude Max——5 小時視窗已經走掉 72%,以及這次 session 各模型花了多少。
OAR 用量對話框,Pro+ 方案的 GitHub Copilot 卡片:1,500 次 premium request 已用掉 1,062 次,方案配額 31%,聊天與補全不限次數,還有 SDK worker 上一回合的明細,含 AI credits、token 與 model call OAR 用量對話框,Pro+ 方案的 GitHub Copilot 卡片:1,500 次 premium request 已用掉 1,062 次,方案配額 31%,聊天與補全不限次數,還有 SDK worker 上一回合的明細,含 AI credits、token 與 model call
Pro+ 方案的 Copilot——1,500 次 premium request 已用掉 1,062 次,還有 SDK worker 細到 token 與 model call 的每回合明細。
OAR 用量對話框,DeepSeek 卡片:$25.00 起始餘額已用掉 $6.60,$10.00 每月預算用了 $5.97,一張 DeepSeek Flash 與 DeepSeek V4 Pro 每日花費的 30 天圖表,花費拆成快取命中、快取未命中與輸出,還有各模型的估計花費,其中 Search 那一列算了 6 次搜尋 OAR 用量對話框,DeepSeek 卡片:$25.00 起始餘額已用掉 $6.60,$10.00 每月預算用了 $5.97,一張 DeepSeek Flash 與 DeepSeek V4 Pro 每日花費的 30 天圖表,花費拆成快取命中、快取未命中與輸出,還有各模型的估計花費,其中 Search 那一列算了 6 次搜尋
DeepSeek——目前餘額對照你的起始餘額、每月預算、每天與各模型的花費,連每一次網路搜尋都有計數。
OAR context 用量對話框:已用 318.4k token、壓縮視窗 1M,拆成系統與工具、訊息、剩餘空間和 auto-compact 保留區,另有 auto-compact 視窗的滑桿,以及 thinking 與 thinking 文字的開關 OAR context 用量對話框:已用 318.4k token、壓縮視窗 1M,拆成系統與工具、訊息、剩餘空間和 auto-compact 保留區,另有 auto-compact 視窗的滑桿,以及 thinking 與 thinking 文字的開關
連 context window 也看得到——外加 Claude 有沒有在思考,以及你要不要讀它。

有件事先說清楚:這不是帳單。配額數字來自供應商,session 花費則是 OAR 在前端依 token 數估出來的——把它當儀表看,別當請款單。

安裝

快速上手

  1. 你需要至少一個你本來就在用的供應商 CLI(Copilot、Claude、Cursor 或 Grok——或者一把 OpenAI、DeepSeek 或 Claude Console 的 API 金鑰)。Linux 和 macOS 這樣就夠了;Windows 還需要 Node.js ≥ 22.13。
  2. 跑那行指令。在 Linux 和 macOS 上,它會先說明要做什麼,只問一次。你的 Node.js 夠新就直接用,不然就下載一份只給 OAR 用的,接著把 @oar-sh/oar 裝進你的家目錄——完全不需要 root。macOS 這條路還沒測試過。
  3. 它會寫好設定檔和一組新的驗證 token、啟動中繼,並印出中繼網址和 QR code——打開就進去了。有 systemd 使用者工作階段的地方,中繼會以服務執行,重開機後自動回來。在 Windows 上,安裝程式會交給 oar setup,它會問你 token、存取範圍和連接埠;之後用 oar start 啟動中繼。
  4. 可選、而且預設關閉:讓手機直接連線的區域網路存取,用 oar setup 開啟;讓你從網路外部連進來的 tunnel 則寫在設定檔裡,用的是你自己安裝的 cloudflared。之後只要打 oar 就會開啟選單,有啟動、停止、重啟、狀態、網址和服務;終端機裡的 Copilot 工作階段是 oar copilot。

下一步:看文件裡的 首次執行——登入、在手機上打開中繼,以及之後的一切。

信任

安全性,直說

OAR 跑在你自己的硬體上,預設只綁 localhost。驗證 token 在本機產生,不會離開你的機器;遠端存取要你自己開啟,而且走一條你自己掌控的 tunnel。有一點要看清楚:被你中繼的 agent 是以你的使用者權限在跑——OAR 給你的是觸及範圍,不是沙箱。

FAQ

常見問題,一次講完

我一定要有 Copilot 訂閱嗎?
不用。任何一種 runtime 就夠了——OAR 中繼的是你本來就有的那些 agent。
agent 還在工作時,我可以傳訊息給它嗎?
可以。在 Claude 和 Copilot 預設的 SDK 引擎上,你送出的訊息會直接併入正在跑的回合,不必等它結束。如果 agent 正在等你回答提問,你的訊息會先排隊,緊接在回答之後送出。
Windows 上能跑嗎?
可以。中繼端跑在 Windows、macOS 和 Linux 上;瀏覽器那一端到哪都能跑。
OAR 會把我的程式碼送到哪裡去嗎?
OAR 本身什麼都不送。你的程式碼只會送到你呼叫的那幾家模型供應商,和你直接用它們自己的 CLI 完全一樣。
更新是怎麼運作的?
檢查更新要自己開啟——在設定裡啟用、或按下「立即檢查」之前,中繼端不會連線到任何地方。有新版本出現時,點一下就更新;而且只有在沒有 agent 卡在回合中時才會重啟。絕不自動進行。
可以跑在 VPS 或 homelab 上嗎?
可以——只要跑得動 Node 的地方都行。把驗證 token 顧好,寧可走 tunnel,也別開一個對外的連接埠。

Changelog

最新變更

  1. 0.9.19

    • 記憶體耗盡的中繼現在會自行重新啟動,而不是一直停著。它啟動時帶有堆積上限(RAM 的 60%,介於 2048 到 8192 MB 之間,可用 config.json 中的 heapLimitMb 設定),接近上限時會把一個堆積快照寫入資料目錄中的 diagnostics。堆積快照包含中繼端的驗證 token 和 API 金鑰:絕不要原樣分享。記錄每 10 分鐘以及堆積超過上限的 80% 時會顯示中繼的記憶體。
    • agent session 不必重新啟動,就能使用之後的中繼更新新增的供應商:relay_tool 接受任何供應商 id,中繼會依目前的清單檢查,拒絕時列出該清單。
    • Copilot 會在建立任何內容之前,以 COPILOT_MODEL_UNAVAILABLE 和最接近的候選拒絕其他供應商的模型 id,例如 Copilot 的 claude-opus-5.5 被寫成 claude-opus-5-5 時。
    • 所有變更都在版本說明中。
  2. 0.9.18

    • Claude 對話現在可以用 Claude Console 的 API 金鑰執行。Claude API 是與 Claude(你的訂閱方案)並列的供應商,費用記在金鑰所屬的 Console 組織。Settings → Providers → Claude API 存放金鑰、預設模型,以及可選的每月花費上限(美元);金鑰存放在中繼端的機器上,之後不會再顯示。New Chat 提供 Claude API,它的對話會顯示金色的「Claude API」標籤。
    • Claude 對話可以用 Subscription | API key 切換,在你的訂閱方案與金鑰之間來回,並保留它的 Claude Code session。切換從下一個回合起生效;用金鑰的第一個回合沒有提示快取,花費較高。訂閱方案的對話因 Claude 的用量上限而暫停時,如果這個對話可以改用金鑰,橫幅就會提供切換,暫停的回合會立刻改用金鑰繼續。系統絕不會自行切換;agent 也能用 relay_tool 的 send 切換 session 的計費方式。
    • 用量檢視新增 Claude API 卡片:這個中繼端用金鑰執行的回合,今天和本月估計的花費(依模型、含 token 數),以及設定時以長條顯示的每月上限。數字是 Claude Code 自己的估算;實際金額在 Console 的帳單頁面。本月估算達到上限後,用金鑰的新回合不會執行,切換到金鑰會被拒絕,新的 Claude API 對話會收到 CLAUDE_API_CAP_REACHED;這時 New Chat 會提供 Start on subscription。已經在跑的回合會跑完。
    • DeepSeek 和 Claude API 對話啟動時會關閉所有 hook,因此不會執行任何 hook 或狀態列,資料夾的設定也無法再把它們打開。managed settings 裡的 hook 仍會執行;用你的 Claude 登入的對話保留它們的 hook 和狀態列。
    • 訂閱方案的對話絕不會用 Claude Code 設定交給它的 API 金鑰執行(env.ANTHROPIC_API_KEY、apiKeyHelper 或 Console 登入)。回合會在 Claude Code 啟動時停止,並附上說明,指出金鑰的來源和該移除的設定;在那之前最多只會送出一個模型請求。
    • 中繼端的 agent 工具改名為 relay_tool(Claude 上是 mcp__relay__relay_tool),動作和欄位都不變。如果你自己的指示、權限規則或 hook 寫的是 remote_relay,請改掉:在 OAR 的 MCP 伺服器以外,舊名稱會被拒絕。
    • 所有變更都在版本說明中。
  3. 0.9.17

    • DeepSeek 成為獨立的供應商。在 Settings → Providers → DeepSeek 貼上 DeepSeek 的 API 金鑰,New Chat 就會提供 DeepSeek 的模型。DeepSeek 對話會在中繼端的機器上執行 Claude Code,連到 DeepSeek 的 API;四種模式、工具、問題卡片、子 agent、導正和背景任務都能用,reasoning effort 可選 low、high 或 max,並有 1M 的上下文視窗。
    • 金鑰存放在中繼端的機器上,絕不會送到瀏覽器,也只會交給 DeepSeek 的 worker。對話資料夾裡的 .claude/settings.json 或 .claude/settings.local.json 無法把金鑰導到別處。這項保護針對設定,不針對指令:這些檔案裡的 hook 和狀態列仍會以中繼端的使用者身分執行,和任何 Claude Code 對話一樣,所以請只在你信任的資料夾中使用 DeepSeek 對話。
    • 用量檢視新增 DeepSeek 卡片:帳戶餘額、這個中繼端上 DeepSeek 回合依模型估計的花費(依 DeepSeek 公布的價格,區分尖峰與離峰時段)、最近 30 天的每日花費,以及你設定時的每月預算。在 DeepSeek 分頁使用 Import usage export,匯出檔涵蓋的日子就會在卡片上顯示 DeepSeek 自己的數字。
    • 群組中的新 session 會出現在群組最上方。你排好的順序維持不變。
    • 中繼端自己的 Anthropic 憑證不再傳給它啟動的 agent:ANTHROPIC_API_KEY 和 ANTHROPIC_AUTH_TOKEN 不會傳給任何 worker,中繼端環境中的 Claude 登入權杖也只會傳給 Claude 與 Claude Cloud 的 worker。原本用這類金鑰執行的 Claude 對話,現在改用主機的 Claude 登入。
    • 修正:Inbox 會在最上方,或你上次離開的位置開啟;手機上的 session 標題列分成兩列;OpenAI 的圖片模型在 SDK 引擎上又能用了。
    • 所有變更都在版本說明中。
  4. 0.9.16

    • agent 可以向你提問,同時繼續手上的工作。側邊欄新增的 Inbox 會把這個中繼端和配對中繼端上所有待答的問題集中列出。你可以在那裡或在 session 中回答;配對中繼端的核准卡片則會在該中繼端上開啟。
    • agent 可以排程提示,執行一次或每隔幾分鐘執行一次,中繼端重新啟動後排程也會保留。對話的標題列會列出它的排程,每一項都附有 Cancel 按鈕。
    • agent 可以變更另一個 session 的模型、模式、標題、群組或工作資料夾。不是由它開啟的 session,需要你先按 Allow。
    • agent 可以把它開啟的 session 放進你的 session 群組;監看 session 的 agent 也可以要求少被喚醒一點:每隔幾分鐘收一份摘要、設定安靜時段,或排除某些 session。
    • 由 agent 開啟的 session,在 🧠 設定中新增了一個開關,讓其中的 agent 也能自己開啟 session。
    • 修正:中繼端事件和其他自動送出的訊息不再算作你的訊息,因此彼此不斷互相提示的 agent 會更早來問你。
  5. 0.9.15

    • 在 Windows 上,oar setup 會詢問中繼的啟動方式:登入時、開機時(在任何人登入之前,需要一次系統管理員確認),或不自動啟動。之後可用 oar autostart signin|boot|off|status 切換並查看目前的設定。
    • oar uninstall 會停止中繼、移除 OAR 建立的自動啟動項目,再移除套件。設定、對話和上傳的檔案會保留,並告訴你位置;--purge 會在你輸入 delete 後一併刪除。
    • 拒絕系統管理員確認不會改變任何東西;設定檔路徑含有空格、撇號或 ü 這類非 ASCII 字元時,開機模式也能正常運作。
    • 手動建立的自動啟動工作,或只有系統管理員能讀取的工作,絕不會在沒有備份的情況下被刪除或取代:OAR 會停下來要求 --replace,它會先保留一份備份。在 0.9.14 中,切換到開機模式可能會在沒有備份的情況下刪除這類工作。
    • npm 套件變小了:兩份給開發者的 README 只放在 GitHub 上。
  6. 0.9.14

    • 在使用 Windows 自動啟動,或由單純的 gh copilot 啟動的中繼端,從 0.9.13 更新之前:這些中繼端把對話存在已安裝的套件裡,更新時會跟著套件一起被刪除。請關閉所有 gh copilot session 並執行 oar stop(若中繼端仍在執行,請在工作管理員中結束它的 node.exe),把套件的 server\data 與 server\uploads 資料夾複製到安全的地方,再用 npm i -g @oar-sh/oar --allow-scripts=@oar-sh/oar,better-sqlite3,koffi 更新;絕對不要使用 --ignore-scripts。所有步驟都在版本說明中。
    • 自動啟動與 gh copilot 的中繼端現在與 oar start 使用相同的資料,位於套件之外。更新會在 npm 移除舊版本之前,複製舊版本存放在套件中的資料,中繼端則在下次啟動時接手。不會刪除任何東西;若中繼端無法判斷哪個資料庫較新,它會停下來並說明。
    • 當機或斷電留下的中繼端鎖不會再擋住下一次啟動,兩次啟動也不會再同時執行。Windows 自動啟動會等候 %TEMP% 與資料所在的磁碟機最多 5 分鐘,RAM 磁碟或較晚掛載的磁碟機不會再讓它出錯。
    • Cursor 對話在更新後會保留它的 agent,上傳檔案會跟著設定中的 dataDir,oar setup --migrate-from 在安裝程式執行過後也能使用。
    • agent 可以要求在中繼端重新執行時被喚醒(relay_restarted),讓工作在重新啟動後繼續。agent 的預覽工具只會列出並關閉它自己對話的預覽。
    • 核准卡片以點選作答,而不是輸入文字:在回覆框輸入的「yes」不再被當成拒絕。
    • 修正:資料夾已被刪除或改名的對話會直接說明,而不是歸咎於 CLI;回答問題不再導致長回合被重送;恢復執行的子 agent 能開啟它的記錄,並在執行期間列出;每個接受 reasoning effort 的 Cursor 模型都會收到設定的 effort。
  7. 0.9.13

    • 中繼端重新啟動:🌄 Restart web relay 會先列出它要等候的執行中回合、會暫留的訊息,以及背景任務,並標明每一項是否會繼續執行;Restart when idle 會把重新啟動排入佇列,Restart now 則不等待。等候期間,每個頁面都會顯示橫幅,列出 session、已等候的時間,以及 Restart now 與 Cancel restart。
    • 排入佇列的重新啟動不會再無限期等下去:超過你在 Settings › General 設定的時間(預設 30 分鐘)後,橫幅與推播通知會詢問要立即重新啟動、繼續等候還是取消。只要還有回合在執行,它絕不會自行重新啟動。
    • 可在 Settings › General 開啟:中繼端重新啟動後,回合被重新啟動打斷的 session 會收到一則簡短的提醒,請它確認剛才在做什麼並繼續。你的訊息絕不會重送。
    • 任務主控台能撐過中繼端重新啟動:已結束的列會帶著 ✓ 或 ✘ 回來,執行中指令的輸出也能立即讀取。它會標出 | tail 擋住輸出的位置,並提示改把輸出記錄到檔案;在寬螢幕上,任務的列與它的 Stop 會一直顯示在主控台下方。
    • Load earlier 也放到了主控台的標題列;測試執行改以完整記錄計數,不再只看最後 64 KB;vitest 的 RUN、PASS、FAIL 標籤會以實心顯示。
    • 由腳本或 agent 送出、未指定模型的訊息,會沿用對話的模型、effort 與模式,不再切換成清單上的第一個模型。remote_relay 會拒絕供應商未列出的模型,並指出最接近的選項(「did you mean 'gpt-5.4'?」)。
    • 觀察中的 agent 不會再被每一個順利結束的 shell 指令喚醒:預設只會得知已結束的子 agent 與失敗的任務。指定 task_finished 就能像以前一樣收到每個任務的結束。
    • 修正:即使連線卡住,worker 也會在中繼端重新啟動後重新連線;任務列描述與摘要中的憑證會被遮蔽;載入較舊訊息後立即的捲動不會再被復原,⌄ 標籤也會計入你往上捲動那一刻到達的訊息;任務面板不會再短暫縮回;單元測試在 Windows 上再次通過。
  8. 0.9.12

    • 任務主控台:在任務面板點一下背景指令或監看器,就能即時閱讀它的輸出——保留顏色、遮蔽憑證、進度列只留最後狀態,Load earlier 可往回翻完整份記錄,還有自己的 Stop。Claude 的背景 shell 與監看器、Copilot 分離與附加的 shell,以及 Grok 的終端機都能開啟。
    • 安靜的任務與測試執行:任務列會顯示「no output for 12 min」,超過你在 Settings › General 設定的時間(預設 10 分鐘)就變成琥珀色;測試執行(vitest、Playwright、node:test、jest、pytest)會顯示 ✓ 412 ✘ 2 標籤,點一下就跳到第一個失敗。
    • Claude 的背景指令預設可執行 2 小時,最長 8 小時(Settings › Providers › Claude);Claude 也會被告知把長時間執行的輸出記錄到檔案,並用 nohup 啟動需要撐過重新啟動的執行。
    • 子 agent 的列會顯示步驟數;agent 可以用 remote_relay 的 read_task_output 讀取已配對中繼端上任務的輸出。
    • 長對話開啟與往回翻都很快:不論對話多長,中繼端只讀取你要的那一頁。
    • 切回某個對話或重新載入頁面時,會回到你正在讀的那則訊息,連同較舊的頁面。每個對話為此保留多少則訊息,可在 Settings › General 設定。
    • 對話清單改用顏色顯示活動:工作中的 session 標題維持亮綠色,閒置的變成較深的綠色,動畫圓點已移除。
    • 修正:在歷史記錄很上面閱讀時,新訊息不會再跳過中間的訊息——它們會等著,在 ⌄ 按鈕上計數,往下捲動時依序載入;從那裡送出的訊息會帶你到最後;較晚載入的圖片不會再把你正在讀的文字往下推;Copilot 的背景任務會回報結束方式與結束碼,不再顯示「unknown」。
  9. 0.9.11

    • Session 群組:agent 開啟的 session 會排在開啟它的 session 底下,並附上一個總結群組狀態的標籤(「3 · 1 waiting for you, 2 running」)。群組裡的事都做完後會自動收合,可以命名、整組封存或停止;收合中的成員有提問時,會顯示在群組的標題列上。
    • 拖放:把 session 拖進群組、拖出群組,或重新排序;把一個 session 放到另一個上面,就組成新的群組。手機上長按再移動;用鍵盤則是 Move up 和 Move down。
    • Settings › Sharing 列出每一個分享連結,可以複製、更新或停止分享,還有每次開啟的存取紀錄——時間、國家、瀏覽器,以及 IP 位址(除非你關掉)。
    • 分享連結不會再帶出你的路徑:可以顯示、只留檔名,或兩者都隱藏。Preview as shared 讓你看到觀看者會看到什麼,🙈 清單則集中列出對觀看者隱藏的訊息。
    • 安全性:同一個位址輸錯十次 token 會被鎖一分鐘;即時通道只接受中繼端自己的來源;轉送的標頭只採信受信任的 proxy;?token= 只用來登入頁面。若在其他主機上的反向 proxy 後面,請設定 trustProxy 和 allowedOrigins。
    • Day/Night 回到 ⋯ 選單,旁邊是新的 About OAR:版本、供應商、累計數字和中繼端的健康狀態一目了然。
    • 修正:預覽連結在中繼端重新啟動後仍然有效;重新啟動不會再忘記正在跑的背景任務;worker 在重新啟動後會重新連線,PATH 裡沒有 node 也能啟動;往上捲動閱讀時,對話不會再自己捲動;閱讀器裡的寬表格會在自己的框內捲動。
  10. 0.9.10

    • agent 監看 agent:agent 可以訂閱其他 session,不論是在自己所在的中繼端,還是配對好的中繼端,那邊發生的事都會把它叫醒——等著回答的提問、錯誤、回覆、跑完的背景任務、安靜下來的 session。訂閱只負責通知,不會核准任何事。對話裡的第一筆訂閱會用卡片先問過你,標題列會顯示 watching N sessions,每一筆都附有 Unsubscribe。
    • 打開 subagent 的完整紀錄:它的思考、每一次工具呼叫的輸入和結果,還有它的回覆,執行中也會即時更新。工具輸出要保留多久,由 Settings → General 決定。
    • agent 之間的註記會收合成一列,展開就看得到提示和回覆。agent 可以查詢各家供應商的方案還剩多少,也看得出某個 session 是在工作、在背景忙碌,還是閒置。
    • 檔案瀏覽器可以建立資料夾,也能重新命名、刪除檔案和資料夾——按右鍵,手機上則是長按。
    • ⌄ 按鈕會跳回最新的訊息,並算出這段時間新進來幾則;串流中的回覆和剛啟動的背景任務,對話紀錄都會一路跟著。
    • 要封存的 session 若處理程序還在跑,會先問過你;還沒有任何對話時,設定也打得開。
    • 修正:中斷的 websocket 不會再讓中繼端當掉;在手機上點 ⌄ 不會再跳出鍵盤;排進佇列的中繼端重新啟動,不會再因為中繼端忙碌而無止境地等下去;主機從睡眠中醒來,不會再重新啟動正在跑的回合;Cursor 的回合在等一個跑很久的指令時,不會再被當成卡住而結束;切換對話後立刻送出的訊息,會出現在你送出的那個對話裡。
  11. 0.9.9

    • 只打 oar 就會開啟選單:顯示中繼是否在跑,連同版本、網址、連接埠、存取範圍和服務,並提供啟動、停止、重啟、網址和 QR code、設定、服務、更新和 doctor。新指令:oar stop、oar restart、oar status、oar url 和 oar service;終端機裡的 Copilot 工作階段改為 oar copilot。oar setup 會問存取範圍(只有這台機器,或區域網路)和連接埠,改過的設定會送到正在跑的中繼。
    • 檔案填滿整個畫面:圖片、影片和音訊在黑底上,文字排成好讀的一欄。在資料夾裡或對話的媒體之間滑動翻頁,方向鍵也行;PDF 用瀏覽器自己的檢視器開啟,音訊直接在檢視器裡播放,返回手勢只會關閉檢視器,不會關掉別的。
    • 釘選訊息:每則訊息在 Hide 旁邊多了 Pin 按鈕(手機上點一下對話泡泡就會出現);有釘選的對話會在標題列顯示帶數量的 📍 按鈕,清單會帶你跳到那則訊息,就算它在歷史紀錄很上面也一樣。
    • 下載拿到的是檔案現在的樣子:連結帶著檔案的版本,存檔名稱帶著最後修改的時間,而且中繼和你之間的任何快取都不能留住 API 的回應。
    • 內建的 Cloudflare tunnel 改用你自己安裝的 cloudflared;隨附的那份拿掉了。如果你用過 tunnel,更新後請安裝 cloudflared——中繼一找到它就會把 tunnel 跑起來。
    • 供應商 SDK:Copilot SDK 1.0.17、Claude Agent SDK 0.3.292、Cursor SDK 1.0.36。
    • 修正:PDF 又能在瀏覽器的檢視器裡開啟了;音訊檔和 SVG 會以它們本來的類型送出;上傳的影片可以拖動進度;日文、中文或 emoji 名稱的檔案又能送出了;跳到歷史紀錄的某處之後,畫面會停在那裡。
  12. 0.9.8

    • OAR 有標誌了:一隻水獺。啟動畫面、登入框、分頁圖示和已安裝 App 的圖示都會跟著日間與夜間模式切換,主題在第一次繪製之前就套用好。
    • 已安裝的 App 一氣呵成地啟動:它的啟動畫面會接續手機的開啟畫面。
    • Claude session 壓縮 context 的時候,進行中的回合上方會出現一行 Compacting context…;結束後變成 Context compacted,並附上 token 數。
    • 改過的 auto-compact 視窗現在真的會生效:session 會在裡面沒有東西在跑的時候重新啟動一次,回覆裡也會註明。
    • Linux 和 macOS 的安裝程式把事情做完:只確認一次,你的 Node.js 沒有或太舊時自帶一份,不需要 root,結束時中繼已經在跑。新指令:oar start 和 oar setup --start。
    • 捲軸用滑鼠更好抓:游標停在上面時,捲軸會變成兩倍寬。
  13. 0.9.7

    • Claude Cloud(實驗性功能,預設關閉):在 Anthropic 的沙箱裡執行 Claude Code 的對話,用的是某個 GitHub 儲存庫的獨立副本。從清單挑選儲存庫和分支,即時看著回合進行、回答它的提問、停止它、在回合之間切換模型;成果會以推送的分支回來。
    • 對話可以封存而不必刪除;在對話上按右鍵(手機上長按)會開啟選單:開啟、重新命名、停止、強制結束、封存、刪除。
    • Agent session:開啟之後,agent 可以在自己所在的中繼端上啟動其他 session,等待它們並讀取結果。
    • Claude session 的 commit 和 pull request 會帶上 Co-authored-by: Open Agent Relay (模型);可依中繼端和資料夾選擇 OAR、Claude Code 自己的署名或不署名。
    • Check Usage 會立刻以上次的讀數開啟,只即時讀取目前開啟的分頁。
    • 修正:同一段落裡的兩個價格不會再被顯示成公式;提到錯誤代碼的回覆不會再被存成失敗的回合;在 Windows 上,中繼端讀取處理程序清單時不會再卡住。
  14. 0.9.6

    • Claude 的 session 碰到用量上限時會先暫停,額度重置後再接著做:橫幅會告訴你何時繼續,並附上 Resume now 和 Cancel,就算中繼端重新啟動,暫停狀態也還在。如果重置時間在六小時之後,就會等你決定;另一個橫幅則會在用量達到上限的 90% 時先提醒你。
    • 沒有任何輸出的指令,不會再讓回合失敗(Copilot、Cursor、Grok):沒有進行中的工作時,回合可以安靜 2 分鐘;模型請求進行中可以 5 分鐘;工具執行中可以 30 分鐘。
    • Copilot 的回合就算失敗,也失敗得漂亮:錯誤會立刻顯示,agent 已經寫出的文字就在上方;卡住的回合按 Stop 停得下來;已完成的回覆撐得過中繼端重新啟動;runtime 掛掉時,它的指令會被停掉;指令還在跑時送出的訊息,會等它跑完再處理。
    • 配對好的中繼端上,agent 可以在整個 session 裡互相回應;agent 之間連續傳了 30 則提示而你都沒出聲時,下一則會先問過你。
    • subagent 在正在跑的回合裡會收合成一行標題,計畫看板則放在它所屬的回覆裡——你的選擇也會一併設定 session 的模式。
    • 失敗時的註記不會再建議你重新啟動中繼端,中繼端也會把主控台輸出保存在 relay-console.log。
  15. 0.9.5

    • Claude 的回覆有時會以背景接續的形式發佈,而不是出現在你的訊息底下;這種情況不會再讓對話卡住長達 5 分鐘。大約 45 秒沒有動靜後,你的訊息就會結束,並附上一則小註記,指出那則回覆在哪裡。
    • agent 在另一個中繼端開新 session 或傳訊息過去時,可以設定那邊的 reasoning effort。
    • 等待另一個中繼端的回覆時,不會再因為遠端 agent 先給了中途回覆就停下來;只要它還在做事,就會繼續等。
    • Windows 上的 session worker 現在也會寫 worker 記錄檔,跟 Linux 一樣。
  16. 0.9.4

    • 遠端中繼端:在 Settings → Relays 把兩個中繼端配對起來,一邊的 agent 就能列出、讀取另一邊的 session,傳訊息過去,也能直接開新的 session。
    • 配對好的中繼端,要等你在對話裡提到它才會解鎖。每個中繼端的權限由你決定,在 Ask 和 Plan 模式下,寫入動作都會先問過你,token 則始終留在中繼端上。
    • 透過新的 OAR MCP server,Grok 和 Copilot 的 extension 引擎終於拿到真正能用的工具。
    • 緊跟正在跑的回覆:三個切換鈕能讓它的思考、回答或工具清單隨著內容變長,一直留在畫面上。
    • Suspend host(Windows)會等 agent、背景任務和 CI 都跑完才讓主機休眠;Stop 也會先問過你,才取消回合。
    • 修正:切換 Claude 模型後,下一則訊息不會再卡住;閒置連線會保持開啟 65 秒。
  17. 0.9.3

    • 回合中途導正:agent 還在做事時照樣發訊息,Claude 和 Copilot 都行,訊息會直接併入正在跑的回合。
    • Copilot 的背景 agent 和 shell 會出現在任務面板裡,附上它跑的模型、正在執行的工具呼叫,還有真的停得下來的 Stop。
    • 提問卡片可以選好幾個答案。
    • 草稿跨裝置也安全了:閒置的裝置不會再蓋掉你正在打的字。
    • 標題篩選能搜尋所有對話;手機轉向時也會保住你讀到的位置。
    • 刪除對話時,也會停掉它的 worker,並移除 OAR 為它建立的 CLI session。
  18. 0.9.2

    • 自我更新,預設關閉:從設定裡更新,或用 oar update。你沒開口之前,不會有任何東西去查版本。
    • Copilot 預設改跑 SDK worker 引擎。
    • 圖片、影片和音訊直接內嵌在 agent 的回覆裡——點一下就能開啟、放大、下載。
    • Copilot 的模型清單修正了:真實的 context window、各模型各自的 reasoning effort。
    • Windows 上可以在系統啟動時就把中繼端拉起來,不必等人登入。
    • 一整批 session、佇列與 worker 的穩定性修正。
  19. 0.9.1

    修好全域執行檔,裝完之後 oar 找得到了。

  20. 0.9.0

    以 OAR — Open Agent Relay 之名推出的第一個版本。

GitHub 上的完整發行說明