
skill-creator 是「生成 Skill 的 Skill」。你在 Claude Code 里说一句「生成一个 pdf-editor 技能」它本该先写 SKILL.md 的 YAML frontmatter再调 init_skill.py 建出 scripts、references、assets最后用 package_skill.py 打包成可安装的产物。可真正卡住人的往往不是模板写得好不好而是跑这个流程的 Claude 实例根本连不上模型Key 是旧的、Base URL 多带了一截路径、模型 ID 随手抄了个不存在的。所以动 SKILL.md 之前先把通道理顺打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建一把 API Key然后把 Claude Code 或 Codex 的 Base URL 填成 https://taotoken.net/api再回头跑 skill-creator。下面按原文的生成顺序走frontmatter → init_skill.py → package_skill.py中间把原文没单独讲、但缺了就必挂的模型通道准备补在初始化之前。1. skill-creator 触发不了、请求失败先怀疑跑它的模型通道1.1 「生成一个 pdf-editor 技能」失败时的两种表现在 Claude Code 里输入「生成一个 pdf-editor 技能」翻车方式通常有两种。安静型Claude 压根没进 skill-creator 的流程直接凭手感写了一份 SKILL.md 给你。内容看着也还行但没有目录规划不提 init_skill.py更不会去建 scripts 和 assets。你以为技能生成了装进 skills 目录后却发现它只是一段说明文字触发不了任何脚本。吵闹型skill-creator 确实触发了开始读模板、开始追问技能用途然后卡在某一次请求上终端里出现 401、404 或者干脆超时重试。两次失败之间你可能只改过一行环境变量。这两种表现看着不像同一回事根子却常常是同一个跑 skill-creator 的那个 Claude 实例用的是哪把 Key、把请求发去了哪个地址。skill-creator 本质是个普通 Skill它靠模型来回追问、来回写文件模型通道断了它就只能装死。1.2 为什么问题出在 Key 和 Base URL而不是模板写得对不对skill-creator 的工作方式是多轮对话加本地脚本。它先跟模型确认技能名、用途、触发场景生成 frontmatter 草稿再调用 init_skill.py 建目录最后调 package_skill.py 打包。模型请求出现在开头、中间、收尾好几处任何一处通道不通流程都会断在那一处。所以排查顺序应该反过来。先确认通道是通的再去看 SKILL.md 的字段写得对不对。很多人倒过来做花一小时改 description 的措辞最后发现是 Base URL 末尾多写了/v1请求全打到不存在的路径上返回 404。判断方法很简单在 Claude Code 里随便问一句和技能无关的话。如果这句也报错那就是通道问题跟 skill-creator 一点关系都没有。1.3 补上原文漏掉的一步先拿 Key、再填 Base URL原文的步骤三「初始化技能」之前缺的正是一段模型通道准备。补起来只有两件事。第一件去 TaoToken 注册账号并创建 API Key。Key 只在创建时完整展示一次复制下来存好下面所有配置里统一写成占位符YOUR_API_KEY你自己的那把替换进去就行。第二件把运行 skill-creator 的工具指向统一通道。Claude Code 和 Codex 的写法不一样但地址只有一个https://taotoken.net/api。这个地址末尾不要加/v1也不要带任何查询参数——它是填进配置文件里的接口地址和浏览器里打开的官网不是一回事。TaoToken 在这整套流程里的角色很克制给一把 Key、给一个 Base URL。SKILL.md 长什么样、scripts 里放什么脚本仍然是 skill-creator 和你的模型对话决定的。2. Claude Code 与 Codex 侧把 Base URL 指向 TaoToken 的接口地址2.1 Claude Code~/.claude/settings.json 里的 env 三个变量Claude Code 读的是~/.claude/settings.json。没有这个文件就新建一个把下面三段填进env里{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }三个变量的分工要分清楚。ANTHROPIC_BASE_URL决定请求发去哪填https://taotoken.net/apiANTHROPIC_AUTH_TOKEN放你从 TaoToken 控制台 创建的那把 KeyANTHROPIC_MODEL放模型 ID具体填哪个以官网模型广场当时的列表为准别照着半年前的截图抄。改完保存重启 Claude Code 会话让新配置生效。2.2 Codex~/.codex/config.toml 里改的是 model_provider 和 base_urlCodex 不吃ANTHROPIC_*这套变量把 Claude 的环境变量直接套过去是最常见的错误之一。它读的是~/.codex/config.tomlmodel YOUR_MODEL_ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEYmodel_provider指向下面那张表的名字两边要一致。base_url同样是https://taotoken.net/api没有/v1。env_key是 Codex 去环境变量里找 Key 的名字所以在 shell 里还要导一次export TAOTOKEN_API_KEYYOUR_API_KEYKey 一样从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建写进配置时用占位符替换别把真 Key 提交进 Git。2.3 模型 ID 与「末尾不要 /v1」这两件事这两个坑几乎每篇配置文都会提但仍然是最常踩的。模型 ID以 TaoToken 模型广场 当时的列表为准。基于模型广场的列表选别凭记忆写。ID 写错的表现通常是请求被拒或者返回一个奇怪的错误而不是「找不到模型」这种直白提示。Base URL填https://taotoken.net/api末尾不要带/v1。有些工具自己会补路径你多写一段最终发出去的地址就多一段结果就是 404。同样这个地址不要带任何utm参数那是给浏览器链接用的写进配置文件只会让请求失败。3. SKILL.md 的 YAML frontmattername 与 description 怎么定3.1 name 的命名约束以及它和目录名的关系skill-creator 生成 SKILL.md 时第一件事是写 frontmatter。name建议用小写加连字符比如pdf-editor不要用空格、下划线或者大写字母混排。这个名字会和技能目录名保持一致后面 init_skill.py 建的目录也叫这个名字。名字起得太泛是另一个问题。叫tool、helper这种模型完全判断不出什么时候该用它。名字最好直接指向动作对象pdf-editor、sql-formatter、changelog-writer这类都比较合适。3.2 description 要同时交代「做什么」和「什么时候用」frontmatter 里真正决定触发率的是description。它至少要回答两个问题这个技能能做什么用户在什么话术下应该用上它。只写「编辑 PDF 文件」太干模型找不到触发时机。把典型说法也写进去--- name: pdf-editor description: 对 PDF 做页面级编辑包括旋转指定页、拆分单页文件、合并多个 PDF。当用户说「旋转 PDF 的某一页」「把这份 PDF 拆成单页」「把几个 PDF 合成一个」时使用本技能。 ---触发词不是越多越好而是越贴近用户真实说法越好。写完可以在 Claude Code 里换个说法试试看还能不能触发。3.3 用 pdf-editor 跑一遍 frontmatter 草稿这一步的最佳做法是让 skill-creator 自己生成草稿你再改。直接在 Claude Code 里说清楚三件事技能名、它能做什么、什么时候触发。skill-creator 会反问你几轮然后给出 frontmatter。拿到草稿后重点看两处name是否符合命名约束description里有没有「做什么 什么时候用」。如果它给的名字带了空格手动改成连字符再往下走——目录名一旦建错后面打包时会很别扭。4. init_skill.py 与 rotate_pdf.py把 scripts / references / assets 建起来4.1 跑 init_skill.py 之前先确认目录落点初始化脚本负责建骨架。它通常长这样python ~/.claude/skills/skill-creator/scripts/init_skill.py pdf-editor --path ~/.claude/skills--path决定技能落在哪个 skills 目录。Claude Code 默认读~/.claude/skills如果你用的是项目级技能目录就换成项目里的路径。跑之前先确认这个目录存在、有写权限。跑完之后目录里会出现pdf-editor/SKILL.md、scripts/、references/、assets/。SKILL.md 是入口另外三个是给内容用的。4.2 scripts 放可执行脚本references 放长文档assets 放模板三个目录的分工要拎清楚否则技能会变得又长又难维护。scripts/放真正干活的脚本比如旋转 PDF 的那段代码。references/放长文档比如 PDF 页面结构的说明、字段对照表。assets/放模板文件、示例输入这类不执行的资源。拿旋转单页举例scripts/rotate_pdf.py可以写成这样from pypdf import PdfReader, PdfWriter def rotate_page(src_path, page_index, degrees, dst_path): reader PdfReader(src_path) writer PdfWriter() for i, page in enumerate(reader.pages): if i page_index: page.rotate(degrees) writer.add_page(page) with open(dst_path, wb) as f: writer.write(f) if __name__ __main__: import sys rotate_page(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]), sys.argv[4])这段脚本由读者在本地运行skill-creator 只负责生成和解释它。跑之前记得装上pypdf。脚本里别塞模型调用模型通道的事已经在第 2 节配完了脚本只做确定性的事。4.3 初始化阶段的报错对照这一步的报错基本能归成三类。ModuleNotFoundError: No module named pypdf脚本依赖没装本地pip install pypdf解决跟通道无关。请求返回 401Key 没带上或者写错了。检查ANTHROPIC_AUTH_TOKEN和你创建的那把 Key 是否一致注意前后别带空格。请求返回 404Base URL 多半写成了https://taotoken.net/api/v1。改回https://taotoken.net/api再试。还有一种不报错但很烦的情况模型 ID 不存在请求被拒skill-creator 沉默几秒后继续瞎写。这类就到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的模型广场核对一下 ID再回填。5. package_skill.py 打包与回归验证5.1 打包前自检SKILL.md、scripts 与依赖是否齐了打包命令很直接python ~/.claude/skills/skill-creator/scripts/package_skill.py ~/.claude/skills/pdf-editor跑之前先自检三件事。SKILL.md 的 frontmatter 是否完整、name与目录名是否一致scripts/里的脚本能不能在本地单独跑通references/和assets/里的文件是否被 SKILL.md 正文引用到——没被引用的文件模型很可能永远不去读。打包产物一般是个压缩包或.skill文件具体后缀看 skill-creator 当前版本以本地跑出来的实际输出为准。5.2 回到 Claude Code 再触发一次验证技能真的可用打包完别急着关终端回到 Claude Code 里再触发一次。输入「生成一个 pdf-editor 技能」观察它是否按流程产出 SKILL.md 与scripts/rotate_pdf.py。如果这次流程走得比以前顺说明通道通了如果仍然在开头就断回到第 2 节检查三个变量。判断依据是同样的提示skill-creator 现在会不会主动追问用途、会不会去调 init_skill.py。5.3 去控制台对一下这次调用有没有记上账配置改完、技能跑通之后顺手做一次对账。先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和地址没填反长期写代码的话看一眼 Coding Plan 的额度是否够用需要再建 Key 就去 控制台 API Keys。Claude Code 侧的环境变量对照接入文档 里写得更细配不通用哪条变量对不上时去那里翻一眼。整套流程里最容易反复出问题的还是那两处Key 有没有带上、Base URL 末尾有没有多一截。skill-creator 只是把它们的问题暴露得特别明显——因为它是「生成 Skill 的 Skill」通道一断它连第一句追问都发不出来。