# Skill Installer

> Skill 安装工具（Skill Installer）。从多种来源安装 Claude Code skill， 内置安全审查流程，安装前自动执行 skill-vetter 协议。 支持：GitHub 仓库路径（owner/repo/skill-name）、原始文件 URL、 本地文件路径、直接粘贴 SKILL.md 内容。 当用户说"安装这个skill""install skill""帮我装这个""从GitHub安装skill" "把这个skill装上""安装 owner/repo/skill-name"时触发此 skill。 注意：所有安装在写入文件前必须经过安全审查，无法获取内容的来源一律拒绝安装。

- Skill: `yipng05-max/skill-installer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add yipng05-max/skill-installer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yipng05-max/skill-installer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: yipng05-max (https://skillmd.com/u/yipng05-max)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yipng05-max/skill-installer

---


# Skill 安装工具（Skill Installer）

本 skill 提供标准化的 skill 安装流程：获取内容 → 安全审查 → 确认安装 → 写入文件。

**安装目录**：`~/.claude/skills/<skill-name>/SKILL.md`

---

## 支持的输入格式

| 格式 | 示例 |
|------|------|
| GitHub 路径 | `owner/repo` 或 `owner/repo/skill-name` |
| 原始文件 URL | `https://raw.githubusercontent.com/...` |
| 第三方平台 URL | `https://skillsmp.com/skills/...` |
| 本地文件路径 | `/path/to/SKILL.md` 或本地目录 |
| 直接粘贴内容 | 用户在对话中粘贴了 SKILL.md 的完整内容 |

---

## 执行流程

收到安装请求后，**严格按顺序**执行以下五个阶段。

---

### 第一阶段：解析来源

根据用户提供的输入，判断来源类型并获取内容：

#### 来源类型 A：GitHub 路径（`owner/repo` 或 `owner/repo/skill-name`）

```bash
# 1. 获取仓库基本信息
curl -s "https://api.github.com/repos/OWNER/REPO"

# 2. 列出 skills 目录（如果有）
curl -s "https://api.github.com/repos/OWNER/REPO/contents/skills/SKILL_NAME"

# 3. 获取 SKILL.md 原始内容
curl -s "https://raw.githubusercontent.com/OWNER/REPO/main/skills/SKILL_NAME/SKILL.md"
# 如果 main 分支不存在，尝试 master 分支
```

记录：Stars、最后更新时间、作者、文件列表。

#### 来源类型 B：原始文件 URL

使用 WebFetch 工具直接获取 URL 内容。
记录：域名来源、是否为已知可信平台。

#### 来源类型 C：第三方平台 URL

使用 WebFetch 工具获取内容。
如果 WebFetch 失败（不可访问），**立即终止**，输出：
```
❌ 安装终止：无法访问来源 URL，内容不可审查，拒绝安装。
建议：请提供 GitHub 仓库路径或直接粘贴 SKILL.md 内容。
```

#### 来源类型 D：本地文件路径

使用 Read 工具读取本地 SKILL.md 文件。
如果是目录路径，尝试读取 `<路径>/SKILL.md`。

#### 来源类型 E：直接粘贴内容

用户已在对话中提供了完整的 SKILL.md 内容，直接进入审查阶段。
记录：来源为"用户直接提供"，无外部来源信息。

---

### 第二阶段：安全审查（不可跳过）

对获取到的 SKILL.md 内容执行以下审查，**任何一条红线触发即终止安装**：

#### 🚨 红线检查（触发任意一条 → 立即终止）

逐行扫描 SKILL.md 内容，检查：

```
□ curl/wget 指向未知域名（非 GitHub/NPM/PyPI 等已知平台）
□ 将数据发送到外部服务器（POST 请求、数据上报）
□ 读取凭证文件：~/.ssh、~/.aws、~/.config、.env、*_key、*_token
□ 读取或修改 MEMORY.md、CLAUDE.md、USER.md 等配置文件
□ 使用 base64 解码后执行
□ eval() 或 exec() 接收外部输入
□ 请求 sudo 或提权操作
□ 读取浏览器 cookies 或 session 数据
□ 混淆代码（大段 base64、压缩代码、hex 编码）
□ 向 IP 地址（非域名）发起网络请求
□ 安装系统级软件包（brew install、apt-get 等）而未明确说明用途
```

如果触发红线：
```
❌ 安装终止：发现安全红线
红线类型：[具体描述]
位置：[在 SKILL.md 的哪个部分]
原因：[为什么这是危险的]
建议：请联系 skill 作者确认，或放弃安装。
```

#### ⚠️ 风险评估（不触发红线则继续，但输出风险等级）

评估以下维度：
- **文件权限**：skill 需要读写哪些文件？范围是否合理？
- **网络访问**：需要访问哪些外部服务？目的是否清晰？
- **命令执行**：执行哪些 shell 命令？是否有潜在风险？
- **来源可信度**：作者是否已知？仓库是否有活跃维护？

风险等级判定：

| 等级 | 条件 | 处理方式 |
|------|------|---------|
| 🟢 LOW | 无网络/命令执行，只做文本处理 | 自动继续 |
| 🟡 MEDIUM | 有网络访问或文件操作，但范围明确 | 继续，但在确认步骤中说明 |
| 🔴 HIGH | 访问凭证类文件、执行系统命令 | 需要用户明确确认 |
| ⛔ EXTREME | 任何红线 | 终止，不安装 |

---

### 第三阶段：提取 Skill 元信息

从 SKILL.md 的 frontmatter 提取：

```yaml
name: [skill 名称，用作目录名]
description: [skill 描述]
```

如果 frontmatter 缺失或格式不正确：
- 尝试从文件名或 GitHub 路径推断 skill 名称
- 提示用户确认名称

**目录名规则**：
- 使用 frontmatter 中的 `name` 字段
- 全小写，单词间用连字符（kebab-case）
- 示例：`my-skill-name`

---

### 第四阶段：安装确认

在写入文件之前，向用户展示安装摘要并请求确认：

```
╔══════════════════════════════════════════╗
║           SKILL 安装确认                  ║
╠══════════════════════════════════════════╣
║ Skill 名称：[name]                        ║
║ 安装路径：~/.claude/skills/[name]/        ║
║ 来源：[来源描述]                           ║
║ 风险等级：[🟢/🟡/🔴]                      ║
║ 文件数量：1 个（SKILL.md）                 ║
╠══════════════════════════════════════════╣
║ 审查结果：✅ 未发现安全红线                 ║
║ 注意事项：[如有风险，列出]                  ║
╚══════════════════════════════════════════╝

是否确认安装？（回复"确认"或"是"继续，其他回复取消）
```

**注意**：此步骤必须等待用户明确确认，不可自动跳过。
风险等级为 🔴 HIGH 时，需要用户输入 "确认安装高风险skill" 才能继续。

---

### 第五阶段：写入文件

用户确认后执行安装：

```bash
# 1. 创建目录
mkdir -p ~/.claude/skills/[skill-name]

# 2. 写入 SKILL.md
# 使用 Write 工具将内容写入
# ~/.claude/skills/[skill-name]/SKILL.md

# 3. 如果 skill 包含其他文件（scripts/ 等），一并下载写入
```

安装完成后输出：

```
✅ 安装成功

Skill：[name]
路径：~/.claude/skills/[name]/SKILL.md
状态：已激活（下次对话自动加载）

触发方式：[从 description 提取的触发关键词]
```

如果目标路径已存在同名 skill：
```
⚠️  检测到已安装同名 skill：[name]
现有版本：[如果能获取版本信息]
新版本：[如果能获取版本信息]

选项：
1. 覆盖安装（替换现有 skill）
2. 保留现有，取消安装
请选择（1/2）：
```

---

## 快速安装示例

### 从 GitHub 仓库安装

```
安装 anthropics/claude-code-skills/my-skill
```

### 从原始 URL 安装

```
安装 https://raw.githubusercontent.com/owner/repo/main/skills/my-skill/SKILL.md
```

### 从本地路径安装

```
安装 /Users/me/Downloads/my-skill/SKILL.md
```

### 直接粘贴内容安装

```
安装以下 skill：
---
name: my-skill
description: ...
---
# My Skill
...
```

---

## 卸载功能

当用户说"卸载 skill [name]"或"删除 skill [name]"时，执行：

```bash
# 确认目录存在
ls ~/.claude/skills/[name]/

# 请求确认后删除
# 使用 Bash 工具：rm -rf ~/.claude/skills/[name]/
```

卸载前必须显示确认提示：
```
⚠️  即将删除 skill：[name]
路径：~/.claude/skills/[name]/
此操作不可撤销。确认删除？（回复"确认"继续）
```

---

## 列出已安装 skill

当用户说"列出所有skill""已安装哪些skill""skill列表"时：

```bash
ls ~/.claude/skills/
```

格式化输出每个 skill 的名称和简短描述（从 frontmatter 提取）。

---

## 安全原则

1. **内容不可见 = 不安装**：无法获取 SKILL.md 内容的来源，一律拒绝
2. **红线不妥协**：任何红线触发，无论来源多可信，都终止安装
3. **用户最终决定**：审查通过后，安装决定权在用户
4. **透明原则**：所有审查结果、风险评估对用户完全可见

---

## 与 skill-vetter 的关系

`skill-installer` 内置了简化版的 skill-vetter 逻辑。
如果需要更详细的安全审查报告（不安装，只审查），请使用 `skill-vetter`。

推荐工作流：
```
可疑来源 → 先用 skill-vetter 详细审查 → 确认安全后再用 skill-installer 安装
可信来源 → 直接用 skill-installer（内置审查已足够）
```

---

## 语言

- 默认中文
- 若用户用英文输入，输出用英文

