CoolSkill Builder

Dev Tools

Skill 生成与治理节点。将任何资源(GitHub 仓库、API 文档、自然语言需求、代码片段) 转化为零外部依赖、极致省 Token、可被任意生态(Kimi/OpenAI/Claude/自研 Agent)直接调用的标准化 Skill。 触发条件:(1) 用户要求创建/生成/编写一个 Skill,(2) 用户提供资源要求转化为可调用模块, (3) 用户提到零依赖、跨生态兼容、版本隔离等关键词,(4) 用户要求将代码/功能封装为标准化 Skill, (5) 用户要求实现 skill registry、版本管理或安全扫描,(6) 任何涉及 Agent 工具/函数生成的需求。 使用时加载此 Skill,严格按 6 步工作流执行,生成 4 文件(skill.yaml + impl.py + test.py + manifest.json) 并通过 5 层安全校验。

Install

openclaw skills install coolskill-builder

CoolSkill Builder

将任意资源转化为标准化、零依赖、跨生态兼容的 Skill 模块。

核心原则

  1. 零依赖:impl.py 仅使用 Python 标准库白名单模块(详见 references/spec.md)
  2. 极致省 Token:内部变量 1-2 字符,零注释,短路求值,列表推导优先
  3. 版本隔离:每个 Skill 全局唯一 ID {domain}-{func}-{rand3},Semver 递增,历史版本只读
  4. 跨生态兼容:manifest.json 声明 OpenAI Function / Claude Tool / HTTP 三种调用格式

6 步工作流

收到资源后,严格按以下顺序执行:

Step 1: 解析资源

提取以下信息,整理为结构化需求:

字段说明
功能意图该 Skill 的核心功能是什么
输入 schema参数名、类型、是否必填、默认值
输出 schema返回值结构、成功/错误格式
边界规则长度限制、取值范围、异常场景
domain功能领域(data, text, web, file, api, calc...)

如果用户提供的是:

  • 自然语言描述 → 自行推导输入输出 schema,必要时反问确认
  • 代码片段 → 提取函数签名、参数、返回值,转化为 run() 接口
  • API 文档 → 将 endpoint 映射为 run() 入参,response 映射为返回值
  • GitHub 仓库 → 提取核心逻辑,重写为标准库实现

Step 2: 生成 4 文件

基于解析结果,生成以下文件。详细模板见 references/file-templates.md

skill.yaml(元数据)

  • 键名压缩:v 替代 version, d 替代 description, src 替代 source, pf 替代 platforms, props.dom 替代 domain, props.st 替代 status
  • meta.id 使用 scripts/generate_skill_id.py 生成,或按 {domain}-{func}-{rand3} 规则
  • meta.src 标记来源:github|registry|custom|api
  • schema.in / schema.out 为 JSON Schema 格式
  • perms 按需声明:net(网络)、fs(文件系统)、env(环境变量)、exec(执行命令)

impl.py(零依赖实现)

  • 固定签名:def run(a): 其中 a 为 dict
  • 固定返回:{'s': 'ok|err', 'd': result, 'e': error_string}
  • 导入行只保留实际使用的模块
  • 内部变量/函数 1-2 字符(_e=raise, _j=json.dumps, _p=json.loads, _h=hash, _t=time, _u=url, _f=file, _s=string, _m=math)
  • 零类型提示、零文档字符串、零注释
  • 统一单引号;分号连接相关语句;列表推导替代 for
  • 字典访问用 d['k'],除非需要默认值才用 .get()
  • 错误处理:try/except 包围全部逻辑,r['s']='err';r['e']=str(x)
  • 禁止 if __name__=='__main__' 之外的任何 I/O(测试/调试代码除外)

test.py(隔离测试)

  • 首行:sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  • impl import run,禁止相对导入其他 Skill
  • 测试类 T 提供 a()(断言)、r()(运行并断言)、x()(汇总退出)
  • 用例覆盖:t1 正常输入、t2 必填缺失、t3 类型错误、t4 边界值、t5 异常恢复
  • 性能测试可选:检查运行时间是否超过阈值

manifest.json(跨生态适配)

  • universal: entry=run, input=dict, output=dict
  • openai_function: name/description/parameters/strict=true
  • claude_tool: name/description/input_schema
  • http_api: POST /skill/{skill-id}, headers 含 X-Skill-Version

Step 3: 5 层安全校验

运行 scripts/security_scan.py <impl.py> 执行自动扫描。任一失败则阻断,仅输出修复指令,不写入 Registry。

手工复核要点:

层级规则自动扫描人工复核
L1 依赖扫描仅标准库白名单检查 import 行
L2 注入检测禁止 eval/exec/os.system/subprocess检查危险调用
L3 密钥检测禁止硬编码 API Key/Token检查常量字符串
L4 网络边界perms 无 net 则禁止 urllib/http/socket核对 perms 声明
L5 信息泄露禁止返回 traceback/os.environ/密钥检查错误返回内容

详细规则见 references/security-rules.md

阻断后行为:

  1. 输出失败层级和具体问题
  2. 给出修复指令(原生代码重写/安全等价实现/参数化/脱敏)
  3. 返回 Step 2 重新生成
  4. 不执行 Step 4-6

Step 4: 原生测试

在隔离进程中执行 test.py:

cd registry/{skill-id}/{version} && python test.py
  • 失败则阻断,返回修复指令
  • 通过标准:ALL_OK 输出,F=0
  • 测试进程必须独立,不加载其他 Skill 模块

Step 5: 版本隔离注册

生成/获取 Skill ID

首次生成:

  • 运行 python scripts/generate_skill_id.py {domain} {func}
  • 或按 {domain}-{func}-{rand3} 规则自行生成

迭代生成:

  • 读取 registry/index.json 找到该 ID 的最新版本
  • 按规则递增:修复→Patch+1, 功能变更→Minor+1, 破坏性重构→Major+1

写入 Registry

registry/
├── index.json
└── {skill-id}/
    └── v{version}/
        ├── skill.yaml
        ├── impl.py
        ├── test.py
        └── manifest.json

更新 index.json

  • 添加/更新该 skill-id 的 versions 记录
  • 更新 latest 指向
  • 时间戳使用 ISO8601 格式

详细格式见 references/registry-format.md

Step 6: GitHub 同步(可选)

检测环境变量:

  • GITHUB_TOKEN: GitHub Personal Access Token
  • GITHUB_REPO: 格式 owner/repo

若缺失:输出 [CONFIG REQUIRED] 提示,继续本地注册。

若存在:使用 urllib.request + base64 + json 推送 4 文件到 skills/{skill-id}/{version}/

同步代码模板(零依赖):

import urllib.request,json,os,base64
GH='https://api.github.com'
G=os.environ.get('GITHUB_TOKEN')
R=os.environ.get('GITHUB_REPO')

输出报告格式

所有 Skill 生成完成后,输出以下报告:

=== SKILL REPORT ===
ID: {skill_id}
Name: {name}
Version: {version}
Domain: {dom}

--- skill.yaml ---
{yaml}

--- impl.py ---
{code}

--- test.py ---
{code}

--- manifest.json ---
{json}

--- SECURITY ---
L1: PASS/FAIL {detail}
L2: PASS/FAIL {detail}
L3: PASS/FAIL {detail}
L4: PASS/FAIL {detail}
L5: PASS/FAIL {detail}

--- TEST ---
P {pass} F {fail}
{case list}

--- REGISTRY ---
Local: registry/{skill_id}/{version}/ (isolated)
Latest: {version}
History: [v1.0.0, v1.0.1, ...]

--- CROSS-PLATFORM CALL ---
Kimi: import ...
OpenAI: function name={skill_name}
Claude: tool name={skill_name}
HTTP: POST /skill/{skill_id}

--- GITHUB ---
Status: PUSHED_or_SKIP
URL: {commit_url_or_none}
=== END ===

内部工具

脚本用途
scripts/security_scan.py <impl.py>L1-L5 安全扫描,输出 JSON
scripts/generate_skill_id.py [dom] [func]生成全局唯一 Skill ID
scripts/validate_impl.py <impl.py>校验语法/run签名/返回格式/Token密度

参考文档

文件内容
references/spec.md完整规格:零依赖、省Token、版本隔离、跨生态兼容
references/file-templates.md4 文件完整模板及跨生态调用示例
references/security-rules.md5 层安全校验详细规则
references/registry-format.mdRegistry 目录结构、索引格式、版本递增规则

关键约束速查

  • 导入白名单:仅 sys,json,os,re,math,random,datetime,itertools,collections,typing,inspect,hashlib,base64,urllib.request,http.client,socket,ssl,time,uuid,string,warnings,traceback,io,csv,html.parser,pathlib,fnmatch,glob,copy,functools,enum,dataclasses,contextlib,builtins
  • 固定签名def run(a):{'s':'ok|err','d':result,'e':error}
  • 版本格式:Semver {major}.{minor}.{patch},历史版本只读
  • Skill ID{domain}-{func}-{rand3},全局唯一,生成后固定
  • 阻断规则:L1-L5 任一失败、test.py 失败 → 阻断,不写入 Registry
  • 生态兼容:必须输出 manifest.json(OpenAI/Claude/HTTP 三种格式)