Agent 工具
每個程式設計 agent 都有自己的工具:讀取檔案、執行指令、編輯程式碼。OAR 在這之上再加了一小組工具,讓 agent 能做只有中繼才做得到的事:與其他 session 協作、發布網頁預覽,以及向你提出一個點一下就能回答的問題。
你永遠不必自己呼叫這些工具。你用一般的話提出要求,agent 會自己挑選工具。這個章節讓你了解 agent 能做什麼、哪些事需要你核准,以及它到底送出什麼、收到什麼。
工具 #
| 工具 | agent 用它做什麼 | 頁面 |
|---|---|---|
relay_ |
列出、讀取、提示、啟動、停止和監看其他 session,可以是此中繼上的,也可以是配對中繼上的。一個工具,23 個動作。 | relay_tool |
preview |
以公開連結發布本機的 dev server 或資料夾,列出所屬對話的預覽並關閉它們。 | preview |
ask_ |
以附有按鈕的卡片向你提問,並等待回答。 | ask_user |
- relay_toolrelay_tool agent 工具——操作此中繼與配對中繼上的 session。全部 23 個動作、它們的參數與結果、權限、限制與錯誤。
- previewpreview agent 工具——把本機 dev server 或資料夾發布到公開連結上。動作、參數、結果、設定與限制。
- ask_useragent 如何以附按鈕的卡片向你提問——OAR 的 ask_user 工具與各供應商自己的提問工具,以及各供應商的參數。
你可以要求什麼 #
一些要求範例,以及 agent 會用到的工具:
| 你寫的內容 | agent 使用 |
|---|---|
| 「開三個 session,分別審查這些資料夾中的一個,然後彙整它們的發現。」 | relay_: create_, wait, read_ |
| 「問一下 @build-box 上的 session,部署是否成功了。」 | relay_: list_, send |
| 「監看那些 session,有任何一個提問或失敗時告訴我。」 | relay_: subscribe |
| 「這個中繼上我的 Claude 方案還剩多少?」 | relay_: usage |
| 「啟動 dev server,給我一個可以在手機上開啟的連結。」 | preview: create |
| 「變更 schema 之前先跟我確認。」 | ask_ |
依供應商 #
工具的作用對每個供應商都一樣。不同的是供應商的 agent 是否能取得該工具,以及它們看到的工具名稱。
| 供應商 | relay_ |
preview |
提問卡片 |
|---|---|---|---|
| Claude | 有,名稱為 mcp__ |
有,名稱為 mcp__ |
Claude 自己的 Ask,由 OAR 顯示為卡片 |
| Claude API 0.9.18 新增 | 有,名稱為 mcp__ |
有,名稱為 mcp__ |
Claude 自己的 Ask,由 OAR 顯示為卡片 |
| DeepSeek 0.9.17 新增 | 有,名稱為 mcp__ |
有,名稱為 mcp__ |
Claude Code 的 Ask,由 OAR 顯示為卡片 |
| GitHub Copilot 和 OpenAI,SDK 引擎 | 有,名稱為 relay_ |
沒有工具:agent 會被告知如何改為呼叫中繼的 preview API | OAR 的 ask_ |
| GitHub Copilot 和 OpenAI,擴充功能引擎 | 有,透過 OAR 的 MCP 伺服器(oar) |
有,透過 OAR 的 MCP 伺服器(oar) |
Copilot 自己的 ask_,由 OAR 顯示為卡片 |
| Cursor | 有,名稱為 relay_ |
有,名稱為 preview |
OAR 的 ask_ |
| Grok | 有,透過 OAR 的 MCP 伺服器(oar) |
有,透過 OAR 的 MCP 伺服器(oar) |
無 |
| Claude Cloud | 無 | 無 | Claude 自己的 Ask,由 OAR 顯示為卡片 |
名稱為何不同
透過 Model Context Protocol(MCP)取得工具的供應商,會在工具名稱前面加上伺服器的名稱。Claude、Claude API 和 DeepSeek 的 agent 從名為 relay 的伺服器取得 OAR 的工具,所以 preview 會顯示為 mcp__。Grok 和 Copilot 的擴充功能引擎則從名為 oar 的伺服器取得工具,並各自以自己的方式為名稱加上前綴。無論哪種情況,都是同一個工具。
Claude API 和 DeepSeek 對話會在中繼主機上執行 Claude Code,所以它們的 agent 取得工具的方式和 Claude 對話完全相同。見 Claude API 和 DeepSeek。
Claude Cloud session 在 Anthropic 的沙箱中執行,而不是在你的機器上。中繼的工具無法伸入其中:雲端 session 沒有 relay_,也沒有 preview。不過其他 session 中的 agent 仍然可以用 relay_ 啟動、讀取、提示和停止雲端 session。
Grok 和 Copilot 的擴充功能引擎會從 OAR 附加到 agent 的小型 MCP 伺服器取得工具。為中繼設定環境變數 OAR_ 會關閉這個伺服器;這時這些 agent 就沒有 relay_,也沒有 preview 工具,而是被告知如何呼叫 preview API。
工具何時可用 #
| 工具 | agent 在以下情況擁有它 |
|---|---|
relay_ |
至少配對了一個中繼,或已開啟 Settings → Relays → Agent sessions → Agents may start and use sessions on this relay(設定 → 中繼 → Agent session → agent 可在此中繼上啟動並使用 session)。兩者皆無時,完全不會提供這個工具。 |
preview |
在有這個工具的供應商上一律可用。它能否發布,取決於預覽通道;在你設定好之前,預覽通道是關閉的。通道關閉時,工具會回覆原因。 |
ask_ |
在有這個工具的供應商上一律可用。 |
session 是在它的 agent 處理程序啟動時,得知自己是否取得 relay_。在你配對第一個中繼或開啟 agent session 之後,已在執行的對話可能要等到它的 agent 重新啟動,才會有這個工具。0.9.18 新增 工具的新名稱也是如此:你更新到 0.9.18 時正在執行的 session,可能仍以 remote_ 這個名稱擁有它;見名稱。
你仍能掌控的部分 #
- 預設不會開啟任何超出對話範圍的功能。 agent session 在你開啟之前都是關閉的,配對的中繼在每個對話中都處於鎖定狀態,直到你提到它為止,預覽通道在你設定之前也是關閉的。
- 核准卡片。 agent 在對話中啟動的第一個 session、它第一次監看某個中繼上的 session,以及在 ask 和 plan 中繼模式下的每個寫入動作,都會先以提問卡片詢問你。
- 工具絕不會把 token 交給 agent。 對其他中繼的呼叫會經過你自己的中繼,由它保管對方中繼的 token。這不是沙箱:agent 以中繼的使用者身分執行,可以從磁碟讀取設定檔和資料庫。見 OAR 會暴露什麼。
- 預覽連結是公開的。 任何拿到預覽連結的人都不必登入就能開啟。agent 會被要求在提供連結時說明這一點。agent 只能列出和關閉自己對話的預覽 0.9.14 新增;Settings → Previews(設定 → 預覽)則會顯示並可關閉所有預覽。
詳細說明請見各工具的頁面:relay_tool → 權限與核准和 preview → 限制。
不是工具的功能 #
agent 在 OAR 中做的一些事,並不需要 OAR 的工具:
- 回覆中的圖片、影片和音訊。 agent 會被告知可以用絕對路徑嵌入媒體檔案;中繼會內嵌顯示它。這是提示中的一項指示,而不是工具。Copilot 擴充功能引擎上的 agent 和 Claude Cloud 中的 agent 不會收到這項指示。
- 輸入區中的
/。 你可以自己輸入preview /來發布、列出和關閉預覽(輸入區)。這不會耗用 agent 的回合,而且適用於每個供應商。preview - 計畫看板。 agent 完成規劃時,OAR 會顯示 Plan ready(計畫已就緒)看板。在 Claude 和 DeepSeek 上,它來自 Claude Code 自己的計畫工具,由 OAR 接手顯示。
原始碼
給貢獻者和好奇的人:這些工具在 OAR 儲存庫中的位置。每個工具都只在 shared/ 下定義一次,與供應商無關,再由一個小型轉接器附加到每個供應商。
| 檔案 | 內容 |
|---|---|
| shared/remote-relay-contract.mjs | relay_:說明、參數、動作、權限、限制、錯誤碼、輸入檢查 |
| shared/remote-relay-tool-core.mjs | relay_:每個供應商的轉接器所發出的呼叫,以及何時提供這個工具 |
| server/services/remote-relay-dispatcher.mjs | relay_:每個動作做什麼、執行前的檢查、等待回覆 |
| shared/relay-events.mjs | 事件訂閱:事件類型、限制、事件訊息的文字 |
| server/services/relay-event-service.mjs | 事件訂閱:儲存訂閱和傳遞事件 |
| shared/preview-tool-core.mjs | preview:說明、參數、輸入檢查、呼叫 |
| server/services/preview-registry-service.mjs | preview:預覽本身及其限制 |
| shared/ask-user-bridge.mjs | 提問卡片:從 agent 的提問到卡片,再回到 agent |
| server/claude-worker/claude-sdk-adapter.mjs | Claude、Claude API 和 DeepSeek:relay MCP 伺服器和 Ask 橋接 |
| server/cursor-worker/cursor-turn-runner.mjs | Cursor:以自訂工具提供的 relay_、preview 和 ask_ |
| server/copilot-worker/copilot-sdk-session-process.mjs | Copilot SDK 引擎:以 session 工具提供的 relay_ 和 ask_ |
| server/mcp/oar-mcp-server.mjs | 供 Grok 和 Copilot 擴充功能引擎使用的 oar MCP 伺服器 |
| server/relay-tools.md | Copilot 引擎取得的、關於這些工具的常設指示 |