---
# System prepended metadata

title: 從養蝦到蓋 Agent OS：拆解 Anthropic Managed   Agents 的腦手解耦架構與本地復刻實踐
tags: [架構, Claude, 韌體, Agent, Anthropic, AI]

---

---
title: 從養蝦到蓋 Agent OS：拆解 Anthropic Managed Agents 的腦手解耦架構與本地復刻實踐
description: 深度解析 Anthropic 在 2026 年 4 月端出的 Managed Agents 架構——為什麼工程師寫的 Harness 補丁注定過時、Agent 與 Session 怎麼解耦、Memory Store 為什麼掛在會話而非角色身上，以及我用一週時間在本地復刻這套蜂群 Agent 系統的全部血淚史。
date: 2026-05-11
author: Oliver
tags: [AI, Agent, Anthropic, Claude, 架構, 韌體]
cover: managed-agents-cover.jpg
---

![managed-agents-cover](https://hackmd.io/_uploads/HJ4IAw1Jzg.jpg)

我同時開著5個 Claude Code 視窗。一個跑編碼、一個專責 Code Review、一個寫測試、一個守著 lint、最後一個是我自己用來貼錯誤訊息的「人肉訊息佇列」。一旦哪個窗口的上下文被壓縮，記憶就掉了一截；一旦某個容器跑歪，我得手動把整個目錄掃過去重來。

直到 2026 年 4 月 8 日，[Anthropic 在 engineering 部落格悄悄丟出一篇文章](https://www.anthropic.com/engineering/managed-agents) ，標題叫做 _Scaling Managed Agents: Decoupling the brain from the hands_。我讀完那個下午就明白：所謂的「蜂群 Agent」不是要靠工程師硬刻 harness 把模型框起來，而是要把腦、手、記憶徹底拆開，再讓編排者像 RTOS 一樣調度。這篇文章接下來會帶你一路走過：那篇部落格到底在說什麼、Managed Agents 的四個齒輪怎麼咬合、Memory Store 為什麼是真正的「腦」、我怎麼用一週復刻這套架構在本地跑、以及為什麼騰訊在 4 月底開源的 Cube Sandbox 會把 Docker 比下去。

> **環境與前置知識**：本文涉及的版本是 Claude Managed Agents Beta（API header `managed-agents-2026-04-01`）、Claude Agent SDK 對應的 Python/TypeScript 套件、以及 Cube Sandbox 開源版本。讀者最好對 Docker、訊息佇列、有限狀態機任一個有基本概念，後面會用到嵌入式韌體類比，但不需要硬體背景。

## 那篇被低估的部落格，到底在恐嚇什麼

[Anthropic 那篇文章](https://www.anthropic.com/engineering/managed-agents) 開場就放了一個工程師血淚史：團隊曾經為了 Claude Sonnet 4.5 的「context anxiety」（模型過早壓縮上下文造成的焦慮行為）寫了一整套 harness 補丁，邏輯精妙、考慮周全。結果 Claude Opus 4.5 一發布，這些補丁不只變廢碼，還會干擾新模型的判斷。整篇文章最狠的一句是：

> **「Harnesses encode assumptions that go stale as models improve.」**
> （Harness 把假設寫死，但模型一進化，這些假設就餿掉了。）

這句話我反覆讀了三次。對硬體工程師來說，這跟我們做晶片 workaround 是同一個感覺——某顆 MCU 有個 erratum，你寫一段神奇的延遲循環去繞過它；下一個 silicon revision 把 bug 修了，你那段 workaround 變成莫名其妙拖慢系統的死肉。模型也是矽晶片，只是改版週期更快、更殘酷。

Anthropic 的回應是把整個 agent 拆成三個獨立元件：

1. **Brain（Harness）**：Claude 本體 + control loop，無狀態、可隨時替換。
2. **Hands（Sandbox）**：執行容器與工具，跟 brain 互不認識。
3. **Session**：append-only 的事件日誌，存在 harness 與 container 之外。

關鍵的一句翻譯成 API 語意：「harness 不再住在容器裡，它呼叫容器的方式跟呼叫任何工具一樣，就是 `execute(name, input) → string`。」這跟硬體界的 HAL（硬體抽象層）是一模一樣的思維——驅動程式不該假設它跑在哪個 SoC 上，只要透過固定 API 跟硬體說話就好。

而這個解耦的收益，Anthropic 自己給了硬數字：[p50 TTFT（time-to-first-token）下降約 60%，p95 TTFT 下降超過 90%](https://www.anthropic.com/engineering/managed-agents) 。要注意這是他們重構自家基礎設施前後的對比——本質是「砍掉容器冷啟動 + 建立預先暖好的 brain pool」帶來的收益，不是外部 benchmark 可以直接複現的數字。但 p95 砍掉九成這種改進，已經不是優化，是換引擎。

## 寵物與牛馬：為什麼你的本地 Agent 注定會死

![managed-agents-pets-vs-cattle](https://hackmd.io/_uploads/HkdvCDykMg.jpg)

伺服器運維圈有個老梗叫 _pets vs cattle_：寵物你會給牠取名、生病了帶去看醫生、死了會難過；牛馬你只看編號，倒了就補一隻新的。十幾年前的虛擬機時代我們把伺服器當寵物養，後來容器化、Kubernetes、不可變基礎設施（immutable infrastructure），整個產業慢慢被「牛馬化」拯救。

把 Anthropic 那段話翻成大白話就是：**「以前 Agent 是寵物，現在 Agent 要當牛馬。」** 部落格原文有一句更狠：

> **「The container became cattle. If the container died, the harness caught the failure as a tool-call error.」**
> （容器變成牛馬。容器死了，harness 只是把它當成一次工具呼叫失敗去處理。）

對應到我自己之前養龍蝦的失敗經驗，根本原因就是當時把 brain、hands、context 全綁在同一個 Docker 容器：模型呼叫工具會修改容器的檔案、conda 環境、`~/.cache` 被各種 LLM SDK 灌滿、又或者某個 MCP server 半夜默默死掉。一旦這個容器壞了，整個 Agent 的「人格」也跟著毀了。修不修得回來，全看那一刻運氣。

從韌體工程師的角度，這個錯誤幾乎是必然——**狀態跟硬體（執行環境）綁在一起的設計，永遠擴展不出去**。RTOS 的訊息佇列、雙緩衝、watchdog 自動重啟，本質上都是把「狀態」跟「處理單元」解耦。AI Agent 工程比硬體晚了二十年才學到這個教訓，這篇 Anthropic 部落格其實就是 AI 圈遲到的工業革命宣言。

## 拆解 Managed Agents 的四個齒輪

![managed-agents-four-gears](https://hackmd.io/_uploads/H1luAPyJMe.jpg)

光看「解耦」這兩個字還不夠，我得拆開 [官方 docs](https://platform.claude.com/docs/en/managed-agents/overview) 才能看清楚整個齒輪箱怎麼咬合。Anthropic 把整個系統建立在四個核心概念上：

| 齒輪 | 角色 | 類比（嵌入式視角） |
| --- | --- | --- |
| **Agent** | 靜態身份模板：模型、system prompt、工具、MCP servers、skills | RTOS 任務的 task descriptor |
| **Environment** | 容器模板：預裝套件、網路規則、掛載檔案 | 編譯時決定的 board support package |
| **Session** | 動態實例：跑著 agent + environment 的一次任務，含 append-only event log | RTOS 啟動後的具體 task instance |
| **Events** | App 與 agent 之間的訊息：使用者輸入、工具結果、狀態 | 訊息佇列裡的 message |

```mermaid
flowchart TB
  subgraph Static[靜態定義 / Bake Time]
    A[Agent<br>model + prompt + tools + skills]
    E[Environment<br>container template]
  end
  subgraph Runtime[執行時 / Runtime]
    S[Session<br>append-only event log]
    T1[Thread #1<br>coordinator]
    T2[Thread #2<br>reviewer]
    T3[Thread #3<br>test-writer]
  end
  subgraph Persistence[跨會話持久層]
    M[(Memory Store<br>/mnt/memory)]
    V[(Vault<br>credentials)]
  end
  A -.referenced by.-> S
  E -.referenced by.-> S
  S --> T1 --> T2
  T1 --> T3
  M -.mounted into.-> S
  V -.attached at.-> S
```

對影片裡提到的「coordinator」，我特地翻了 [multiagent 文件](https://platform.claude.com/docs/en/managed-agents/multi-agent) 確認所有數字。實際的限制是：

- **Coordinator 的 roster 最多 20 個 unique agents**，但每個 agent 可以被開出多份 copy。
- **單一 session 最多 25 個並發 thread**。
- **Delegation 只能往下一層**，`depth > 1` 會被直接忽略，避免無限遞迴的呼叫塔。
- 加入 `{"type": "self"}` 可以讓 coordinator 派同種類的自己出去處理子任務。

實際的 Python 程式碼長這樣（直接照 [官方範例](https://platform.claude.com/docs/en/managed-agents/multi-agent) 改寫）：

```python
from anthropic import Anthropic

client = Anthropic()

# 先建兩個 worker agent
reviewer = client.beta.agents.create(
    name="Reviewer",
    model="claude-opus-4-7",
    system="You are a strict code reviewer. Reply with concise findings.",
    tools=[{"type": "agent_toolset_20260401"}],
)

test_writer = client.beta.agents.create(
    name="TestWriter",
    # 寫測試這種模式化工作配 Sonnet 4.6（比 Opus 便宜很多）就夠用，
    # 重要的 reviewer 與 coordinator 才需要 Opus 4.7。
    model="claude-sonnet-4-6",
    system="Write pytest-style tests for the provided code.",
    tools=[{"type": "agent_toolset_20260401"}],
)

# coordinator 拿到的是 reviewer 和 test_writer 的 ID
coordinator = client.beta.agents.create(
    name="Engineering Lead",
    model="claude-opus-4-7",
    system=(
        "Delegate code review to the reviewer agent "
        "and test writing to the test agent."
    ),
    tools=[{"type": "agent_toolset_20260401"}],
    multiagent={
        "type": "coordinator",
        "agents": [
            {"type": "agent", "id": reviewer.id},
            {"type": "agent", "id": test_writer.id},
        ],
    },
)
```

這段程式有幾個值得停下來看的細節。第一，coordinator 跟 worker 都是 `agents.create()` 出來的同一種東西，差別只在前者多了 `multiagent` 配置；換言之，**「coordinator」不是一個特殊角色，只是一個被授予 roster 的普通 agent**。第二，每個 agent 可以指定不同的模型——影片裡提到「coordinator 用大模型、worker 用小模型」最佳化 token efficiency，這是真實可行的設計，因為這四個齒輪的解耦讓「模型選擇」變成 per-agent decision，而不是 per-system decision。

> **常見陷阱**：開頭那支介紹 managed agents 的影片把 SDK beta 講成有「6 個模組」（agents/environments/sessions/skills/memory stores/vaults），但對照 [官方 overview 文件](https://platform.claude.com/docs/en/managed-agents/overview) ，**核心概念其實是 agent/environment/session/events 這四個**；memory stores、skills、vaults 是延伸的資源型 API。影片的「6 個模組」是把資源型 API 一起算進來——理解上沒錯，但講課時要分清楚層次，免得被讀者抓出來鞭。

## Memory Store 才是真正的「腦」

![managed-agents-memory-store](https://hackmd.io/_uploads/rJ__CDykMg.jpg)

整套架構裡最讓我「後背發涼」的設計，是 [Memory Store](https://platform.claude.com/docs/en/managed-agents/memory) 。它表面上只是個雲端儲存，但放在四齒輪架構裡看就完全不一樣：**Anthropic 把長期記憶從 agent 身上拔走，掛到 session 上**。

```mermaid
flowchart LR
  A[Agent<br>「我是誰」] --> S[Session<br>「我現在在幹什麼」]
  S --> MS[Memory Store<br>「我以前學過什麼」]
  MS -.mounted at.-> FS[/mnt/memory/]
  FS --> Tool[Claude 用普通 file IO 讀寫]
```

關鍵的設計哲學是**「不發明新 API，就用檔案系統」**。memory store 掛載到容器內的 `/mnt/memory/` 目錄，模型用它寫程式碼時用的同一套 file tool 讀寫。Anthropic 在文件裡明說：「a note describing each mount is automatically added to the system prompt so the agent knows where to look.」對應到嵌入式工程，這完全就是「把 EEPROM 區段 mmap 到位址空間」的概念。

實際的限制可以記住三組數字：

| 維度 | 上限 | 為什麼這樣設計 |
| --- | --- | --- |
| 單一 session 可掛載 store | **8 個** | 對應不同 owner / access rule：例如 user 偏好、團隊規範、專案 context 分開放 |
| 單一 memory 檔案大小 | **100 KB（約 25k tokens）** | 強迫你切細，避免被一個爛掉的大檔毀掉 context 預算 |
| Memory version 保留 | **30 天**（不過 head version 永久保留） | 給審計與點對點還原用 |

最被低估的細節是 **`content_sha256` 樂觀並發控制**——更新時可以傳一個 precondition，如果儲存端的 hash 不再吻合，更新會被拒絕。這是 etcd / DynamoDB 級別的 concurrency 設計被搬進 agent 記憶層：

```python
client.beta.memory_stores.memories.update(
    memory_id=mem.id,
    memory_store_id=store.id,
    content="CORRECTED: Always use 2-space indentation.",
    precondition={
        "type": "content_sha256",
        "content_sha256": mem.content_sha256,
    },
)
```

當你有多個 agent 同時修改同一份規範時，這條 precondition 就是你的最後一道防線。

> **安全踩雷區**：memory store 預設是 `read_write`。Anthropic 文件給了一段明確警告——如果 agent 處理不可信輸入（使用者 prompt、抓回來的網頁內容、第三方 tool output），一次成功的 prompt injection 就能把惡意內容寫進 store，後續 session 把它當成可信記憶讀回來。實務上，**所有共用的參考資料一律掛 `read_only`，只有專屬於該使用者、會話、專案的 store 才開 `read_write`。** 這條規矩跟硬體裡「程式碼區絕對不能可寫」的紀律是同一個血統。

## 我的本地復刻：把蜂群塞進 Docker

![managed-agents-local-replica](https://hackmd.io/_uploads/Hy1FRwkkzx.jpg)

讀完所有 docs 後我花了一週把這套架構復刻在本地。我沒辦法完全做到 Anthropic 的雲端等級解耦——我的 worker 是 Docker 容器，每個容器裡塞著一個 Claude Code / Codex / 自製 harness（Pi），所以 brain 跟 hands 還是耦合在 worker 行程裡。但我至少做到了三件事：

1. **無狀態 worker**：每個 Docker 啟動時注入 `model / harness / skill / 從哪個 session 哪個位置恢復 / SSH key / 工作目錄`，跑完就銷毀。
2. **集中編排**：一個主控伺服器拿著任務圖（task graph），fan-out 給 worker，再 fan-in 收結果。
3. **異質模型組合**：不同節點用不同模型——例如初步搜尋用 Haiku、整合寫作用 Opus、最終驗證再回到 Opus，整體 token efficiency 比單一 Opus 跑全程便宜得多。

對應 RTOS 的視角，這就是一個典型的 **master/worker + 訊息佇列** 結構：

```mermaid
sequenceDiagram
    participant U as User
    participant M as Master (Orchestrator)
    participant Q as Task Queue
    participant W1 as Worker #1<br>(Opus, coder)
    participant W2 as Worker #2<br>(Sonnet, reviewer)
    participant W3 as Worker #3<br>(Haiku, test-runner)
    participant Mem as Memory Store
    U->>M: 「幫我加一個 OAuth 登入」
    M->>Q: enqueue(code_task)
    Q->>W1: dispatch code_task
    W1->>Mem: read coding conventions
    W1->>Q: enqueue(review_task, patch)
    Q->>W2: dispatch review_task
    W2->>W1: 「這裡有 race condition」
    W1->>Q: enqueue(test_task, fixed_patch)
    Q->>W3: dispatch test_task
    W3->>M: 結果
    M->>U: 「OAuth 已完成、測試通過」
```

唯一痛點：**Docker 啟動慢**。本機跑一個帶 Python + Node + 必要工具的容器，冷啟動大概 1.5~3 秒。對單個任務沒感覺，但當 master 同時要 fan-out 12 個 worker 時，那 3 秒乘以 12 變成感官上的「卡了一下」，這在互動式 agent 對話裡是會被使用者投訴的延遲。

## Docker 不夠快，Cube Sandbox 接棒

![managed-agents-cube-sandbox](https://hackmd.io/_uploads/HJNYCPykGg.jpg)

正好在我為 Docker 延遲頭痛的時候，2026 年 4 月 21 日 [騰訊雲把 Cube Sandbox 全量開源了](https://www.prnewswire.com/news-releases/tencent-cloud-cube-sandbox-goes-fully-open-source-with-five-major-breakthroughs-enabling-large-scale-agent-deployment-302751501.html) ，Apache 2.0，整套 production stack 包含 SDK、控制平面、runtime。它的 [GitHub repo](https://github.com/TencentCloud/CubeSandbox) 給了一組讓人坐直的 benchmark：

| 指標 | Cube Sandbox | 一般 Docker |
| --- | --- | --- |
| 冷啟動（單併發） | **約 60 ms** | 1–3 秒 |
| 50 併發冷啟動 P95 | **約 90 ms** | 數秒到十幾秒 |
| 50 併發冷啟動 P99 | **約 137 ms** | — |
| 單實例記憶體額外開銷 | **< 5 MB** | 數十 MB |
| 隔離等級 | 硬體級（RustVMM + KVM） | namespace（共享 kernel） |

技術上它是基於 [RustVMM](https://github.com/rust-vmm) 與 KVM 重寫的輕量級 microVM，搭配 CoW（copy-on-write）記憶體共用、Rust 重寫過的 runtime，把每個 sandbox 砍到 5 MB 以下。對單機跑「數千個 agent」這個野心目標來說，這幾乎是必備硬體基礎——Docker namespace 那種共享 kernel 的方案，光是 memory overhead 就會在 1000 instance 處撞牆。

更貼心的是它 **相容 E2B SDK 與 OpenAI Python SDK**：你不需要重寫 agent code，把 endpoint 從 E2B 換成 Cube 就能跑。這對 agent infra 工程師來說等於白送一個遷移路徑，已經把產品決策難度從「要不要換」降到「什麼時候換」。

我目前的做法是 **保留 Docker 作為長期 reside 的 worker pool**（例如 master 伺服器本身、log aggregator），把 **Cube Sandbox 用在 ephemeral 任務**（fan-out 子任務、deep research 搜尋節點、單純跑一段 sandbox 化的 Python）。兩個層級的容器各司其職，跟 Linux 裡 `systemd unit` 和 `transient scope` 的關係很像。

## 戰場不只是 SDK：企業基礎設施的大遷徙

如果你以為只有 Anthropic 在玩這套，那就低估了這波的規模。攤開時間軸看一下 2026 年前半年：

| 時間 | 廠商 | 動作 | 早期客戶 |
| --- | --- | --- | --- |
| 2026-02-05 | OpenAI | [Frontier 平台發布](https://openai.com/index/introducing-openai-frontier/) ，跨本地、企業雲、OpenAI runtime 的 agent 平台 | Uber、Intuit、State Farm、HP、Oracle |
| 2026-04-08 | Anthropic | [Managed Agents 公開 beta](https://siliconangle.com/2026/04/08/anthropic-launches-claude-managed-agents-speed-ai-agent-development/) | Notion、Rakuten、Sentry、Asana |
| 2026-04-21 | 騰訊雲 | Cube Sandbox 全量開源（Apache 2.0） | 自家 CodeBuddy 即用 |
| 持續中 | Palantir | [AI FDE](https://www.palantir.com/docs/foundry/ai-fde/overview) ，AIP 之上的對話式 Foundry 操作員 | 政府、金融、製造業 |

連帶推升的一個新興職位是 **FDE（Forward Deployed Engineer）**。最早是 Palantir 的特色工種，[The Pragmatic Engineer 把它定義成](https://newsletter.pragmaticengineer.com/p/forward-deployed-engineers) 「介於 customer success、solution engineer 與 product engineer 之間的混合體」。換句話說，agent 不再只是程式設計師的玩具，而是一種**新的企業基礎設施**——你得有人帶著它走進客戶現場、跟既有系統融合、處理權限與資料治理。

把這個格局拉回華語圈來看，當很多人還在比 Openclaw 跟 Hermes 哪個 wrapper 比較好用、誰跑分高的時候，海外四大廠已經把戰場搬到 **agent OS**：誰能定義「agent 的容器、會話、記憶、編排」的標準，誰就拿到下一個十年的 infra 入場券。這不是 token 多少錢的競爭，是作業系統等級的競爭。

## 從韌體視角，這套架構為什麼讓我冷汗直流

我自己是硬體 / 韌體工程師背景，看完整套 Managed Agents 設計最強烈的感受是——**這幾乎就是一個跑在雲端的 RTOS。** 把對應關係攤開：

| Managed Agents 概念 | 嵌入式 / RTOS 對應 | 共通的設計教訓 |
| --- | --- | --- |
| Agent（靜態模板） | task descriptor / TCB | 描述「我是誰」與「我能做什麼」要分離 |
| Environment（容器模板） | Board Support Package | 環境依賴必須 declarative，不能塞進 task 邏輯裡 |
| Session（執行實例） | task instance | 同一個 task 可以被 spawn 多份，狀態要本地化 |
| Event stream（append-only log） | 訊息佇列 + RTC trace | 所有狀態變遷必須可追溯、可重放 |
| Memory Store（持久記憶） | 外部 EEPROM / FRAM | 跨 power cycle 的狀態必須跟易失狀態解耦 |
| Coordinator + Threads | dispatcher + worker tasks | 編排者不該幹活，只能調度 |
| 容器壞掉直接重建 | watchdog reset | 失敗的修復策略：reset，而不是 patch |

換句話說，AI 圈花了五年才意識到「狀態跟硬體要解耦、編排者不能幹活、失敗了不修只重啟」這幾條教訓——而這些是嵌入式工程師在 2000 年代就已經被市場毒打到肌肉記憶的紀律。當你看 Anthropic 的部落格說「the container became cattle」時，韌體圈會心一笑：我們十五年前就在說「watchdog reset 不丟臉，丟臉的是不會 reset」。

> **可立即動手的三個改動**：
>
> 1. **如果你還在維護 harness 補丁**：對照官方 docs 確認哪些功能 Anthropic 已經內建，把你的補丁砍掉。模型版本一進化，這些補丁就是技術債。
> 2. **如果你在跑本地多 agent**：先做的不是換框架，而是把「狀態」（記憶 / 對話 / 中間檔）從 worker 容器拆出來。容器要可以隨時殺。
> 3. **如果你在評估 sandbox 方案**：把 Docker 跟 Cube Sandbox 並存——常駐服務用 Docker，ephemeral 任務換 Cube。冷啟動延遲從秒級降到 100 ms 內，使用者體感差異是肉眼可見的。



---

## 參考資料

- [Anthropic Engineering — Scaling Managed Agents: Decoupling the brain from the hands](https://www.anthropic.com/engineering/managed-agents) （2026-04-08）
- [Claude Managed Agents Overview](https://platform.claude.com/docs/en/managed-agents/overview)
- [Multiagent sessions — Claude API Docs](https://platform.claude.com/docs/en/managed-agents/multi-agent)
- [Using agent memory — Claude API Docs](https://platform.claude.com/docs/en/managed-agents/memory)
- [Anthropic Managed Agents 公開 beta 新聞稿](https://siliconangle.com/2026/04/08/anthropic-launches-claude-managed-agents-speed-ai-agent-development/) （SiliconANGLE，2026-04-08）
- [Tencent Cloud Cube Sandbox 開源新聞稿（PR Newswire）](https://www.prnewswire.com/news-releases/tencent-cloud-cube-sandbox-goes-fully-open-source-with-five-major-breakthroughs-enabling-large-scale-agent-deployment-302751501.html)
- [TencentCloud/CubeSandbox — GitHub](https://github.com/TencentCloud/CubeSandbox)
- [OpenAI Frontier — Enterprise AI agent platform](https://openai.com/index/introducing-openai-frontier/) （2026-02-05）
- [Palantir AI FDE — Foundry Docs](https://www.palantir.com/docs/foundry/ai-fde/overview)
- [The Pragmatic Engineer — Forward Deployed Engineers](https://newsletter.pragmaticengineer.com/p/forward-deployed-engineers)
- [Claude Agent SDK — GitHub (anthropics/claude-agent-sdk-python)](https://github.com/anthropics/claude-agent-sdk-python)
