一个用于发现、安装和管理可复用 agent 技能包的技能管理工具,支持多种 AI 编程平台。

特性

  • 多源支持:从 Git 仓库、GitHub、GitLab 及任何 Git 兼容主机安装技能
  • 平台管理:一条命令将技能安装到多个 AI 编程平台(Claude、Codex 等)
  • 锁文件追踪:通过 .xskill-lock.json 追踪已安装技能,确保可复现安装
  • 全局配置:单一全局配置文件 ~/.xskill/settings.json,支持 XSKILL_CONFIG 环境变量覆盖
  • 递归搜索:自动发现仓库中嵌套目录结构下的技能。优先扫描 skills/ 子目录,若不存在则回退到项目根目录扫描。以 . 开头的目录(如 .git、.agents)会被排除。
  • 批量操作:使用 --all 标志或 * 通配符安装或移除所有技能
  • 缓存支持:可选的本地缓存,实现无网络访问的快速技能查询
  • 交互式 TUI:通过 find 命令模糊搜索并交互式安装技能
  • 跨平台:支持 Windows、macOS 和 Linux

安装

快速安装

Linux / macOS:

curl -fsSL https://xskill.gcli.cn/install.sh | bash

脚本自动检测操作系统和架构,从 GitHub Releases 下载对应的预编译二进制文件,安装到 ~/.local/bin(root 用户安装到 /usr/local/bin)。支持中国网络 CDN 加速。

Windows(PowerShell):

irm https://xskill.gcli.cn/install.ps1 | iex

自动检测架构,从 GitHub Releases 下载,安装到 %USERPROFILE%\.local\bin(管理员安装到 %ProgramFiles%\xskill\bin)。若安装路径不在 PATH 中,脚本会提示你添加。

从 npm 安装

npm install -g @jetsung/xskill

从 crates.io 安装

cargo install xskill

从 Git 安装

cargo install --git https://github.com/jetsung/xskill.git xskill

或从 AtomGit 安装(国内用户):

cargo install --git https://atomgit.com/jetsung/xskill.git xskill

从源码安装

git clone https://github.com/jetsung/xskill.git
cd xskill
cargo install --path .

环境要求

  • Rust 1.70+
  • Git(需在 PATH 中可用)

预编译二进制

GitHub Releases 页面提供 Linux、macOS 和 Windows 的预编译二进制文件。

快速开始

1. 配置源

添加技能仓库作为源:

xskill sources add -n my-skills -u https://github.com/example/skills

或让名称从 URL 自动提取:

xskill sources add -u https://github.com/user/repo.git
# 名称自动设为 "user/repo"

2. 查询可用技能

列出源中的技能:

xskill query -f my-skills

查询特定技能:

xskill query -f my-skills -s vue

3. 安装技能

安装到项目级 .agents/ 目录:

xskill add -f my-skills -s vue

安装到全局 ~/.agents/ 目录:

xskill add -f my-skills -s vue -g

4. 列出已安装技能

xskill list

5. 移除技能

xskill remove -s vue

全局选项

以下选项可在任何子命令之前使用:

选项说明
-v, --verbose显示详细输出,包括 git 命令的 stderr。用于调试安装问题。
-h, --help显示帮助信息
-V, --version显示版本信息

示例:

# 调试模式 — 查看 git clone 详情
xskill -v add -f my-skills -s vue

# 调试模式 + 全局安装
xskill -v add -f my-skills -s vue -g

命令

sources — 管理配置源

列出、添加、移除或重命名配置中的技能源。

sources list

列出所有已配置的源:

xskill sources
# 或显式调用:
xskill sources list

输出格式:

#  NAME   TYPE URL
1  antfu  git  https://github.com/antfu/skills

sources add

添加新源:

xskill sources add -n <name> -u <url> [-t git|api]

选项:

  • -n, --name — 源名称(可选,仅允许字母数字、-、_ 和 /,支持 user/repo 格式;未指定时自动从 URL 提取路径作为默认名称,如 https://github.com/user/repo.git → user/repo)
  • -u, --url — 源地址(必填,须以 http:// 或 https:// 开头)
  • -t, --type — 源类型:git 或 api(默认:git)

示例:

# 显式指定名称
xskill sources add -n my-skills -u https://github.com/example/skills

# 名称自动提取为 "user/repo"
xskill sources add -u https://github.com/user/repo.git

# 斜杠分隔的名称
xskill sources add -n org/team/repo -u https://gitlab.com/org/team/repo

sources remove

按名称、URL 或索引移除源:

xskill sources remove -n <name>
xskill sources remove -u <url>
xskill sources remove -n <name> -u <url>
xskill sources remove -i <index>

选项:

  • -n, --name — 要移除的源名称(可选)
  • -u, --url — 要移除的源地址(可选)
  • -i, --index — 源索引,来自 sources list 的 # 列(可选,从 1 开始)

优先级:--name/--url > --index。至少需指定 --name、--url 或 --index 之一。同时指定 --name 和 --url 时两者都匹配才删除。

sources rename

重命名已有源(仅允许修改名称,url 和 type 不可变更):

xskill sources rename -n <name> -N <new-name>
xskill sources rename -i <index> -N <new-name>

选项:

  • -n, --name — 当前源名称(或使用 -u 按 URL 匹配)
  • -u, --url — 当前源地址(替代标识符)
  • -i, --index — 源索引,来自 sources list 的 # 列(可选,从 1 开始)
  • -N, --new-name — 新名称(必填,传空字符串清空名称)

优先级:--name/--url > --index。至少需指定 --name、--url 或 --index 之一。

platforms — 管理配置平台

列出或重置所有已配置的 AI 编程平台。

platforms list

列出已配置的平台。默认只显示启用(enabled: true)的渠道,按显示名称排序;NAME 列为渠道显示名称(缺失时回退到配置 key):

xskill platforms list

裸命令 xskill platforms 等同于 xskill platforms list。

输出格式(NAME、PATH、SKILLS、AGENTS、SOURCE、COMPAT、ENABLED 七列):

NAME         PATH     SKILLS  AGENTS      SOURCE     COMPAT  ENABLED
Claude Code  .claude  skills  CLAUDE.md   AGENTS.md  ✗       ✓
Codex        .codex   skills  AGENTS.md   AGENTS.md  ✓       ✓
Cline        .cline   skills  CLAUDE.md   AGENTS.md  ✓       ✗

✓ 绿色表示兼容/启用(agents_compat: true / enabled: true),✗ 红色表示不兼容/禁用,便于肉眼区分。

显示全部平台信息,包含禁用渠道:

xskill platforms list -a

输出格式同默认视图(NAME、PATH、SKILLS、AGENTS、SOURCE、COMPAT、ENABLED 七列),禁用渠道以 ENABLED 列 ✗ 标识:

NAME         PATH     SKILLS  AGENTS      SOURCE     COMPAT  ENABLED
Claude Code  .claude  skills  CLAUDE.md   AGENTS.md  ✗       ✓
Codex        .codex   skills  AGENTS.md   AGENTS.md  ✓       ✓
Cline        .cline   skills  CLAUDE.md   AGENTS.md  ✓       ✗

选项:

  • -a, --all — 包含全部渠道(含禁用),以 ENABLED 列标注启用状态

所有视图均输出完整列信息(NAME、PATH、SKILLS、AGENTS、SOURCE、COMPAT、ENABLED)。

兼容平台(agents_compat: true)会在 add、link 等命令的交互式目标平台选择器中自动预选。

platforms reset

将 platforms 重置为内置默认平台列表,通过互斥旗标指定模式(非交互执行,不弹出 TUI):

  • --replace(短参 -r)— 完全恢复:所有平台恢复内置默认配置,移除自定义平台
  • --merge(短参 -m)— 谨慎合并:只更新内置平台,自定义平台保留

两个旗标必须且只能提供一个:同时提供时报错且不执行重置;均不提供时打印上述用法帮助(退出码 0,不修改配置)。

若存在自定义平台,会先打印提示。其他配置字段(sources、cache、proxy 等)不受影响。

示例:

$ xskill platforms reset --replace
Custom platforms: my-custom
Platforms reset: 18 platforms, replaced with defaults (custom dropped)

边界情况:

  • 未配置任何平台时输出 “No platforms configured”。
  • 空字段显示 -。

add — 安装技能

从源安装技能到目标目录。

xskill add [OPTIONS] --from <SOURCE> --skill <SKILL>

选项:

  • -f, --from <SOURCE> — 源名称、ORG/REPO 或 Git URL
  • -s, --skill <SKILL> — 技能名称(使用 '*' 表示所有技能)
  • -g, --global — 安装到全局 ~/.agents/ 目录
  • -a, --agent <AGENT> — 目标平台(使用 '*' 表示所有平台)
  • -A, --all — --skill '*' --agent '*' 的简写(需配合 --from)

安装目标

标志目标
(无)项目级 .agents/skills/
-g全局 ~/.agents/skills/
-a <platform>平台特定目录(如 .claude/skills/)
-a '*'所有已配置平台

源信息显示

安装前会输出源信息:Source: <source-name> (<source-url>)(标签 cyan bold)。

多源同名技能选择

当未指定 -f 且多个源(含注册中心)包含同名技能时:

  • 交互终端:弹出 skim 单选 TUI,三列对齐显示:[registry] / -(第一列,注册中心条目显示 [registry],本地源显示 -)、source_name、url。注册中心 source_name 为空或与本地源冲突时显示 -。
  • 非交互终端:报错并列出所有匹配源(含 URL),提示使用 xskill add -f <source> -s <skill>。

输出样式

标签(Name、Description、Version、Path)使用 cyan bold 显示。Name 值使用黄色显示。Description 或 Version 为空时不显示该行。

  • Path(cyan bold):技能在仓库中的完整路径(如 skills/vue/SKILL.md)。
  • Installed(green):规范目录路径。
  • Symlinked(green):平台目录路径(不显示箭头和目标,因 Installed 行已展示规范目录)。
  • Source(cyan bold):Source: <name> (<url>)。

示例

# 安装到项目
xskill add -f antfu -s vue

# 安装到全局
xskill add -f antfu -s vue -g

# 安装到特定平台
xskill add -f antfu -s vue -a claude

# 安装到所有平台
xskill add -f antfu -s vue -a '*'

# 安装源中所有技能
xskill add -f antfu -s '*'

# 安装到所有位置
xskill add -f antfu -A

将规范目录中已存在的 skill 软链接到指定平台目录。与 add 不同,link 不会从远程源下载或安装任何 skill,仅操作本地已有的 skill。

xskill link [OPTIONS] --skill <SKILL> --agent <AGENT>

选项:

  • -s, --skill <SKILL> — 技能名称(使用 '*' 表示所有技能)
  • -a, --agent <AGENT> — 目标平台(使用 '*' 表示所有平台)
  • -g, --global — 操作全局 ~/.agents/skills/ 目录
  • -A, --all — --skill '*' --agent '*' 的简写

链接行为

标志行为
-s s1 -a codebuddy将 .agents/skills/s1 软链接到 .codebuddy/skills/s1(自动创建平台目录)
-s s1 -a codebuddy -g将 ~/.agents/skills/s1 软链接到 ~/.codebuddy/skills/s1
-s s1 -a '*'将 s1 链接到各已存在平台目录
-s '*' -a claude将所有已有 skill 链接到 claude 平台
-s '*' -a '*'将所有已有 skill 链接到各已存在平台目录
-A等同于 -s '*' -a '*'

关键规则

  • link 不需要 -f 参数(不涉及远程源)。
  • 不更新锁文件:skill 已由 add 命令安装并写入锁文件,link 仅创建 symlink。
  • 规范目录中的 skill 必须已存在(包含 SKILL.md),否则报错。
  • -s '*' 时扫描规范目录中所有包含 SKILL.md 的子目录。
  • 软链接使用相对路径,规则与 add 命令一致。
  • symlink 创建失败时回退为文件复制。

agents_compat 兼容

agents_compat: true 的平台会被跳过(直接读取规范目录)。单平台指定时输出 Skipped: <name> (agents_compat)(暗灰色);-a '*' 时静默跳过并汇总输出。

示例

# 将单个 skill 链接到特定平台
xskill link -s vue -a claude

# 将所有已有 skill 链接到某个平台
xskill link -s '*' -a claude

# 将 skill 链接到所有平台
xskill link -s vue -a '*'

# 链接所有 skill 到所有平台
xskill link -A

# 全局模式
xskill link -s vue -a claude -g

remove — 移除技能

移除已安装的技能并更新锁文件。

xskill remove [OPTIONS] --skill <SKILL>

选项:

  • -s, --skill <SKILL> — 技能名称(使用 '*' 表示所有技能)
  • -g, --global — 从全局目录移除
  • -a, --agent <AGENT> — 目标平台(使用 '*' 表示所有平台)
  • -A, --all — --skill '*' --agent '*' 的简写

update — 更新已安装技能

根据锁文件记录重新安装技能,保留原始 installed_at 时间戳。

xskill update [OPTIONS]

选项:

  • -g, --global — 仅更新全局技能
  • -s, --skill <SKILL> — 技能名称(使用 '*' 表示所有技能)

输出样式:标签(Source、Updating、Name、Description、Version、Updated)使用 cyan 显示,Name 值使用黄色。

restore — 从锁文件恢复技能

读取当前目录下的 .xskill-lock.json,安装所有已记录的技能。适用于新环境搭建或克隆项目后快速恢复技能。恢复时按 source_url 分组,同一仓库仅克隆一次,避免重复 git 操作。

xskill restore [OPTIONS]

选项:

  • -g, --global — 安装到全局 ~/.agents/skills/ 目录(默认:项目级 .agents/skills/)
  • -a, --agent <AGENT> — 目标平台(使用 '*' 表示所有平台)
  • -D, --dry-run — 预览模式:列出将要恢复的技能,不执行安装

安装目标

标志目标
(无)项目级 .agents/skills/
-g全局 ~/.agents/skills/
-a <platform>平台特定目录(如 .claude/skills/)
-a '*'所有已配置平台

示例

# 恢复所有技能到项目
xskill restore

# 恢复到全局目录
xskill restore --global

# 恢复到特定平台
xskill restore --agent claude

# 预览将要恢复的内容
xskill restore --dry-run

输出格式:

Restoring: vue
  Source: https://github.com/antfu/skills.git
  Target: .agents/skills/vue
  Name: Vue
  Description: Vue.js 技能包

Restore complete: 3 succeeded, 0 failed

Dry-run 输出(按技能名称分组,避免重复):

Skills to restore:

NAME   SOURCE                                      TARGET
vue    https://github.com/antfu/skills.git         .claude/skills/vue
                                                    .codex/skills/vue
react  https://github.com/antfu/skills.git         .claude/skills/react
                                                    .codex/skills/react

颜色规则:多目标(-a '*' 或多个平台)时表头蓝色、续行 TARGET 黑灰色。单目标(-a <name>)时无颜色。

list — 列出已安装技能

以对齐列格式显示已安装的技能。

xskill list [OPTIONS]

选项:

  • -g, --global — 列出全局技能
  • -a, --agent <AGENT> — 只列出指定平台实际可用的技能;agents_compat 平台合并列出规范目录与其自身 skills 目录下的技能;不支持 *

输出格式(不带 -a):

Project Skills

vue     ~/.agents/skills/vue     Agents: codebuddy, gemini
react   ~/.agents/skills/react   Agents: codebuddy

指定 -a <agent> 时(例如 -a claude,仅列出该平台实际可用的技能,无 Agents: 列):

Project Skills

vue     ~/.claude/skills/vue
react   ~/.claude/skills/react
  • 技能名称显示为黄色,路径显示为暗灰色(使用 ~/ 前缀替代 home 目录)。
  • Agents: 前缀为黑灰色,平台名为默认白色(仅不带 -a 时显示)。
  • agents_compat 平台(如 atomcode)合并列出规范目录(.agents/skills)与其自身 skills 目录下的技能,同名技能仅显示一次(规范目录优先)。
  • -a '*' 不受支持:不加 -a 即为列出全部技能。
  • 按路径字母顺序排序。

query — 查询源中的技能

从已配置或远程源查询或列出技能。

xskill query [OPTIONS]

选项:

  • -f, --from <SOURCE> — 源名称、ORG/REPO 或 Git URL
  • -s, --skill <SKILL> — 特定技能名称(必填,不支持通配符 *)

当 cache.enabled 为 true 时,查询从本地缓存读取,而非从远程源获取。当 registry.enabled 为 true 且未指定 --from 时,还会额外查询注册中心。

输出样式:标签(Source、Registry、Name、Description、Version、Path)使用 cyan bold 显示,Name 值使用黄色。Source 为空时显示 -。Description 或 Version 为空时不显示该行。各技能之间以空行分隔。

当未找到技能但已配置源且 cache.enabled 为 true 时,显示提示:Hint: run 'xskill cache update' to refresh skills cache(cyan)。

find — 交互式查找并安装技能

启动多步交互式 TUI,支持多选批量安装技能。同源技能仅 clone 一次仓库,避免重复拉取。

xskill find [OPTIONS]

选项:

  • -f, --from <SOURCE> — 按源名称或 URL 过滤技能
  • -s, --skill <QUERY> — 预填充过滤查询
  • -g, --global — 安装到全局 ~/.agents/ 目录(默认:项目级 .agents/)

工作流程

  1. 选择技能 — 多选子串搜索(exact 模式)。显示格式:name [source](注册中心条目显示 name [registry] [source])。非选中行技能名称使用默认色,选中行使用蓝色。source 标签始终暗灰色;[registry] 标签选中时变为绿色。搜索框在底部,列表向上排列。快捷键提示:TAB: multi-select | enter confirm | esc cancel。按 TAB 多选技能,Enter 确认。未 TAB 选中时直接 Enter,使用光标所在项。
  2. 选择目标平台 — TUI 多选。首项为 Default(不可选中,表示不创建平台符号链接)。agents_compat 平台不在可选列表中,以 SELECTED: <platform1>, <platform2>, ... 形式显示在 header 中。后续为非兼容的配置平台。按 TAB 选择/取消选择,Enter 确认。选中行使用蓝色文字和深色背景高亮。
  3. 安装 — 按 source URL 分组,每组仅 clone 一次仓库。从 CachedSkill.path 提取正确安装路径(支持嵌套路径,如 skills/engineering/grill/SKILL.md,或根目录级别的 my-skill/SKILL.md)。安装到规范目录(.agents/skills/<name> 或 -g 时 ~/.agents/skills/<name>),然后为每个选中的平台创建相对符号链接。输出 Installed:、Symlinked: 和失败的平台(如有)。各技能输出之间以空行分隔。注册中心的技能直接使用 URL 克隆,不依赖本地 sources 配置。

任意步骤按 Esc 或 Ctrl-C 取消。

已知问题:skim 库的列表行号从 0 开始(skim 5.2.0 行为),非本项目可控。

示例

# 打开交互式查找器
xskill find

# 预过滤匹配 "git" 的技能
xskill find --skill git

# 从指定源查找
xskill find --from antfu

# 从 URL 查找(自动缓存 10 分钟)
xskill find --from https://github.com/example/skills

注意: 需要已填充的缓存。如尚未更新缓存,请先运行 xskill cache update。使用 URL 方式的 --from 时,技能列表会自动拉取并缓存。

cache — 管理技能缓存

管理本地技能缓存,支持离线查询。

xskill cache <COMMAND>

cache update

从远程源获取技能列表并保存到缓存:

xskill cache update [-f <source>]

选项:

  • -f, --from <source> — 仅更新特定源(名称或 URL)

每个源的输出:<源名称>: <数量> skills。汇总:Cache updated: N sources, M skills total。

cache clear

清除缓存的技能数据:

xskill cache clear [-f <source>]

选项:

  • -f, --from <source> — 仅清除特定源(名称或 URL)

config — 管理配置

查看或修改全局配置文件。

xskill config <COMMAND>

子命令:

  • init — 初始化配置文件,生成含默认值的完整配置(默认平台、缓存、注册中心)。内置平台条目按精简格式保存(仅 name/enabled/builtin 三字段)——由 Config::save() 对所有写配置的命令统一保证
  • edit — 在 $EDITOR 中打开配置(默认 vi)
  • get <key> — 通过点号路径获取配置值(如 cache.enabled)
  • set <key=value> — 通过点号路径设置配置值(如 cache.enabled=true)
  • show — 以美化后的 JSON 打印当前加载的完整配置(合并默认值,如补全缺失的平台)。输出无颜色,便于管道处理
  • validate — 校验配置文件。先做 JSON 语法与强类型结构校验,再对照 JSON Schema 做完整 Schema 校验。优先查找本地 Schema($XSKILL_SCHEMA、<config_dir>/schemas/xskill.schema.json、从可执行文件目录向上查找、<exe_dir>/../share/xskill/xskill.schema.json);本地均无则从 https://xskill.gcli.cn/xskill.schema.json 拉取(遵循代理配置)。成功输出 Valid <path> (schema: <source>),失败打印每条错误(含 JSON 路径)并以 1 退出

--verbose 与 --help 保持全局旗标不变,仅 config 的动作转为子命令。不带子命令执行 xskill config 时显示帮助。

示例 — 读取/设置代理:

xskill config get proxy
xskill config set proxy=socks5h://127.0.0.1:40027
xskill config validate

示例

# 初始化配置文件
xskill config init

# 在编辑器中打开配置
xskill config edit

# 读取值
xskill config get cache.enabled

# 设置值
xskill config set cache.enabled=true

new — 创建技能项目

使用模板创建新的技能项目。

xskill new --name <name> [--description <desc>] [--template <template>]

选项:

  • -n, --name <name> — 技能名称(必填,用作目录名)
  • -d, --description <desc> — 技能描述
  • -t, --template <template> — 模板类型

配置

配置文件位置

路径说明
~/.xskill/settings.json全局配置(默认)
XSKILL_CONFIG 环境变量覆盖配置路径(需指向 JSON 文件)

没有项目级配置,仅使用一个全局配置文件。

配置结构

{
  "$schema": "https://xskill.gcli.cn/xskill.schema.json",
  "platforms": { ... },
  "sources": [ ... ],
  "cache": { ... },
  "registry": { ... }
}

完整示例

{
  "$schema": "https://xskill.gcli.cn/xskill.schema.json",
  "platforms": {
    "claude": {
      "path": ".claude",
      "skills": "skills",
      "agents": "CLAUDE.md",
      "agents_compat": false
    },
    "codex": {
      "path": ".codex",
      "skills": "skills",
      "agents": "AGENTS.md",
      "agents_compat": true
    },
    "pi": {
      "path": ".pi/agent",
      "skills": "skills",
      "agents": "AGENTS.md",
      "agents_compat": true
    }
  },
  "sources": [
    {
      "name": "antfu",
      "type": "git",
      "url": "https://github.com/antfu/skills"
    },
    {
      "name": "mattpocock",
      "url": "https://github.com/mattpocock/skills"
    }
  ],
  "cache": {
    "enabled": true,
    "ttl": 600
  },
  "registry": {
    "enabled": false,
    "url": "https://xskill.gcli.cn/skills.json"
  },
  "proxy": ""
}

平台

每个平台条目配置特定 AI 编程工具的技能安装方式。

平台字段

字段必填默认值说明
path是—工具配置目录(相对路径、绝对路径或 ~/...)
skills否—技能子目录名(相对于 path),省略则跳过技能安装
agents否—代理配置文件名(相对于 path),省略则跳过代理安装
source否"AGENTS.md"固定 .agents/ 目录下的源文件名
agents_compat否false是否兼容 .agents/ 资源。为 true 时直接读取规范目录 — add/remove/link/restore 跳过 symlink(单平台输出 Skipped,-a '*' 静默)。find TUI 正常列出,安装时静默跳过 symlink。list -a 时合并列出规范目录与平台自身 skills 目录下的 skill(同名去重、规范目录优先)。

符号链接行为

agents 文件通过符号链接指向 .agents/ 下的源文件:

<path>/<agents>  →  .agents/<source>

例如,agents: "AGENTS.md" 且 source: "AGENTS.md"(默认):

.codex/AGENTS.md  →  .agents/AGENTS.md

agents: "AGENTS.md" 且 source: "CLAUDE.md":

.codex/AGENTS.md  →  .agents/CLAUDE.md

源

源定义技能的获取位置。

字段必填默认值说明
name否—唯一标识符(字母数字、-、_、/),支持 user/repo 格式;留空或无效时自动使用 URL 作为名称
type否"git"源类型:git 或 api
url是—仓库 URL(须以 http:// 或 https:// 开头)

缓存

字段必填默认值说明
cache.enabled否false为 query 命令启用本地技能缓存
cache.ttl否600缓存有效期(秒),默认 600(10 分钟)。同时作用于主缓存(skills.json)和 URL 缓存(source_<md5>.json)

启用后,xskill cache update 从所有源获取技能元数据并存储在本地。后续 query 和 find 命令根据 cache.ttl 检查缓存是否过期:未过期直接读取缓存;过期或缓存为空但有配置源时,自动重新克隆并回写 skills.json。

注册中心

注册中心是一个可选的 JSON API,提供精选的技能索引。启用后,query 和 find 命令会在查询配置源的同时额外查询注册中心。

字段必填默认值说明
registry.enabled否true是否启用注册中心查询
registry.url否https://xskill.gcli.cn/skills.json注册中心地址

URL 解析规则:

  • 裸域名或以 / 结尾 → 自动补全 /skills.json
  • 路径末尾含文件扩展名(如 .json)→ 原样使用
  • 空值或无效协议 → 回退内置默认地址

去重规则(URL 归一化后比较,本地优先):

  • 注册中心源的 URL 与已配置源的 URL 相同 → 跳过(以本地配置为准)。
  • 注册中心源与已配置源同名但 URL 不同 → 视为两个不同仓库,注册中心条目正常合并。query 中注册中心条目的源名称置空(显示为 -),find 中显示为该源的 URL。
  • 无冲突 → 正常显示。
  • Skill 级去重:仅在 URL 相同时跳过整个源。URL 不同时,即使 skill 名称相同也保留两条。

示例:

# 启用注册中心
xskill config set registry.enabled=true

# 使用自定义注册中心地址(裸域名)
xskill config set registry.url=https://example.com

# 使用自定义注册中心地址(带路径)
xskill config set registry.url=https://example.com/api/v1/

--from 参数解析

-f / --from 参数按以下顺序解析:

  1. Git URL:若值以 http:// 或 https:// 开头,直接使用
  2. 配置名称:匹配已配置的源名称
  3. GitHub 简写:若值包含 /(如 ORG/REPO),展开为 https://github.com/ORG/REPO.git
  4. 错误:若以上均不匹配,报告“源未找到“

--skill 参数

-s / --skill 参数接受:

  • 特定技能名称(如 vue)— 精确匹配,不支持模糊或子串匹配
  • 通配符 * 匹配所有技能

--agent 验证规则

当 -a / --agent 指定具体平台名称(非 *)时,该平台必须存在于配置的 platforms 中。否则显示以下错误:

Invalid agents: <输入值>                    (黄色)
Valid agents: platform1, platform2, ...     (黑灰色)

URL 归一化

所有 URL 相关操作在比较或缓存前会去除 .git 后缀。适用于 cache update --from、query --from、find --from 及 URL 缓存文件名生成(source_<md5>.json)。例如,https://github.com/org/repo.git 和 https://github.com/org/repo 视为同一 URL。

安装模型:规范目录 + 软链接

技能文件存放在规范目录(.agents/skills/),各平台目录通过相对路径软链接指向规范目录。

.agents/skills/my-skill/          ← 文件实际存放位置(规范目录)
.codebuddy/skills/my-skill/       → symlink → ../../.agents/skills/my-skill/
.gemini/skills/my-skill/          → symlink → ../../.agents/skills/my-skill/

全局 vs 本地路径

模式规范目录平台目录示例
-g(全局)~/.agents/skills/~/.codebuddy/skills/、~/.gemini/skills/
本地(默认)./.agents/skills/./.codebuddy/skills/、./.gemini/skills/

软链接规则

  • 相对路径:使用 relative(platform_skills_dir, canonical_skill_dir) 生成相对路径,便于目录移动。
  • 幂等:已存在且指向同一目标 → 跳过。
  • 更新:已存在但指向不同目标 → 删除重建。
  • 自动创建父目录:mkdir -p 确保平台 skills 子目录存在。
  • 跨平台:Windows 使用 junction,Unix 使用 symlink。

回退机制

优先:symlink(默认)
  ↓ 失败
回退:copy(文件复制)

symlink 创建失败时,清理目标目录后回退为 copy_dir_recursive 文件复制。

平台目录不存在时的行为

场景平台目录不存在时
-a <具体平台>主动创建平台目录并链接
-a '*'(所有平台)跳过,不创建目录也不链接

锁文件

锁文件追踪已安装技能,确保可复现性。

位置

路径范围
./.xskill-lock.json项目级
~/.agents/.xskill-lock.json全局

格式

{
  "version": 1,
  "skills": {
    "vue": {
      "source": "antfu",
      "source_type": "git",
      "source_url": "https://github.com/antfu/skills.git",
      "skill_path": "skills/vue/SKILL.md",
      "skill_folder_hash": "abc123...",
      "installed_at": "2026-07-15T18:16:42.852Z",
      "updated_at": "2026-07-15T18:16:42.852Z"
    },
    "my-skill": {
      "source": "custom",
      "source_type": "git",
      "source_url": "https://github.com/user/my-skill.git",
      "skill_path": "my-skill/SKILL.md",
      "skill_folder_hash": "def456...",
      "installed_at": "2026-07-25T10:00:00.000Z",
      "updated_at": "2026-07-25T10:00:00.000Z"
    }
  },
  "updated_at": "2026-07-15T18:16:42.852Z"
}

条目字段

字段说明
source配置中的源名称
source_type源类型(git)
source_url完整仓库 URL
skill_path仓库中 SKILL.md 的相对路径(如 skills/vue/SKILL.md 或根目录级别的 my-skill/SKILL.md)
skill_folder_hash技能目录的 Git 树哈希,用于变更检测
installed_at首次安装的 ISO 8601 时间戳(YYYY-MM-DDTHH:MM:SS.sssZ)
updated_at该技能最后更新的 ISO 8601 时间戳(YYYY-MM-DDTHH:MM:SS.sssZ)

顶层字段

字段说明
version锁文件格式版本(固定为 1)
updated_at锁文件最后修改的 ISO 8601 时间戳(增删改任意 skill 时更新)

update 命令使用锁文件记录重新获取技能,同时保留原始 installed_at 时间戳。

restore 命令对锁文件只读:仅从项目锁文件读取恢复清单,不会以任何形式回写——恢复后(无论成功、部分失败或 --dry-run)锁文件内容与执行前逐字节一致,始终反映 add/find 安装时的原始记录。

JSON Schema

schemas/ 目录提供两个 JSON Schema,同时托管在 xskill.gcli.cn。

xskill.schema.json — 工具配置

用于 ~/.xskill/settings.json,定义完整配置结构。

顶层字段:

字段类型必填说明
$schemastring否JSON Schema URL,用于编辑器校验。config init 自动生成
platformsobject<string, Platform>否平台配置,以平台标识符为键(如 "claude"、"codex")
sourcesSource[]否技能源仓库
cacheCacheConfig否缓存配置
registryRegistryConfig否注册中心配置
proxystring否代理地址。设置后导出 HTTP_PROXY/HTTPS_PROXY/ALL_PROXY(含小写形式)环境变量,git clone 与 curl/wget 自动生效。协议支持 http、https、socks5、socks5h、socks4、socks4a(socks5h/socks4a 由代理端解析 DNS)。

Platform(platforms.*):

字段类型必填默认值说明
pathstring是—工具配置目录(相对路径、绝对路径或 ~/...)。最少 1 字符
skillsstring否""skills 子目录名(相对于 path)。为空则跳过技能安装
agentsstring否""agents 配置文件名(相对于 path)。为空则跳过 agents 安装
sourcestring否"AGENTS.md"固定 .agents/ 目录下的源文件名。<path>/<agents> 符号链接至 .agents/<source>
agents_compatboolean否false是否兼容 .agents/ 资源。为 true 时直接读取规范目录,跳过 symlink 操作

Source(sources[]):

字段类型必填默认值说明
namestring否""唯一标识符。正则:^[a-zA-Z0-9_/-]+$(支持 user/repo 格式)。留空或无效时自动使用 url 作为名称
typestring否"git"源类型。枚举:"git"、"api"
urlstring是—源仓库 URL。须以 http:// 或 https:// 开头

CacheConfig(cache):

字段类型必填默认值说明
enabledboolean否false启用技能列表缓存。启用后 query 和 find 从本地缓存读取
ttlinteger否600缓存有效期(秒),默认 10 分钟。同时作用于主缓存(skills.json)和 URL 缓存(source_<md5>.json)。最小值:0

RegistryConfig(registry):

字段类型必填默认值说明
enabledboolean否true启用注册中心查询。启用后 query 和 find 会额外查询注册中心
urlstring否"https://xskill.gcli.cn/skills.json"注册中心地址。支持裸域名、目录路径或完整文件路径

registry.schema.json — 注册中心索引

用于注册中心 API 响应(skills.json),定义技能索引数据结构。

顶层字段:

字段类型必填说明
updated_atstring是ISO 8601 最后更新时间戳(如 2026-07-17T12:00:00.000Z)
sourcesSourceEntry[]是按源仓库分组的技能

SourceEntry(sources[]):

字段类型必填说明
sourcestring是源名称(如 org/repo)
urlstring否源仓库 URL
commit_hashstring否同步时源仓库的最新 commit hash(SHA)
skillsSkillEntry[]是该源下可用的技能

SkillEntry(sources[].skills[]):

字段类型必填默认值说明
namestring是—技能名称
pathstring是—SKILL.md 相对于仓库根目录的路径(如 skills/vue/SKILL.md 或根目录级别的 my-skill/SKILL.md)
descriptionstring否""技能描述
versionstring否""技能版本

编辑器集成

xskill config init 会自动在 settings.json 中添加 $schema 字段:

{
  "$schema": "https://xskill.gcli.cn/xskill.schema.json",
  ...
}

大多数 JSON 编辑器(VSCode、Neovim + jsonls 等)会自动从该 URL 加载 schema,提供校验和自动补全。

开发

构建

cargo build

测试

cargo test

项目结构

xskill/
├── Cargo.toml
├── README.md
├── schemas/                # JSON Schema 定义
│   ├── xskill.schema.json    # settings.json schema
│   └── registry.schema.json  # 注册中心索引 schema
├── docs/                   # 文档源(mdbook 输入)
│   ├── SPEC.md             # 需求规范
├── book/                   # mdbook 输出(生成)
│   ├── en/
│   └── zh/
├── crates/
│   └── generate-book/      # mdbook 内容生成器
├── src/
│   ├── main.rs             # CLI 入口(clap derive)
│   ├── config.rs           # 配置处理
│   ├── git.rs              # Git 操作(克隆、稀疏检出)
│   ├── lock.rs             # 锁文件管理
│   ├── skill_meta.rs       # SKILL.md frontmatter 解析
│   ├── cache.rs            # 缓存数据结构
│   ├── utils.rs            # 工具函数
│   └── commands/
│       ├── add.rs          # 安装技能
│       ├── link.rs         # 软链接已有技能到平台
│       ├── remove.rs       # 移除技能
│       ├── update.rs       # 从锁文件更新
│       ├── restore.rs      # 从锁文件恢复
│       ├── list.rs         # 列出已安装技能
│       ├── find.rs         # 交互式 TUI 技能查找器
│       ├── query.rs        # 查询远程/缓存技能
│       ├── sources.rs      # 管理源(CRUD)
│       ├── platforms.rs    # 列出平台
│       ├── cache.rs        # 缓存管理
│       ├── config.rs       # 配置管理
│       └── new.rs          # 创建技能项目

许可证

Apache License 2.0