技能标识:skill-studio
Create, validate, and publish OpenClaw Skills through conversation. Use when user wants to create a new skill, build a ClawHub plugin, generate SKILL.md, or publish an agent skill. Supports guided mode for beginners and expert mode for developers. Includes automatic metadata validation and one-click fix.
通过对话创建、验证和发布 OpenClaw 技能。
当用户想要创建技能时,首先询问模式:
欢迎使用 Skill Studio!🎨
您希望如何创建技能?
1️⃣ 引导模式(推荐初学者使用)
- 我会逐步提问
- 无需任何前置知识
- 耗时 3-5 分钟
2️⃣ 专家模式(适合有经验的开发者)
- 一次性提供所有详细信息
- 工作流程更快捷
- 您熟悉 SKILL.md 格式
请选择模式?(1/2 或 guided/expert)
逐一询问以下问题:
📍 第 1/6 步:基本信息
问题 1:这个技能应该叫什么名字?(技能名称,小写字母加连字符)
示例:weather-forecast、pdf-merger、api-monitor
问题 2:用一句话描述这个技能的功能。
示例:查询任意位置的天气预报
问题 3:哪些短语应该触发这个技能?
示例:查看天气、今天天气怎么样、check weather
问题 4:这个技能用什么表情符号表示?
示例:🌤️ 表示天气,📄 表示文档
📍 第 2/6 步:技术要求
问题 5:这个技能是否需要调用外部 API?
如果是,调用哪个 API?(例如:OpenWeather API、和风天气 API)
问题 6:需要哪些环境变量?(API 密钥、令牌)
格式:VARIABLE_NAME - 描述
示例:WEATHERAPIKEY - 来自 openweathermap.org 的 API 密钥
问题 7:需要哪些命令行工具?
常用选项:curl、python3、ffmpeg、node
(如果需要 API 调用,我会自动添加 curl)
📍 第 3/6 步:附加功能
问题 8:是否需要 references/ 文件夹存放详细文档?
(适用于具有多个功能的复杂技能)
问题 9:是否有特定的输出格式要求?
示例:输出为 JSON、保存到文件、返回 markdown
问题 10:使用什么许可证?(ClawHub 推荐 MIT-0)
选项:MIT-0、MIT、Apache-2.0
用户一次性提供所有信息:
请提供所有详细信息:
必填项:
可选项:
解析用户输入并提取所有字段。
根据收集的需求,生成完整的 SKILL.md。
python
METADATA_TEMPLATE = ---
name: {name}
description: {description}
version: 1.0.0
license: {license}
metadata: {{openclaw: {{emoji: {emoji}, requires: {{bins: {bins}, env: {env}}}, primaryEnv: {primary_env}}}}}
{detailed_description}
{triggers_list}
bash
{dependency_check}
{main_content}
{error_handling}
{output_format}
生成 SKILL.md 后,自动运行验证。
bash
SKILLFILE=${OPENCLAWWORKSPACE:-$PWD}/skill-studio/$SKILL_NAME/SKILL.md
python3 << PYEOF
import re
import json
import sys
def validate_skill(filepath):
errors = []
warnings = []
with open(filepath, r, encoding=utf-8) as f:
content = f.read()
# 提取 YAML 前置元数据
yaml_match = re.search(r^---\n(.*?)\n---, content, re.DOTALL)
if not yaml_match:
errors.append(❌ 缺少 YAML 前置元数据)
return errors, warnings
yamlcontent = yamlmatch.group(1)
# 检查 1:元数据格式(必须是单行 JSON)
metadatamatch = re.search(rmetadata:\s(\{.\}), yamlcontent)
if not metadata_match:
errors.append(❌ 元数据必须是单行 JSON 格式)
errors.append( 错误示例:metadata:\\n openclaw:\\n requires:...)
errors.append( 正确示例:metadata: {\openclaw\: {...}})
else:
try:
metadata = json.loads(metadata_match.group(1))
# 检查 requires.env 格式
if openclaw in metadata:
oc = metadata[openclaw]
if requires in oc:
req = oc[requires]
if env in req:
if not isinstance(req[env], list):
errors.append(❌ requires.env 必须是数组:[\VAR1\, \VAR2\])
elif len(req[env]) > 0:
for env in req[env]:
if not isinstance(env, str):
errors.append(f❌ requires.env 项必须是字符串,当前值:{env})
except json.JSONDecodeError:
errors.append(❌ 元数据 JSON 无效)
# 检查 2:必填字段
if name: not in yaml_content:
errors.append(❌ 缺少 name 字段)
if description: not in yaml_content:
errors.append(❌ 缺少 description 字段)
if version: not in yaml_content:
warnings.append(⚠️ 缺少 version 字段(建议添加))
# 检查 3:描述长度
descmatch = re.search(rdescription:\s*(.+), yamlcontent)
if desc_match:
desc = desc_match.group(1).strip().strip().strip()
word_count = len(desc.split())
if word_count < 10:
warnings.append(f⚠️ 描述过短({word_count} 个单词,建议 15-25 个))
elif word_count > 30:
warnings.append(f⚠️ 描述过长({word_count} 个单词,建议 15-25 个))
# 检查 4:危险模式
if curl -fsSL in content and | in content and bash in content:
errors.append(❌ 危险:检测到 curl|bash 模式)
if re.search(rsudo\s+(apt|yum|dnf)\s+install, content):
warnings.append(⚠️ 包含 sudo 安装命令(应提示用户手动操作))
if eval( in content or exec( in content:
warnings.append(⚠️ 包含 eval/exec(潜在安全风险))
# 检查 5:HTTP 端点(应使用 HTTPS)
http_matches = re.findall(rhttp://[^\s\\)]+
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 skill-studio-1776075010 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 skill-studio-1776075010 技能
skillhub install skill-studio-1776075010
文件大小: 9.96 KB | 发布时间: 2026-4-14 12:17