
导读:一位开发者对阿里最新推出的AI Agent客户端“悟空”进行了深入的逆向分析,整个过程借助了AI工具辅助,效率显著提升。
由钉钉团队开发的这款AI Agent桌面客户端,内部代号“Real”,对外品牌名为“悟空(Wukong)”。本文基于某位开发者网友利用AI进行的“逆向分析”与跟踪,从其架构上看,设计与思路与开源的OpenClaw颇有相似之处。该分析并未涉及任何反编译或对原应用的破坏性操作,仅为启发设计、学习思想之用。文中部分文字描述因源编辑器原因,若呈现稍显混乱,敬请理解。
操作方法:通过逆向分析App Bundle结构、二进制符号、动态库依赖及资源文件来实现。
1. 基本身份信息
| 属性 |
值 |
| 显示名称 |
Wukong(悟空) |
| Bundle ID |
com.dingtalk.real |
| 可执行文件 |
DingTalkReal |
| 版本 |
0.9.0 |
| 最低系统 |
macOS 14.0 |
| 架构 |
arm64 (Apple Silicon) |
| 开发团队 |
钉钉 (DingTalk / 阿里巴巴) |
| 构建环境 |
Jenkins CI (real-wukong-release),构建用户 yuanzhan |
| 自定义 URL Scheme |
wukong:// |
2. 技术栈总览
核心框架:Tauri 2.x + Rust + WRY/WebKit
- 主程序:纯 Rust 编写,使用 Tauri 框架(非 Electron)
- 前端 UI:运行在 WebView 内的 Web 应用(Tauri 生态通常用 React/Vue/Svelte)
- IPC 机制:Tauri 自定义协议
tauriipc://,带 Isolation Pattern 安全隔离模式
系统级原生框架依赖
通过 otool -L 分析动态库链接:
| 框架 |
用途 |
| WebKit + JavaScriptCore |
WebView 渲染与 JS 执行 |
| AVFoundation + AVFAudio + CoreMedia |
音视频处理 |
| ScreenCaptureKit |
屏幕截图/录制 |
| CoreLocation |
地理定位 |
| UserNotifications |
系统通知 |
| OSAKit |
AppleScript 自动化 |
| Metal + QuartzCore |
GPU 渲染 |
| CloudKit |
iCloud 数据同步 |
| CoreData |
本地数据持久化 |
| Security |
密钥链/加密 |
| IOKit |
硬件交互 |
| SystemConfiguration |
网络配置 |
| CoreImage + ImageIO + ColorSync |
图像处理 |
| CoreText |
文本渲染 |
| CoreVideo + IOSurface |
视频/Surface 管理 |
3. App Bundle 目录结构
Wukong.app/Contents/
├── Info.plist # 应用元数据
├── _CodeSignature/ # 代码签名
├── MacOS/
│ ├── DingTalkReal # 主可执行文件 (122MB, arm64, Rust)
│ └── real-cli # CLI 工具 (2.8MB, arm64)
├── Frameworks/ # (空 — 无第三方 framework)
└── Resources/
├── icon.icns # 应用图标
├── zh-Hans-CN.lproj/ # 简体中文本地化
├── zh-Hans.lproj/ # 简体中文本地化
├── python/ # (预留 Python 目录)
└── resources/
├── browser-runtime/ # 浏览器自动化运行时 (TypeScript)
├── bundled-skills/ # 内置技能包 (zip)
├── dws/ # DWS 内部服务
├── environment/ # 运行环境管理
├── mbb-skills/ # 浏览器增强技能
└── real_networking/ # 网络层 (含 GaeaMac.framework)
4. Agent 运行时架构(从 Rust 源码路径反推)
src/
├── main.rs # 入口
├── agent/ # ===== AI Agent 核心 =====
│ ├── agent_client/
│ │ ├── connection/processes.rs # ACP (Agent Communication Protocol) 进程管理
│ │ └── session/builder.rs # 会话构建器
│ ├── runtime/
│ │ ├── real_loop/ # "Real Loop" — 主 Agent 循环引擎
│ │ │ ├── loop_engine.rs # 核心循环
│ │ │ ├── commands.rs # 命令处理
│ │ │ ├── types.rs # 工具定义(内置工具声明)
│ │ │ ├── message_converter.rs # 消息格式转换
│ │ │ ├── memory_summarizer.rs # 对话记忆摘要
│ │ │ ├── sensitive_paths.rs # 敏感路径过滤 (~/.real/.acp)
│ │ │ ├── session_approval_memory.rs # 权限审批记忆 (HITL)
│ │ │ ├── skill_snapshot.rs # 技能发现与注入
│ │ │ └── sandbox_policy_loader.rs # 沙箱安全策略加载
│ │ ├── spark_loop/ # "Spark Loop" — 自研 Agent 引擎
│ │ │ └── allspark/crates/ # 内嵌独立 Rust workspace (DDD 架构)
│ │ │ ├── application/ # 应用层
│ │ │ │ └── agent/
│ │ │ │ ├── stream/service_impl.rs
│ │ │ │ └── session_memory_flusher.rs
│ │ │ ├── domain/ # 领域层
│ │ │ │ ├── agent/compaction.rs
│ │ │ │ ├── common/llm.rs
│ │ │ │ └── session/entity.rs
│ │ │ └── infrastructure/ # 基础设施层
│ │ │ ├── shared/llm/
│ │ │ │ ├── maas.rs # 阿里云 MaaS API
│ │ │ │ ├── qwen.rs # 通义千问 (OpenAI 兼容)
│ │ │ │ └── openai.rs # OpenAI API
│ │ │ ├── sandbox/gateway_impl.rs
│ │ │ ├── soul/ # "Soul" — Agent 人格/记忆
│ │ │ └── agent/system_prompt_template.rs
│ │ ├── real_tools/ # ===== 内置工具集 =====
│ │ │ ├── infrastructure/
│ │ │ │ ├── browser/
│ │ │ │ │ ├── control_plane.rs # 浏览器生命周期管理
│ │ │ │ │ └── embedded/
│ │ │ │ │ ├── page_actor.rs # 页面操作 Actor
│ │ │ │ │ ├── session_port.rs # 会话端口
│ │ │ │ │ └── artifact_port.rs # 文件下载
│ │ │ │ └── proxy.rs # Sidecar 代理
│ │ │ └── tools/
│ │ │ ├── cron/shared.rs # 定时任务
│ │ │ ├── text2image.rs # 文生图
│ │ │ ├── text2video.rs # 文生视频
│ │ │ └── web/
│ │ │ ├── core/robots.rs # robots.txt 解析
│ │ │ └── search/aggregator.rs # 搜索聚合
│ │ ├── dingtalk_supports/cloud/ # 钉钉云端工具
│ │ └── path_codec.rs
│ ├── memory/ # ===== 持久化记忆 =====
│ │ ├── service.rs # 记忆服务
│ │ └── sqlite.rs # SQLite 存储
│ ├── persistence/
│ │ ├── consumer/mod.rs # 消息块消费者
│ │ └── db_store/spark_agui_message.rs
│ ├── session/session_manager/ # 会话管理
│ ├── attachments/mod.rs # 附件管理
│ └── agui_stream.rs # Agent GUI 流
│
├── gateway/ # ===== API 网关层 =====
│ ├── commands.rs # Tauri 命令
│ ├── service.rs # 路由分发引擎
│ ├── models.rs # 请求/响应模型
│ └── draft.rs # 草稿系统
│
├── channels/ # ===== 多渠道接入 =====
│ ├── dingtalk/
│ │ ├── ai_card.rs # AI 卡片消息 (流式)
│ │ ├── stream.rs # 钉钉 Stream
│ │ └── commands.rs
│ ├── slack.rs # Slack 集成
│ ├── whatsapp.rs # WhatsApp 集成
│ ├── agent_support.rs
│ └── types.rs # 设备注册 RPC
│
├── mcp/ # ===== MCP 协议 =====
│ ├── runtime.rs # MCP 服务器运行时
│ ├── cli.rs
│ └── config.rs # mcpServerConfig.json
│
├── model_provider/ # ===== LLM 提供商管理 =====
│ ├── commands.rs # API Key / 凭证管理
│ ├── cli.rs # 技能 markdown 加载
│ └── dingtalk_runtime.rs
│
├── cron/ # ===== 定时任务系统 =====
│ ├── commands/job_commands.rs
│ ├── mod.rs
│ └── store/
│ ├── job_store.rs
│ ├── run_store.rs
│ └── delivery_store.rs
│
├── skills/ # ===== 技能系统 =====
│ ├── commands.rs # 安装/启用/禁用/删除
│ └── health.rs # 技能健康检查
│
├── hooks/commands.rs # ===== Hook 系统 =====
│
├── environment/mod.rs # ===== 运行环境管理 =====
│
├── real_cli/router.rs # ===== CLI 路由 =====
│
├── rpc/ # ===== RPC 接口 =====
│ ├── agent_device.rs
│ ├── browser_runtime.rs
│ ├── gateway.rs
│ ├── kinto_chat.rs
│ └── model_provider.rs
│
├── dingtalk_core/ # ===== 钉钉核心 =====
│ ├── login/
│ │ ├── mod.rs # 登录状态机 (Unlogin → LoggingIn → Logged)
│ │ ├── models.rs
│ │ ├── agentbay_auth.rs # AgentBay 认证
│ │ └── global_llm.rs # LLM 凭证管理 (加密存储)
│ ├── heartbeat/manager.rs # 心跳
│ ├── file_upload.rs # 文件上传
│ └── mod.rs
│
├── lwp/debug_workbench.rs # ===== LWP 调试工作台 =====
│
├── system/ # ===== 系统能力 =====
│ ├── screen_capture.rs # 屏幕截图 (ScreenCaptureKit)
│ ├── audio_capture.rs # 音频捕获
│ ├── ui_automation.rs # UI 自动化
│ ├── app_scanner.rs # 应用扫描
│ └── power_management.rs # 电源管理 (阻止休眠)
│
├── base/process_manager/ # ===== 进程管理器 =====
│ ├── manager.rs # 子进程生命周期
│ ├── lifecycle.rs # 状态机 (Running/Exited/Crashed/Restarting)
│ └── monitor.rs
│
├── types/generated/acp_message.rs # ===== 自动生成的 ACP 消息协议 =====
│
└── ui_cli_command/theme.rs # ===== UI 主题 =====
5. 支持的 Agent 类型
从 src/main.rs 二进制符号提取的 Agent 类型枚举:
| Agent 类型 |
标识 |
说明 |
| Spark |
spark |
钉钉自研 Agent 引擎 |
| Native |
native |
原生驱动 |
| Wukong |
— |
内部品牌统称 |
| Claude |
claude |
Claude Code 集成 |
| Gemini |
gemini |
Gemini CLI 集成 |
| Codex |
codex |
Codex CLI 集成 |
| iFlow |
iflow |
工作流引擎 |
| Builtin |
builtin |
内置 Agent |
| Local |
local |
本地模型 Agent |
| Discovered |
— |
自动发现的 Agent |
由此可见,Wukong 是一个多 Agent 宿主平台,可以同时运行多种 AI Agent 引擎。
6. LLM 多后端支持
从 allspark/crates/infrastructure/src/shared/llm/ 反推出三个 LLM 适配器:
6.1 MaaS (maas.rs) — 阿里云模型服务
MaasRequest { model, max_tokens, tools, stream, stream_options, enable_thinking, tool_choice, parallel_tool_calls, temperature, top_p, top_k, min_p, extra_body, cache_control }
- 支持
prompt_cache_hit_tokens — 提示缓存命中统计
- 支持
enable_thinking — 思考模式
6.2 Qwen (qwen.rs) — 通义千问
OpenAI 兼容格式,支持 enable_thinking。
6.3 OpenAI (openai.rs) — 标准 OpenAI API
标准 OpenAI Chat Completions 格式。
全部适配器支持:streaming、tool_choice、parallel_tool_calls、usage tracking。
7. 内嵌运行时环境
应用内置了完整的开发/执行环境:
| 组件 |
版本 |
用途 |
| Bun |
1.2.17 |
主 JS/TS 运行时(运行 browser-runtime) |
| Node.js |
22.19.0 |
备用 JS 运行时 |
| Python |
3.12 (CPython) |
Python 脚本执行 |
| uv |
0.7.13 |
Python 包管理器 |
| Chromium |
145.0.7632.160 |
内嵌浏览器(自动化用) |
| Qwen |
0.10.0 |
本地通义千问模型(离线推理) |
| DWS |
0.2.19 |
内部服务守护进程 |
运行时通过 resource_manifest.json 管理,支持按平台/profile 差异化分发。
8. 浏览器自动化系统
resources/browser-runtime/ 是一个独立的 TypeScript 微服务:
技术栈
- Playwright (
playwright-core 1.58.2) — 浏览器自动化引擎
- Express 5 — HTTP API 服务
- WebSocket (
ws 8.19.0) — 实时通信
- Bun — 运行时
模块结构
browser-runtime/src/
├── main.ts # 入口
├── browser/ # 浏览器控制
│ ├── cdp.ts # Chrome DevTools Protocol 客户端
│ ├── chrome.ts # Chrome 启动管理
│ ├── client.ts # 浏览器客户端
│ ├── client-actions.ts # 页面操作 (点击/输入/观察等)
│ ├── control-api.ts # 控制 API
│ ├── control-auth.ts # 认证
│ ├── bridge-server.ts # Bridge 服务
│ ├── extension-relay.ts # Chrome 扩展中继
│ ├── navigation-guard.ts # 导航守卫
│ ├── profiles.ts # 浏览器 Profile 管理
│ ├── form-fields.ts # 表单字段处理
│ └── pw-ai-module.ts # Playwright AI 模块
├── cli/ # CLI 接口
├── config/ # 配置
├── gateway/ # 网关
├── infra/ # 基础设施
├── logging/ # 日志
├── media/ # 媒体处理
├── process/ # 进程管理
├── security/ # 安全 (CSRF 等)
└── utils/ # 工具函数
安全模型
- Bridge Auth Registry — 桥接认证注册
- CSRF 防护
- Control Auth (含 auto-token)
- HTTP Auth
- Extension Relay Auth
9. 技能系统 (Skills)
9.1 Bundled Skills(内置技能包)
| 技能包 |
用途 |
dingtalk-workspace.zip |
钉钉工作台 |
docx.zip |
Word 文档处理 |
pptx-presentation-handler.zip |
PPT 演示文稿处理 |
xlsx-spreadsheet-handler.zip |
Excel 电子表格处理 |
pdf-document-handler.zip |
PDF 文档处理 |
pdf_convert_to_word.zip |
PDF 转 Word |
skill-creator.zip |
技能创建器(元技能) |
9.2 MBB Skills(浏览器增强技能)
针对特定网站的自动化操作技能:
| 技能 ID |
名称 |
目标域名 |
12306-train-query |
12306 火车票查询 |
12306.cn |
ctrip-flight-search |
携程航班查询 |
ctrip.com |
dianping-info-query |
大众点评信息查询 |
dianping.com |
9.3 技能发现机制
从 skill_snapshot.rs 反推的技能管理 API:
search_skills — 搜索可用技能
use_skill(skill_name, level="preview"|"full") — 激活技能
cli_skills_install_local / cli_skills_install_url — 安装本地/远程技能
cli_skills_toggle_enabled — 启用/禁用
cli_skills_delete — 删除
- 支持 渐进式披露 (Progressive Disclosure) — 先展示常用技能,按需搜索更多
- 支持
skill_injection_policy — 技能注入策略 (explicit/auto)
从 src/agent/runtime/real_loop/types.rs 提取:
| 工具名 |
功能 |
understand_image_content |
图像内容分析(本地 Vision 模型/云端回退) |
parse_file |
文件解析(PDF 本地处理,其他格式云端) |
text2image |
文生图(文本描述 → 图像) |
image2image |
图生图(基于已有图像变换) |
text2video |
文生视频 |
read_url_v2 |
网页内容读取 |
reader_html_content |
HTML 内容解析 |
internet-search |
互联网搜索 |
browser_start |
启动浏览器 |
browser_stop |
停止浏览器 |
browser_screenshot |
浏览器截图 |
browser_wait_for_download |
等待文件下载 |
browser_status |
浏览器状态查询 |
execute_shell |
Shell 命令执行(沙箱内) |
cron_* |
定时任务管理 |
11. 多渠道通信架构
| 渠道 |
实现方式 |
关键细节 |
| 钉钉 |
AI Card (流式卡片) + Stream 长连接 |
使用 dtv1.card 模板,支持 IM_ROBOT 和 IM_GROUP |
| Slack |
OAuth API (auth.test) |
支持 thread_ts 线程回复 |
| WhatsApp |
集成 |
独立模块 |
| Agent Device |
RPC API |
设备注册/更新/列表/删除/启用 |
消息事件流
TaskStart → PreToolUse → PostToolUse → PermissionRequest → TaskComplete/TaskError
12. 安全架构
12.1 沙箱系统
SandboxV2Config — 沙箱配置
- 支持 sandbox level / profile / authorized roots
- 沙箱快照保存/恢复
12.2 权限审批 (Human-in-the-Loop)
session_approval_memory — 记录用户的允许/拒绝决策
is_always_allowed / is_always_denied — 持久化权限
EvalAutoAllow — 评估模式自动允许
12.3 敏感路径过滤
- 屏蔽
~/.real/.acp 等内部目录
- Allowlist 机制
12.4 Prompt 安全
PromptGuardrailsConfig — 提示词安全护栏
12.5 Tauri 安全
- Isolation Pattern — 前端 IPC 隔离
- CSP 保护
12.6 凭证安全
PreferenceCrypto — 偏好设置加密
- 自动从明文迁移到加密存储
- LLM 凭证过期/刷新机制
13. 辅助二进制与网络层
| 文件 |
大小 |
架构 |
说明 |
DingTalkReal |
122MB |
arm64 |
主可执行文件 (Rust/Tauri) |
real-cli |
2.8MB |
arm64 |
独立 CLI 工具 |
real_networking |
— |
universal (x86_64 + arm64) |
网络层二进制 |
dws |
— |
arm64 |
DWS 服务守护进程 |
网络层
GaeaMac.framework — 阿里内部网络框架 (Gaea)
- 包含 AI、Aladdin、Base、Bridge 等子模块
- 支持 Wukong 专用头文件
libdtfbase.dylib — 钉钉基础库
14. 数据存储
| 存储方式 |
用途 |
| SQLite |
Agent 记忆、消息持久化、定时任务 |
| CoreData |
本地数据管理 |
| CloudKit |
云端数据同步 |
| JSON 配置文件 |
MCP 服务器配置、环境清单 |
| 加密偏好设置 |
LLM API Key、登录凭证 |
15. 系统权限声明
| 权限 |
用途描述 |
| AppleEvents |
控制 Terminal 和其他应用执行任务 |
| Camera |
拍照和视频录制 |
| Location (Always) |
天气、导航等任务 |
| Microphone |
语音输入和音频捕获 |
| Screen Capture |
分析界面内容和执行自动化操作 |
| Notifications |
提醒任务执行状态和重要事件 |
16. 架构总结图

17. 核心结论
Wukong 是阿里钉钉团队打造的下一代 AI Agent 桌面操作系统,通过对应用结构的逆向分析,我们得以窥见其核心特征:
- Tauri + Rust 原生架构 — 非 Electron,性能优异,主二进制 122MB 包含所有逻辑
- 多 Agent 引擎共存 — 同时支持自研 Spark、Claude Code、Gemini CLI、Codex CLI 等
- 全栈 AI Agent 能力 — 代码执行、浏览器自动化、屏幕截图、UI 自动化、文件处理、文生图/视频
- MCP 协议原生支持 — 可连接外部 MCP 服务器扩展工具能力
- 完善的技能系统 — 内置技能 + 浏览器增强技能 + 用户自装技能,渐进式发现
- 多渠道分发 — 同一 Agent 可通过钉钉 AI Card、Slack、WhatsApp 等渠道交互
- 本地 LLM 能力 — 内置 Qwen 模型,支持离线推理
- 企业级安全 — 沙箱隔离、HITL 权限审批、敏感路径过滤、Prompt Guardrails、凭证加密
- 自包含运行时 — 内嵌 Bun/Node/Python/Chromium,无需用户额外安装
- DDD 架构 — AllSpark 内核采用领域驱动设计,Application/Domain/Infrastructure 分层清晰
可见,悟空不只是一个聊天窗口,而是能控制电脑、操作浏览器、执行代码、管理定时任务、跨平台分发的智能体平台。
此次逆向工程分析主要是针对前端App的结构,并未触及后端服务器代码,但这已足够让我们了解其设计理念和技术选型,希望能给各位开发者在构建类似的人工智能应用时带来一些启发。更多深入的技术讨论,欢迎关注云栈社区的开发者们共同探索。
编辑:手扶拖拉斯基