REVERSE ENGINEERING REPORT

Manus AI 1.4.1

通过逆向 Electron 桌面客户端(asar 解包 + Go sidecar strings 分析),完整还原 Manus 产品架构、后端 API、通信协议与基础设施

版本 1.4.1 文件数 1,077 前端 81 MB Sidecar 12.4 MB 分析日期 2026-04-01

01 逆向概览

40
主进程 JS 文件
1,027
前端 JS Chunks
12+
gRPC 服务
40+
IPC 通道
20+
Agent 工具
30+
WS 事件类型

逆向方法

DMG 挂载 asar 解包 主进程 JS 分析 前端 Chunk 搜索 Sidecar strings 协议还原
Manus 是 Electron 应用,前端完全可读(JS 未加密),后端 Go 仓库为 github.com/manus-ai/sdk-bizserver-go,母公司内部代号 butterfly-effect.dev

02 整体架构

 Manus Desktop (Electron)
 ========================
 +----------------------------------+     +--------------------------+
 |  Renderer (Next.js + Redux)      |     |  Main Process (Node.js)  |
 |  - 6 个页面路由                   |     |  - 40+ IPC 通道           |
 |  - Connect-Web (Protobuf)        |<===>|  - 窗口/菜单/快捷键管理   |
 |  - Socket.IO 客户端              |     |  - MyComputer 文件共享    |
 |  - Redux 状态管理                |     |  - 自动更新               |
 +----------------------------------+     +------------+-------------+
                  |                                     |
                  | HTTPS / WSS                         | Local WS
                  |                                     |
                  v                                     v
 +----------------------------------+     +--------------------------+
 |  api.manus.im (Go Backend)      |     |  Sidecar (Go Binary)     |
 |  ================================|     |  ========================|
 |  REST API:                       |     |  ws://127.0.0.1:19780    |
 |    /api/chat/*  (会话管理)       |     |  Protobuf over WebSocket |
 |    /api/internal/* (管理后台)    |     |                          |
 |                                  |     |  Sandbox 协议:           |
 |  gRPC (Connect Protocol):       |     |    Mount / ReadFile /    |
 |    FileService (S3 签名)         |     |    WriteFile / MkDir /   |
 |    ImageService (OCR + AI生图)   |     |    Remove / Rename ...   |
 |    TelecomService (短信/电话)    |     |                          |
 |    OrchestratorSandboxService    |     |  Terminal 协议:          |
 |    PromotionService              |     |    PTY 分配 / 命令执行 / |
 |    BrowserDataService            |     |    输出读取 / 信号发送   |
 |    ... 12+ 服务                  |     |                          |
 |                                  |     |  Prompt 标记:            |
 |  Socket.IO (3 条连接):          |     |    __MANUS_PROMPT__      |
 |    /socket.io     - 主聊天       |     +--------------------------+
 |    /notifier-v2   - 通知推送     |
 |    /meeting.io    - 语音/STT     |
 +----------------------------------+
                  |
                  v
 +----------------------------------+
 |  Cloud Sandbox (microVM)         |
 |  ================================|
 |  manus.computer                  |
 |  - Firecracker microVM           |
 |  - Neko (WebRTC 远程桌面)        |
 |  - VS Code Server                |
 |  - Web 开发服务器                |
 |                                  |
 |  manus.space (部署平台)          |
 |  files.manuscdn.com (CDN)        |
 +----------------------------------+

03 域名体系

生产环境

域名用途备注
api.manus.imAPI + WebSocket + gRPC核心后端
manus.im主站
manus.computer沙箱环境每个会话独立 microVM
manus.space部署平台用户 Web 项目托管
manus-preview.space预览部署
pages.manus.imPages 服务
download.manus.im客户端下载自动更新源
files.manuscdn.comCDN静态资源 + 文件
metrics.manus.imUmami 分析自建分析平台
open.manus.ai开放 API 文档
sentry.prod.ops.butterfly-effect.devSentry 监控母公司域名
cname.manus.space自定义域名 CNAME
104.18.26/27.246Cloudflare A 记录自定义域名解析

开发/预发环境

域名用途发现
vidabiz.butterfly-effect.devRPC + 通知 WS内部开发服务器
localhost:4000聊天 WebSocket本地开发
localhost:4001STT WebSocket本地开发
manuspre.computer预发沙箱
mircovm.commicroVM拼写错误暴露技术栈
mircovm.com (注意 "mirco" 不是 "micro") -- 开发者的拼写错误暴露了沙箱使用 microVM 技术(大概率 Firecracker)。

04 REST API

Chat API — /api/chat/* (17 个端点)
方法路由参数说明
GET/api/chat/getSessionV2sessionId, type?, startSegmentEndpoint?获取会话(分段加载)
GET/api/chat/getSessionsessionId, type?, sig?获取会话
POST/api/chat/deleteSessionsessionId删除会话
GET/api/chat/getSessionFilesV2sessionId, type?会话文件列表
POST/api/chat/getPresignedUploadUrlfilename, fileType, fileSizeS3 预签名上传
POST/api/chat/uploadCompleteid, filename, fileSize上传完成确认
POST/api/chat/getDownloadUrlsignedCdnUrl获取下载 URL
POST/api/chat/requestVncOtpsessionIdVNC 远程桌面 OTP
POST/api/chat/requestVsCodeOtpsessionIdVS Code OTP
POST/api/chat/startVsCodeServersessionId启动 VS Code
POST/api/chat/scheduleTasksessionId, userId, detail, title...创建定时任务
GET/api/chat/getSandboxStatussandboxUrl, sessionId沙箱状态
POST/api/chat/startSandboxsessionId?, force?启动沙箱
POST/api/chat/wakeMobilePreviewsessionId, projectId唤醒移动预览
GET/api/chat/getMobilePreviewStatussessionId, projectId移动预览状态
GET/api/chat/getOnlineMyBrowserClients-在线浏览器列表
GET/api/chat/getMapReduceToolsessionId, actionIdMapReduce 详情
Internal API — /api/internal/* (管理后台)
方法路由参数说明
POST/api/internal/resetDailyQuotauserId?, email?, password?, quota?重置每日配额
POST/api/internal/fixUrlMetasessionId, password?修复 URL 元数据
其他 API (行为追踪 / 工具)
方法路由说明
POST/api/user_behavior/batch_create_event_v2用户行为批量上报
GET/api/website_tool/fetch_website_favicon获取网站 favicon

05 gRPC/Connect 服务

后端仓库:github.com/manus-ai/sdk-bizserver-go,前端通过 Connect-Web (@connectrpc) 以 HTTP POST + Protobuf 调用。

逆向发现的 10 个服务

FileService file/v1

SignUrl / BatchSignUrl / SandboxSignUrl / SandboxSignPrivateUrl

存储桶: SESSION_FILE, MARKDOWN, SLIDE_TEMPLATE, SLIDE_IMAGE, WEB_DEV_LOGO, PROJECT, SESSION_CANVAS

ImageService bizimage/v1

OCR / GenerateImage / MarkGenerateImage

模型: FLUX_KONTEXT_PRO, FLUX_KONTEXT_MAX, GEMINI_3_PRO, GPT_IMAGE_1, QWEN_IMAGE_EDIT

OrchestratorSandboxService orchestrator/v1

SandboxSendEmail / SandboxListSessionEmails / SandboxGetEmail / SandboxGetEmailFileDownloadUrl

TelecomService telecom/v1

SendSMS / ListSmsMessages / ListUserPhoneNumbers / ConfigureSmsCallback / MakeCall / ListSessionCalls

PromotionService promotion/v1

RedeemPromotionCode / RedeemPromotionCodeV2 / LoopPromotionCodeRedeemStatus

BrowserDataService manus_browser/v1

ListBrowserData / DeleteBrowserData

UserApiProxyService user_apiproxy/v1

AudioTranscription

OpenapiInternalService openapi/v1

OnTaskCreatedCallback / OnTaskStoppedCallback / OnTaskProgressCallback

EnterprisePreferenceAdmin enterprise/v1

GetTeamPreference / UpdateTeamPreference

TeamDomainBlacklist team/v1

SaveDomainBlacklist/Whitelist / ListDomainBlacklist/Whitelist / CheckDomainAccess

抓包新发现的 6 个服务(逆向未发现)

服务方法说明
session.v1.CanvasServiceGetCanvas / UpsertCanvasS3 / BatchUpsertCanvas画布状态管理(图片生成追踪)
knowledge.v1.KnowledgeServiceListKnowledgeEvents知识库事件
space.v1.SpaceServiceGetSpaceStatus / GetEditSpaceSiteCodeSpace 部署管理
webdev.v1.WebDevServiceGetWebDevProject / GetProjectDirectory / GetProjectFile / ListCustomDomainsWebDev 项目管理
webdev.v1.WebDevAuthServiceIssueProjectJwtToken项目 JWT 认证
user.v1.SubscriptionServicePreview / ListInvoices订阅和发票

06 WebSocket 通信协议

3 条 Socket.IO 连接

用途URLPath
主聊天wss://api.manus.im/socket.io
通知推送wss://api.manus.im/notifier-v2-socket-io
语音/STTwss://api.manus.im/meeting.io

连接参数

{
  "token": "用户认证令牌",
  "locale": "zh-CN",
  "tz": "Asia/Shanghai",
  "clientType": "desktop",
  "transports": ["websocket"]
}
客户端发送的消息格式

加入会话 (join_session)

{
  "type": "join_session",
  "id": "<uuid>",
  "sessionId": "<session_id>",
  "lastMessageId": "<event_id>",
  "timestamp": 1234567890,
  "version": 2
}

用户消息 (event)

{
  "type": "event",
  "sessionId": "<session_id>",
  "messageStatus": "pending",
  "event": {
    "type": "chat",
    "sender": "user",
    "messageType": "text",
    "content": "消息内容",
    "attachments": [],
    "taskMode": "..."
  }
}
服务端推送事件类型 (30+ 种)

Agent 核心

事件说明
statusUpdateAgent 状态 (running / stopped / waiting / error)
toolUsed工具使用完成
newPlanStep新计划步骤
chat聊天消息
chatDelta流式增量输出
explanation思考过程
planUpdate计划更新
queueStatusChange排队状态

会话 / WebDev / 媒体 / 设备

事件说明
session_joined / session_left会话加入/离开
agent_errorAgent 错误
collaborationStatusUpdate协作状态
webdevGitSyncCheckResultGit 同步检查
webdevHomepageUpdated主页更新
speechGenerationUpdate语音生成
videoGenerationUpdate视频生成
terminalUpdate终端输出
desktopDevicesUpdate设备列表
connectorOauthExpiredOAuth 过期
mcpAuthorizationNotifyMCP 授权
contextTooLong上下文过长

07 Agent 工具定义

Agent 状态机

running stopped
running waiting running
running error

工具状态流转

start argumentsFinished streaming success / error / fallback

完整工具列表 (20+)

工具子工具 / 操作说明
browsernavigate, console_exec, console_view, save_image浏览器控制
my_browser-用户浏览器代理
computer_use-计算机操作
terminal-终端命令
text_editorwebdev-file-edit, debug, slides文本编辑
search-网页搜索
search_scholar-学术搜索
search_image-图片搜索
media_viewer图片 / 视频生成多媒体
webdevinit_project, check_status, save/rollback_checkpoint, restart_server, debugWeb 开发
map_reduce-并行任务分解
slides-幻灯片制作
gmail-Gmail 操作
google_calendar-Google 日历
outlook_mail / outlook_calendar-Outlook 集成
meta_marketing-Meta 营销
suggestion-建议
task_scheduled-定时任务
need_accept-需要用户确认

08 Sidecar 本地代理

Go 1.26
开发语言
12.4 MB
ARM64 二进制
:19780
本地 WS 端口
chenqiang
开发者

三层 Protobuf 协议

Bridge Envelope (最外层信封)
├── Envelope_Sandbox ──► 文件系统操作
│   ├── Mount          注册本地挂载路径
│   ├── Stat           获取文件信息
│   ├── ReadDir        读取目录
│   ├── ReadFile       读取文件内容
│   ├── WriteFile      写入文件内容
│   ├── CreateFile     创建新文件
│   ├── MkDir          创建目录
│   ├── Remove         删除文件/目录
│   ├── Rename         重命名
│   └── Truncate       截断文件
│
└── Envelope_Terminal ──► 终端操作
    ├── PTY 伪终端分配 (creack/pty)
    ├── Shell 查找 (zsh > bash > sh)
    ├── 命令执行 + 输出流
    ├── sendLine / sendKey / sendControl
    ├── killProcessGraceful / Force
    └── Prompt 检测: __MANUS_PROMPT__

源码仓库结构(从二进制还原)

// 开发者 GOPATH: /Users/chenqiang/go/pkg/mod/
// 仓库路径: manus-sandbox/sbx-go-svc/

packages/
├── sidecar/
│   ├── cmd/sidecar/
│   │   ├── main.go                 // 入口
│   │   ├── terminal.go             // 终端管理核心
│   │   ├── terminal_pty_unix.go    // PTY 伪终端
│   │   └── terminal_shell_unix.go  // Shell 查找
│   └── internal/
│       ├── parentwatch/            // 父进程监控
│       └── wsurl/                  // WebSocket URL
└── ws-server/
    └── sdk/go/
        ├── bridge/v1/bridge.pb.go  // Bridge 协议
        ├── sandbox/v1/sandbox.pb.go // 文件系统协议
        └── terminal/v1/terminal.pb.go // 终端协议
Sidecar 本质是一个远程文件系统 + 远程终端代理。云端 AI Agent 通过它读写用户本地文件、在本地执行 shell 命令。

09 沙箱实现

microVM Firecracker?

每个会话独立虚拟机。域名 mircovm.com 泄露(拼写错误 mirco),沙箱域名 manus.computer

Neko 远程桌面 WebRTC

通过 requestVncOtp 获取 OTP,返回 nekoOtp: {username, webrtc_token},基于 WebRTC 的浏览器远程桌面。

VS Code Server OTP

每个沙箱可启动独立的 VS Code 服务器,通过 OTP 一次性密码认证。

Web 开发服务器 Deploy

沙箱内运行 dev server,支持移动端预览(Expo)、Git 同步、自定义域名、Stripe 集成。

沙箱生命周期

starting running pausing paused resuming stopped deleting deleted

抓包实况数据

VNC 远程桌面配置

{
  "authEnabled": true,
  "otp": "2cf558de...ab65a",
  "nekoOtp": {
    "username": "neko",
    "webrtc_token": "ec2a0aeb520e9fd7"
  }
}

Sandbox 状态

{
  "sandboxID": "ic3l1wbdvbsi29i42okhc",
  "clientID": "03f3572a",
  "status": "running",
  "devServerResCode": 200
}
// 沙箱内路径: /home/ubuntu/
// 证实使用 Ubuntu 虚拟机

10 泄露的第三方密钥

以下均为前端公开密钥(site key / publishable key),非服务端私钥,属于正常暴露范围。
服务Key用途
Cloudflare Turnstile0x4AAAAAAA_sd0eRNCinWBgU人机验证
hCaptcha7b4c0ca8-0e48-...0e16备选验证
Google Drive1073362082968-...svhvgof1bht9me0eo文件集成
Google MapsAIzaSyDcXHo-1cHpFHPMlBDoMHnvI6r00_XkNKg地图
FingerprintJSnG226lNwQWNTTWzOzKbF设备指纹
Amplitude46ac3f9abb41dd2d17a5785e052bc6d3数据分析
Intercomk7n2hgls客服系统
Facebook Pixel1383830073227216广告追踪
GTMGTM-TFGFC7KH标签管理
Sentry DSN...@sentry.prod.ops.butterfly-effect.dev/54错误监控

11 AI 模型体系

核心结论:客户端未硬编码任何 AI 文字模型 API Key。所有 AI 调用完全在服务端进行,前端只是 WebSocket 传话筒。

文字推理模型(严格证据分级)

以下严格区分三个证据等级:已证实(逆向代码/抓包数据直接证明)、公开来源(官方博客/论文)、未知(无一手证据)。

逆向搜索结果

搜索项结果说明
sk-* (OpenAI Key 格式)未发现匹配项均为误报(函数名等)
OpenAI / Anthropic / Claude未发现仅出现在 BYOK 示例说明文本中
GPT-4 / GPT-3.5 / DeepSeek未发现前端不包含任何模型名
Gemini / Qwen / Mistral / LLaMA未发现文字模型完全服务端化
apiKey / api_key仅公开 KeyGoogle Maps 等前端公开 Key

公开来源(官方博客/论文,非一手验证)

主推理引擎

Claude 3.5 Sonnet v1

Anthropic 的 Claude 3.5 Sonnet 是 Manus 的核心推理模型,负责规划、代码生成和复杂逻辑推理。团队内部已在测试 Claude 3.7。

辅助模型

Qwen (微调版)

阿里巴巴通义千问的微调版本,作为补充模型处理特定任务。与逆向发现的 QWEN_IMAGE_EDIT 一致。

多模型动态路由

Task-Level Routing

根据任务类型动态选择模型:Claude 做复杂推理、GPT-4 做编码、Gemini 做多模态/知识查询。官方称为"多重签名机制"。

无法证实(标记为未知)

问题原因
GPT-4 是否用于编码仅第三方分析,无一手证据
Gemini 是否用于文字任务代码只有图片枚举
文字主模型的具体版本前端代码和抓包均未暴露
agent_feature v46-v89 各控制什么只有变量名和 on/off

图片生成模型:前端选择器(3 个选项)

nanoBananaPro 高端

内部代号: nano-banana

"Advanced model for professional creative work"

品牌物料、幻灯片等专业场景强制使用

nanoBanana2 性价比

内部代号: nano-banana-2

"Cost-effective model for near-pro performance"

接近专业品质,成本更低

gptImage 通用

内部代号: gpt-image

"Efficient standard model for general use"

OpenAI GPT Image,通用标准

"nanoBanana" 是 Manus 自己的品牌名,不是模型本身。它是一个路由层,后端根据任务类型分发到实际的图片生成模型。

品牌名 → 后端实际模型映射

nanoBananaPro (nano-banana)
  └─── FLUX_KONTEXT_PRO       Black Forest Labs  高质量生成
  └─── FLUX_KONTEXT_MAX       Black Forest Labs  最高质量
  └─── GEMINI_3_PRO_IMAGE     Google            多模态生成

nanoBanana2 (nano-banana-2)
  └─── GEMINI_2_5_FLASH_IMAGE Google            快速生成
  └─── QWEN_IMAGE_EDIT        Alibaba           图片编辑

gptImage (gpt-image)
  └─── GPT_IMAGE_1            OpenAI            DALL-E

具体路由规则在服务端,前端只传代号 (nano-banana / nano-banana-2 / gpt-image)

模型选择决策逻辑(逆向代码还原)

用户选择任务类型
  |
  v
extraFeature = "image-style" ?
  |
  +-- YES --> 显示模型选择器(3 个选项)
  |           |
  |           +-- 用户是付费会员?
  |           |     YES → 默认 nano-banana (nanoBananaPro)
  |           |     NO  → 默认 gpt-image (gptImage)
  |           |
  |           +-- 用户手动切换:
  |                 nano-banana     需要会员,非会员弹 "Unlock nanoBananaPro"
  |                 nano-banana-2   需要 A/B 实验开启 (getNanoBanana2Variant=treatment)
  |                 gpt-image       所有人可用
  |
  +-- NO, extraFeature = "slides" ?
  |     |
  |     +-- specialExecutorFeature = "advanced_image" ?
  |           YES → 强制 nanoBananaPro,标题显示 "Slides · nanoBananaPro"
  |           NO  → 普通幻灯片,不指定图片模型
  |
  +-- NO, extraFeature = "video" ?
  |     → 走 video-generator Skill(后端选模型)
  |
  +-- 其他任务类型 → 不涉及图片模型选择

选中后,模型代号写入 chatExtData:
  { from: "image-style", extraFeature: "image-style", model: "nano-banana" }

视频生成 + 语音生成

视频生成

WebSocket 事件: videoGenerationUpdate + videoGenerationOffer

官方 Skill: video-generator "专业的 AI 视频制作工作流"

用户确认流程: 推送 videoGenerationOffer → 用户选择接受/拒绝 → confirm_video_generation_offer

具体模型未知 -- 可能是 Kling / MiniMax / Luma / Runway

语音生成 (TTS)

WebSocket 事件: speechGenerationUpdate

工具类型: tool_call_speech_generate_file

具体 TTS 模型未知 -- Connectors 中有 ElevenLabs

debugModelOverride 隐藏功能

// 前端代码中的调试功能(仅内部开发者可用)
debugModelOverride: JSON.stringify({ all: "model_name" }, null, 2)
isDebugModelOverrideActive: true / false

Manus 内部开发者可以通过此功能覆盖 AI 模型,但具体模型列表由后端动态下发,前端看不到。

89 个 A/B 测试变量

// Agent 功能实验变量(v46 到 v89)
agent_feature_v46: "control"    // 对照组
agent_feature_v50: "off"
agent_feature_v51: "off"
agent_feature_v55: "off"
agent_feature_v67: "off"
agent_feature_v81: "off"
agent_feature_v88: "off"
agent_feature_v89: "off"
// ... 共 89 个版本
// 推测:不同版本对应不同的模型选择/Prompt 策略/工具编排方案

12 Agent 架构与编排

以下信息综合自逆向代码、抓包数据、官方博客、学术论文和 GitHub 技术分析。

公司背景

项目详情
开发公司Butterfly Effect Pte Ltd(新加坡)
创始人Xiao Hong
发布日期2025-03-06
被收购2025 年 12 月被 Meta 以 ~$20-30 亿收购
最新版本1.5(2025-10-16)/ 桌面端 1.4.1
内部代号butterfly-effect.dev(与逆向发现一致)

三层 Agent 架构

用户请求: "帮我做一个数据分析报告"
     │
     ▼
┌─────────────────────────────────────────────────────────────┐
│  Planner Agent (规划层)                                     │
│  ─────────────────────                                      │
│  - 将目标分解为有序步骤                                      │
│  - 生成伪代码格式的执行计划                                  │
│  - 协调子任务分配                                            │
│  - 选择每步使用的工具和模型                                  │
│                                                             │
│  输出: [搜索数据源 → 下载数据 → 清洗 → 分析 → 生成报告]     │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  Execution Agent (执行层)                                    │
│  ─────────────────────                                      │
│  - 调用工具与外部系统交互                                    │
│  - 使用 CodeAct 机制: 生成可执行 Python 代码作为行动格式     │
│  - 在云端沙箱 (microVM) 中执行                               │
│  - 每步: 分析 → 生成代码 → 执行 → 观察结果                  │
│                                                             │
│  工具: browser / terminal / text_editor / search / webdev   │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  Verification Agent (验证层)                                 │
│  ─────────────────────────                                   │
│  - 审查执行结果的准确性和完整性                              │
│  - 检查输出是否符合用户预期                                  │
│  - 不通过 → 触发重新规划 (回到 Planner)                     │
│  - 通过 → 返回最终结果给用户                                │
└─────────────────────────────────────────────────────────────┘

CodeAct 行动机制

Manus 的核心创新:用可执行 Python 代码替代固定 JSON 工具调用

传统方式 (JSON Tool Call)

// 每次只能调一个工具,格式固定
{
  "tool": "search",
  "args": { "query": "GDP data" }
}

CodeAct 方式 (Manus)

# 生成可执行代码,支持条件逻辑
import pandas as pd
data = search("GDP data 2024")
if data.format == "csv":
    df = pd.read_csv(data.url)
    result = df.describe()
else:
    result = parse_html(data)

上下文工程(官方博客核心策略)

策略做法原因
KV-Cache 命中率优化 保持 system prompt 前缀稳定;仅追加上下文;JSON 序列化确定性 缓存 vs 未缓存成本差 10 倍($0.30 vs $3.00/百万 token)。输入输出比 100:1
工具掩码而非移除 使用上下文感知状态机管理工具可用性,通过 token logit 掩码控制 动态加载/卸载工具会破坏 KV-cache 前缀
文件系统作为外化记忆 将中间结果写入文件,上下文超限时压缩(保留路径、删除内容) 文件系统 = 无限大小的持久化上下文
todo.md 重述机制 自动创建和更新 todo.md,将全局计划推入近期注意力窗口 避免"中间丢失"问题(长上下文中部信息被忽略)
保留错误轨迹 不隐藏失败操作,让模型看到错误 + 错误观察 模型隐式更新内部信念,形成错误恢复能力
结构化变异 对重复性任务注入不同序列化模板、替代措辞、细微噪声 防止模型模仿上下文中的模式导致行为漂移

System Prompt 模块化结构

// 从 GitHub 技术分析中还原的 Prompt 结构

<tool_use_rules>
  工具调用规范:每次循环只执行一个 action
  支持三种模式:auto / required / specified
</tool_use_rules>

<browser_rules>
  浏览器交互指南:必须点击链接验证,不能只依赖搜索摘要
</browser_rules>

<coding_rules>
  代码生成标准:CodeAct 格式,Python 优先
</coding_rules>

<info_rules>
  信息来源优先级与引用规范
</info_rules>

<writing_rules>
  输出格式要求:详细度控制,避免纯列表
</writing_rules>

Agent 工作流六阶段模型

Phase 1: 初始化 (T+0s)
  │  并发 15+ API 调用加载用户上下文
  │  GetExchangeInfo + CheckRegion + GetUserExperimentVars
  │  ListSessions + ListSkills + ListConnectors + OrchestratorService/GetSession
  │  加载 89 个 agent_feature 实验变量(决定本次使用哪种编排策略)
  │
  ▼
Phase 2: 输入处理 (T+3min)
  │  用户上传文件 → getPresignedUploadUrl → S3 上传 → uploadComplete
  │  上传后立即调用 GenerateDocumentSuggestion(AI 分析文件内容生成建议)
  │  建议以 3 条一组返回
  │
  ▼
Phase 3: Agent 执行 (T+5min ~ T+15min)  ← 核心阶段,走 WebSocket 不走 HTTP
  │  用户发送任务指令 → Socket.IO → 后端 Agent 编排器
  │  HTTP 侧可观察: UpdateReadPosition / requestVncOtp
  │  Agent 在 Ubuntu 沙箱中执行: 写 Python 脚本 / 调用 API / 生成图片 / 部署网站
  │
  ▼
Phase 4: Canvas 产出物追踪 (T+15min ~ T+20min)
  │  Agent 生成图片/文件 → 后端创建 Canvas Artifact
  │  前端高频轮询 GetCanvas(~1次/秒)
  │
  ▼
Phase 5: 会话完成 (T+20min)
  │  SESSION_STATUS_STOPPED → GetSession 确认 → ListUserCreditsLog
  │
  ▼
Phase 6: 后续交互 (T+20min+)
  │  用户浏览产出物 / 继续对话 → 回到 Phase 3

HTTP vs WebSocket 分工

HTTP/gRPC 负责 状态查询

  • 用户信息、会话列表、积分余额
  • 文件上传(S3 预签名)
  • Canvas 状态轮询
  • VNC/沙箱状态查询
  • WebDev 项目管理

可以理解为"读操作"

WebSocket (Socket.IO) 负责 事件流

  • 用户发送消息
  • Agent 思考过程 (explanation)
  • 计划生成和更新 (planUpdate)
  • 工具调用 (toolUsed)
  • 状态更新 (statusUpdate)
  • 流式输出 (chatDelta)

可以理解为"写操作 + 实时推送"

Agent 真实执行记录(抓包 lastDisplayMessage 还原)

14:00  Canvas 开始 — artifact=1 GENERATING

14:23  SESSION_STATUS_WAITING
       “关键帧已生成,效果非常好!现在开始用这些关键帧
       生成品牌启动动画视频。”
       → Agent 暂停,等待异步操作

14:25  SESSION_STATUS_RUNNING — Agent 恢复执行

14:35  “编写集成操作手册...研究 LobeChat 源码结构”

14:39  “Logo 设计完成!4 个版本”

14:43  “IP 角色 Wrench 和 Dash 完成”

14:44  WebDev 项目创建: obdx-website
       13 个 React TSX 组件一次性提交

14:48  “选择"暗夜车库 (Dark Garage Aesthetic)"方案构建 OBDX 官网”

14:56  “官网完成。Agent 自发现 CTA 背景问题并修复14:58  用户追加"大叔版本"需求 → Agent 切换到新子任务

15:05  “设计品牌宣传海报”

15:14  “三种语言标注的表情图集(英/法/西)”

6 个已证实的行为模式

并行执行

14:35 Agent 在写文档的同时,Canvas artifacts 仍在从 6 增长到 12。文字生成和图片生成并行进行。

证据: GetSession lastMsg 时间 vs Canvas GetCanvas 轮询时间

自我纠错

14:56 Agent 完成官网后主动发现背景不融合暗色主题,自行修复。无用户指令触发。

证据: lastDisplayMessage 原文

中途追加需求

14:58 用户在 Agent 运行中追加需求,Agent 不中断当前工作流切换子任务。

证据: lastMsg 内容变化 + SESSION_STATUS 保持 RUNNING

状态暂停/恢复

14:23 WAITING → 14:25 RUNNING。Agent 等待异步操作时暂停,完成后自动恢复。

证据: GetSession status 字段变化

Canvas 并行度 = 4

同一时刻最多 4 张图片处于 GENERATING 状态。14:22 时 total=16, LOADED=12, GENERATING=4。

证据: Canvas GetCanvas 响应中的 artifact status 计数

单会话多轮任务

依次完成: 品牌图片 → 集成手册 → 官网 → 表情包 → 新角色 → 海报 → 多语言表情。

证据: lastMsg 任务主题变化时间线

完整消息时序图

  客户端                    服务端                     沙箱/Sidecar
    │                          │                            │
    │─── join_session ────────►│                            │
    │◄── session_joined ───────│                            │
    │                          │                            │
    │─── event (用户消息) ────►│                            │
    │◄── confirmed ────────────│                            │
    │                          │                            │
    │◄── statusUpdate:running──│                            │
    │◄── explanation ──────────│                            │
    │◄── newPlanStep ──────────│                            │
    │                          │                            │
    │                          │── 启动沙箱 ───────────────►│
    │                          │◄─ 沙箱就绪 ────────────────│
    │                          │                            │
    │◄── toolUsed:start ───────│── terminal 命令 ──────────►│
    │◄── terminalUpdate ───────│◄─ 命令输出流 ──────────────│
    │◄── toolUsed:success ─────│◄─ __MANUS_PROMPT__ ───────│
    │                          │                            │
    │◄── toolUsed:start ───────│── text_editor 写文件 ─────►│
    │◄── toolUsed:success ─────│◄─ 写入完成 ────────────────│
    │                          │                            │
    │◄── toolUsed:start ───────│── browser 截屏 ───────────►│
    │◄── toolUsed:success ─────│◄─ 截图 URL ───────────────│
    │                          │                            │
    │◄── planUpdate ───────────│                            │
    │◄── chat (最终回复) ──────│                            │
    │◄── statusUpdate:stopped──│                            │
    ▼                          ▼                            ▼

特殊流程 6 种

排队等待

queueStatusChange → 前端显示排队位置 → 轮到时自动开始

Free 1 并发 / Pro 3 / Team 20

等待用户输入

statusUpdate: waiting + need_accept 工具 → 用户确认后继续

上下文过长

contextTooLongcontextTransferFlag → Agent 自动压缩历史 → contextTransferResult

Agent 出错

toolUsed: {status: "error"} → 重试或 fallback → 严重错误推送 agent_error

本地文件操作

Go 后端 → Electron → sidecar (ws://127.0.0.1:19780) → Protobuf Bridge → 本地文件系统

BYOK 密钥请求

推送密钥输入面板 → 用户填入 Key → submit_secrets_for_webdev → Agent 继续

关键生产指标

~50
平均工具调用次数/任务
100:1
输入输出 Token 比
10x
KV-cache 成本优势
4 次
框架完全重写次数
16+
支持语言数

信息来源可靠性

来源可靠度内容
Manus 官方博客极高上下文工程策略、KV-cache 优化、文件系统记忆
arXiv 论文三层 Agent 架构、RLHF 训练方法
GitHub 技术分析中高System Prompt 结构、CodeAct 机制、模型选择
Wikipedia公司背景、Meta 收购、基本信息
Meta 收购 Manus 的核心原因:不是为了模型(Manus 用的是 Anthropic/OpenAI 的模型),而是为了 Agent 编排框架 (harness) -- 包括上下文工程、工具编排、沙箱管理等工程能力。

13 Connector 系统 & BYOK

三种连接器类型

BUILTIN 内置

官方预置集成:Gmail、GitHub、Instagram、Meta Marketing、My Browser 等

BYOK 用户自带 Key

用户添加自己的 API Key(OpenAI、Anthropic 等),Agent 用用户的 Key 调第三方服务

MCP 协议

Model Context Protocol 连接器,支持 STDIO / HTTP / SSE 三种传输

BYOK 数据结构

// Protobuf 定义: connectors.v1.ByokConfig
{
  "env": [
    { "key": "OPENAI_API_KEY", "value": "sk-..." }
  ],
  "note": "配置说明",
  "extraConfig": [
    {
      "label": "API Endpoint",
      "value": "",
      "defaultValue": "https://api.openai.com",
      "isRequired": true,
      "isSensitive": true
    }
  ]
}

BYOK 创建流程

用户点击添加 选择 type: BYOK 填写 name + icon + key createConnector() Agent 使用用户 Key

ConnectorsService API (gRPC)

方法说明
listConnectors列出所有连接器(分页)
createConnector创建连接器(BYOK / MCP)
getConnector获取单个连接器详情
updateConnector更新连接器配置
deleteConnector删除连接器
installOrConfigureConnector安装/配置(含 OAuth 回调)
uninstallConnector卸载连接器
enableConnector启用/禁用
getGithubRepoListGitHub 仓库列表
googleCreateMeet创建 Google Meet

内置连接器 (BUILTIN)

ID名称说明
1BUILTIN_ID_GMAILGmail 邮件
2BUILTIN_ID_GITHUBGitHub 代码
3BUILTIN_ID_MY_BROWSER浏览器扩展
4BUILTIN_ID_META_CREATORSInstagram 创作者
5BUILTIN_ID_META_MARKETINGMeta 广告
6BUILTIN_ID_INSTAGRAMInstagram

80 个 Connectors(完整分类)

AI 模型 6 家

OpenAI / Anthropic / Gemini / Grok / Cohere / OpenRouter

办公协作 7+

Slack / Notion / Asana / Monday / Linear / ClickUp / Atlassian

开发工具 7+

GitHub / Vercel / Cloudflare / Supabase / Neon / Sentry / n8n

支付 2

Stripe / PayPal

营销 5+

Mailchimp / Apollo / HubSpot / Ahrefs / SimilarWeb

创意/媒体 7+

Canva / Flux / Kling / Tripo AI / HeyGen / MiniMax / ElevenLabs

企业 Key 管理

方法说明
EnterpriseKeyService.createKey创建企业 API Key
EnterpriseKeyService.listKeys列出企业 Key
EnterpriseKeyService.deleteKey删除企业 Key
EnterpriseKeyService.listAuditLogs查看审计日志
EnterpriseKeyService.exportAuditLogs导出审计日志
ConnectorEnterpriseRegistryService.syncEnterpriseConnectors同步企业连接器

14 套餐与定价

套餐配额(逆向代码)

套餐最大并发任务最大定时任务沙箱保留天数
Free121
Lite223
Casual20207
Pro333
Team20207

V2 新版定价体系(抓包首次泄露)

月费Credits单价 ($/credit)并发会话
Free--1
$204,000$0.005020
$408,000$0.005020
$10020,000$0.005020
$20040,000$0.005020
$30063,000$0.004820
$500110,000$0.004520
$1,000230,000$0.004320
$5,0001,200,000$0.004220
$10,0002,400,000$0.004220
$20,0005,000,000$0.004020

年付 = 月付 x 10(2 个月免费)。加量包固定 $0.01/credit(订阅的 2 倍)。

积分消耗实例

任务消耗内容单价
定制化开源项目523 积分品牌分析 + 37 张图 + 代码方案 + 文档~$2.6 (按 $0.005/credit)

523 积分完成了:品牌需求分析 → Python 脚本编写 → 21 张品牌图生成 → 替换指南文档 → 前后端改造方案。大约等于 50 次工具调用(与官方博客公布的"平均 ~50 次/任务"吻合)。

15 技术栈推断 + 复刻难度

后端

Go Connect (gRPC-Web) Protobuf Socket.IO

仓库: github.com/manus-ai/sdk-bizserver-go

前端

Next.js Redux Toolkit Connect-Web Electron

1,027 个 JS chunks, 572 个字体文件

沙箱

microVM Neko WebRTC VS Code Server

域名: manus.computer, mircovm.com

基础设施

Cloudflare S3 + CDN Stripe Sentry

CDN: manuscdn.com, 更新: download.manus.im

Sidecar

Go 1.26 gorilla/websocket creack/pty

12.4 MB ARM64, 开发者: chenqiang

监控 / 分析

Sentry Amplitude Umami FingerprintJS

Sentry: butterfly-effect.dev

如果要复刻后端,需要实现什么

Agent 编排器 (LLM + 工具链)难度极高
沙箱管理 (microVM 生命周期)难度高
WebSocket 服务 (Socket.IO 3路)难度中
gRPC 服务 (12+ Protobuf)难度中
文件服务 (S3 预签名)难度低
Sidecar 协议兼容难度中

16 抓包分析(1,472 条请求)

通过修改 Electron 客户端注入流量拦截器,捕获了约 2 小时的完整 HTTP/gRPC 通信(21.2 MB)。
1,472
HTTP 请求总数
1,275
Manus API 调用
19
gRPC 服务
21.2 MB
捕获数据量
523
积分/复杂任务

API 调用频次 TOP 10

CanvasService/GetCanvas304 次
FileService/SignUrl202 次
CanvasService/UpsertCanvasS3202 次
WebdevUsagePreview61 次
UpdateReadPosition56 次
BatchUpsertCanvas50 次
ListUserCreditsLog45 次
GetSession35 次
GetEditSpaceSiteCode34 次
ListKnowledgeEvents26 次

完整调用时间线

13:44:01  登录初始化 — GetExchangeInfo, CheckRegion
13:44:41  加载仪表盘 — 并发 15+ API(Sessions, Skills, Connectors, Templates...)
13:47:52  用户上传文件 — getPresignedUploadUrl → uploadComplete(米乐优品 Logo)
13:47:59  AI 建议生成 — GenerateDocumentSuggestion
13:54:43  进入会话 — UpdateReadPosition
13:55:08  请求 VNC — requestVncOtp(实时观看 Agent 桌面操作)
14:00:26  Canvas 开始 — GetCanvas 轮询(~1次/秒,Agent 在生成 21 张品牌图片)
14:04:29  会话完成 — SESSION_STATUS_STOPPED(消耗 523 积分)
14:14:49  进入 Space — GetSpaceStatus, GetEditSpaceSiteCode
14:44:05  WebDev 项目 — GetWebDevProject, GetProjectFile
14:48:39  Sandbox 轮询 — getSandboxStatus(running)
15:00+    风控触发 — USER_IS_BLOCKED(27 次 403)
15:48:41  抓包结束

AWS 基础设施泄露

资源说明
主存储桶vida-private (us-east-1)文件上传/Canvas 数据
Git 仓库桶vida-prod-gitrepoWebDev 项目代码
CDNprivate-us-east-1.manuscdn.comCloudFront 签名 Cookie
IAM Access KeyAKIAZV3A2ECZCJJZFG7Z静态凭证(非 STS)
上传签名有效期603,800 秒(~7 天)
下载签名有效期3,600 秒(1 小时)

风控事件

抓包后期(~15:00)出现 USER_IS_BLOCKED(27 次 403 错误),账号被临时限制。受影响 API:WebdevUsagePreview (16x)、GetEditSpaceSiteCode (2x)、GetCanvas (1x) 等。

17 图片生成与画布

图片生成 → 画布 5 步流程

Step 1: Agent 指挥生图(toolUsed 事件)

Agent 决定生成图片 → 发送 toolUsed 事件:
  { tool: "media_viewer", status: "start",
    mediaViewer: { action: "generate", model: "nano-banana", type: "image" } }
  |
  v
后端根据 model 路由到实际 API → 推送 status: "streaming" → "success"
  { mediaViewer: { filePath: "og-image.png", fileUrl: "https://manuscdn.com/..." } }

Step 2: 创建 Canvas Artifact(后端)

// Canvas Artifact 数据结构
{
  "uid": "GROQkDjV2J0SO8FC1Z1LFq-2dc46234",
  "type": "CANVAS_ARTIFACT_TYPE_IMAGE",
  "fileName": "og-image-v2.png",
  "width": "2752",
  "height": "1536",
  "status": "CANVAS_ARTIFACT_STATUS_GENERATING"
}

// 状态流转
PENDING → GENERATING → LOADED (成功) / FAILED (失败)

Step 3: 前端轮询并渲染到画布

前端每秒调用 GetCanvas API → 收到 artifacts 数组 → 对每个 artifact 调用 upsertArtifact():

  新 artifact: createShape({ type: "image", x, y, w, h, src, loadingState: "loading", rowId })
  状态更新:  updateShape(shapeId, { src: 最终URL, loadingState: "loaded" })
                如果宽度变了: shiftRowImagesAfter(rowId, x, widthDiff)
  失败:      updateShape(shapeId, { loadingState: "error" })

Step 4: nanoBananaGroup 分组展示

连续的 nano-banana 图片生成事件被分组为 nanoBananaGroup,在聊天面板以网格形式展示。

Step 5: 画布 → S3 同步

画布变化 UpsertCanvasS3 (JSON → S3) BatchUpsertCanvas FileService/SignUrl (3x/图)

Canvas 并行生成模式

Agent 在沙箱内运行 Python 脚本生成图片
     │
     ├── 14:00:26  artifact 1 创建 (og-image-v2.png)          GENERATING
     ├── 14:02:24  artifact 2-4 创建 (welcome-banner, logos)   PENDING → LOADED
     ├── 14:03:26  artifact 5-6 创建 (login-bg, mockup)       PENDING → LOADED
     │   ...
     └── 14:04:28  全部 21 个 artifact 生成完毕                 LOADED

总耗时: ~4 分钟生成 21 张品牌图片
并行度: 同时最多 3 张图在 GENERATING/PENDING 状态

图片生成批次规律

会话 1 (米乐优品):
  批次 1: 14:00  +1张  →  LOADED    (单张试水)
  批次 2: 14:01  +3张  →  全部LOADED (小批量)
  批次 4: 14:19  +4张  →  全部LOADED (标准批量=4)
  批次 6: 14:22  +4张  →  全部LOADED (最快 44秒/批)
  ...持续到 87 张

会话 2 (OBDX):
  批次 1: 14:36  +4张  →  全部LOADED (初始批量=4)
  批次 4: 14:43  +4张  →  全部LOADED (最快 6秒/批!)
  批次N: 15:32  +2张  →  1 LOADED + 1 FAILED

速度: 最快 6 秒/批,平均 30-60 秒/批,最慢约 90 秒/批
规律: 每批 2-5 张,GENERATING 并行度 3-5

rowId 行排列算法

同行排列 (shiftRowImagesAfter)

同一 rowId 的图片水平排列。新图片插入后,如果宽度变化,后面的图片自动右移。

images.filter(i => i.rowId === rowId && i.x > insertX)
  .forEach(i => i.x += widthDiff)

新行定位 (getNextPosition)

有同行时:排在最右边图片后面。无同行时:画布视口中心偏左。

// 有同行
x = Math.max(...row.map(i => i.x + i.w)) + gap
// 无同行
x = viewCenter.x - width/2 - 0.3*width

自动滚动 (ensureShapeVisible)

每次创建新 shape 后,自动滚动/缩放画布确保新图片在视口内可见。

18 两个项目对比

会话 1: 米乐优品 LobeChat 定制会话 2: OBDX 品牌设计
会话 ID2SG3k7NBJn...5tH7KF5J7B...
任务模式AGENT_TASK_MODE_HIGH_EFFORTAGENT_TASK_MODE_HIGH_EFFORT
Canvas 图片总数87 张51 张
失败图片02 (FAILED)
图片生成时间14:00 - 15:10 (70 分钟)14:36 - 15:35 (59 分钟)
最大并行 GENERATING54
Canvas 轮询次数146 次155 次
Agent 消息数5 条6 条
WebDev 项目obdx-website (13 个 TSX 文件)
沙箱状态检查013 次 getSandboxStatus
两个会话时间重叠14:36 - 15:10 期间两个会话同时在生成图片

并行执行证据

会话1 (米乐优品)  |====87张图============================================|
                  14:00                                               15:10

会话2 (OBDX)            |====51张图====================================|
                         14:36                                     15:35

重叠区间:                |=================重叠 34 分钟=================|
                         14:36                                     15:10

→ Manus 支持多个会话的 Agent 并行工作,图片生成资源共享

Agent 文字输出对比

会话 1: 米乐优品 (5 条消息)

14:23 关键帧已生成...生成品牌启动动画视频

14:35 编写集成操作手册...研究 LobeChat 源码结构

14:50 IP 角色基础形象已生成...橙色圆角方块笑脸头

14:57 设计品牌表情包...企业微信/钉钉/飞书

15:05 设计品牌宣传海报...跨境电商 AI 平台核心卖点

工作流: 动画关键帧 → 操作手册 → IP 角色 → 表情包 → 海报

会话 2: OBDX 品牌 (6 条消息)

14:39 Logo 设计完成!4 个版本

14:43 IP 角色 Wrench 和 Dash 完成

14:48 选择"暗夜车库"方案构建官网

14:56 官网完成,自发现 CTA 背景问题并修复

14:58 响应用户追加的"大叔版本"需求

15:14 三种语言标注的表情图集

工作流: Logo → IP 角色 → 官网 → 自我修复 → 新角色 → 多语言

Agent 产出的代码文件(抓包证实)

22 个文件列表
文件类型用途
App.tsxReactOBDX 官网主入口
Home.tsxReact首页组件
Hero.tsxReactHero 区域
Features.tsxReact功能展示
Pricing.tsxReact定价页
Comparison.tsxReact竞品对比
HowItWorks.tsxReact使用流程
Stats.tsxReact数据统计
Navbar.tsxReact导航栏
Footer.tsxReact页脚
DownloadCTA.tsxReact下载引导
constants.tsTypeScript常量配置
index.cssCSS全局样式
index.htmlHTML入口页
useInView.tsTypeScript视口检测 Hook
milejoy-design-tokens.jsonJSON品牌设计 Token
milejoy-theme-tokens.cssCSS主题变量
milejoy-logistics.jsonJSON物流插件配置
milejoy-finance.jsonJSON财务插件配置
milejoy-image-gen.jsonJSON图片生成插件配置
generate_brand_assets.pyPython品牌图片生成脚本
generate_color_palette.pyPython色板生成脚本

19 录屏与回放

Manus 不用视频录屏,而是用事件流存档 + 前端回放。所有 Agent 操作都作为事件保存在服务端,可以随时重放。

三层"录屏"机制

1. 事件流存档 核心

每个会话的所有事件(toolUsed / chat / statusUpdate / liveStatus / explanation 等 50+ 种事件类型)都存在服务端。

通过 getSessionV2 API 可以拉取完整历史,前端逐条回放。

证据: 前端代码有 "Replay" 按钮,URL 格式 /share/{id}?replay=1

2. Canvas 画布快照 图片

每个图片生成步骤作为 Canvas Artifact 存档到 S3。

抓包证实: 30 个 feedback JSON 文件,每个包含 shapes(图片位置+CDN URL),随时间递增。

3. 浏览器截图 实时

每次 browser 工具调用返回 screenshot 字段(截图 CDN URL),前端展示 Agent 的浏览器画面。

完整事件类型列表(逆向代码证实,50+ 种)

分类事件类型
Agent 核心chat / toolUsed / statusUpdate / explanation / liveStatus / queueStatusChange
工具结果terminalUpdate / speechGenerationUpdate / videoGenerationUpdate / videoGenerationOffer
Canvas/媒体canvas / canvasImage / canvasMark / slides / image / video / file / attachment
WebDev/部署deploy / sandbox / sandboxUpdate / sandboxLimitReached / space
集成/通知connectorOauthExpired / mcpAuthorizationNotify / slack / telegram / zapier
协作collaborationStatusUpdate / myBrowserSelection / comment
资源/计费resourceAccessed / apiHighCreditNotice / apiRequestLimitNotify / insufficientFeatureQuota
任务管理mapReduceSubSessionStatus / getMapReduceSubInfo / scheduleTaskRunModeTip / suggestQualityMode / dataControlWaitForConfirm

存档位置

数据存储位置保留期
事件流(全部 50+ 种事件)后端数据库(通过 getSessionV2 分段拉取)按套餐 1-7 天
Canvas 画布快照S3 (vida-private) feedback JSON同上
浏览器截图CDN (manuscdn.com) sessionFile 路径同上
生成的文件S3 + CDN同上
VNC 实时流不存档,WebRTC 点对点实时传输仅实时

回放机制

用户点击 "Replay" → 前端请求 getSessionV2 → 服务端返回事件流数组 (按时间排序)

前端按时间间隔逐条渲染,模拟实时执行效果:
  - chat → 消息气泡
  - toolUsed → 工具面板 + 截图/终端/代码
  - liveStatus → 实时状态指示器
  - statusUpdate → Agent 状态变化

getSessionV2 的事件流包含完整的 toolUsed 序列(工具名 + 参数 + 截图 + 返回值)
关键意义:用新账号拉取一次 replay(getSessionV2)即可获得 Agent 编排的完整记录,包括每一步工具调用的参数和结果。

20 技术吃透评估

层面掌握程度已知未知
客户端架构
95%
Electron 全部代码、40+ IPC、preload API、窗口管理 前端 JS 压缩后部分逻辑不完整
通信协议
85%
19 个 gRPC 服务、6 个 REST API、Socket.IO 3 条连接、Protobuf 消息定义 Socket.IO 实际消息内容(toolUsed/explanation/planUpdate 的 payload)
Sidecar 协议
90%
Bridge/Sandbox/Terminal 三层 Protobuf、文件系统 CRUD、PTY 终端 具体的 Protobuf 字段细节(只有消息名,没有 .proto 源文件)
图片生成模型
80%
6 个模型枚举(Flux/Gemini/GPT/Qwen)、Canvas 批次规律、并行度 具体路由规则(哪种图用哪个模型)
Agent 行为模式
60%
并行执行、自我纠错、中途追加、状态暂停/恢复、多会话并行、图片批次模式 工具调用序列、Prompt 内容、决策逻辑
文字推理模型
15%
debugModelOverride 功能存在、89 个 A/B 实验变量 具体使用哪个 LLM、如何路由、Prompt 结构
编排框架核心
30%
OrchestratorService 存在、事件类型定义、状态机 Planner/Executor/Verifier 的具体实现、CodeAct 格式、todo.md 机制
基础设施
80%
AWS S3/CloudFront、Ubuntu VM 沙箱、neko WebRTC、Stripe 支付、Go 后端 数据库类型、任务队列、模型推理基础设施

最大缺口

核心缺口: Socket.IO 消息流。Agent 的工具调用序列(toolUsed)、思考过程(explanation)、计划(planUpdate)、流式输出(chatDelta)全部走 WebSocket,HTTP 抓包只能看到副作用。

下一步

行动方法能揭示
拦截 Socket.IO修改前端 JS 中 Socket.IO 的 onAny 回调完整 toolUsed 序列、Prompt、模型选择
分析前端 Redux在 DevTools 中监控 Redux store 变化Agent 状态机完整流转
抓取 getSessionV2 事件流任务完成后请求 getSessionV2(含完整事件历史)事后还原完整工具链
新账号重新抓包避开风控,重复实验验证规律的可重复性

21 Agent 代码质量审查

对 Manus Agent 生成的 OBDX 官网代码(15 个文件,1,513 行 React + TypeScript)进行逐维度评审。

整体评分:4.8 / 10

组件结构7/10
响应式设计7/10
CSS/样式方案6/10
TypeScript 类型4/10
可访问性/SEO4/10
代码重复度4/10
硬编码/魔术数字3/10
性能优化3/10

核心问题

设计 Token 形同虚设

CSS 变量精心定义了品牌色(--color-cobalt),但组件中 131 处硬编码 hex 颜色#2563EB 出现 38 次。变更品牌色需要搜索替换 131 处。

TypeScript 约等于没用

11 个组件零 Props interface,零 type 定义。本质是"带 .tsx 扩展名的 JavaScript"。

性能零优化

无图片懒加载、无 WebP 格式、无 React.lazy 代码分割、Framer Motion 整包引入。

大量代码重复

Section Header 模式重复 7 处、渐变文字 6 处、入场动画 6 处、CTA 按钮 5 处,未抽取复用组件。

结论:视觉完成度高(暗色车库主题统一),但工程质量差。典型 AI 生成代码 — 每个组件看起来都"对",但缺乏全局一致性和工程化思维。可作为视觉 Demo,距生产级需大量重构。

22 安全审计

高风险发现(4 项)

F-001: AWS IAM 静态密钥泄露

抓包中暴露 Access Key AKIAZV3A2ECZCJJZFG7Z,非 STS 临时凭证,永不过期。攻击者可尝试直接访问 S3 桶。

F-002: S3 桶名和 CDN Key-Pair 暴露

桶名 vida-private / vida-prod-gitrepo + CloudFront Key-Pair-Id K2HSFNDJXOU9YS 完全暴露,扩大攻击面。

F-007: Electron webSecurity + sandbox 全禁

所有窗口 webSecurity: false + sandbox: false,同源策略完全失效,恶意页面可跨域读取任何资源。

F-008: CSP 被绕过

app:// 协议注册 bypassCSP: true,Content-Security-Policy 防线形同虚设。

中风险发现(5 项)

编号问题影响
F-003S3 预签名 URL 有效期 7 天泄露的 URL 在一周内可反复下载用户文件
F-005Token 明文存储 localStorage.json本地恶意软件可直接窃取认证 token
F-006VNC OTP 无明确过期抓到的 OTP 可能长期有效
F-009readFileAsArrayBuffer 无路径校验渲染进程可读取本机任意文件
F-010用户文件隔离仅靠 S3 路径前缀无 IAM 策略级别隔离,IDOR 风险
最紧迫修复:开启 webSecurity + sandbox,淘汰静态 IAM Key 改用 STS,给 readFileAsArrayBuffer 加路径白名单。三项成本低但显著降低风险面。

23 单任务成本估算

以抓包中的真实任务为例(523 积分,138 张图片,~50 次工具调用)。

LLM 推理成本(Claude 3.5 Sonnet)

场景Input TokensKV-cache 命中率费用
无 cache5.1M0%$15.33
90% cache5.1M90%$2.94
95% cache(极致优化)5.1M95%$2.25

KV-cache 0% → 95%,成本差 6.8 倍。这就是 Manus 说"cache 命中率是最重要指标"的原因。

总成本 vs 用户支付

成本项95% cache
LLM 推理$2.25
图片生成(138 张 x $0.04)$5.52
E2B 沙箱(2 小时)$0.39
S3/CDN$0.04
总成本$8.20
用户支付(523 credits)$2.60
亏损-$5.60
图片密集任务 Manus 每单亏 $5.60(成本是收入的 3.2 倍)。纯文字任务 $2.25 vs $2.60,略有盈利。图片生成是最大的成本黑洞。Manus 目前处于"补贴换增长"阶段。

24 竞品架构对比

六大 AI Agent 产品

维度ManusClaude CodeCursorDevinOpenHandsbolt.new
定位通用 AgentCLI 编码AI IDEAI 工程师开源 AgentWeb 开发
架构云端沙箱 + 本地 sidecar纯本地 CLI本地 IDE + 云端推理纯云端Docker 自托管浏览器 WASM
沙箱Firecracker microVM云端 VMDockerWebContainer
模型Claude + Qwen 多模型路由Claude 单供应商多模型可选不透明用户自配多模型可选
入门价$20/月$20/月$20/月$20/月免费$25/月
开源闭源部分闭源闭源完全开源部分 (bolt.diy)
数据主权云端本地本地+云端云端完全本地浏览器

选型建议

甩手掌柜式委托

Devin — 纯云端自治,PR 级任务委派

日常编码副驾驶

Cursor — IDE 深度集成,交互最快

终端重度用户

Claude Code — 零沙箱开销,本地全权限

非编码通用任务

Manus — 浏览器+文件+代码全能

预算敏感/数据主权

OpenHands — 开源免费,完全私有化

快速原型/非程序员

bolt.new — 浏览器即开即用