摘要: OpenRouter 於 2026 年 9 月 8 日發表 openrouter:shell 工具與 Files API,讓具備 tool calling 的模型在託管 Linux 沙箱中執行指令、觀察錯誤並修正。容器預設阻擋對外網路,檔案可透過 Files API 進出或 promote 到 workspace 保存,也能搭配容器外執行的 web search。沙箱按活躍秒數計費,冷啟動最低收 30 秒,儲存上限 10 GiB,且 beta API 仍可能變動。
為什麼需要一個託管的 Shell?
想讓模型跑一段程式,開發者以往的處境多半是自己張羅執行環境、自己設法隔離沙箱、自己處理檔案來回搬運,同時還得防著模型吐出的指令把本機搞得一團亂。OpenRouter 於 2026 年 9 月 8 日發表的 openrouter:shell 工具與 Files API,把這些零碎的麻煩整包收進一台由服務方代管的 Linux 容器裡。從此只要模型具備 tool calling 能力,就能在伺服器端下指令、讀寫檔案,而費用怎麼算一目了然。
這並不只是換個地方執行程式碼而已。模型能夠看著跑出來的結果反覆調整:假設它寫了一支解析 CSV 的腳本卻沒跑成功,stderr 上的錯誤訊息會回到它眼前,它便據此改寫腳本、重新再試。這種「執行—觀察—修正」的循環,正是代理從被動回話跨到主動把任務做完的分水嶺。
兩個工具,兩種相容性
OpenRouter 備妥了 openrouter:shell 與 openrouter:bash 兩支工具,前者依循 OpenAI 的規格,後者依循 Anthropic 的規格。兩者真正的差別在於預設的執行位置:openrouter:bash 向來是要求你的應用程式在本機執行程式,但只要把 engine 指定為 "openrouter",就能強制改由伺服器沙箱代勞。
curl https://openrouter.ai/api/v1/responses \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4-pro-0813",
"input": "Check the Python version, then write a script that prints the first 20 primes and run it.",
"tools": [
{ "type": "openrouter:shell", "parameters": { "engine": "openrouter" } }
]
}'
站在開發者的立場,這意味著不必為了汰換模型而重寫工具呼叫的那一層。只要模型認得 tool calling,同一套 API 就能把終端機交到它手上。
容器與檔案的協作方式
沙箱本身是一台與外界隔離的 Linux 容器,對外網路預設為關閉。倘若你需要讓模型執行 pip3 install,可以透過 allowlist 僅放行特定網域,例如 pypi.org。容器在閒置 5 分鐘後便進入休眠,不過存放在裡頭的檔案會保留 30 天。
檔案的進出則交由 Files API 負責。你可以先把一份 CSV 上傳至 workspace,再將它掛載進容器供模型取用。模型產生的檔案會以 cfile_ 開頭的 ID 送回,你既能下載,也能選擇將它「promote」到 workspace 長期保存。
如此一來,「資料送進去、結果拿出來」的流程顯得格外清楚。模型無須曉得檔案實際上落在何處,只要在容器裡把工作完成,開發者再經由 API 取回成果即可。
和其他工具串接的潛力
Shell 工具並非單打獨鬥。你可以同時開啟 openrouter:web_search,讓模型先去搜尋資料,再把結果寫進檔案。比方說交付這樣一道指令:「找出本週三個最大的開源 AI 發布,然後寫成一個 markdown 檔案」。搜尋是在容器外執行的,容器本身因此不需要任何網路權限,這對安全性很有幫助。
這樣的搭配也呼應了我們先前談過的區域路由的關鍵不是「在哪推論」,而是「請求在哪解密」——讓敏感操作留在伺服器端,同時保住調度上的彈性。
計費與限制
沙箱時間以每秒 $0.0001 計價,起算點是第一個指令開始執行,終點為最後一個指令結束。冷啟動的容器最低收 30 秒的費用,但針對同一個容器的連續請求,這筆最低費用只收取一次。Files API 本身不收費,總儲存上限為 10 GiB。
這些功能目前仍在 beta 階段,API 隨時可能變動。若你正在著手打造真正需要動手執行的代理,這裡會是個值得一試的起點。
