1. 为什么我要折腾 Claude Code Skills 三件套
Claude Code 的 Skills 机制,简单说就是给 Claude Code 挂载一套「可复用的能力包」:每个 Skill 是一个文件夹,里面有SKILL.md说明书和可选的scripts/脚本,Claude Code 在对话里识别到匹配意图时就会去读这个说明书、按里面的步骤执行。它适合谁?适合那些每天在终端里跟 Claude Code 打交道、手里有一堆重复操作(下载视频、转文档、查 GitHub 项目)想沉淀成固定动作的人。
我自己的痛点很具体:Skills 目录越堆越乱,同一个功能写了三份说明书,有的还停留在半年前的接口上。修修补补能用,但每次让 Claude Code 去挑该用哪个 Skill,它经常挑错。看到「三件套」这个说法——github-to-skills(把 GitHub 项目转成 Skill)、skill-manager(统一管理已装 Skill)、skill-evolution-manager(把使用经验外挂到evolution.json)——我第一反应是:这不就是给我这种「Skill 臃肿症」准备的。
但真上手才发现,官方文档只讲了「是什么」,没讲「怎么装、怎么配、报错怎么办」。我花了一整天,踩了三个坑,最后跑通了一条从安装到端到端验证的链路。这篇就把可复制的settings.json、config.toml骨架、skill-manager的安装验证命令,以及用yt-dlp做端到端验证的完整动作写清楚,你照着做能少走弯路。
2. 前置准备:TaoToken 接入与 Claude Code 环境
Claude Code 要跑起来,得先有一个能稳定调用的模型入口。我用的是 TaoToken 的 API 通道,官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,API 地址是 https://taotoken.net/api 。它的作用是把 Claude 系列模型的请求统一到一个兼容 Anthropic 协议的端点上,Claude Code 只要把ANTHROPIC_BASE_URL指过去就能用,不用改客户端代码。
先拿 Key:进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面新建一个密钥 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,复制出来先存到环境变量里,别直接写进会提交到 git 的文件。
# 写入 shell 配置,macOS/Linux 用 ~/.zshrc 或 ~/.bashrc export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥" source ~/.zshrcWindows 用 PowerShell 的话:
$env:ANTHROPIC_BASE_URL = "https://taotoken.net/api" $env:ANTHROPIC_API_KEY = "sk-你的TaoToken密钥"验证环境变量是否生效:
echo $ANTHROPIC_BASE_URL # 期望输出:https://taotoken.net/api注意:
ANTHROPIC_BASE_URL结尾不要带/v1,Claude Code 会自己拼路径,多写一层会 404。这一步踩过的人不少。
环境变量通了之后,Claude Code 本体按官方方式装好(npm install -g @anthropic-ai/claude-code或对应平台的安装包),在项目目录里执行claude能进交互界面就算就绪。接下来才是 Skills 三件套的安装。
3. 可复制配置:settings.json 与 config.toml 骨架
Claude Code 的配置分两层:一层是全局的~/.claude/settings.json,管模型入口、权限、环境变量;另一层是 Skill 自己的config.toml,管这个 Skill 的行为参数。先把全局骨架贴出来,你可以直接抄。
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥" }, "permissions": { "allow": [ "Bash(yt-dlp:*)", "Bash(git clone:*)", "Read(~/.claude/skills/**)" ], "deny": [ "Bash(rm -rf:*)" ] }, "skills": { "directory": "~/.claude/skills", "autoLoad": true } }几个关键点:permissions.allow里放的是你允许 Claude Code 自动执行的命令前缀,Bash(yt-dlp:*)表示凡是yt-dlp开头的命令不用每次确认;skills.directory指向你的 Skill 根目录,autoLoad打开后启动时自动扫描。deny里我习惯把rm -rf挡掉,防止误删。
Skill 级别的config.toml骨架,以skill-manager为例:
[skill] name = "skill-manager" version = "0.1.0" description = "列出、检查、更新本地已安装的 Claude Code Skills" [trigger] keywords = ["列出所有 Skills", "检查更新", "manage skills"] language = "zh" [behavior] auto_check_update = true evolution_file = "evolution.json" max_scan_depth = 3 [paths] skills_root = "~/.claude/skills" cache_dir = "~/.claude/.cache/skill-manager"trigger.keywords是触发词列表,Claude Code 匹配到这些词才会激活这个 Skill——这也是后面第一个坑的根源,触发词写得太随意就会「有的说法能行、有的不行」。evolution_file指向经验文件,skill-evolution-manager会把每次使用的经验追加进去。
4. 安装 skill-manager 与三件套并验证
三件套的仓库可以直接克隆到本地,然后把三个 Skill 文件夹复制进 Skills 目录。命令如下:
# 1. 克隆三件套仓库(换成你实际拿到的仓库地址) git clone https://github.com/<owner>/claude-skills-trio.git /tmp/skills-trio # 2. 确认三个 Skill 都在 ls /tmp/skills-trio # 期望看到:github-to-skills skill-manager skill-evolution-manager # 3. 复制到 Claude Code 的 Skills 目录 mkdir -p ~/.claude/skills cp -r /tmp/skills-trio/github-to-skills ~/.claude/skills/ cp -r /tmp/skills-trio/skill-manager ~/.claude/skills/ cp -r /tmp/skills-trio/skill-evolution-manager ~/.claude/skills/ # 4. 验证目录结构 find ~/.claude/skills -maxdepth 2 -name "SKILL.md"第 4 步应该输出三行,分别对应三个 Skill 的SKILL.md。如果少了一行,说明复制时漏了文件夹,回去补。
装完之后进 Claude Code 交互界面,输入「列出所有 Skills」,正常会返回一张表,包含 Skill 名称、类型、描述。这里有个细节:从 GitHub 项目生成的 Skill,类型会标成GitHub,手动写的标成Standard,只有GitHub类型的才能检查上游更新。这个设计是合理的,但第一次看到会懵。
skill-manager的验证命令我习惯用一条组合命令确认它真的被加载:
# 在 Claude Code 里执行 /manage list如果返回「未找到 skill-manager」,八成是SKILL.md里的name字段和文件夹名不一致,改一致即可。
5. 用 yt-dlp 做端到端验证
光装好不算通,得跑一个真实场景。我选yt-dlp,因为它是典型的命令行工具,适合打包成 Skill,而且我确实经常下载视频。
第一步,让github-to-skills把项目转成 Skill。在 Claude Code 里说:
把这个项目打包成 Skill:https://github.com/yt-dlp/yt-dlpClaude Code 会去拉取仓库信息、生成文件夹、写SKILL.md。生成完的结构应该是:
yt-dlp/ ├── SKILL.md └── scripts/ └── wrapper.pySKILL.md头部会有类似这样的元信息:
github_url: https://github.com/yt-dlp/yt-dlp github_hash: 0e4d1e9de6250a80453d46f94b9fade5f10197a0 version: 0.1.0github_hash是打包时的 commit 哈希,后面检查更新就是拿它跟上游最新 commit 比。
第二步,实际调用验证。在 Claude Code 里说「用 yt-dlp 下载这个视频:<视频链接>」,它应该会走wrapper.py去调yt-dlp。如果报command not found,说明系统里没装yt-dlp本体,先pip install yt-dlp或brew install yt-dlp。
第三步,检查更新。说「检查所有 Skills 的更新」,skill-manager会逐个比对github_hash,返回哪些过期了。这一步是自动的,但真正更新需要你人工判断——这就是第三个坑,后面细说。
端到端跑通的标志:视频下载成功、skill-manager能列出yt-dlp且类型为GitHub、检查更新能返回结果。三个都满足,链路就通了。
6. 三个坑的排查思路
坑一:触发词太多记不住。我试过「检查更新」「看看有没有需要更新的」「manage my skills」,有的能触发有的不能。根因是每个 Skill 的description和trigger.keywords写得不一样,有的英文有的中文,匹配是模糊的。排查方法:打开对应 Skill 的SKILL.md,看trigger.keywords到底列了哪些词,照着说。我的做法是建一张映射表贴在便签上——「查看 Skills」对应「列出所有 Skills」,「添加项目」对应「把这个项目打包成 Skill」,「检查更新」对应「检查所有 Skills 的更新」。记不住就查表,别硬背。
坑二:不是所有 GitHub 项目都能打包。适合的是命令行工具、Python 库、有 API 的服务;不适合的是纯 GUI 应用、需要复杂环境的、文档不全的。判断方法:看项目 README 里有没有清晰的 CLI 用法或 API 说明,有就能打包,没有就别浪费时间。我试过一个叫awesome-list的列表合集,根本没法打包,因为它没有可执行入口。
坑三:更新不是全自动。「自动更新」这个说法有误导性。检查更新是自动的,但更新动作需要人工判断:先去 GitHub 看新版本改了什么,再决定哪些功能保留、哪些新功能加进描述、哪些旧功能废弃。比如yt-dlp新版本支持了新网站,你得手动更新SKILL.md里的说明。这是「AI 辅助」不是「AI 自动」。接受这一点,心态就顺了。
7. 长期编码与 Agent 场景的接入建议
如果你不只是偶尔用一下,而是想把 Claude Code 当日常编码和 Agent 主力,建议走 Coding Plan 通道 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,它在长会话和连续工具调用上的配额更宽松,适合 Skills 这种需要反复读文件、跑脚本的场景。模型对话调试可以用 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 先确认模型可用性,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,Claude Code 专用说明在 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite 。
最后说个我自己的习惯:Skills 目录别贪多,只留真正常用的三五个,其余等真需要再打包。evolution.json定期清一次,把过时的经验删掉,不然它会越滚越大,反而拖慢 Claude Code 的匹配速度。工具是拿来省事的,别让它变成新的负担。