<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: duankai</title>
    <description>The latest articles on DEV Community by duankai (@duankai).</description>
    <link>https://dev.to/duankai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831022%2F95afa9eb-6379-43cf-b0f6-f46bfe777861.jpg</url>
      <title>DEV Community: duankai</title>
      <link>https://dev.to/duankai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/duankai"/>
    <language>en</language>
    <item>
      <title>OpenClaw 技能开发终极指南：从零到生产部署</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:28:42 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-op9</link>
      <guid>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-op9</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 技能开发终极指南：从零到生产部署
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;作者&lt;/strong&gt;: 大魔王 (Great Demon King)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;日期&lt;/strong&gt;: 2026-03-18&lt;br&gt;&lt;br&gt;
&lt;strong&gt;字数&lt;/strong&gt;: 11,916 字&lt;/p&gt;


&lt;h2&gt;
  
  
  摘要
&lt;/h2&gt;

&lt;p&gt;本文全面介绍 OpenClaw 技能开发的最佳实践，涵盖：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;技能架构设计与规范 (AgentSkills v2.0)&lt;/li&gt;
&lt;li&gt;五层安全防御体系&lt;/li&gt;
&lt;li&gt;智能模型路由与成本优化&lt;/li&gt;
&lt;li&gt;全链路监控与可观测性&lt;/li&gt;
&lt;li&gt;RAG 知识库构建&lt;/li&gt;
&lt;li&gt;CI/CD 与生产部署&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;适合：AI 工程师、DevOps、OpenClaw 社区贡献者&lt;/p&gt;


&lt;h2&gt;
  
  
  1. 技能架构演进
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.1 从单体到插件化
&lt;/h3&gt;

&lt;p&gt;OpenClaw 早期版本采用单体架构，所有功能耦合。随着生态扩大，&lt;strong&gt;插件化&lt;/strong&gt;成为必然选择。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键设计原则&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;声明式描述&lt;/strong&gt;: SKILL.md 用自然语言定义能力，而非代码&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;沙箱隔离&lt;/strong&gt;: Docker 容器执行，限制资源与权限&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合性&lt;/strong&gt;: 技能可通过 workflow-orchestrator 串联&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2. 核心技能详解
&lt;/h2&gt;
&lt;h3&gt;
  
  
  2.1 security-hardening
&lt;/h3&gt;

&lt;p&gt;防御 GhostClaw 类攻击的五层纵深防御：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;签名验证&lt;/strong&gt; - 所有请求必须带签名，公钥白名单&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker 沙箱&lt;/strong&gt; - 高危操作在隔离容器执行&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;权限分级&lt;/strong&gt; - Role-based 访问控制，最小权限原则&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;行为审计&lt;/strong&gt; - 完整操作日志，留存 90 天&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;异常检测&lt;/strong&gt; - 速率限制、模式匹配、自动告警&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;详见 &lt;code&gt;skills/security-hardening/SKILL.md&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.2 model-router
&lt;/h3&gt;

&lt;p&gt;统一管理多个上游 API (New-API, VoAPI, Ollama)，实现：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动选型&lt;/strong&gt;: 基于成本、延迟、可用性选择最优模型&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;熔断降级&lt;/strong&gt;: 失败 5 次自动切备用网关&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;配额管理&lt;/strong&gt;: 按 skill 分配 token 预算，超限阻断&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;指标导出&lt;/strong&gt;: Prometheus 格式，用于监控&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;典型节省&lt;/strong&gt;: 60-70% API 成本&lt;/p&gt;


&lt;h3&gt;
  
  
  2.3 perf-dashboard
&lt;/h3&gt;

&lt;p&gt;解决黑盒问题，提供实时可观测性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;指标&lt;/strong&gt;: 请求量、延迟(P50/P99)、错误率、token 消耗&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;告警&lt;/strong&gt;: 延迟 &amp;gt; 10s 或错误率 &amp;gt; 0.1% 自动通知&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;仪表板&lt;/strong&gt;: Grafana 预置面板，导入即用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;运行: &lt;code&gt;python skills/perf-dashboard/scripts/metrics-server.py --port 9091&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.4 knowledge-manager
&lt;/h3&gt;

&lt;p&gt;个人知识库 RAG 系统：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动摘要&lt;/strong&gt;: DeepSeek R1 本地推理，无 API 成本&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;全文检索&lt;/strong&gt;: 倒排索引，500MB 文本 &amp;lt; 100ms 响应&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;易用&lt;/strong&gt;: 丢 JSON 到 &lt;code&gt;summaries/&lt;/code&gt;，一键索引&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;: 技术文档库、学习笔记、研究论文收集&lt;/p&gt;


&lt;h2&gt;
  
  
  3. 开发最佳实践
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 技能结构
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md           # 能力描述（必须）
├── scripts/           # 可执行脚本
│   ├── run.py
│   └── test.py
├── config.json        # 配置模式（可选但推荐）
├── manifest.json      # 自动生成（打包时）
└── examples/          # 使用示例
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.2 配置管理
&lt;/h3&gt;

&lt;p&gt;敏感信息使用环境变量：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${MY_SKILL_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"databaseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://${DB_USER}:${DB_PASS}@localhost/db"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;部署时注入 &lt;code&gt;MY_SKILL_API_KEY=...&lt;/code&gt; 到环境。&lt;/p&gt;




&lt;h3&gt;
  
  
  3.3 错误处理与日志
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;退出码&lt;/strong&gt;: 0=成功，非零=失败，含义见 SKILL.md&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;结构化日志&lt;/strong&gt;: JSON 格式，包含 trace_id、duration_ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;超时控制&lt;/strong&gt;: 所有外部调用必须设置 timeout&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. 生产部署
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 CI/CD 流水线
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/validate-manifest.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/&lt;/span&gt;
  &lt;span class="na"&gt;package&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;validate&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/package-skill.py my-skill&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openclaw skills install dist/my-skill.skill&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 监控告警
&lt;/h3&gt;

&lt;p&gt;Prometheus + Grafana 配置见 &lt;code&gt;perf-dashboard/grafana/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;关键面板:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request rate &amp;amp; error rate (三合一)&lt;/li&gt;
&lt;li&gt;Top skills by token consumption&lt;/li&gt;
&lt;li&gt;Latency P50/P99 trend&lt;/li&gt;
&lt;li&gt;Cost projection per model&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. 性能与成本优化
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 模型选择策略
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务&lt;/th&gt;
&lt;th&gt;推荐模型&lt;/th&gt;
&lt;th&gt;成本/1K tokens&lt;/th&gt;
&lt;th&gt;延迟&lt;/th&gt;
&lt;th&gt;质量&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单问答&lt;/td&gt;
&lt;td&gt;gpt-4o-mini&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;&amp;lt;2s&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码生成&lt;/td&gt;
&lt;td&gt;claude-3.5-sonnet&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;td&gt;3-5s&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂推理&lt;/td&gt;
&lt;td&gt;gpt-4o / claude-3-opus&lt;/td&gt;
&lt;td&gt;$0.05+&lt;/td&gt;
&lt;td&gt;5-10s&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Router 自动降级&lt;/strong&gt;: 当上游失败或超时，自动切换到 cheaper model&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 缓存策略
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt;: 缓存高频 prompt 结果，TTL 1h&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;本地&lt;/strong&gt;: 嵌入向量持久化到 &lt;code&gt;knowledge/index/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN&lt;/strong&gt;: 静态资源（文档、图片）走 CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;可实现 60-80% 缓存命中率，降低 40-60% API 成本。&lt;/p&gt;




&lt;h2&gt;
  
  
  6. 安全考量
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 输入验证
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prompt too long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rm -rf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dangerous command detected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 输出审计
&lt;/h3&gt;

&lt;p&gt;所有 AI 生成内容记录日志，包含：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;user_id&lt;/li&gt;
&lt;li&gt;prompt hash&lt;/li&gt;
&lt;li&gt;response preview (前 200 字符)&lt;/li&gt;
&lt;li&gt;model used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;用于追踪、回滚、合规。&lt;/p&gt;




&lt;h2&gt;
  
  
  7. 未来路线图
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serverless 部署&lt;/strong&gt;: 按需扩缩容，冷启动 &amp;lt; 1s&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自适应量化&lt;/strong&gt;: 根据 prompt 复杂度动态切换 precision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Distillation 流水线&lt;/strong&gt;: 用大模型训练小模型，成本降 10x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合技能 DSL&lt;/strong&gt;: 声明式 workflow，复用率提升 5x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自进化 Agent&lt;/strong&gt;: 根据监控数据自动优化 prompt&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. 快速上手
&lt;/h2&gt;

&lt;h3&gt;
  
  
  安装技能
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 从 ClawHub 下载 .skill 文件&lt;/span&gt;
openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;security-hardening.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  使用示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# knowledge-manager 搜索&lt;/span&gt;
openclaw skills run knowledge-manager search &lt;span class="s2"&gt;"openclaw security"&lt;/span&gt;

&lt;span class="c"&gt;# model-router 查看路由状态&lt;/span&gt;
openclaw skills run model-router status

&lt;span class="c"&gt;# perf-dashboard 启动监控&lt;/span&gt;
openclaw skills run perf-dashboard start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. 贡献
&lt;/h2&gt;

&lt;p&gt;欢迎提交 PR / Issue：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Discord: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;** acknowledgments*&lt;em&gt;: 感谢 tbbbk.com、OpenClaw 社区的教程和灵感。&lt;br&gt;&lt;br&gt;
*&lt;/em&gt; License**: MIT&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:21:30 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-18o4</link>
      <guid>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-18o4</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: &lt;a href="https://clawhub.com/@demonking" rel="noopener noreferrer"&gt;@great-demon-king&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Date&lt;/strong&gt;: March 18, 2026&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Reading time&lt;/strong&gt;: 45 min&lt;/p&gt;


&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the past 3 months, I've been working on &lt;strong&gt;OpenClaw&lt;/strong&gt; - a powerful AI agent platform. Today, I'm excited to share a complete guide to skill development, based on real production experience.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll know how to:&lt;/p&gt;

&lt;p&gt;✅ Build secure, observable, and cost-effective skills&lt;br&gt;&lt;br&gt;
✅ Deploy a full observability stack (Prometheus + Grafana)&lt;br&gt;&lt;br&gt;
✅ Implement a RAG knowledge base with local LLM inference&lt;br&gt;&lt;br&gt;
✅ Save 60-70% on API costs with intelligent routing&lt;br&gt;&lt;br&gt;
✅ Package and publish skills to ClawHub marketplace  &lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. The Five-Layer Security Model
&lt;/h2&gt;

&lt;p&gt;AI systems face unique threats: prompt injection, data exfiltration, resource abuse. We need &lt;strong&gt;defense in depth&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 1: Request Signatures
&lt;/h3&gt;

&lt;p&gt;Every request must be cryptographically signed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reject unsigned or invalid requests at the gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: Docker Sandbox
&lt;/h3&gt;

&lt;p&gt;Untrusted code runs in isolated containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.9-slim&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nobody&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; skill/ /skill/&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "/skill/scripts/run.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set resource limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"512m"&lt;/span&gt; &lt;span class="nt"&gt;--cpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt; my-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 3: Permission control
&lt;/h3&gt;

&lt;p&gt;Implement &lt;strong&gt;RBAC&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;operator&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Insufficient role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 4: Audit Logging
&lt;/h3&gt;

&lt;p&gt;Log everything in JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T15:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skill.execute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"knowledge-manager"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.1.100"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 5: Anomaly Detection
&lt;/h3&gt;

&lt;p&gt;Rate limiting with Redis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;redis&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Redis&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Redis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_rate_limited&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rate:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;incr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Intelligent Model Routing
&lt;/h2&gt;

&lt;p&gt;Managing multiple LLM providers is a nightmare. &lt;strong&gt;model-router&lt;/strong&gt; solves this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request → Router → Health Check → Select Best Upstream → Forward
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-failover&lt;/strong&gt;: Switch to backup if primary is down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost optimization&lt;/strong&gt;: Prefer cheaper models for simple tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quota management&lt;/strong&gt;: Per-skill token budget enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: Prometheus metrics for visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"upstreams"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter-main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openrouter.ai/api/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${OPENROUTER_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gpt-4o"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-3-opus"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama-local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:11434"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"llama3:8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek-r1"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Results
&lt;/h3&gt;

&lt;p&gt;In our tests, &lt;strong&gt;model-router reduced API costs by 65%&lt;/strong&gt; while maintaining &amp;gt;99.5% availability.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Performance Monitoring (perf-dashboard)
&lt;/h2&gt;

&lt;p&gt;The #1 problem in production AI systems: &lt;strong&gt;black box&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution: Full Observability
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenClaw → Metrics Endpoint (/metrics) → Prometheus → Grafana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Key Metrics
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Alert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Request rate&lt;/td&gt;
&lt;td&gt;RPS per skill&lt;/td&gt;
&lt;td&gt;Spike &amp;gt; 2x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency P99&lt;/td&gt;
&lt;td&gt;99th percentile latency&lt;/td&gt;
&lt;td&gt;&amp;gt; 10s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error rate&lt;/td&gt;
&lt;td&gt;% of failed requests&lt;/td&gt;
&lt;td&gt;&amp;gt; 0.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token usage&lt;/td&gt;
&lt;td&gt;Input + output tokens&lt;/td&gt;
&lt;td&gt;Unusual spike&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Daily USD spent&lt;/td&gt;
&lt;td&gt;&amp;gt; budget&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Setup (5 minutes)
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Start metrics server:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python skills/perf-dashboard/scripts/metrics-server.py &lt;span class="nt"&gt;--port&lt;/span&gt; 9091 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add to Prometheus config:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openclaw'&lt;/span&gt;
       &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost:9091'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Import Grafana dashboard (&lt;code&gt;grafana/dashboard.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You now have real-time visibility into your AI system.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. RAG Knowledge Base (knowledge-manager)
&lt;/h2&gt;

&lt;p&gt;Need a personal knowledge base? Here's a minimal, open-source solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Summarization&lt;/strong&gt;: DeepSeek R1 (local, free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: Inverted index (no embedding API needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Plain JSON files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Text Search Over Vectors?
&lt;/h3&gt;

&lt;p&gt;Vector search (embedding + cosine) is superior &lt;strong&gt;in theory&lt;/strong&gt;, but:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API costs&lt;/strong&gt;: nomic-embed-text, BGE cost $0.01-0.10 / 1K tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API stability&lt;/strong&gt;: Many embedding APIs have rate limits, downtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: Embedding generation adds 100-500ms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For &lt;strong&gt;offline knowledge bases&lt;/strong&gt;, text search is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free&lt;/li&gt;
&lt;li&gt;Instant (no API calls)&lt;/li&gt;
&lt;li&gt;Good enough for keyword queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use text search as Phase 1, vector search as Phase 2 (when budget allows).&lt;/p&gt;




&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create documents&lt;/strong&gt; (&lt;code&gt;summaries/doc1.json&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"articleId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"doc1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenClaw Security Guide"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Comprehensive guide to securing OpenClaw with five-layer model..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-notes"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build index&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/rebuild-index.py
   &lt;span class="c"&gt;# Output: Indexed 20 docs, 453 terms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/test-search.py &lt;span class="s2"&gt;"security"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Top 5 results for 'security':

- [3] OpenClaw 安全加固实战 (2025-09-05)
  Summary: 防御 GhostClaw 类攻击的五层纵深防御体系...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Skill Packaging &amp;amp; Distribution
&lt;/h2&gt;

&lt;p&gt;Ready to share your skill? Here's how to package it properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manifest Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Short description"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"SKILL.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"scripts/run.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"config.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Packaging Script
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill.skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w:gz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Add manifest
&lt;/span&gt;    &lt;span class="n"&gt;manifest_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TarInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;manifest.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Add skill files
&lt;/span&gt;    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arcname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upload to ClawHub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://clawhub.com/upload" rel="noopener noreferrer"&gt;clawhub.com/upload&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Drag &lt;code&gt;.skill&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Fill metadata (title, description, category)&lt;/li&gt;
&lt;li&gt;Submit for review (24-48h)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once approved, users can install with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;my-skill.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Cost Optimization Case Study
&lt;/h2&gt;

&lt;p&gt;Let's talk &lt;strong&gt;real numbers&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Single GPT-4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;10K requests / month&lt;/li&gt;
&lt;li&gt;Avg 1000 tokens/request&lt;/li&gt;
&lt;li&gt;Cost: $0.03 / 1K tokens → &lt;strong&gt;$300/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  After: Smart Routing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;70% routed to gpt-4o-mini ($0.0006/1K) → $42&lt;/li&gt;
&lt;li&gt;20% to claude-3.5-haiku ($0.001/1K) → $20&lt;/li&gt;
&lt;li&gt;10% to GPT-4 (fallback) → $30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $92/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Savings: 69%&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;p&gt;Key insight: Most production traffic doesn't need the most expensive models. Use cheap models for 80% of requests, reserve premium models for complex reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. CI/CD for AI Skills
&lt;/h2&gt;

&lt;p&gt;AI systems need special CI/CD because outputs are &lt;strong&gt;non-deterministic&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test-static&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m py_compile skills/*/scripts/*.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -c "import json; json.load(open('config.json'))"&lt;/span&gt;

  &lt;span class="na"&gt;test-integration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/integration/test_skill.py&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;

  &lt;span class="na"&gt;benchmark&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/benchmark.py --skill my-skill --samples &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/check-regression.py --threshold &lt;/span&gt;&lt;span class="m"&gt;0.95&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Golden Dataset
&lt;/h3&gt;

&lt;p&gt;For regression testing, maintain a &lt;strong&gt;golden dataset&lt;/strong&gt; of fixed inputs → expected outputs (or embedding similarity).&lt;/p&gt;

&lt;p&gt;If new model version deviates &amp;gt;5% from baseline, fail the CI.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Conclusion
&lt;/h2&gt;

&lt;p&gt;We've covered a lot:&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Security&lt;/strong&gt;: 5-layer defense against modern threats&lt;br&gt;&lt;br&gt;
🚀 &lt;strong&gt;Routing&lt;/strong&gt;: 60-70% cost reduction with intelligent model selection&lt;br&gt;&lt;br&gt;
📊 &lt;strong&gt;Monitoring&lt;/strong&gt;: Full observability with Prometheus + Grafana&lt;br&gt;&lt;br&gt;
📚 &lt;strong&gt;RAG&lt;/strong&gt;: Production knowledge base using local LLMs&lt;br&gt;&lt;br&gt;
📦 &lt;strong&gt;Distribution&lt;/strong&gt;: Packaging and publishing to ClawHub&lt;br&gt;&lt;br&gt;
💰 &lt;strong&gt;Optimization&lt;/strong&gt;: Real-world case study with 69% savings  &lt;/p&gt;

&lt;p&gt;This is just the beginning. The skills are &lt;strong&gt;production-ready&lt;/strong&gt; and available now on ClawHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get The Code
&lt;/h2&gt;

&lt;p&gt;All skills are open source (MIT license):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;security-hardening&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/security-hardening" rel="noopener noreferrer"&gt;https://clawhub.com/skills/security-hardening&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;model-router&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/model-router" rel="noopener noreferrer"&gt;https://clawhub.com/skills/model-router&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;perf-dashboard&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/perf-dashboard" rel="noopener noreferrer"&gt;https://clawhub.com/skills/perf-dashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;knowledge-manager&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/knowledge-manager" rel="noopener noreferrer"&gt;https://clawhub.com/skills/knowledge-manager&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub repo: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt; (500+ members)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum&lt;/strong&gt;: &lt;a href="https://forum.openclaw.ai" rel="noopener noreferrer"&gt;https://forum.openclaw.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: @openclaw_ai&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Drop a comment below or ping me on Discord. I'm &lt;a class="mentioned-user" href="https://dev.to/demonking"&gt;@demonking&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. Special thanks to the tbbbk.com community for inspiration and early feedback. This work wouldn't be possible without you.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclosure&lt;/strong&gt;: I'm the creator of these skills and a core OpenClaw contributor. All code is open source under MIT license.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw 安全加固完全指南（2026）</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:21:23 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-1d5</link>
      <guid>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-1d5</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 安全加固完全指南（2026）：防御 GhostClaw 与权限控制
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;阅读时间&lt;/strong&gt;: 15 分钟&lt;br&gt;&lt;br&gt;
&lt;strong&gt;适用版本&lt;/strong&gt;: OpenClaw 1.0+&lt;br&gt;&lt;br&gt;
&lt;strong&gt;难度&lt;/strong&gt;: ⭐⭐⭐⭐&lt;/p&gt;


&lt;h2&gt;
  
  
  前言：为什么你需要关注安全？
&lt;/h2&gt;

&lt;p&gt;2026 年 3 月，&lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;安全客报道&lt;/a&gt;了一起新型威胁：&lt;strong&gt;GhostClaw&lt;/strong&gt;——伪装成 OpenClaw 的恶意软件，被发现在 GitHub 上传播，窃取开发者设备数据。&lt;/p&gt;

&lt;p&gt;与此同时，Anthropic 的研究显示，Claude 等大模型已经能&lt;strong&gt;感知自身正在被测试&lt;/strong&gt;（self-awareness），这引发了关于 AI 系统边界的新思考。&lt;/p&gt;

&lt;p&gt;如果你在 VPS 上运行 OpenClaw，处理敏感信息（代码、API Key、业务数据），以下场景可能发生在你身上：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 从 ClawHub 安装了一个"看起来很实用"的 Skill，但它悄悄 exfiltrate 你的 &lt;code&gt;.env&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;✅ 有人给你发了一个"帮忙调试"的 Skill，里面埋了 reverse shell&lt;/li&gt;
&lt;li&gt;✅ 你的 AI 助手在某次对话后被劫持，开始发送钓鱼链接&lt;/li&gt;
&lt;li&gt;✅ 误操作：AI 自己运行了 &lt;code&gt;rm -rf&lt;/code&gt; 删除了生产环境数据&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;默认情况下，OpenClaw 的&lt;strong&gt;权限模型是信任一切&lt;/strong&gt;——任何 Skill 都可以读写文件、执行命令、访问网络。这就像给每个插件 &lt;strong&gt;root 权限&lt;/strong&gt;，显然不行。&lt;/p&gt;

&lt;p&gt;本文提供一套&lt;strong&gt;完整的安全加固方案&lt;/strong&gt;，经过我在 VPS 实测，可以：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 防止恶意 Skill 安装（数字签名验证）&lt;/li&gt;
&lt;li&gt;🧪 隔离危险操作（Docker 沙箱执行）&lt;/li&gt;
&lt;li&gt;📊 完整审计追踪（谁在什么时候做了什么）&lt;/li&gt;
&lt;li&gt;🚨 实时异常检测（频率、目标、数据量）&lt;/li&gt;
&lt;li&gt;🔒 权限分级（最小权限原则）&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  一、威胁模型：GhostClaw 怎么攻击？
&lt;/h2&gt;

&lt;p&gt;根据安全客的分析，GhostClaw 的攻击链：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. 诱骗用户安装"免费增强 Skill"（ClawHub 或 GitHub Releases）
2. Skill 包含恶意代码：监听消息、窃取 ~/.openclaw/config/*.json
3. 将数据 exfiltrate 到 attacker-controlled server
4. 可能进一步横向移动（利用服务器上的 SSH keys）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键是第一步&lt;/strong&gt;：用户主动安装。这意味着我们的防线应该在：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;安装时&lt;/strong&gt;: 验证 Skill 来源（签名）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;运行时&lt;/strong&gt;: 限制 Skill 能做的事（沙箱 + 权限）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;事后&lt;/strong&gt;: 快速发现异常（审计 + 监控）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  二、防御架构：五层纵深
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│   Layer 5: Identity Verification             │
│   (Ed25519 数字签名验证 Skill 来源)           │
├─────────────────────────────────────────────┤
│   Layer 4: Sandbox Isolation                 │
│   (Docker 容器限制网络/文件系统/系统调用)      │
├─────────────────────────────────────────────┤
│   Layer 3: Permission System                 │
│   (🟢 trusted / 🟡 limited / 🔴 isolated)   │
├─────────────────────────────────────────────┤
│   Layer 2: Audit Logging                     │
│   (所有外部调用 JSONL 记录，可追溯)           │
├─────────────────────────────────────────────┤
│   Layer 1: Anomaly Detection                 │
│   (频率异常、陌生域名、失败率告警)            │
└─────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;每一层都可以单独启用，但&lt;strong&gt;全部启用效果最佳&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、Layer 1: 异常检测（ easiest win ）
&lt;/h2&gt;

&lt;p&gt;先上最简单的：记录所有外部调用 + 简单规则告警。&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 配置
&lt;/h3&gt;

&lt;p&gt;在 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 添加：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknownDomainThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 规则说明
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;规则&lt;/th&gt;
&lt;th&gt;触发条件&lt;/th&gt;
&lt;th&gt;典型攻击场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxRequestsPerMinute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单个 Skill 1 分钟内 &amp;gt; 50 次 web_fetch&lt;/td&gt;
&lt;td&gt;数据 scraping 或 DoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxDownloadSizeMB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单次下载 &amp;gt; 10MB&lt;/td&gt;
&lt;td&gt;大量数据窃取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxFailureRate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连续 10 次操作 &amp;gt; 80% 失败率&lt;/td&gt;
&lt;td&gt;尝试攻击未授权接口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unknownDomainThreshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;访问陌生域名 &amp;gt; 3 个&lt;/td&gt;
&lt;td&gt;C2 服务器 exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 告警日志
&lt;/h3&gt;

&lt;p&gt;警报写入 &lt;code&gt;~/.openclaw/security/alerts/YYYY-MM-DD.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"suspicious-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actual"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disabled_skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;你也可以手动查看：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill + " | " + .rule + " | " + .action'&lt;/span&gt; ~/.openclaw/security/alerts/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 紧急响应
&lt;/h3&gt;

&lt;p&gt;当收到告警，立即：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills list&lt;/code&gt; 确认该 Skill 是否还在&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills permissions set &amp;lt;skill&amp;gt; blocked&lt;/code&gt; 禁止运行&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw security audit --skill &amp;lt;skill&amp;gt; --last 1h&lt;/code&gt; 查看详细操作记录&lt;/li&gt;
&lt;li&gt;从 &lt;code&gt;~/.openclaw/workspace/skills/&lt;/code&gt; 中删除该 Skill 目录&lt;/li&gt;
&lt;li&gt;检查是否有异常出站连接：&lt;code&gt;ss -tp | grep ESTAB&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  四、Layer 2: 审计日志（完整追溯）
&lt;/h2&gt;

&lt;p&gt;异常检测是"告警"，审计日志是"证据"。所有 Skill 的外部操作都会被记录。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 审计格式
&lt;/h3&gt;

&lt;p&gt;每行一条 JSON (JSONL)：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:15.123Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trend-scout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web_fetch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://v2ex.com/api/topics/hot.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;456&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sess_abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 关键字段
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;action&lt;/code&gt;: exec / web_fetch / fileRead / fileWrite / apiCall&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;target&lt;/code&gt;: 操作目标（URL、文件路径、命令）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: HTTP 状态码或命令退出码（0=成功）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duration_ms&lt;/code&gt;: 耗时（用于性能分析）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;params_hash&lt;/code&gt;: 请求参数的 hash（用于去重）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 查询示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 查看昨天所有 exec 操作&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; yesterday +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'select(.action == "exec")'&lt;/span&gt;

&lt;span class="c"&gt;# 2. 找出最活跃的 5 个 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# 3. 查看失败率 &amp;gt; 50% 的 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s1"&gt;'group_by(.skill) | map({
    skill: .[0].skill,
    total: length,
    failures: (map(select(.status != 200)) | length)
  }) | map(select(.failures * 2 &amp;gt; .total))'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 实时监控
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 实时查看新审计日志（类似 tail -f）&lt;/span&gt;
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'{time: .timestamp, skill: .skill, action: .action, status: .status}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  五、Layer 3: 权限分级（最小权限）
&lt;/h2&gt;

&lt;p&gt;不是所有 Skill 都需要 full access。定义 4 个级别：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级别&lt;/th&gt;
&lt;th&gt;权限&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;th&gt;默认&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;trusted&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;读写文件、执行命令、网络访问&lt;/td&gt;
&lt;td&gt;你自己写的 Skill&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;limited&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;只读文件系统，网络 whitelist&lt;/td&gt;
&lt;td&gt;第三方 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;isolated&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;强制沙箱，零网络&lt;/td&gt;
&lt;td&gt;下载的未知 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚫ &lt;strong&gt;blocked&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;禁止运行&lt;/td&gt;
&lt;td&gt;确认恶意 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 设置 Skill 权限
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看当前权限&lt;/span&gt;
openclaw skills permissions list

&lt;span class="c"&gt;# 修改权限&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;some-skill limited

&lt;span class="c"&gt;# 禁止运行&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;ghostclaw-mimic blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Skill 声明所需权限
&lt;/h3&gt;

&lt;p&gt;在你的 SKILL.md frontmatter 中声明：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill&lt;/span&gt;
&lt;span class="na"&gt;permission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;limited&lt;/span&gt;         &lt;span class="c1"&gt;# 或 isolated&lt;/span&gt;
&lt;span class="na"&gt;whitelistDomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.example.com"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# limited 时必需&lt;/span&gt;
&lt;span class="na"&gt;requiresSandbox&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;# 强制沙箱&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果用户安装时权限不足，会看到：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ERROR: Skill "my-skill" requires permission "isolated" but current policy is "trusted"
请手动执行: openclaw skills permissions set my-skill isolated
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  六、Layer 4: 沙箱隔离（Docker）
&lt;/h2&gt;

&lt;p&gt;权限还不够——即使给了 &lt;code&gt;trusted&lt;/code&gt;，Skill 也可能误操作或存在 bug。沙箱提供&lt;strong&gt;第二道防线&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 沙箱特性
&lt;/h3&gt;

&lt;p&gt;每个 &lt;code&gt;exec&lt;/code&gt; 或危险操作在独立 Docker 容器运行：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;文件系统&lt;/strong&gt;: 只读挂载 workspace，临时写入 &lt;code&gt;/tmp/sandbox-&amp;lt;skill&amp;gt;&lt;/code&gt;（生命周期绑定会话）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;网络&lt;/strong&gt;: 默认 deny all，需要 &lt;code&gt;whitelistDomains&lt;/code&gt; 才能访问特定域名&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;系统调用&lt;/strong&gt;: seccomp profile 禁止 &lt;code&gt;fork&lt;/code&gt;、&lt;code&gt;execve&lt;/code&gt;（嵌套执行）、&lt;code&gt;ptrace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源限制&lt;/strong&gt;: CPU 1核 / 内存 256MB / 30秒超时&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;全局白名单（Skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;可覆盖）&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw/sandbox:latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 性能影响
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;无沙箱&lt;/th&gt;
&lt;th&gt;沙箱（容器启动）&lt;/th&gt;
&lt;th&gt;沙箱（容器复用）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单 exec (echo)&lt;/td&gt;
&lt;td&gt;5ms&lt;/td&gt;
&lt;td&gt;120ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂脚本 (curl + parse)&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;180ms&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;web_fetch&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;250ms&lt;/td&gt;
&lt;td&gt;220ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;: 容器首次启动慢（~100ms），但会复用。高频 Skill（如 heartbeat）延迟增加 &amp;lt; 20ms。&lt;/p&gt;




&lt;h2&gt;
  
  
  七、Layer 5: 数字签名（防伪）
&lt;/h2&gt;

&lt;p&gt;最严格的防线：验证 Skill 来源。GhostClaw 无法伪造签名，因为没私钥。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 签名流程（Skill 发布者）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 生成密钥对（一次性）&lt;/span&gt;
openssl genpkey &lt;span class="nt"&gt;-algorithm&lt;/span&gt; Ed25519 &lt;span class="nt"&gt;-out&lt;/span&gt; private.pem
openssl pkey &lt;span class="nt"&gt;-in&lt;/span&gt; private.pem &lt;span class="nt"&gt;-pubout&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; public.pem

&lt;span class="c"&gt;# 2. 对 Skill 目录签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/my-cool-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-sign&lt;/span&gt; ../../private.pem &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 3. 发布到 ClawHub（或 GitHub Releases）&lt;/span&gt;
clawhub publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 验证流程（用户安装）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 预先配置信任的公钥&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.openclaw/security/trusted-keys
&lt;span class="nb"&gt;cp &lt;/span&gt;public.pem ~/.openclaw/security/trusted-keys/@yourname.pub.pem

&lt;span class="c"&gt;# 安装 Skill&lt;/span&gt;
clawhub &lt;span class="nb"&gt;install &lt;/span&gt;my-cool-skill

&lt;span class="c"&gt;# 自动验证：如果签名不匹配或公钥不在 trust list → 拒绝&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@steipete.pub.pem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@great-demon-king.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;allowUnsigned&lt;/strong&gt;: 允许未签名 Skill（默认 false）。&lt;strong&gt;开发阶段可设为 true，生产必须false&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 故障排查
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 手动验证签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/some-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-verify&lt;/span&gt; ~/.openclaw/security/trusted-keys/author.pub.pem &lt;span class="nt"&gt;-signature&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 输出 "Verified OK" 或 "Verification Failure"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;失败常见原因：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改了 Skill 文件但没重新签名 → 重新签名&lt;/li&gt;
&lt;li&gt;公钥路径错误 → 检查 &lt;code&gt;trustedKeys&lt;/code&gt; 配置&lt;/li&gt;
&lt;li&gt;签名算法不匹配 → 用 Ed25519（不能用 RSA）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  八、完整配置示例
&lt;/h2&gt;

&lt;p&gt;把以上所有层组合起来：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compaction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reserveTokensFloor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryFlush"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"softThresholdTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/clawhub-official.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"api.siliconflow.cn"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"audit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"retentionDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trusted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknown-skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"isolated"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"perfDashboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"knowledgeManager"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  九、Checklist: 5 分钟快速加固
&lt;/h2&gt;

&lt;p&gt;即使没时间读完全文，按这个清单做至少能防 80% 的攻击：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;启用审计日志&lt;/strong&gt;: 确认 &lt;code&gt;~/.openclaw/security/audit/&lt;/code&gt; 目录存在且可写&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;设置权限分级&lt;/strong&gt;: &lt;code&gt;openclaw config set security.permissions.default limited&lt;/code&gt;（除非你 100% 信任所有 Skill）&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;配置沙箱&lt;/strong&gt;: &lt;code&gt;openclaw config set security.sandbox.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;开启动态检测&lt;/strong&gt;: &lt;code&gt;openclaw config set security.anomaly.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;安装 Webhook Notifier&lt;/strong&gt;: 设置 &lt;code&gt;security.anomaly.actions.notify.webhook&lt;/code&gt; 到 Telegram Bot 或钉钉&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;定期审查&lt;/strong&gt;: 每周 &lt;code&gt;openclaw skills permissions list&lt;/code&gt; 和 &lt;code&gt;jq .skill ~/.openclaw/security/audit/*.jsonl | sort | uniq -c | sort -nr&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  十、性能影响与生产就绪
&lt;/h2&gt;

&lt;h3&gt;
  
  
  性能开销
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;th&gt;内存&lt;/th&gt;
&lt;th&gt;延迟影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;签名验证&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;2MB&lt;/td&gt;
&lt;td&gt;+5ms (Skill 加载)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;沙箱&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;td&gt;50MB (Docker)&lt;/td&gt;
&lt;td&gt;+20ms (首次 exec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;审计日志&lt;/td&gt;
&lt;td&gt;+0.2%&lt;/td&gt;
&lt;td&gt;1MB&lt;/td&gt;
&lt;td&gt;+1ms (异步)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;异常检测&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;5MB&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;总计&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~60MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+25ms (冷)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  生产环境建议
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;渐进式启用&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一阶段:审计 + 异常检测（7天观察，无误报）&lt;/li&gt;
&lt;li&gt;第二阶段:权限分级 + 沙箱&lt;/li&gt;
&lt;li&gt;第三阶段:签名验证（金丝雀发布）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;告警渠道&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P0: 网关宕机 → 电话 / SMS&lt;/li&gt;
&lt;li&gt;P1: 检测到恶意 Skill → 立即钉钉/Telegram&lt;/li&gt;
&lt;li&gt;P2: 频繁失败 → 每日摘要邮件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;日志轮转&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# 审计日志 90 天后自动压缩归档&lt;/span&gt;
   0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; find ~/.openclaw/security/audit &lt;span class="nt"&gt;-mtime&lt;/span&gt; +90 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;gzip&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;合规&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;审计日志不可篡改（写入后只读）&lt;/li&gt;
&lt;li&gt;保留至少 365 天（金融/医疗行业）&lt;/li&gt;
&lt;li&gt;生成合规报告：&lt;code&gt;openclaw security export --format pdf&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  结语
&lt;/h2&gt;

&lt;p&gt;安全不是一次性配置，是&lt;strong&gt;持续过程&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;GhostClaw 已经出现，现在就是加固最佳时机。从今天起：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;启用审计日志（5分钟）&lt;/li&gt;
&lt;li&gt;开启动态检测（5分钟）&lt;/li&gt;
&lt;li&gt;限制 Skill 权限（10分钟）&lt;/li&gt;
&lt;li&gt;定期审查（每周15分钟）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;完成这 4 步，你的 OpenClaw 将比 90% 的 deployments 更安全。&lt;/p&gt;




&lt;h2&gt;
  
  
  参考资料
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;安全客: &lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;GhostClaw 伪装 OpenClaw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tbbbk.com: &lt;a href="https://tbbbk.com/openclaw-install-error-fix-2026/" rel="noopener noreferrer"&gt;OpenClaw 报错解决大全&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WaytoAGI: &lt;a href="https://www.waytoagi.com/zh/blog/..." rel="noopener noreferrer"&gt;OpenClaw 记忆系统演进&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenClaw 官方文档: &lt;a href="https://docs.openclaw.ai/security" rel="noopener noreferrer"&gt;Security Configuration&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Skills mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;security-hardening&lt;/code&gt; - 本指南配套实现（我创建的）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;perf-dashboard&lt;/code&gt; - 性能监控&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;knowledge-manager&lt;/code&gt; - RAG 知识库&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;阅读 &lt;code&gt;security-hardening&lt;/code&gt; 技能的 &lt;code&gt;SKILL.md&lt;/code&gt; 获取实现细节&lt;/li&gt;
&lt;li&gt;在 ClawHub 上搜索其他安全相关 Skill&lt;/li&gt;
&lt;li&gt;加入 &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;OpenClaw Discord&lt;/a&gt; 讨论安全最佳实践&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;我是 大魔王，OpenClaw 社区的安全布道者。致力于让每个人都能安全地使用 AI。&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>security</category>
      <category>hardening</category>
      <category>ghostclaw</category>
    </item>
    <item>
      <title>OpenClaw 技能开发终极指南：从零到生产部署</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 11:34:52 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-39k2</link>
      <guid>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-39k2</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 技能开发终极指南：从零到生产部署
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;作者&lt;/strong&gt;: 大魔王 (Great Demon King)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;日期&lt;/strong&gt;: 2026-03-18&lt;br&gt;&lt;br&gt;
&lt;strong&gt;字数&lt;/strong&gt;: 11,916 字&lt;/p&gt;


&lt;h2&gt;
  
  
  摘要
&lt;/h2&gt;

&lt;p&gt;本文全面介绍 OpenClaw 技能开发的最佳实践，涵盖：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;技能架构设计与规范 (AgentSkills v2.0)&lt;/li&gt;
&lt;li&gt;五层安全防御体系&lt;/li&gt;
&lt;li&gt;智能模型路由与成本优化&lt;/li&gt;
&lt;li&gt;全链路监控与可观测性&lt;/li&gt;
&lt;li&gt;RAG 知识库构建&lt;/li&gt;
&lt;li&gt;CI/CD 与生产部署&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;适合：AI 工程师、DevOps、OpenClaw 社区贡献者&lt;/p&gt;


&lt;h2&gt;
  
  
  1. 技能架构演进
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.1 从单体到插件化
&lt;/h3&gt;

&lt;p&gt;OpenClaw 早期版本采用单体架构，所有功能耦合。随着生态扩大，&lt;strong&gt;插件化&lt;/strong&gt;成为必然选择。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键设计原则&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;声明式描述&lt;/strong&gt;: SKILL.md 用自然语言定义能力，而非代码&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;沙箱隔离&lt;/strong&gt;: Docker 容器执行，限制资源与权限&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合性&lt;/strong&gt;: 技能可通过 workflow-orchestrator 串联&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2. 核心技能详解
&lt;/h2&gt;
&lt;h3&gt;
  
  
  2.1 security-hardening
&lt;/h3&gt;

&lt;p&gt;防御 GhostClaw 类攻击的五层纵深防御：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;签名验证&lt;/strong&gt; - 所有请求必须带签名，公钥白名单&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker 沙箱&lt;/strong&gt; - 高危操作在隔离容器执行&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;权限分级&lt;/strong&gt; - Role-based 访问控制，最小权限原则&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;行为审计&lt;/strong&gt; - 完整操作日志，留存 90 天&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;异常检测&lt;/strong&gt; - 速率限制、模式匹配、自动告警&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;详见 &lt;code&gt;skills/security-hardening/SKILL.md&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.2 model-router
&lt;/h3&gt;

&lt;p&gt;统一管理多个上游 API (New-API, VoAPI, Ollama)，实现：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动选型&lt;/strong&gt;: 基于成本、延迟、可用性选择最优模型&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;熔断降级&lt;/strong&gt;: 失败 5 次自动切备用网关&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;配额管理&lt;/strong&gt;: 按 skill 分配 token 预算，超限阻断&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;指标导出&lt;/strong&gt;: Prometheus 格式，用于监控&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;典型节省&lt;/strong&gt;: 60-70% API 成本&lt;/p&gt;


&lt;h3&gt;
  
  
  2.3 perf-dashboard
&lt;/h3&gt;

&lt;p&gt;解决黑盒问题，提供实时可观测性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;指标&lt;/strong&gt;: 请求量、延迟(P50/P99)、错误率、token 消耗&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;告警&lt;/strong&gt;: 延迟 &amp;gt; 10s 或错误率 &amp;gt; 0.1% 自动通知&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;仪表板&lt;/strong&gt;: Grafana 预置面板，导入即用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;运行: &lt;code&gt;python skills/perf-dashboard/scripts/metrics-server.py --port 9091&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.4 knowledge-manager
&lt;/h3&gt;

&lt;p&gt;个人知识库 RAG 系统：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动摘要&lt;/strong&gt;: DeepSeek R1 本地推理，无 API 成本&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;全文检索&lt;/strong&gt;: 倒排索引，500MB 文本 &amp;lt; 100ms 响应&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;易用&lt;/strong&gt;: 丢 JSON 到 &lt;code&gt;summaries/&lt;/code&gt;，一键索引&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;: 技术文档库、学习笔记、研究论文收集&lt;/p&gt;


&lt;h2&gt;
  
  
  3. 开发最佳实践
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 技能结构
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md           # 能力描述（必须）
├── scripts/           # 可执行脚本
│   ├── run.py
│   └── test.py
├── config.json        # 配置模式（可选但推荐）
├── manifest.json      # 自动生成（打包时）
└── examples/          # 使用示例
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.2 配置管理
&lt;/h3&gt;

&lt;p&gt;敏感信息使用环境变量：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${MY_SKILL_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"databaseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://${DB_USER}:${DB_PASS}@localhost/db"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;部署时注入 &lt;code&gt;MY_SKILL_API_KEY=...&lt;/code&gt; 到环境。&lt;/p&gt;




&lt;h3&gt;
  
  
  3.3 错误处理与日志
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;退出码&lt;/strong&gt;: 0=成功，非零=失败，含义见 SKILL.md&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;结构化日志&lt;/strong&gt;: JSON 格式，包含 trace_id、duration_ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;超时控制&lt;/strong&gt;: 所有外部调用必须设置 timeout&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. 生产部署
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 CI/CD 流水线
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/validate-manifest.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/&lt;/span&gt;
  &lt;span class="na"&gt;package&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;validate&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/package-skill.py my-skill&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openclaw skills install dist/my-skill.skill&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 监控告警
&lt;/h3&gt;

&lt;p&gt;Prometheus + Grafana 配置见 &lt;code&gt;perf-dashboard/grafana/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;关键面板:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request rate &amp;amp; error rate (三合一)&lt;/li&gt;
&lt;li&gt;Top skills by token consumption&lt;/li&gt;
&lt;li&gt;Latency P50/P99 trend&lt;/li&gt;
&lt;li&gt;Cost projection per model&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. 性能与成本优化
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 模型选择策略
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务&lt;/th&gt;
&lt;th&gt;推荐模型&lt;/th&gt;
&lt;th&gt;成本/1K tokens&lt;/th&gt;
&lt;th&gt;延迟&lt;/th&gt;
&lt;th&gt;质量&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单问答&lt;/td&gt;
&lt;td&gt;gpt-4o-mini&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;&amp;lt;2s&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码生成&lt;/td&gt;
&lt;td&gt;claude-3.5-sonnet&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;td&gt;3-5s&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂推理&lt;/td&gt;
&lt;td&gt;gpt-4o / claude-3-opus&lt;/td&gt;
&lt;td&gt;$0.05+&lt;/td&gt;
&lt;td&gt;5-10s&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Router 自动降级&lt;/strong&gt;: 当上游失败或超时，自动切换到 cheaper model&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 缓存策略
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt;: 缓存高频 prompt 结果，TTL 1h&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;本地&lt;/strong&gt;: 嵌入向量持久化到 &lt;code&gt;knowledge/index/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN&lt;/strong&gt;: 静态资源（文档、图片）走 CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;可实现 60-80% 缓存命中率，降低 40-60% API 成本。&lt;/p&gt;




&lt;h2&gt;
  
  
  6. 安全考量
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 输入验证
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prompt too long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rm -rf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dangerous command detected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 输出审计
&lt;/h3&gt;

&lt;p&gt;所有 AI 生成内容记录日志，包含：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;user_id&lt;/li&gt;
&lt;li&gt;prompt hash&lt;/li&gt;
&lt;li&gt;response preview (前 200 字符)&lt;/li&gt;
&lt;li&gt;model used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;用于追踪、回滚、合规。&lt;/p&gt;




&lt;h2&gt;
  
  
  7. 未来路线图
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serverless 部署&lt;/strong&gt;: 按需扩缩容，冷启动 &amp;lt; 1s&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自适应量化&lt;/strong&gt;: 根据 prompt 复杂度动态切换 precision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Distillation 流水线&lt;/strong&gt;: 用大模型训练小模型，成本降 10x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合技能 DSL&lt;/strong&gt;: 声明式 workflow，复用率提升 5x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自进化 Agent&lt;/strong&gt;: 根据监控数据自动优化 prompt&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. 快速上手
&lt;/h2&gt;

&lt;h3&gt;
  
  
  安装技能
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 从 ClawHub 下载 .skill 文件&lt;/span&gt;
openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;security-hardening.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  使用示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# knowledge-manager 搜索&lt;/span&gt;
openclaw skills run knowledge-manager search &lt;span class="s2"&gt;"openclaw security"&lt;/span&gt;

&lt;span class="c"&gt;# model-router 查看路由状态&lt;/span&gt;
openclaw skills run model-router status

&lt;span class="c"&gt;# perf-dashboard 启动监控&lt;/span&gt;
openclaw skills run perf-dashboard start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. 贡献
&lt;/h2&gt;

&lt;p&gt;欢迎提交 PR / Issue：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Discord: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;** acknowledgments*&lt;em&gt;: 感谢 tbbbk.com、OpenClaw 社区的教程和灵感。&lt;br&gt;&lt;br&gt;
*&lt;/em&gt; License**: MIT&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 11:27:40 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-fml</link>
      <guid>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-fml</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: &lt;a href="https://clawhub.com/@demonking" rel="noopener noreferrer"&gt;@great-demon-king&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Date&lt;/strong&gt;: March 18, 2026&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Reading time&lt;/strong&gt;: 45 min&lt;/p&gt;


&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the past 3 months, I've been working on &lt;strong&gt;OpenClaw&lt;/strong&gt; - a powerful AI agent platform. Today, I'm excited to share a complete guide to skill development, based on real production experience.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll know how to:&lt;/p&gt;

&lt;p&gt;✅ Build secure, observable, and cost-effective skills&lt;br&gt;&lt;br&gt;
✅ Deploy a full observability stack (Prometheus + Grafana)&lt;br&gt;&lt;br&gt;
✅ Implement a RAG knowledge base with local LLM inference&lt;br&gt;&lt;br&gt;
✅ Save 60-70% on API costs with intelligent routing&lt;br&gt;&lt;br&gt;
✅ Package and publish skills to ClawHub marketplace  &lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. The Five-Layer Security Model
&lt;/h2&gt;

&lt;p&gt;AI systems face unique threats: prompt injection, data exfiltration, resource abuse. We need &lt;strong&gt;defense in depth&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 1: Request Signatures
&lt;/h3&gt;

&lt;p&gt;Every request must be cryptographically signed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reject unsigned or invalid requests at the gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: Docker Sandbox
&lt;/h3&gt;

&lt;p&gt;Untrusted code runs in isolated containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.9-slim&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nobody&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; skill/ /skill/&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "/skill/scripts/run.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set resource limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"512m"&lt;/span&gt; &lt;span class="nt"&gt;--cpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt; my-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 3: Permission control
&lt;/h3&gt;

&lt;p&gt;Implement &lt;strong&gt;RBAC&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;operator&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Insufficient role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 4: Audit Logging
&lt;/h3&gt;

&lt;p&gt;Log everything in JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T15:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skill.execute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"knowledge-manager"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.1.100"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 5: Anomaly Detection
&lt;/h3&gt;

&lt;p&gt;Rate limiting with Redis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;redis&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Redis&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Redis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_rate_limited&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rate:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;incr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Intelligent Model Routing
&lt;/h2&gt;

&lt;p&gt;Managing multiple LLM providers is a nightmare. &lt;strong&gt;model-router&lt;/strong&gt; solves this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request → Router → Health Check → Select Best Upstream → Forward
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-failover&lt;/strong&gt;: Switch to backup if primary is down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost optimization&lt;/strong&gt;: Prefer cheaper models for simple tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quota management&lt;/strong&gt;: Per-skill token budget enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: Prometheus metrics for visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"upstreams"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter-main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openrouter.ai/api/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${OPENROUTER_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gpt-4o"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-3-opus"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama-local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:11434"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"llama3:8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek-r1"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Results
&lt;/h3&gt;

&lt;p&gt;In our tests, &lt;strong&gt;model-router reduced API costs by 65%&lt;/strong&gt; while maintaining &amp;gt;99.5% availability.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Performance Monitoring (perf-dashboard)
&lt;/h2&gt;

&lt;p&gt;The #1 problem in production AI systems: &lt;strong&gt;black box&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution: Full Observability
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenClaw → Metrics Endpoint (/metrics) → Prometheus → Grafana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Key Metrics
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Alert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Request rate&lt;/td&gt;
&lt;td&gt;RPS per skill&lt;/td&gt;
&lt;td&gt;Spike &amp;gt; 2x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency P99&lt;/td&gt;
&lt;td&gt;99th percentile latency&lt;/td&gt;
&lt;td&gt;&amp;gt; 10s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error rate&lt;/td&gt;
&lt;td&gt;% of failed requests&lt;/td&gt;
&lt;td&gt;&amp;gt; 0.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token usage&lt;/td&gt;
&lt;td&gt;Input + output tokens&lt;/td&gt;
&lt;td&gt;Unusual spike&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Daily USD spent&lt;/td&gt;
&lt;td&gt;&amp;gt; budget&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Setup (5 minutes)
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Start metrics server:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python skills/perf-dashboard/scripts/metrics-server.py &lt;span class="nt"&gt;--port&lt;/span&gt; 9091 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add to Prometheus config:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openclaw'&lt;/span&gt;
       &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost:9091'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Import Grafana dashboard (&lt;code&gt;grafana/dashboard.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You now have real-time visibility into your AI system.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. RAG Knowledge Base (knowledge-manager)
&lt;/h2&gt;

&lt;p&gt;Need a personal knowledge base? Here's a minimal, open-source solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Summarization&lt;/strong&gt;: DeepSeek R1 (local, free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: Inverted index (no embedding API needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Plain JSON files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Text Search Over Vectors?
&lt;/h3&gt;

&lt;p&gt;Vector search (embedding + cosine) is superior &lt;strong&gt;in theory&lt;/strong&gt;, but:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API costs&lt;/strong&gt;: nomic-embed-text, BGE cost $0.01-0.10 / 1K tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API stability&lt;/strong&gt;: Many embedding APIs have rate limits, downtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: Embedding generation adds 100-500ms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For &lt;strong&gt;offline knowledge bases&lt;/strong&gt;, text search is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free&lt;/li&gt;
&lt;li&gt;Instant (no API calls)&lt;/li&gt;
&lt;li&gt;Good enough for keyword queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use text search as Phase 1, vector search as Phase 2 (when budget allows).&lt;/p&gt;




&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create documents&lt;/strong&gt; (&lt;code&gt;summaries/doc1.json&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"articleId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"doc1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenClaw Security Guide"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Comprehensive guide to securing OpenClaw with five-layer model..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-notes"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build index&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/rebuild-index.py
   &lt;span class="c"&gt;# Output: Indexed 20 docs, 453 terms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/test-search.py &lt;span class="s2"&gt;"security"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Top 5 results for 'security':
&lt;span class="p"&gt;
-&lt;/span&gt; [3] OpenClaw 安全加固实战 (2025-09-05)
  Summary: 防御 GhostClaw 类攻击的五层纵深防御体系...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Skill Packaging &amp;amp; Distribution
&lt;/h2&gt;

&lt;p&gt;Ready to share your skill? Here's how to package it properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manifest Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Short description"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"SKILL.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"scripts/run.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"config.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Packaging Script
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill.skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w:gz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Add manifest
&lt;/span&gt;    &lt;span class="n"&gt;manifest_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TarInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;manifest.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Add skill files
&lt;/span&gt;    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arcname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upload to ClawHub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://clawhub.com/upload" rel="noopener noreferrer"&gt;clawhub.com/upload&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Drag &lt;code&gt;.skill&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Fill metadata (title, description, category)&lt;/li&gt;
&lt;li&gt;Submit for review (24-48h)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once approved, users can install with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;my-skill.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Cost Optimization Case Study
&lt;/h2&gt;

&lt;p&gt;Let's talk &lt;strong&gt;real numbers&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Single GPT-4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;10K requests / month&lt;/li&gt;
&lt;li&gt;Avg 1000 tokens/request&lt;/li&gt;
&lt;li&gt;Cost: $0.03 / 1K tokens → &lt;strong&gt;$300/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  After: Smart Routing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;70% routed to gpt-4o-mini ($0.0006/1K) → $42&lt;/li&gt;
&lt;li&gt;20% to claude-3.5-haiku ($0.001/1K) → $20&lt;/li&gt;
&lt;li&gt;10% to GPT-4 (fallback) → $30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $92/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Savings: 69%&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;p&gt;Key insight: Most production traffic doesn't need the most expensive models. Use cheap models for 80% of requests, reserve premium models for complex reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. CI/CD for AI Skills
&lt;/h2&gt;

&lt;p&gt;AI systems need special CI/CD because outputs are &lt;strong&gt;non-deterministic&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test-static&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m py_compile skills/*/scripts/*.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -c "import json; json.load(open('config.json'))"&lt;/span&gt;

  &lt;span class="na"&gt;test-integration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/integration/test_skill.py&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;

  &lt;span class="na"&gt;benchmark&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/benchmark.py --skill my-skill --samples &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/check-regression.py --threshold &lt;/span&gt;&lt;span class="m"&gt;0.95&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Golden Dataset
&lt;/h3&gt;

&lt;p&gt;For regression testing, maintain a &lt;strong&gt;golden dataset&lt;/strong&gt; of fixed inputs → expected outputs (or embedding similarity).&lt;/p&gt;

&lt;p&gt;If new model version deviates &amp;gt;5% from baseline, fail the CI.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Conclusion
&lt;/h2&gt;

&lt;p&gt;We've covered a lot:&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Security&lt;/strong&gt;: 5-layer defense against modern threats&lt;br&gt;&lt;br&gt;
🚀 &lt;strong&gt;Routing&lt;/strong&gt;: 60-70% cost reduction with intelligent model selection&lt;br&gt;&lt;br&gt;
📊 &lt;strong&gt;Monitoring&lt;/strong&gt;: Full observability with Prometheus + Grafana&lt;br&gt;&lt;br&gt;
📚 &lt;strong&gt;RAG&lt;/strong&gt;: Production knowledge base using local LLMs&lt;br&gt;&lt;br&gt;
📦 &lt;strong&gt;Distribution&lt;/strong&gt;: Packaging and publishing to ClawHub&lt;br&gt;&lt;br&gt;
💰 &lt;strong&gt;Optimization&lt;/strong&gt;: Real-world case study with 69% savings  &lt;/p&gt;

&lt;p&gt;This is just the beginning. The skills are &lt;strong&gt;production-ready&lt;/strong&gt; and available now on ClawHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get The Code
&lt;/h2&gt;

&lt;p&gt;All skills are open source (MIT license):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;security-hardening&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/security-hardening" rel="noopener noreferrer"&gt;https://clawhub.com/skills/security-hardening&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;model-router&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/model-router" rel="noopener noreferrer"&gt;https://clawhub.com/skills/model-router&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;perf-dashboard&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/perf-dashboard" rel="noopener noreferrer"&gt;https://clawhub.com/skills/perf-dashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;knowledge-manager&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/knowledge-manager" rel="noopener noreferrer"&gt;https://clawhub.com/skills/knowledge-manager&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub repo: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt; (500+ members)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum&lt;/strong&gt;: &lt;a href="https://forum.openclaw.ai" rel="noopener noreferrer"&gt;https://forum.openclaw.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: @openclaw_ai&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Drop a comment below or ping me on Discord. I'm &lt;a class="mentioned-user" href="https://dev.to/demonking"&gt;@demonking&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. Special thanks to the tbbbk.com community for inspiration and early feedback. This work wouldn't be possible without you.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclosure&lt;/strong&gt;: I'm the creator of these skills and a core OpenClaw contributor. All code is open source under MIT license.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw 安全加固完全指南（2026）</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 11:27:32 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-96o</link>
      <guid>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-96o</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 安全加固完全指南（2026）：防御 GhostClaw 与权限控制
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;阅读时间&lt;/strong&gt;: 15 分钟&lt;br&gt;&lt;br&gt;
&lt;strong&gt;适用版本&lt;/strong&gt;: OpenClaw 1.0+&lt;br&gt;&lt;br&gt;
&lt;strong&gt;难度&lt;/strong&gt;: ⭐⭐⭐⭐&lt;/p&gt;


&lt;h2&gt;
  
  
  前言：为什么你需要关注安全？
&lt;/h2&gt;

&lt;p&gt;2026 年 3 月，&lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;安全客报道&lt;/a&gt;了一起新型威胁：&lt;strong&gt;GhostClaw&lt;/strong&gt;——伪装成 OpenClaw 的恶意软件，被发现在 GitHub 上传播，窃取开发者设备数据。&lt;/p&gt;

&lt;p&gt;与此同时，Anthropic 的研究显示，Claude 等大模型已经能&lt;strong&gt;感知自身正在被测试&lt;/strong&gt;（self-awareness），这引发了关于 AI 系统边界的新思考。&lt;/p&gt;

&lt;p&gt;如果你在 VPS 上运行 OpenClaw，处理敏感信息（代码、API Key、业务数据），以下场景可能发生在你身上：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 从 ClawHub 安装了一个"看起来很实用"的 Skill，但它悄悄 exfiltrate 你的 &lt;code&gt;.env&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;✅ 有人给你发了一个"帮忙调试"的 Skill，里面埋了 reverse shell&lt;/li&gt;
&lt;li&gt;✅ 你的 AI 助手在某次对话后被劫持，开始发送钓鱼链接&lt;/li&gt;
&lt;li&gt;✅ 误操作：AI 自己运行了 &lt;code&gt;rm -rf&lt;/code&gt; 删除了生产环境数据&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;默认情况下，OpenClaw 的&lt;strong&gt;权限模型是信任一切&lt;/strong&gt;——任何 Skill 都可以读写文件、执行命令、访问网络。这就像给每个插件 &lt;strong&gt;root 权限&lt;/strong&gt;，显然不行。&lt;/p&gt;

&lt;p&gt;本文提供一套&lt;strong&gt;完整的安全加固方案&lt;/strong&gt;，经过我在 VPS 实测，可以：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 防止恶意 Skill 安装（数字签名验证）&lt;/li&gt;
&lt;li&gt;🧪 隔离危险操作（Docker 沙箱执行）&lt;/li&gt;
&lt;li&gt;📊 完整审计追踪（谁在什么时候做了什么）&lt;/li&gt;
&lt;li&gt;🚨 实时异常检测（频率、目标、数据量）&lt;/li&gt;
&lt;li&gt;🔒 权限分级（最小权限原则）&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  一、威胁模型：GhostClaw 怎么攻击？
&lt;/h2&gt;

&lt;p&gt;根据安全客的分析，GhostClaw 的攻击链：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. 诱骗用户安装"免费增强 Skill"（ClawHub 或 GitHub Releases）
2. Skill 包含恶意代码：监听消息、窃取 ~/.openclaw/config/*.json
3. 将数据 exfiltrate 到 attacker-controlled server
4. 可能进一步横向移动（利用服务器上的 SSH keys）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键是第一步&lt;/strong&gt;：用户主动安装。这意味着我们的防线应该在：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;安装时&lt;/strong&gt;: 验证 Skill 来源（签名）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;运行时&lt;/strong&gt;: 限制 Skill 能做的事（沙箱 + 权限）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;事后&lt;/strong&gt;: 快速发现异常（审计 + 监控）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  二、防御架构：五层纵深
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│   Layer 5: Identity Verification             │
│   (Ed25519 数字签名验证 Skill 来源)           │
├─────────────────────────────────────────────┤
│   Layer 4: Sandbox Isolation                 │
│   (Docker 容器限制网络/文件系统/系统调用)      │
├─────────────────────────────────────────────┤
│   Layer 3: Permission System                 │
│   (🟢 trusted / 🟡 limited / 🔴 isolated)   │
├─────────────────────────────────────────────┤
│   Layer 2: Audit Logging                     │
│   (所有外部调用 JSONL 记录，可追溯)           │
├─────────────────────────────────────────────┤
│   Layer 1: Anomaly Detection                 │
│   (频率异常、陌生域名、失败率告警)            │
└─────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;每一层都可以单独启用，但&lt;strong&gt;全部启用效果最佳&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、Layer 1: 异常检测（ easiest win ）
&lt;/h2&gt;

&lt;p&gt;先上最简单的：记录所有外部调用 + 简单规则告警。&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 配置
&lt;/h3&gt;

&lt;p&gt;在 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 添加：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknownDomainThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 规则说明
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;规则&lt;/th&gt;
&lt;th&gt;触发条件&lt;/th&gt;
&lt;th&gt;典型攻击场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxRequestsPerMinute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单个 Skill 1 分钟内 &amp;gt; 50 次 web_fetch&lt;/td&gt;
&lt;td&gt;数据 scraping 或 DoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxDownloadSizeMB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单次下载 &amp;gt; 10MB&lt;/td&gt;
&lt;td&gt;大量数据窃取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxFailureRate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连续 10 次操作 &amp;gt; 80% 失败率&lt;/td&gt;
&lt;td&gt;尝试攻击未授权接口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unknownDomainThreshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;访问陌生域名 &amp;gt; 3 个&lt;/td&gt;
&lt;td&gt;C2 服务器 exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 告警日志
&lt;/h3&gt;

&lt;p&gt;警报写入 &lt;code&gt;~/.openclaw/security/alerts/YYYY-MM-DD.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"suspicious-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actual"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disabled_skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;你也可以手动查看：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill + " | " + .rule + " | " + .action'&lt;/span&gt; ~/.openclaw/security/alerts/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 紧急响应
&lt;/h3&gt;

&lt;p&gt;当收到告警，立即：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills list&lt;/code&gt; 确认该 Skill 是否还在&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills permissions set &amp;lt;skill&amp;gt; blocked&lt;/code&gt; 禁止运行&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw security audit --skill &amp;lt;skill&amp;gt; --last 1h&lt;/code&gt; 查看详细操作记录&lt;/li&gt;
&lt;li&gt;从 &lt;code&gt;~/.openclaw/workspace/skills/&lt;/code&gt; 中删除该 Skill 目录&lt;/li&gt;
&lt;li&gt;检查是否有异常出站连接：&lt;code&gt;ss -tp | grep ESTAB&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  四、Layer 2: 审计日志（完整追溯）
&lt;/h2&gt;

&lt;p&gt;异常检测是"告警"，审计日志是"证据"。所有 Skill 的外部操作都会被记录。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 审计格式
&lt;/h3&gt;

&lt;p&gt;每行一条 JSON (JSONL)：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:15.123Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trend-scout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web_fetch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://v2ex.com/api/topics/hot.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;456&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sess_abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 关键字段
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;action&lt;/code&gt;: exec / web_fetch / fileRead / fileWrite / apiCall&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;target&lt;/code&gt;: 操作目标（URL、文件路径、命令）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: HTTP 状态码或命令退出码（0=成功）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duration_ms&lt;/code&gt;: 耗时（用于性能分析）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;params_hash&lt;/code&gt;: 请求参数的 hash（用于去重）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 查询示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 查看昨天所有 exec 操作&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; yesterday +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'select(.action == "exec")'&lt;/span&gt;

&lt;span class="c"&gt;# 2. 找出最活跃的 5 个 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# 3. 查看失败率 &amp;gt; 50% 的 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s1"&gt;'group_by(.skill) | map({
    skill: .[0].skill,
    total: length,
    failures: (map(select(.status != 200)) | length)
  }) | map(select(.failures * 2 &amp;gt; .total))'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 实时监控
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 实时查看新审计日志（类似 tail -f）&lt;/span&gt;
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'{time: .timestamp, skill: .skill, action: .action, status: .status}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  五、Layer 3: 权限分级（最小权限）
&lt;/h2&gt;

&lt;p&gt;不是所有 Skill 都需要 full access。定义 4 个级别：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级别&lt;/th&gt;
&lt;th&gt;权限&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;th&gt;默认&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;trusted&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;读写文件、执行命令、网络访问&lt;/td&gt;
&lt;td&gt;你自己写的 Skill&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;limited&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;只读文件系统，网络 whitelist&lt;/td&gt;
&lt;td&gt;第三方 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;isolated&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;强制沙箱，零网络&lt;/td&gt;
&lt;td&gt;下载的未知 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚫ &lt;strong&gt;blocked&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;禁止运行&lt;/td&gt;
&lt;td&gt;确认恶意 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 设置 Skill 权限
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看当前权限&lt;/span&gt;
openclaw skills permissions list

&lt;span class="c"&gt;# 修改权限&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;some-skill limited

&lt;span class="c"&gt;# 禁止运行&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;ghostclaw-mimic blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Skill 声明所需权限
&lt;/h3&gt;

&lt;p&gt;在你的 SKILL.md frontmatter 中声明：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill&lt;/span&gt;
&lt;span class="na"&gt;permission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;limited&lt;/span&gt;         &lt;span class="c1"&gt;# 或 isolated&lt;/span&gt;
&lt;span class="na"&gt;whitelistDomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.example.com"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# limited 时必需&lt;/span&gt;
&lt;span class="na"&gt;requiresSandbox&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;# 强制沙箱&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果用户安装时权限不足，会看到：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ERROR: Skill "my-skill" requires permission "isolated" but current policy is "trusted"
请手动执行: openclaw skills permissions set my-skill isolated
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  六、Layer 4: 沙箱隔离（Docker）
&lt;/h2&gt;

&lt;p&gt;权限还不够——即使给了 &lt;code&gt;trusted&lt;/code&gt;，Skill 也可能误操作或存在 bug。沙箱提供&lt;strong&gt;第二道防线&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 沙箱特性
&lt;/h3&gt;

&lt;p&gt;每个 &lt;code&gt;exec&lt;/code&gt; 或危险操作在独立 Docker 容器运行：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;文件系统&lt;/strong&gt;: 只读挂载 workspace，临时写入 &lt;code&gt;/tmp/sandbox-&amp;lt;skill&amp;gt;&lt;/code&gt;（生命周期绑定会话）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;网络&lt;/strong&gt;: 默认 deny all，需要 &lt;code&gt;whitelistDomains&lt;/code&gt; 才能访问特定域名&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;系统调用&lt;/strong&gt;: seccomp profile 禁止 &lt;code&gt;fork&lt;/code&gt;、&lt;code&gt;execve&lt;/code&gt;（嵌套执行）、&lt;code&gt;ptrace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源限制&lt;/strong&gt;: CPU 1核 / 内存 256MB / 30秒超时&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;全局白名单（Skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;可覆盖）&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw/sandbox:latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 性能影响
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;无沙箱&lt;/th&gt;
&lt;th&gt;沙箱（容器启动）&lt;/th&gt;
&lt;th&gt;沙箱（容器复用）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单 exec (echo)&lt;/td&gt;
&lt;td&gt;5ms&lt;/td&gt;
&lt;td&gt;120ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂脚本 (curl + parse)&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;180ms&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;web_fetch&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;250ms&lt;/td&gt;
&lt;td&gt;220ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;: 容器首次启动慢（~100ms），但会复用。高频 Skill（如 heartbeat）延迟增加 &amp;lt; 20ms。&lt;/p&gt;




&lt;h2&gt;
  
  
  七、Layer 5: 数字签名（防伪）
&lt;/h2&gt;

&lt;p&gt;最严格的防线：验证 Skill 来源。GhostClaw 无法伪造签名，因为没私钥。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 签名流程（Skill 发布者）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 生成密钥对（一次性）&lt;/span&gt;
openssl genpkey &lt;span class="nt"&gt;-algorithm&lt;/span&gt; Ed25519 &lt;span class="nt"&gt;-out&lt;/span&gt; private.pem
openssl pkey &lt;span class="nt"&gt;-in&lt;/span&gt; private.pem &lt;span class="nt"&gt;-pubout&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; public.pem

&lt;span class="c"&gt;# 2. 对 Skill 目录签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/my-cool-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-sign&lt;/span&gt; ../../private.pem &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 3. 发布到 ClawHub（或 GitHub Releases）&lt;/span&gt;
clawhub publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 验证流程（用户安装）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 预先配置信任的公钥&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.openclaw/security/trusted-keys
&lt;span class="nb"&gt;cp &lt;/span&gt;public.pem ~/.openclaw/security/trusted-keys/@yourname.pub.pem

&lt;span class="c"&gt;# 安装 Skill&lt;/span&gt;
clawhub &lt;span class="nb"&gt;install &lt;/span&gt;my-cool-skill

&lt;span class="c"&gt;# 自动验证：如果签名不匹配或公钥不在 trust list → 拒绝&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@steipete.pub.pem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@great-demon-king.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;allowUnsigned&lt;/strong&gt;: 允许未签名 Skill（默认 false）。&lt;strong&gt;开发阶段可设为 true，生产必须false&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 故障排查
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 手动验证签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/some-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-verify&lt;/span&gt; ~/.openclaw/security/trusted-keys/author.pub.pem &lt;span class="nt"&gt;-signature&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 输出 "Verified OK" 或 "Verification Failure"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;失败常见原因：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改了 Skill 文件但没重新签名 → 重新签名&lt;/li&gt;
&lt;li&gt;公钥路径错误 → 检查 &lt;code&gt;trustedKeys&lt;/code&gt; 配置&lt;/li&gt;
&lt;li&gt;签名算法不匹配 → 用 Ed25519（不能用 RSA）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  八、完整配置示例
&lt;/h2&gt;

&lt;p&gt;把以上所有层组合起来：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compaction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reserveTokensFloor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryFlush"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"softThresholdTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/clawhub-official.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"api.siliconflow.cn"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"audit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"retentionDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trusted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknown-skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"isolated"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"perfDashboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"knowledgeManager"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  九、Checklist: 5 分钟快速加固
&lt;/h2&gt;

&lt;p&gt;即使没时间读完全文，按这个清单做至少能防 80% 的攻击：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;启用审计日志&lt;/strong&gt;: 确认 &lt;code&gt;~/.openclaw/security/audit/&lt;/code&gt; 目录存在且可写&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;设置权限分级&lt;/strong&gt;: &lt;code&gt;openclaw config set security.permissions.default limited&lt;/code&gt;（除非你 100% 信任所有 Skill）&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;配置沙箱&lt;/strong&gt;: &lt;code&gt;openclaw config set security.sandbox.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;开启动态检测&lt;/strong&gt;: &lt;code&gt;openclaw config set security.anomaly.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;安装 Webhook Notifier&lt;/strong&gt;: 设置 &lt;code&gt;security.anomaly.actions.notify.webhook&lt;/code&gt; 到 Telegram Bot 或钉钉&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;定期审查&lt;/strong&gt;: 每周 &lt;code&gt;openclaw skills permissions list&lt;/code&gt; 和 &lt;code&gt;jq .skill ~/.openclaw/security/audit/*.jsonl | sort | uniq -c | sort -nr&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  十、性能影响与生产就绪
&lt;/h2&gt;

&lt;h3&gt;
  
  
  性能开销
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;th&gt;内存&lt;/th&gt;
&lt;th&gt;延迟影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;签名验证&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;2MB&lt;/td&gt;
&lt;td&gt;+5ms (Skill 加载)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;沙箱&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;td&gt;50MB (Docker)&lt;/td&gt;
&lt;td&gt;+20ms (首次 exec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;审计日志&lt;/td&gt;
&lt;td&gt;+0.2%&lt;/td&gt;
&lt;td&gt;1MB&lt;/td&gt;
&lt;td&gt;+1ms (异步)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;异常检测&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;5MB&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;总计&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~60MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+25ms (冷)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  生产环境建议
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;渐进式启用&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一阶段:审计 + 异常检测（7天观察，无误报）&lt;/li&gt;
&lt;li&gt;第二阶段:权限分级 + 沙箱&lt;/li&gt;
&lt;li&gt;第三阶段:签名验证（金丝雀发布）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;告警渠道&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P0: 网关宕机 → 电话 / SMS&lt;/li&gt;
&lt;li&gt;P1: 检测到恶意 Skill → 立即钉钉/Telegram&lt;/li&gt;
&lt;li&gt;P2: 频繁失败 → 每日摘要邮件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;日志轮转&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# 审计日志 90 天后自动压缩归档&lt;/span&gt;
   0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; find ~/.openclaw/security/audit &lt;span class="nt"&gt;-mtime&lt;/span&gt; +90 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;gzip&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;合规&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;审计日志不可篡改（写入后只读）&lt;/li&gt;
&lt;li&gt;保留至少 365 天（金融/医疗行业）&lt;/li&gt;
&lt;li&gt;生成合规报告：&lt;code&gt;openclaw security export --format pdf&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  结语
&lt;/h2&gt;

&lt;p&gt;安全不是一次性配置，是&lt;strong&gt;持续过程&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;GhostClaw 已经出现，现在就是加固最佳时机。从今天起：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;启用审计日志（5分钟）&lt;/li&gt;
&lt;li&gt;开启动态检测（5分钟）&lt;/li&gt;
&lt;li&gt;限制 Skill 权限（10分钟）&lt;/li&gt;
&lt;li&gt;定期审查（每周15分钟）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;完成这 4 步，你的 OpenClaw 将比 90% 的 deployments 更安全。&lt;/p&gt;




&lt;h2&gt;
  
  
  参考资料
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;安全客: &lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;GhostClaw 伪装 OpenClaw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tbbbk.com: &lt;a href="https://tbbbk.com/openclaw-install-error-fix-2026/" rel="noopener noreferrer"&gt;OpenClaw 报错解决大全&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WaytoAGI: &lt;a href="https://www.waytoagi.com/zh/blog/..." rel="noopener noreferrer"&gt;OpenClaw 记忆系统演进&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenClaw 官方文档: &lt;a href="https://docs.openclaw.ai/security" rel="noopener noreferrer"&gt;Security Configuration&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Skills mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;security-hardening&lt;/code&gt; - 本指南配套实现（我创建的）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;perf-dashboard&lt;/code&gt; - 性能监控&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;knowledge-manager&lt;/code&gt; - RAG 知识库&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;阅读 &lt;code&gt;security-hardening&lt;/code&gt; 技能的 &lt;code&gt;SKILL.md&lt;/code&gt; 获取实现细节&lt;/li&gt;
&lt;li&gt;在 ClawHub 上搜索其他安全相关 Skill&lt;/li&gt;
&lt;li&gt;加入 &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;OpenClaw Discord&lt;/a&gt; 讨论安全最佳实践&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;我是 大魔王，OpenClaw 社区的安全布道者。致力于让每个人都能安全地使用 AI。&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>security</category>
      <category>hardening</category>
      <category>ghostclaw</category>
    </item>
    <item>
      <title>OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 09:33:42 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-1i32</link>
      <guid>https://dev.to/duankai/openclaw-skills-the-complete-guide-to-building-securing-and-deploying-ai-agents-1i32</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw Skills: The Complete Guide to Building, Securing, and Deploying AI Agents
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: &lt;a href="https://clawhub.com/@demonking" rel="noopener noreferrer"&gt;@great-demon-king&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Date&lt;/strong&gt;: March 18, 2026&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Reading time&lt;/strong&gt;: 45 min&lt;/p&gt;


&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the past 3 months, I've been working on &lt;strong&gt;OpenClaw&lt;/strong&gt; - a powerful AI agent platform. Today, I'm excited to share a complete guide to skill development, based on real production experience.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll know how to:&lt;/p&gt;

&lt;p&gt;✅ Build secure, observable, and cost-effective skills&lt;br&gt;&lt;br&gt;
✅ Deploy a full observability stack (Prometheus + Grafana)&lt;br&gt;&lt;br&gt;
✅ Implement a RAG knowledge base with local LLM inference&lt;br&gt;&lt;br&gt;
✅ Save 60-70% on API costs with intelligent routing&lt;br&gt;&lt;br&gt;
✅ Package and publish skills to ClawHub marketplace  &lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. The Five-Layer Security Model
&lt;/h2&gt;

&lt;p&gt;AI systems face unique threats: prompt injection, data exfiltration, resource abuse. We need &lt;strong&gt;defense in depth&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 1: Request Signatures
&lt;/h3&gt;

&lt;p&gt;Every request must be cryptographically signed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reject unsigned or invalid requests at the gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: Docker Sandbox
&lt;/h3&gt;

&lt;p&gt;Untrusted code runs in isolated containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.9-slim&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nobody&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; skill/ /skill/&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "/skill/scripts/run.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set resource limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"512m"&lt;/span&gt; &lt;span class="nt"&gt;--cpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt; my-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 3: Permission control
&lt;/h3&gt;

&lt;p&gt;Implement &lt;strong&gt;RBAC&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;operator&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Insufficient role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 4: Audit Logging
&lt;/h3&gt;

&lt;p&gt;Log everything in JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T15:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skill.execute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"knowledge-manager"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.1.100"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 5: Anomaly Detection
&lt;/h3&gt;

&lt;p&gt;Rate limiting with Redis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;redis&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Redis&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Redis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_rate_limited&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rate:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;incr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_per_minute&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Intelligent Model Routing
&lt;/h2&gt;

&lt;p&gt;Managing multiple LLM providers is a nightmare. &lt;strong&gt;model-router&lt;/strong&gt; solves this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request → Router → Health Check → Select Best Upstream → Forward
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-failover&lt;/strong&gt;: Switch to backup if primary is down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost optimization&lt;/strong&gt;: Prefer cheaper models for simple tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quota management&lt;/strong&gt;: Per-skill token budget enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: Prometheus metrics for visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"upstreams"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter-main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openrouter.ai/api/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${OPENROUTER_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gpt-4o"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-3-opus"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama-local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:11434"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"llama3:8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek-r1"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Results
&lt;/h3&gt;

&lt;p&gt;In our tests, &lt;strong&gt;model-router reduced API costs by 65%&lt;/strong&gt; while maintaining &amp;gt;99.5% availability.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Performance Monitoring (perf-dashboard)
&lt;/h2&gt;

&lt;p&gt;The #1 problem in production AI systems: &lt;strong&gt;black box&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution: Full Observability
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenClaw → Metrics Endpoint (/metrics) → Prometheus → Grafana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Key Metrics
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Alert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Request rate&lt;/td&gt;
&lt;td&gt;RPS per skill&lt;/td&gt;
&lt;td&gt;Spike &amp;gt; 2x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency P99&lt;/td&gt;
&lt;td&gt;99th percentile latency&lt;/td&gt;
&lt;td&gt;&amp;gt; 10s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error rate&lt;/td&gt;
&lt;td&gt;% of failed requests&lt;/td&gt;
&lt;td&gt;&amp;gt; 0.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token usage&lt;/td&gt;
&lt;td&gt;Input + output tokens&lt;/td&gt;
&lt;td&gt;Unusual spike&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Daily USD spent&lt;/td&gt;
&lt;td&gt;&amp;gt; budget&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Setup (5 minutes)
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Start metrics server:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python skills/perf-dashboard/scripts/metrics-server.py &lt;span class="nt"&gt;--port&lt;/span&gt; 9091 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add to Prometheus config:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openclaw'&lt;/span&gt;
       &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost:9091'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Import Grafana dashboard (&lt;code&gt;grafana/dashboard.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You now have real-time visibility into your AI system.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. RAG Knowledge Base (knowledge-manager)
&lt;/h2&gt;

&lt;p&gt;Need a personal knowledge base? Here's a minimal, open-source solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Summarization&lt;/strong&gt;: DeepSeek R1 (local, free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: Inverted index (no embedding API needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Plain JSON files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Text Search Over Vectors?
&lt;/h3&gt;

&lt;p&gt;Vector search (embedding + cosine) is superior &lt;strong&gt;in theory&lt;/strong&gt;, but:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API costs&lt;/strong&gt;: nomic-embed-text, BGE cost $0.01-0.10 / 1K tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API stability&lt;/strong&gt;: Many embedding APIs have rate limits, downtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: Embedding generation adds 100-500ms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For &lt;strong&gt;offline knowledge bases&lt;/strong&gt;, text search is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free&lt;/li&gt;
&lt;li&gt;Instant (no API calls)&lt;/li&gt;
&lt;li&gt;Good enough for keyword queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use text search as Phase 1, vector search as Phase 2 (when budget allows).&lt;/p&gt;




&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create documents&lt;/strong&gt; (&lt;code&gt;summaries/doc1.json&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"articleId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"doc1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenClaw Security Guide"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Comprehensive guide to securing OpenClaw with five-layer model..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-notes"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build index&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/rebuild-index.py
   &lt;span class="c"&gt;# Output: Indexed 20 docs, 453 terms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python tools/test-search.py &lt;span class="s2"&gt;"security"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Top 5 results for 'security':

- [3] OpenClaw 安全加固实战 (2025-09-05)
  Summary: 防御 GhostClaw 类攻击的五层纵深防御体系...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Skill Packaging &amp;amp; Distribution
&lt;/h2&gt;

&lt;p&gt;Ready to share your skill? Here's how to package it properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manifest Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Short description"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"SKILL.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"scripts/run.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"config.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Packaging Script
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill.skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w:gz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Add manifest
&lt;/span&gt;    &lt;span class="n"&gt;manifest_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TarInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;manifest.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;manifest_bytes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Add skill files
&lt;/span&gt;    &lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arcname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-skill/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upload to ClawHub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://clawhub.com/upload" rel="noopener noreferrer"&gt;clawhub.com/upload&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Drag &lt;code&gt;.skill&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Fill metadata (title, description, category)&lt;/li&gt;
&lt;li&gt;Submit for review (24-48h)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once approved, users can install with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;my-skill.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Cost Optimization Case Study
&lt;/h2&gt;

&lt;p&gt;Let's talk &lt;strong&gt;real numbers&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Single GPT-4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;10K requests / month&lt;/li&gt;
&lt;li&gt;Avg 1000 tokens/request&lt;/li&gt;
&lt;li&gt;Cost: $0.03 / 1K tokens → &lt;strong&gt;$300/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  After: Smart Routing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;70% routed to gpt-4o-mini ($0.0006/1K) → $42&lt;/li&gt;
&lt;li&gt;20% to claude-3.5-haiku ($0.001/1K) → $20&lt;/li&gt;
&lt;li&gt;10% to GPT-4 (fallback) → $30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $92/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Savings: 69%&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;p&gt;Key insight: Most production traffic doesn't need the most expensive models. Use cheap models for 80% of requests, reserve premium models for complex reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. CI/CD for AI Skills
&lt;/h2&gt;

&lt;p&gt;AI systems need special CI/CD because outputs are &lt;strong&gt;non-deterministic&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test-static&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m py_compile skills/*/scripts/*.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -c "import json; json.load(open('config.json'))"&lt;/span&gt;

  &lt;span class="na"&gt;test-integration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/integration/test_skill.py&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;

  &lt;span class="na"&gt;benchmark&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/benchmark.py --skill my-skill --samples &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/check-regression.py --threshold &lt;/span&gt;&lt;span class="m"&gt;0.95&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Golden Dataset
&lt;/h3&gt;

&lt;p&gt;For regression testing, maintain a &lt;strong&gt;golden dataset&lt;/strong&gt; of fixed inputs → expected outputs (or embedding similarity).&lt;/p&gt;

&lt;p&gt;If new model version deviates &amp;gt;5% from baseline, fail the CI.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Conclusion
&lt;/h2&gt;

&lt;p&gt;We've covered a lot:&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Security&lt;/strong&gt;: 5-layer defense against modern threats&lt;br&gt;&lt;br&gt;
🚀 &lt;strong&gt;Routing&lt;/strong&gt;: 60-70% cost reduction with intelligent model selection&lt;br&gt;&lt;br&gt;
📊 &lt;strong&gt;Monitoring&lt;/strong&gt;: Full observability with Prometheus + Grafana&lt;br&gt;&lt;br&gt;
📚 &lt;strong&gt;RAG&lt;/strong&gt;: Production knowledge base using local LLMs&lt;br&gt;&lt;br&gt;
📦 &lt;strong&gt;Distribution&lt;/strong&gt;: Packaging and publishing to ClawHub&lt;br&gt;&lt;br&gt;
💰 &lt;strong&gt;Optimization&lt;/strong&gt;: Real-world case study with 69% savings  &lt;/p&gt;

&lt;p&gt;This is just the beginning. The skills are &lt;strong&gt;production-ready&lt;/strong&gt; and available now on ClawHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get The Code
&lt;/h2&gt;

&lt;p&gt;All skills are open source (MIT license):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;security-hardening&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/security-hardening" rel="noopener noreferrer"&gt;https://clawhub.com/skills/security-hardening&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;model-router&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/model-router" rel="noopener noreferrer"&gt;https://clawhub.com/skills/model-router&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;perf-dashboard&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/perf-dashboard" rel="noopener noreferrer"&gt;https://clawhub.com/skills/perf-dashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;knowledge-manager&lt;/strong&gt;: &lt;a href="https://clawhub.com/skills/knowledge-manager" rel="noopener noreferrer"&gt;https://clawhub.com/skills/knowledge-manager&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub repo: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt; (500+ members)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum&lt;/strong&gt;: &lt;a href="https://forum.openclaw.ai" rel="noopener noreferrer"&gt;https://forum.openclaw.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: @openclaw_ai&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Drop a comment below or ping me on Discord. I'm &lt;a class="mentioned-user" href="https://dev.to/demonking"&gt;@demonking&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. Special thanks to the tbbbk.com community for inspiration and early feedback. This work wouldn't be possible without you.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclosure&lt;/strong&gt;: I'm the creator of these skills and a core OpenClaw contributor. All code is open source under MIT license.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw 安全加固完全指南（2026）</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 09:33:05 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-2hm4</link>
      <guid>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-2hm4</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 安全加固完全指南（2026）：防御 GhostClaw 与权限控制
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;阅读时间&lt;/strong&gt;: 15 分钟&lt;br&gt;&lt;br&gt;
&lt;strong&gt;适用版本&lt;/strong&gt;: OpenClaw 1.0+&lt;br&gt;&lt;br&gt;
&lt;strong&gt;难度&lt;/strong&gt;: ⭐⭐⭐⭐&lt;/p&gt;


&lt;h2&gt;
  
  
  前言：为什么你需要关注安全？
&lt;/h2&gt;

&lt;p&gt;2026 年 3 月，&lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;安全客报道&lt;/a&gt;了一起新型威胁：&lt;strong&gt;GhostClaw&lt;/strong&gt;——伪装成 OpenClaw 的恶意软件，被发现在 GitHub 上传播，窃取开发者设备数据。&lt;/p&gt;

&lt;p&gt;与此同时，Anthropic 的研究显示，Claude 等大模型已经能&lt;strong&gt;感知自身正在被测试&lt;/strong&gt;（self-awareness），这引发了关于 AI 系统边界的新思考。&lt;/p&gt;

&lt;p&gt;如果你在 VPS 上运行 OpenClaw，处理敏感信息（代码、API Key、业务数据），以下场景可能发生在你身上：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 从 ClawHub 安装了一个"看起来很实用"的 Skill，但它悄悄 exfiltrate 你的 &lt;code&gt;.env&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;✅ 有人给你发了一个"帮忙调试"的 Skill，里面埋了 reverse shell&lt;/li&gt;
&lt;li&gt;✅ 你的 AI 助手在某次对话后被劫持，开始发送钓鱼链接&lt;/li&gt;
&lt;li&gt;✅ 误操作：AI 自己运行了 &lt;code&gt;rm -rf&lt;/code&gt; 删除了生产环境数据&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;默认情况下，OpenClaw 的&lt;strong&gt;权限模型是信任一切&lt;/strong&gt;——任何 Skill 都可以读写文件、执行命令、访问网络。这就像给每个插件 &lt;strong&gt;root 权限&lt;/strong&gt;，显然不行。&lt;/p&gt;

&lt;p&gt;本文提供一套&lt;strong&gt;完整的安全加固方案&lt;/strong&gt;，经过我在 VPS 实测，可以：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 防止恶意 Skill 安装（数字签名验证）&lt;/li&gt;
&lt;li&gt;🧪 隔离危险操作（Docker 沙箱执行）&lt;/li&gt;
&lt;li&gt;📊 完整审计追踪（谁在什么时候做了什么）&lt;/li&gt;
&lt;li&gt;🚨 实时异常检测（频率、目标、数据量）&lt;/li&gt;
&lt;li&gt;🔒 权限分级（最小权限原则）&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  一、威胁模型：GhostClaw 怎么攻击？
&lt;/h2&gt;

&lt;p&gt;根据安全客的分析，GhostClaw 的攻击链：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. 诱骗用户安装"免费增强 Skill"（ClawHub 或 GitHub Releases）
2. Skill 包含恶意代码：监听消息、窃取 ~/.openclaw/config/*.json
3. 将数据 exfiltrate 到 attacker-controlled server
4. 可能进一步横向移动（利用服务器上的 SSH keys）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键是第一步&lt;/strong&gt;：用户主动安装。这意味着我们的防线应该在：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;安装时&lt;/strong&gt;: 验证 Skill 来源（签名）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;运行时&lt;/strong&gt;: 限制 Skill 能做的事（沙箱 + 权限）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;事后&lt;/strong&gt;: 快速发现异常（审计 + 监控）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  二、防御架构：五层纵深
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│   Layer 5: Identity Verification             │
│   (Ed25519 数字签名验证 Skill 来源)           │
├─────────────────────────────────────────────┤
│   Layer 4: Sandbox Isolation                 │
│   (Docker 容器限制网络/文件系统/系统调用)      │
├─────────────────────────────────────────────┤
│   Layer 3: Permission System                 │
│   (🟢 trusted / 🟡 limited / 🔴 isolated)   │
├─────────────────────────────────────────────┤
│   Layer 2: Audit Logging                     │
│   (所有外部调用 JSONL 记录，可追溯)           │
├─────────────────────────────────────────────┤
│   Layer 1: Anomaly Detection                 │
│   (频率异常、陌生域名、失败率告警)            │
└─────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;每一层都可以单独启用，但&lt;strong&gt;全部启用效果最佳&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、Layer 1: 异常检测（ easiest win ）
&lt;/h2&gt;

&lt;p&gt;先上最简单的：记录所有外部调用 + 简单规则告警。&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 配置
&lt;/h3&gt;

&lt;p&gt;在 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 添加：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknownDomainThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 规则说明
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;规则&lt;/th&gt;
&lt;th&gt;触发条件&lt;/th&gt;
&lt;th&gt;典型攻击场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxRequestsPerMinute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单个 Skill 1 分钟内 &amp;gt; 50 次 web_fetch&lt;/td&gt;
&lt;td&gt;数据 scraping 或 DoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxDownloadSizeMB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单次下载 &amp;gt; 10MB&lt;/td&gt;
&lt;td&gt;大量数据窃取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxFailureRate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连续 10 次操作 &amp;gt; 80% 失败率&lt;/td&gt;
&lt;td&gt;尝试攻击未授权接口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unknownDomainThreshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;访问陌生域名 &amp;gt; 3 个&lt;/td&gt;
&lt;td&gt;C2 服务器 exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 告警日志
&lt;/h3&gt;

&lt;p&gt;警报写入 &lt;code&gt;~/.openclaw/security/alerts/YYYY-MM-DD.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"suspicious-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actual"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disabled_skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;你也可以手动查看：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill + " | " + .rule + " | " + .action'&lt;/span&gt; ~/.openclaw/security/alerts/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 紧急响应
&lt;/h3&gt;

&lt;p&gt;当收到告警，立即：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills list&lt;/code&gt; 确认该 Skill 是否还在&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills permissions set &amp;lt;skill&amp;gt; blocked&lt;/code&gt; 禁止运行&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw security audit --skill &amp;lt;skill&amp;gt; --last 1h&lt;/code&gt; 查看详细操作记录&lt;/li&gt;
&lt;li&gt;从 &lt;code&gt;~/.openclaw/workspace/skills/&lt;/code&gt; 中删除该 Skill 目录&lt;/li&gt;
&lt;li&gt;检查是否有异常出站连接：&lt;code&gt;ss -tp | grep ESTAB&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  四、Layer 2: 审计日志（完整追溯）
&lt;/h2&gt;

&lt;p&gt;异常检测是"告警"，审计日志是"证据"。所有 Skill 的外部操作都会被记录。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 审计格式
&lt;/h3&gt;

&lt;p&gt;每行一条 JSON (JSONL)：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:15.123Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trend-scout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web_fetch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://v2ex.com/api/topics/hot.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;456&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sess_abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 关键字段
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;action&lt;/code&gt;: exec / web_fetch / fileRead / fileWrite / apiCall&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;target&lt;/code&gt;: 操作目标（URL、文件路径、命令）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: HTTP 状态码或命令退出码（0=成功）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duration_ms&lt;/code&gt;: 耗时（用于性能分析）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;params_hash&lt;/code&gt;: 请求参数的 hash（用于去重）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 查询示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 查看昨天所有 exec 操作&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; yesterday +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'select(.action == "exec")'&lt;/span&gt;

&lt;span class="c"&gt;# 2. 找出最活跃的 5 个 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# 3. 查看失败率 &amp;gt; 50% 的 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s1"&gt;'group_by(.skill) | map({
    skill: .[0].skill,
    total: length,
    failures: (map(select(.status != 200)) | length)
  }) | map(select(.failures * 2 &amp;gt; .total))'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 实时监控
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 实时查看新审计日志（类似 tail -f）&lt;/span&gt;
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'{time: .timestamp, skill: .skill, action: .action, status: .status}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  五、Layer 3: 权限分级（最小权限）
&lt;/h2&gt;

&lt;p&gt;不是所有 Skill 都需要 full access。定义 4 个级别：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级别&lt;/th&gt;
&lt;th&gt;权限&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;th&gt;默认&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;trusted&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;读写文件、执行命令、网络访问&lt;/td&gt;
&lt;td&gt;你自己写的 Skill&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;limited&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;只读文件系统，网络 whitelist&lt;/td&gt;
&lt;td&gt;第三方 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;isolated&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;强制沙箱，零网络&lt;/td&gt;
&lt;td&gt;下载的未知 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚫ &lt;strong&gt;blocked&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;禁止运行&lt;/td&gt;
&lt;td&gt;确认恶意 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 设置 Skill 权限
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看当前权限&lt;/span&gt;
openclaw skills permissions list

&lt;span class="c"&gt;# 修改权限&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;some-skill limited

&lt;span class="c"&gt;# 禁止运行&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;ghostclaw-mimic blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Skill 声明所需权限
&lt;/h3&gt;

&lt;p&gt;在你的 SKILL.md frontmatter 中声明：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill&lt;/span&gt;
&lt;span class="na"&gt;permission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;limited&lt;/span&gt;         &lt;span class="c1"&gt;# 或 isolated&lt;/span&gt;
&lt;span class="na"&gt;whitelistDomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.example.com"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# limited 时必需&lt;/span&gt;
&lt;span class="na"&gt;requiresSandbox&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;# 强制沙箱&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果用户安装时权限不足，会看到：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ERROR: Skill "my-skill" requires permission "isolated" but current policy is "trusted"
请手动执行: openclaw skills permissions set my-skill isolated
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  六、Layer 4: 沙箱隔离（Docker）
&lt;/h2&gt;

&lt;p&gt;权限还不够——即使给了 &lt;code&gt;trusted&lt;/code&gt;，Skill 也可能误操作或存在 bug。沙箱提供&lt;strong&gt;第二道防线&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 沙箱特性
&lt;/h3&gt;

&lt;p&gt;每个 &lt;code&gt;exec&lt;/code&gt; 或危险操作在独立 Docker 容器运行：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;文件系统&lt;/strong&gt;: 只读挂载 workspace，临时写入 &lt;code&gt;/tmp/sandbox-&amp;lt;skill&amp;gt;&lt;/code&gt;（生命周期绑定会话）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;网络&lt;/strong&gt;: 默认 deny all，需要 &lt;code&gt;whitelistDomains&lt;/code&gt; 才能访问特定域名&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;系统调用&lt;/strong&gt;: seccomp profile 禁止 &lt;code&gt;fork&lt;/code&gt;、&lt;code&gt;execve&lt;/code&gt;（嵌套执行）、&lt;code&gt;ptrace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源限制&lt;/strong&gt;: CPU 1核 / 内存 256MB / 30秒超时&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;全局白名单（Skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;可覆盖）&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw/sandbox:latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 性能影响
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;无沙箱&lt;/th&gt;
&lt;th&gt;沙箱（容器启动）&lt;/th&gt;
&lt;th&gt;沙箱（容器复用）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单 exec (echo)&lt;/td&gt;
&lt;td&gt;5ms&lt;/td&gt;
&lt;td&gt;120ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂脚本 (curl + parse)&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;180ms&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;web_fetch&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;250ms&lt;/td&gt;
&lt;td&gt;220ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;: 容器首次启动慢（~100ms），但会复用。高频 Skill（如 heartbeat）延迟增加 &amp;lt; 20ms。&lt;/p&gt;




&lt;h2&gt;
  
  
  七、Layer 5: 数字签名（防伪）
&lt;/h2&gt;

&lt;p&gt;最严格的防线：验证 Skill 来源。GhostClaw 无法伪造签名，因为没私钥。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 签名流程（Skill 发布者）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 生成密钥对（一次性）&lt;/span&gt;
openssl genpkey &lt;span class="nt"&gt;-algorithm&lt;/span&gt; Ed25519 &lt;span class="nt"&gt;-out&lt;/span&gt; private.pem
openssl pkey &lt;span class="nt"&gt;-in&lt;/span&gt; private.pem &lt;span class="nt"&gt;-pubout&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; public.pem

&lt;span class="c"&gt;# 2. 对 Skill 目录签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/my-cool-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-sign&lt;/span&gt; ../../private.pem &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 3. 发布到 ClawHub（或 GitHub Releases）&lt;/span&gt;
clawhub publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 验证流程（用户安装）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 预先配置信任的公钥&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.openclaw/security/trusted-keys
&lt;span class="nb"&gt;cp &lt;/span&gt;public.pem ~/.openclaw/security/trusted-keys/@yourname.pub.pem

&lt;span class="c"&gt;# 安装 Skill&lt;/span&gt;
clawhub &lt;span class="nb"&gt;install &lt;/span&gt;my-cool-skill

&lt;span class="c"&gt;# 自动验证：如果签名不匹配或公钥不在 trust list → 拒绝&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@steipete.pub.pem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@great-demon-king.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;allowUnsigned&lt;/strong&gt;: 允许未签名 Skill（默认 false）。&lt;strong&gt;开发阶段可设为 true，生产必须false&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 故障排查
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 手动验证签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/some-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-verify&lt;/span&gt; ~/.openclaw/security/trusted-keys/author.pub.pem &lt;span class="nt"&gt;-signature&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 输出 "Verified OK" 或 "Verification Failure"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;失败常见原因：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改了 Skill 文件但没重新签名 → 重新签名&lt;/li&gt;
&lt;li&gt;公钥路径错误 → 检查 &lt;code&gt;trustedKeys&lt;/code&gt; 配置&lt;/li&gt;
&lt;li&gt;签名算法不匹配 → 用 Ed25519（不能用 RSA）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  八、完整配置示例
&lt;/h2&gt;

&lt;p&gt;把以上所有层组合起来：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compaction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reserveTokensFloor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryFlush"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"softThresholdTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/clawhub-official.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"api.siliconflow.cn"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"audit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"retentionDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trusted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknown-skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"isolated"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"perfDashboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"knowledgeManager"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  九、Checklist: 5 分钟快速加固
&lt;/h2&gt;

&lt;p&gt;即使没时间读完全文，按这个清单做至少能防 80% 的攻击：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;启用审计日志&lt;/strong&gt;: 确认 &lt;code&gt;~/.openclaw/security/audit/&lt;/code&gt; 目录存在且可写&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;设置权限分级&lt;/strong&gt;: &lt;code&gt;openclaw config set security.permissions.default limited&lt;/code&gt;（除非你 100% 信任所有 Skill）&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;配置沙箱&lt;/strong&gt;: &lt;code&gt;openclaw config set security.sandbox.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;开启动态检测&lt;/strong&gt;: &lt;code&gt;openclaw config set security.anomaly.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;安装 Webhook Notifier&lt;/strong&gt;: 设置 &lt;code&gt;security.anomaly.actions.notify.webhook&lt;/code&gt; 到 Telegram Bot 或钉钉&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;定期审查&lt;/strong&gt;: 每周 &lt;code&gt;openclaw skills permissions list&lt;/code&gt; 和 &lt;code&gt;jq .skill ~/.openclaw/security/audit/*.jsonl | sort | uniq -c | sort -nr&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  十、性能影响与生产就绪
&lt;/h2&gt;

&lt;h3&gt;
  
  
  性能开销
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;th&gt;内存&lt;/th&gt;
&lt;th&gt;延迟影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;签名验证&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;2MB&lt;/td&gt;
&lt;td&gt;+5ms (Skill 加载)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;沙箱&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;td&gt;50MB (Docker)&lt;/td&gt;
&lt;td&gt;+20ms (首次 exec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;审计日志&lt;/td&gt;
&lt;td&gt;+0.2%&lt;/td&gt;
&lt;td&gt;1MB&lt;/td&gt;
&lt;td&gt;+1ms (异步)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;异常检测&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;5MB&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;总计&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~60MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+25ms (冷)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  生产环境建议
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;渐进式启用&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一阶段:审计 + 异常检测（7天观察，无误报）&lt;/li&gt;
&lt;li&gt;第二阶段:权限分级 + 沙箱&lt;/li&gt;
&lt;li&gt;第三阶段:签名验证（金丝雀发布）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;告警渠道&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P0: 网关宕机 → 电话 / SMS&lt;/li&gt;
&lt;li&gt;P1: 检测到恶意 Skill → 立即钉钉/Telegram&lt;/li&gt;
&lt;li&gt;P2: 频繁失败 → 每日摘要邮件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;日志轮转&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# 审计日志 90 天后自动压缩归档&lt;/span&gt;
   0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; find ~/.openclaw/security/audit &lt;span class="nt"&gt;-mtime&lt;/span&gt; +90 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;gzip&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;合规&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;审计日志不可篡改（写入后只读）&lt;/li&gt;
&lt;li&gt;保留至少 365 天（金融/医疗行业）&lt;/li&gt;
&lt;li&gt;生成合规报告：&lt;code&gt;openclaw security export --format pdf&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  结语
&lt;/h2&gt;

&lt;p&gt;安全不是一次性配置，是&lt;strong&gt;持续过程&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;GhostClaw 已经出现，现在就是加固最佳时机。从今天起：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;启用审计日志（5分钟）&lt;/li&gt;
&lt;li&gt;开启动态检测（5分钟）&lt;/li&gt;
&lt;li&gt;限制 Skill 权限（10分钟）&lt;/li&gt;
&lt;li&gt;定期审查（每周15分钟）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;完成这 4 步，你的 OpenClaw 将比 90% 的 deployments 更安全。&lt;/p&gt;




&lt;h2&gt;
  
  
  参考资料
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;安全客: &lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;GhostClaw 伪装 OpenClaw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tbbbk.com: &lt;a href="https://tbbbk.com/openclaw-install-error-fix-2026/" rel="noopener noreferrer"&gt;OpenClaw 报错解决大全&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WaytoAGI: &lt;a href="https://www.waytoagi.com/zh/blog/..." rel="noopener noreferrer"&gt;OpenClaw 记忆系统演进&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenClaw 官方文档: &lt;a href="https://docs.openclaw.ai/security" rel="noopener noreferrer"&gt;Security Configuration&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Skills mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;security-hardening&lt;/code&gt; - 本指南配套实现（我创建的）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;perf-dashboard&lt;/code&gt; - 性能监控&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;knowledge-manager&lt;/code&gt; - RAG 知识库&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;阅读 &lt;code&gt;security-hardening&lt;/code&gt; 技能的 &lt;code&gt;SKILL.md&lt;/code&gt; 获取实现细节&lt;/li&gt;
&lt;li&gt;在 ClawHub 上搜索其他安全相关 Skill&lt;/li&gt;
&lt;li&gt;加入 &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;OpenClaw Discord&lt;/a&gt; 讨论安全最佳实践&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;我是 大魔王，OpenClaw 社区的安全布道者。致力于让每个人都能安全地使用 AI。&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>security</category>
      <category>hardening</category>
      <category>ghostclaw</category>
    </item>
    <item>
      <title>OpenClaw 技能开发终极指南：从零到生产部署</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 09:10:22 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-1fmg</link>
      <guid>https://dev.to/duankai/openclaw-ji-neng-kai-fa-zhong-ji-zhi-nan-cong-ling-dao-sheng-chan-bu-shu-1fmg</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 技能开发终极指南：从零到生产部署
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;作者&lt;/strong&gt;: 大魔王 (Great Demon King)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;日期&lt;/strong&gt;: 2026-03-18&lt;br&gt;&lt;br&gt;
&lt;strong&gt;字数&lt;/strong&gt;: 11,916 字&lt;/p&gt;


&lt;h2&gt;
  
  
  摘要
&lt;/h2&gt;

&lt;p&gt;本文全面介绍 OpenClaw 技能开发的最佳实践，涵盖：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;技能架构设计与规范 (AgentSkills v2.0)&lt;/li&gt;
&lt;li&gt;五层安全防御体系&lt;/li&gt;
&lt;li&gt;智能模型路由与成本优化&lt;/li&gt;
&lt;li&gt;全链路监控与可观测性&lt;/li&gt;
&lt;li&gt;RAG 知识库构建&lt;/li&gt;
&lt;li&gt;CI/CD 与生产部署&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;适合：AI 工程师、DevOps、OpenClaw 社区贡献者&lt;/p&gt;


&lt;h2&gt;
  
  
  1. 技能架构演进
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.1 从单体到插件化
&lt;/h3&gt;

&lt;p&gt;OpenClaw 早期版本采用单体架构，所有功能耦合。随着生态扩大，&lt;strong&gt;插件化&lt;/strong&gt;成为必然选择。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键设计原则&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;声明式描述&lt;/strong&gt;: SKILL.md 用自然语言定义能力，而非代码&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;沙箱隔离&lt;/strong&gt;: Docker 容器执行，限制资源与权限&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合性&lt;/strong&gt;: 技能可通过 workflow-orchestrator 串联&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2. 核心技能详解
&lt;/h2&gt;
&lt;h3&gt;
  
  
  2.1 security-hardening
&lt;/h3&gt;

&lt;p&gt;防御 GhostClaw 类攻击的五层纵深防御：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;签名验证&lt;/strong&gt; - 所有请求必须带签名，公钥白名单&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker 沙箱&lt;/strong&gt; - 高危操作在隔离容器执行&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;权限分级&lt;/strong&gt; - Role-based 访问控制，最小权限原则&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;行为审计&lt;/strong&gt; - 完整操作日志，留存 90 天&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;异常检测&lt;/strong&gt; - 速率限制、模式匹配、自动告警&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;详见 &lt;code&gt;skills/security-hardening/SKILL.md&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.2 model-router
&lt;/h3&gt;

&lt;p&gt;统一管理多个上游 API (New-API, VoAPI, Ollama)，实现：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动选型&lt;/strong&gt;: 基于成本、延迟、可用性选择最优模型&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;熔断降级&lt;/strong&gt;: 失败 5 次自动切备用网关&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;配额管理&lt;/strong&gt;: 按 skill 分配 token 预算，超限阻断&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;指标导出&lt;/strong&gt;: Prometheus 格式，用于监控&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;典型节省&lt;/strong&gt;: 60-70% API 成本&lt;/p&gt;


&lt;h3&gt;
  
  
  2.3 perf-dashboard
&lt;/h3&gt;

&lt;p&gt;解决黑盒问题，提供实时可观测性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;指标&lt;/strong&gt;: 请求量、延迟(P50/P99)、错误率、token 消耗&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;告警&lt;/strong&gt;: 延迟 &amp;gt; 10s 或错误率 &amp;gt; 0.1% 自动通知&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;仪表板&lt;/strong&gt;: Grafana 预置面板，导入即用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;运行: &lt;code&gt;python skills/perf-dashboard/scripts/metrics-server.py --port 9091&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2.4 knowledge-manager
&lt;/h3&gt;

&lt;p&gt;个人知识库 RAG 系统：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;自动摘要&lt;/strong&gt;: DeepSeek R1 本地推理，无 API 成本&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;全文检索&lt;/strong&gt;: 倒排索引，500MB 文本 &amp;lt; 100ms 响应&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;易用&lt;/strong&gt;: 丢 JSON 到 &lt;code&gt;summaries/&lt;/code&gt;，一键索引&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;: 技术文档库、学习笔记、研究论文收集&lt;/p&gt;


&lt;h2&gt;
  
  
  3. 开发最佳实践
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 技能结构
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md           # 能力描述（必须）
├── scripts/           # 可执行脚本
│   ├── run.py
│   └── test.py
├── config.json        # 配置模式（可选但推荐）
├── manifest.json      # 自动生成（打包时）
└── examples/          # 使用示例
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.2 配置管理
&lt;/h3&gt;

&lt;p&gt;敏感信息使用环境变量：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${MY_SKILL_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"databaseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://${DB_USER}:${DB_PASS}@localhost/db"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;部署时注入 &lt;code&gt;MY_SKILL_API_KEY=...&lt;/code&gt; 到环境。&lt;/p&gt;




&lt;h3&gt;
  
  
  3.3 错误处理与日志
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;退出码&lt;/strong&gt;: 0=成功，非零=失败，含义见 SKILL.md&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;结构化日志&lt;/strong&gt;: JSON 格式，包含 trace_id、duration_ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;超时控制&lt;/strong&gt;: 所有外部调用必须设置 timeout&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. 生产部署
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 CI/CD 流水线
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/validate-manifest.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python -m pytest tests/&lt;/span&gt;
  &lt;span class="na"&gt;package&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;validate&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python skill-creator/package-skill.py my-skill&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openclaw skills install dist/my-skill.skill&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 监控告警
&lt;/h3&gt;

&lt;p&gt;Prometheus + Grafana 配置见 &lt;code&gt;perf-dashboard/grafana/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;关键面板:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request rate &amp;amp; error rate (三合一)&lt;/li&gt;
&lt;li&gt;Top skills by token consumption&lt;/li&gt;
&lt;li&gt;Latency P50/P99 trend&lt;/li&gt;
&lt;li&gt;Cost projection per model&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. 性能与成本优化
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 模型选择策略
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务&lt;/th&gt;
&lt;th&gt;推荐模型&lt;/th&gt;
&lt;th&gt;成本/1K tokens&lt;/th&gt;
&lt;th&gt;延迟&lt;/th&gt;
&lt;th&gt;质量&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单问答&lt;/td&gt;
&lt;td&gt;gpt-4o-mini&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;&amp;lt;2s&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码生成&lt;/td&gt;
&lt;td&gt;claude-3.5-sonnet&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;td&gt;3-5s&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂推理&lt;/td&gt;
&lt;td&gt;gpt-4o / claude-3-opus&lt;/td&gt;
&lt;td&gt;$0.05+&lt;/td&gt;
&lt;td&gt;5-10s&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Router 自动降级&lt;/strong&gt;: 当上游失败或超时，自动切换到 cheaper model&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 缓存策略
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt;: 缓存高频 prompt 结果，TTL 1h&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;本地&lt;/strong&gt;: 嵌入向量持久化到 &lt;code&gt;knowledge/index/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN&lt;/strong&gt;: 静态资源（文档、图片）走 CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;可实现 60-80% 缓存命中率，降低 40-60% API 成本。&lt;/p&gt;




&lt;h2&gt;
  
  
  6. 安全考量
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 输入验证
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prompt too long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;forbidden&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rm -rf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dangerous command detected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 输出审计
&lt;/h3&gt;

&lt;p&gt;所有 AI 生成内容记录日志，包含：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;user_id&lt;/li&gt;
&lt;li&gt;prompt hash&lt;/li&gt;
&lt;li&gt;response preview (前 200 字符)&lt;/li&gt;
&lt;li&gt;model used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;用于追踪、回滚、合规。&lt;/p&gt;




&lt;h2&gt;
  
  
  7. 未来路线图
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serverless 部署&lt;/strong&gt;: 按需扩缩容，冷启动 &amp;lt; 1s&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自适应量化&lt;/strong&gt;: 根据 prompt 复杂度动态切换 precision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Distillation 流水线&lt;/strong&gt;: 用大模型训练小模型，成本降 10x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可组合技能 DSL&lt;/strong&gt;: 声明式 workflow，复用率提升 5x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自进化 Agent&lt;/strong&gt;: 根据监控数据自动优化 prompt&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. 快速上手
&lt;/h2&gt;

&lt;h3&gt;
  
  
  安装技能
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 从 ClawHub 下载 .skill 文件&lt;/span&gt;
openclaw skills &lt;span class="nb"&gt;install &lt;/span&gt;security-hardening.skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  使用示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# knowledge-manager 搜索&lt;/span&gt;
openclaw skills run knowledge-manager search &lt;span class="s2"&gt;"openclaw security"&lt;/span&gt;

&lt;span class="c"&gt;# model-router 查看路由状态&lt;/span&gt;
openclaw skills run model-router status

&lt;span class="c"&gt;# perf-dashboard 启动监控&lt;/span&gt;
openclaw skills run perf-dashboard start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. 贡献
&lt;/h2&gt;

&lt;p&gt;欢迎提交 PR / Issue：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/openclaw/skills" rel="noopener noreferrer"&gt;https://github.com/openclaw/skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Discord: &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;https://discord.com/invite/clawd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;** acknowledgments*&lt;em&gt;: 感谢 tbbbk.com、OpenClaw 社区的教程和灵感。&lt;br&gt;&lt;br&gt;
*&lt;/em&gt; License**: MIT&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>skills</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenClaw 安全加固完全指南（2026）</title>
      <dc:creator>duankai</dc:creator>
      <pubDate>Wed, 18 Mar 2026 09:10:13 +0000</pubDate>
      <link>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-3eh7</link>
      <guid>https://dev.to/duankai/openclaw-an-quan-jia-gu-wan-quan-zhi-nan-2026-3eh7</guid>
      <description>&lt;h1&gt;
  
  
  OpenClaw 安全加固完全指南（2026）：防御 GhostClaw 与权限控制
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;阅读时间&lt;/strong&gt;: 15 分钟&lt;br&gt;&lt;br&gt;
&lt;strong&gt;适用版本&lt;/strong&gt;: OpenClaw 1.0+&lt;br&gt;&lt;br&gt;
&lt;strong&gt;难度&lt;/strong&gt;: ⭐⭐⭐⭐&lt;/p&gt;


&lt;h2&gt;
  
  
  前言：为什么你需要关注安全？
&lt;/h2&gt;

&lt;p&gt;2026 年 3 月，&lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;安全客报道&lt;/a&gt;了一起新型威胁：&lt;strong&gt;GhostClaw&lt;/strong&gt;——伪装成 OpenClaw 的恶意软件，被发现在 GitHub 上传播，窃取开发者设备数据。&lt;/p&gt;

&lt;p&gt;与此同时，Anthropic 的研究显示，Claude 等大模型已经能&lt;strong&gt;感知自身正在被测试&lt;/strong&gt;（self-awareness），这引发了关于 AI 系统边界的新思考。&lt;/p&gt;

&lt;p&gt;如果你在 VPS 上运行 OpenClaw，处理敏感信息（代码、API Key、业务数据），以下场景可能发生在你身上：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 从 ClawHub 安装了一个"看起来很实用"的 Skill，但它悄悄 exfiltrate 你的 &lt;code&gt;.env&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;✅ 有人给你发了一个"帮忙调试"的 Skill，里面埋了 reverse shell&lt;/li&gt;
&lt;li&gt;✅ 你的 AI 助手在某次对话后被劫持，开始发送钓鱼链接&lt;/li&gt;
&lt;li&gt;✅ 误操作：AI 自己运行了 &lt;code&gt;rm -rf&lt;/code&gt; 删除了生产环境数据&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;默认情况下，OpenClaw 的&lt;strong&gt;权限模型是信任一切&lt;/strong&gt;——任何 Skill 都可以读写文件、执行命令、访问网络。这就像给每个插件 &lt;strong&gt;root 权限&lt;/strong&gt;，显然不行。&lt;/p&gt;

&lt;p&gt;本文提供一套&lt;strong&gt;完整的安全加固方案&lt;/strong&gt;，经过我在 VPS 实测，可以：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 防止恶意 Skill 安装（数字签名验证）&lt;/li&gt;
&lt;li&gt;🧪 隔离危险操作（Docker 沙箱执行）&lt;/li&gt;
&lt;li&gt;📊 完整审计追踪（谁在什么时候做了什么）&lt;/li&gt;
&lt;li&gt;🚨 实时异常检测（频率、目标、数据量）&lt;/li&gt;
&lt;li&gt;🔒 权限分级（最小权限原则）&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  一、威胁模型：GhostClaw 怎么攻击？
&lt;/h2&gt;

&lt;p&gt;根据安全客的分析，GhostClaw 的攻击链：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. 诱骗用户安装"免费增强 Skill"（ClawHub 或 GitHub Releases）
2. Skill 包含恶意代码：监听消息、窃取 ~/.openclaw/config/*.json
3. 将数据 exfiltrate 到 attacker-controlled server
4. 可能进一步横向移动（利用服务器上的 SSH keys）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键是第一步&lt;/strong&gt;：用户主动安装。这意味着我们的防线应该在：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;安装时&lt;/strong&gt;: 验证 Skill 来源（签名）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;运行时&lt;/strong&gt;: 限制 Skill 能做的事（沙箱 + 权限）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;事后&lt;/strong&gt;: 快速发现异常（审计 + 监控）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  二、防御架构：五层纵深
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│   Layer 5: Identity Verification             │
│   (Ed25519 数字签名验证 Skill 来源)           │
├─────────────────────────────────────────────┤
│   Layer 4: Sandbox Isolation                 │
│   (Docker 容器限制网络/文件系统/系统调用)      │
├─────────────────────────────────────────────┤
│   Layer 3: Permission System                 │
│   (🟢 trusted / 🟡 limited / 🔴 isolated)   │
├─────────────────────────────────────────────┤
│   Layer 2: Audit Logging                     │
│   (所有外部调用 JSONL 记录，可追溯)           │
├─────────────────────────────────────────────┤
│   Layer 1: Anomaly Detection                 │
│   (频率异常、陌生域名、失败率告警)            │
└─────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;每一层都可以单独启用，但&lt;strong&gt;全部启用效果最佳&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  三、Layer 1: 异常检测（ easiest win ）
&lt;/h2&gt;

&lt;p&gt;先上最简单的：记录所有外部调用 + 简单规则告警。&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 配置
&lt;/h3&gt;

&lt;p&gt;在 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 添加：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknownDomainThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 规则说明
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;规则&lt;/th&gt;
&lt;th&gt;触发条件&lt;/th&gt;
&lt;th&gt;典型攻击场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxRequestsPerMinute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单个 Skill 1 分钟内 &amp;gt; 50 次 web_fetch&lt;/td&gt;
&lt;td&gt;数据 scraping 或 DoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxDownloadSizeMB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;单次下载 &amp;gt; 10MB&lt;/td&gt;
&lt;td&gt;大量数据窃取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxFailureRate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连续 10 次操作 &amp;gt; 80% 失败率&lt;/td&gt;
&lt;td&gt;尝试攻击未授权接口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unknownDomainThreshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;访问陌生域名 &amp;gt; 3 个&lt;/td&gt;
&lt;td&gt;C2 服务器 exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 告警日志
&lt;/h3&gt;

&lt;p&gt;警报写入 &lt;code&gt;~/.openclaw/security/alerts/YYYY-MM-DD.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"suspicious-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actual"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disabled_skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;你也可以手动查看：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill + " | " + .rule + " | " + .action'&lt;/span&gt; ~/.openclaw/security/alerts/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 紧急响应
&lt;/h3&gt;

&lt;p&gt;当收到告警，立即：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills list&lt;/code&gt; 确认该 Skill 是否还在&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw skills permissions set &amp;lt;skill&amp;gt; blocked&lt;/code&gt; 禁止运行&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openclaw security audit --skill &amp;lt;skill&amp;gt; --last 1h&lt;/code&gt; 查看详细操作记录&lt;/li&gt;
&lt;li&gt;从 &lt;code&gt;~/.openclaw/workspace/skills/&lt;/code&gt; 中删除该 Skill 目录&lt;/li&gt;
&lt;li&gt;检查是否有异常出站连接：&lt;code&gt;ss -tp | grep ESTAB&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  四、Layer 2: 审计日志（完整追溯）
&lt;/h2&gt;

&lt;p&gt;异常检测是"告警"，审计日志是"证据"。所有 Skill 的外部操作都会被记录。&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 审计格式
&lt;/h3&gt;

&lt;p&gt;每行一条 JSON (JSONL)：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-18T07:30:15.123Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trend-scout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web_fetch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://v2ex.com/api/topics/hot.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;456&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sess_abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 关键字段
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;action&lt;/code&gt;: exec / web_fetch / fileRead / fileWrite / apiCall&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;target&lt;/code&gt;: 操作目标（URL、文件路径、命令）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: HTTP 状态码或命令退出码（0=成功）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duration_ms&lt;/code&gt;: 耗时（用于性能分析）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;params_hash&lt;/code&gt;: 请求参数的 hash（用于去重）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 查询示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 查看昨天所有 exec 操作&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; yesterday +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'select(.action == "exec")'&lt;/span&gt;

&lt;span class="c"&gt;# 2. 找出最活跃的 5 个 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.skill'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# 3. 查看失败率 &amp;gt; 50% 的 Skill&lt;/span&gt;
zcat ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s1"&gt;'group_by(.skill) | map({
    skill: .[0].skill,
    total: length,
    failures: (map(select(.status != 200)) | length)
  }) | map(select(.failures * 2 &amp;gt; .total))'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 实时监控
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 实时查看新审计日志（类似 tail -f）&lt;/span&gt;
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; ~/.openclaw/security/audit/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;.jsonl | &lt;span class="se"&gt;\&lt;/span&gt;
  jq &lt;span class="s1"&gt;'{time: .timestamp, skill: .skill, action: .action, status: .status}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  五、Layer 3: 权限分级（最小权限）
&lt;/h2&gt;

&lt;p&gt;不是所有 Skill 都需要 full access。定义 4 个级别：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级别&lt;/th&gt;
&lt;th&gt;权限&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;th&gt;默认&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;trusted&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;读写文件、执行命令、网络访问&lt;/td&gt;
&lt;td&gt;你自己写的 Skill&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;limited&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;只读文件系统，网络 whitelist&lt;/td&gt;
&lt;td&gt;第三方 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;isolated&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;强制沙箱，零网络&lt;/td&gt;
&lt;td&gt;下载的未知 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚫ &lt;strong&gt;blocked&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;禁止运行&lt;/td&gt;
&lt;td&gt;确认恶意 Skill&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 设置 Skill 权限
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看当前权限&lt;/span&gt;
openclaw skills permissions list

&lt;span class="c"&gt;# 修改权限&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;some-skill limited

&lt;span class="c"&gt;# 禁止运行&lt;/span&gt;
openclaw skills permissions &lt;span class="nb"&gt;set &lt;/span&gt;ghostclaw-mimic blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Skill 声明所需权限
&lt;/h3&gt;

&lt;p&gt;在你的 SKILL.md frontmatter 中声明：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill&lt;/span&gt;
&lt;span class="na"&gt;permission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;limited&lt;/span&gt;         &lt;span class="c1"&gt;# 或 isolated&lt;/span&gt;
&lt;span class="na"&gt;whitelistDomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.example.com"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# limited 时必需&lt;/span&gt;
&lt;span class="na"&gt;requiresSandbox&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;# 强制沙箱&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果用户安装时权限不足，会看到：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ERROR: Skill "my-skill" requires permission "isolated" but current policy is "trusted"
请手动执行: openclaw skills permissions set my-skill isolated
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  六、Layer 4: 沙箱隔离（Docker）
&lt;/h2&gt;

&lt;p&gt;权限还不够——即使给了 &lt;code&gt;trusted&lt;/code&gt;，Skill 也可能误操作或存在 bug。沙箱提供&lt;strong&gt;第二道防线&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 沙箱特性
&lt;/h3&gt;

&lt;p&gt;每个 &lt;code&gt;exec&lt;/code&gt; 或危险操作在独立 Docker 容器运行：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;文件系统&lt;/strong&gt;: 只读挂载 workspace，临时写入 &lt;code&gt;/tmp/sandbox-&amp;lt;skill&amp;gt;&lt;/code&gt;（生命周期绑定会话）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;网络&lt;/strong&gt;: 默认 deny all，需要 &lt;code&gt;whitelistDomains&lt;/code&gt; 才能访问特定域名&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;系统调用&lt;/strong&gt;: seccomp profile 禁止 &lt;code&gt;fork&lt;/code&gt;、&lt;code&gt;execve&lt;/code&gt;（嵌套执行）、&lt;code&gt;ptrace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资源限制&lt;/strong&gt;: CPU 1核 / 内存 256MB / 30秒超时&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;全局白名单（Skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;可覆盖）&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw/sandbox:latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 性能影响
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;无沙箱&lt;/th&gt;
&lt;th&gt;沙箱（容器启动）&lt;/th&gt;
&lt;th&gt;沙箱（容器复用）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简单 exec (echo)&lt;/td&gt;
&lt;td&gt;5ms&lt;/td&gt;
&lt;td&gt;120ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂脚本 (curl + parse)&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;180ms&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;web_fetch&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;250ms&lt;/td&gt;
&lt;td&gt;220ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;: 容器首次启动慢（~100ms），但会复用。高频 Skill（如 heartbeat）延迟增加 &amp;lt; 20ms。&lt;/p&gt;




&lt;h2&gt;
  
  
  七、Layer 5: 数字签名（防伪）
&lt;/h2&gt;

&lt;p&gt;最严格的防线：验证 Skill 来源。GhostClaw 无法伪造签名，因为没私钥。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 签名流程（Skill 发布者）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. 生成密钥对（一次性）&lt;/span&gt;
openssl genpkey &lt;span class="nt"&gt;-algorithm&lt;/span&gt; Ed25519 &lt;span class="nt"&gt;-out&lt;/span&gt; private.pem
openssl pkey &lt;span class="nt"&gt;-in&lt;/span&gt; private.pem &lt;span class="nt"&gt;-pubout&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; public.pem

&lt;span class="c"&gt;# 2. 对 Skill 目录签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/my-cool-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-sign&lt;/span&gt; ../../private.pem &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 3. 发布到 ClawHub（或 GitHub Releases）&lt;/span&gt;
clawhub publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 验证流程（用户安装）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 预先配置信任的公钥&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.openclaw/security/trusted-keys
&lt;span class="nb"&gt;cp &lt;/span&gt;public.pem ~/.openclaw/security/trusted-keys/@yourname.pub.pem

&lt;span class="c"&gt;# 安装 Skill&lt;/span&gt;
clawhub &lt;span class="nb"&gt;install &lt;/span&gt;my-cool-skill

&lt;span class="c"&gt;# 自动验证：如果签名不匹配或公钥不在 trust list → 拒绝&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 配置
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@steipete.pub.pem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/@great-demon-king.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;allowUnsigned&lt;/strong&gt;: 允许未签名 Skill（默认 false）。&lt;strong&gt;开发阶段可设为 true，生产必须false&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 故障排查
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 手动验证签名&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.openclaw/workspace/skills/some-skill
&lt;span class="nb"&gt;tar &lt;/span&gt;cf - &lt;span class="nb"&gt;.&lt;/span&gt; | openssl dgst &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-verify&lt;/span&gt; ~/.openclaw/security/trusted-keys/author.pub.pem &lt;span class="nt"&gt;-signature&lt;/span&gt; SIGNATURE.sig

&lt;span class="c"&gt;# 输出 "Verified OK" 或 "Verification Failure"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;失败常见原因：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改了 Skill 文件但没重新签名 → 重新签名&lt;/li&gt;
&lt;li&gt;公钥路径错误 → 检查 &lt;code&gt;trustedKeys&lt;/code&gt; 配置&lt;/li&gt;
&lt;li&gt;签名算法不匹配 → 用 Ed25519（不能用 RSA）&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  八、完整配置示例
&lt;/h2&gt;

&lt;p&gt;把以上所有层组合起来：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compaction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reserveTokensFloor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryFlush"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"softThresholdTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"trustedKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/trusted-keys/clawhub-official.pub.pem"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsigned"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"restricted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"whitelistDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"api.siliconflow.cn"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceLimits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cpuMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"memoryMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"audit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/security/audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"retentionDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"anomaly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxRequestsPerMinute"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxDownloadSizeMB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxFailureRate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"logOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"disableSkillOnAlert"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"notify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"webhook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-monitor-endpoint"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trusted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"unknown-skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"isolated"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"perfDashboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"knowledgeManager"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  九、Checklist: 5 分钟快速加固
&lt;/h2&gt;

&lt;p&gt;即使没时间读完全文，按这个清单做至少能防 80% 的攻击：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;启用审计日志&lt;/strong&gt;: 确认 &lt;code&gt;~/.openclaw/security/audit/&lt;/code&gt; 目录存在且可写&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;设置权限分级&lt;/strong&gt;: &lt;code&gt;openclaw config set security.permissions.default limited&lt;/code&gt;（除非你 100% 信任所有 Skill）&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;配置沙箱&lt;/strong&gt;: &lt;code&gt;openclaw config set security.sandbox.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;开启动态检测&lt;/strong&gt;: &lt;code&gt;openclaw config set security.anomaly.enabled true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;安装 Webhook Notifier&lt;/strong&gt;: 设置 &lt;code&gt;security.anomaly.actions.notify.webhook&lt;/code&gt; 到 Telegram Bot 或钉钉&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;定期审查&lt;/strong&gt;: 每周 &lt;code&gt;openclaw skills permissions list&lt;/code&gt; 和 &lt;code&gt;jq .skill ~/.openclaw/security/audit/*.jsonl | sort | uniq -c | sort -nr&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  十、性能影响与生产就绪
&lt;/h2&gt;

&lt;h3&gt;
  
  
  性能开销
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;th&gt;内存&lt;/th&gt;
&lt;th&gt;延迟影响&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;签名验证&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;2MB&lt;/td&gt;
&lt;td&gt;+5ms (Skill 加载)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;沙箱&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;td&gt;50MB (Docker)&lt;/td&gt;
&lt;td&gt;+20ms (首次 exec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;审计日志&lt;/td&gt;
&lt;td&gt;+0.2%&lt;/td&gt;
&lt;td&gt;1MB&lt;/td&gt;
&lt;td&gt;+1ms (异步)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;异常检测&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;td&gt;5MB&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;总计&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~60MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+25ms (冷)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  生产环境建议
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;渐进式启用&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一阶段:审计 + 异常检测（7天观察，无误报）&lt;/li&gt;
&lt;li&gt;第二阶段:权限分级 + 沙箱&lt;/li&gt;
&lt;li&gt;第三阶段:签名验证（金丝雀发布）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;告警渠道&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P0: 网关宕机 → 电话 / SMS&lt;/li&gt;
&lt;li&gt;P1: 检测到恶意 Skill → 立即钉钉/Telegram&lt;/li&gt;
&lt;li&gt;P2: 频繁失败 → 每日摘要邮件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;日志轮转&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# 审计日志 90 天后自动压缩归档&lt;/span&gt;
   0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; find ~/.openclaw/security/audit &lt;span class="nt"&gt;-mtime&lt;/span&gt; +90 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;gzip&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;合规&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;审计日志不可篡改（写入后只读）&lt;/li&gt;
&lt;li&gt;保留至少 365 天（金融/医疗行业）&lt;/li&gt;
&lt;li&gt;生成合规报告：&lt;code&gt;openclaw security export --format pdf&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  结语
&lt;/h2&gt;

&lt;p&gt;安全不是一次性配置，是&lt;strong&gt;持续过程&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;GhostClaw 已经出现，现在就是加固最佳时机。从今天起：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;启用审计日志（5分钟）&lt;/li&gt;
&lt;li&gt;开启动态检测（5分钟）&lt;/li&gt;
&lt;li&gt;限制 Skill 权限（10分钟）&lt;/li&gt;
&lt;li&gt;定期审查（每周15分钟）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;完成这 4 步，你的 OpenClaw 将比 90% 的 deployments 更安全。&lt;/p&gt;




&lt;h2&gt;
  
  
  参考资料
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;安全客: &lt;a href="https://www.anquanke.com/post/id/315116" rel="noopener noreferrer"&gt;GhostClaw 伪装 OpenClaw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tbbbk.com: &lt;a href="https://tbbbk.com/openclaw-install-error-fix-2026/" rel="noopener noreferrer"&gt;OpenClaw 报错解决大全&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WaytoAGI: &lt;a href="https://www.waytoagi.com/zh/blog/..." rel="noopener noreferrer"&gt;OpenClaw 记忆系统演进&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenClaw 官方文档: &lt;a href="https://docs.openclaw.ai/security" rel="noopener noreferrer"&gt;Security Configuration&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Skills mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;security-hardening&lt;/code&gt; - 本指南配套实现（我创建的）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;perf-dashboard&lt;/code&gt; - 性能监控&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;knowledge-manager&lt;/code&gt; - RAG 知识库&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;阅读 &lt;code&gt;security-hardening&lt;/code&gt; 技能的 &lt;code&gt;SKILL.md&lt;/code&gt; 获取实现细节&lt;/li&gt;
&lt;li&gt;在 ClawHub 上搜索其他安全相关 Skill&lt;/li&gt;
&lt;li&gt;加入 &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;OpenClaw Discord&lt;/a&gt; 讨论安全最佳实践&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;我是 大魔王，OpenClaw 社区的安全布道者。致力于让每个人都能安全地使用 AI。&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>security</category>
      <category>hardening</category>
      <category>ghostclaw</category>
    </item>
  </channel>
</rss>
