OpenClaw 架构解析AI 的工具箱是怎么工作的三层渐进加载 exec 工具让 AI 真正拥有眼和手你用过 Claude Code、Cursor 吗它们能帮你写代码、读文件、执行命令。但你有没有想过——支撑这些能力的底层架构是什么样的OpenClaw 是一个 AI Agent 运行时框架今天我们来拆解它的核心设计Skill 系统 工具链机制。两层架构系统工具 Skill整个 OpenClaw 可以看成两层积木。 第一层系统自带工具OpenClaw Core 这是出厂自带的底层能力包括exec 执行命令行、read/write/edit 文件操作、browser 浏览器控制、message 发消息、canvas 画图/SVG、tts 文字转语音。 这相当于手机的 GPS 模块、摄像头、网络模块——不管你装什么 App这些基础能力一直在。 第二层Skill技能包 这是场景化的能力封装把底层工具组合成特定场景的解决方案 qclaw-env → exec 的高级封装把安装工具做成一条流水线 xbrowser → browser 的高级封装让 AI 能自动化操作网页 wechat-cloudrun-publisher → message 的高级封装帮你推公众号 podcast → tts exec 的封装生成播客音频 类比系统工具 手机的基础模块Skill 滴滴打车 App封装地图定位支付 出行场景。你的需求越复杂需要的 Skill 就越多。OpenClaw Core系统自带工具 exec read/write browser message canvas Skill 层场景化封装 qclaw-env xbrowser wechat-publisher podcast渐进式加载三层架构AI 的上下文窗口是有限资源不能把所有 Skill 文档都塞进去。 OpenClaw 的解法是三层渐进加载 第一层元数据层启动时加载 只读 Skill 的名称 描述用于语义匹配。用户说「装 ffmpeg」系统扫描所有 Skill 描述找到 qclaw-env。这一层只有几百字节。 第二层指令层匹配成功后加载 加载 SKILL.md 完整内容。这里写死了执行流程「先检测平台 → 再判断包管理器 → 最后执行安装」。这一层通常几 KB。 第三层资源层执行时才加载 references/详细手册和 scripts/复杂脚本。100 行以上的脚本才放这里按需加载。这一层可能几十 KB。 为什么这样设计 传统方式是股脑全塞进去结果是上下文窗口爆炸AI 跑不动。三层渐进 按需分配内存AI 每次只加载当前需要的部分。 简单说不是把所有 Skill 都塞给 AI而是让 AI 需要时再拿。用户输入 发现阶段 元数据层加载 ~100 bytes 激活阶段 指令层加载 ~5 KB 执行阶段 资源层加载 ~20 KB 语义匹配 Skill 加载 SKILL.md 按需读scripts 上下文开销全塞 爆炸 | 三层渐进 按需分配 不是把所有 Skill 都塞给 AI而是让 AI 需要时再拿。exec 工具AI 的手exec ExecuteAI 执行 shell 命令的工具。 这是今天的主角。OpenClaw 所有需要操作机器的能力都靠 exec 来完成。 基本用法 exec(uname -s) → 返回 Darwin检测平台 exec(brew install ffmpeg) → 执行安装命令 exec(ls -la) → 读取目录结构 核心参数 backgroundtrue → 后台执行不阻塞飞机会用到 timeout120 → 超时自动 kill防止卡死 ptytrue → 交互式输入填表单场景 elevatedtrue → 申请管理员权限 exec 和安全机制的关系 Skill 的 skill-config.yaml 定义了权限模式 ask → 每次执行前问你确认默认 allow → 自动执行不问 deny → 完全禁止 所以 exec 不是想跑就跑它在权限管控之下。危险操作会弹窗让你确认。exec 工具核心参数速查 background 后台执行不阻塞 timeout 超时自动 kill pty 交互式输入 elevated 管理员权限 权限模式 ask 弹窗确认默认 allow 自动执行 deny 禁止完整执行链路AI 怎么调动 Skill exec以「帮用户安装 ffmpeg」为例看 AI 怎么一步步调度 Skill 和 exec 步骤1用户说「帮我装个 ffmpeg」 步骤2系统语义匹配 → 找到 qclaw-env描述里写了「安装 CLI 工具」 步骤3加载 qclaw-env/SKILL.md → AI 读懂完整流程 步骤4AI 执行 SKILL.md 的步骤1 调用 exec(uname -s uname -m) 系统返回 Darwin arm64 步骤5AI 继续执行步骤2 判断Darwin 平台用 brew 安装 调用 exec(brew install ffmpeg) 系统执行返回安装结果 步骤6AI 执行步骤3 调用 exec(ffmpeg -version) 验证安装成功 关键理解 SKILL.md 剧本定义流程 exec 工具执行命令 AI 演员读懂剧本 调用工具 根据结果继续下一步 三层各司其职AI 不是在乱跑命令而是严格按剧本执行。 这就是为什么同一个 Skill 在 macOS 和 Windows 上都能跑——SKILL.md 里写了跨平台的判断逻辑AI 会根据检测到的平台走对应分支。用户只说「装 ffmpeg」不用管 brew 还是 scoop。用户 语义匹配 qclaw-env SKILL.md 剧本已加载 AI 执行链路 检测平台 执行安装 执行链路详解 exec(uname -s) → Darwin → 判断 Darwin → brew install → 验证成功 SKILL.md 剧本 | exec 工具 | AI 演员 结果驱动下一步安全隔离AI 的缰绳exec 能跑命令听起来很危险系统有三层保护 第一层权限模式 skill-config.yaml 里定义了三种模式 ask → 执行前弹窗问你默认推荐 allow → 自动执行不打扰 deny → 完全禁止 危险操作如删除文件、修改系统配置会触发 ask 模式。 第二层沙箱隔离 每个 Skill 运行在独立进程中破坏力有限。Skill A 崩了不会影响 Skill B。 第三层Hooks 钩子 执行前/后触发自定义检查。比如可以写一个钩子「如果 exec 的命令包含 rm -rf直接拒绝」。 用户的操作指引规范 如果 AI 判断某个任务「无法自动完成」它必须给用户完整的操作步骤编号代码块URL而不是乱跑命令。这条规范写在 qclaw-env 的 SKILL.md 里「必须输出可直接操作的完整指引」。 安全不是靠「不让 AI 做事」来保证的而是靠「让 AI 按剧本做事」。第一层权限模式 ask 弹窗确认 allow 自动执行 deny 禁止 skill-config.yaml 第二层沙箱隔离 Skill A 独立进程 Skill B 独立进程 第三层Hooks 钩子 执行前/后触发自定义检查 → 例如检测到 rm -rf 命令直接拒绝自己开发一个 Skill假设你要做一个「备份 MySQL 数据库」的 Skill目录结构如下 SKILL.md必须→ 核心指令 references/mysqldump.md可选→ 详细手册 scripts/backup.sh可选→ 复杂脚本 SKILL.md 写法 触发条件用户说「备份数据库」 执行步骤 步骤1检测环境 → exec(which mysql) → 如果没找到返回「需要先安装 MySQL」 步骤2执行备份 → exec(mysqldump -u root mydb backup.sql) 步骤3压缩 → exec(tar -czf backup.tar.gz backup.sql) 步骤4验证 → read(backup.tar.gz) → 确认文件存在且有内容 关键发现 整个 Skill 开发不需要写一行 Python/JS只写 Markdown 格式的 SKILL.md 即可。 Skill 本质上是一个「场景化剧本」——你告诉 AI 什么场景做什么AI 用内置工具去执行。 上传到 SkillHub 后其他用户说「备份数据库」系统就会匹配到你的 Skill按剧本执行。 这就是 OpenClaw 的扩展机制不需要改底层代码只需要写剧本。Skill 目录结构 SKILL.md必须 references/可选 scripts/可选 SKILL.md 内容示例备份数据库 Skill 触发条件用户说「备份数据库」 步骤1exec(which mysql) 步骤2exec(mysqldump -u root mydb backup.sql) 核心价值 不需要写一行 Python/JS | 只写 Markdown | 上传 SkillHub 即可分享总结一张图记住全貌整个 OpenClaw 架构可以用一张图总结见文内 SVG 图示 三层各司其职 系统工具 基础能力出厂自带AI 直接调用 Skill 场景化封装可扩展把工具组合成能力 AI 读懂剧本 调用工具 智能决策 设计的核心哲学「恰好而非更多」——AI 的上下文窗口是有限资源不能把所有 Skill 内容都塞进去。三层渐进加载实现了按需分配让 AI 在任何时候都只加载当前需要的部分。 理解了 Skill 系统你就能理解为什么有些 AI Agent 只能聊天有些却能帮你装软件、自动化网页操作、管理文件——区别不在于 AI 模型本身而在于它们背后有没有好的 Skill 体系支撑。 工具箱就在那里怎么用全看你写什么剧本。