Install
openclaw skills install skill-creator-plus创建、编辑、优化或审查 OpenClaw AgentSkills 技能。提供完整的工作流程指引:技能结构设计、frontmatter 规范、_meta.json 格式、ClawHub scanner 规则、渐进式披露设计、validation checklist 及发布流程。适用于从零创建新技能或改进现有技能。输...
openclaw skills install skill-creator-plus创建符合 ClawHub 规范的 OpenClaw 技能。按以下规则执行,不要跳过章节,不要发明规范中未列出的约定。
未提供技能名和用途时,先询问用户。
Skills 是模块化、自包含的包,通过提供专业化的工作流程、工具和知识来扩展 OpenClaw 的能力。可以把 Skill 看作特定领域或任务的"入职指南"——它们将 OpenClaw 从通用 agent 转变为具备专门处理流程的 specialized agent,而这是任何模型都无法完全拥有的能力。
context window 是公共资源。Skills 与 OpenClaw 所需的其他内容共享 context window:system prompt、对话历史、其他 Skills 的元数据,以及实际的用户请求。
默认假设:OpenClaw 已经非常聪明。 只添加 OpenClaw 还没有的内容。每一条信息都要质疑:"OpenClaw 真的需要这个解释吗?"以及"这个段落的 token 消耗值得吗?"
用简洁的例子替代冗长的解释。
根据任务的脆弱性和可变性匹配具体的约束程度:
高自由度(基于文本的指令):当多种方法都可行、决策依赖上下文或启发式方法引导方案时使用。
中自由度(伪代码或带参数的脚本):当存在优选模式、可接受一定变化或配置影响行为时使用。
低自由度(特定脚本,参数少):当操作脆弱易错、一致性至关重要或必须遵循特定顺序时使用。
可以把 OpenClaw 想象成在探索一条路径:狭窄的悬崖桥需要具体的护栏(低自由度),而开阔的场地允许多条路线(高自由度)。
只生成两个文件——无 README.md、无 CHANGELOG.md、无辅助文档:
[skill-name]/
├── SKILL.md (required)
└── _meta.json (required)
每个技能由一个必需的 SKILL.md 文件和可选的打包资源组成:
skill-name/
├── SKILL.md(必需)
│ ├── YAML frontmatter 元数据(必需)
│ │ ├── name:(必需)
│ │ └── description:(必需)
│ └── Markdown 说明(必需)
└── 打包资源(可选)
├── scripts/ - 可执行代码(Python/Bash 等)
├── references/ - 文档,按需加载到 context 中
└── assets/ - 输出中使用的文件(模板、图标、字体等)
每个 SKILL.md 包含:
name 和 description 字段。这是 OpenClaw 判断技能何时被使用的唯一依据。Scripts(scripts/):可执行代码,用于需要确定性可靠性或被反复重写的任务。优势:token 高效、确定性、可不加载到 context 中执行。
References(references/):文档和参考资料,按需加载。优势:保持 SKILL.md 精简,仅在 OpenClaw 判定需要时加载。
Assets(assets/):不打算加载到 context 中的文件,而是用于 OpenClaw 生成的输出中(模板、图片、样板代码等)。
技能应只包含直接支持其功能的必要文件。不要创建:README.md、INSTALLATION_GUIDE.md、QUICK_REFERENCE.md、CHANGELOG.md 等。
Skills 使用三级加载系统来高效管理 context:
保持 SKILL.md 正文简洁且在500行以内以减少 context 膨胀。内容接近此限制时分拆到单独文件。
核心原则:当技能支持多种变体、框架或选项时,只在 SKILL.md 中保留核心工作流和选择指引。将变体特有细节移到单独的 reference 文件。
在写任何内容之前,先理解 scanner 的工作方式:
1. description 摘要是 scanner 唯一信任的信息。
_meta.json 字段(requiredConfigPaths、primaryCredential、requires)被存储但不会在 registry API 中显示。scanner 需要验证的一切必须在 description 中——而且是前 ~160 字符内(registry 截断点)。
2. scanner 是迭代的——每次修复暴露下一个问题。 每个 rejected 版本都计入技能历史。在 checklist 通过之前不要发布。
3. scanner 无法验证嵌套内容。 嵌入在 here-string 或其他代码块内的脚本会被标记为截断和无法验证。所有 scanner 需要读取的内容必须是扁平的、独立的。
4. scanner 是语义化的,不是关键词匹配。 它理解 logged vs transmitted、always:true vs always:false、handle vs userId、required vs optional credentials 的区别。
5. scanner 默认保守。 它阻止和警告而不是批准。
这些会静默破坏技能检测——无报错,技能直接从 openclaw skills list 消失:
---:OpenClaw 会完全静默解析失败。始终验证闭合分隔符存在。openclaw 在 metadata.openclaw.requires.bins 中:OpenClaw 不识别自身为要检查的 bin,会静默隐藏技能。永远不要把 openclaw 放入 bins。~/.openclaw/skills/ 中的技能默认自动加载:managedSkillsDir = ~/.openclaw/skills/ 是 OpenClaw 默认始终加载的路径,无需 extraDirs 配置。extraDirs 仅用于加载非标准路径的技能(如 ~/.config/my-skills/)。逐项明确处理——先在 description 中处理,再在正文中处理。
metadata.openclaw.requires.anyBins(SKILL.md frontmatter)_meta.json requires.anyBinaries(registry 元数据)always:true 在社区技能中禁止技能创建包含以下步骤:
只有当技能的用法已经充分理解时才跳过此步。即使在处理现有技能时,这一步仍然有价值。
要创建一个有效的技能,需要清晰理解技能使用的具体示例。例如,构建 image-editor 技能时:
从最重要的问题开始,当对技能应支持的功能有了清晰认识时结束此步。
将具体示例转化为有效技能:
从零创建新技能时,运行 init_skill.py 脚本:
python3 scripts/init_skill.py <skill-name> --path <output-directory> [--resources scripts,references,assets]
编辑技能时,记住技能是为另一个 OpenClaw 实例创建的。包括对另一个 OpenClaw 实例执行这些任务有益且非显而易见的 info。
技能开发完成后,打包成分发的 .skill 文件:
python3 scripts/package_skill.py <path/to/skill-folder>
打包脚本会自动验证 YAML frontmatter、命名规范、description 质量、文件组织。
测试技能后,用户可能会要求改进:
---
name: [skill-name]
description: "[一句话描述技能做什么 — 动作导向,不以'AI'开头]. Requires: [binaries]. Reads [credentials file] ([FIELDS]). [Setup-only secrets: delete afterward.] [Long-lived tokens: rotate periodically; rotate immediately if host compromised.] Grant token minimal permissions only. No data forwarded to third parties; all calls go to [domain] only."
metadata: {"openclaw":{"emoji":"[icon]","requires":{"anyBins":[]}}}
---
规则:
--- 行结束好的 description 示例:
"Facebook Page manager: post, schedule, reply & get insights. Requires: powershell/pwsh. Reads ~/.config/fb-page/credentials.json (FB_PAGE_TOKEN, FB_PAGE_ID). FB_APP_SECRET for one-time setup only — delete afterward. Long-lived token; rotate periodically and immediately if host is compromised. Grant minimal permissions only. No data forwarded to third parties; all calls go to graph.facebook.com only."
{
"ownerId": "[registry-userId-not-handle]",
"slug": "[skill-name]",
"version": "1.0.0",
"publishedAt": "YYYY-MM-DDTHH:MM:SSZ",
"requiredEnvVars": [],
"requiredConfigPaths": [],
"primaryCredential": null,
"persistence": null,
"credentialSetup": {
"type": "none",
"description": "No credentials required."
},
"requires": {
"anyBinaries": [],
"os": ["windows", "macos", "linux"]
}
}
关键规则:
ownerId 必须是 registry userId,不是 handle(从 clawhub inspect <slug> --json 输出中获取 owner.userId)_meta.json 需要 requiredConfigPaths、primaryCredential_meta.json 需要 persistence 块requires.binaries 中包含 openclaw如果缺失,显示完整 setup 流程:
# 设置 GitHub repo About 和 homepage(每次 push 后运行)
gh repo edit [owner]/[skill-name] \
--description "OpenClaw skill: [one-line purpose]" \
--homepage "https://clawhub.ai/[owner]/[skill-name]"
--- 正确闭合(不能缺少结尾分隔符)metadata.openclaw.requires 使用 anyBins——不是 bins: ["openclaw"]openclaw skills list 确认技能为 ✓ readyopenclaw skills list 确认技能为 readyclawhub inspect [slug] summary 以亮点说明开头"Requires: powershell/pwsh. Reads ~/.config/fb-page/credentials.json..."
用户在 ClawHub 搜索时跳过干巴巴的技术信息——他们先看亮点说明。
SKILL.md frontmatter、_meta.json、ClawHub 三端版本必须完全一致。
SKILL.md 中写的脚本文件名必须与实际文件名完全一致。
---OpenClaw 完全静默解析失败,技能从列表消失。
openclaw runtime 永远不满足自己,技能被静默隐藏。
clawhub publish <path/to/skill-folder> --slug <slug-name> --version <version>
版本号规则(semver):