# jd-skills

> **Forked from [vercel-labs/skills](https://github.com/vercel-labs/skills) (MIT)。** 本项目是该上游 CLI 的京东内部
> 品牌化版本，所有功能 1:1 继承自上游。详见 `package.json` 中的 `forkedFrom` 和 `upstreamLicense` 字段。

AI 编程 agent 技能生态的命令行工具。

<!-- agent-list:start -->
支持 **OpenCode**、**Claude Code**、**Codex**、**Cursor** 等 [67 种](#支持的-agent) agent。
<!-- agent-list:end -->

## 安装一个 Skill

```bash
npx jd-skills add <owner>/<skills-repo>
```

## 不安装直接使用

为某个 skill 生成 prompt，或启动一个支持的 agent：

```bash
npx jd-skills use <owner>/<skills-repo>@<skill> | claude
npx jd-skills use <owner>/<skills-repo> --skill <skill> --agent claude-code
```

`jd-skills use` 与 `jd-skills add` 解析 source 的方式完全相同：把选中的 skill 文件写到临时目录，**默认**只把生成的 prompt 打印到 stdout；如果带上 `--agent`，则用这个 prompt 启动一个 agent。

### 支持的 source 格式

```bash
# GitHub 简写（owner/repo）
npx jd-skills add <owner>/<skills-repo>

# 完整 GitHub URL
npx jd-skills add https://github.com/<owner>/<skills-repo>

# 仓库内具体 skill 的路径
npx jd-skills add https://github.com/<owner>/<skills-repo>/tree/main/skills/<skill>

# 公共 GitLab URL
npx jd-skills add https://gitlab.com/org/repo

# 京东内网 GitLab（推荐用 jd: 简写）
npx jd-skills add jd:<group>/<repo>
npx jd-skills add https://<host>/<group>/<repo>

# 任意 git URL
npx jd-skills add git@github.com:<owner>/<skills-repo>.git

# 本地路径
npx jd-skills add ./my-local-skills
```

### 命令行选项

| 选项 | 说明 |
| --- | --- |
| `-g, --global` | 安装到用户目录而非项目目录 |
| `-a, --agent <agents...>` | <!-- agent-names:start -->指定目标 agent（如 `claude-code`、`codex`），详见[支持的 Agent](#支持的-agent)<!-- agent-names:end --> |
| `-s, --skill <skills...>` | 按名字指定 skill（`'*'` 表示全部） |
| `-l, --list` | 只列出仓库中的 skill，不实际安装 |
| `--copy` | 复制文件而非符号链接 |
| `-y, --yes` | 跳过所有确认提示 |
| `--all` | 等价于 `--skill '*' --agent '*' -y` |

### 使用示例

```bash
# 列出仓库里所有 skill
npx jd-skills add <owner>/<skills-repo> --list

# 只安装指定的几个 skill
npx jd-skills add <owner>/<skills-repo> --skill frontend-design --skill skill-creator

# 安装名字带空格的 skill（必须加引号）
npx jd-skills add owner/repo --skill "Convex Best Practices"

# 安装到指定的 agent
npx jd-skills add <owner>/<skills-repo> -a claude-code -a opencode

# 非交互式安装（适合 CI/CD）
npx jd-skills add <owner>/<skills-repo> --skill frontend-design -g -a claude-code -y

# 把仓库里所有 skill 装到所有 agent
npx jd-skills add <owner>/<skills-repo> --all

# 把所有 skill 装到指定 agent
npx jd-skills add <owner>/<skills-repo> --skill '*' -a claude-code

# 把指定 skill 装到所有 agent
npx jd-skills add <owner>/<skills-repo> --agent '*' --skill frontend-design
```

### 安装范围

| 范围 | 选项 | 路径 | 适用场景 |
| --- | --- | --- | --- |
| **项目级** | （默认） | `./<agent>/skills/` | 跟着项目走，团队共享 |
| **全局** | `-g` | `~/<agent>/skills/` | 跨项目可用 |

### 安装方式

交互式安装时可以选择：

| 方式 | 说明 |
| --- | --- |
| **符号链接**（推荐） | 从各 agent 目录符号链接到同一份拷贝，源单一、便于更新 |
| **复制** | 给每个 agent 复制独立副本，当 agent 不支持符号链接时使用 |

## 其他命令

| 命令 | 说明 |
| --- | --- |
| `npx jd-skills use <source>` | 不安装直接使用一个 skill |
| `npx jd-skills list` | 列出已装的 skill（别名：`ls`） |
| `npx jd-skills find [query]` | 交互式或按关键字搜索 skill |
| `npx jd-skills remove [skills]` | 从 agent 中移除已装的 skill |
| `npx jd-skills update [skills]` | 把已装的 skill 更新到最新版 |
| `npx jd-skills init [name]` | 创建一个新的 `SKILL.md` 模板 |

### `jd-skills list`

列出所有已装的 skill，类似 `npm ls`。

```bash
# 列出所有已装的 skill（项目级 + 全局）
npx jd-skills list

# 只列出全局 skill
npx jd-skills ls -g

# 按 agent 过滤
npx jd-skills ls -a claude-code -a cursor
```

### `jd-skills find`

交互式或按关键字搜索 skill。

```bash
# 交互式搜索（fzf 风格）
npx jd-skills find

# 按关键字搜索
npx jd-skills find typescript
```

`find` 命令会同时搜两个源：
- **上游社区仓库**（[skills.sh](https://skills.sh)）—— 始终可用
- **企业内部技能市场**（通过 `JD_SKILL_API_URL` env var 配置）—— 仅在配置后且可达时启用

京东源不可达时会**静默跳过**，不影响上游结果。详情参见下方"京东源"章节。

### `jd-skills update`

```bash
# 更新所有 skill（交互式选择范围）
npx jd-skills update

# 更新单个 skill
npx jd-skills update my-skill

# 更新多个指定 skill
npx jd-skills update frontend-design web-design-guidelines

# 只更新全局或项目级
npx jd-skills update -g
npx jd-skills update -p

# 非交互式（在项目目录里默认项目级，否则全局）
npx jd-skills update -y
```

| 选项 | 说明 |
| --- | --- |
| `-g, --global` | 只更新全局 skill |
| `-p, --project` | 只更新项目级 skill |
| `-y, --yes` | 跳过范围选择（项目目录里默认项目级，否则全局） |
| `[skills...]` | 指定要更新的 skill 名字，默认更新全部 |

### `jd-skills init`

```bash
# 在当前目录创建 SKILL.md
npx jd-skills init

# 在子目录创建新的 skill
npx jd-skills init my-skill
```

### `jd-skills remove`

从 agent 中移除已装的 skill。

```bash
# 交互式选择（从已装 skill 里挑）
npx jd-skills remove

# 按名字删
npx jd-skills remove web-design-guidelines

# 一次删多个
npx jd-skills remove frontend-design web-design-guidelines

# 从全局范围删
npx jd-skills remove --global web-design-guidelines

# 只从指定 agent 删
npx jd-skills remove --agent claude-code cursor my-skill

# 不确认地全部删除
npx jd-skills remove --all

# 删除某个 agent 下的所有 skill
npx jd-skills remove --skill '*' -a cursor

# 把某个 skill 从所有 agent 中删除
npx jd-skills remove my-skill --agent '*'

# 用 'rm' 别名
npx jd-skills rm my-skill
```

| 选项 | 说明 |
| --- | --- |
| `-g, --global` | 从全局范围（`~/`）删，而非项目级 |
| `-a, --agent` | 指定要删除的 agent（`'*'` 表示全部） |
| `-s, --skill` | 指定要删的 skill（`'*'` 表示全部） |
| `-y, --yes` | 跳过确认提示 |
| `--all` | 等价于 `--skill '*' --agent '*' -y` |

## Intranet marketplace integration (opt-in)

`jd-skills` ships clean — no hardcoded references to any specific company's
internal infrastructure. On a public network or when no intranet is configured,
the CLI works against the upstream [skills.sh](https://skills.sh) registry only.

**For users on a corporate intranet** (e.g. JD-internal users), the CLI can be
configured to discover and authenticate with an internal marketplace + GitLab
instance via environment variables. The integration is **auto-detected**: when
the configured API endpoint is reachable, the find command will offer a one-time
login prompt; when it's not reachable, the CLI silently degrades to upstream-only.

See [`docs/jd-internal.md`](./docs/jd-internal.md) for the full integration guide
(env vars, npm setup, login flow, troubleshooting). The public npm tarball does
NOT include this file — it lives only in the source repository.

## 什么是 Agent Skill？

Agent skill 是一组可复用的指令集，用来扩展你的 AI 编程 agent 的能力。skill 定义在 `SKILL.md` 文件中，
frontmatter 里包含 `name` 和 `description` 两个必填字段。

Skill 让 agent 能完成专门的任務，比如：

- 根据 git 历史生成 release notes
- 按团队规范创建 PR
- 接入外部工具（Linear、Notion 等）

## 支持的 Agent

Skill 可以装到下列任何一种 agent：

<!-- supported-agents:start -->
| Agent | `--agent` | Project Path | Global Path |
|-------|-----------|--------------|-------------|
| AiderDesk | `aider-desk` | `.aider-desk/skills/` | `~/.aider-desk/skills/` |
| Amp, Replit, Universal | `amp`, `replit`, `universal` | `.agents/skills/` | `~/.config/agents/skills/` |
| Antigravity | `antigravity` | `.agents/skills/` | `~/.gemini/antigravity/skills/` |
| Antigravity CLI | `antigravity-cli` | `.agents/skills/` | `~/.gemini/antigravity-cli/skills/` |
| AstrBot | `astrbot` | `data/skills/` | `~/.astrbot/data/skills/` |
| Autohand Code CLI | `autohand-code` | `.autohand/skills/` | `~/.autohand/skills/` |
| Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
| IBM Bob | `bob` | `.bob/skills/` | `~/.bob/skills/` |
| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
| OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |
| Cline, Dexto, Kimi Code CLI, Loaf, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |
| CodeArts Agent | `codearts-agent` | `.codeartsdoer/skills/` | `~/.codeartsdoer/skills/` |
| CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
| Codemaker | `codemaker` | `.codemaker/skills/` | `~/.codemaker/skills/` |
| Code Studio | `codestudio` | `.codestudio/skills/` | `~/.codestudio/skills/` |
| Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
| Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
| Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
| Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
| Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
| Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
| Deep Agents | `deepagents` | `.agents/skills/` | `~/.deepagents/agent/skills/` |
| Devin for Terminal | `devin` | `.devin/skills/` | `~/.config/devin/skills/` |
| Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |
| Firebender | `firebender` | `.agents/skills/` | `~/.firebender/skills/` |
| ForgeCode | `forgecode` | `.forge/skills/` | `~/.forge/skills/` |
| Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
| GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
| Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |
| Hermes Agent | `hermes-agent` | `.hermes/skills/` | `~/.hermes/skills/` |
| inference.sh | `inference-sh` | `.inferencesh/skills/` | `~/.inferencesh/skills/` |
| Jazz | `jazz` | `.jazz/skills/` | `~/.jazz/skills/` |
| Junie | `junie` | `.junie/skills/` | `~/.junie/skills/` |
| iFlow CLI | `iflow-cli` | `.iflow/skills/` | `~/.iflow/skills/` |
| Kilo Code | `kilo` | `.kilocode/skills/` | `~/.kilocode/skills/` |
| Kiro CLI | `kiro-cli` | `.kiro/skills/` | `~/.kiro/skills/` |
| Kode | `kode` | `.kode/skills/` | `~/.kode/skills/` |
| Lingma | `lingma` | `.lingma/skills/` | `~/.lingma/skills/` |
| MCPJam | `mcpjam` | `.mcpjam/skills/` | `~/.mcpjam/skills/` |
| Mistral Vibe | `mistral-vibe` | `.vibe/skills/` | `~/.vibe/skills/` |
| Moxby | `moxby` | `.moxby/skills/` | `~/.moxby/skills/` |
| Mux | `mux` | `.mux/skills/` | `~/.mux/skills/` |
| OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
| OpenHands | `openhands` | `.openhands/skills/` | `~/.openhands/skills/` |
| Ona | `ona` | `.ona/skills/` | `~/.ona/skills/` |
| Pi | `pi` | `.pi/skills/` | `~/.pi/agent/skills/` |
| Qoder | `qoder` | `.qoder/skills/` | `~/.qoder/skills/` |
| Qoder CN | `qoder-cn` | `.qoder/skills/` | `~/.qoder-cn/skills/` |
| Qwen Code | `qwen-code` | `.qwen/skills/` | `~/.qwen/skills/` |
| Reasonix | `reasonix` | `.reasonix/skills/` | `~/.reasonix/skills/` |
| Rovo Dev | `rovodev` | `.rovodev/skills/` | `~/.rovodev/skills/` |
| Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
| Tabnine CLI | `tabnine-cli` | `.tabnine/agent/skills/` | `~/.tabnine/agent/skills/` |
| Terramind | `terramind` | `.terramind/skills/` | `~/.terramind/skills/` |
| Tinycloud | `tinycloud` | `.tinycloud/skills/` | `~/.tinycloud/skills/` |
| Trae | `trae` | `.trae/skills/` | `~/.trae/skills/` |
| Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
| Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
| Zencoder, Zenflow | `zencoder`, `zenflow` | `.zencoder/skills/` | `~/.zencoder/skills/` |
| Neovate | `neovate` | `.neovate/skills/` | `~/.neovate/skills/` |
| Pochi | `pochi` | `.pochi/skills/` | `~/.pochi/skills/` |
| PromptScript | `promptscript` | `.agents/skills/` | N/A (project-only) |
| AdaL | `adal` | `.adal/skills/` | `~/.adal/skills/` |
<!-- supported-agents:end -->

> [!NOTE]
> **Kiro CLI 用户**：默认 agent 自动从 `.kiro/skills/` 和 `~/.kiro/skills/` 加载 skill，
> **无需配置**。如果你用的是**自定义 agent**，在 `.kiro/agents/<agent>.json` 的
> `resources` 里加上 skill 路径：
>
> ```json
> {
>   "resources": ["skill://.kiro/skills/**/SKILL.md"]
> }
> ```

CLI 会自动检测本机装了哪些 agent。如果一个都没检测到，会提示你选要装到哪些。

## 创建 Skill

Skill 是包含 `SKILL.md` 文件的目录，frontmatter 是 YAML 格式：

```markdown
---
name: my-skill
description: 这个 skill 是干什么的、什么时候用
---

# My Skill

Agent 在激活这个 skill 后要遵循的指令。

## 何时使用

描述这个 skill 的适用场景。

## 步骤

1. 第一步做什么
2. 然后做什么
```

### 必填字段

- `name`：唯一标识（小写、允许连字符）
- `description`：简短说明这个 skill 是干什么的

### 可选字段

- `metadata.internal`：设为 `true` 可以在常规发现中隐藏该 skill。内部 skill 仅在设置
  `INSTALL_INTERNAL_SKILLS=1` 时才可见和可装。用于还在开发中的 skill 或仅供内部工具用的 skill。

```markdown
---
name: my-internal-skill
description: 默认不显示的内部 skill
metadata:
  internal: true
---
```

### Skill 发现路径

CLI 在仓库里会按下列位置搜索 skill。每个 skill 容器目录会被遍历一层
（扁平布局 `skills/<name>/SKILL.md`）或两层（分类布局 `skills/<category>/<name>/SKILL.md`）。
浅层发现的 `SKILL.md` 会覆盖深层同名 skill。用 `--full-depth` 还能发现这些容器目录
之外的 `SKILL.md`（比如 `examples/` 或 `tests/` 下的）。

<!-- skill-discovery:start -->
- 根目录（如果包含 `SKILL.md`）
- `skills/`
- `skills/.curated/`
- `skills/.experimental/`
- `skills/.system/`
- `.aider-desk/skills/`
- `.agents/skills/`
- `data/skills/`
- `.autohand/skills/`
- `.augment/skills/`
- `.bob/skills/`
- `.claude/skills/`
- `.codeartsdoer/skills/`
- `.codebuddy/skills/`
- `.codemaker/skills/`
- `.codestudio/skills/`
- `.commandcode/skills/`
- `.continue/skills/`
- `.cortex/skills/`
- `.crush/skills/`
- `.devin/skills/`
- `.factory/skills/`
- `.forge/skills/`
- `.goose/skills/`
- `.hermes/skills/`
- `.inferencesh/skills/`
- `.jazz/skills/`
- `.junie/skills/`
- `.iflow/skills/`
- `.kilocode/skills/`
- `.kiro/skills/`
- `.kode/skills/`
- `.lingma/skills/`
- `.mcpjam/skills/`
- `.vibe/skills/`
- `.moxby/skills/`
- `.mux/skills/`
- `.openhands/skills/`
- `.ona/skills/`
- `.pi/skills/`
- `.qoder/skills/`
- `.qwen/skills/`
- `.reasonix/skills/`
- `.rovodev/skills/`
- `.roo/skills/`
- `.tabnine/agent/skills/`
- `.terramind/skills/`
- `.tinycloud/skills/`
- `.trae/skills/`
- `.windsurf/skills/`
- `.zencoder/skills/`
- `.neovate/skills/`
- `.pochi/skills/`
- `.adal/skills/`
<!-- skill-discovery:end -->

### 插件清单发现

如果存在 `.claude-plugin/marketplace.json` 或 `.claude-plugin/plugin.json`，里面声明的
skill 也会被发现：

```json
// .claude-plugin/marketplace.json
{
  "metadata": { "pluginRoot": "./plugins" },
  "plugins": [
    {
      "name": "my-plugin",
      "source": "my-plugin",
      "skills": ["./skills/review", "./skills/test"]
    }
  ]
}
```

这与 [Claude Code 插件市场](https://code.claude.com/docs/en/plugin-marketplaces) 生态兼容。
清单里声明的 skill 路径按声明的深度搜索，不受上面说的"depth-2 分类遍历"限制。

如果在标准位置都找不到 skill，会做一次递归搜索。

## 兼容性

由于所有 skill 都遵循统一的 [Agent Skills 规范](https://agentskills.io)，通常跨 agent 兼容。
不过部分特性是 agent 特有的：

| 特性 | OpenCode | OpenHands | Claude Code | Cline | CodeBuddy | Codex | Command Code | Kiro CLI | Cursor | Antigravity | Roo Code | Github Copilot | Amp | OpenClaw | Neovate | Pi  | Qoder | Zencoder |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 基础 skill | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
| `allowed-tools` | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 |  |
| `context: fork` | 不支持 | 不支持 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |  |
| Hooks | 不支持 | 不支持 | 支持 | 支持 | 不支持 | 不支持 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |  |

## 故障排查

### "No skills found"

确保仓库里有合法的 `SKILL.md` 文件，且 frontmatter 里同时包含 `name` 和 `description`。

### Skill 在 agent 里没加载

- 确认 skill 装到了正确的路径
- 查 agent 文档里关于 skill 加载的要求
- 确认 `SKILL.md` 的 frontmatter 是合法 YAML

### 权限错误

确保对目标目录有写权限。

## 环境变量

| 变量名 | 说明 |
| --- | --- |
| `INSTALL_INTERNAL_SKILLS` | 设为 `1` 或 `true` 以显示和安装 `internal: true` 的 skill |
| `DISABLE_TELEMETRY` | 设为禁用匿名使用统计 |
| `DO_NOT_TRACK` | 另一种禁用统计的方式 |

```bash
# 安装内部 skill
INSTALL_INTERNAL_SKILLS=1 npx jd-skills add <owner>/<skills-repo> --list
```

## 遥测

本 CLI 默认收集匿名使用数据用于改进工具，**不收集任何个人信息**。

在 CI 环境下会自动禁用遥测。

## 相关链接

- [Agent Skills 规范](https://agentskills.io)
- [上游 skills.sh 目录](https://skills.sh) —— 社区 skill 注册中心
- [上游仓库](https://github.com/vercel-labs/skills) —— 本 fork 的来源
- [上游 skills 仓库](https://github.com/vercel-labs/agent-skills) —— 社区维护的 skill 集
- [Amp Skills 文档](https://ampcode.com/manual#agent-skills)
- [Antigravity Skills 文档](https://antigravity.google/docs/skills)
- [Factory AI / Droid Skills 文档](https://docs.factory.ai/cli/configuration/skills)
- [Claude Code Skills 文档](https://code.claude.com/docs/en/skills)
- [OpenClaw Skills 文档](https://docs.openclaw.ai/tools/skills)
- [Cline Skills 文档](https://docs.cline.bot/features/skills)
- [CodeBuddy Skills 文档](https://www.codebuddy.ai/docs/ide/Features/Skills)
- [Codex Skills 文档](https://developers.openai.com/codex/skills)
- [Command Code Skills 文档](https://commandcode.ai/docs/skills)
- [Crush Skills 文档](https://github.com/charmbracelet/crush?tab=readme-ov-file#agent-skills)
- [Cursor Skills 文档](https://cursor.com/docs/context/skills)
- [Firebender Skills 文档](https://docs.firebender.com/multi-agent/skills)
- [Gemini CLI Skills 文档](https://geminicli.com/docs/cli/skills/)
- [GitHub Copilot Agent Skills](https://docs.github.com/en/copilot/concepts/agents/about-agent-skills)
- [iFlow CLI Skills 文档](https://platform.iflow.cn/en/cli/examples/skill)
- [Kimi Code CLI Skills 文档](https://moonshotai.github.io/kimi-code/en/customization/skills)
- [Kiro CLI Skills 文档](https://kiro.dev/docs/cli/custom-agents/configuration-reference/#skill-resources)
- [Kode Skills 文档](https://github.com/shareAI-lab/kode/blob/main/docs/skills.md)
- [OpenCode Skills 文档](https://opencode.ai/docs/skills)
- [Qwen Code Skills 文档](https://qwenlm.github.io/qwen-code-docs/en/users/features/skills/)
- [OpenHands Skills 文档](https://docs.openhands.ai/modules/usage/how-to/using-skills)
- [Pi Skills 文档](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/skills.md)
- [Qoder Skills 文档](https://docs.qoder.com/cli/Skills)
- [Replit Skills 文档](https://docs.replit.com/replitai/skills)
- [Roo Code Skills 文档](https://docs.roocode.com/features/skills)
- [Trae Skills 文档](https://docs.trae.ai/ide/skills)

## 许可协议

MIT —— 继承自上游 [`vercel-labs/skills`](https://github.com/vercel-labs/skills) 项目。第三方依赖的许可声明
保留在 `ThirdPartyNoticeText.txt`。
