manifest.json Schema 参考

manifest.json 是技能的身份文件。技能市场依赖它来展示、搜索、分类和审核技能。本文档列出所有字段的完整说明。

完整 Schema

{
  "id": "weather-reporter",
  "name": "天气预报助手",
  "version": "1.0.0",
  "author": {
    "name": "开发者名称",
    "avatar": "https://example.com/avatar.png",
    "url": "https://github.com/username"
  },
  "description": "每日定时推送天气预报,支持多城市配置",
  "longDescription": "完整的技能描述,支持 Markdown...",
  "category": "lifestyle",
  "tags": ["天气", "定时任务", "推送"],
  "price": "free",
  "rating": 4.5,
  "installs": 1280,
  "minCeeCoreVersion": "1.0.0",
  "dependencies": {
    "openclaw": ">=1.0.0"
  },
  "permissions": ["http", "cron"],
  "createdAt": "2026-08-27T00:00:00Z",
  "updatedAt": "2026-08-27T00:00:00Z",
  "icon": "icon.png",
  "screenshots": ["screenshots/01.png", "screenshots/02.png"],
  "config": {},
  "features": [
    "每日定时天气推送",
    "支持全球城市",
    "极端天气预警"
  ],
  "changelog": [
    {
      "version": "1.0.0",
      "date": "2026-08-27",
      "changes": ["初始版本,支持每日天气推送"]
    }
  ]
}

字段详解

id — 技能唯一标识

属性说明
类型string
必填✅ 是
格式英文小写,连字符分隔,如 weather-reporter
规则全局唯一,不可与已有技能重复
"id": "weather-reporter"

命名建议:使用 动词-名词功能-描述 格式,如 daily-reportcode-reviewenglish-tutor

name — 技能显示名称

属性说明
类型string
必填✅ 是
长度建议 ≤ 10 个汉字
用途在技能市场列表和详情页展示
"name": "天气预报助手"

version — 技能版本号

属性说明
类型string
必填✅ 是
格式语义化版本 主版本.次版本.修订号
示例"1.0.0""2.1.3"
"version": "1.0.0"

遵循 语义化版本规范

  • 主版本:不兼容的 API 修改
  • 次版本:向下兼容的功能新增
  • 修订号:向下兼容的问题修正

author — 作者信息

属性说明
类型object
必填✅ 是
子字段类型必填说明
namestring作者显示名称
avatarstring头像 URL
urlstring个人主页或 GitHub 链接
"author": {
  "name": "张三",
  "avatar": "https://github.com/zhangsan.png",
  "url": "https://github.com/zhangsan"
}

description — 一句话描述

属性说明
类型string
必填✅ 是
长度≤ 60 字
用途技能卡片上的简介
"description": "每日定时推送天气预报,支持多城市配置"

longDescription — 详细描述

属性说明
类型string
必填❌ 否
格式Markdown
用途技能详情页的完整介绍
"longDescription": "## 功能介绍\n\n天气预报助手可以...\n\n## 使用场景\n\n- 出门前查看天气..."

category — 分类

属性说明
类型string
必填✅ 是
可选值见下方分类表
分类 ID中文名图标说明
chat对话与聊天💬对话式 AI 能力
automation自动化任务定时/触发式自动化
analytics数据分析📊数据处理与分析
content内容创作✏️文本/图片/代码生成
integration工具集成🔌第三方服务连接
office效率办公💼办公场景专项
education学习教育📚学习辅助
lifestyle生活娱乐🎮生活/娱乐场景
"category": "lifestyle"

tags — 标签

属性说明
类型string[]
必填❌ 否
数量1-5 个
用途搜索聚合和关联推荐
"tags": ["天气", "定时任务", "推送"]

标签用中文,每个标签 2-4 个字,表达技能的核心功能点。

price — 定价

属性说明
类型string
必填❌ 否
默认值"free"
可选值"free"(免费)
"price": "free"

当前版本:所有技能免费。付费功能将在后续版本支持。

rating — 评分

属性说明
类型number
必填❌ 否
范围0-5
默认值0
"rating": 4.5

评分由用户评价系统自动计算,提交时可不填。

installs — 安装量

属性说明
类型integer
必填❌ 否
默认值0
"installs": 1280

由系统自动统计,提交时可不填。

minCeeCoreVersion — 最低固件版本

属性说明
类型string
必填❌ 否
格式语义化版本
用途技能依赖的最低 CeeCore 设备固件版本
"minCeeCoreVersion": "1.0.0"

如果你的技能用了新版本才有的特性,务必标注此字段。

dependencies — 依赖

属性说明
类型object
必填❌ 否
格式{ "依赖名": "版本约束" }
"dependencies": {
  "openclaw": ">=1.0.0"
}

版本约束支持:

  • >=1.0.0:不低于 1.0.0
  • ^1.0.0:兼容 1.x.x
  • ~1.0.0:兼容 1.0.x

permissions — 权限声明

属性说明
类型string[]
必填✅ 是
用途声明技能需要的系统权限
权限说明
http网络访问(调用外部 API)
cron定时任务
notification推送通知
file文件读写
clipboard剪贴板访问
location位置信息
"permissions": ["http", "cron"]

原则:只声明技能实际需要的权限,不声明多余的。审核时会检查权限合理性。

createdAt / updatedAt — 时间戳

属性说明
类型string
必填✅ 是
格式ISO 8601 UTC 时间
"createdAt": "2026-08-27T00:00:00Z",
"updatedAt": "2026-08-27T00:00:00Z"

icon — 图标路径

属性说明
类型string
必填❌ 否
默认值"icon.png"
"icon": "icon.png"

screenshots — 展示截图

属性说明
类型string[]
必填❌ 否
数量0-5 张
"screenshots": ["screenshots/01.png", "screenshots/02.png"]

features — 功能特性列表

属性说明
类型string[]
必填❌ 否
用途在技能详情页展示的核心功能点
"features": [
  "每日定时天气推送",
  "支持全球城市",
  "极端天气预警"
]

changelog — 版本历史

属性说明
类型object[]
必填❌ 否
子字段类型必填说明
versionstring版本号
datestring发布日期
changesstring[]变更内容列表
"changelog": [
  {
    "version": "1.1.0",
    "date": "2026-09-15",
    "changes": ["新增多城市支持", "修复极端天气不提醒的 bug"]
  },
  {
    "version": "1.0.0",
    "date": "2026-08-27",
    "changes": ["初始版本"]
  }
]

必填字段速查

字段必填
id
name
version
author.name
description
category
permissions
createdAt
updatedAt

技能提交前校验

# 校验 JSON 格式
python3 -m json.tool manifest.json > /dev/null && echo "✓ JSON 格式正确"

# 校验必填字段
python3 -c "
import json
with open('manifest.json') as f:
    m = json.load(f)
required = ['id','name','version','description','category','permissions','createdAt','updatedAt']
for field in required:
    assert field in m, f'缺少必填字段: {field}'
    assert m[field], f'字段 {field} 为空'
assert 'name' in m['author'], '缺少 author.name'
print('✓ 必填字段完整')
"

← 技能测试与调试 | 内置工具 API 参考 →