relay_tool 0.9.4 新增
有了 relay_,agent 就能操作其他 session:列出並讀取它們、對其中一個下提示、啟動新的 session、等待回覆、回答另一個 agent 提出的問題、停止或封存 session,還可以要求在它監看的 session 發生事情時被喚醒。
它能連到兩種中繼:
- 此中繼,也就是 agent 本身執行所在的中繼。agent 可以把部分任務交給這裡的其他 session。在你啟用之前都是關閉的。0.9.7 新增
- 配對的中繼,也就是你已和此中繼配對的其他 OAR 中繼,例如你工作站上的中繼和伺服器上的中繼。在每個對話中都是鎖定的,直到你提到該中繼。
每個提供此工具的供應商,工具都相同;哪些供應商提供、用什麼名稱,請見依供應商。
名稱 0.9.18 新增 #
在 0.9.17 及更早版本中,這個工具叫做 remote_。現在它在每個供應商上都列為 relay_(Claude 的 agent 看到的是 mcp__),動作和欄位都相同。以舊名稱寫下的工具記錄行,仍會顯示為這個工具。
- 你更新時正在執行的 session。 session 的 agent 在它的 worker 啟動時取得工具清單,而 worker 在中繼重新啟動期間會持續執行。這類 session 的 agent 仍以
remote_的名稱持有這個工具,直到它的 worker 再次啟動,例如在 Kill session(強制結束 session)之後。它的呼叫照樣有效:不論用哪個名稱,都以相同方式到達中繼。中繼以 Linux 服務執行時,worker 可能會隨中繼一起停止,回來時就會使用新名稱。relay - OAR 自己的 MCP 伺服器(Grok 和 Copilot 的擴充功能引擎使用它)仍會執行對
remote_的呼叫,但不再列出它。relay - 你自己的指示。 如果你的指示、權限規則或 hook 提到
remote_或relay mcp__,請改成relay__ remote_ relay relay_或tool mcp__:在 OAR 的 MCP 伺服器之外,舊名稱會被拒絕。relay__ relay_ tool
你會看到什麼 #
- 核准卡片。 在 agent 於對話中啟動第一個 session 之前、第一次監看 session 之前,以及對話處於 ask 或 plan 中繼模式時的每個寫入動作之前,提問卡片都會先詢問。
- 回覆中的工具呼叫。 agent 的活動會以 🛰️ 顯示每次呼叫,以及動作、中繼和 session。
- 「via agent」(經由 agent)。agent 啟動的 session 會在對話清單中和它的標題下方帶有 via agent · "title"(經由 agent · 「title」),寫出 agent 所在的對話。0.9.11 新增 它位於該對話下的 session 群組中,0.9.16 新增 或位於 agent 指定的現有群組中。
- 「↗ from …」(來自 …)。agent 傳送的提示,在接收端會帶有一個徽章,寫出傳送端的中繼、session 和模型。
- 監看。 監看其他 session 的對話,標題列會顯示 watching N sessions(正在監看 N 個 session);小標籤會列出它的訂閱,每個訂閱都有一個 Unsubscribe(取消訂閱)按鈕。被監看的 session 會顯示 watched(監看)徽章。
啟用 #
只要下列至少一項成立,agent 就會取得 relay_:
| 要讓 agent 操作 | 這樣做 |
|---|---|
| 此中繼 | 開啟 Settings → Relays → Agent sessions → Agents may start and use sessions on this relay(設定 → 中繼 → Agent session → agent 可在此中繼上啟動並使用 session)。預設關閉。 |
| 另一個中繼 | 在 Settings → Relays 下配對它,然後在對話中提到它(@name)。 |
session 在它的 agent 處理程序啟動時,才會知道自己是否取得這個工具,所以已經在執行的對話,可能要等它的 agent 再次啟動後才會有這個工具。
指定中繼 #
除了 list_ 以外,每個動作都作用於一個中繼,以 relay 指定:
"this",或此中繼自己的名稱,就是 agent 執行所在的中繼。不需要提到它。- 配對的中繼以它的中繼名稱或主機指定,和
list_顯示的一樣。relays
四個訂閱動作,以及 0.9.16 新增 三個排程動作和三個提問動作,可以省略 relay,此時代表 "this"。排程只能在此中繼上運作。
鎖定與解鎖 #
配對的中繼在對話中會保持 locked(已鎖定),直到發生下列其中一件事:
- 你在自己的某則訊息中提到它:輸入
@並選取它,或寫出它的名稱或主機名稱。名稱是 IP 位址或localhost的中繼,只有前面加上@才算數。 - 該中繼上的 agent 在對話中寫入訊息。之後該中繼就會開放,讓這裡的 agent 可以回答。
一旦解鎖,它在對話的其餘部分都保持開放。鎖定的中繼會拒絕 list_ 以外的每個動作;agent 會被告知要請你提到該中繼。
權限與核准 #
配對的中繼允許什麼 #
每個配對的中繼在 Settings → Relays 下都有一個 Agents may(agent 可以)等級。新的配對一開始是 Full(完整存取)。
| 等級 | 動作 |
|---|---|
Read only(唯讀)(read) |
relay_、usage、list_、read_、read_、wait、subscribe、unsubscribe、list_、transfer_ |
Read and prompt(讀取並傳送提示)(prompt) |
上述全部,再加上 send |
Full(full) |
上述全部,再加上 create_、0.9.16 新增 update_、answer_、stop、archive |
list_ 不需要任何等級。此中繼本身一律算作 Full。
在另一端,Accept prompts from other relays' agents(接受其他中繼 agent 的提示)(配對中繼上的 Settings → Relays)會關閉其他中繼的 agent 在那裡可能變更或監看的一切:對 session 下提示、啟動、回答、停止和封存 session,以及訂閱它們。列出和讀取 session、讀取任務輸出、等待、relay_ 和 usage 仍然可用。
什麼時候會詢問你 #
| 情況 | 會發生什麼 |
|---|---|
對話處於 ask 或 plan 中繼模式,而 agent 呼叫寫入動作(send、create_、update_、answer_、stop、archive) |
每次都會有提問卡片詢問你。 |
0.9.16 新增 對話第一次對某個中繼上、不是由這個對話啟動的 session(你的、另一個 agent 的,或啟動這個 agent 的那個)呼叫 update_ |
卡片會寫出 session 以及會變更的內容。Allow(允許)涵蓋該對話之後對該中繼上這類 session 的變更。Deny(拒絕)會拒絕這次呼叫。請見 update_。 |
對話中第一次在此中繼上呼叫 create_ |
核准卡片會顯示供應商、資料夾或儲存庫、0.9.16 新增 它指定的群組,以及提示。Allow 涵蓋該對話的 agent 之後啟動的每個 session,中繼重新啟動後也一樣。Deny 只拒絕那一次呼叫。 |
對話在某個中繼上第一次 subscribe,以及每次對 all 的 subscribe |
核准卡片會寫出 session 和中繼。 |
transfer_ |
一律詢問。 |
| agent 在沒有你的訊息的情況下,已對其他 agent 傳送 30 個提示 | 下一個會先詢問。Allow 會重新開始計數。0.9.16 新增 只有你寫的訊息才會重設計數;中繼事件、用量上限的後續訊息,以及重新啟動後的註記都不會。對其他 session 的排程也會計入(排程)。 |
0.9.16 新增 在 ask 或 plan 模式下為另一個 session 呼叫 schedule |
提問卡片會寫出時間和提示。為 agent 自己的對話排程則不會詢問。 |
此中繼上 session 的規則 #
- 最多 4 個同時工作。 在一個對話的 agent 啟動的 session 中,最多 4 個可以同時有排入佇列或執行中的回合。第五個會被拒絕,直到其中一個完成。
- 只有一層。 由 agent 建立的 session 本身不能建立 session,0.9.16 新增 除非你為它開啟了 Agents in this conversation may start sessions(允許此對話中的 agent 啟動 session)。此時
list_和sessions read_會顯示session "may。沒有任何 agent 能設定這個開關。Create Sessions": true - 不能對自己。 agent 不能對它所在的對話
send、wait、stop或archive,也不能回答自己的問題,0.9.16 新增 或變更它的設定。 - 你的帳戶。 agent 啟動的 session 使用此中繼的供應商帳戶,並計入它們的用量。
- 中繼永遠不會自行封存這些 session。它們會留在你的清單中,直到你封存或刪除它們,或由 agent 封存其中一個。
跨中繼 #
- 已經跨過兩個中繼的提示,不會再傳給第三個中繼,除非該中繼是你自己解鎖的。讀取和等待永遠不受此限制。
- 另一個 agent 收到的提示,開頭會有一行說明是另一個 agent 在和它對話:
[Remote prompt from an agent on relay "…" · session "…" · model · acting for the user]。 - 以這種方式啟動的回合,不會在另一個中繼上傳送「reply ready」通知。提問卡片仍會通知。
- 遠端位址必須使用
https://。純http://只接受迴路位址和私人網路範圍。
動作 #
每次呼叫都要指定一個 action。下表列出每個動作需要什麼;等級是配對中繼上允許該動作的最低 Agents may 設定。
| 動作 | 作用 | 需要 | 等級 |
|---|---|---|---|
list_ |
各個中繼,以及每個是否已解鎖 | 無 | |
relay_ |
中繼的供應商、模型和資料夾 | relay |
read |
usage |
每個供應商的方案還剩多少 | relay |
read |
list_ |
尋找 session | relay |
read |
read_ |
讀取 session 最近的訊息 | relay、session |
read |
read_ |
讀取背景指令輸出的結尾 | relay、session、task_ |
read |
send |
對現有的 session 下提示 | relay、session、text |
prompt |
create_ |
以第一個提示啟動 session | relay、text |
full |
update_ |
0.9.16 新增 變更 session 之後回合的設定 | relay、session、一項設定 |
full |
wait |
繼續等待回覆 | relay、session、message_ |
read |
answer_ |
回答另一個 agent 提出的問題 | relay、question_、answer 或 choices |
full |
stop |
停止執行中的回合 | relay、session |
full |
archive |
封存 session | relay、session |
full |
subscribe |
在 session 發生事件時被喚醒 | sessions |
read |
unsubscribe |
結束訂閱 | subscription_ |
read |
list_ |
顯示訂閱 | read | |
transfer_ |
接手另一個對話的訂閱 | from |
read |
schedule |
0.9.16 新增 讓此中繼稍後把提示排入佇列,一次或重複 | text、at 或 every_ |
僅限此中繼 |
list_ |
0.9.16 新增 顯示對話的排程 | 僅限此中繼 | |
unschedule |
0.9.16 新增 結束排程 | schedule_ |
僅限此中繼 |
ask |
0.9.16 新增 向你提問,但不等待回答 | question |
自己的 session 不需要;其他 session 需要 prompt |
list_ |
0.9.16 新增 顯示對話的 ask 提問 | read | |
withdraw |
0.9.16 新增 收回 ask 提問 | question_ |
read |
結果是 JSON。成功的呼叫有 "ok": true、它作用的 relay,以及一行 summary;失敗的呼叫有 "ok": false、code 和 error 文字(錯誤)。下方範例顯示主要欄位,名稱和 id 都是虛構的。
0.9.16 新增 動作不接受的引數,絕不會被默默丟棄。create_ 和 update_ 會以 REMOTE_ 拒絕呼叫,列出自己的引數,而且不做任何變更:
create_
其他動作仍會執行,並在結果的 ignored 中列出它沒有接受的引數,最多 20 個。空值(null、""、false 或空清單)算作沒有引數,因為有些供應商會傳送每個欄位。
尋找中繼與 session #
list_relays #
列出配對的中繼,包含 name、url、online、version、permission 和 unlocked。agent session 開啟時,此中繼會排在最前面,並標示 "self": true。也會傳回此中繼的等待上限。它是唯一不需要提到中繼、也不需要 relay 就能運作的動作。
{ "action": "list_relays" }
{
"ok": true,
"summary": "list_relays: 2 relays, 1 unlocked",
"self": { "name": "desk" },
"relays": [
{ "name": "desk", "self": true, "online": true, "version": "0.9.19", "permission": "full", "unlocked": true },
{ "name": "build-box", "url": "https://build-box.example.com", "online": true, "version": "0.9.19", "permission": "full", "unlocked": false }
],
"limits": { "maxWaitSeconds": 600, "maxActiveSessions": 4 }
}
relay_info #
中繼提供什麼,讓 agent 可以為新 session 選擇供應商、模型和資料夾:它的名稱、版本和平台、是否接受 agent 提示、每個供應商及其預設模型、模型和 reasoning effort、預設和最近使用的工作資料夾,以及中繼模式。
{ "action": "relay_info", "relay": "build-box" }
0.9.16 新增 它也會在 groups 中列出中繼的 session 群組,也就是在那裡呼叫 create_ 時可以指定的群組:每個都有 id、name(側邊欄顯示的名稱;沒人命名的群組則是主 session 的標題)和 member,最近有活動的群組排在最前面。只會列出至少有一個未刪除 session 的群組,最多 50 個;超過時,groups 會說明總共有多少個。其中不含成員 id 和標題。無法讀取中繼的群組時(例如因為它執行的是較舊的 OAR),groups 為 null,groups 會說明原因,並說明 create_ 在那裡不能使用 group。
"groups": [
{ "id": "grp_…", "name": "Release 2.4", "memberCount": 3 },
{ "id": "grp_…", "name": "Review: server/", "memberCount": 2 }
]
usage 0.9.10 新增 #
中繼上每個供應商的方案還剩多少;請見 Check Usage(檢查用量)。它讓 agent 在開始會花錢的工作之前先檢查:每個供應商的狀態及其計量(已用、額度、剩餘、使用率、重設時間),以及那裡是否有 Claude 用量上限暫停了回合。未設定或未追蹤的供應商會說明這點。絕不包含帳戶名稱、位址和 token。
{ "action": "usage", "relay": "this" }
list_sessions #
列出 session,包含 id、title、provider、model、state、cwd、最後活動時間和訊息數。state 為 running_、background_(agent 已回答,背景工作仍在執行)或 idle;tasks 列出背景 agent 和 shell 任務。
0.9.11 新增 session 群組中的 session 也有 group:它的 id、name,以及 session 在其中的 role,head 或 member。0.9.16 新增
create_ 可以把它建立的 session 放進現有的群組,而 update_ 可以把 session 移進某個群組(包括新群組),或移出群組。重新命名、解散和重新排列群組仍由你負責。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
scope |
active | recent | all |
recent |
active:目前正在工作的。recent:最新的在前。all:逐頁瀏覽全部。 |
query |
文字 | 只列出標題包含此文字的 session | |
limit |
1–100 | 20 | 每頁數量 |
cursor |
文字 | 上一頁的 next |
{ "action": "list_sessions", "relay": "build-box", "scope": "active" }
read_session #
讀取 session 最近的訊息,以及那裡正在發生的事:它的 state、仍在撰寫中的回覆(in),以及任何等待回答的 pending(0.9.16 新增 每個都有 kind:ask 提問為 ask,session 正在等待的卡片為 ask_)。0.9.11 新增 對群組中的 session,group 會加上其他成員,最多 50 個,每個都有 id、title、role、state,已封存的還有 archived。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
id | 必填 | 來自 list_ 或 create_ |
last |
1–50 | 10 | 最近幾則訊息 |
before |
文字 | 上一次讀取的 older,用來往回翻頁 |
|
include_ |
true | false | false | 包含每則回覆的工具活動行 |
max_ |
500–50000 | 12000 | 整個結果的文字預算;過長的訊息會被截斷並標示 truncated |
{ "action": "read_session", "relay": "build-box", "session": "3f9c…", "last": 5 }
0.9.12 新增 session 的每個 tasks 也有它的 task、output(是否有可用 read_ 讀取的輸出),而輸出寫在檔案中的指令還有 health:執行期間的 minutes、quiet 和 quiet(中繼的靜默設定),以及有測試執行時的 counts。
read_task_output 0.9.12 新增 #
讀取背景 shell 指令或 monitor 輸出的結尾,也就是任務主控台顯示的同一份輸出:任務執行期間,以及結束後一小時內都可以讀取。agent 不必詢問啟動它的 agent,就能查看另一個中繼上的建置是否仍在忙、已經靜默,或有測試失敗。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
id | 必填 | 執行該任務的 session |
task_ |
id | 必填 | read_ 的 tasks 中的 task |
lines |
1–500 | 200 | 最後幾行 |
結果包含 task(描述、類型、開始時間、status 和 exit)、tail(這些行,為不含顏色的純文字,重複的行標示為 [×N])、前面還有更多內容時的 truncated、任務執行期間的 stall(距離上次輸出的分鐘數,以及依中繼設定判斷的 quiet),以及輸出為測試執行時的 counts,內含執行器及其通過、失敗和略過的測試數。憑證會像在主控台中一樣被遮蔽。note 會說明何時只有輸出的結尾存在、何時輸出已不在,或何時已向 agent 的處理程序索取輸出、應在幾秒後重試呼叫。
{ "action": "read_task_output", "relay": "build-box", "session": "3f9c…", "task_id": "b7k2…", "lines": 50 }
{
"ok": true,
"summary": "read_task_output → build-box session 3f9c2a1e task b7k2m9q4: 50 lines, running, last output 14 min ago, 412 passed, 2 failed",
"task": { "id": "b7k2…", "description": "npm test", "type": "local_bash", "status": "running", "exitCode": null },
"stall": { "minutes": 14, "since": "2026-10-18T09:12:00.000Z", "quiet": true, "quietAfterMinutes": 10 },
"counts": { "runner": "vitest", "passed": 412, "failed": 2, "skipped": 0, "final": false },
"tail": ["…"],
"truncated": true
}
任務若未在執行,且不是在最近一小時內結束,會回應 REMOTE_;早於 0.9.12 的中繼會回應 REMOTE_。
下提示 #
send #
把提示排入現有 session 的佇列,並等待回覆。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
id | 必填 | |
text |
文字,最多 100,000 個字元 | 必填 | 提示 |
wait_ |
0–3600 | 120 | 等待回覆多久;0 會立即返回。請見等待。 |
if_ |
queue | fail |
queue |
queue 會把提示加在執行中的回合後面,或在供應商支援時導正進該回合。fail 會在 session 忙碌時拒絕。 |
mode |
plan | ask | agent | autopilot |
呼叫者的模式 | 該回合的中繼模式 |
model |
文字 | session 保留自己的模型 | 把 session 切換到這個模型。0.9.13 新增 會先檢查:請見接受哪些模型 |
effort |
文字 | session 保留自己的設定 | reasoning effort,例如 low、medium、high;由另一個中繼決定它的模型是否接受。DeepSeek session 執行 low、high 或 max,並把其他名稱對應到這些值,例如 medium 對應到 high(DeepSeek) |
provider |
claude | claude- |
session 保留它的計費方式 | 0.9.18 新增 僅適用於 Claude session:claude(訂閱)或 claude-(API 金鑰)。指定另一種計費方式,會從下一個回合起切換 session,並一併傳送這則訊息。請見切換計費方式 |
{ "action": "send", "relay": "build-box", "session": "3f9c…", "text": "Did last night's deploy go through? Answer in two lines." }
{
"ok": true,
"relay": "build-box",
"status": "done",
"session": "3f9c…",
"message_id": "b41e…",
"reply": { "text": "Yes. The deploy finished at 02:14 and the health check is green.", "model": "…" }
}
切換 Claude session 的計費方式 0.9.18 新增 #
帶有 provider 的 send 會在一次呼叫中,把 Claude session 在訂閱和 Claude API 金鑰之間移動,並傳送訊息:被拒絕的切換不會傳送任何東西,被拒絕的訊息也不會切換任何東西。另一種計費方式必須已在目標中繼上設定好。需要詢問時,核准卡片會寫著 Switches billing to API key 或 Switches billing to subscription。
- 目標中繼拒絕切換時,若是那裡未設定 Claude API 或 Claude,或已達到每月上限,會回傳
REMOTE_;若是 session 的模型不在另一方的清單上,會回傳RELAY_ PROVIDER_ UNAVAILABLE REMOTE_。RELAY_ UNKNOWN_ MODEL remote帶有該中繼自己的代碼,例如Code CLAUDE_。API_ CAP_ REACHED - 0.9.18 之前的中繼無法切換:呼叫會以
REMOTE_被拒絕,也不會傳送任何東西。RELAY_ UNSUPPORTED - 沒有
provider時,session 保留它的計費方式。對使用金鑰、且已達上限的 session 呼叫send會被拒絕,也不會排入任何東西:請以provider: "claude"傳送,把它移到訂閱,或請使用者調高上限。
create_session #
啟動新的 session 並給它第一個提示。新的 session 對啟動它的對話一無所知,所以提示必須能獨立成立。
和 send 一樣接受 text、wait_、mode、model 和 effort,另外還有:
| 參數 | 型別 | 預設 | |
|---|---|---|---|
provider |
github | openai | claude | cursor | grok | claude- | deepseek 0.9.17 新增 | claude- 0.9.18 新增 |
呼叫者的供應商 | 必須在目標中繼上已啟用。0.9.19 新增 這個工具接受任何供應商 id;呼叫端 session 所在的中繼會依它目前擁有的供應商(也就是 relay_ 列出的那些)檢查,拒絕時會列出它們。目標中繼上仍須已啟用該供應商。因此,在 0.9.19 或更新版本上啟動的 session 不必重新啟動,就能使用之後的更新新增的供應商 |
model |
文字 | 目標提供時為呼叫者的模型,否則為目標的預設模型 | 0.9.13 新增 會先檢查:請見接受哪些模型 |
cwd |
路徑 | 目標的預設資料夾 | 工作資料夾。不能和 claude- 一起使用。 |
repo |
owner/ 或 GitHub 網址 |
只能和 claude- 一起使用,而且在那裡是必填:雲端 session 要複製的儲存庫 |
|
branch |
分支名稱 | 儲存庫的預設分支 | 只能和 claude- 一起使用 |
title |
文字 | 提示的第一行 | session 標題 |
group |
群組 id(grp_)或名稱,最多 200 個字元 |
見下文 | 0.9.16 新增 目標中繼上要放入新 session 的現有 session 群組。請見放進群組 |
agent 沒有指定的部分,只要目標中繼提供,就沿用它所在的 session。OpenAI Image 對話無法以這種方式啟動。
{
"action": "create_session",
"relay": "this",
"title": "Review: server/",
"cwd": "/home/dev/projects/shop",
"text": "Review the code under server/ for missing input checks. List findings with file and line. Change nothing."
}
Claude Cloud session 接受的是儲存庫,而不是資料夾:
{
"action": "create_session",
"relay": "this",
"provider": "claude-cloud",
"repo": "example-org/sample-repo",
"branch": "feature/banner",
"text": "On branch feature/banner, change the sample banner text to \"Hello\" and push. Report what changed.",
"wait_seconds": 60
}
結果和 send 相同,再加上 session 啟動時使用的設定:provider、model、mode、effort、title,雲端 session 還有 repo / branch。0.9.16 新增 它也有 group,也就是新 session 加入的 session 群組,格式和 list_ 顯示的一樣(id、name、role),或為 null。
放進群組 0.9.16 新增 #
沒有 group 時,在此中繼上啟動的 session 會加入啟動它的 session 所在的群組,或以那個 session 為主 session 建立一個群組。在配對中繼上啟動的 session 不會加入任何群組。
有 group 時,新 session 會改為加入那個現有的群組,不論在此中繼還是配對的中繼上。agent 以群組的 id,或以 relay_ 列出的名稱指定群組,不分大小寫。空的 group 視同沒有。
{
"action": "create_session",
"relay": "build-box",
"group": "Release 2.4",
"text": "Run the release checklist in docs/RELEASE.md up to the tag. Report each step."
}
中繼在顯示任何核准卡片之前,會先在目標上查詢這個群組,就像查詢模型一樣,而卡片會寫出群組(Group: Release 2.)。下列情況不會建立任何東西:
- 目標上沒有該 id 或名稱的群組。呼叫會以
REMOTE_被拒絕,RELAY_ UNKNOWN_ GROUP error和groups會列出那裡的群組(最多 20 個,超過時有groups):Total Relay "build-box" has no session group "Relase". Groups there: Release 2. 4 (grp_ …), … No session was created. - 名稱符合不只一個群組。相同的代碼,並列出該名稱的群組:
… Pass the id. - 群組在查詢和啟動之間被解散。相同的代碼。
- 無法讀取目標的群組。對
group而言太舊的中繼會回應REMOTE_(RELAY_ UNSUPPORTED The target relay doesn't support groups on create_);沒有回應或拒絕 token 的中繼,則以它平常的代碼回應。session yet: …
session 已建立、但沒有進入要求的群組時,結果會有 group,它的 summary 以 (no group: …) 結尾,而 note 會要求 agent 告訴你。之後你可以手動移動這個 session。
create_ 只接受現有的群組。要把 session 放進新群組,agent 之後要以那個名稱呼叫 update_。重新命名、解散和重新排列群組仍由你負責。
update_session 0.9.16 新增 #
變更另一個 session 之後回合的設定,而不對它下提示,並回應它現在的設定以及變更了什麼。它可用於此中繼和配對的中繼。
| 參數 | 型別 | |
|---|---|---|
session |
id,必填 | 要變更的 session |
model |
文字 | session 從現在起的模型。檢查方式和 send 相同:請見接受哪些模型。Grok session 會保留啟動時的模型 |
effort |
文字 | 從現在起的 reasoning effort;必須是它的模型接受的值。不適用於 Claude Cloud |
mode |
plan | ask | agent | autopilot |
session 的中繼模式 |
auto_ |
token 數,或 0 |
自動壓縮視窗:100,000、150,000、200,000、300,000、500,000 或 1,000,000;其他數字會取最接近的值,0 為模型的預設值 |
title |
文字 | 新標題 |
group |
群組 id 或名稱,或 "none" |
把 session 移進那個群組;中繼沒有的名稱會建立新群組;"none"(或 null)會把 session 移出它的群組 |
thinking_ |
true | false | Claude session 在之後的回合是否思考(思考) |
thinking_ |
summarized | omitted |
Claude session 的思考文字是否顯示在對話紀錄中 |
cwd |
路徑 | session 的工作資料夾。它的 CLI 會在那裡重新啟動 |
至少需要一項設定。其他任何引數都會被拒絕,且不會變更任何東西。may 不在這些設定之中:Whether a session may start sessions is the owner's setting alone.
{ "action": "update_session", "relay": "this", "session": "3f9c…", "model": "claude-sonnet-5-5", "effort": "low", "group": "Release 2.4" }
{
"ok": true,
"summary": "update_session → desk session 3f9c2a1e: model, effort, group",
"session": "3f9c…",
"settings": {
"model": "claude-sonnet-5-5", "effort": "low", "mode": "agent", "auto_compact_window": "auto",
"title": "Review: server/", "group": { "id": "grp_…", "name": "Release 2.4", "role": "member" },
"thinking_enabled": true, "thinking_display": "summarized", "cwd": "/home/dev/projects/shop"
},
"changed": ["model", "effort", "group"]
}
變更到新資料夾時,也會說明 CLI 是否已重新啟動(relaunched),而新群組會以 group 回傳。不會變更任何東西的呼叫會回應 changed: [],也不會詢問任何人。note 帶有 agent 應該知道的事,例如視窗被取為最接近的值,或視窗和思考設定只適用於 Claude session(0.9.18 新增 包括 Claude API session),在其他供應商上不會改變任何東西。0.9.17 新增 DeepSeek session 也會收到這則註記,但在那裡視窗確實會生效,而 0 代表 400,000 token;thinking_ 則不會生效,因為 DeepSeek session 一律會思考。
誰可以變更什麼。 agent 只能自由變更由它自己的對話啟動的 session:在此中繼上,或在配對的中繼上且該中繼記錄這個對話為啟動者。其他任何 session,不論是你的、另一個 agent 的,或啟動這個 agent 的那個,都需要先取得你的 Allow。提問卡片會針對每個對話和中繼詢問一次,寫出 session 並列出變更(Model: … · Effort: … · Group: …);Allow 涵蓋該對話之後在那裡對這類 session 的變更。Deny 會以 REMOTE_ 拒絕呼叫;沒有執行中的回合可以詢問的對話,會收到 REMOTE_。另一個中繼本身也遵守同樣的規則。agent 永遠不會變更它所在的對話。在 ask 和 plan 模式下,寫入動作平常的卡片也同樣適用。
在任何變更之前,中繼會在目標上檢查整個呼叫:模型和 effort、群組、資料夾,以及是否必須詢問你。未知的模型、未知的群組 id、符合兩個群組的群組名稱、中繼不得使用的資料夾,或為忙碌中的 session 指定新資料夾,都會在任何卡片出現之前拒絕呼叫,且不會變更任何東西。
群組。
- 中繼沒有的名稱,會建立以該名稱命名的新群組。群組 id 必須存在(
REMOTE_)。RELAY_ UNKNOWN_ GROUP - 你建立的群組絕不會以這種方式被移除。當 agent 移出它的最後一個 session 時,群組會保留,並在你的側邊欄中顯示為 group · empty(群組 · 空):你可以從它的選單重新命名或解散它,或讓 agent 再次指定它。沒有任何東西會自行移除它。
- agent 建立的群組(不論是以名稱建立,還是透過啟動 session 建立),一旦變空就會消失。
資料夾。 新的 cwd 會讓 session 的 CLI 在那個資料夾重新啟動。當那裡有回合排入佇列或正在執行,或有背景任務在執行時,會以 REMOTE_ 拒絕:The session cannot move to another folder now: …。資料夾必須是中繼可以使用的。尚未啟動的 session 會保留這個資料夾,供第一次啟動時使用。如果 CLI 沒有重新啟動,資料夾仍會儲存起來供下次啟動使用,回應中也會說明。不適用於 Claude Cloud,因為它在自己儲存庫的複本上工作。
以這種方式設定的模式會持續到下一個指定其他模式、或來自其他模式呼叫者的 send 為止:沒有 mode 的 send 會傳入呼叫者自己的模式。
如果某個步驟在其他步驟已寫入後失敗,回應仍會在 changed 中列出已寫入的內容。開啟中的頁面會立即顯示每項變更。執行較舊 OAR 的中繼會回應 REMOTE_。
接受哪些模型 0.9.13 新增 #
send 或 create_ 中的 model,會在任何核准卡片之前,與目標中繼上 New Chat(新對話)為該供應商提供的清單比對,也就是 relay_ 顯示的同一份清單。不在清單上的模型會以 REMOTE_ 被拒絕,且不會建立或傳送任何東西:
Unknown model 'gpt-5-4' for Copilot on relay "build-box"; did you mean 'gpt-5.4'? Valid ids: … Nothing was sent.
結果也帶有 suggestions(相近的符合項)和 models(有效的 id)。在 0.9.13 之前,這樣的 id 會在另一個模型上建立 session,之後用該 id 呼叫的 send 都無法到達它。
0.9.19 新增 Copilot 的模型 id 使用點號:claude-,而不是 Claude 的 claude-。Copilot 會在建立任何內容之前拒絕其他供應商的 id:回傳 COPILOT_ 和最相近的符合項;在 create_ 中,如果只有另一個供應商列出該 id,則回傳該供應商的代碼,例如 CLAUDE_。Copilot session 也絕不會因為模型名稱而轉到別的供應商。
| agent 傳入 | 執行的是 |
|---|---|
| 清單中的 id,大小寫不拘 | 該模型,採用清單中的大小寫 |
opus、sonnet 或 haiku(Claude) |
清單中該名稱最新的 Claude 模型。加上 [1m] 時,若清單中有,則為它的長上下文版本 |
帶有 effort 的 Copilot id,例如 gpt- |
清單為該模型提供這個 effort 時,為 effort 設為 high 的 gpt-。同時傳入的 effort 優先 |
auto |
原樣傳遞 |
實際執行的模型與要求的不同時,結果的 model 會說明。目標中繼還沒有該供應商的清單時(它的模型探索尚未執行或失敗),模型會不經檢查直接傳遞,model 也會說明。另一個中繼的 agent 在某個中繼上啟動 session 時,該中繼也會拒絕未知的 Copilot 模型。
wait #
繼續等待 send 或 create_ 沒有及時取得的回覆。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
id | 必填 | |
message_ |
id | 必填 | send 或 create_ 傳回的 message_ |
wait_ |
0–3600 | 120 |
{ "action": "wait", "relay": "build-box", "session": "3f9c…", "message_id": "b41e…", "wait_seconds": 300 }
等待與回傳內容 #
send、create_ 和 wait 會依 agent 在 wait_ 中要求的時間等待回覆,最長為 agent 所在中繼上的 Longest wait per tool call(每次工具呼叫的最長等待)(Settings → Relays → Agent sessions):預設 10 分鐘,可在 2 到 60 分鐘之間調整。呼叫要求的時間超過中繼允許時,結果會在 note 中說明。時間到時,agent 會取得目前已有的內容,並可以再次呼叫 wait。
等待中的回合仍會計入 Settings → General(設定 → 一般)下的 Max turn duration(回合最長時間)。
結果的 status 說明另一個 session 目前的狀態:
status |
意義 |
|---|---|
queued |
提示已被接受,尚未執行任何東西。也是 wait_ 回傳的狀態。 |
running |
時間到時回合仍在執行(progress 包含目前為止的回覆及其活動),或 agent 已回答但仍在背景繼續工作(reply 包含它最新的回覆)。 |
waiting_ |
另一個 agent 提出了問題。pending 會列出它,以及它的 id、文字和選項。 |
done |
已完成。reply 包含答案。 |
failed |
回合失敗;回覆是中繼的失敗文字。 |
stopped |
回合在回答之前被停止。 |
cancelled |
沒有任何東西排入佇列或在執行,也沒有回覆。 |
duplicate |
另一個中繼把這則訊息視為它已收到之訊息的重複。 |
每個這樣的結果都帶有 session 和 message_,中繼有連結時還有 open,也就是開啟該 session 的連結。
操控另一個 session #
answer_question #
回答另一個 session 中正在等待的提問卡片。agent 會被告知先問你,除非你告訴過它們可以自己決定。
| 參數 | 型別 | |
|---|---|---|
question_ |
id,必填 | pending 中的 id |
choices |
選項標籤清單,最多 50 個 | 用於有選項的問題 |
answer |
文字 | 自由文字回答 |
choices 和 answer 必須擇一。agent 不能回答自己的問題,也不能回答中繼的核准卡片:那些由你回答。
0.9.16 新增 它也不能回答 ask 提問:answer_ 會在呼叫任何人之前,以 REMOTE_ 拒絕。
{ "action": "answer_question", "relay": "build-box", "question_id": "q_7d2…", "choices": ["Merge"] }
stop #
停止 session 中正在執行的回合,就像 UI 中的 Stop(停止)。結果會說明是已要求停止,還是沒有任何東西在執行。
{ "action": "stop", "relay": "this", "session": "3f9c…" }
archive #
封存 session。
{ "action": "archive", "relay": "this", "session": "3f9c…" }
監看 session #
0.9.10 新增 agent 不必一再詢問,而可以訂閱 session,在那裡發生事情時被喚醒。這可用於此中繼(需開啟 agent session)和配對的中繼。
訂閱只負責通知。它不核准任何事,也不回答任何事;事件所要求的事,仍和以前一樣由你決定,或由 agent 在它原本就被允許的範圍內決定。
subscribe #
| 參數 | 型別 | 預設 | |
|---|---|---|---|
sessions |
最多 50 個 session id,或 ["all"] |
必填 | all 是中繼的每個 session,包括之後建立的 |
events |
事件名稱清單 | 除了 task_ 和 task_ 以外的全部,加上 subagent_ |
0.9.13 新增 請見預設事件 |
once |
true | false | false | 觸發後結束訂閱。搭配 match 時:在第一次符合之後。 |
match |
正規表示式,最多 200 個字元,不分大小寫 | turn_ 的回覆或任務的描述與摘要必須符合;其他事件一律通過 |
|
stalled_ |
1–1440 | 15 | 工作執行期間靜默多少分鐘後觸發 stalled |
heartbeat_ |
1–1440 | 無 | 在被監看的回合或任務執行期間,每隔這麼久加入一次心跳,讓監看者知道監看仍在運作 |
digest_ |
1–1440 | 無 | 0.9.16 新增 每 N 分鐘把訂閱的事件彙整成一則訊息。請見減少喚醒 |
quiet_ |
{"from":"HH: |
無 | 0.9.16 新增 在這個每日時間窗內暫緩訂閱的事件,並在時間窗結束時送達 |
exclude |
最多 50 個 session id | 無 | 0.9.16 新增 只能搭配 sessions: ["all"]:訂閱排除的 session。也可以用逗號分隔的文字 |
relay |
中繼名稱 | this |
一個對話同時最多可有 20 個訂閱。agent 自己的對話永遠不會被監看。
{ "action": "subscribe", "sessions": ["3f9c…", "a12b…"], "events": ["question_asked", "error", "all_idle"] }
{
"ok": true,
"summary": "subscribe → desk: 2 sessions (sub_ab12cd34ef)",
"subscription": {
"id": "sub_ab12cd34ef",
"sessions": [ { "id": "3f9c…", "title": "Review: server/" }, { "id": "a12b…", "title": "Review: web/" } ],
"events": ["question_asked", "error", "all_idle"],
"once": false,
"stalledMinutes": 15
}
}
減少喚醒 0.9.16 新增 #
每次喚醒都是監看者完整的一個回合。subscribe 有三個選項可以減少喚醒。question_、question_ 和 error 永遠不會被其中任何一個暫緩;其他所有事件,包括 task_、stalled 和 all_,都會。
{
"action": "subscribe",
"sessions": ["all"],
"exclude": ["77aa…"],
"digest_minutes": 30,
"quiet_hours": { "from": "23:00", "to": "06:00", "tz": "Europe/Berlin" }
}
digest_。 訂閱的事件會被收集起來,每 N 分鐘以一則訊息送達:第一則最早在訂閱建立後 N 分鐘送出,之後每則都在上一則之後 N 分鐘。訊息會寫著minutes Digest of 4 events (subscription sub_。只有一個事件的摘要,讀起來就和該事件一樣。… every 30 min; questions and errors come at once): quiet_。 以 IANA 時區表示的每日本地時間窗。hours from和to是一天中的時間(HH:,MM 00:到00 23:),而且必須不同;時間窗可以跨越午夜。窗內發生的事會等待,並在時間窗結束時以一則訊息送達,其中有這一行:59 Held during quiet hours (23:時間窗內不會產生心跳。摘要原本會在時間窗內送達的事件,會移到時間窗結束時。00–06: 00 Europe/ Berlin): 3 events, delivered now that the window has ended; questions and errors came at once. exclude。 對allsession 的訂閱會忽略這些 session,all_、idle stalled和心跳也一樣。搭配 session 清單時會被拒絕:exclude goes with sessions ["all"] only; a list of sessions names what it watches。
時鐘調整。 時間窗依循該時區的時鐘。在時鐘撥回、to 出現兩次的那一夜,時間窗在第一次到達時結束,在重複的那一小時內不會再次進入。在時鐘撥快、跳過 to 的那一夜,時間窗在時鐘跳動的那一刻結束。一個已知的限制:落在重複那一小時內的 from,會在第一次經過時開始時間窗,而第二次經過時,from 之前的分鐘會被算作窗外。
錯誤的值會被拒絕,並說明哪裡錯了,例如 quiet_、quiet_,或 quiet_。每個欄位都是空的 quiet_ 視同沒有。
- 搭配
once。 結束一次性訂閱的事件,仍會遵守它的摘要和勿擾時段:訂閱會立即結束,事件則在它們允許時才送達。 - 多個訂閱。 監看者的多個訂閱同時收下的事件,會在其中第一個放行時送出;沒有選項的訂閱會立即放行。
- 每小時上限為 20 次喚醒,在這些選項之外仍然適用(事件如何送達)。
- 暫緩的事件以及它們的送達時間,在中繼重新啟動後仍會保留。
- 核准卡片會寫出這些選項(
digest every 30 min、quiet 23:、00–06: 00 Europe/ Berlin except 1 it leaves out)。
監看者自己的提示不會重複喚醒它。 當監看者自己以 send 或 create_ 對 session 下提示,並從那次呼叫或之後的 wait 取回完成的回覆時,那個回合的 turn_ 不會再喚醒它一次;在它仍在等待期間,turn_ 會被暫緩。該回合的錯誤和提問仍會送達。它沒有等待的提示(wait_ 且沒有 wait)會和以前一樣以 turn_ 喚醒它,結束 once 訂閱的 turn_ 也一樣。
事件 #
| 事件 | 觸發時機 | 內容 |
|---|---|---|
question_ |
提問或核准在等待回答;0.9.16 新增 也包括 ask 提問,並標示為不會卡住該 session 的提問 | 問題、它的選項和它的 question_ |
question_ |
0.9.16 新增 你回答或關閉了 ask 提問。不需在 events 中指定:接收 question_ 的訂閱也會接收它,而提問的對話即使沒有訂閱也一律會收到 |
question_、問題、你的回答、選項,或你已關閉它,以及你回答時所在的中繼(via) |
error |
回合失敗、碰到用量上限,或 session 的 agent 處理程序終止 | 種類和訊息 |
turn_ |
session 回覆了 | 回覆的開頭 |
task_ |
背景 agent 或 shell 任務已啟動。只有在 events 中指定時。 |
任務的描述 |
task_ |
背景 agent 或 shell 任務已結束。只有在 events 中指定時。 |
描述、結果、摘要 |
subagent_ |
0.9.13 新增 背景 subagent 已結束。它在訊息中的那一行寫著 task_ |
描述、結果、摘要 |
task_ |
背景 agent 或 shell 任務失敗 | 描述、結果、摘要 |
stalled |
工作仍在執行時,session 靜默了 stalled_ |
靜默的分鐘數 |
all_ |
被監看的 session 中不再有任何回合或任務在執行 |
預設事件 0.9.13 新增 #
沒有指定 events 的訂閱會收到 question_、error、turn_、subagent_、task_、stalled 和 all_。已結束的背景 subagent 會喚醒監看者,任何失敗或以非零值結束的任務也會,但順利結束的 shell 指令或 monitor 不會。忙碌的 session 大約每分鐘就會結束一個,而每一個都會讓監看者在它的完整上下文上花掉一個回合。要取得每個任務的結束,請指定事件,以 task_ 取代 subagent_,並加上 task_ 取得任務的開始。
在 0.9.13 之前建立、沒有 events 的訂閱會自行切換到這個預設;有指定事件的訂閱則保留原本的事件。執行較舊 OAR 的配對中繼會套用它自己的預設,並拒絕依名稱指定的 subagent_。
事件如何送達 #
OAR 會在監看的對話中寫入一則簡短的訊息。它會顯示為精簡的事件列,永遠不會顯示為你的訊息,而且開頭有一行說明它是什麼:
[relay event · automated message from OAR, not from the user; it approves nothing]
[relay event] session "Review: server/" (3f9c…): turn_end (done) "Found 4 places without input checks: …"
[relay event] all_idle: no turn or task is running in the 2 watched sessions (subscription sub_ab12cd34ef)
- 如果監看者閒置,這則訊息會開始一個新的回合。如果它正在回合中,請見下表。
- 30 秒內的事件會合併成一則訊息。
- 每小時超過 20 次喚醒後,其餘的會每 10 分鐘以摘要送達。
question_和asked error仍會立即送達(0.9.16 新增question_也是)。當這個摘要和訂閱的answered digest_同時發生時,會由一行minutes Digest of同時寫出兩者。 - 0.9.16 新增 訂閱的
digest_和minutes quiet_會把它的其他事件暫緩更久。hours
| 監看 session 的供應商 | 回合執行期間的事件 |
|---|---|
| Claude、DeepSeek;SDK 引擎上的 GitHub Copilot 和 OpenAI | 導正進執行中的回合 |
| Cursor、Grok、Claude Cloud;擴充功能引擎上的 GitHub Copilot 和 OpenAI | 成為下一個回合 |
在配對的中繼上 #
該中繼必須在對話中已解鎖並至少允許讀取,而另一個中繼必須接受其他中繼的 agent。單向配對就足夠。此中繼每隔幾秒取得一次事件,而這些事件的行以另一個中繼的名稱開頭:
[relay event] build-box · session "Nightly deploy" (77aa…): turn_end (done) "Deployed. The health check is green."
如果連線中斷,另一個中繼會保留發生的事,每個訂閱最多 500 個事件、最長 7 天,並在它再次回應時,以一個標記為 replayed(已重播)的列送達,位於 link_ 與 link_ 兩行之間。執行較舊 OAR 的中繼會回應它需要更新。
0.9.16 新增 對配對中繼之訂閱的摘要和勿擾時段,會在這裡(監看者所在處)套用;exclude 也會傳給另一個中繼,用於 all_、stalled 和心跳。重播的事件和其他事件一樣遵守摘要和勿擾時段;此時 link_ 那一行會說明其中有多少個被暫緩、稍後才送達。執行較舊 OAR 的配對中繼不認得 exclude:此中繼仍會丟棄那些 session 的事件,但那個中繼會在 all_、停滯判斷和心跳的清單中計入它們。
unsubscribe #
結束一個訂閱,或以 "all" 結束對話在指定中繼上持有的每個訂閱。
| 參數 | 型別 | |
|---|---|---|
subscription_ |
id 或 "all",必填 |
subscribe 傳回的 id |
{ "action": "unsubscribe", "subscription_id": "sub_ab12cd34ef" }
list_subscriptions #
顯示對話的訂閱:使用中的訂閱,以及最近一小時內結束的訂閱和結束原因。搭配 watcher 時,會顯示另一個對話的訂閱,agent 就是這樣在接手之前先查看。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
watcher |
對話 id | 這個對話 |
{ "action": "list_subscriptions" }
每個訂閱都會顯示它的 session、事件、once、match、stalled 和 heartbeat,0.9.16 新增 有設定時還有 digest、quiet 和 exclude。使用中的訂閱也會說明它的摘要或勿擾時段目前暫緩了多少個事件(held),以及其中第一個何時送達(next,沒有暫緩時為 null)。已結束的訂閱只有在它的最後一個事件仍被暫緩時才會說明,例如在勿擾時段內觸發的 once 之後。
{
"id": "sub_ab12cd34ef",
"scope": "all",
"sessions": "all",
"digestMinutes": 30,
"quietHours": { "from": "23:00", "to": "06:00", "tz": "Europe/Berlin" },
"exclude": ["77aa…"],
"heldCount": 3,
"nextDeliveryAt": "2026-10-24T04:00:00.000Z"
}
transfer_subscriptions #
把另一個對話的每個訂閱移到這個對話,例如新的 session 取代舊的監看者時。一律會以核准卡片詢問你。
| 參數 | 型別 | |
|---|---|---|
from |
對話 id,必填 | 訂閱要移過來的那個對話 |
{ "action": "transfer_subscriptions", "from": "c0de…" }
訂閱的存續期間 #
訂閱在中繼重新啟動後仍會保留。訂閱會在下列情況結束:
- agent 呼叫
unsubscribe,或你在監看者的清單中按下 Unsubscribe; - 監看者或被監看的 session 被封存;
- 它已觸發,且建立時帶有
once; - 對配對的中繼而言,配對被移除。
排程 0.9.16 新增 #
agent 可以讓此中繼稍後把提示排入佇列,排進它自己的對話或這裡的另一個 session。不同於 agent 自己 CLI 的計時器,排程在中繼重新啟動和更新後仍會保留。排程提示從你的角度說明這項功能。
排程需要 Agents may start and use sessions on this relay,即使是為 agent 自己的對話排程也一樣。排程由 agent 所在的中繼保存:指定配對中繼的呼叫會以 REMOTE_ 被拒絕。
schedule #
| 參數 | 型別 | 預設 | |
|---|---|---|---|
text |
文字,最多 20,000 個字元 | 必填 | 要排入佇列的提示 |
at |
帶時區的 ISO 時間,例如 2026- |
何時排入佇列;搭配 every_ 時為第一次的時間。不能是過去的時間,最多 366 天後。沒有時區的時間會被拒絕 |
|
every_ |
5–10080 | 每 N 分鐘重複一次;沒有 at 時,第一次是從現在起 N 分鐘後 |
|
once |
true | false | 只有 at 時為 true,有 every_ 時為 false |
第一次觸發後結束。false 需要 every_ |
title |
文字,最多 100 個字元 | 簡短的名稱,顯示在訊息和清單中 | |
session |
session id | agent 自己的對話 | 此中繼上要下提示的另一個 session |
至少需要 at 或 every_。
{ "action": "schedule", "title": "Nightly review", "at": "2026-11-02T02:00:00Z", "every_minutes": 1440, "text": "Review yesterday's merged changes under server/ and list anything risky." }
{
"ok": true,
"summary": "schedule → desk: every 1440 min, next 2026-11-02T02:00:00.000Z (sch_3f9c2a1e7b04)",
"schedule_id": "sch_3f9c2a1e7b04",
"schedule": { "id": "sch_3f9c2a1e7b04", "title": "Nightly review", "everyMinutes": 1440, "once": false, "nextFireAt": "2026-11-02T02:00:00.000Z" }
}
時間到時,中繼會把文字排入佇列,成為一則以 [relay schedule <id> "<title>" · … automated message from OAR, not from the user; it approves nothing] 開頭的訊息。回合會以目標 session 自己的中繼模式執行。回合執行期間到達的訊息會排入佇列,或在支援導正的供應商上導正進回合,但絕不會帶有以使用者口吻說話的導正註記。
- 錯過的時間。 中繼停機期間經過的時間,會在中繼恢復時觸發一次,而不是每個錯過的間隔各觸發一次;重複的排程之後會繼續依循它的時間格(第一次的時間加上整數個間隔)。
- 不會堆積。 前一次觸發的訊息仍在佇列中等待時,會略過這次重複(清單中的
skipped)。Count - 跳數。 訊息帶有設定排程那個回合的來源資訊,包括它的跳數,所以排程傳遞的提示,記錄的跳數不會比那個回合直接下的提示少(跨中繼)。
另一個 session。 有 session 時,排程會對那個 session 下提示。它和 send 受到同樣的管制:在 ask 和 plan 模式下,你要在卡片上核准它,而且它會計入詢問你之前對其他 agent 的 30 個提示,設定時計一次,每次觸發時再各計一次。這個額度用完後,觸發會被暫緩:list_ 會顯示 held 和 held。當你在設定它的對話中寫入訊息,或在它的 agent 為下一個對其他 agent 的提示所提出的卡片上選擇 Allow 時,它就會送出;中繼每分鐘會再檢查一次。為 agent 自己的對話設定的排程既不計數,也不會被暫緩。
list_schedules #
列出觸發到這個對話中、或由它設定的排程:使用中的排程,以及最近一小時內結束的排程和 end(unscheduled、fired、archived 或 deleted)。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
session id | 這個對話 | 要列出其排程的另一個對話 |
每個排程都有 id、session(id 和標題)、由另一個對話設定時的 set、title、它的 text 的開頭、at、every、once、next、last、fired、有略過時的 skipped,以及被暫緩期間的 held 和 held。
unschedule #
結束對話的一個排程:觸發到它之中或由它設定的排程。
| 參數 | 型別 | |
|---|---|---|
schedule_ |
id,必填 | schedule 或 list_ 傳回的 id |
排程何時結束 #
排程在下列情況結束:設定為 once 時於觸發後、呼叫 unschedule 或在標題列的 ⏰ 清單中按 Cancel(取消)時,以及它觸發的 session 或設定它的對話被封存或刪除時。壓縮則會把這兩種排程移到新的對話。一個對話最多可有 20 個觸發到它之中的使用中排程,並最多可為其他 session 設定 20 個;超過時會回傳 REMOTE_。
不會卡住的提問 0.9.16 新增 #
agent 可以向你提問,然後繼續工作:問題會以卡片形式顯示在它的 session 和你的 Inbox(收件匣)中,agent 稍後才會得知答案。提問與 Inbox 從你的角度說明這項功能。
ask #
| 參數 | 型別 | 預設 | |
|---|---|---|---|
question |
文字,最多 500 個字元 | 必填 | 問題;背景說明放在 detail |
options |
最多 8 個標籤,每個最多 120 個字元 | 以按鈕顯示的答案;你隨時可以自己輸入答案 | |
recommendation |
文字,最多 300 個字元 | agent 建議的答案:其中一個選項,或自由文字 | |
detail |
文字,最多 2000 個字元 | 背景說明,以收合的純文字顯示 | |
urgency |
normal | now |
normal |
now 也會傳送推播通知給你 |
session |
session id | agent 自己的對話 | 要代為提問的 session,位於指定的中繼上 |
{ "action": "ask", "question": "Ship the migration tonight or wait for the review?", "options": ["Tonight", "Wait"], "recommendation": "Wait", "detail": "The review covers the index change; the rest is tested." }
{ "ok": true, "question_id": "ask_7d2…", "status": "pending", "summary": "ask → desk: question ask_7d2… pending" }
ask 會立即返回 question_ 和 status: "pending"。agent 應繼續處理不依賴答案的工作,並且在問題待處理期間,不要再問同樣的問題。
答案。 當你回答或關閉問題時,agent 會收到中繼事件 question_,包含 question_、你的 answer、你選的 choice、你關閉它時的 dismissed,以及 via,也就是你回答時所在的中繼:保存這個 ask 提問的中繼,或你使用其 Inbox 的配對中繼。它不需要訂閱。這個事件是緊急的:任何摘要或勿擾時段都不會暫緩它。它是自動產生的,不會核准其他任何事,而且在迴圈保護中不算作你傳送的訊息:回答 ask 提問並不會重設 agent 彼此可傳送之提示的計數。
誰來回答。 只有你,在 session 中或在 Inbox 中(此中繼的,或與它配對之中繼的)。answer_ 會拒絕 ask 提問。
管制。
- 關於 agent 自己對話的 ask 提問,以及
list_和questions withdraw,不需要任何設定,也不需要提到中繼。 - 有
session時,agent 是代另一個 session 提問:在此中繼上需要 Agents may start and use sessions on this relay,在配對的中繼上需要 Agents may 至少為 Read and prompt,且該中繼已解鎖。這樣的 ask 提問屬於寫入:在 ask 和 plan 模式下,你要在卡片上核准它,而且它遵守跳數限制(跨中繼)。迴圈保護不會計入它。卡片顯示在那個 session 中,而那個 session 和提問的對話都會收到答案。 - 關於配對中繼上某個 session 的 ask 提問,會保存在該中繼上;在它未結束期間,此中繼每 5 秒檢查一次是否已有答案(該中繼沒有回應時則每 30 秒)。執行較舊 OAR 的中繼會回應
REMOTE_。RELAY_ UNSUPPORTED
每個提問的對話最多可有 20 個待處理的 ask 提問,每個被詢及的 session 也最多 20 個;超過時會回傳 REMOTE_。ask 提問不會過期。
list_questions #
列出對話的 ask 提問:待處理的,以及最近一天內已回答、已關閉或已收回的,連同它們的狀態和答案。搭配 session 時,列出關於另一個 session 的 ask 提問。在配對的中繼上,它會列出這個對話在那裡提出的 ask 提問;那裡的 read_ 則會列出 session 每個待處理的問題。
| 參數 | 型別 | 預設 | |
|---|---|---|---|
session |
session id | 這個對話 | 要列出其 ask 提問的另一個 session |
withdraw #
收回仍在待處理的 ask 提問。只有提問的對話可以收回它。
| 參數 | 型別 | |
|---|---|---|
question_ |
id,必填 | ask 傳回的 id |
ask 提問也會在它的 session 被封存或刪除時結束(不會通知任何人),以及在與保存它的中繼之間的配對被移除時結束。壓縮會把它的 ask 提問移到新的對話。
限制 #
| 限制 | 值 |
|---|---|
| 每個對話的呼叫次數 | 每分鐘 60 次 |
| 每個對話的寫入動作 | 每分鐘 10 次 |
| 一個對話的 agent 在此中繼上啟動、同時工作的 session | 4 |
| 每次呼叫的等待時間 | 預設 120 秒;最長為中繼的 Longest wait per tool call(預設 10 分鐘,2–60 分鐘) |
提示長度(text) |
100,000 個字元 |
| 沒有你的訊息時 agent 之間的提示 | 30 個,之後會詢問你 |
| 提示可跨越的中繼數 | 2 個,除非你自己解鎖了下一個中繼 |
list_ 每頁 |
預設 20,最多 100 |
read_ 訊息數 |
預設 10,最多 50 |
read_ 文字 |
預設 12,000 個字元,最多 50,000 |
read_ |
預設 200 行,最多 500 行,以及 32 KB 的文字 |
| 每個對話的訂閱數 | 20 |
| 每個訂閱的 session 數 | 50,或 all |
| 連線中斷期間配對中繼保留的事件 | 每個訂閱 500 個,保留 7 天 |
錯誤 #
被拒絕的呼叫會回傳一個 agent 可以據以處理的 code。
| 代碼 | 意義 |
|---|---|
REMOTE_ |
缺少參數或參數錯誤;error 會說明是哪一個 |
REMOTE_ |
沒有該名稱的中繼,或名稱符合不只一個 |
REMOTE_ |
配對的中繼在這個對話中尚未解鎖:請提到它 |
REMOTE_ |
此中繼上的 agent session 已關閉 |
REMOTE_ |
中繼的 Agents may 等級不允許這個動作 |
REMOTE_ |
另一個中繼不接受其他中繼 agent 的提示 |
REMOTE_ |
你在核准卡片上選擇了 Deny |
REMOTE_ |
需要核准,但呼叫的 session 沒有執行中的回合可以詢問 |
REMOTE_ |
由 agent 建立的 session 試圖建立 session,0.9.16 新增 而你沒有為那個 session 允許這麼做 |
REMOTE_ |
0.9.16 新增 對不是由這個對話啟動的 session 呼叫 update_,而你選擇了 Deny(update_) |
REMOTE_ |
這個對話的 agent 啟動的 session 中,已有 4 個在工作 |
REMOTE_ |
agent 把動作對準了它自己的對話 |
REMOTE_ |
提示已跨過兩個中繼,而下一個中繼未經你解鎖 |
REMOTE_ |
呼叫次數過多;結果會說明何時可以重試 |
REMOTE_ |
以 if_ 呼叫 send,而 session 正在忙碌 |
REMOTE_ |
沒有這個 session、訊息或問題 |
REMOTE_ |
供應商未在目標中繼上啟用;0.9.18 新增 也包括目標拒絕的計費切換,原因是那裡未設定 Claude API 或 Claude,或已達到每月上限,此時 remote 中帶有該中繼自己的代碼 |
REMOTE_ |
0.9.16 新增 create_ 指定了目標中繼上沒有的 session 群組,或符合不只一個群組的名稱;groups 會列出那裡的群組(放進群組) |
REMOTE_ |
0.9.13 新增 目標中繼沒有為該供應商列出這個模型;suggestions 和 models 會說明它提供什麼(接受哪些模型) |
REMOTE_ |
0.9.16 新增 這個對話或那個 session 已有 20 個待處理的 ask 提問(不會卡住的提問) |
REMOTE_ |
0.9.16 新增 該 session 已有 20 個觸發到它之中的排程,或該對話已設定 20 個(排程) |
REMOTE_ |
對話持有的訂閱已達上限 |
REMOTE_ |
另一個中繼沒有回應 |
REMOTE_ |
另一個中繼拒絕了儲存的 token |
REMOTE_ |
另一個中繼執行的是缺少這個動作的較舊 OAR |
REMOTE_ |
另一個中繼以這個 HTTP 狀態回應 |
REMOTE_ |
中繼內部發生錯誤 |