Overview

為什麼 Anthropic 需要做這個服務?

過去幾年,想跑 Claude 做長時間 agentic 任務的開發者,都要自己搭 harness——一個控制 Claude 呼叫、路由工具、管理 context 的執行環境。這個 harness 通常會根據模型當時的能力做出假設,一旦模型升版,假設就可能過期,harness 就需要修改。

Anthropic 把這件事稱為「harness 的假設會腐壞(go stale)」。舉例:他們發現 Claude Sonnet 4.5 在感覺到 context 快滿時會提早收工,所以在 harness 裡加了 context reset。升到 Opus 4.5 後,這個行為消失了,那個 reset 邏輯就變成累贅。

Managed Agents 的設計目標是:提供一個「假設比任何特定 harness 實作都活得長」的穩定介面——就算 Claude 內部行為改變,你的 agent 呼叫方式不需要跟著變。

換句話說,這是 Anthropic 把 agent 執行「作業系統化」的嘗試——就像 OS 把硬體虛擬化成 process/file 抽象層,讓應用程式不需要知道底下跑的是 1970 年代的磁碟還是現代 SSD。

Architecture

三層解耦:Brain、Hands、Session

Managed Agents 把一個 agent 系統拆成三個可以各自替換的部分:

Layer 01
Brain

Claude + Harness

負責推理、呼叫 Claude API、把 Claude 的 tool call 路由到對應的基礎設施。Harness 崩潰時,只需用 wake(sessionId) 重啟,從 session log 恢復,不遺失任何狀態。

Layer 02
Hands

Sandbox(執行環境)

跑程式碼、讀寫檔案的隔離容器。Sandbox 故障時被當成 tool-call error 傳回給 Claude,Claude 決定是否重試——新的 sandbox 可以用 provision() 重建。這是「cattle,不是 pet」。

Layer 03
Session

Event Log(持久化記錄)

獨立於 Claude context window 的 append-only 事件流。用 getEvents() 可以選擇性切片讀取,讓 long-horizon 任務的上下文不受 200K token 限制。

三層各自可以 fail、各自可以替換,互不影響。以前把所有東西塞進一個 container 的做法,讓 container 變成了「寵物」——一旦掛掉,整個 session 跟著消失,還得工程師手動進去除錯。現在每層都是「牲口」,可以隨時殺掉重建。

Security Design

Credential 永遠不進 Sandbox

這是 Managed Agents 最值得關注的安全設計。過去把所有東西放在同一個 container 時,存在一個根本性的問題:Claude 產生的程式碼和 credential(如 API token)在同一個環境裡。一旦 prompt injection 成功,攻擊者只需要讓 Claude 讀自己的環境變數,就能拿到所有憑證。

Git 整合

Token 在 sandbox 初始化時 wire 進去

Git access token 在 sandbox 啟動時直接 wire 進 local git remote config。sandbox 裡的 git push/pull 可以正常運作,但 Claude 或 Claude 生成的程式碼從頭到尾都碰不到這個 token 本身。

MCP 工具 / OAuth

Vault proxy 在 sandbox 外

自訂工具走 MCP,OAuth token 存在 sandbox 外的 secure vault。Claude 呼叫 MCP 工具時,請求經過 dedicated proxy,proxy 用 session token 從 vault 取得對應 credential 再呼叫外部服務。Harness 全程不知道 credential 內容。

安全邊界

Prompt injection 的影響範圍受限

就算攻擊者成功 prompt inject,Claude 生成的惡意程式碼在 sandbox 裡能拿到的只有被明確授權給那個 session 的資源,拿不到底層 credential。

設計哲學

結構性安全,不靠模型自律

Anthropic 明確說:靠限制 token 範圍來防止 Claude 「用受限 token 做壞事」,這本質上是在押注 Claude 的能力不會提升。結構性隔離才是正確做法。

Long-Horizon Tasks

Session Log 不等於 Context Window

Long-horizon 任務最常遇到的問題是:任務跑到一半,context window 快滿了,必須決定要丟掉哪些歷史。這個決定往往是不可逆的,而且很難在當下判斷未來的步驟會需要哪些資訊。

Managed Agents 用一個關鍵設計解決這個問題:session log 是獨立存在的 event stream,不是 Claude 的 context window。Claude 透過 getEvents() 介面選擇性地把 session 內容讀進 context:

# Session log 的三種讀取模式 # 1. 從上次讀到的地方繼續往後 getEvents(after=lastReadPosition) # 2. 倒回某個動作前幾步,看前因 getEvents(before=specificAction, limit=5) # 3. 在做重要決定前,重讀某段脈絡 getEvents(slice=[startIdx, endIdx])

這讓 harness 在把事件傳進 Claude context 之前,可以做轉換(例如壓縮舊的 tool result)——而原始記錄保存在 session log 裡,需要時還可以再讀。不像直接做 compaction 把原始資訊不可逆地丟掉。

Public Beta 功能

現在有什麼

beta
Self-hosted Sandbox:不想讓程式碼跑在 Anthropic infra 的用戶,可以把 sandbox 改在自己的 VPC 跑,brain(Claude 呼叫)仍走 Anthropic API。
beta
Multi-agent Sessions + Outcomes:多個 agent 可以在同一個 session 框架下協作,並定義 Outcome(任務完成的判定條件)。
beta
Memory:agent 可以跨 session 保存和讀取資訊,不依賴每次都傳進 context window。
ent
Per-tool Permissions:每個工具可以個別設定授權,在 Claude Console 管理。
ent
Audit Log:完整的 agent 操作記錄,在 Claude Console 可查。
new
金融服務 Agent 模板:10 個 ready-to-run 的金融工作流 agent,以 cookbook 形式提供給 Claude Managed Agents 用戶,可以在幾天內部署到真實工作流。
適用場景

什麼情況下用 Managed Agents

Managed Agents 最適合的場景是:你想讓 Claude 跑長時間自主任務,但不想維護自己的 harness 和 sandbox 基礎設施。它對以下情境特別有價值:

適合

需要 managed infra 的企業

不想自建 agent 執行環境;需要 audit log、per-tool 授權、credential vault;Data 可以跑在 Anthropic infra 的場景。

適合

Long-horizon / 多步驟任務

單一任務需要跑數小時以上;步驟數超過 context window 能記錄的量;需要跨 session 保持記憶。

較不適合

Data 不能離開自己 infra

即使有 self-hosted sandbox 選項,Claude 的推理呼叫仍走 Anthropic API。如果完全 air-gapped 環境才可接受,需要另外評估。

較不適合

需要高度客製化 harness 邏輯

Managed Agents 的介面刻意保持穩定(即「假設活得久」),如果你需要非常細粒度地控制 harness 行為,自建可能更靈活。

對於需要 self-hosted 的場景(公司資料不能進 Anthropic infra),Managed Agents 的 self-hosted sandbox 模式搭配自建的 MCP credential vault(如 cred-mcp)是合理的組合:Brain 走 Anthropic API,Hands 和 credential 都在自己手上。