通过逆向 Electron 桌面客户端(asar 解包 + Go sidecar strings 分析),完整还原 Manus 产品架构、后端 API、通信协议与基础设施
github.com/manus-ai/sdk-bizserver-go,母公司内部代号 butterfly-effect.dev。
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) |
+----------------------------------+
| 域名 | 用途 | 备注 |
|---|---|---|
api.manus.im | API + WebSocket + gRPC | 核心后端 |
manus.im | 主站 | |
manus.computer | 沙箱环境 | 每个会话独立 microVM |
manus.space | 部署平台 | 用户 Web 项目托管 |
manus-preview.space | 预览部署 | |
pages.manus.im | Pages 服务 | |
download.manus.im | 客户端下载 | 自动更新源 |
files.manuscdn.com | CDN | 静态资源 + 文件 |
metrics.manus.im | Umami 分析 | 自建分析平台 |
open.manus.ai | 开放 API 文档 | |
sentry.prod.ops.butterfly-effect.dev | Sentry 监控 | 母公司域名 |
cname.manus.space | 自定义域名 CNAME | |
104.18.26/27.246 | Cloudflare A 记录 | 自定义域名解析 |
| 域名 | 用途 | 发现 |
|---|---|---|
vidabiz.butterfly-effect.dev | RPC + 通知 WS | 内部开发服务器 |
localhost:4000 | 聊天 WebSocket | 本地开发 |
localhost:4001 | STT WebSocket | 本地开发 |
manuspre.computer | 预发沙箱 | |
mircovm.com | microVM | 拼写错误暴露技术栈 |
| 方法 | 路由 | 参数 | 说明 |
|---|---|---|---|
| GET | /api/chat/getSessionV2 | sessionId, type?, startSegmentEndpoint? | 获取会话(分段加载) |
| GET | /api/chat/getSession | sessionId, type?, sig? | 获取会话 |
| POST | /api/chat/deleteSession | sessionId | 删除会话 |
| GET | /api/chat/getSessionFilesV2 | sessionId, type? | 会话文件列表 |
| POST | /api/chat/getPresignedUploadUrl | filename, fileType, fileSize | S3 预签名上传 |
| POST | /api/chat/uploadComplete | id, filename, fileSize | 上传完成确认 |
| POST | /api/chat/getDownloadUrl | signedCdnUrl | 获取下载 URL |
| POST | /api/chat/requestVncOtp | sessionId | VNC 远程桌面 OTP |
| POST | /api/chat/requestVsCodeOtp | sessionId | VS Code OTP |
| POST | /api/chat/startVsCodeServer | sessionId | 启动 VS Code |
| POST | /api/chat/scheduleTask | sessionId, userId, detail, title... | 创建定时任务 |
| GET | /api/chat/getSandboxStatus | sandboxUrl, sessionId | 沙箱状态 |
| POST | /api/chat/startSandbox | sessionId?, force? | 启动沙箱 |
| POST | /api/chat/wakeMobilePreview | sessionId, projectId | 唤醒移动预览 |
| GET | /api/chat/getMobilePreviewStatus | sessionId, projectId | 移动预览状态 |
| GET | /api/chat/getOnlineMyBrowserClients | - | 在线浏览器列表 |
| GET | /api/chat/getMapReduceTool | sessionId, actionId | MapReduce 详情 |
| 方法 | 路由 | 参数 | 说明 |
|---|---|---|---|
| POST | /api/internal/resetDailyQuota | userId?, email?, password?, quota? | 重置每日配额 |
| POST | /api/internal/fixUrlMeta | sessionId, password? | 修复 URL 元数据 |
| 方法 | 路由 | 说明 |
|---|---|---|
| POST | /api/user_behavior/batch_create_event_v2 | 用户行为批量上报 |
| GET | /api/website_tool/fetch_website_favicon | 获取网站 favicon |
后端仓库:github.com/manus-ai/sdk-bizserver-go,前端通过 Connect-Web (@connectrpc) 以 HTTP POST + Protobuf 调用。
SignUrl / BatchSignUrl / SandboxSignUrl / SandboxSignPrivateUrl
存储桶: SESSION_FILE, MARKDOWN, SLIDE_TEMPLATE, SLIDE_IMAGE, WEB_DEV_LOGO, PROJECT, SESSION_CANVAS
OCR / GenerateImage / MarkGenerateImage
模型: FLUX_KONTEXT_PRO, FLUX_KONTEXT_MAX, GEMINI_3_PRO, GPT_IMAGE_1, QWEN_IMAGE_EDIT
SandboxSendEmail / SandboxListSessionEmails / SandboxGetEmail / SandboxGetEmailFileDownloadUrl
SendSMS / ListSmsMessages / ListUserPhoneNumbers / ConfigureSmsCallback / MakeCall / ListSessionCalls
RedeemPromotionCode / RedeemPromotionCodeV2 / LoopPromotionCodeRedeemStatus
ListBrowserData / DeleteBrowserData
AudioTranscription
OnTaskCreatedCallback / OnTaskStoppedCallback / OnTaskProgressCallback
GetTeamPreference / UpdateTeamPreference
SaveDomainBlacklist/Whitelist / ListDomainBlacklist/Whitelist / CheckDomainAccess
| 服务 | 方法 | 说明 |
|---|---|---|
session.v1.CanvasService | GetCanvas / UpsertCanvasS3 / BatchUpsertCanvas | 画布状态管理(图片生成追踪) |
knowledge.v1.KnowledgeService | ListKnowledgeEvents | 知识库事件 |
space.v1.SpaceService | GetSpaceStatus / GetEditSpaceSiteCode | Space 部署管理 |
webdev.v1.WebDevService | GetWebDevProject / GetProjectDirectory / GetProjectFile / ListCustomDomains | WebDev 项目管理 |
webdev.v1.WebDevAuthService | IssueProjectJwtToken | 项目 JWT 认证 |
user.v1.SubscriptionService | Preview / ListInvoices | 订阅和发票 |
| 用途 | URL | Path |
|---|---|---|
| 主聊天 | wss://api.manus.im | /socket.io |
| 通知推送 | wss://api.manus.im | /notifier-v2-socket-io |
| 语音/STT | wss://api.manus.im | /meeting.io |
{
"token": "用户认证令牌",
"locale": "zh-CN",
"tz": "Asia/Shanghai",
"clientType": "desktop",
"transports": ["websocket"]
}
{
"type": "join_session",
"id": "<uuid>",
"sessionId": "<session_id>",
"lastMessageId": "<event_id>",
"timestamp": 1234567890,
"version": 2
}
{
"type": "event",
"sessionId": "<session_id>",
"messageStatus": "pending",
"event": {
"type": "chat",
"sender": "user",
"messageType": "text",
"content": "消息内容",
"attachments": [],
"taskMode": "..."
}
}
| 事件 | 说明 |
|---|---|
statusUpdate | Agent 状态 (running / stopped / waiting / error) |
toolUsed | 工具使用完成 |
newPlanStep | 新计划步骤 |
chat | 聊天消息 |
chatDelta | 流式增量输出 |
explanation | 思考过程 |
planUpdate | 计划更新 |
queueStatusChange | 排队状态 |
| 事件 | 说明 |
|---|---|
session_joined / session_left | 会话加入/离开 |
agent_error | Agent 错误 |
collaborationStatusUpdate | 协作状态 |
webdevGitSyncCheckResult | Git 同步检查 |
webdevHomepageUpdated | 主页更新 |
speechGenerationUpdate | 语音生成 |
videoGenerationUpdate | 视频生成 |
terminalUpdate | 终端输出 |
desktopDevicesUpdate | 设备列表 |
connectorOauthExpired | OAuth 过期 |
mcpAuthorizationNotify | MCP 授权 |
contextTooLong | 上下文过长 |
| 工具 | 子工具 / 操作 | 说明 |
|---|---|---|
browser | navigate, console_exec, console_view, save_image | 浏览器控制 |
my_browser | - | 用户浏览器代理 |
computer_use | - | 计算机操作 |
terminal | - | 终端命令 |
text_editor | webdev-file-edit, debug, slides | 文本编辑 |
search | - | 网页搜索 |
search_scholar | - | 学术搜索 |
search_image | - | 图片搜索 |
media_viewer | 图片 / 视频生成 | 多媒体 |
webdev | init_project, check_status, save/rollback_checkpoint, restart_server, debug | Web 开发 |
map_reduce | - | 并行任务分解 |
slides | - | 幻灯片制作 |
gmail | - | Gmail 操作 |
google_calendar | - | Google 日历 |
outlook_mail / outlook_calendar | - | Outlook 集成 |
meta_marketing | - | Meta 营销 |
suggestion | - | 建议 |
task_scheduled | - | 定时任务 |
need_accept | - | 需要用户确认 |
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 // 终端协议
每个会话独立虚拟机。域名 mircovm.com 泄露(拼写错误 mirco),沙箱域名 manus.computer。
通过 requestVncOtp 获取 OTP,返回 nekoOtp: {username, webrtc_token},基于 WebRTC 的浏览器远程桌面。
每个沙箱可启动独立的 VS Code 服务器,通过 OTP 一次性密码认证。
沙箱内运行 dev server,支持移动端预览(Expo)、Git 同步、自定义域名、Stripe 集成。
{
"authEnabled": true,
"otp": "2cf558de...ab65a",
"nekoOtp": {
"username": "neko",
"webrtc_token": "ec2a0aeb520e9fd7"
}
}
{
"sandboxID": "ic3l1wbdvbsi29i42okhc",
"clientID": "03f3572a",
"status": "running",
"devServerResCode": 200
}
// 沙箱内路径: /home/ubuntu/
// 证实使用 Ubuntu 虚拟机
| 服务 | Key | 用途 |
|---|---|---|
| Cloudflare Turnstile | 0x4AAAAAAA_sd0eRNCinWBgU | 人机验证 |
| hCaptcha | 7b4c0ca8-0e48-...0e16 | 备选验证 |
| Google Drive | 1073362082968-...svhvgof1bht9me0eo | 文件集成 |
| Google Maps | AIzaSyDcXHo-1cHpFHPMlBDoMHnvI6r00_XkNKg | 地图 |
| FingerprintJS | nG226lNwQWNTTWzOzKbF | 设备指纹 |
| Amplitude | 46ac3f9abb41dd2d17a5785e052bc6d3 | 数据分析 |
| Intercom | k7n2hgls | 客服系统 |
| Facebook Pixel | 1383830073227216 | 广告追踪 |
| GTM | GTM-TFGFC7KH | 标签管理 |
| Sentry DSN | ...@sentry.prod.ops.butterfly-effect.dev/54 | 错误监控 |
| 搜索项 | 结果 | 说明 |
|---|---|---|
sk-* (OpenAI Key 格式) | 未发现 | 匹配项均为误报(函数名等) |
| OpenAI / Anthropic / Claude | 未发现 | 仅出现在 BYOK 示例说明文本中 |
| GPT-4 / GPT-3.5 / DeepSeek | 未发现 | 前端不包含任何模型名 |
| Gemini / Qwen / Mistral / LLaMA | 未发现 | 文字模型完全服务端化 |
| apiKey / api_key | 仅公开 Key | Google Maps 等前端公开 Key |
Anthropic 的 Claude 3.5 Sonnet 是 Manus 的核心推理模型,负责规划、代码生成和复杂逻辑推理。团队内部已在测试 Claude 3.7。
阿里巴巴通义千问的微调版本,作为补充模型处理特定任务。与逆向发现的 QWEN_IMAGE_EDIT 一致。
根据任务类型动态选择模型:Claude 做复杂推理、GPT-4 做编码、Gemini 做多模态/知识查询。官方称为"多重签名机制"。
| 问题 | 原因 |
|---|---|
| GPT-4 是否用于编码 | 仅第三方分析,无一手证据 |
| Gemini 是否用于文字任务 | 代码只有图片枚举 |
| 文字主模型的具体版本 | 前端代码和抓包均未暴露 |
| agent_feature v46-v89 各控制什么 | 只有变量名和 on/off |
内部代号: nano-banana
"Advanced model for professional creative work"
品牌物料、幻灯片等专业场景强制使用
内部代号: nano-banana-2
"Cost-effective model for near-pro performance"
接近专业品质,成本更低
内部代号: gpt-image
"Efficient standard model for general use"
OpenAI GPT Image,通用标准
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
WebSocket 事件: speechGenerationUpdate
工具类型: tool_call_speech_generate_file
具体 TTS 模型未知 -- Connectors 中有 ElevenLabs
// 前端代码中的调试功能(仅内部开发者可用) debugModelOverride: JSON.stringify({ all: "model_name" }, null, 2) isDebugModelOverrideActive: true / false
Manus 内部开发者可以通过此功能覆盖 AI 模型,但具体模型列表由后端动态下发,前端看不到。
// 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 策略/工具编排方案
| 项目 | 详情 |
|---|---|
| 开发公司 | 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(与逆向发现一致) |
用户请求: "帮我做一个数据分析报告" │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Planner Agent (规划层) │ │ ───────────────────── │ │ - 将目标分解为有序步骤 │ │ - 生成伪代码格式的执行计划 │ │ - 协调子任务分配 │ │ - 选择每步使用的工具和模型 │ │ │ │ 输出: [搜索数据源 → 下载数据 → 清洗 → 分析 → 生成报告] │ └──────────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Execution Agent (执行层) │ │ ───────────────────── │ │ - 调用工具与外部系统交互 │ │ - 使用 CodeAct 机制: 生成可执行 Python 代码作为行动格式 │ │ - 在云端沙箱 (microVM) 中执行 │ │ - 每步: 分析 → 生成代码 → 执行 → 观察结果 │ │ │ │ 工具: browser / terminal / text_editor / search / webdev │ └──────────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Verification Agent (验证层) │ │ ───────────────────────── │ │ - 审查执行结果的准确性和完整性 │ │ - 检查输出是否符合用户预期 │ │ - 不通过 → 触发重新规划 (回到 Planner) │ │ - 通过 → 返回最终结果给用户 │ └─────────────────────────────────────────────────────────────┘
Manus 的核心创新:用可执行 Python 代码替代固定 JSON 工具调用。
// 每次只能调一个工具,格式固定 { "tool": "search", "args": { "query": "GDP data" } }
# 生成可执行代码,支持条件逻辑 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,将全局计划推入近期注意力窗口 |
避免"中间丢失"问题(长上下文中部信息被忽略) |
| 保留错误轨迹 | 不隐藏失败操作,让模型看到错误 + 错误观察 | 模型隐式更新内部信念,形成错误恢复能力 |
| 结构化变异 | 对重复性任务注入不同序列化模板、替代措辞、细微噪声 | 防止模型模仿上下文中的模式导致行为漂移 |
// 从 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>
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
可以理解为"读操作"
可以理解为"写操作 + 实时推送"
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 “三种语言标注的表情图集(英/法/西)”
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 字段变化
同一时刻最多 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──│ │ ▼ ▼ ▼
queueStatusChange → 前端显示排队位置 → 轮到时自动开始
Free 1 并发 / Pro 3 / Team 20
statusUpdate: waiting + need_accept 工具 → 用户确认后继续
contextTooLong → contextTransferFlag → Agent 自动压缩历史 → contextTransferResult
toolUsed: {status: "error"} → 重试或 fallback → 严重错误推送 agent_error
Go 后端 → Electron → sidecar (ws://127.0.0.1:19780) → Protobuf Bridge → 本地文件系统
推送密钥输入面板 → 用户填入 Key → submit_secrets_for_webdev → Agent 继续
| 来源 | 可靠度 | 内容 |
|---|---|---|
| Manus 官方博客 | 极高 | 上下文工程策略、KV-cache 优化、文件系统记忆 |
| arXiv 论文 | 高 | 三层 Agent 架构、RLHF 训练方法 |
| GitHub 技术分析 | 中高 | System Prompt 结构、CodeAct 机制、模型选择 |
| Wikipedia | 中 | 公司背景、Meta 收购、基本信息 |
官方预置集成:Gmail、GitHub、Instagram、Meta Marketing、My Browser 等
用户添加自己的 API Key(OpenAI、Anthropic 等),Agent 用用户的 Key 调第三方服务
Model Context Protocol 连接器,支持 STDIO / HTTP / SSE 三种传输
// 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 } ] }
| 方法 | 说明 |
|---|---|
listConnectors | 列出所有连接器(分页) |
createConnector | 创建连接器(BYOK / MCP) |
getConnector | 获取单个连接器详情 |
updateConnector | 更新连接器配置 |
deleteConnector | 删除连接器 |
installOrConfigureConnector | 安装/配置(含 OAuth 回调) |
uninstallConnector | 卸载连接器 |
enableConnector | 启用/禁用 |
getGithubRepoList | GitHub 仓库列表 |
googleCreateMeet | 创建 Google Meet |
| ID | 名称 | 说明 |
|---|---|---|
| 1 | BUILTIN_ID_GMAIL | Gmail 邮件 |
| 2 | BUILTIN_ID_GITHUB | GitHub 代码 |
| 3 | BUILTIN_ID_MY_BROWSER | 浏览器扩展 |
| 4 | BUILTIN_ID_META_CREATORS | Instagram 创作者 |
| 5 | BUILTIN_ID_META_MARKETING | Meta 广告 |
| 6 | BUILTIN_ID_INSTAGRAM |
OpenAI / Anthropic / Gemini / Grok / Cohere / OpenRouter
Slack / Notion / Asana / Monday / Linear / ClickUp / Atlassian
GitHub / Vercel / Cloudflare / Supabase / Neon / Sentry / n8n
Stripe / PayPal
Mailchimp / Apollo / HubSpot / Ahrefs / SimilarWeb
Canva / Flux / Kling / Tripo AI / HeyGen / MiniMax / ElevenLabs
| 方法 | 说明 |
|---|---|
EnterpriseKeyService.createKey | 创建企业 API Key |
EnterpriseKeyService.listKeys | 列出企业 Key |
EnterpriseKeyService.deleteKey | 删除企业 Key |
EnterpriseKeyService.listAuditLogs | 查看审计日志 |
EnterpriseKeyService.exportAuditLogs | 导出审计日志 |
ConnectorEnterpriseRegistryService.syncEnterpriseConnectors | 同步企业连接器 |
| 套餐 | 最大并发任务 | 最大定时任务 | 沙箱保留天数 |
|---|---|---|---|
| Free | 1 | 2 | 1 |
| Lite | 2 | 2 | 3 |
| Casual | 20 | 20 | 7 |
| Pro | 3 | 3 | 3 |
| Team | 20 | 20 | 7 |
| 月费 | Credits | 单价 ($/credit) | 并发会话 |
|---|---|---|---|
| Free | - | - | 1 |
| $20 | 4,000 | $0.0050 | 20 |
| $40 | 8,000 | $0.0050 | 20 |
| $100 | 20,000 | $0.0050 | 20 |
| $200 | 40,000 | $0.0050 | 20 |
| $300 | 63,000 | $0.0048 | 20 |
| $500 | 110,000 | $0.0045 | 20 |
| $1,000 | 230,000 | $0.0043 | 20 |
| $5,000 | 1,200,000 | $0.0042 | 20 |
| $10,000 | 2,400,000 | $0.0042 | 20 |
| $20,000 | 5,000,000 | $0.0040 | 20 |
年付 = 月付 x 10(2 个月免费)。加量包固定 $0.01/credit(订阅的 2 倍)。
| 任务 | 消耗 | 内容 | 单价 |
|---|---|---|---|
| 定制化开源项目 | 523 积分 | 品牌分析 + 37 张图 + 代码方案 + 文档 | ~$2.6 (按 $0.005/credit) |
523 积分完成了:品牌需求分析 → Python 脚本编写 → 21 张品牌图生成 → 替换指南文档 → 前后端改造方案。大约等于 50 次工具调用(与官方博客公布的"平均 ~50 次/任务"吻合)。
仓库: github.com/manus-ai/sdk-bizserver-go
1,027 个 JS chunks, 572 个字体文件
域名: manus.computer, mircovm.com
CDN: manuscdn.com, 更新: download.manus.im
12.4 MB ARM64, 开发者: chenqiang
Sentry: butterfly-effect.dev
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 抓包结束
| 资源 | 值 | 说明 |
|---|---|---|
| 主存储桶 | vida-private (us-east-1) | 文件上传/Canvas 数据 |
| Git 仓库桶 | vida-prod-gitrepo | WebDev 项目代码 |
| CDN | private-us-east-1.manuscdn.com | CloudFront 签名 Cookie |
| IAM Access Key | AKIAZV3A2ECZCJJZFG7Z | 静态凭证(非 STS) |
| 上传签名有效期 | 603,800 秒(~7 天) | |
| 下载签名有效期 | 3,600 秒(1 小时) |
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/..." } }
// 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 (失败)
前端每秒调用 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" })
连续的 nano-banana 图片生成事件被分组为 nanoBananaGroup,在聊天面板以网格形式展示。
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 的图片水平排列。新图片插入后,如果宽度变化,后面的图片自动右移。
images.filter(i => i.rowId === rowId && i.x > insertX) .forEach(i => i.x += widthDiff)
有同行时:排在最右边图片后面。无同行时:画布视口中心偏左。
// 有同行 x = Math.max(...row.map(i => i.x + i.w)) + gap // 无同行 x = viewCenter.x - width/2 - 0.3*width
每次创建新 shape 后,自动滚动/缩放画布确保新图片在视口内可见。
| 会话 1: 米乐优品 LobeChat 定制 | 会话 2: OBDX 品牌设计 | |
|---|---|---|
| 会话 ID | 2SG3k7NBJn... | 5tH7KF5J7B... |
| 任务模式 | AGENT_TASK_MODE_HIGH_EFFORT | AGENT_TASK_MODE_HIGH_EFFORT |
| Canvas 图片总数 | 87 张 | 51 张 |
| 失败图片 | 0 | 2 (FAILED) |
| 图片生成时间 | 14:00 - 15:10 (70 分钟) | 14:36 - 15:35 (59 分钟) |
| 最大并行 GENERATING | 5 | 4 |
| Canvas 轮询次数 | 146 次 | 155 次 |
| Agent 消息数 | 5 条 | 6 条 |
| WebDev 项目 | 无 | obdx-website (13 个 TSX 文件) |
| 沙箱状态检查 | 0 | 13 次 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 并行工作,图片生成资源共享
14:23 关键帧已生成...生成品牌启动动画视频
14:35 编写集成操作手册...研究 LobeChat 源码结构
14:50 IP 角色基础形象已生成...橙色圆角方块笑脸头
14:57 设计品牌表情包...企业微信/钉钉/飞书
15:05 设计品牌宣传海报...跨境电商 AI 平台核心卖点
工作流: 动画关键帧 → 操作手册 → IP 角色 → 表情包 → 海报
14:39 Logo 设计完成!4 个版本
14:43 IP 角色 Wrench 和 Dash 完成
14:48 选择"暗夜车库"方案构建官网
14:56 官网完成,自发现 CTA 背景问题并修复
14:58 响应用户追加的"大叔版本"需求
15:14 三种语言标注的表情图集
工作流: Logo → IP 角色 → 官网 → 自我修复 → 新角色 → 多语言
| 文件 | 类型 | 用途 |
|---|---|---|
App.tsx | React | OBDX 官网主入口 |
Home.tsx | React | 首页组件 |
Hero.tsx | React | Hero 区域 |
Features.tsx | React | 功能展示 |
Pricing.tsx | React | 定价页 |
Comparison.tsx | React | 竞品对比 |
HowItWorks.tsx | React | 使用流程 |
Stats.tsx | React | 数据统计 |
Navbar.tsx | React | 导航栏 |
Footer.tsx | React | 页脚 |
DownloadCTA.tsx | React | 下载引导 |
constants.ts | TypeScript | 常量配置 |
index.css | CSS | 全局样式 |
index.html | HTML | 入口页 |
useInView.ts | TypeScript | 视口检测 Hook |
milejoy-design-tokens.json | JSON | 品牌设计 Token |
milejoy-theme-tokens.css | CSS | 主题变量 |
milejoy-logistics.json | JSON | 物流插件配置 |
milejoy-finance.json | JSON | 财务插件配置 |
milejoy-image-gen.json | JSON | 图片生成插件配置 |
generate_brand_assets.py | Python | 品牌图片生成脚本 |
generate_color_palette.py | Python | 色板生成脚本 |
每个会话的所有事件(toolUsed / chat / statusUpdate / liveStatus / explanation 等 50+ 种事件类型)都存在服务端。
通过 getSessionV2 API 可以拉取完整历史,前端逐条回放。
证据: 前端代码有 "Replay" 按钮,URL 格式 /share/{id}?replay=1
每个图片生成步骤作为 Canvas Artifact 存档到 S3。
抓包证实: 30 个 feedback JSON 文件,每个包含 shapes(图片位置+CDN URL),随时间递增。
每次 browser 工具调用返回 screenshot 字段(截图 CDN URL),前端展示 Agent 的浏览器画面。
| 分类 | 事件类型 |
|---|---|
| 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 序列(工具名 + 参数 + 截图 + 返回值)
getSessionV2)即可获得 Agent 编排的完整记录,包括每一步工具调用的参数和结果。
| 层面 | 掌握程度 | 已知 | 未知 |
|---|---|---|---|
| 客户端架构 | 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 | 修改前端 JS 中 Socket.IO 的 onAny 回调 | 完整 toolUsed 序列、Prompt、模型选择 |
| 分析前端 Redux | 在 DevTools 中监控 Redux store 变化 | Agent 状态机完整流转 |
| 抓取 getSessionV2 事件流 | 任务完成后请求 getSessionV2(含完整事件历史) | 事后还原完整工具链 |
| 新账号重新抓包 | 避开风控,重复实验 | 验证规律的可重复性 |
对 Manus Agent 生成的 OBDX 官网代码(15 个文件,1,513 行 React + TypeScript)进行逐维度评审。
CSS 变量精心定义了品牌色(--color-cobalt),但组件中 131 处硬编码 hex 颜色,#2563EB 出现 38 次。变更品牌色需要搜索替换 131 处。
11 个组件零 Props interface,零 type 定义。本质是"带 .tsx 扩展名的 JavaScript"。
无图片懒加载、无 WebP 格式、无 React.lazy 代码分割、Framer Motion 整包引入。
Section Header 模式重复 7 处、渐变文字 6 处、入场动画 6 处、CTA 按钮 5 处,未抽取复用组件。
抓包中暴露 Access Key AKIAZV3A2ECZCJJZFG7Z,非 STS 临时凭证,永不过期。攻击者可尝试直接访问 S3 桶。
桶名 vida-private / vida-prod-gitrepo + CloudFront Key-Pair-Id K2HSFNDJXOU9YS 完全暴露,扩大攻击面。
所有窗口 webSecurity: false + sandbox: false,同源策略完全失效,恶意页面可跨域读取任何资源。
app:// 协议注册 bypassCSP: true,Content-Security-Policy 防线形同虚设。
| 编号 | 问题 | 影响 |
|---|---|---|
| F-003 | S3 预签名 URL 有效期 7 天 | 泄露的 URL 在一周内可反复下载用户文件 |
| F-005 | Token 明文存储 localStorage.json | 本地恶意软件可直接窃取认证 token |
| F-006 | VNC OTP 无明确过期 | 抓到的 OTP 可能长期有效 |
| F-009 | readFileAsArrayBuffer 无路径校验 | 渲染进程可读取本机任意文件 |
| F-010 | 用户文件隔离仅靠 S3 路径前缀 | 无 IAM 策略级别隔离,IDOR 风险 |
webSecurity + sandbox,淘汰静态 IAM Key 改用 STS,给 readFileAsArrayBuffer 加路径白名单。三项成本低但显著降低风险面。
以抓包中的真实任务为例(523 积分,138 张图片,~50 次工具调用)。
| 场景 | Input Tokens | KV-cache 命中率 | 费用 |
|---|---|---|---|
| 无 cache | 5.1M | 0% | $15.33 |
| 90% cache | 5.1M | 90% | $2.94 |
| 95% cache(极致优化) | 5.1M | 95% | $2.25 |
KV-cache 0% → 95%,成本差 6.8 倍。这就是 Manus 说"cache 命中率是最重要指标"的原因。
| 成本项 | 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 | Claude Code | Cursor | Devin | OpenHands | bolt.new |
|---|---|---|---|---|---|---|
| 定位 | 通用 Agent | CLI 编码 | AI IDE | AI 工程师 | 开源 Agent | Web 开发 |
| 架构 | 云端沙箱 + 本地 sidecar | 纯本地 CLI | 本地 IDE + 云端推理 | 纯云端 | Docker 自托管 | 浏览器 WASM |
| 沙箱 | Firecracker microVM | 无 | 无 | 云端 VM | Docker | WebContainer |
| 模型 | Claude + Qwen 多模型路由 | Claude 单供应商 | 多模型可选 | 不透明 | 用户自配 | 多模型可选 |
| 入门价 | $20/月 | $20/月 | $20/月 | $20/月 | 免费 | $25/月 |
| 开源 | 闭源 | 部分 | 闭源 | 闭源 | 完全开源 | 部分 (bolt.diy) |
| 数据主权 | 云端 | 本地 | 本地+云端 | 云端 | 完全本地 | 浏览器 |
Devin — 纯云端自治,PR 级任务委派
Cursor — IDE 深度集成,交互最快
Claude Code — 零沙箱开销,本地全权限
Manus — 浏览器+文件+代码全能
OpenHands — 开源免费,完全私有化
bolt.new — 浏览器即开即用