架構報告 ② · OpenManus / Manus 模式

OpenManus 架構把「編排器」放在伺服器,程式碼進隔離沙箱執行

OpenManus 把代理迴圈(編排器)與多代理規劃流程跑在伺服器程序上,工具與生成程式碼丟進隔離沙箱(本機 Docker 或 Daytona 雲端)執行,並能透過 A2A / MCP server 對外暴露成網路服務——這就是 Manus 的託管模式。

編排器位置:伺服器 / 雲端 核心:PlanningFlow + BaseAgent 執行隔離:Docker / Daytona 沙箱 對外:A2A · MCP 服務

01知識圖譜概況

方法:git clone 後以 graphify 建立知識圖譜(AST + 多代理語意擷取),再交叉閱讀核心檔案。

1,168節點 nodes
2,097關係 edges
82社群 communities
130檔案 files
93%EXTRACTED 證據

神級節點(連結最多的核心抽象)

互動式知識圖譜:graphify-out/graph.html(瀏覽器直接開,可縮放探索全部社群)。

02架構圖

編排器在中央伺服器;不可信的生成程式碼被關進右側的隔離沙箱;使用者是送任務的薄客戶端。

👤 使用者 (薄客戶端) • 終端 input • A2A JSON-RPC • MCP client 送任務 / 收結果 🖧 伺服器 / 雲端程序(編排器在此) 入口 / 服務暴露層 main.py · run_flow.py · run_mcp.py · sandbox_main.py A2A Server(Agent Card 廣告 skills) · MCP Server ⚙ 流程 / 編排層 · PlanningFlow 用 LLM + PlanningTool 產生計畫,逐步派給執行代理(多代理協作) FlowFactory · BaseFlow · PlanStepStatus 代理 / 迴圈層(編排器核心) BaseAgent:狀態機 + max_steps 迴圈 ReAct think→act · ToolCallAgent Manus·Browser·SWE·MCP·DataAnalysis think→工具→回流 LLM 層 LLM 統一客戶端 BedrockClient config.toml 切供應商 工具層(統一 BaseTool 協定 → ToolCollection) Bash · PythonExecute · StrReplaceEditor · BrowserUseTool · WebSearch PlanningTool · Terminate · AskHuman · ComputerUseTool · ChartVisualization ↓ 需執行程式碼/shell/瀏覽器 → 丟進沙箱 協定 / 互通 MCPClients · MCPServer A2A(A2AManus, Agent Card) 資料模型 Message · Memory · AgentState Role · ToolChoice ☁ 外部 LLM 供應商 API(預設) OpenAI / Azure / Bedrock / Ollama…(可改指向本機模型) 📦 本機 Docker 沙箱 DockerSandbox SandboxManager AsyncDockerizedTerminal 隔離執行 shell / 程式碼 指令 sanitize 防注入 ☁ Daytona 雲端沙箱 SandboxToolsBase sb_shell / sb_files sb_browser / sb_vision VNC 可視 + web 預覽 URL 遠端容器執行 supervisord 服務
使用者(薄客戶端) 伺服器 / 編排器 隔離沙箱(執行) 外部 LLM / 雲端

03分層解構

執行位置:伺服器 兩者皆可

04一次任務的生命週期

任務在伺服器被編排,程式碼在沙箱被執行,結果再回傳給薄客戶端。

    05安全模型與擴充 / 對外暴露

    🛡 安全邊界 = 容器隔離(而非能力把關)

    因為編排器在伺服器跑、可能執行不可信的生成程式碼,OpenManus 用 Docker / Daytona 容器把 shell、程式碼、瀏覽器動作關進隔離環境,並對指令做 sanitize 防注入;SandboxManager 控管容器數量與閒置回收。

    相對地,沒有像 Claude Code 那樣的逐工具 allow/deny/ask 權限分層或 Plan Mode 人工核可節點——安全靠「沙箱隔離」,不是「能力暴露控制 + 人工核可」。

    🔌 擴充偏「服務 / 協定」層級

    A2A 協定把整個 Manus 當成網路代理服務:.well-known/agent.json 的 Agent Card 以 skills 列表廣告能力(Python Execute、Browser use…),用 JSON-RPC message/send 接任務。MCP server 把工具暴露給其他代理;MCP client 反向接入外部工具。

    多代理則在 run_flowconfig.toml 加掛代理(如 DataAnalysis),由 PlanningFlow 編排。注意:這裡的「skill」是服務廣告的能力,不是每位使用者本機、可由 admin 治理的 skill 目錄。

    06優勢與限制(對 DGX 場景)

    ★ 這正是決策的「選項 B:skill 集中在 Spark」的參考實作

    本案建議的做法——skill 集中在團隊共享的 Spark、每位 user 用獨立空間(沙箱)隔離、admin 集中指派——OpenManus 就是現成範本:伺服器端編排器(PlanningFlow + 代理迴圈)+ 每任務/每 user 的隔離沙箱(DockerSandbox / SandboxManager)+ 集中工具/技能註冊。最快上手、最少維運、skill IP 不外流到裝置。

    落地時建議用本機 Docker 沙箱(而非 Daytona 雲端)做 user 間隔離,讓 skill 與資料都留在 Spark 內;並控管單台 Spark 的並發(每 user 資源上限/排隊)。完整對照與行動清單見 ③ 決策報告

    優勢

      限制