[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"consumer-news-detail-977":3,"consumer-news-interaction-977":41,"consumer-news-related-977":44},{"detail":4,"item":36},{"card":5,"schemaVersion":23,"fields":24,"content":30},{"id":6,"kind":7,"targetType":8,"targetId":9,"subtype":7,"typeLabel":10,"title":11,"subtitle":12,"summary":13,"coverUrl":14,"badgeText":15,"href":16,"sourceName":12,"meta":17,"metrics":20,"tags":21,"resolved":22},"NEWS_ARTICLE:977","news","NEWS_ARTICLE",977,"资讯","【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4）--- 代码执行","博客园","【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4） 代码执行 目录【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4） 代码执行0x00 概要0x01 代码合成1.1 核心思想1.2 业务逻辑具体应用场景能力体现1.3 实现细节生成种类Rust 代码Arduino CLI的","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260823212850242-1723558087.png","","\u002Fnews\u002F977",[18,19],"2026","人工智能",{},[19],true,"consumer-content-detail-v1",{"sourceName":12,"authorName":25,"categoryName":19,"summary":13,"description":13,"publishTime":26,"updateTime":27,"sourceUrl":28,"language":29},"罗西的思考","2026-09-08T21:17","2026-09-11T15:22:01","https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301","中文",{"format":31,"policy":32,"normalized":22,"html":33,"text":34,"wordCount":35,"hasBody":22},"HTML","NEWS_CONTENT_V1","【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4）--- 代码执行\n\n\u003Cdiv>\n \u003Cdiv>\n  目录\n \u003C\u002Fdiv>\n \u003Cul>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#openclaw具身硬件zeroclaw-源码阅读笔记4----代码执行\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4）--- 代码执行\u003C\u002Fa>\n   \u003Cul>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x00-概要\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x00 概要\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x01-代码合成\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x01 代码合成\u003C\u002Fa>\n     \u003Cul>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#11-核心思想\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">1.1 核心思想\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#12-业务逻辑\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">1.2 业务逻辑\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#具体应用场景\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">具体应用场景\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#能力体现\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">能力体现\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#13-实现细节\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">1.3 实现细节\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#生成种类\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">生成种类\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#rust-代码\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Rust 代码\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#arduino-cli的功能定位\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Arduino CLI的功能定位\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#14-claudecode-tool如何被大模型使用\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">1.4 ClaudeCode Tool如何被大模型使用\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第一步toolspec生成工具描述\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第一步：tool.spec()生成工具描述\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第二步注册到agent\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第二步：注册到Agent\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第三步转换为llm-function-calling格式\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第三步：转换为LLM Function Calling格式\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第四步llm返回tool_callzeroclaw分发执行\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第四步：LLM返回tool_call，ZeroClaw分发执行\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n     \u003C\u002Ful>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x02-代码执行\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x02 代码执行\u003C\u002Fa>\n     \u003Cul>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#21-核心概念\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">2.1 核心概念\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#wasm执行机制\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">WASM执行机制\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#dynamic-exec动态执行\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Dynamic Exec动态执行\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#8-层纵深执行架构\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">8 层纵深执行架构\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#22-关键组件\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">2.2 关键组件\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#shelltool\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">ShellTool\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#sop工作流引擎\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">SOP工作流引擎\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#skill-动态加载系统\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Skill 动态加载系统\u003C\u002Fa>\n         \u003Cul>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#三层来源\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">三层来源\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#skilltool-转换\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Skill→Tool 转换\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#自动创建skillcreator\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">自动创建（SkillCreator）\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#自我改进skillimprover\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">自我改进（SkillImprover）\u003C\u002Fa>\u003C\u002Fli>\n         \u003C\u002Ful>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#23-代码执行架构对比\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">2.3 代码执行架构对比\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#24-具体应用场景\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">2.4 具体应用场景\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#25-执行流程\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">2.5 执行流程\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#claude-code产生的代码如何被执行\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Claude Code产生的代码如何被执行\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#shell-工具\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">shell 工具\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n     \u003C\u002Ful>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x03-消息机制\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x03 消息机制\u003C\u002Fa>\n     \u003Cul>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#31-消息协议\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">3.1 消息协议\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#32-daemon\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">3.2 Daemon\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#流程图\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">流程图\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#完整架构\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">完整架构\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n     \u003C\u002Ful>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x04-iot\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x04 IOT\u003C\u002Fa>\n     \u003Cul>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#41-三层协同的完整-iot-场景\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.1 三层协同的完整 IoT 场景\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#42-核心-iot-硬件能力原生支持\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.2 核心 IoT 硬件能力（原生支持）\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#43-iot-场景的-ai-agent-能力核心价值\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.3 IoT 场景的 AI Agent 能力（核心价值）\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#44-典型-iot-应用示例\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.4 典型 IoT 应用示例\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#45-iot-适配机制\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.5 IoT 适配机制\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第一层mqtt-channel消息入口\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第一层：MQTT Channel（消息入口）\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第二层-peripheral-trait-硬件外设\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第二层: Peripheral Trait (硬件外设)\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#第三层-sop--peripheral-联动\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">第三层: SOP + Peripheral 联动\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#46-总结\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">4.6 总结\u003C\u002Fa>\u003C\u002Fli>\n     \u003C\u002Ful>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0x05-sop-标准操作流程\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0x05 SOP 标准操作流程\u003C\u002Fa>\n     \u003Cul>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#51-核心设计哲学\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">5.1 核心设计哲学\u003C\u002Fa>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#52-流程\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">5.2 流程\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#快速路径\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">快速路径\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#运行时契约当前\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">运行时契约（当前）\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#事件流程\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">事件流程\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#入门指南\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">入门指南\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#生命周期\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">生命周期\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#确定性模式deterministic特殊路径\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">确定性模式（Deterministic）特殊路径\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#53-sop-连接与事件扇入\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">5.3 SOP 连接与事件扇入\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#mqtt-集成\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">MQTT 集成\u003C\u002Fa>\n         \u003Cul>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#配置\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">配置\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#触发器定义\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">触发器定义\u003C\u002Fa>\u003C\u002Fli>\n         \u003C\u002Ful>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#webhook-集成\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Webhook 集成\u003C\u002Fa>\n         \u003Cul>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#端点\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">端点\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#授权\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">授权\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#幂等性\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">幂等性\u003C\u002Fa>\u003C\u002Fli>\n          \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#示例请求\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">示例请求\u003C\u002Fa>\u003C\u002Fli>\n         \u003C\u002Ful>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#cron-集成\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Cron 集成\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n      \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#54-sop-食谱\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">5.4 SOP 食谱\u003C\u002Fa>\n       \u003Cul>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#人在回路部署\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">人在回路部署\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#iot-告警处理器mqtt\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">IoT 告警处理器（MQTT）\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#每日摘要cron\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">每日摘要（Cron）\u003C\u002Fa>\u003C\u002Fli>\n       \u003C\u002Ful>\u003C\u002Fli>\n     \u003C\u002Ful>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002F22764301#0xff-参考\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">0xFF 参考\u003C\u002Fa>\u003C\u002Fli>\n   \u003C\u002Ful>\u003C\u002Fli>\n \u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Ch2>0x00 概要\u003C\u002Fh2>\n\u003Cp>本文是 ZeroClaw 的学习笔记。\u003C\u002Fp>\n\u003Cp>ZeroClaw 是一个零开销、零妥协、100% Rust实现的AI助手框架，具有以下核心特点：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>数字-物理桥梁：AI不仅处理数字信息，还能控制物理世界\u003C\u002Fli>\n \u003Cli>环境感知：通过传感器获取真实环境数据\u003C\u002Fli>\n \u003Cli>主动交互：能够主动改变物理环境状态\u003C\u002Fli>\n \u003Cli>极致性能：优化编译配置（opt-level=\"z\"，lto=\"fat\"）生成最小二进制文件\u003C\u002Fli>\n \u003Cli>多平台支持：支持CLI、WebGateway、桌面应用、硬件集成\u003C\u002Fli>\n \u003Cli>模块化设计：高度可扩展的插件式架构\u003C\u002Fli>\n \u003Cli>安全优先：内置多层安全机制和紧急停止功能\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>ZeroClaw 的总体如下图所示。\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"2-总体\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260823212850242-1723558087.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Cp>关于代码生成和执行，总体情景如下：\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"4-代码生成和执行\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210322064-1231601991.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch2>0x01 代码合成\u003C\u002Fh2>\n\u003Cp>代码合成（Code Synthesis）指AI系统根据自然语言描述或高级规范自动生成可执行的Rust代码，它使得AI助手不仅能够理解和回答问题，还能够主动创建和执行解决方案。\u003C\u002Fp>\n\u003Ch3>1.1 核心思想\u003C\u002Fh3>\n\u003Cp>核心设计思想：ZeroClaw 自己不写代码，而是做“编排层”，把复杂编码任务委派给专业 coding agent。即，ZeroClaw做高层编排 → 编码细节交给ClaudeCode自己的Read\u002FEdit\u002FBash循环。\u003C\u002Fp>\n\u003Cp>代码合成是Two-Tier Delegation 架构。\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"4-核心思想\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210333518-547097857.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Cp>具体的 Tool 如下。\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>Tool\u003C\u002Fth>\n   \u003Cth>后端\u003C\u002Fth>\n   \u003Cth>特点\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>claude_code\u003C\u002Ftd>\n   \u003Ctd>Claude Code CLI (claude -p)\u003C\u002Ftd>\n   \u003Ctd>最丰富：allowed_tools、session 复用、json_schema 结构化输出\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>claude_code_runner\u003C\u002Ftd>\n   \u003Ctd>tmux + HTTP hooks\u003C\u002Ftd>\n   \u003Ctd>异步长任务：立即返回 session ID，通过 webhook 推送进度到 Slack\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>codex_cli\u003C\u002Ftd>\n   \u003Ctd>OpenAI Codex CLI （codex -q)\u003C\u002Ftd>\n   \u003Ctd>OpenAI 侧编码\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>gemini_cli\u003C\u002Ftd>\n   \u003Ctd>Gemini CLI （gemini -p)\u003C\u002Ftd>\n   \u003Ctd>Google 侧编码\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>opencode_cli\u003C\u002Ftd>\n   \u003Ctd>OpenCode CLI （opencode run)\u003C\u002Ftd>\n   \u003Ctd>开源替代\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>其关键特点如下：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>“不自己写代码“的哲学：ZeroClaw定位是编排层，代码合成委派给Claude\u002FCodex\u002FGemini，自己只负责安全、调度、路由\u003C\u002Fli>\n \u003Cli>多后端沙箱：不是象征性的沙箱，是5 种真实 OS-level isolation （Landlock\u002FFirejail\u002FBubblewrap\u002FSeatbelt\u002FDocker）\u003C\u002Fli>\n \u003Cli>风险分级 +审批：命令按 High\u002FMedium\u002FLow 分级，Supervised 模式下 Medium 以上需 approved=true\u003C\u002Fli>\n \u003Cli>环境零泄露：env_clear()+白名单，杜绝 API Key 通过子进程泄露\u003C\u002Fli>\n \u003Cli>异步长任务支持：claude_code_runner 通过 tmux +HTTP hook 做真正的“后台编码\"，支持 SSH 接入观察\u003C\u002Fli>\n \u003Cli>Pipeline 减少推理：多步操作合并为一次调用，降低 token 成本\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>1.2 业务逻辑\u003C\u002Fh3>\n\u003Ch4>具体应用场景\u003C\u002Fh4>\n\u003Cp>GPIO控制代码生成：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>用户说“让LED闪烁“\u003C\u002Fli>\n \u003Cli>AI生成相应的RustGPIO控制代码\u003C\u002Fli>\n \u003Cli>代码被编译并部署到目标设备\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>传感器读取代码：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>用户请求“读取温度传感器数据“\u003C\u002Fli>\n \u003Cli>生成I2C\u002FSPI通信的Rust代码\u003C\u002Fli>\n \u003Cli>执行并返回传感器读数\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>能力体现\u003C\u002Fh4>\n\u003Cp>代码合成能力主要体现在：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>Agent智能决策：根据用户需求动态生成合适的Rust代码\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>Tools工具系统：提供安全的代码生成和执行环境\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>硬件集成：自动生成设备控制和固件代码\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>安全保障：在严格的约束下确保代码生成的安全性\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>技术实现方式\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>LLM驱动：利用大型语言模型理解用户意图并生成相应代码\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>模板填充：基于预定义的代码模板进行参数化生成\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>约束优化：在安全策略和性能要求的约束下生成最优代码\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>动态执行能力：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>生成的Rust 代码可以通过WASM或动态执行机制运行\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>支持沙箱环境中的安全代码执行\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>提供执行结果反馈和错误处理\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>1.3 实现细节\u003C\u002Fh3>\n\u003Cp>代码生成流程：用户输入→意图识别→代码生成→安全验证→编译执行→结果返回\u003C\u002Fp>\n\u003Ch4>生成种类\u003C\u002Fh4>\n\u003Cp>ESP32固件生成：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>根据用户配置自动生成ESP32的Rust固件代码\u003C\u002Fli>\n \u003Cli>位于firmware\u002Fesp32\u002Fsrc\u002F目录下\u003C\u002Fli>\n \u003Cli>支持自动部署到ESP32设备\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Arduino固件生成：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>自动生成Arduino.ino格式的固件\u003C\u002Fli>\n \u003Cli>通过zeroclaw peripheral flash命令触发\u003C\u002Fli>\n \u003Cli>集成arduino-cli进行编译和上传\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Peripheral外设模块的硬件控制代码生成：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>根据连接的外设类型生成相应的控制代码\u003C\u002Fli>\n \u003Cli>自动适配不同的硬件平台（STM32、ESP32、树莓派等）\u003C\u002Fli>\n \u003Cli>生成优化的底层硬件操作代码\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Rust 代码\u003C\u002Fh4>\n\u003Cp>ZeroClaw选择Rust是基于其独特的技术优势组合：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>性能与安全的完美平衡：既提供C\u002FC++级别的性能，又保证内存安全\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>资源效率：极小的内存占用和二进制大小，适合边缘计算场景\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>并发安全：天生的并发安全特性，适合多任务AI助手架构\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>跨平台能力：统一代码库支持从桌面到嵌入式的全平台部署\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>生态系统成熟：丰富的库和工具链支持快速开发\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这种选择完美契合了ZeroClaw\"零开销、零妥协“的核心理念，使得项目能够在保持极致性能的同时，提供企业级的安全性和可靠性保障。\u003C\u002Fp>\n\u003Cp>另外，Rust 代码可以通过Termux运行在Android之上。\u003C\u002Fp>\n\u003Ch4>Arduino CLI的功能定位\u003C\u002Fh4>\n\u003Cp>主要功能\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>固件编译：将.ino文件编译为ESP32\u002FArduino可执行的二进制文件\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>设备烧录：将编译好的固件上传到Arduino\u002FESP32开发板\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>库管理：管理Arduino库依赖和版本\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>代码生成能力\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>间接代码生成：ArduinoCLI本身不直接生成代码，而是由ZeroClaw生成.ino代码后调用ArduinoCLI进行编译\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>模板填充：ZeroClaw基于预定义模板生成完整的Arduino项目结构\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>自动配置：根据用户需求自动生成合适的引脚配置和功能代码\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>自动生成流程\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>用户请求→ZeroClaw生成.ino代码→调用ArduinoCLI编译→烧录到设备\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>核心组件\u003C\u002Fp>\n  \u003Cul>\n   \u003Cli>Agent模块：负责整体决策和代码生成逻辑\u003C\u002Fli>\n   \u003Cli>Peripheral模块：管理外设配置和硬件抽象\u003C\u002Fli>\n   \u003Cli>Too1s模块：提供具体的代码生成和执行工具\u003C\u002Fli>\n   \u003Cli>Firmware目录：包含预定义的固件模板和示例\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cp>生成流程概述\u003C\u002Fp>\n  \u003Cul>\n   \u003Cli>用户意图识别：Agent分析用户自然语言请求\u003C\u002Fli>\n   \u003Cli>硬件需求解析：确定所需的传感器、执行器和引脚配置\u003C\u002Fli>\n   \u003Cli>模板选择：从预定义模板中选择合适的Arduino项目结构\u003C\u002Fli>\n   \u003Cli>代码合成：填充模板参数，生成完整的.ino文件\u003C\u002Fli>\n   \u003Cli>依赖分析：确定需要的Arduino库和配置\u003C\u002Fli>\n   \u003Cli>自动部署：调用ArduinoCLI进行编译和烧录\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>1.4 ClaudeCode Tool如何被大模型使用\u003C\u002Fh3>\n\u003Cp>我们以ClaudeCode Tool为例，看看ZeroClaw如何生成代码。\u003C\u002Fp>\n\u003Ch4>第一步：tool.spec()生成工具描述\u003C\u002Fh4>\n\u003Cp>每个工具实现Tooltrait的三个方法：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>fn name()-----&gt;\"claude_code\"\u003C\u002Fli>\n \u003Cli>fn description()----&gt;\"Delegate a coding task to Claude Code...\u003C\u002Fli>\n \u003Cli>fn parameters_schema(）-----&gt;{type:\"object\",properties:{prompt,allowed_tools,session_id...}}\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>tool.spec()把这三者打包成ToolSpec。\u003C\u002Fp>\n\u003Ch4>第二步：注册到Agent\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u002F\u002FAgentBuilder::build()\nlet tool_specs=tools.iter().map(|tool| tool.spec()).collect();\n\u002F\u002Ftool_specs：Vec&lt;ToolSpec&gt; -所有工具的描述列表\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>第三步：转换为LLM Function Calling格式\u003C\u002Fh4>\n\u003Cp>每次调用LLM时，provider.chat(ChatRequest{messages，tools:Some(&amp;tool_specs)}）把工具传给provider：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002Fopenai.rs:convert_tools() \nNativeToolSpec {\n    kind:\"function\",\n    function:NativeToolFunctionSpec{\n        name:\"claude_code\",\n        description:\"Delegate a coding task...\"\n        parameters:{\u002F*JsoN Schema *\u002F}\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>OpenAI\u002FAnthropic\u002FGemini等各provider各自负责把ToolSpec转换成自己平台的格式（OpenAI用tools字段，Anthropic用tools数组，Gemini用funciton_declarations)\u003C\u002Fp>\n\u003Ch4>第四步：LLM返回tool_call，ZeroClaw分发执行\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>LLM响应:{tool_calls:[{name:\"claude_code\"，arguments:{prompt:\"...\"}}]} \n↓\ndispatcher.dispatch(\"claude_code\",args) \n↓\nClaudeCodeTool::execute(args)\n└── 启动子进程: claude -p \"...\"\n    │\n    └── Claude Code CLI 的 agent loop:\n        ├── 生成代码 -&gt; Edit(\"src\u002Fmain.py\", ...)\n        ├── 执行代码 -&gt; Bash(\"python src\u002Fmain.py\")\n        │              ↑ 在同一台机器上执行\n        └── 返回结果给 zeroclaw\n↓\n结果返回给LLM继续对话 \n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>0x02 代码执行\u003C\u002Fh2>\n\u003Cp>ZeroClaw中的 WASM \u002F Dynamic Exec 机制是一个安全、灵活、高效的动态代码执行平台，它使得：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>AI生成的代码能够安全执行：通过WASM沙箱和严格的权限控制\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>硬件操作变得简单直观：用户无需编写底层硬件代码\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>系统保持高度可扩展性：支持多种编程语言和执行环境\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>性能和安全性得到平衡：既保证了执行效率，又确保了系统安全\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这种设计完美体现了ZeroClaw\"零开销、零妥协“的理念，让用户能够充分发挥创造力，同时享受企业级的安全保障。\u003C\u002Fp>\n\u003Ch3>2.1 核心概念\u003C\u002Fh3>\n\u003Cp>基本定义\u003C\u002Fp>\n\u003Cul>\n \u003Cli>WASM（WebAsSembly）：一种可移植、体积小、加载快的二进制格式，可在多种环境中安全执行\u003C\u002Fli>\n \u003Cli>DynamicExec（动态执行）：在运行时动态生成并执行代码的能力\u003C\u002Fli>\n \u003Cli>组合使用：ZeroClaw将两者结合，实现安全的动态代码执行环境\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>在架构图中的位置\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Code synthesis → Wasm \u002F dynamic exec → GPIO \u002F I2C \u002F SPI → persist \n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>流程解释：AI生成的代码→WASM沙箱执行→硬件操作→持久化存储\u003C\u002Fp>\n\u003Ch4>WASM执行机制\u003C\u002Fh4>\n\u003Cp>功能特性：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>安全的沙箱环境执行用户代码\u003C\u002Fli>\n \u003Cli>支持Rust、C、Go等语言编译的WASM模块\u003C\u002Fli>\n \u003Cli>提供主机函数调用接口（Host Functions）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Dynamic Exec动态执行\u003C\u002Fh4>\n\u003Cp>代码生成与执行流程\u003C\u002Fp>\n\u003Cul>\n \u003Cli>AI代码合成：Agent根据用户需求生成Rust代码\u003C\u002Fli>\n \u003Cli>编译阶段：将生成的代码编译为可执行格式\u003C\u002Fli>\n \u003Cli>执行阶段：在受限环境中运行生成的代码\u003C\u002Fli>\n \u003Cli>结果收集：捕获执行结果和可能的错误\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>执行环境类型\u003C\u002Fp>\n\u003Cul>\n \u003Cli>沙箱进程：通过子进程隔离执行，限制系统权限\u003C\u002Fli>\n \u003Cli>WASM沙箱：对于支持WASM的语言，在WASM运行时中执行\u003C\u002Fli>\n \u003Cli>解释器模式：对于脚本语言，使用相应的解释器执行\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>8 层纵深执行架构\u003C\u002Fh4>\n\u003Cp>\u003Cimg alt=\"4-8 层纵深执行架构\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210505988-1626708427.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch3>2.2 关键组件\u003C\u002Fh3>\n\u003Ch4>ShellTool\u003C\u002Fh4>\n\u003Cp>ZeroClaw主要是使用ShellTool-带沙箱的 shell 命令执行：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>超时保护：默认 60s超时自动 kill\u003C\u002Fli>\n \u003Cli>输出截断：stdout\u002Fstderr 各限 1MB，防止 OOM\u003C\u002Fli>\n \u003Cli>环境净化：env_clear()后仅传入安全白名单变量（PATH\u002FHOME\u002FTERM 等），绝不泄露 API Key\u003C\u002Fli>\n \u003Cli>命令风险分级：Low\u002F Medium \u002F High，配合 AutonomyLevel（Supervised \u002F Full）做审批门控\u003C\u002Fli>\n \u003Cli>工作区边界：所有路径经 canonicalize()防止 symlink 逃逸\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>5种沙箱后端（Sandbox trait）：\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>后端\u003C\u002Fth>\n   \u003Cth>平台\u003C\u002Fth>\n   \u003Cth>隔离强度\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>Landlock\u003C\u002Ftd>\n   \u003Ctd>Linux 5.13+\u003C\u002Ftd>\n   \u003Ctd>内核级文件系统限制\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Firejail\u003C\u002Ftd>\n   \u003Ctd>Linux\u003C\u002Ftd>\n   \u003Ctd>用户态沙箱\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Bubblewrap\u003C\u002Ftd>\n   \u003Ctd>Linux\u003C\u002Ftd>\n   \u003Ctd>轻量级 namespace\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Seatbelt\u003C\u002Ftd>\n   \u003Ctd>macos\u003C\u002Ftd>\n   \u003Ctd>Apple sandbox-exec\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Docker\u003C\u002Ftd>\n   \u003Ctd>全平台\u003C\u002Ftd>\n   \u003Ctd>容器隔离\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>启动时自动探测最强可用后端（detect.rs），对每个 shell 命令执行前调用 sandbox.wrap_command()。\u003C\u002Fp>\n\u003Ch4>SOP工作流引擎\u003C\u002Fh4>\n\u003Cp>SOP（Standard Operating Procedure）是一个多步骤自动化工作流引I擎，从 TOML\u002FMarkdown\u003Cbr>\n  文件定义，支持多种触发源和执行模式。\u003C\u002Fp>\n\u003Cp>触发器（5种事件源）\u003C\u002Fp>\n\u003Cpre>\u003Ccode>MQTT topic →      ──┐                                        \nWebhook path →    ──┼                                        \nCron表达式 →       ──┼──► SopEngine.match_trigger() → start_run()   \nPeripheral 信号 →  ──┼                                        \nManual手动 →      ───┘ \n\n条件匹配支持 JsoN Path：S.sensor.temperature &gt; 85\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Skill 动态加载系统\u003C\u002Fh4>\n三层来源\n\u003Cul>\n \u003Cli>用户本地：~\u002F.zeroclaw\u002Fworkspace\u002Fskills\u002F\n   \u002FSKILL.toml 或 SKILL.md\n  \u003C\u002Fli>\n \u003Cli>Open Skills 社区仓库：自动从 besoeasy\u002Fopen-skills GitHub 仓库同步（7天一次）\u003C\u002Fli>\n \u003Cli>ClawHub 注册中心：clawhub.ai 在线下载安装（50MB 上限 ZIP）\u003C\u002Fli>\n\u003C\u002Ful>\nSkill→Tool 转换\n\u003Cpre>\u003Ccode>Skill 定义 （SKILL.toml）\n    - [[tools]] kind=\"shell\"   →   SkillShellTool(命令模板+参数替换{{arg}})\n    - [[tools]] kind=\"http\"    →   HTTP 请求 tool\n    - prompts: [...]           →   注入 system prompt\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>工具名自动加前缀：skill_name.tool_name 防碰撞。\u003C\u002Fp>\n自动创建（SkillCreator）\n\u003Cp>Agent学习自动化：当 Agent 成功执行多步 tool 链时，自动提取为可复用 Skill：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>≥2步才触发\u003C\u002Fli>\n \u003Cli>用embedding 去重（cosine similarity 检测已有相似 skill）\u003C\u002Fli>\n \u003Cli>LRU淘汰（超过上限自动删最旧）\u003C\u002Fli>\n \u003Cli>生成 SKILL.toml 持久化\u003C\u002Fli>\n\u003C\u002Ful>\n自我改进（SkillImprover）\n\u003Cp>Agent 成功使用一个 Skill 后可以改进它：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>Cooldown防止频繁改\u003C\u002Fli>\n \u003Cli>原子写入（写temp →validate→rename）\u003C\u002Fli>\n \u003Cli>审计元数据（improvementreason +timestamp）追加到文件\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>2.3 代码执行架构对比\u003C\u002Fh3>\n\u003Cp>代码执行架构对比：ZeroClaw vs Devin vs SWE-agent vs OpenHands\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>\u003C\u002Fth>\n   \u003Cth>ZeroClaw\u003C\u002Fth>\n   \u003Cth>Devin\u003C\u002Fth>\n   \u003Cth>SWE-agent\u003C\u002Fth>\n   \u003Cth>OpenHands\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>隔离粒度\u003C\u002Ftd>\n   \u003Ctd>每次命令\u003C\u002Ftd>\n   \u003Ctd>每个 session\u003C\u002Ftd>\n   \u003Ctd>每个 task\u003C\u002Ftd>\n   \u003Ctd>每个 session\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>隔离技术\u003C\u002Ftd>\n   \u003Ctd>5种沙箱可选\u003C\u002Ftd>\n   \u003Ctd>云端完整VM\u003C\u002Ftd>\n   \u003Ctd>Docker容器\u003C\u002Ftd>\n   \u003Ctd>Docker容器\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>持久性\u003C\u002Ftd>\n   \u003Ctd>无状态（命令级）\u003C\u002Ftd>\n   \u003Ctd>有状态（完整Linux桌面）\u003C\u002Ftd>\n   \u003Ctd>有状态（容器内git repo）\u003C\u002Ftd>\n   \u003Ctd>有状态（容器挂载workspace）\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>文件系统\u003C\u002Ftd>\n   \u003Ctd>workspace目录+路径白名单\u003C\u002Ftd>\n   \u003Ctd>完整VM文件系统\u003C\u002Ftd>\n   \u003Ctd>容器内完整FS\u003C\u002Ftd>\n   \u003Ctd>容器内完整FS\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>网络\u003C\u002Ftd>\n   \u003Ctd>无限制（依赖OS层）\u003C\u002Ftd>\n   \u003Ctd>全功能网络\u003C\u002Ftd>\n   \u003Ctd>容器网络\u003C\u002Ftd>\n   \u003Ctd>容器网络\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>谁写代码\u003C\u002Ftd>\n   \u003Ctd>委派给外部coding agent\u003C\u002Ftd>\n   \u003Ctd>自己的Agent直接写\u003C\u002Ftd>\n   \u003Ctd>自己的Agent直接写\u003C\u002Ftd>\n   \u003Ctd>CodeAct Agent直接写\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>编辑方式\u003C\u002Ftd>\n   \u003Ctd>file_write\u002Ffile_edit（字符串替换）\u003C\u002Ftd>\n   \u003Ctd>IDE内直接操作\u003C\u002Ftd>\n   \u003Ctd>自研ACI命令（scroll_up, edit等）\u003C\u002Ftd>\n   \u003Ctd>Python code execution\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>代码理解\u003C\u002Ftd>\n   \u003Ctd>无 AST\u002FLSP（纯文本）\u003C\u002Ftd>\n   \u003Ctd>完整IDE（有LSP）\u003C\u002Ftd>\n   \u003Ctd>自研ACI（专门为LLM设计的文件接口）\u003C\u002Ftd>\n   \u003Ctd>IPython kernel执行\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>关键区别\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>Devin: 把 LLM 当“开发者”，给它完整 IDE + 浏览器 + terminal。\u003C\u002Fli>\n \u003Cli>SWE-agent: 发现 LLM 用标准命令（vim\u002Fnano）效率极低，专门设计了“Agent-Computer Interface”——一套为 LLM 优化的命令（open file.py 50-100、edit 50:55 ....、scroll_down）。\u003C\u002Fli>\n \u003Cli>OpenHands: 用 CodeAct—LLM 生成 Python 代码，在 IPython kernel 里执行，代码本身就是“工具调用”。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cul>\n \u003Cli>ZeroClaw特点：不用完整容器\u002FVM，而是命令级沙箱一每条shell 命令单独包裹（Landlock\u002FFirejail\u002FSeatbelt），轻量但隔离粒度细。适合端侧（手机\u002F嵌入式）场景，不适合需要跨命令有状态的复杂编程任务。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>架构哲学对比总结\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n \u003Cli>Devin: “给LLM一台完整电脑“ → 重（完整VM）、强（全能力）\u003C\u002Fli>\n \u003Cli>SWE-agent: “给LLM专门设计的命令接口“ → 中（Docker）、精（为benchmark优化）\u003C\u002Fli>\n \u003Cli>OpenHands: \"让LLM写Python 当工具调用\" → 中（Docker）、灵活（代码即动作）\u003C\u002Fli>\n \u003Cli>ZeroClaw: “Agent只编排，不亲自写代码“ → 轻（命令级沙箱）、安全优先、端侧适用\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Zeroclaw 独特优势\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n \u003Cli>端侧可部署：不依赖 Docker\u002FVM，Landlock\u002FSeatbelt 可以在手机\u002F嵌入式上跑\u003C\u002Fli>\n \u003Cli>安全纵深最强：5层沙箱+环境净化+风险分级 +审批门\u003C\u002Fli>\n \u003Cli>Deterministic SOP:已知工作流完全不过 LLM，O token 成本\u003C\u002Fli>\n \u003Cli>自主学习闭环：执行 →提取 Ski11→下次复用 →自动改进\u003C\u002Fli>\n \u003Cli>.多 Coding Agent 路由：不锁定单一 LLM，可按任务选 Claude\u002FCodex\u002FGemini\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>ZeroClaw劣势\u002F短板\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n \u003Cli>无有状态环境：不像 Devin\u002FOpenHands 有持久 workspace 容器，跨命令状态要靠文件系统\u003C\u002Fli>\n \u003Cli>代码理解能力弱：无 AST\u002FLSP\u002F代码搜索，纯文本 file_read\u002Ffile_edit\u003C\u002Fli>\n \u003Cli>不适合SWE-bench 类任务：设计目标不是“自主修bug\"，而是“编排+安全+端侧“\u003C\u002Fli>\n \u003Cli>mini-SWE-agent 的警示：100 行 Python 就能达到 65% SWE-bench verified，说明“精巧接口 &gt; 复杂架构\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>2.4 具体应用场景\u003C\u002Fh3>\n\u003Cp>动态硬件控制\u003C\u002Fp>\n\u003Cul>\n \u003Cli>场景描述：用户说“创建一个温度超过30度就打开风扇的程序“\u003C\u002Fli>\n \u003Cli>执行流程： \n  \u003Cul>\n   \u003Cli>AI生成包含温度读取和风扇控制的Rust代码\u003C\u002Fli>\n   \u003Cli>代码被编译为WASM模块\u003C\u002Fli>\n   \u003Cli>WASM模块定期读取温度传感器\u003C\u002Fli>\n   \u003Cli>当温度&gt;30时，调用GPI0控制风扇\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>自定义数据处理\u003C\u002Fp>\n\u003Cul>\n \u003Cli>场景描述：用户需要对传感器数据进行特殊算法处理\u003C\u002Fli>\n \u003Cli>执行流程： \n  \u003Cul>\n   \u003Cli>用户提供算法描述或伪代码\u003C\u002Fli>\n   \u003Cli>AI生成相应的数据处理函数\u003C\u002Fli>\n   \u003Cli>函数在WASM沙箱中执行，处理实时传感器数据\u003C\u002Fli>\n   \u003Cli>返回处理结果给主程序\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>2.5 执行流程\u003C\u002Fh3>\n\u003Ch4>Claude Code产生的代码如何被执行\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>用户消息\n ↓\nZeroClaw agent loop (src\u002Fagent\u002Floop_.rs) \n ↓\nLLM决策→调用claude_code工具 \n ↓\nClaudeCodeTool::execute()\n └── 启动子进程: claude -p \"...\"\n ↓\ntokio::process::Command::new(\"claude\")\n    .arg(\"-p\").arg(prompt)\u002F\u002F你的任务\n    .arg(\"--output-format\").arg(\"json\")\n    .arg(\"--allowedTools\"）.arg（\"Bash\"）\u002F\u002F可选：允许执行shell\n    .current_dir(workspace_dir) \u002F\u002F工作目录锁定在workspace内\n    .env_clear() \u002F\u002F清除所有环境变量\n    .env(\"HOME\"，...)\u002F\u002F只透传白名单变量\n ↓\n等待claude进程返回JSON\n ↓\n解析{result，session_id} 返回给 ZeroClaw\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>shell 工具\u003C\u002Fh4>\n\u003Cp>ZeroClaw 自己的代码执行 (通过 shell 工具) 也运行在同一台机器上, 流程如下:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>ZeroClaw agent\n    ↓ LLM 决定调用 shell 工具\nShellTool::execute({ command: \"python gen_code.py\" })\n    ↓\nruntime.build_shell_command(command, workspace_dir)\n    ↓\nsandbox.wrap_command(&amp;mut cmd)   &lt;- 沙箱包装 (Landlock\u002FBubblewrap 等)\n    ↓\ncmd.env_clear() + 只透传白名单环境变量\n    ↓\ncmd.output().await               &lt;- 子进程在本机 workspace_dir 里执行\n    ↓\nstdout\u002Fstderr 返回给 LLM\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>0x03 消息机制\u003C\u002Fh2>\n\u003Cp>ZeroClaw 不是 “附加” IoT 功能，而是\u003Cstrong>从底层设计为边缘 IoT+AI Agent 的运行时\u003C\u002Fstrong>，硬件控制、IoT 协议、低功耗部署都是原生核心能力，适合快速搭建带自然语言交互的智能物联网系统。\u003C\u002Fp>\n\u003Cp>事件驱动与主动行为：外设可把异步事件（传感器触发、GPIO 中断）通过transport推送到 ZeroClaw；ZeroClaw将事件变成会话\u002F事件（或触发SOP\u002Fcron\u002FHands），代理可以主动发出消息或运行工具。\u003C\u002Fp>\n\u003Cp>定时\u002F自动化由cron、SOP（事件驱动工作流）和Hands编排实现，能在条件满足时主动执行动作或发送&gt; 通知（见README的Gateway\u002Fcron\u002FSOPs说明）。\u003C\u002Fp>\n\u003Ch3>3.1 消息协议\u003C\u002Fh3>\n\u003Cp>典型消息格式（文档示例）：主机外设间的串口JSON请求\u002F响应，例如：\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Serial Fallback (Host-Mediated, legacy)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Simple JSON over serial for boards without gRPC support:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Request (host → peripheral):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\"id\":\"1\",\"cmd\":\"gpio_write\",\"args\":{\"pin\":13,\"value\":1}}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Response (peripheral → host):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\"id\":\"1\",\"ok\":true,\"result\":\"done\"}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>3.2 Daemon\u003C\u002Fh3>\n\u003Cp>zeroclaw daemon启动一个长期运行的异步进程，同时管理多个组件：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>zeroclaw daemon\n    ├─gateway服务器（axumHTTP+WebSocket） \n    ├─channels监听循环（TG\u002FDiscord等） \n    ├─cron调度器\n    ├─heartbeat心跳\n    └─状态写入器（每5秒写磁盘状态）\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>流程图\u003C\u002Fh4>\n\u003Cp>以下流程图涵盖了以下核心逻辑：\u003C\u002Fp>\n\u003Col>\n \u003Cli>\u003Cstrong>组件并行启动\u003C\u002Fstrong>： \n  \u003Cul>\n   \u003Cli>Daemon 启动后会立即并行生成四个核心部分：\u003Cstrong>状态写入器\u003C\u002Fstrong>（每5秒刷新）、\u003Cstrong>网关\u003C\u002Fstrong>、\u003Cstrong>渠道\u003C\u002Fstrong>、\u003Cstrong>心跳\u003C\u002Fstrong>和\u003Cstrong>调度器\u003C\u002Fstrong>。\u003C\u002Fli>\n   \u003Cli>\u003Cstrong>条件检查\u003C\u002Fstrong>：渠道、心跳和调度器会根据配置文件（\u003Ccode>config.toml\u003C\u002Fcode>）中的设置决定是否启动对应的 Worker。例如，如果未配置 Cron，则直接标记为 OK 并跳过。\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cstrong>监督与循环\u003C\u002Fstrong>： \n  \u003Cul>\n   \u003Cli>每个核心组件（Gateway, Channels, Heartbeat, Scheduler）都拥有独立的 \u003Cstrong>Supervisor（监督者）\u003C\u002Fstrong> 和 \u003Cstrong>Loop（循环）\u003C\u002Fstrong>。\u003C\u002Fli>\n   \u003Cli>4 大核心循环（Gateway\u002FChannel\u002FHeartbeat\u002FScheduler）均实现\u003Cstrong>运行→退出判断→异常处理→退避重试→重新循环\u003C\u002Fstrong>的闭环，分支（正常退出 \u002F 异常退出）完全对齐；\u003C\u002Fli>\n   \u003Cli>\u003Cstrong>异常处理\u003C\u002Fstrong>：如果组件意外退出或报错，系统会记录错误并进行退避等待（Backoff），随后尝试重新进入循环，确保服务的稳定性。\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cstrong>核心功能\u003C\u002Fstrong>： \n  \u003Cul>\n   \u003Cli>\u003Cstrong>Gateway\u003C\u002Fstrong>：负责 HTTP\u002FWebSocket 服务，处理外部连接。\u003C\u002Fli>\n   \u003Cli>\u003Cstrong>Channels\u003C\u002Fstrong>：连接 TG、Discord 等聊天平台。\u003C\u002Fli>\n   \u003Cli>\u003Cstrong>Heartbeat\u003C\u002Fstrong>：定期执行后台感知任务，赋予 AI “自主意识”。\u003C\u002Fli>\n   \u003Cli>\u003Cstrong>Scheduler\u003C\u002Fstrong>：基于 Cron 表达式触发定时任务。\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cstrong>优雅退出\u003C\u002Fstrong>： \n  \u003Cul>\n   \u003Cli>当接收到 \u003Ccode>Ctrl+C\u003C\u002Fcode> 信号时，Daemon 会中止所有任务并等待线程结束，确保数据完整保存后停止。即，所有组件初始化完成→进入运行状态，接收 Ctrl+C 后→终止所有任务→等待任务结束→守护进程正常停止，链路完整；\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cimg alt=\"How the daemon keeps components alive\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202604\u002F1850883-20260411160014551-617529390.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Cp>✅ \u003Cstrong>配色样式\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>🔴 \u003Cstrong>supervisor\u003C\u002Fstrong>：组件孵化相关节点（State Writer\u002FGateway Supervisor 等）；\u003C\u002Fli>\n \u003Cli>🟢 \u003Cstrong>running\u003C\u002Fstrong>：唯一运行状态节点；\u003C\u002Fli>\n \u003Cli>🔵 component：各循环的核心运行方法节点；\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>完整架构\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>zeroclaw daemon::run()\n│\n├── tokio::broadcast::channel&lt;JsonValue&gt;(256)   ←  实时事件总线\n│   所有组件通过它向 dashboard 推送状态\n│\n├── spawn_state_writer()\n│   每 5 秒写 daemon_state.json (健康快照)\n│\n├── spawn_component_supervisor(\"gateway\")\n│   →  gateway::run_gateway(host, port, config, event_tx)\n│   axum HTTP + WebSocket 服务器\n│   崩溃自动重启 (指数退避: initial_backoff →  max_backoff)\n│\n├── spawn_component_supervisor(\"channels\")   ←  仅当有 channel 配置时\n│   →  channels::start_channels(config)\n│   同时监听所有配置的 channel (TG\u002FDiscord\u002FSlack...)\n│\n├── spawn_component_supervisor(\"mqtt\")         ← 仅当启用时\n│   →  run_mqtt_sop_listener()\n│   IoT\u002FSOP 事件 fan-in\n│\n├── spawn_component_supervisor(\"heartbeat\")   ←  仅当启用时\n│   两阶段模式: Phase 1 用 LLM 决策要执行哪些任务\n│             Phase 2 执行选定任务\n│   Dead-man's switch: 超时未 tick 自动发告警\n│\n└── spawn_component_supervisor(\"scheduler\")  ←  仅当 cron.enabled 时\n    → cron::scheduler::run(config, event_tx)\n    定时任务执行\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>0x04 IOT\u003C\u002Fh2>\n\u003Cp>ZeroClaw\u003Cstrong>有完整、原生的 IoT \u002F 边缘硬件控制功能\u003C\u002Fstrong>，专为低功耗嵌入式与物联网设备设计，是其核心定位之一。\u003C\u002Fp>\n\u003Ch3>4.1 三层协同的完整 IoT 场景\u003C\u002Fh3>\n\u003Cp>\u003Cimg alt=\"4-三层协同的完整 IoT 场景\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210431563-124862472.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Cp>关键特点：\u003C\u002Fp>\n\u003Col>\n \u003Cli>MQTT 不经 LLM: IoT 事件 → SOP 条件匹配 → Deterministic 执行, 全程 0 token\u003C\u002Fli>\n \u003Cli>Peripheral 即 Tool: 硬件能力作为 LLM 可调用函数暴露\u003C\u002Fli>\n \u003Cli>条件引擎: JSON Path 表达式 + 数值比较, fail-closed (条件不满足就不触发)\u003C\u002Fli>\n \u003Cli>QoS 支持: MQTT QoS 0\u002F1\u002F2, TLS (mqtts:\u002F\u002F), auto-reconnect\u003C\u002Fli>\n \u003Cli>Cooldown + 并发控制: 防止传感器抖动导致 SOP 疯狂重复执行\u003C\u002Fli>\n \u003Cli>端侧部署: 整个 runtime 是 Rust 单二进制, 可跑在 RPi \u002F 嵌入式 Linux\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>4.2 核心 IoT 硬件能力（原生支持）\u003C\u002Fh3>\n\u003Col>\n \u003Cli>\u003Cp>硬件外设控制接口\u003C\u002Fp>\n  \u003Cul>\n   \u003Cli>支持\u003Cstrong>GPIO、I2C、SPI、UART \u002F 串口\u003C\u002Fstrong>等标准嵌入式总线，直接驱动传感器、继电器、LED、电机等。\u003C\u002Fli>\n   \u003Cli>兼容主流 IoT 硬件：\u003Cstrong>Raspberry Pi (Zero\u002F3\u002F4\u002F5)、ESP32、STM32 Nucleo、Arduino\u003C\u002Fstrong>等。\u003C\u002Fli>\n   \u003Cli>提供统一\u003Ccode>Peripheral\u003C\u002Fcode> trait 抽象，可插拔适配不同 MCU \u002F 开发板，无需改核心代码。\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cp>IoT 通信协议\u003C\u002Fp>\n  \u003Cul>\n   \u003Cli>内置\u003Cstrong>MQTT\u003C\u002Fstrong>客户端 \u002F 服务端，支持订阅 \u002F 发布，对接 IoT 平台 \u002F 网关。\u003C\u002Fli>\n   \u003Cli>支持\u003Cstrong>WebSocket、Webhook\u003C\u002Fstrong>，用于云端 \u002F 边缘双向事件推送。\u003C\u002Fli>\n   \u003Cli>支持\u003Cstrong>gRPC\u002FnanoRPC\u003C\u002Fstrong>，实现设备间 \u002F 设备 - 主机的低延迟远程控制。\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n \u003Cli>\u003Cp>边缘部署特性（IoT 核心）\u003C\u002Fp>\n  \u003Cul>\n   \u003Cli>\u003Cp>超轻量：单二进制 &lt; 3.4MB、内存 &lt; 5MB，冷启动 &lt; 10ms，适配电池 \u002F 低功耗场景openzeroclaw.com。\u003C\u002Fp>\u003C\u002Fli>\n   \u003Cli>\u003Cp>跨架构：ARM、x86、RISC-V，支持 Linux \u002F 嵌入式 Linux，可直接跑在 Pi Zero、ESP32 等边缘节点openzeroclaw.com。\u003C\u002Fp>\u003C\u002Fli>\n   \u003Cli>\u003Cp>两种运行模式：\u003C\u002Fp>\n    \u003Cul>\n     \u003Cli>\u003Cstrong>Edge-Native（本地独立）\u003C\u002Fstrong>：ZeroClaw 直接运行在 ESP32 \u002F 树莓派，本地解析自然语言、控制硬件、执行自动化。\u003C\u002Fli>\n     \u003Cli>\u003Cstrong>Host-Target（主机 - 从机）\u003C\u002Fstrong>：ZeroClaw 在 PC \u002F 服务器，通过 USB\u002FJ-Link 远程控制 STM32\u002FArduino 等 MCU。\u003C\u002Fli>\n    \u003C\u002Ful>\u003C\u002Fli>\n  \u003C\u002Ful>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>4.3 IoT 场景的 AI Agent 能力（核心价值）\u003C\u002Fh3>\n\u003Cul>\n \u003Cli>自然语言转硬件指令：语音 \u002F 聊天（TG \u002F 钉钉 \u002F 飞书）直接控制设备（如 “打开客厅灯”“读取温湿度”），LLM 自动生成 Rust 硬件代码并执行。\u003C\u002Fli>\n \u003Cli>事件驱动自动化：结合\u003Cstrong>Cron 定时、MQTT 传感器触发、GPIO 电平变化\u003C\u002Fstrong>，执行预设 SOP（如温度超阈值自动开风扇、定时上报数据）。\u003C\u002Fli>\n \u003Cli>边缘智能：本地运行轻量模型 \u002F 调用云端 LLM，做异常检测、预测、决策，减少云端依赖、降低延迟、保护隐私。\u003C\u002Fli>\n \u003Cli>远程运维：通过隧道（Cloudflare\u002FTailscale\u002Fngrok）+ 多通道，外网安全访问内网 IoT 设备，远程调试 \u002F 控制openzeroclaw.com。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4.4 典型 IoT 应用示例\u003C\u002Fh3>\n\u003Cul>\n \u003Cli>智能家居：树莓派 + ZeroClaw，语音 \u002F APP 控制灯光、插座、温湿度监控，MQTT 接入 HomeAssistant。\u003C\u002Fli>\n \u003Cli>工业边缘：部署在网关，采集传感器数据、本地分析、异常告警、控制执行器。\u003C\u002Fli>\n \u003Cli>便携 \u002F 电池设备：ESP32 运行 ZeroClaw，低功耗、离线可用，做环境监测 \u002F 智能开关。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4.5 IoT 适配机制\u003C\u002Fh3>\n\u003Cp>ZeroClaw为 IoT做了三层适配：\u003C\u002Fp>\n\u003Ch4>第一层：MQTT Channel（消息入口）\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>IoT 设备 → MQTT Broker&gt; ZeroClaw MQTT Listener→ SOP Engine\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>关键设计决策：MQTT不走Channel trait（不进入聊天循环），而是直连SOP引擎：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F mgtt.rs第1-4行的注释：\n\u002F\u002F ! This is NOT a Channel` trait implementor - it routes MQTT messages\n\u002F\u002F ! to the SoP engine via dispatch_sop_event, not to the chat loop.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>为什么？因为 IoT事件是机器信号（温度 85°C、门开了），不是“对话“。不应进入LLM推理循环浪费token，而是直接匹配SOP触发条件执行预定义流程。\u003C\u002Fp>\n\u003Cp>流程：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cp>订阅 sensors\u002F# 等 MQTT topic\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>收到 publish → 构建 SopEvent\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>→dispatch_sop_event()匹配触发器\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>→匹配到的SOP用start_run()启动\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>→Deterministic模式直接执行（0 LLM调用）\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>条件评估：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002Fcondition.rs：支持JSoN Path 条件\nevaluate_condition(\"$.temperature &gt;85\",Some(r#\"{\"temperature\":90}\"#))\n\u002F\u002F→true→触发SOP\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>第二层: Peripheral Trait (硬件外设)\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>Agent ↔ Peripheral ↔ 物理硬件\n\n        ↓           ↓\n\n   STM32 Nucleo   RPi GPIO\n   (Serial\u002FUART)  (sysfs\u002Fgpiod)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Peripheral = Agent 的\"手和脚\":\u003C\u002Fp>\n\u003Cpre>\u003Ccode>pub trait Peripheral: Send + Sync {\n    fn name(&amp;self) -&gt; &amp;str;         \u002F\u002F \"nucleo-f401re-0\"\n    fn board_type(&amp;self) -&gt; &amp;str;   \u002F\u002F \"nucleo-f401re\"\n    async fn connect(&amp;mut self) -&gt; Result&lt;()&gt;;\n    async fn disconnect(&amp;mut self) -&gt; Result&lt;()&gt;;\n    async fn health_check(&amp;mut self) -&gt; bool;\n    fn tools(&amp;self) -&gt; Vec&lt;Box&lt;dyn Tool&gt;&gt;; \u002F\u002F gpio_read, gpio_write, sensor_read\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>连接后，Peripheral 的 tools 直接注入 Agent 工具注册表—LLM 可以调用 gpio_write（pin=13，value=HIGH）控制硬件。\u003C\u002Fp>\n\u003Cp>已实现：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>nucleo_flash-STM32 Nucleo 板固件烧录\u003C\u002Fli>\n \u003Cli>arduino_flash \u002F arduino_upload -Arduino 上传\u003C\u002Fli>\n \u003Cli>rpi -Raspberry Pi GPIo （仅 Linux + peripheral-rpi feature）\u003C\u002Fli>\n \u003Cli>serial-通用串口通信\u003C\u002Fli>\n \u003Cli>uno_a_bridge -Arduino Uno 通信桥接\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>第三层: SOP + Peripheral 联动\u003C\u002Fh4>\n\u003Cp>SOP 触发器支持 Peripheral 类型:\u003C\u002Fp>\n\u003Cpre>\u003Ccode># SOP.toml\n[[triggers]]\ntype = \"peripheral\"\nboard = \"nucleo-f401re-0\"\nsignal = \"button_pressed\"\ncondition = \"&gt; 0\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>这意味着：硬件按钮按下→触发SOP→Deterministic 执行（0 LLM）→输出到另一个Peripheral\u002FMQTT\u003C\u002Fp>\n\u003Ch3>4.6 总结\u003C\u002Fh3>\n\u003Cp>ZeroClaw 不是 “附加” IoT 功能，而是\u003Cstrong>从底层设计为边缘 IoT+AI Agent 的运行时\u003C\u002Fstrong>，硬件控制、IoT 协议、低功耗部署都是原生核心能力，适合快速搭建带自然语言交互的智能物联网系统。\u003C\u002Fp>\n\u003Ch2>0x05 SOP 标准操作流程\u003C\u002Fh2>\n\u003Cp>SOP 是由 \u003Ccode>SopEngine\u003C\u002Fcode> 执行的确定性流程。它们提供显式的触发器匹配、审批门控和可审计的运行状态。实际上，SOP 可以被认为是短路机制：高频、标准化场景（如\"打开空调\"）直接走 SOP 规程，跳过 LLM 推理，响应时间 &lt; 100ms。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>输入 → 安全预检 → Context 收集 → SOP 匹配\n├─ 匹配到 SOP → 执行预定义流程（不经过 LLM）\n└─ 未匹配 → 模型路由 → LLM 推理 → Tool 调用 → 安全后检 → 响应输出\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>具体如下：\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"4-SOP\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210414308-2048798434.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch3>5.1 核心设计哲学\u003C\u002Fh3>\n\u003Cp>\u003Cimg alt=\"4-核心设计哲学\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210405706-1215650413.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Cp>其执行模式如下：\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"4-执行模式\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210356318-312365332.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch3>5.2 流程\u003C\u002Fh3>\n\u003Ch4>快速路径\u003C\u002Fh4>\n\u003Cul>\n \u003Cli>\u003Cstrong>连接事件：\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002Fconnectivity.zh-CN.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">连接与扇入\u003C\u002Fa> — 通过 MQTT、webhook、cron 或外围设备触发 SOP。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>编写 SOP：\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002Fsyntax.zh-CN.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">语法参考\u003C\u002Fa> — 所需的文件布局和触发器\u002F步骤语法。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>监控：\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002Fobservability.zh-CN.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">可观测性与审计\u003C\u002Fa> — 运行状态和审计条目的存储位置。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>示例：\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002Fcookbook.zh-CN.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">食谱\u003C\u002Fa> — 可复用的 SOP 模式。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>运行时契约（当前）\u003C\u002Fh4>\n\u003Cul>\n \u003Cli>SOP 定义从 \u003Ccode>&lt;workspace&gt;\u002Fsops\u002F&lt;sop_name&gt;\u002FSOP.toml\u003C\u002Fcode> 加载，外加可选的 \u003Ccode>SOP.md\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>CLI \u003Ccode>zeroclaw sop\u003C\u002Fcode> 当前仅管理定义：\u003Ccode>list\u003C\u002Fcode>、\u003Ccode>validate\u003C\u002Fcode>、\u003Ccode>show\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>SOP 运行由事件扇入（MQTT\u002Fwebhook\u002Fcron\u002F外围设备）或代理内工具 \u003Ccode>sop_execute\u003C\u002Fcode> 启动。\u003C\u002Fli>\n \u003Cli>运行进度使用工具：\u003Ccode>sop_status\u003C\u002Fcode>、\u003Ccode>sop_approve\u003C\u002Fcode>、\u003Ccode>sop_advance\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>SOP 审计记录持久化在配置的内存后端的 \u003Ccode>sop\u003C\u002Fcode> 类别下。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>事件流程\u003C\u002Fh4>\n\u003Cdiv>\n graph LR MQTT[MQTT] --&gt;|主题匹配| Dispatch WH[POST \u002Fsop\u002F* or \u002Fwebhook] --&gt;|路径匹配| Dispatch CRON[调度器] --&gt;|窗口检查| Dispatch GPIO[外围设备] --&gt;|板卡\u002F信号匹配| Dispatch Dispatch --&gt; Engine[SOP 引擎] Engine --&gt; Run[SOP 运行] Run --&gt; Action{动作} Action --&gt;|执行步骤| Agent[代理循环] Action --&gt;|等待审批| Human[操作员] Human --&gt;|sop_approve| Run\n\u003C\u002Fdiv>\n\u003Ch4>入门指南\u003C\u002Fh4>\n\u003Col>\n \u003Cli>\u003Cp>在 \u003Ccode>config.toml\u003C\u002Fcode> 中启用 SOP 子系统：\u003C\u002Fp>\u003Cpre>\u003Ccode>[sop]\nenabled = true\nsops_dir = \\\"sops\\\"  # 省略时默认为 &lt;workspace&gt;\u002Fsops\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n \u003Cli>\u003Cp>创建 SOP 目录，例如：\u003C\u002Fp>\u003Cpre>\u003Ccode>~\u002F.zeroclaw\u002Fworkspace\u002Fsops\u002Fdeploy-prod\u002FSOP.toml\n~\u002F.zeroclaw\u002Fworkspace\u002Fsops\u002Fdeploy-prod\u002FSOP.md\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n \u003Cli>\u003Cp>验证和检查定义：\u003C\u002Fp>\u003Cpre>\u003Ccode>zeroclaw sop list\nzeroclaw sop validate\nzeroclaw sop show deploy-prod\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n \u003Cli>\u003Cp>通过配置的事件源触发运行，或在代理轮次中使用 \u003Ccode>sop_execute\u003C\u002Fcode> 手动触发。\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>有关触发器路由和认证详情，请参见 \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002FrossiXYZ\u002Fp\u002Fconnectivity.zh-CN.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">连接\u003C\u002Fa>。\u003C\u002Fp>\n\u003Ch4>生命周期\u003C\u002Fh4>\n\u003Cp>Run 的生命周期如下。\u003C\u002Fp>\n\u003Cp>\u003Cimg alt=\"4-生命周期\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202608\u002F1850883-20260830210344811-984040711.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch4>确定性模式（Deterministic）特殊路径\u003C\u002Fh4>\n\u003Cp>这是 ZeroClaw SOP 最有价值的设计——不需要 LLM 的自动化流水线：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>start_deterministic_run()\n  |\n  |  run_id 前缀为 \"det-\"（区分于普通 \"run-\"）\n  ▼\nresolve_deterministic_action(step, input=Null)\n  |\n  ├─ step.kind == Checkpoint?\n  |     yes: persist_deterministic_state() → .state.json\n  |          → 返回 CheckpointWait（暂停）\n  |          → 人工 resume_deterministic_run() 恢复\n  |\n  |     no: → 返回 DeterministicStep { step, input }\n  ▼\n运行时执行步骤 → 产生 step_output\n  |\n  ▼\nadvance_deterministic_step(run_id, step_output)\n  |\n  |  step_output → 作为下一步的 input（管道！）\n  |  run.llm_calls_saved += 1  ← 统计省了多少 LLM 调用\n  ▼\n下一步... 或完成\n  |\n  | 完成时：deterministic_savings.total_llm_calls_saved += saved\n  |         deterministic_savings.total_runs += 1\n\n断点恢复 — 进程重启后可恢复：\n\n- persist_deterministic_state() → {run_id}.state.json 写入 SOP 目录\n- 包含：run_id, sop_name, last_completed_step, step_outputs, llm_calls_saved\n- resume_deterministic_run(state) → 从上次完成的步骤继续\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>5.3 SOP 连接与事件扇入\u003C\u002Fh3>\n\u003Cp>我们接下来看看外部事件如何触发 SOP 运行。\u003C\u002Fp>\n\u003Cp>ZeroClaw 通过统一的 SOP 调度器（\u003Ccode>dispatch_sop_event\u003C\u002Fcode>）路由 MQTT\u002Fwebhook\u002Fcron\u002F外围设备事件。\u003C\u002Fp>\n\u003Cp>关键行为：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cstrong>一致的触发器匹配：\u003C\u002Fstrong> 所有事件源使用同一个匹配器路径。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>运行启动审计：\u003C\u002Fstrong> 已启动的运行通过 \u003Ccode>SopAuditLogger\u003C\u002Fcode> 持久化。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>无头安全：\u003C\u002Fstrong> 在非代理循环上下文中，\u003Ccode>ExecuteStep\u003C\u002Fcode> 操作会被记录为待处理（不会静默执行）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>MQTT 集成\u003C\u002Fh4>\n配置\n\u003Cp>在 \u003Ccode>config.toml\u003C\u002Fcode> 中配置 broker 访问：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[channels_config.mqtt]\nbroker_url = \\\"mqtts:\u002F\u002Fbroker.example.com:8883\\\"  # 明文使用 mqtt:\u002F\u002F\nclient_id = \\\"zeroclaw-agent-1\\\"\ntopics = [\\\"sensors\u002Falert\\\", \\\"ops\u002Fdeploy\u002F#\\\"]\nqos = 1\nusername = \\\"mqtt-user\\\"      # 可选\npassword = \\\"mqtt-password\\\"  # 可选\nuse_tls = true              # 必须与 scheme 匹配（mqtts:\u002F\u002F =&gt; true）\n\u003C\u002Fcode>\u003C\u002Fpre>\n触发器定义\n\u003Cp>在 \u003Ccode>SOP.toml\u003C\u002Fcode> 中：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[[triggers]]\ntype = \\\"mqtt\\\"\ntopic = \\\"sensors\u002Falert\\\"\ncondition = \\\"$.severity &gt;= 2\\\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>MQTT payload 会被转发到 SOP 事件 payload（\u003Ccode>event.payload\u003C\u002Fcode>），然后显示在步骤上下文中。\u003C\u002Fp>\n\u003Ch4>Webhook 集成\u003C\u002Fh4>\n端点\n\u003Cul>\n \u003Cli>\u003Cstrong>\u003Ccode>POST \u002Fsop\u002F{*rest}\u003C\u002Fcode>\u003C\u002Fstrong>：仅 SOP 端点。如果没有 SOP 匹配则返回 \u003Ccode>404\u003C\u002Fcode>。无 LLM 回退。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>\u003Ccode>POST \u002Fwebhook\u003C\u002Fcode>\u003C\u002Fstrong>：聊天端点。首先尝试 SOP 调度；如果不匹配，回退到正常 LLM 流程。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>路径匹配与配置的 webhook 触发器路径精确匹配。\u003C\u002Fp>\n\u003Cp>示例：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>SOP 中的触发器路径：\u003Ccode>path = \\\"\u002Fsop\u002Fdeploy\\\"\u003C\u002Fcode>\u003C\u002Fli>\n \u003Cli>匹配请求：\u003Ccode>POST \u002Fsop\u002Fdeploy\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n授权\n\u003Cp>启用配对时（默认），提供：\u003C\u002Fp>\n\u003Col>\n \u003Cli>\u003Ccode>Authorization: Bearer &lt;token&gt;\u003C\u002Fcode>（来自 \u003Ccode>POST \u002Fpair\u003C\u002Fcode>）\u003C\u002Fli>\n \u003Cli>可选第二层：配置 webhook 密钥时提供 \u003Ccode>X-Webhook-Secret: &lt;secret&gt;\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Fol>\n幂等性\n\u003Cp>使用：\u003C\u002Fp>\n\u003Cp>\u003Ccode>X-Idempotency-Key: &lt;unique-key&gt;\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>默认值：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>TTL：300秒\u003C\u002Fli>\n \u003Cli>重复响应：\u003Ccode>200 OK\u003C\u002Fcode> 带 \u003Ccode>\\\"status\\\": \\\"duplicate\\\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>幂等性密钥按端点命名空间区分（\u003Ccode>\u002Fwebhook\u003C\u002Fcode> 和 \u003Ccode>\u002Fsop\u002F*\u003C\u002Fcode> 分开）。\u003C\u002Fp>\n示例请求\n\u003Cpre>\u003Ccode>curl -X POST http:\u002F\u002F127.0.0.1:3000\u002Fsop\u002Fdeploy \\\n  -H \\\"Authorization: Bearer &lt;token&gt;\\\" \\\n  -H \\\"X-Idempotency-Key: $(uuidgen)\\\" \\\n  -H \\\"Content-Type: application\u002Fjson\\\" \\\n  -d '{\\\"message\\\":\\\"deploy-service-a\\\"}'\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>典型响应：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \\\"status\\\": \\\"accepted\\\",\n  \\\"matched_sops\\\": [\\\"deploy-pipeline\\\"],\n  \\\"source\\\": \\\"sop_webhook\\\",\n  \\\"path\\\": \\\"\u002Fsop\u002Fdeploy\\\"\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Cron 集成\u003C\u002Fh4>\n\u003Cp>调度器使用基于窗口的检查评估缓存的 cron 触发器。\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cstrong>基于窗口：\u003C\u002Fstrong> 不会遗漏 \u003Ccode>(last_check, now]\u003C\u002Fcode> 内的事件。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>每个刻度每个表达式最多一次：\u003C\u002Fstrong> 如果一个轮询窗口内有多个触发点，仅调度一次。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>触发器示例：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[[triggers]]\ntype = \\\"cron\\\"\nexpression = \\\"0 0 8 * * *\\\"\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cron 表达式支持 5、6 或 7 个字段。\u003C\u002Fp>\n\u003Ch3>5.4 SOP 食谱\u003C\u002Fh3>\n\u003Cp>运行时支持的 \u003Ccode>SOP.toml\u003C\u002Fcode> + \u003Ccode>SOP.md\u003C\u002Fcode> 格式的实用 SOP 模板。\u003C\u002Fp>\n\u003Ch4>人在回路部署\u003C\u002Fh4>\n\u003Cp>\u003Ccode>SOP.toml\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[sop]\nname = \\\"deploy-prod\\\"\ndescription = \\\"带显式审批门控的手动部署\\\"\nversion = \\\"1.0.0\\\"\npriority = \\\"high\\\"\nexecution_mode = \\\"supervised\\\"\nmax_concurrent = 1\n\n[[triggers]]\ntype = \\\"manual\\\"\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>SOP.md\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>## 步骤\n\n1. **验证** — 检查健康指标和发布约束。\n   - 工具：http_request\n\n2. **部署** — 执行部署命令。\n   - 工具：shell\n   - 需要确认：true\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>IoT 告警处理器（MQTT）\u003C\u002Fh4>\n\u003Cp>\u003Ccode>SOP.toml\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[sop]\nname = \\\"high-temp-alert\\\"\ndescription = \\\"处理高温遥测告警\\\"\nversion = \\\"1.0.0\\\"\npriority = \\\"critical\\\"\nexecution_mode = \\\"priority_based\\\"\n\n[[triggers]]\ntype = \\\"mqtt\\\"\ntopic = \\\"sensors\u002Ftemp\u002Falert\\\"\ncondition = \\\"$.temperature_c &gt;= 85\\\"\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>SOP.md\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>## 步骤\n\n1. **分析** — 读取此 SOP 上下文中的 `Payload:` 部分并确定严重程度。\n   - 工具：memory_recall\n\n2. **通知** — 发送包含站点\u002F设备\u002F严重程度摘要的告警。\n   - 工具：pushover\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>每日摘要（Cron）\u003C\u002Fh4>\n\u003Cp>\u003Ccode>SOP.toml\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[sop]\nname = \\\"daily-summary\\\"\ndescription = \\\"生成每日运营摘要\\\"\nversion = \\\"1.0.0\\\"\npriority = \\\"normal\\\"\nexecution_mode = \\\"supervised\\\"\n\n[[triggers]]\ntype = \\\"cron\\\"\nexpression = \\\"0 9 * * *\\\"\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>SOP.md\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>## 步骤\n\n1. **收集日志** — 收集最近的错误和警告。\n   - 工具：file_read\n\n2. **总结** — 生成简洁的事件和趋势摘要。\n   - 工具：memory_store\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cimg alt=\"TransFormer-封面\" src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202604\u002F1850883-20260414185617215-487992862.png?w=720&amp;quality=65&amp;strip=all\">\u003C\u002Fp>\n\u003Ch2>0xFF 参考\u003C\u002Fh2>","【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4）--- 代码执行 目录 【OpenClaw具身硬件】ZeroClaw 源码阅读笔记（4）--- 代码执行 0x00 概要 0x01 代码合成 1.1 核心思想 1.2 业务逻辑 具体应用场景 能力体现 1.3 实现细节 生成种类 Rust 代码 Arduino CLI的功能定位 1.4 ClaudeCode Tool如何被大模型使用 第一步：tool.spec()生成工具描述 第二步：注册到Agent 第三步：转换为LLM Function Calling格式 第四步：LLM返回tool_call，ZeroClaw分发执行 0x02 代码执行 2.1 核心概念 WASM执行机制 Dynamic Exec动态执行 8 层纵深执行架构 2.2 关键组件 ShellTool SOP工作流引擎 Skill 动态加载系统 三层来源 Skill→Tool 转换 自动创建（SkillCreator） 自我改进（SkillImprover） 2.3 代码执行架构对比 2.4 具体应用场景 2.5 执行流程 Claude Code产生的代码如何被执行 shell 工具 0x03 消息机制 3.1 消息协议 3.2 Daemon 流程图 完整架构 0x04 IOT 4.1 三层协同的完整 IoT 场景 4.2 核心 IoT 硬件能力（原生支持） 4.3 IoT 场景的 AI Agent 能力（核心价值） 4.4 典型 IoT 应用示例 4.5 IoT 适配机制 第一层：MQTT Channel（消息入口） 第二层: Peripheral Trait (硬件外设) 第三层: SOP + Peripheral 联动 4.6 总结 0x05 SOP 标准操作流程 5.1 核心设计哲学 5.2 流程 快速路径 运行时契约（当前） 事件流程 入门指南 生命周期 确定性模式（Deterministic）特殊路径 5.3 SOP 连接与事件扇入 MQTT 集成 配置 触发器定义 Webhook 集成 端点 授权 幂等性 示例请求 Cron 集成 5.4 SOP 食谱 人在回路部署 IoT 告警处理器（MQTT） 每日摘要（Cron） 0xFF 参考 0x00 概要 本文是 ZeroClaw 的学习笔记。 ZeroClaw 是一个零开销、零妥协、100% Rust实现的AI助手框架，具有以下核心特点： 数字-物理桥梁：AI不仅处理数字信息，还能控制物理世界 环境感知：通过传感器获取真实环境数据 主动交互：能够主动改变物理环境状态 极致性能：优化编译配置（opt-level=\"z\"，lto=\"fat\"）生成最小二进制文件 多平台支持：支持CLI、WebGateway、桌面应用、硬件集成 模块化设计：高度可扩展的插件式架构 安全优先：内置多层安全机制和紧急停止功能 ZeroClaw 的总体如下图所示。 关于代码生成和执行，总体情景如下： 0x01 代码合成 代码合成（Code Synthesis）指AI系统根据自然语言描述或高级规范自动生成可执行的Rust代码，它使得AI助手不仅能够理解和回答问题，还能够主动创建和执行解决方案。 1.1 核心思想 核心设计思想：ZeroClaw 自己不写代码，而是做“编排层”，把复杂编码任务委派给专业 coding agent。即，ZeroClaw做高层编排 → 编码细节交给ClaudeCode自己的Read\u002FEdit\u002FBash循环。 代码合成是Two-Tier Delegation 架构。 具体的 Tool 如下。 Tool 后端 特点 claude_code Claude Code CLI (claude -p) 最丰富：allowed_tools、session 复用、json_schema 结构化输出 claude_code_runner tmux + HTTP hooks 异步长任务：立即返回 session ID，通过 webhook 推送进度到 Slack codex_cli OpenAI Codex CLI （codex -q) OpenAI 侧编码 gemini_cli Gemini CLI （gemini -p) Google 侧编码 opencode_cli OpenCode CLI （opencode run) 开源替代 其关键特点如下： “不自己写代码“的哲学：ZeroClaw定位是编排层，代码合成委派给Claude\u002FCodex\u002FGemini，自己只负责安全、调度、路由 多后端沙箱：不是象征性的沙箱，是5 种真实 OS-level isolation （Landlock\u002FFirejail\u002FBubblewrap\u002FSeatbelt\u002FDocker） 风险分级 +审批：命令按 High\u002FMedium\u002FLow 分级，Supervised 模式下 Medium 以上需 approved=true 环境零泄露：env_clear()+白名单，杜绝 API Key 通过子进程泄露 异步长任务支持：claude_code_runner 通过 tmux +HTTP hook 做真正的“后台编码\"，支持 SSH 接入观察 Pipeline 减少推理：多步操作合并为一次调用，降低 token 成本 1.2 业务逻辑 具体应用场景 GPIO控制代码生成： 用户说“让LED闪烁“ AI生成相应的RustGPIO控制代码 代码被编译并部署到目标设备 传感器读取代码： 用户请求“读取温度传感器数据“ 生成I2C\u002FSPI通信的Rust代码 执行并返回传感器读数 能力体现 代码合成能力主要体现在： Agent智能决策：根据用户需求动态生成合适的Rust代码 Tools工具系统：提供安全的代码生成和执行环境 硬件集成：自动生成设备控制和固件代码 安全保障：在严格的约束下确保代码生成的安全性 技术实现方式 LLM驱动：利用大型语言模型理解用户意图并生成相应代码 模板填充：基于预定义的代码模板进行参数化生成 约束优化：在安全策略和性能要求的约束下生成最优代码 动态执行能力： 生成的Rust 代码可以通过WASM或动态执行机制运行 支持沙箱环境中的安全代码执行 提供执行结果反馈和错误处理 1.3 实现细节 代码生成流程：用户输入→意图识别→代码生成→安全验证→编译执行→结果返回 生成种类 ESP32固件生成： 根据用户配置自动生成ESP32的Rust固件代码 位于firmware\u002Fesp32\u002Fsrc\u002F目录下 支持自动部署到ESP32设备 Arduino固件生成： 自动生成Arduino.ino格式的固件 通过zeroclaw peripheral flash命令触发 集成arduino-cli进行编译和上传 Peripheral外设模块的硬件控制代码生成： 根据连接的外设类型生成相应的控制代码 自动适配不同的硬件平台（STM32、ESP32、树莓派等） 生成优化的底层硬件操作代码 Rust 代码 ZeroClaw选择Rust是基于其独特的技术优势组合： 性能与安全的完美平衡：既提供C\u002FC++级别的性能，又保证内存安全 资源效率：极小的内存占用和二进制大小，适合边缘计算场景 并发安全：天生的并发安全特性，适合多任务AI助手架构 跨平台能力：统一代码库支持从桌面到嵌入式的全平台部署 生态系统成熟：丰富的库和工具链支持快速开发 这种选择完美契合了ZeroClaw\"零开销、零妥协“的核心理念，使得项目能够在保持极致性能的同时，提供企业级的安全性和可靠性保障。 另外，Rust 代码可以通过Termux运行在Android之上。 Arduino CLI的功能定位 主要功能 固件编译：将.ino文件编译为ESP32\u002FArduino可执行的二进制文件 设备烧录：将编译好的固件上传到Arduino\u002FESP32开发板 库管理：管理Arduino库依赖和版本 代码生成能力 间接代码生成：ArduinoCLI本身不直接生成代码，而是由ZeroClaw生成.ino代码后调用ArduinoCLI进行编译 模板填充：ZeroClaw基于预定义模板生成完整的Arduino项目结构 自动配置：根据用户需求自动生成合适的引脚配置和功能代码 自动生成流程 用户请求→ZeroClaw生成.ino代码→调用ArduinoCLI编译→烧录到设备 核心组件 Agent模块：负责整体决策和代码生成逻辑 Peripheral模块：管理外设配置和硬件抽象 Too1s模块：提供具体的代码生成和执行工具 Firmware目录：包含预定义的固件模板和示例 生成流程概述 用户意图识别：Agent分析用户自然语言请求 硬件需求解析：确定所需的传感器、执行器和引脚配置 模板选择：从预定义模板中选择合适的Arduino项目结构 代码合成：填充模板参数，生成完整的.ino文件 依赖分析：确定需要的Arduino库和配置 自动部署：调用ArduinoCLI进行编译和烧录 1.4 ClaudeCode Tool如何被大模型使用 我们以ClaudeCode Tool为例，看看ZeroClaw如何生成代码。 第一步：tool.spec()生成工具描述 每个工具实现Tooltrait的三个方法： fn name()----->\"claude_code\" fn description()---->\"Delegate a coding task to Claude Code... fn parameters_schema(）----->{type:\"object\",properties:{prompt,allowed_tools,session_id...}} tool.spec()把这三者打包成ToolSpec。 第二步：注册到Agent \u002F\u002FAgentBuilder::build() let tool_specs=tools.iter().map(|tool| tool.spec()).collect(); \u002F\u002Ftool_specs：Vec\u003CToolSpec> -所有工具的描述列表 第三步：转换为LLM Function Calling格式 每次调用LLM时，provider.chat(ChatRequest{messages，tools:Some(&tool_specs)}）把工具传给provider： \u002F\u002Fopenai.rs:convert_tools() NativeToolSpec { kind:\"function\", function:NativeToolFunctionSpec{ name:\"claude_code\", description:\"Delegate a coding task...\" parameters:{\u002F*JsoN Schema *\u002F} } } OpenAI\u002FAnthropic\u002FGemini等各provider各自负责把ToolSpec转换成自己平台的格式（OpenAI用tools字段，Anthropic用tools数组，Gemini用funciton_declarations) 第四步：LLM返回tool_call，ZeroClaw分发执行 LLM响应:{tool_calls:[{name:\"claude_code\"，arguments:{prompt:\"...\"}}]} ↓ dispatcher.dispatch(\"claude_code\",args) ↓ ClaudeCodeTool::execute(args) └── 启动子进程: claude -p \"...\" │ └── Claude Code CLI 的 agent loop: ├── 生成代码 -> Edit(\"src\u002Fmain.py\", ...) ├── 执行代码 -> Bash(\"python src\u002Fmain.py\") │ ↑ 在同一台机器上执行 └── 返回结果给 zeroclaw ↓ 结果返回给LLM继续对话 0x02 代码执行 ZeroClaw中的 WASM \u002F Dynamic Exec 机制是一个安全、灵活、高效的动态代码执行平台，它使得： AI生成的代码能够安全执行：通过WASM沙箱和严格的权限控制 硬件操作变得简单直观：用户无需编写底层硬件代码 系统保持高度可扩展性：支持多种编程语言和执行环境 性能和安全性得到平衡：既保证了执行效率，又确保了系统安全 这种设计完美体现了ZeroClaw\"零开销、零妥协“的理念，让用户能够充分发挥创造力，同时享受企业级的安全保障。 2.1 核心概念 基本定义 WASM（WebAsSembly）：一种可移植、体积小、加载快的二进制格式，可在多种环境中安全执行 DynamicExec（动态执行）：在运行时动态生成并执行代码的能力 组合使用：ZeroClaw将两者结合，实现安全的动态代码执行环境 在架构图中的位置 Code synthesis → Wasm \u002F dynamic exec → GPIO \u002F I2C \u002F SPI → persist 流程解释：AI生成的代码→WASM沙箱执行→硬件操作→持久化存储 WASM执行机制 功能特性： 安全的沙箱环境执行用户代码 支持Rust、C、Go等语言编译的WASM模块 提供主机函数调用接口（Host Functions） Dynamic Exec动态执行 代码生成与执行流程 AI代码合成：Agent根据用户需求生成Rust代码 编译阶段：将生成的代码编译为可执行格式 执行阶段：在受限环境中运行生成的代码 结果收集：捕获执行结果和可能的错误 执行环境类型 沙箱进程：通过子进程隔离执行，限制系统权限 WASM沙箱：对于支持WASM的语言，在WASM运行时中执行 解释器模式：对于脚本语言，使用相应的解释器执行 8 层纵深执行架构 2.2 关键组件 ShellTool ZeroClaw主要是使用ShellTool-带沙箱的 shell 命令执行： 超时保护：默认 60s超时自动 kill 输出截断：stdout\u002Fstderr 各限 1MB，防止 OOM 环境净化：env_clear()后仅传入安全白名单变量（PATH\u002FHOME\u002FTERM 等），绝不泄露 API Key 命令风险分级：Low\u002F Medium \u002F High，配合 AutonomyLevel（Supervised \u002F Full）做审批门控 工作区边界：所有路径经 canonicalize()防止 symlink 逃逸 5种沙箱后端（Sandbox trait）： 后端 平台 隔离强度 Landlock Linux 5.13+ 内核级文件系统限制 Firejail Linux 用户态沙箱 Bubblewrap Linux 轻量级 namespace Seatbelt macos Apple sandbox-exec Docker 全平台 容器隔离 启动时自动探测最强可用后端（detect.rs），对每个 shell 命令执行前调用 sandbox.wrap_command()。 SOP工作流引擎 SOP（Standard Operating Procedure）是一个多步骤自动化工作流引I擎，从 TOML\u002FMarkdown 文件定义，支持多种触发源和执行模式。 触发器（5种事件源） MQTT topic → ──┐ Webhook path → ──┼ Cron表达式 → ──┼──► SopEngine.match_trigger() → start_run() Peripheral 信号 → ──┼ Manual手动 → ───┘ 条件匹配支持 JsoN Path：S.sensor.temperature > 85 Skill 动态加载系统 三层来源 用户本地：~\u002F.zeroclaw\u002Fworkspace\u002Fskills\u002F \u002FSKILL.toml 或 SKILL.md Open Skills 社区仓库：自动从 besoeasy\u002Fopen-skills GitHub 仓库同步（7天一次） ClawHub 注册中心：clawhub.ai 在线下载安装（50MB 上限 ZIP） Skill→Tool 转换 Skill 定义 （SKILL.toml） - [[tools]] kind=\"shell\" → SkillShellTool(命令模板+参数替换{{arg}}) - [[tools]] kind=\"http\" → HTTP 请求 tool - prompts: [...] → 注入 system prompt 工具名自动加前缀：skill_name.tool_name 防碰撞。 自动创建（SkillCreator） Agent学习自动化：当 Agent 成功执行多步 tool 链时，自动提取为可复用 Skill： ≥2步才触发 用embedding 去重（cosine similarity 检测已有相似 skill） LRU淘汰（超过上限自动删最旧） 生成 SKILL.toml 持久化 自我改进（SkillImprover） Agent 成功使用一个 Skill 后可以改进它： Cooldown防止频繁改 原子写入（写temp →validate→rename） 审计元数据（improvementreason +timestamp）追加到文件 2.3 代码执行架构对比 代码执行架构对比：ZeroClaw vs Devin vs SWE-agent vs OpenHands ZeroClaw Devin SWE-agent OpenHands 隔离粒度 每次命令 每个 session 每个 task 每个 session 隔离技术 5种沙箱可选 云端完整VM Docker容器 Docker容器 持久性 无状态（命令级） 有状态（完整Linux桌面） 有状态（容器内git repo） 有状态（容器挂载workspace） 文件系统 workspace目录+路径白名单 完整VM文件系统 容器内完整FS 容器内完整FS 网络 无限制（依赖OS层） 全功能网络 容器网络 容器网络 谁写代码 委派给外部coding agent 自己的Agent直接写 自己的Agent直接写 CodeAct Agent直接写 编辑方式 file_write\u002Ffile_edit（字符串替换） IDE内直接操作 自研ACI命令（scroll_up, edit等） Python code execution 代码理解 无 AST\u002FLSP（纯文本） 完整IDE（有LSP） 自研ACI（专门为LLM设计的文件接口） IPython kernel执行 关键区别： Devin: 把 LLM 当“开发者”，给它完整 IDE + 浏览器 + terminal。 SWE-agent: 发现 LLM 用标准命令（vim\u002Fnano）效率极低，专门设计了“Agent-Computer Interface”——一套为 LLM 优化的命令（open file.py 50-100、edit 50:55 ....、scroll_down）。 OpenHands: 用 CodeAct—LLM 生成 Python 代码，在 IPython kernel 里执行，代码本身就是“工具调用”。 ZeroClaw特点：不用完整容器\u002FVM，而是命令级沙箱一每条shell 命令单独包裹（Landlock\u002FFirejail\u002FSeatbelt），轻量但隔离粒度细。适合端侧（手机\u002F嵌入式）场景，不适合需要跨命令有状态的复杂编程任务。 架构哲学对比总结 Devin: “给LLM一台完整电脑“ → 重（完整VM）、强（全能力） SWE-agent: “给LLM专门设计的命令接口“ → 中（Docker）、精（为benchmark优化） OpenHands: \"让LLM写Python 当工具调用\" → 中（Docker）、灵活（代码即动作） ZeroClaw: “Agent只编排，不亲自写代码“ → 轻（命令级沙箱）、安全优先、端侧适用 Zeroclaw 独特优势 端侧可部署：不依赖 Docker\u002FVM，Landlock\u002FSeatbelt 可以在手机\u002F嵌入式上跑 安全纵深最强：5层沙箱+环境净化+风险分级 +审批门 Deterministic SOP:已知工作流完全不过 LLM，O token 成本 自主学习闭环：执行 →提取 Ski11→下次复用 →自动改进 .多 Coding Agent 路由：不锁定单一 LLM，可按任务选 Claude\u002FCodex\u002FGemini ZeroClaw劣势\u002F短板 无有状态环境：不像 Devin\u002FOpenHands 有持久 workspace 容器，跨命令状态要靠文件系统 代码理解能力弱：无 AST\u002FLSP\u002F代码搜索，纯文本 file_read\u002Ffile_edit 不适合SWE-bench 类任务：设计目标不是“自主修bug\"，而是“编排+安全+端侧“ mini-SWE-agent 的警示：100 行 Python 就能达到 65% SWE-bench verified，说明“精巧接口 > 复杂架构 2.4 具体应用场景 动态硬件控制 场景描述：用户说“创建一个温度超过30度就打开风扇的程序“ 执行流程： AI生成包含温度读取和风扇控制的Rust代码 代码被编译为WASM模块 WASM模块定期读取温度传感器 当温度>30时，调用GPI0控制风扇 自定义数据处理 场景描述：用户需要对传感器数据进行特殊算法处理 执行流程： 用户提供算法描述或伪代码 AI生成相应的数据处理函数 函数在WASM沙箱中执行，处理实时传感器数据 返回处理结果给主程序 2.5 执行流程 Claude Code产生的代码如何被执行 用户消息 ↓ ZeroClaw agent loop (src\u002Fagent\u002Floop_.rs) ↓ LLM决策→调用claude_code工具 ↓ ClaudeCodeTool::execute() └── 启动子进程: claude -p \"...\" ↓ tokio::process::Command::new(\"claude\") .arg(\"-p\").arg(prompt)\u002F\u002F你的任务 .arg(\"--output-format\").arg(\"json\") .arg(\"--allowedTools\"）.arg（\"Bash\"）\u002F\u002F可选：允许执行shell .current_dir(workspace_dir) \u002F\u002F工作目录锁定在workspace内 .env_clear() \u002F\u002F清除所有环境变量 .env(\"HOME\"，...)\u002F\u002F只透传白名单变量 ↓ 等待claude进程返回JSON ↓ 解析{result，session_id} 返回给 ZeroClaw shell 工具 ZeroClaw 自己的代码执行 (通过 shell 工具) 也运行在同一台机器上, 流程如下: ZeroClaw agent ↓ LLM 决定调用 shell 工具 ShellTool::execute({ command: \"python gen_code.py\" }) ↓ runtime.build_shell_command(command, workspace_dir) ↓ sandbox.wrap_command(&mut cmd) \u003C- 沙箱包装 (Landlock\u002FBubblewrap 等) ↓ cmd.env_clear() + 只透传白名单环境变量 ↓ cmd.output().await \u003C- 子进程在本机 workspace_dir 里执行 ↓ stdout\u002Fstderr 返回给 LLM 0x03 消息机制 ZeroClaw 不是 “附加” IoT 功能，而是从底层设计为边缘 IoT+AI Agent 的运行时，硬件控制、IoT 协议、低功耗部署都是原生核心能力，适合快速搭建带自然语言交互的智能物联网系统。 事件驱动与主动行为：外设可把异步事件（传感器触发、GPIO 中断）通过transport推送到 ZeroClaw；ZeroClaw将事件变成会话\u002F事件（或触发SOP\u002Fcron\u002FHands），代理可以主动发出消息或运行工具。 定时\u002F自动化由cron、SOP（事件驱动工作流）和Hands编排实现，能在条件满足时主动执行动作或发送> 通知（见README的Gateway\u002Fcron\u002FSOPs说明）。 3.1 消息协议 典型消息格式（文档示例）：主机外设间的串口JSON请求\u002F响应，例如： Serial Fallback (Host-Mediated, legacy) Simple JSON over serial for boards without gRPC support: Request (host → peripheral): {\"id\":\"1\",\"cmd\":\"gpio_write\",\"args\":{\"pin\":13,\"value\":1}} Response (peripheral → host): {\"id\":\"1\",\"ok\":true,\"result\":\"done\"} 3.2 Daemon zeroclaw daemon启动一个长期运行的异步进程，同时管理多个组件： zeroclaw daemon ├─gateway服务器（axumHTTP+WebSocket） ├─channels监听循环（TG\u002FDiscord等） ├─cron调度器 ├─heartbeat心跳 └─状态写入器（每5秒写磁盘状态） 流程图 以下流程图涵盖了以下核心逻辑： 组件并行启动： Daemon 启动后会立即并行生成四个核心部分：状态写入器（每5秒刷新）、网关、渠道、心跳和调度器。 条件检查：渠道、心跳和调度器会根据配置文件（config.toml）中的设置决定是否启动对应的 Worker。例如，如果未配置 Cron，则直接标记为 OK 并跳过。 监督与循环： 每个核心组件（Gateway, Channels, Heartbeat, Scheduler）都拥有独立的 Supervisor（监督者） 和 Loop（循环）。 4 大核心循环（Gateway\u002FChannel\u002FHeartbeat\u002FScheduler）均实现运行→退出判断→异常处理→退避重试→重新循环的闭环，分支（正常退出 \u002F 异常退出）完全对齐； 异常处理：如果组件意外退出或报错，系统会记录错误并进行退避等待（Backoff），随后尝试重新进入循环，确保服务的稳定性。 核心功能： Gateway：负责 HTTP\u002FWebSocket 服务，处理外部连接。 Channels：连接 TG、Discord 等聊天平台。 Heartbeat：定期执行后台感知任务，赋予 AI “自主意识”。 Scheduler：基于 Cron 表达式触发定时任务。 优雅退出： 当接收到 Ctrl+C 信号时，Daemon 会中止所有任务并等待线程结束，确保数据完整保存后停止。即，所有组件初始化完成→进入运行状态，接收 Ctrl+C 后→终止所有任务→等待任务结束→守护进程正常停止，链路完整； ✅ 配色样式： 🔴 supervisor：组件孵化相关节点（State Writer\u002FGateway Supervisor 等）； 🟢 running：唯一运行状态节点； 🔵 component：各循环的核心运行方法节点； 完整架构 zeroclaw daemon::run() │ ├── tokio::broadcast::channel\u003CJsonValue>(256) ← 实时事件总线 │ 所有组件通过它向 dashboard 推送状态 │ ├── spawn_state_writer() │ 每 5 秒写 daemon_state.json (健康快照) │ ├── spawn_component_supervisor(\"gateway\") │ → gateway::run_gateway(host, port, config, event_tx) │ axum HTTP + WebSocket 服务器 │ 崩溃自动重启 (指数退避: initial_backoff → max_backoff) │ ├── spawn_component_supervisor(\"channels\") ← 仅当有 channel 配置时 │ → channels::start_channels(config) │ 同时监听所有配置的 channel (TG\u002FDiscord\u002FSlack...) │ ├── spawn_component_supervisor(\"mqtt\") ← 仅当启用时 │ → run_mqtt_sop_listener() │ IoT\u002FSOP 事件 fan-in │ ├── spawn_component_supervisor(\"heartbeat\") ← 仅当启用时 │ 两阶段模式: Phase 1 用 LLM 决策要执行哪些任务 │ Phase 2 执行选定任务 │ Dead-man's switch: 超时未 tick 自动发告警 │ └── spawn_component_supervisor(\"scheduler\") ← 仅当 cron.enabled 时 → cron::scheduler::run(config, event_tx) 定时任务执行 0x04 IOT ZeroClaw有完整、原生的 IoT \u002F 边缘硬件控制功能，专为低功耗嵌入式与物联网设备设计，是其核心定位之一。 4.1 三层协同的完整 IoT 场景 关键特点： MQTT 不经 LLM: IoT 事件 → SOP 条件匹配 → Deterministic 执行, 全程 0 token Peripheral 即 Tool: 硬件能力作为 LLM 可调用函数暴露 条件引擎: JSON Path 表达式 + 数值比较, fail-closed (条件不满足就不触发) QoS 支持: MQTT QoS 0\u002F1\u002F2, TLS (mqtts:\u002F\u002F), auto-reconnect Cooldown + 并发控制: 防止传感器抖动导致 SOP 疯狂重复执行 端侧部署: 整个 runtime 是 Rust 单二进制, 可跑在 RPi \u002F 嵌入式 Linux 4.2 核心 IoT 硬件能力（原生支持） 硬件外设控制接口 支持GPIO、I2C、SPI、UART \u002F 串口等标准嵌入式总线，直接驱动传感器、继电器、LED、电机等。 兼容主流 IoT 硬件：Raspberry Pi (Zero\u002F3\u002F4\u002F5)、ESP32、STM32 Nucleo、Arduino等。 提供统一Peripheral trait 抽象，可插拔适配不同 MCU \u002F 开发板，无需改核心代码。 IoT 通信协议 内置MQTT客户端 \u002F 服务端，支持订阅 \u002F 发布，对接 IoT 平台 \u002F 网关。 支持WebSocket、Webhook，用于云端 \u002F 边缘双向事件推送。 支持gRPC\u002FnanoRPC，实现设备间 \u002F 设备 - 主机的低延迟远程控制。 边缘部署特性（IoT 核心） 超轻量：单二进制 \u003C 3.4MB、内存 \u003C 5MB，冷启动 \u003C 10ms，适配电池 \u002F 低功耗场景openzeroclaw.com。 跨架构：ARM、x86、RISC-V，支持 Linux \u002F 嵌入式 Linux，可直接跑在 Pi Zero、ESP32 等边缘节点openzeroclaw.com。 两种运行模式： Edge-Native（本地独立）：ZeroClaw 直接运行在 ESP32 \u002F 树莓派，本地解析自然语言、控制硬件、执行自动化。 Host-Target（主机 - 从机）：ZeroClaw 在 PC \u002F 服务器，通过 USB\u002FJ-Link 远程控制 STM32\u002FArduino 等 MCU。 4.3 IoT 场景的 AI Agent 能力（核心价值） 自然语言转硬件指令：语音 \u002F 聊天（TG \u002F 钉钉 \u002F 飞书）直接控制设备（如 “打开客厅灯”“读取温湿度”），LLM 自动生成 Rust 硬件代码并执行。 事件驱动自动化：结合Cron 定时、MQTT 传感器触发、GPIO 电平变化，执行预设 SOP（如温度超阈值自动开风扇、定时上报数据）。 边缘智能：本地运行轻量模型 \u002F 调用云端 LLM，做异常检测、预测、决策，减少云端依赖、降低延迟、保护隐私。 远程运维：通过隧道（Cloudflare\u002FTailscale\u002Fngrok）+ 多通道，外网安全访问内网 IoT 设备，远程调试 \u002F 控制openzeroclaw.com。 4.4 典型 IoT 应用示例 智能家居：树莓派 + ZeroClaw，语音 \u002F APP 控制灯光、插座、温湿度监控，MQTT 接入 HomeAssistant。 工业边缘：部署在网关，采集传感器数据、本地分析、异常告警、控制执行器。 便携 \u002F 电池设备：ESP32 运行 ZeroClaw，低功耗、离线可用，做环境监测 \u002F 智能开关。 4.5 IoT 适配机制 ZeroClaw为 IoT做了三层适配： 第一层：MQTT Channel（消息入口） IoT 设备 → MQTT Broker> ZeroClaw MQTT Listener→ SOP Engine 关键设计决策：MQTT不走Channel trait（不进入聊天循环），而是直连SOP引擎： \u002F\u002F mgtt.rs第1-4行的注释： \u002F\u002F ! This is NOT a Channel` trait implementor - it routes MQTT messages \u002F\u002F ! to the SoP engine via dispatch_sop_event, not to the chat loop. 为什么？因为 IoT事件是机器信号（温度 85°C、门开了），不是“对话“。不应进入LLM推理循环浪费token，而是直接匹配SOP触发条件执行预定义流程。 流程： 订阅 sensors\u002F# 等 MQTT topic 收到 publish → 构建 SopEvent →dispatch_sop_event()匹配触发器 →匹配到的SOP用start_run()启动 →Deterministic模式直接执行（0 LLM调用） 条件评估： \u002F\u002Fcondition.rs：支持JSoN Path 条件 evaluate_condition(\"$.temperature >85\",Some(r#\"{\"temperature\":90}\"#)) \u002F\u002F→true→触发SOP 第二层: Peripheral Trait (硬件外设) Agent ↔ Peripheral ↔ 物理硬件 ↓ ↓ STM32 Nucleo RPi GPIO (Serial\u002FUART) (sysfs\u002Fgpiod) Peripheral = Agent 的\"手和脚\": pub trait Peripheral: Send + Sync { fn name(&self) -> &str; \u002F\u002F \"nucleo-f401re-0\" fn board_type(&self) -> &str; \u002F\u002F \"nucleo-f401re\" async fn connect(&mut self) -> Result\u003C()>; async fn disconnect(&mut self) -> Result\u003C()>; async fn health_check(&mut self) -> bool; fn tools(&self) -> Vec\u003CBox\u003Cdyn Tool>>; \u002F\u002F gpio_read, gpio_write, sensor_read } 连接后，Peripheral 的 tools 直接注入 Agent 工具注册表—LLM 可以调用 gpio_write（pin=13，value=HIGH）控制硬件。 已实现： nucleo_flash-STM32 Nucleo 板固件烧录 arduino_flash \u002F arduino_upload -Arduino 上传 rpi -Raspberry Pi GPIo （仅 Linux + peripheral-rpi feature） serial-通用串口通信 uno_a_bridge -Arduino Uno 通信桥接 第三层: SOP + Peripheral 联动 SOP 触发器支持 Peripheral 类型: # SOP.toml [[triggers]] type = \"peripheral\" board = \"nucleo-f401re-0\" signal = \"button_pressed\" condition = \"> 0\" 这意味着：硬件按钮按下→触发SOP→Deterministic 执行（0 LLM）→输出到另一个Peripheral\u002FMQTT 4.6 总结 ZeroClaw 不是 “附加” IoT 功能，而是从底层设计为边缘 IoT+AI Agent 的运行时，硬件控制、IoT 协议、低功耗部署都是原生核心能力，适合快速搭建带自然语言交互的智能物联网系统。 0x05 SOP 标准操作流程 SOP 是由 SopEngine 执行的确定性流程。它们提供显式的触发器匹配、审批门控和可审计的运行状态。实际上，SOP 可以被认为是短路机制：高频、标准化场景（如\"打开空调\"）直接走 SOP 规程，跳过 LLM 推理，响应时间 \u003C 100ms。 输入 → 安全预检 → Context 收集 → SOP 匹配 ├─ 匹配到 SOP → 执行预定义流程（不经过 LLM） └─ 未匹配 → 模型路由 → LLM 推理 → Tool 调用 → 安全后检 → 响应输出 具体如下： 5.1 核心设计哲学 其执行模式如下： 5.2 流程 快速路径 连接事件： 连接与扇入 — 通过 MQTT、webhook、cron 或外围设备触发 SOP。 编写 SOP： 语法参考 — 所需的文件布局和触发器\u002F步骤语法。 监控： 可观测性与审计 — 运行状态和审计条目的存储位置。 示例： 食谱 — 可复用的 SOP 模式。 运行时契约（当前） SOP 定义从 \u003Cworkspace>\u002Fsops\u002F\u003Csop_name>\u002FSOP.toml 加载，外加可选的 SOP.md。 CLI zeroclaw sop 当前仅管理定义：list、validate、show。 SOP 运行由事件扇入（MQTT\u002Fwebhook\u002Fcron\u002F外围设备）或代理内工具 sop_execute 启动。 运行进度使用工具：sop_status、sop_approve、sop_advance。 SOP 审计记录持久化在配置的内存后端的 sop 类别下。 事件流程 graph LR MQTT[MQTT] -->|主题匹配| Dispatch WH[POST \u002Fsop\u002F* or \u002Fwebhook] -->|路径匹配| Dispatch CRON[调度器] -->|窗口检查| Dispatch GPIO[外围设备] -->|板卡\u002F信号匹配| Dispatch Dispatch --> Engine[SOP 引擎] Engine --> Run[SOP 运行] Run --> Action{动作} Action -->|执行步骤| Agent[代理循环] Action -->|等待审批| Human[操作员] Human -->|sop_approve| Run 入门指南 在 config.toml 中启用 SOP 子系统： [sop] enabled = true sops_dir = \\\"sops\\\" # 省略时默认为 \u003Cworkspace>\u002Fsops 创建 SOP 目录，例如： ~\u002F.zeroclaw\u002Fworkspace\u002Fsops\u002Fdeploy-prod\u002FSOP.toml ~\u002F.zeroclaw\u002Fworkspace\u002Fsops\u002Fdeploy-prod\u002FSOP.md 验证和检查定义： zeroclaw sop list zeroclaw sop validate zeroclaw sop show deploy-prod 通过配置的事件源触发运行，或在代理轮次中使用 sop_execute 手动触发。 有关触发器路由和认证详情，请参见 连接。 生命周期 Run 的生命周期如下。 确定性模式（Deterministic）特殊路径 这是 ZeroClaw SOP 最有价值的设计——不需要 LLM 的自动化流水线： start_deterministic_run() | | run_id 前缀为 \"det-\"（区分于普通 \"run-\"） ▼ resolve_deterministic_action(step, input=Null) | ├─ step.kind == Checkpoint? | yes: persist_deterministic_state() → .state.json | → 返回 CheckpointWait（暂停） | → 人工 resume_deterministic_run() 恢复 | | no: → 返回 DeterministicStep { step, input } ▼ 运行时执行步骤 → 产生 step_output | ▼ advance_deterministic_step(run_id, step_output) | | step_output → 作为下一步的 input（管道！） | run.llm_calls_saved += 1 ← 统计省了多少 LLM 调用 ▼ 下一步... 或完成 | | 完成时：deterministic_savings.total_llm_calls_saved += saved | deterministic_savings.total_runs += 1 断点恢复 — 进程重启后可恢复： - persist_deterministic_state() → {run_id}.state.json 写入 SOP 目录 - 包含：run_id, sop_name, last_completed_step, step_outputs, llm_calls_saved - resume_deterministic_run(state) → 从上次完成的步骤继续 5.3 SOP 连接与事件扇入 我们接下来看看外部事件如何触发 SOP 运行。 ZeroClaw 通过统一的 SOP 调度器（dispatch_sop_event）路由 MQTT\u002Fwebhook\u002Fcron\u002F外围设备事件。 关键行为： 一致的触发器匹配： 所有事件源使用同一个匹配器路径。 运行启动审计： 已启动的运行通过 SopAuditLogger 持久化。 无头安全： 在非代理循环上下文中，ExecuteStep 操作会被记录为待处理（不会静默执行）。 MQTT 集成 配置 在 config.toml 中配置 broker 访问： [channels_config.mqtt] broker_url = \\\"mqtts:\u002F\u002Fbroker.example.com:8883\\\" # 明文使用 mqtt:\u002F\u002F client_id = \\\"zeroclaw-agent-1\\\" topics = [\\\"sensors\u002Falert\\\", \\\"ops\u002Fdeploy\u002F#\\\"] qos = 1 username = \\\"mqtt-user\\\" # 可选 password = \\\"mqtt-password\\\" # 可选 use_tls = true # 必须与 scheme 匹配（mqtts:\u002F\u002F => true） 触发器定义 在 SOP.toml 中： [[triggers]] type = \\\"mqtt\\\" topic = \\\"sensors\u002Falert\\\" condition = \\\"$.severity >= 2\\\" MQTT payload 会被转发到 SOP 事件 payload（event.payload），然后显示在步骤上下文中。 Webhook 集成 端点 POST \u002Fsop\u002F{*rest}：仅 SOP 端点。如果没有 SOP 匹配则返回 404。无 LLM 回退。 POST \u002Fwebhook：聊天端点。首先尝试 SOP 调度；如果不匹配，回退到正常 LLM 流程。 路径匹配与配置的 webhook 触发器路径精确匹配。 示例： SOP 中的触发器路径：path = \\\"\u002Fsop\u002Fdeploy\\\" 匹配请求：POST \u002Fsop\u002Fdeploy 授权 启用配对时（默认），提供： Authorization: Bearer \u003Ctoken>（来自 POST \u002Fpair） 可选第二层：配置 webhook 密钥时提供 X-Webhook-Secret: \u003Csecret> 幂等性 使用： X-Idempotency-Key: \u003Cunique-key> 默认值： TTL：300秒 重复响应：200 OK 带 \\\"status\\\": \\\"duplicate\\\" 幂等性密钥按端点命名空间区分（\u002Fwebhook 和 \u002Fsop\u002F* 分开）。 示例请求 curl -X POST http:\u002F\u002F127.0.0.1:3000\u002Fsop\u002Fdeploy \\ -H \\\"Authorization: Bearer \u003Ctoken>\\\" \\ -H \\\"X-Idempotency-Key: $(uuidgen)\\\" \\ -H \\\"Content-Type: application\u002Fjson\\\" \\ -d '{\\\"message\\\":\\\"deploy-service-a\\\"}' 典型响应： { \\\"status\\\": \\\"accepted\\\", \\\"matched_sops\\\": [\\\"deploy-pipeline\\\"], \\\"source\\\": \\\"sop_webhook\\\", \\\"path\\\": \\\"\u002Fsop\u002Fdeploy\\\" } Cron 集成 调度器使用基于窗口的检查评估缓存的 cron 触发器。 基于窗口： 不会遗漏 (last_check, now] 内的事件。 每个刻度每个表达式最多一次： 如果一个轮询窗口内有多个触发点，仅调度一次。 触发器示例： [[triggers]] type = \\\"cron\\\" expression = \\\"0 0 8 * * *\\\" Cron 表达式支持 5、6 或 7 个字段。 5.4 SOP 食谱 运行时支持的 SOP.toml + SOP.md 格式的实用 SOP 模板。 人在回路部署 SOP.toml： [sop] name = \\\"deploy-prod\\\" description = \\\"带显式审批门控的手动部署\\\" version = \\\"1.0.0\\\" priority = \\\"high\\\" execution_mode = \\\"supervised\\\" max_concurrent = 1 [[triggers]] type = \\\"manual\\\" SOP.md： ## 步骤 1. **验证** — 检查健康指标和发布约束。 - 工具：http_request 2. **部署** — 执行部署命令。 - 工具：shell - 需要确认：true IoT 告警处理器（MQTT） SOP.toml： [sop] name = \\\"high-temp-alert\\\" description = \\\"处理高温遥测告警\\\" version = \\\"1.0.0\\\" priority = \\\"critical\\\" execution_mode = \\\"priority_based\\\" [[triggers]] type = \\\"mqtt\\\" topic = \\\"sensors\u002Ftemp\u002Falert\\\" condition = \\\"$.temperature_c >= 85\\\" SOP.md： ## 步骤 1. **分析** — 读取此 SOP 上下文中的 `Payload:` 部分并确定严重程度。 - 工具：memory_recall 2. **通知** — 发送包含站点\u002F设备\u002F严重程度摘要的告警。 - 工具：pushover 每日摘要（Cron） SOP.toml： [sop] name = \\\"daily-summary\\\" description = \\\"生成每日运营摘要\\\" version = \\\"1.0.0\\\" priority = \\\"normal\\\" execution_mode = \\\"supervised\\\" [[triggers]] type = \\\"cron\\\" expression = \\\"0 9 * * *\\\" SOP.md： ## 步骤 1. **收集日志** — 收集最近的错误和警告。 - 工具：file_read 2. **总结** — 生成简洁的事件和趋势摘要。 - 工具：memory_store 0xFF 参考",18348,{"id":6,"kind":7,"title":11,"summary":13,"image":14,"href":16,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":40},"2026 · 人工智能","#2563eb","16 \u002F 10",[19],{"targetType":8,"targetId":9,"likedByMe":42,"likeCount":43,"commentCount":43,"contentLikeCount":43,"contentCommentCount":43,"sourceLikeCount":43,"sourceCommentCount":43},false,0,[45,52,59,66,73,80,86,93],{"id":46,"kind":7,"title":47,"summary":48,"image":49,"href":50,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":51},"NEWS_ARTICLE:930","基于 vLLM+Nginx 构建负载均衡推理集群","企业内部私有环境部署大模型推理集群时，很容易遇到流量调度混乱、节点负载失衡、会话上下文丢失、接口缺少鉴权防护等一系列问题，单 vLLM 推理节点难以支撑并发请求。本文基于 Ubuntu 22.04 系统环境，搭建 Nginx + vLLM-Semantic-Router + vLLM-Router","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1379525\u002F202609\u002F1379525-20260910165534385-2022408098.png","\u002Fnews\u002F930",[19],{"id":53,"kind":7,"title":54,"summary":55,"image":56,"href":57,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":58},"NEWS_ARTICLE:932","2026年AI编程工具大全，33个主流工具一次看懂","事情是这样的，前两天看到一张图，是某个社区官网的「支持的工具」清单，我数了数，整整31个AI编程工具。 两年前这份清单撑死5个，现在直接31个，而且我居然每一个都认识。。。 干脆整理成一篇，顺手把最近字节的TraeWork和豆包工作也补了进来，凑成33个。 今天给大家推荐一遍，每个工具说说它是干什么","https:\u002F\u002Fimage.kjdaohang.com\u002Fimg\u002F20260909210838518.png","\u002Fnews\u002F932",[19],{"id":60,"kind":7,"title":61,"summary":62,"image":63,"href":64,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":65},"NEWS_ARTICLE:935","[Agent Memory \u002F 强化学习] MemPO源码学习笔记 ---（1）--- 总体","[Agent Memory \u002F 强化学习] MemPO源码学习笔记 （1） 总体 目录[Agent Memory \u002F 强化学习] MemPO源码学习笔记 （1） 总体0x00 概要0x01 基础 &amp; 背景1.1 用RL训练记忆系统的要点1.2 主要难点1.3 主要思路1.4 RL训练方案1.","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202609\u002F1850883-20260906190854637-986949885.jpg","\u002Fnews\u002F935",[19],{"id":67,"kind":7,"title":68,"summary":69,"image":70,"href":71,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":72},"NEWS_ARTICLE:940","LLama-Factory 实现大模型LoRA-SFT微调指南","LLaMA Factory 是一款开源、低代码、一站式大语言与多模态模型微调框架，用于降低大模型的微调落地门槛。框架兼容 Qwen、LLaMA、ChatGLM、LLaVA 等上百款主流开源模型，支持增量预训练、SFT 监督微调、DPO、KTO、ORPO 等多种训练对齐方案，原生集成 LoRA、QLo","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1379525\u002F202609\u002F1379525-20260909140111199-832484524.png","\u002Fnews\u002F940",[19],{"id":74,"kind":7,"title":75,"summary":76,"image":77,"href":78,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":79},"NEWS_ARTICLE:950","每天白嫖 WorkBuddy 100 积分，我让WorkBuddy自己领","有没有小伙伴跟我一样，每天都去白嫖 WorkBuddy 的 100 积分，每天都怕忘记领。 其实我早就开了会员，但还是会有积分焦虑，天天惦记着今天的积分领没领。后来我发现 WorkBuddy 可以自己领积分，今天把这个技能分享给小伙伴们。 Buddy 加油站每天签到领 100 积分，连续签满 7 天","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F2381533\u002F202609\u002F2381533-20260910080820041-1607850292.png","\u002Fnews\u002F950",[19],{"id":81,"kind":7,"title":82,"summary":83,"image":15,"href":84,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":85},"NEWS_ARTICLE:949","AI知识库，是捷径吗？","从信息化到数字化，再到当下的智能化，技术进步带来的效率提升，如果往好处想应该是：节省更多的时间和成本，用来做更多的事情。但从现实的角度看，节流比开源来得容易。","\u002Fnews\u002F949",[19],{"id":87,"kind":7,"title":88,"summary":89,"image":90,"href":91,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":92},"NEWS_ARTICLE:985","机器学习项目：客户分群——K-Means 聚类从选参到业务画像的完整实战","商场用户分群： 一、前言 在商场运营中，面对成千上万的顾客，如果用同一套营销策略对待所有人，效果往往事倍功半。高收入的中年人和月光族的年轻人等等群体，消费习惯和偏好截然不同——这就需要用户分群（Customer Segmentation）：根据用户的年龄、收入、消费行为等特征，将相似的用户归为一类，","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F3775135\u002F202609\u002F3775135-20260908154332888-1132576367.png","\u002Fnews\u002F985",[19],{"id":94,"kind":7,"title":95,"summary":96,"image":97,"href":98,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":99},"NEWS_ARTICLE:986","千问大模型完整RLHF全参数微调指南","大模型微调是实现模型领域定制的核心方案，本文承接《千问大模型二次 LoRA‑SFT 指令微调指南》部分内容，聚焦 Qwen3.5‑Base 纯文本基座全参数微调，完整复现 ChatGPT 风格 RLHF 对齐工程链路，覆盖数据预处理、SFT 监督微调、RM 奖励模型训练、PPO 强化学习、DPO 直","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1379525\u002F202609\u002F1379525-20260908150528296-1541712777.png","\u002Fnews\u002F986",[19]]