第 32 期 | 使用 skills.sh:2026 时代的 Agent npm 管理器

更新于 2026/4/5

🎯 学习目标

  • 深入理解 skills.sh 作为未来 Agent 技能管理器的核心理念与设计哲学。
  • 掌握 npx skills add 命令,实现 Agent 技能的本地、远程(如 Git 仓库)安装与集成。
  • 学会使用 npx skills listnpx skills update 对 Agent 已安装技能进行有效管理。
  • 探索 Agent 技能的标准化结构 (skill.json) 及其在社区共享与复用中的关键作用。

📖 核心概念讲解

随着人工智能技术,特别是大型语言模型(LLMs)的飞速发展,AI Agent 正在从简单的问答机器人演变为能够感知、规划、行动并反思的智能实体。然而,Agent 的能力并非与生俱来,它们需要通过“工具使用”(Tool Use)来扩展其感知世界、执行复杂任务的能力。本期课程,我们将聚焦一个前瞻性的概念工具——skills.sh,它被设想为 2026 时代 Agent 的“npm 管理器”,旨在为 Agent 提供一套标准化的技能发现、安装与管理机制。

32.1 Agent npm 管理器:skills.sh 的诞生背景与愿景

背景:LLM 的局限与工具使用的崛起

当前的 LLM 尽管强大,但仍存在固有局限性:

  • 知识边界:LLM 的知识停留在训练数据截止日期,无法获取实时信息。
  • 计算能力:不擅长复杂计算、逻辑推理,容易出现“幻觉”。
  • 行动能力:无法直接与外部世界(如 API、文件系统、用户界面)交互。

为了弥补这些不足,工具使用(Tool Use) 应运而生。通过将 LLM 与外部工具(如计算器、搜索引擎、API 客户端、代码解释器等)结合,Agent 获得了超越自身模型边界的能力。例如,一个 Agent 可以调用天气 API 获取实时天气,调用代码解释器执行复杂计算,或者调用数据库查询特定信息。

挑战:工具碎片化与管理困境

然而,随着 Agent 生态的扩张,工具使用的管理面临巨大挑战:

  • 发现与集成:如何让 Agent 自动发现并集成各种新工具?
  • 标准化:不同工具的接口和调用方式千差万别,如何实现统一的描述和调用机制?
  • 版本与依赖:工具会有更新、依赖,如何有效管理其生命周期?
  • 社区共享:开发者如何便捷地分享和复用 Agent 技能?

skills.sh 的愿景:Agent 技能的“npm”

skills.sh 正是为了解决上述挑战而提出的一个概念性框架。它旨在成为 Agent 生态系统的核心基础设施,提供一个类似 Node.js 生态中 npm 的技能包管理器。

+---------------------+     +---------------------+
|   Human Developer   |     |      AI Agent       |
+----------+----------+     +----------+----------+
           |                          |
           |   (Develops/Publishes)   |   (Discovers/Installs/Uses)
           v                          v
+-------------------------------------------------+
|                  skills.sh Registry             |
|  (Centralized repository of Agent Skills)       |
+-------------------------------------------------+
           ^                          ^
           |   (Download/Install)     |   (Search/Install)
           |                          |
+----------+----------+     +----------+----------+
|  Local Agent Runtime  |     |  Local Agent Runtime  |
|  (Manages installed skills) |  (Manages installed skills) |
+---------------------+     +---------------------+

图 1: skills.sh 在 Agent 生态中的角色示意图

skills.sh 的核心目标是:

  1. 标准化:定义统一的技能描述格式(如 skill.json),让 Agent 和开发者都能理解技能的用途、参数和预期输出。
  2. 可发现性:提供一个中心化的技能注册与搜索机制,让 Agent 能够根据任务需求,自主发现并选择合适的技能。
  3. 易用性:提供简单直观的命令行接口 (npx skills),让 Agent 或其开发者能够轻松安装、更新和管理技能。
  4. 互操作性:促进不同 Agent 框架和平台之间技能的共享和复用。

想象一下,未来的 Agent 可以像我们今天安装 npm 包一样,通过 npx skills add weather-forecast 命令,瞬间获得查询天气的能力,而无需开发者手动编写复杂的 API 调用逻辑。

32.2 Skill 的结构与注册机制

skills.sh 体系中,一个“技能”(Skill)是 Agent 执行特定任务所需的一组封装好的功能单元。它不仅仅是一段代码或一个 API 端点,更重要的是它包含 Agent 理解和调用该功能所需的元数据。

一个 Skill 的核心组成部分:

  1. 元数据 (Metadata):这是技能的“说明书”,通常以 skill.jsonskill.yaml 文件的形式存在。它包含了 Agent 理解和调用该技能的所有关键信息。

    • name:技能的唯一标识符。
    • version:技能的版本号,遵循语义化版本(semver)规范。
    • description:技能的简要描述,供 Agent 或用户理解其功能。
    • author:技能的开发者或组织。
    • entrypoint:技能的实际执行入口,可以是一个脚本文件路径、一个 HTTP API 端点描述文件(如 OpenAPI 规范),或一个 WebAssembly 模块路径。
    • parameters:最重要的部分,使用 JSON Schema 或 OpenAPI 格式定义技能的输入参数。这使得 Agent 能够理解如何构造调用该技能所需的参数。
    • output_schema (可选):定义技能的输出结构,帮助 Agent 解析结果。
    • dependencies (可选):该技能可能依赖的其他技能或系统库。
  2. 实现 (Implementation):这是技能的实际功能代码。根据 entrypoint 的定义,它可能是一个:

    • 脚本文件:如 Bash 脚本、Python 脚本等,Agent 可以直接执行。
    • API 描述文件:一个 OpenAPI/Swagger JSON/YAML 文件,描述了一个远程 HTTP API 的接口,Agent 可以据此构造 HTTP 请求。
    • WebAssembly 模块:为了性能和跨平台兼容性,一些计算密集型技能可能以 Wasm 形式提供。
  3. 接口定义 (Interface Definition):通过 parameters 字段明确声明技能的输入参数,以及这些参数的类型、描述、是否必填等。这对于 Agent 规划和执行工具调用至关重要。

skill.json 示例:一个天气查询技能

{
  "name": "weather-forecast",
  "version": "1.1.0",
  "description": "获取指定城市的实时天气和未来几天的天气预报。数据来源于 OpenWeatherMap。",
  "author": "ClaudeAI Developer Community",
  "keywords": ["weather", "forecast", "realtime", "city"],
  "entrypoint": "scripts/get_weather.sh",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "需要查询天气的城市名称,例如 '北京'、'New York'。",
        "pattern": "^[a-zA-Z\\s]+$|^[\\u4e00-\\u9fa5]+$"
      },
      "days": {
        "type": "integer",
        "description": "未来几天预报(可选,默认1天,最大支持5天)。",
        "minimum": 1,
        "maximum": 5,
        "default": 1
      },
      "unit": {
        "type": "string",
        "description": "温度单位(可选,'metric' 摄氏度, 'imperial' 华氏度)。",
        "enum": ["metric", "imperial"],
        "default": "metric"
      }
    },
    "required": ["city"]
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "city": {"type": "string"},
      "current_temp": {"type": "number"},
      "unit": {"type": "string"},
      "forecast": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "date": {"type": "string", "format": "date"},
            "min_temp": {"type": "number"},
            "max_temp": {"type": "number"},
            "conditions": {"type": "string"}
          }
        }
      }
    }
  },
  "license": "MIT"
}

代码 1: weather-forecast 技能的 skill.json 示例

注册机制:将 Skill 引入 Agent 环境

skills.sh 通过 npx skills add 命令来注册技能。注册过程通常包括:

  1. 获取技能包:从指定来源(本地路径、Git 仓库、远程 Registry)下载或拷贝技能文件。
  2. 解析与验证:读取 skill.json 文件,验证其格式和内容是否符合规范。
  3. 本地存储:将技能文件存储到 Agent 运行环境的特定技能目录中(例如 ~/.skills/ 或 Agent 工作目录下的 .skills/)。
  4. 注册到 Agent:更新 Agent 内部的技能索引,使其知道新技能的存在、如何调用以及其功能描述。

32.3 npx skills 命令家族:add, list, update 深度解析

npx skills 是与 skills.sh 交互的主要命令行接口。npx 是 Node.js 包执行器,允许我们执行 Node.js 包中的命令,而无需先将其全局安装,这非常适合 skills.sh 这种可能作为 Agent 运行时依赖的工具。

核心命令概览:

Command 目的 用法示例
npx skills add 添加(安装)新 Agent 技能 npx skills add ./my-local-skill
npx skills add [email protected]:org/repo.git#main
npx skills list 列出当前 Agent 环境中所有已安装的技能 npx skills list
npx skills update 更新一个或所有已安装技能到最新版本 npx skills update weather-forecast
npx skills update --all
npx skills remove 移除已安装的技能(本期不详述,但作为补充) npx skills remove weather-forecast

1. npx skills add <source>:添加 Agent 技能

该命令用于将新的技能引入 Agent 的能力集。<source> 可以是多种类型:

  • 本地路径:用于安装本地开发中的技能或已下载到本地的技能包。

    # 安装位于当前目录下的 'my-local-skill' 文件夹中的技能
    npx skills add ./my-local-skill
    

    Agent 会查找 ./my-local-skill/skill.json 并将其注册。

  • Git 仓库 URL:从 Git 仓库安装技能,支持指定分支或标签。这对于社区共享和版本控制至关重要。

    # 从 GitHub 仓库安装 'weather-forecast' 技能,使用 'main' 分支
    npx skills add [email protected]:claude-skills/weather-skill.git#main
    
    # 或者使用 HTTPS 协议
    npx skills add https://github.com/claude-skills/weather-skill.git#v1.1.0
    

    skills.sh 会克隆仓库,解析其中的 skill.json,并将其注册。

  • 远程 Registry/URL:未来 skills.sh 会有一个中心化的 Registry,类似 npm。开发者可以将技能发布到 Registry,Agent 可以通过名称直接安装。

    # 从 skills.sh 官方 Registry 安装 'pdf-summarizer' 技能
    npx skills add pdf-summarizer
    
    # 或者直接通过 URL 安装一个 tarball
    npx skills add https://skills.sh/registry/archive/pdf-summarizer-1.0.0.tgz
    

    此方式最为便捷,是未来 Agent 自主发现和安装技能的主要途径。

2. npx skills list:列出已安装的 Agent 技能

该命令用于查看当前 Agent 运行环境中所有已安装并可用的技能。它提供了技能的名称、版本、简要描述和来源等信息。

npx skills list

示例输出:

📦 Installed Agent Skills:

- [email protected] (Get real-time and future weather forecast for a city)
  Source: [email protected]:claude-skills/weather-skill.git#main
- [email protected] (Summarize PDF documents from a given URL or path)
  Source: https://skills.sh/registry/pdf-summarizer-1.0.0.tgz
- [email protected] (Execute Python code and analyze data)
  Source: built-in

代码 2: npx skills list 输出示例

这对于 Agent 进行自省(了解自己具备哪些能力)和用户进行审计(查看 Agent 正在使用哪些工具)都非常有用。

3. npx skills update [skill_name]:更新 Agent 技能

该命令用于将一个或所有已安装的技能更新到其来源的最新版本。

  • 更新特定技能

    # 更新 'weather-forecast' 技能
    npx skills update weather-forecast
    

    skills.sh 会检查 weather-forecast 技能的原始来源(例如 Git 仓库),看是否有新的提交或版本发布,然后下载并替换本地的旧版本。

  • 更新所有技能

    # 更新所有已安装的技能
    npx skills update --all
    

    这会遍历所有通过 skills.sh 安装的技能,并尝试将其更新到最新版本。

更新操作确保 Agent 始终能够利用技能的最新功能和安全补丁。


💻 模拟 Claude TUI 交互

以下我们模拟 Claude Agent 在终端环境(Text User Interface, TUI)中,如何利用 skills.sh 来管理和使用其技能的场景。

场景 1:Claude 自主发现并安装天气查询技能

用户需要 Claude 提供实时天气信息,而 Claude 发现它还没有这个能力。

> 用户:Claude,今天北京的天气怎么样?

╭─ Claude ──────────────────────────────╮
│  Hmm,我目前还没有直接查询实时天气的能力。                                │
│  不过,我可以在 `skills.sh` 技能库中查找并安装一个天气查询技能。           │
│  我找到了一个名为 `weather-forecast` 的技能,它能满足你的需求。           │
│  是否要安装它? [Y/n]                                                  │
╰───────────────────────────────────────╯

> 用户:Y

╭─ Claude ──────────────────────────────╮
│  好的,正在为您安装 `weather-forecast` 技能...                           │
│  工具调用: `npx skills add [email protected]:claude-skills/weather-skill.git#main` │
│  ... (安装过程输出) ...                                                │
│  `[email protected]` 技能已成功安装。                               │
│  现在,让我来查询北京的天气。                                            │
│  工具调用: `weather-forecast --city 北京`                               │
│  ... (技能执行输出) ...                                                │
│  北京今天晴朗,气温 25°C。未来三天预报:...                              │
╰───────────────────────────────────────╯

场景 2:用户要求 Claude 列出并更新其技能

用户想了解 Claude 具备哪些能力,并确保其技能都是最新的。

> 用户:Claude,你现在都有哪些可用的工具或技能?

╭─ Claude ──────────────────────────────╮
│  好的,我将列出我当前已安装的技能。                                      │
│  工具调用: `npx skills list`                                           │
│  ... (技能列表输出) ...                                                │
│  目前我安装了以下技能:                                                │
│  - `[email protected]` (获取实时天气和预报)                         │
│  - `[email protected]` (总结 PDF 文档)                               │
│  - `[email protected]` (执行 Python 代码和数据分析)                 │
│  您是否需要我检查所有技能是否有更新? [Y/n]                              │
╰───────────────────────────────────────╯

> 用户:Y

╭─ Claude ──────────────────────────────╮
│  好的,我将尝试更新所有已安装的技能。                                    │
│  工具调用: `npx skills update --all`                                   │
│  ... (更新过程输出) ...                                                │
│  `weather-forecast` 已更新到 `1.1.1`。                                   │
│  `pdf-summarizer` 已是最新版本。                                         │
│  `code-interpreter` 已更新到 `1.0.0`。                                   │
│  所有技能已检查并更新完毕。                                            │
╰───────────────────────────────────────╯

场景 3:Claude 在执行复杂任务时,根据需求安装辅助技能

用户要求 Claude 总结一个在线 PDF 文档,Claude 发现它只有本地 PDF 总结能力,需要一个能下载 PDF 的技能。

> 用户:Claude,请帮我总结一下这个网址的 PDF 文档:`https://example.com/report.pdf`

╭─ Claude ──────────────────────────────╮
│  好的,我理解您的请求。我有一个 `pdf-summarizer` 技能可以总结 PDF,但它需要 │
│  本地文件路径。我需要先将远程 PDF 下载到本地。                           │
│  我发现 `skills.sh` 技能库中有一个 `url-downloader` 技能可以完成此任务。 │
│  是否要安装 `url-downloader` 技能? [Y/n]                              │
╰───────────────────────────────────────╯

> 用户:Y

╭─ Claude ──────────────────────────────╮
│  正在安装 `url-downloader` 技能...                                       │
│  工具调用: `npx skills add url-downloader`                               │
│  ... (安装过程输出) ...                                                │
│  `[email protected]` 技能已成功安装。                                 │
│  现在,我将使用 `url-downloader` 下载 PDF,然后用 `pdf-summarizer` 进行总结。│
│  工具调用: `url-downloader --url https://example.com/report.pdf --output report.pdf` │
│  ... (下载过程输出) ...                                                │
│  PDF 已下载到本地。现在调用 `pdf-summarizer`...                        │
│  工具调用: `pdf-summarizer --path report.pdf`                           │
│  ... (总结过程输出) ...                                                │
│  该报告主要讨论了全球气候变化对经济的影响,并提出了多项应对策略。具体细节如下:... │
╰───────────────────────────────────────╯

💻 代码演示

本节将提供实际的代码片段,演示如何构建一个简单的 Agent 技能,并使用 npx skills 命令进行管理。

1. 创建一个简单的 Agent 技能:greet-user

首先,我们创建一个名为 greet-user 的技能。它包含一个 skill.json 文件和一个简单的 Bash 脚本作为其实现。

文件结构: