skills/whatis.vip/upload-to-fin-skills

upload-to-fin-skills

SKILL.md

上传技能到 Fin-Skills 平台

支持** Git 形式**(仅注册 repoUrl + 元数据)和本地 zip 上传两种方式。先判断用户输入再选流程。

判断:若用户输入中包含 npx skills add 且紧跟一个 URL 和 --skill <名称>,则按**方式一(Git 形式)解析并上传;否则按方式二(本地 zip)**处理。


方式一:Git 形式(用户提供安装命令)

当用户提供的是安装命令(例如 npx skills add https://github.com/vercel-labs/skills --skill find-skills)时,走本流程,不打包、不传文件

第 1 步:解析安装命令

从用户输入中解析出 repoUrlskillName。命令格式一般为:

npx skills add <repoUrl> --skill <skillName>

解析方式:

  • 用正则提取:npx\s+skills\s+add\s+(https?://[^\s]+)\s+--skill\s+(\S+),第 1 组为 repoUrl,第 2 组为 skillName
  • 或按顺序找:add 后第一个以 http 开头的 token 为 repoUrl;--skill 后第一个非空 token 为 skillName(到空格或行尾)。

示例:

  • 输入:npx skills add https://github.com/vercel-labs/skills --skill find-skills
  • 得到:repoUrl = https://github.com/vercel-labs/skills,skillName = find-skills

若解析失败(缺少 URL 或 skill 名),向用户确认或请其补全命令。

第 2 步:获取 description(可选)

  • 优先:从 GitHub raw 拉取 SKILL.md 的 frontmatter 作为 description。URL 规则:先试 https://raw.githubusercontent.com/<owner>/<repo>/main/<skillName>/SKILL.md,404 再试 .../main/skills/<skillName>/SKILL.mdmaster 分支。
  • 若拉取不到或用户已提供描述,则用用户提供的 description,或简短填写如「来自 的 技能」。

从 frontmatter 可同时得到 name(与 skillName 一致或取 frontmatter 的 name)。

第 3 步:确认/补全元数据

与用户确认或补全:

字段 必填 默认/说明
name 解析得到的 skillName
description 上步拉取或用户提供
author 可从 repo 的 owner 推断或询问,如 vercel-labs
category utility
tags

第 4 步:调用上传 API(不传文件)

curl -s -X POST "http://whatis.vip:9011/api/skills/upload" \
  -F "name=<skillName>" \
  -F "description=<description>" \
  -F "author=<author>" \
  -F "category=<category>" \
  -F "tags=<tags>" \
  -F "version=1.0.0" \
  -F "supportedAgents=cursor" \
  -F "repoUrl=<repoUrl>"

不传 skillFile。平台会存储 repoUrl,详情页从 Git 拉取 SKILL.md 展示。

第 5 步:验证与输出

  • 响应 HTTP 201 且返回 JSON 中含 repoUrl 即成功。
  • 平台为 Git 技能分配的 id 为 owner/repo/skill-name(多层级),例如:
    • npx skills add https://github.com/obra/superpowers --skill test-driven-development → id obra/superpowers/test-driven-development
    • npx skills add https://github.com/vercel-labs/skills --skill find-skills → id vercel-labs/skills/find-skills
  • 告知用户:已在 fin-skills 登记为 Git 技能,详情页会从仓库拉取内容;安装命令即用户提供的命令(或 npx skills add <repoUrl> --skill <skillName>)。

方式二:本地 zip 上传

用户提供的是本地 skill 路径或名称(如 ~/.cursor/skills/my-skillmy-skill)时,走本流程。

第 1 步:定位并读取 SKILL.md

根据用户提供的路径或名称,找到 SKILL.md 文件并读取内容。常见位置:

  • ~/.cursor/skills/<skill-name>/SKILL.md(个人技能)
  • .cursor/skills/<skill-name>/SKILL.md(项目技能)

第 2 步:解析 SKILL.md frontmatter

从 YAML frontmatter 中提取 namedescription。如果缺失则询问用户。

---
name: my-skill
description: 技能描述
---

第 3 步:确认上传信息

向用户确认以下字段(如 SKILL.md 中未包含则需询问):

字段 必填 默认值 说明
name frontmatter.name 技能名称(小写字母+数字+连字符)
description frontmatter.description 技能描述
author 作者名称,优先使用 git config user.name
category utility 分类
tags 逗号分隔的标签
version 1.0.0 版本号

第 4 步:打包 skill 目录

将整个 skill 目录打包为 zip 文件:

cd <skill-parent-dir> && zip -r /tmp/<skill-name>.zip <skill-name>/

第 5 步:上传到平台

使用 curl 调用上传 API:

curl -X POST http://whatis.vip:9011/api/skills/upload \
  -F "skillFile=@/tmp/<skill-name>.zip" \
  -F "name=<name>" \
  -F "description=<description>" \
  -F "author=<author>" \
  -F "category=<category>" \
  -F "tags=<tags>" \
  -F "version=<version>" \
  -F "supportedAgents=cursor"

成功响应为 HTTP 201,返回 skill JSON 对象。

第 6 步:验证上传

curl -s http://whatis.vip:9011/.well-known/skills/index.json

确认新技能出现在列表中。

第 7 步:清理临时文件

rm -f /tmp/<skill-name>.zip

第 8 步:输出安装命令

上传成功后,告知用户安装命令:

npx skills add http://whatis.vip:9011 --skill <skill-name>

注意事项

  • Git 形式:不传 skillFile,只传 repoUrl 与元数据;平台详情页会从 Git 仓库拉取 SKILL.md 展示。
  • 本地上传:如果同名技能已存在,上传会覆盖旧版本;zip 包中必须包含 SKILL.md;文件大小限制 50MB。
  • author 在 Git 形式下可从 repo 的 owner 推断,本地上传可通过 git config user.name 自动获取。
Weekly Installs
5
First Seen
11 days ago
Installed on
amp5
cline5
opencode5
cursor5
kimi-cli5
codex5