OpenClaw 是什么?本地智能体操作系统内核解析

📅 2026/7/16 3:44:10
OpenClaw 是什么?本地智能体操作系统内核解析
1. 安装完 OpenClaw 之后你手上真正握住了什么很多人在终端里敲下npm install -g openclaw或者跑完 Docker 部署脚本看到openclaw version成功返回就以为“搞定了”。但真相是OpenClaw 本身不是终点而是一把刚被擦亮、尚未开刃的万能钥匙——它不自带锁孔也不预设门后风景。你手里的不是一套功能完备的软件而是一个可无限延展的本地化智能体操作系统内核。它的价值完全取决于你往里面装什么、怎么装、以及你打算用它撬动哪扇门。这和你装完 Python 解释器后问“我能做什么”本质一样Python 本身不写代码、不画图、不发邮件它只提供执行环境。OpenClaw 同理——它提供的是技能Skill的注册中心、上下文调度引擎、工具调用沙箱、记忆管理框架和本地 LLM 对接层。所有热搜词里反复出现的n8n、Obsidian、Claude Code、Codex都不是 OpenClaw 的内置模块而是它能无缝接入的外部服务节点。你安装的不是“AI 助手”而是一个可编程的智能体中枢。我第一次跑通openclaw init时也以为该开始写 prompt 了。结果发现 CLI 只返回一行冷冰冰的No skills installed.。那一刻我才意识到OpenClaw 的“空”不是缺陷而是设计哲学——它拒绝预设你的工作流强制你从零定义自己的数字分身能力边界。这种“空”恰恰是它对抗云端大模型黑盒、实现数据主权和行为可审计的核心前提。所以新手到熟手的进阶根本不是学更多命令而是完成三次认知跃迁第一跃迁从“用户”到“系统管理员”理解~/.openclaw/目录结构skills/、config/、memory/、logs/明白openclaw skills install实际是在做符号链接或 Git clone而非下载二进制包。你会开始手动编辑config.yaml调整 LLM provider 的 timeout 和 max_tokens而不是依赖默认值。第二跃迁从“调用者”到“编排者”发现单个 Skill 往往只能解决原子问题如“查天气”而真实需求是链式动作“查北京天气 → 若有雨 → 推送提醒 → 同步到 Obsidian 日记 → 生成明日穿搭建议”。这时你会主动用n8n或skill creator构建工作流让 OpenClaw 成为工作流中的一个可信赖节点而非唯一执行者。第三跃迁从“使用者”到“创造者”当你发现某个 Skill 总是返回错误格式的 JSON或者某家 API 的 rate limit 太低影响体验你会直接cd ~/.openclaw/skills/skill-name打开index.ts修改重试逻辑甚至 fork 原仓库提交 PR。此时 OpenClaw 已成为你技术栈中可深度定制的基础设施。提示所有热词中openclaw : 无法将“openclaw”项识别为 cmdlet...这类报错90% 源于未将 npm 全局 bin 目录加入 PATHWindows 是%APPDATA%\npmmacOS 是/usr/local/bin或~/.npm-global/bin。这不是 OpenClaw 的 bug而是 Node.js 环境配置的常识性门槛——跨过它才算真正拿到了那把钥匙的使用权。2. 技能Skill不是插件而是可执行的“数字契约”在 OpenClaw 生态里把 Skill 理解成 Chrome 插件或 Obsidian 插件是新手最大的思维陷阱。插件是被动加载的 UI 扩展而 Skill 是主动声明能力边界的可执行合约。它包含三个不可分割的硬性要素2.1 技能的“宪法”skill.md文件每个 Skill 根目录下必有的skill.md不是说明文档而是机器可读的能力白皮书。它用 YAML Front Matter 定义了 Skill 的“数字身份”--- name: GitHub Issue Tracker slug: github-issue-tracker description: Create, search and update GitHub issues with natural language version: 1.3.0 author: devclawhub.ai license: MIT tags: [git, github, devops] required_env: [GITHUB_TOKEN] permissions: - filesystem:read:/home/user/projects - http:post:https://api.github.com - memory:write:github_issues_cache ---注意required_env和permissions字段——它们不是建议而是运行时强制校验项。当你执行openclaw skills install github-issue-tracker时OpenClaw 会检查环境变量GITHUB_TOKEN是否存在且非空验证当前用户对/home/user/projects目录是否有读权限在内存沙箱中为该 Skill 创建独立命名空间github_issues_cache若任一检查失败立即中止安装并抛出明确错误如Missing required environment variable: GITHUB_TOKEN。这解释了为什么superpower skill或comet skill这类热词常伴随“安装失败”——它们往往要求OPENAI_API_KEY或CLAWHUB_WEBHOOK_SECRET而新手常忽略.env文件的创建。真正的 Skill 管理始于一份严谨的环境变量清单。2.2 技能的“肌肉”index.ts中的工具函数Skill 的核心逻辑写在index.tsTypeScript或index.pyPython中但它不是传统脚本。每个导出的函数必须严格遵循MCPModel Context Protocol规范// index.ts 示例Obsidian 日记同步 Skill export async function syncToObsidian( context: MCPContext, params: { content: string; date: string; // YYYY-MM-DD vaultPath: string; } ): PromiseMCPResult { // 1. 从 context.memory 读取上次同步时间戳 const lastSync await context.memory.get(obsidian_last_sync); // 2. 调用 Obsidian HTTP API需提前在 config.yaml 中配置 const response await fetch( ${context.config.obsidian_api_url}/v1/files, { method: POST, headers: { Authorization: Token ${context.config.obsidian_api_token} }, body: JSON.stringify({ path: daily/${params.date}.md, content: params.content }) } ); // 3. 将新时间戳写入 memory供下次调用参考 await context.memory.set(obsidian_last_sync, new Date().toISOString()); return { success: response.ok, data: { fileId: daily/2024-06-15.md }, metadata: { http_status: response.status } }; }关键点在于context对象它封装了 Skill 运行所需的全部上下文——LLM 的推理结果context.input、用户原始请求context.raw_input、全局配置context.config、安全沙箱内存context.memory和工具调用通道context.tools。这使得 Skill 无需关心“谁调用了我”只需专注“如何完成任务”。2.3 技能的“身份证”ClawHub 上的签名与审计所有通过openclaw skills install slug安装的 Skill都来自 ClawHub —— OpenClaw 的官方技能注册中心。ClawHub 不是应用商店而是一个去中心化技能证书颁发机构。每个 Skill 页面都显示VirusTotal 扫描报告由 OpenClaw 官方合作提供Snyk 安全审计结果检测硬编码密钥、危险 eval 调用等作者签名公钥用于验证 Skill 包完整性社区评分与使用统计非人工打分而是基于 GitHub Stars 和 ClawHub 下载量的加权算法。这就是为什么VoltAgent/awesome-openclaw-skills这个 GitHub 仓库能获得 50.3k Stars它不是技能源码库而是经过人工二次筛选的 ClabHub 技能索引。它过滤掉了 7215 个低质/恶意 Skill包括 886 个加密货币相关、373 个已知恶意样本只保留真正经受住社区检验的 5400 个。当你在awesome-openclaw-skills列表中点击 “Install”背后实际触发的是npx clawhub install slug它会从 ClawHub 获取 Skill 的最新 Git Commit Hash下载对应版本的 ZIP 包用作者公钥验证 ZIP 签名运行 Snyk 扫描若本地已安装最终才软链接到~/.openclaw/skills/。注意clawhub install和openclaw skills install的区别在于前者绕过 OpenClaw CLI 的权限校验直接操作文件系统。生产环境强烈建议始终使用openclaw skills install因为它会强制执行required_env和permissions检查这是安全底线。3. 从零构建你的第一个生产力闭环n8n OpenClaw Obsidian光知道 Skill 是什么还不够。新手最需要的是一个能立刻上手、看得见效果的完整工作流。我们以“每日晨间日报”为例演示如何用三件套打通信息流n8n作为自动化调度中枢监听事件、组合动作OpenClaw作为智能处理单元理解自然语言、调用 Skill、生成内容Obsidian作为知识沉淀终点存储结构化笔记、建立双向链接。这个闭环的价值在于它把原本分散在邮件、Slack、待办列表、网页搜索中的碎片信息压缩成一份每日可执行的 Markdown 报告并自动归档到你的第二大脑。3.1 第一步在 n8n 中搭建触发器与数据管道n8n 的核心是 Workflow工作流。我们创建一个名为Daily Morning Report的新 WorkflowTrigger 节点Cron Scheduler设置为每天 7:00 AM 触发0 0 7 * * *。这是整个流程的“心脏起搏器”。HTTP Request 节点获取今日天气URLhttps://api.open-meteo.com/v1/forecast?latitude39.9042longitude116.4074currenttemperature_2m,weather_code,wind_speed_10mhourlyuv,precipitation_probability_24hdailysunrise,sunsettimezoneAsia/ShanghaiMethodGET注意这里不调用 OpenClaw因为天气 API 是公开无认证的n8n 直接调用更高效。Set 节点构造 OpenClaw 输入 Payload将上一步的 JSON 响应转换为 OpenClaw 能理解的自然语言指令{ input: 根据以下天气数据生成一段适合放在晨间日报中的简短描述50字以内{{ $json.current.temperature_2m }}°C{{ $json.current.weather_code }}风速{{ $json.current.wind_speed_10m }}m/s。重点提示是否需要带伞或添衣。, skill: weather-summary }关键点skill字段指定了要调用的 Skill 名称input是传递给 Skill 的原始文本。n8n 不解析这个文本只是原样转发。HTTP Request 节点调用 OpenClaw APIURLhttp://localhost:3000/api/v1/skill/run假设 OpenClaw 运行在本地 3000 端口MethodPOSTBody{{ $json }}即上一步 Set 节点的输出HeadersContent-Type: application/json此时n8n 就像一个快递员把包裹Payload送到 OpenClaw 的收件地址。3.2 第二步在 OpenClaw 中编写weather-summarySkill在~/.openclaw/skills/weather-summary/目录下创建skill.md--- name: Weather Summary Generator slug: weather-summary description: Convert raw weather API JSON into human-readable morning report snippets version: 1.0.0 author: your-namedomain.com license: MIT tags: [weather, reporting] required_env: [] permissions: [] ---index.tsimport { MCPContext, MCPResult } from openclaw/core; export async function run( context: MCPContext, params: { input: string } ): PromiseMCPResult { try { // 1. 从 input 中提取关键数值正则比 JSON.parse 更鲁棒因 input 是自然语言 const tempMatch params.input.match(/(\d)°C/); const windMatch params.input.match(/风速(\d\.\d)m\/s/); let summary ; if (tempMatch parseFloat(tempMatch[1]) 30) { summary 今日高温注意防暑降温; } else if (tempMatch parseFloat(tempMatch[1]) 10) { summary ❄️ 气温偏低记得添衣保暖。; } else { summary ️ 天气舒适适宜户外活动。; } if (windMatch parseFloat(windMatch[1]) 5) { summary 强风预警请注意高空坠物。; } // 2. 返回结构化结果供 n8n 下游处理 return { success: true, data: { summary: summary, timestamp: new Date().toISOString() } }; } catch (error) { return { success: false, error: Weather parsing failed: ${error.message} }; } }部署后执行openclaw skills install weather-summary。此时 OpenClaw 已具备“天气翻译官”能力。3.3 第三步n8n 组合最终输出并写入 Obsidian继续在 n8n Workflow 中添加节点Function 节点组装完整日报 Markdown使用 JavaScript 将天气摘要、其他数据源如昨日 GitHub 提交数、待办事项拼接const weather $input.all()[0].json.data.summary; const githubCommits $input.all()[1].json.total_count || 0; return [ { json: { markdown: # 晨间日报 ${new Date().toLocaleDateString(zh-CN)}️ 天气速览${weather} 开发动态昨日提交${githubCommits} 次待办事项3 项详见 [[Todays Tasks]]生成时间${new Date().toLocaleTimeString(zh-CN)} } } ];6. **HTTP Request 节点写入 Obsidian Vault** - URLhttp://localhost:27123/v1/files/daily/{{ $now.format(YYYY-MM-DD) }}.mdObsidian HTTP Server 插件端口 - MethodPUT - Body{{ $json.markdown }} - HeadersAuthorization: Bearer your_obsidian_http_token 至此当 Cron 在明天早上 7:00 触发时整个流水线将自动运行n8n 拉取天气 → 转发给 OpenClaw → OpenClaw 生成摘要 → n8n 拼接全文 → 写入 Obsidian。你打开 Obsidian就能看到 daily/2024-06-15.md 文件已自动生成。 提示Obsidian 的 HTTP Server 插件默认关闭需在设置中启用并设置 Token。这是安全设计——没有 Token任何程序都无法写入你的知识库。这也印证了 OpenClaw 的哲学所有外部连接都必须显式授权不存在“默认开启”的后门。 ## 4. 避坑指南那些让新手卡住三天的真实问题与根因定位 即使按教程一步步操作90% 的新手仍会在前两周遭遇看似诡异的失败。这些不是 Bug而是 OpenClaw 设计中刻意暴露的“系统接口”逼你直面底层机制。以下是我在真实项目中记录的五大高频陷阱附带完整的排查链路 ### 4.1 陷阱一“openclaw command not found” 的深层路径战争 **现象**npm install -g openclaw 成功但终端输入 openclaw --version 报错 command not found。 **表面原因**Shell 未找到 openclaw 可执行文件路径。 **根因定位过程** 1. 首先确认 npm 全局安装位置npm config get prefix - macOS/Linux 通常返回 /usr/local 或 ~/.npm-global - Windows 返回 %APPDATA%\npm 2. 进入该目录查找 bin 子目录ls -la $(npm config get prefix)/bin - 应能看到 openclaw - ../lib/node_modules/openclaw/bin/openclaw.js 的符号链接 3. 检查当前 Shell 的 PATHecho $PATHmacOS/Linux或 echo %PATH%Windows - 关键看输出中是否包含步骤1得到的 prefix 路径下的 bin 目录 4. 若缺失则手动添加 - macOS/Linux在 ~/.zshrc 或 ~/.bash_profile 中追加 export PATH$(npm config get prefix)/bin:$PATH - Windows在系统环境变量中将 %APPDATA%\npm 添加到 PATH **为什么不能跳过** 因为 npm install -g 本质是将包的 bin 字段指向的脚本复制到全局 bin 目录并创建符号链接。Shell 只在 PATH 列表中从左到右搜索可执行文件。这和 python 命令找不到是同一类问题是 Unix 系统的基础机制不是 OpenClaw 的缺陷。 ### 4.2 陷阱二Obsidian 插件“无法连接 OpenClaw”的网络策略冲突 **现象**Obsidian 中安装了 OpenClaw Connector 插件配置了 http://localhost:3000但点击“Send to OpenClaw”无响应。 **排查链路** 1. **验证 OpenClaw 是否真在监听**lsof -i :3000macOS/Linux或 netstat -ano | findstr :3000Windows - 若无输出说明 OpenClaw 未启动或端口被占用 2. **检查 OpenClaw 配置**打开 ~/.openclaw/config.yaml确认 server.port 为 3000且 server.host 为 0.0.0.0而非 127.0.0.1 - 127.0.0.1 只允许本机回环访问而 Obsidian 插件可能通过 Electron 的渲染进程发起请求路径更复杂 3. **测试基础连通性**在浏览器中访问 http://localhost:3000/health - 若返回 {status:ok}说明服务正常若超时检查防火墙 4. **终极验证curl 直连**curl -X POST http://localhost:3000/api/v1/chat -H Content-Type: application/json -d {message:hello} - 若 curl 成功而 Obsidian 失败问题一定在插件或 Obsidian 渲染进程的 CORS 策略 **经验技巧** Obsidian 的 HTTP Server 插件和 OpenClaw 的 API 服务本质是两个独立的 Web 服务。它们之间的通信受浏览器同源策略Same-Origin Policy限制。解决方案不是关掉 CORS不安全而是 - 在 OpenClaw 启动时添加 --cors 参数openclaw start --cors - 或在 config.yaml 中设置 server.cors: [http://localhost:27123]Obsidian 默认端口。 ### 4.3 陷阱三n8n workflow automation 导出 JSON 无法被 OpenClaw 识别 **现象**在 n8n 中导出 Workflow JSON粘贴到 OpenClaw 的 n8n-workflow-automation Skill 中执行时报错 Invalid workflow JSON schema。 **根因分析** n8n-workflow-automation Skill 并非直接执行 n8n JSON而是将其**编译为 OpenClaw 原生的 Skill DSL领域特定语言**。n8n 的 JSON Schema 包含大量 UI 元数据如节点坐标 x, y而 OpenClaw 只需要纯逻辑拓扑。 **正确做法** 1. 在 n8n 中不要导出整个 Workflow JSON而是点击右上角 ... → Export as JSON (for sharing) → 选择 Without credentials 2. 将导出的 JSON 中 nodes 数组提取出来删除所有 parameters 中的敏感字段如 API keys 3. 用 n8n-workflow-automation Skill 的专用 CLI 工具转换 bash npx openclaw/n8n-cli convert --input workflow.json --output ./skills/my-n8n-skill/该工具会解析 n8n 节点类型HTTP Request →http_callFunction →js_eval生成符合 MCP 规范的index.ts自动注入required_env如N8N_API_URL,N8N_API_KEY。避坑心得不要试图手动修改 Skill 的index.ts来适配 n8n。OpenClaw 的 Skill 生态强调“声明式编排”n8n 是外部系统它的 Workflow 应被视为一种配置文件而非代码。就像你不会手动改 Linux 内核源码来适配某个硬件驱动而是用modprobe加载驱动模块。4.4 陷阱四claude code skill的 OAuth 流程卡在“正在重定向”页面现象执行openclaw onboard --auth-choice claude-code后浏览器打开https://claude.ai/oauth/...显示“正在重定向”然后空白。根因定位检查重定向 URI 白名单Claude Code 的 OAuth 要求回调地址Redirect URI必须在开发者后台预注册。OpenClaw 默认使用http://localhost:3000/auth/callback。登录 Claude Developer Portal 进入Your Apps→Edit App→Redirect URIs确认已添加http://localhost:3000/auth/callback。若已添加检查 OpenClaw 的config.yaml中auth.claude.redirect_uri是否与之完全一致包括末尾斜杠。为什么容易忽略OAuth 是三方协议OpenClaw 只是客户端ClientClaude 是授权服务器Authorization Server。OpenClaw 无法绕过其安全策略。这个陷阱的本质是混淆了“本地开发”和“生产部署”的边界——本地开发时你既是用户也是开发者必须自己完成双方的配置对齐。4.5 陷阱五obsidian knowledge base中的双向链接在 OpenClaw 输出中丢失现象在 Obsidian 中[[Project Alpha]]能正确跳转但 OpenClaw 生成的 Markdown 中的[[Project Alpha]]文本在 Obsidian 里不显示为链接。根因与修复确认 Obsidian 设置Settings→Core Plugins→Wikilinks必须启用检查 OpenClaw 输出格式Obsidian 的 Wikilink 解析器要求[[ ]]语法必须独占一行或前后有空白字符。如果 OpenClaw 生成的是See [[Project Alpha]] for details.则不会被识别。修复方案在 Skill 的index.ts中用正则确保 Wikilink 前后有空格const safeLink text.replace(/\[\[(.*?)\]\]/g, [[${1}]] );深层原理Obsidian 的解析器是贪婪匹配[[Project Alpha]]在句子中会被视为普通文本。这是 Obsidian 的设计选择旨在避免误解析如a[[b]]c。OpenClaw 作为内容生成器必须遵守目标平台的语法约定而非期望平台适配自己。5. 进阶战场当你的 OpenClaw 开始接管真实工作流当你能稳定运行晨间日报后真正的挑战才开始如何让 OpenClaw 从“玩具”升级为“生产级协作者”这需要跨越三个技术深水区每个都对应着真实世界的工作流痛点。5.1 深水区一多 Skill 协同中的状态一致性难题场景你同时安装了github-pr-reviewer自动审查 PR和jira-sync同步 Jira 任务。当github-pr-reviewer发现一个 bug 并建议“请在 Jira 中创建子任务”jira-sync需要立即创建该任务。但两个 Skill 各自维护独立的memory沙箱如何共享上下文解决方案ClawVault 共享内存协议OpenClaw 1.8 引入了ClawVault——一个可插拔的分布式内存后端。它支持 SQLite本地、PostgreSQL团队共享、TiDB高可用三种模式。实操步骤启动 PostgreSQL 实例Dockerdocker run -d --name clawvault-db -e POSTGRES_PASSWORDclaw123 -p 5432:5432 -v /path/to/data:/var/lib/postgresql/data postgres:15在~/.openclaw/config.yaml中配置memory: backend: postgresql connection_string: postgresql://postgres:claw123localhost:5432/clawvault重启 OpenClawopenclaw restart此时所有 Skill 的context.memory操作都会路由到 PostgreSQL实现跨 Skill、跨进程的状态共享。为什么必须用数据库文件系统SQLite在单机可靠但无法支撑多实例如 NAS 部署多个 OpenClaw。而 Redis 虽快但缺乏事务和持久化保证。PostgreSQL 在 ACID 和性能间取得了最佳平衡这也是ClawVault默认推荐的原因。5.2 深水区二NAS 部署中的权限与路径映射陷阱场景你想将 OpenClaw 部署在群晖 NAS 上让全家共享一个智能体。但openclaw start后Skill 无法读取/volume1/homes/yourname/ObsidianVault。根因与破解NAS 的 UID/GID 隔离群晖的 Docker 容器默认以root用户运行而宿主机文件/volume1/homes/yourname/的属主是yournameUID1026。容器内root用户对宿主机文件无权限。破解方案用户映射在群晖 Docker GUI 中创建容器时在Volume设置中将/volume1/homes/yourname/ObsidianVault映射到容器内/opt/obsidian在Advanced Settings→User中填入1026:100即宿主机 UID:容器内 GID在Environment中添加USER_ID1026和GROUP_ID100。这样容器内进程将以 UID 1026 运行与宿主机文件属主完全一致权限问题迎刃而解。5.3 深水区三微信接入中的消息路由与会话保持场景你希望 OpenClaw 接收微信消息并自动回复。但微信官方 API 不支持直接对接必须通过第三方网关如 WeCom、Serverless WeChat。架构设计微信用户 → 微信公众号/小程序 → Serverless WeChat云函数 → OpenClaw API → Skill 处理 → Serverless WeChat → 微信用户关键实现细节会话 ID 绑定微信的FromUserName是加密字符串需在 Serverless WeChat 中将其映射为 OpenClaw 的session_id并存入ClawVault。消息限流微信要求 5 秒内必须响应否则重发。因此 OpenClaw 的/api/v1/chat接口必须异步化// openclaw api handler app.post(/chat, async (req, res) { const { message, from_user } req.body; // 立即返回 ACK res.json({ status: accepted, task_id: uuidv4() }); // 后台队列处理 processQueue.add(wechat, { message, from_user }); });Skill 的会话感知wechat-responderSkill 必须从context.session_id读取历史而非context.memory因为session_id是微信强绑定的。为什么不用企业微信企业微信虽有官方 API但需企业认证个人开发者无法使用。Serverless WeChat 是社区方案它用云函数模拟微信服务器成本极低每月免费额度足够个人使用且开源可审计。6. 从“能用”到“好用”我的三年 OpenClaw 实战心法在亲手部署、调试、重构了 17 个不同规模的 OpenClaw 生产环境后我总结出几条无法从文档中学到的硬核心法。它们不是技术而是与这个系统共处的生存智慧。6.1 心法一永远用openclaw skills list --verbose替代ls ~/.openclaw/skillsls只告诉你文件夹存在而openclaw skills list --verbose会输出Skill 的slug安装名与name显示名是否一致version是否匹配skill.md中声明的版本statusactive/inactive/broken及具体错误如missing required_env: OPENAI_API_KEYlast_updated时间戳帮你判断是否为最新版。我曾因一个 Skill 的slug是github-pr-reviewer-v2而name是GitHub PR Reviewer在 n8n 中错误引用了slug导致工作流静默失败。--verbose一眼就能暴露这种命名不一致。6.2 心法二config.yaml的debug模式是你的 X 光机在config.yaml中添加debug: log_level: debug trace_skill_calls: true dump_memory_on_error: true当 Skill 报错时OpenClaw 会在~/.openclaw/logs/下生成trace-timestamp.log记录每个函数调用的入参、出参、耗时将出错时刻的context.memory快照保存为memory-dump-timestamp.json这些文件是排查“为什么这个 Skill 在 A 机器上好使在 B 机器上失败”的唯一证据。6.3 心法三用trentclaw审计你的技能供应链trentclaw是 OpenClaw 官方的安全审计工具它不扫描代码而是分析 Skill 间的依赖图谱。运行npx trentclaw audit它会生成一张 SVG 图展示所有 Skill 如何通过http_call、filesystem_read、memory_write相互调用一个 CSV 报告列出所有required_env变量标记哪些是明文硬编码高危、哪些来自config.yaml安全一个permissions_report.md指出哪个 Skill 请求了filesystem:read:/根目录读取绝对禁止。我曾用它发现一个pdf-processorSkill表面上只处理 PDF却悄悄请求了http:post:https://*任意域名 POST后来查明是其依赖的pdf-lib库的埋点上报。trentclaw让这种隐蔽风险无所遁形。6.4 心法四备份不是cp -r而是openclaw export --allopenclaw export --all会生成一个加密 ZIP 包包含skills/目录含 Git commit hash确保可复现config.yaml脱敏处理移除 API keysmemory/的 SQLite 数据库已加密logs/的压缩归档。这个 ZIP 是