项目概述
目录

引言
OpenClaw 是一款面向 macOS 的 AI 驱动自动化控制桌面应用。其核心目标是通过人工智能模型与系统级权限协作,实现对桌面环境的智能自动化操作,包括但不限于屏幕截图采集、应用交互、语音唤醒检测、位置信息共享与通知展示等。项目强调在本地化与隐私友好的前提下,提供可扩展的 AI 模型接入能力与广泛的硬件兼容性支持。
设计理念与差异化优势:
- AI 模型即插即用:内置多厂商模型清单与统一的流式对话接口抽象,便于快速切换与成本评估。
- 系统权限透明:在 Info.plist 中明确声明各类系统权限用途,确保用户知情与可控。
- 设备兼容性:维护完整的 Mac 设备型号映射,覆盖从早期 iMac 到最新 M 系列芯片机型。
- 自动更新:集成 Sparkle 框架,提供安全、便捷的应用版本更新通道。
应用场景举例(概念性说明):
- 语音唤醒触发后,自动打开终端并执行预设脚本,同时截取屏幕上下文供 AI 分析。
- 基于摄像头/麦克风输入进行图像识别与语音转写,结合模型推理生成下一步动作。
- 在需要时请求位置信息以辅助上下文决策,并通过系统通知反馈执行结果。
项目结构
OpenClaw 应用采用标准 macOS 应用包结构,核心资源与框架位于 Contents 目录中:
- 可执行文件与资源:位于 MacOS 与 Resources 下,包含模型清单与设备型号映射。
- 框架与更新:Sparkle 框架用于应用自更新;Info.plist 描述应用元数据与权限需求。
- 版本与构建信息:Info.plist 中包含构建时间戳与 Git 提交号,便于溯源。
OpenClaw.app
Contents
Info.plist
Resources
Frameworks
Sparkle.framework
models.generated.js
DeviceModels
mac-device-identifiers.json
图表来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L1-L83)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
章节来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L1-L83)
-
AI 模型集成层
- 维护统一的模型清单,包含提供商、API 类型、基础 URL、输入类型、上下文窗口与最大输出长度等元数据,支持按需选择与成本评估。
- 支持流式对话接口抽象,便于在不同提供商之间切换。
-
权限与安全层
- 在 Info.plist 中明确声明 Apple Events、相机、麦克风、屏幕捕获、语音识别、位置信息与通知等权限用途,确保合规与透明。
-
设备兼容性层
- 提供 Mac 设备型号到具体产品名称的映射,覆盖广泛机型,便于在不同硬件上稳定运行。
-
自动更新层
- 集成 Sparkle 框架,提供应用更新检查与安装流程,保障用户体验与安全性。
章节来源
-
models.generated.js\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/models.generated.js#L1-L800)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
架构总览
OpenClaw 的整体架构围绕"权限声明---模型抽象---设备适配---更新机制"展开,形成清晰的分层设计:
- 表现层:应用 UI(由 Info.plist 中的 LSUIElement 设置表明其以菜单栏/后台方式运行)。
- 控制层:权限与系统交互逻辑(Apple Events、屏幕捕获、通知等)。
- 智能层:AI 模型接入与推理(统一接口抽象与模型清单)。
- 兼容层:设备型号映射与系统版本要求(最低系统版本 15.0)。
- 运维层:自动更新(Sparkle)。
运维层
兼容层
智能层
控制层
表现层
应用界面
LSUIElement 后台模式
权限与系统交互
Apple Events/屏幕捕获/通知
AI 模型清单
统一接口抽象
设备型号映射
系统版本要求
最低 macOS 15.0
自动更新
Sparkle
图表来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L34-L37)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
详细组件分析
AI 模型集成组件
该组件负责统一管理多厂商模型清单与调用接口,支持文本与图像输入、流式响应与成本/上下文窗口等元数据,便于在不同提供商间灵活切换。
"管理"
"关联"
ModelEntry
+id
+name
+provider
+api
+baseUrl
+reasoning
+input
+cost
+contextWindow
+maxTokens
ProviderConfig
+provider
+baseUrl
+api
ModelRegistry
+MODELS
+selectModel(id)
+listProviders()
+getProviderConfig(provider)
图表来源
-
models.generated.js\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/models.generated.js#L1-L800)
-
models.generated.js\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/models.generated.js#L1-L800)
该组件通过 Info.plist 明确声明应用所需的系统权限,确保在执行自动化任务(如 Apple Events、屏幕捕获、语音识别、位置共享与通知)时具备合法授权。
是
否
是
否
是
否
是
否
是
否
应用启动
读取 Info.plist 权限声明
需要 Apple Events 吗?
请求 Apple Events 权限
跳过
需要屏幕捕获吗?
请求屏幕捕获权限
跳过
需要麦克风/语音识别吗?
请求麦克风/语音识别权限
跳过
需要位置信息吗?
请求位置权限
跳过
需要通知权限吗?
请求通知权限
完成
图表来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L53-L70)
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L53-L70)
该组件维护 Mac 设备型号到具体产品名称的映射,覆盖从早期 iMac 到最新 M 系列机型,确保在不同硬件平台上的稳定运行。
映射
DEVICE_MODEL
string
model_code
PK
string
display_name
MODEL_MAPPING
string
model_code
string
product_name
图表来源
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
该组件通过 Sparkle 框架提供应用更新能力,包含更新源配置与版本比较协议等头文件入口,确保用户始终使用最新版本。
"更新源" "Sparkle 更新器" "OpenClaw 应用" "更新源" "Sparkle 更新器" "OpenClaw 应用" 初始化更新器 请求 appcast.xml 返回可用更新信息 触发更新提示 用户确认下载 下载更新包 返回更新包 安装并重启
图表来源
-
Sparkle.h\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Frameworks/Sparkle.framework/Versions/B/Headers/Sparkle.h#L15-L38)
章节来源
-
Sparkle.h\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Frameworks/Sparkle.framework/Versions/B/Headers/Sparkle.h#L15-L38)
依赖关系分析
- 应用元数据与权限:Info.plist 决定应用标识、版本、最低系统版本与权限描述。
- 模型清单:models.generated.js 提供统一的模型注册表与提供商配置。
- 设备映射:mac-device-identifiers.json 提供设备型号解析。
- 更新框架:Sparkle.h 暴露更新相关接口与协议。
Info.plist
权限声明
系统版本要求
models.generated.js
模型注册表
mac-device-identifiers.json
设备兼容性
Sparkle.h
自动更新
图表来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L1-L83)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
章节来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L1-L83)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
性能考虑
- 模型选择与成本:通过模型清单中的 cost 字段与上下文窗口参数,合理选择适合任务的模型,平衡精度与成本。
- 输入类型优化:根据任务特性选择文本或图文输入,减少不必要的图像处理开销。
- 流式响应:利用流式对话接口抽象,降低端到端延迟,提升交互体验。
- 设备适配:依据设备型号映射与系统版本要求,避免在不兼容设备上执行高负载任务。
- 更新策略:通过 Sparkle 的自动更新机制,及时获取性能与稳定性改进。
故障排查指南
- 权限相关问题
- 症状:无法执行自动化操作或无法捕获屏幕。
- 排查:检查 Info.plist 中对应权限声明是否已获得用户授权;重新授予权限后重试。
- 模型不可用
- 症状:模型列表为空或调用失败。
- 排查:确认 models.generated.js 是否完整加载;检查网络连通性与提供商服务状态。
- 设备不兼容
- 症状:在特定机型上运行异常。
- 排查:核对 mac-device-identifiers.json 中是否存在对应型号;确认系统版本满足最低要求。
- 自动更新失败
- 症状:无法检查或安装更新。
- 排查:检查 Sparkle 配置与 appcast 源;确认网络访问策略允许更新源域名。
章节来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L53-L70)
-
mac-device-identifiers.json\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Resources/DeviceModels/mac-device-identifiers.json#L1-L215)
结论
OpenClaw 通过清晰的分层架构与完善的系统集成,实现了在 macOS 平台上以 AI 为核心驱动力的自动化控制能力。其统一的模型抽象、透明的权限声明、广泛的设备兼容性与可靠的自动更新机制,共同构成了一个可扩展、易维护且用户友好的桌面自动化解决方案。对于初学者而言,可从权限与模型清单入手理解系统边界与能力范围;对于开发者,则可基于现有抽象快速扩展新的模型与设备支持。
附录
- 版本与构建信息:应用版本、构建时间戳与 Git 提交号可在 Info.plist 中查看,便于发布追踪与回溯。
- 更新源:自动更新 feed URL 与公钥在 Info.plist 中配置,确保更新链路的安全性与可信度。
章节来源
-
Info.plist\](file://OpenClaw-2026.1.30/OpenClaw.app/Contents/Info.plist#L71-L80)