☰
Claude Code Skills 使用技巧:打造高效的自定义命令
2026/10/1 7:09:05 网站建设 项目流程

1. 为什么你的 Claude Code 总在重复劳动

用 Claude Code 写代码的人,大概都经历过这个阶段:每次让它做代码审查,都要重新打一遍「请检查这段代码的风格、潜在 bug、安全问题、性能优化点」;每次提交前让它生成 commit message,又要把 Conventional Commits 的规则复述一遍。一天下来,光是重复描述需求就消耗掉不少时间。

Claude Code Skills 就是来解决这个问题的。简单说,Skills 是 Claude Code 的自定义命令扩展机制,它允许你把一套固定的任务流程、提示词、执行边界封装成一个文件,之后只需要输入一个斜杠命令,比如/review、/commit,Claude Code 就会按照你预设的逻辑去执行。它适合谁?适合所有日常用 Claude Code 做开发、并且发现自己反复在描述同一类需求的人——无论是个人开发者,还是想把团队规范沉淀成共享指令的技术负责人。

我试过在没有 Skills 的情况下,靠记忆和复制粘贴来维持一套「代码审查模板」,结果就是每次的检查维度都不太一样,有时候漏了安全项,有时候忘了看性能。后来把流程固化进 Skills,才算真正稳定下来。这篇文章会从零开始,带你搭出一套可复用的自定义命令工作流:目录结构怎么放、命令定义模板怎么写、触发规则怎么设、在终端里怎么验证命令真的生效,以及踩过的坑怎么排查。全程给可复制的配置,你跟着做就能跑起来。

需要先说明一点:Claude Code 本身是 Anthropic 推出的命令行 AI 编程助手,而 Skills 是它内置的扩展能力,不需要额外装插件。你只要有一个能正常调用 Claude Code 的环境,就能开始配置。如果你在接入模型服务时需要统一管理 API Key 和模型入口,可以顺带了解一下 TaoToken 这类聚合接入方式,后面第二节会讲怎么把它和 Claude Code 的环境变量配合起来用。

2. TaoToken 前置准备:让 Claude Code 稳定拿到模型能力

在写 Skills 之前,得先保证 Claude Code 能正常跑起来。Claude Code 默认走 Anthropic 的接口,但很多开发者的实际环境里,需要把请求指向一个统一的接入层,方便管理 Key、切换模型、做用量统计。TaoToken 就是这样一个入口,它提供兼容的 API 地址,你可以在官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解整体能力,API 端点则是 https://taotoken.net/api(这个地址不加 UTM 参数,直接用于配置)。

配置的核心思路是:把 Claude Code 的 Base URL 指向 TaoToken 的 API 地址,把 API Key 换成你在 TaoToken 控制台生成的 Key,然后指定要用的 Model ID。这三件套——Base URL、Key、Model ID——是任何接入场景都绕不开的。下面给出具体的环境变量写法,你可以直接复制到 shell 配置文件里。

# 写入 ~/.bashrc 或 ~/.zshrc export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥" export ANTHROPIC_MODEL="claude-sonnet-4-20250514"

保存后执行source ~/.zshrc(或对应你的 shell 文件)让变量生效。这里要注意,ANTHROPIC_BASE_URL后面不要带斜杠,也不要拼/v1,Claude Code 会自己处理路径拼接。Key 的获取路径是登录 TaoToken 后进入控制台,在 API Keys 页面新建一个密钥,复制出来即可。如果你还没生成 Key,可以先去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 创建。

Model ID 这一项,建议填你实际要用的模型标识。不同模型的 ID 不一样,填错了会直接报模型不存在。你可以在模型对话页面先验证一下模型是否可用,地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite,在里面选一个模型发一句话,确认能返回结果,再把对应的 Model ID 抄到环境变量里。

配置完成后,用一条最简单的命令验证 Claude Code 能不能通:

claude -p "回复 ok"

如果终端返回了ok或类似的正常响应,说明接入层已经通了。如果报 401,多半是 Key 写错或没生效;如果报连接失败,检查 Base URL 是否拼错。这一步过了,再往下配 Skills 才有意义,否则你会分不清是 Skills 配置问题还是接入问题。

对于需要长期跑编码任务、或者想让多个 Agent 共享同一套模型入口的场景,可以考虑用 Coding Plan 来统一管理额度与调用,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite。它的好处是你不用在每个项目里单独配 Key,团队协作时也更容易对齐。

3. 可复制配置:Skills 目录结构与命令定义模板

这一节是全文的核心,直接给你能落地的目录结构和文件模板。Claude Code 的 Skills 默认放在项目根目录下的.claude/skills/里,每个技能一个子目录,子目录里放一个skill.md作为主定义文件。整体结构长这样:

项目根目录/ └── .claude/ └── skills/ ├── review/ │ └── skill.md ├── commit/ │ └── skill.md └── docgen/ └── skill.md

每个skill.md用 Markdown 写,但它的内容会被 Claude Code 当作指令解析,所以结构要清晰。一个可用的模板包含四块:描述、触发条件、执行步骤、注意事项。下面是一个代码审查技能的完整skill.md,你可以直接复制到.claude/skills/review/skill.md:

# Code Review Skill ## 描述 对用户指定的代码文件或目录进行全面审查,输出结构化的问题清单。 ## 触发条件 当用户输入 /review 时触发。如果用户附带路径参数,则审查该路径;否则审查当前工作目录下的变更文件。 ## 执行步骤 1. 读取用户指定的文件,若未指定则用 git diff 获取本次变更文件列表 2. 按以下维度逐项检查: - 代码风格与命名规范 - 潜在 bug 与边界条件 - 安全问题(注入、越权、敏感信息硬编码) - 性能优化点 - 可维护性与重复代码 3. 每个问题给出文件路径、行号、问题描述、修改建议 4. 最后输出一个按严重程度排序的汇总表 ## 注意事项 - 只读取和分析,不直接修改文件 - 如果文件不存在,提示用户并终止 - 不要对未变更的代码提出重构建议

这里有几个关键点。第一,## 触发条件里的/review就是你在终端里要输入的命令名,它和目录名review保持一致最不容易乱。第二,## 执行步骤要写得像给一个新同事的交代,越具体越稳定,Claude Code 会按这个顺序执行。第三,## 注意事项是执行边界,明确告诉它什么不该做,能大幅减少误操作。

再给一个 Git 提交助手的模板,放到.claude/skills/commit/skill.md:

# Commit Skill ## 描述 分析当前暂存区的代码变更,生成符合 Conventional Commits 规范的提交信息。 ## 触发条件 当用户输入 /commit 时触发。 ## 执行步骤 1. 执行 git diff --staged 获取暂存区变更 2. 判断变更类型:feat / fix / docs / style / refactor / test / chore 3. 提取变更的核心内容,生成一行不超过 72 字符的标题 4. 如有必要,补充正文说明变更原因和影响范围 5. 输出完整的 commit message,等待用户确认后再执行 git commit ## 注意事项 - 暂存区为空时提示用户先 git add - 不要自动执行 git commit,必须等用户确认 - 不要修改任何代码文件

如果你用的是支持 JSON 配置的工具链,比如某些编辑器插件或 MCP 客户端,Skills 的元信息也可以用 JSON 表达。下面是一个settings.json片段示例,用于声明技能目录和默认模型:

{ "skills": { "directory": ".claude/skills", "autoLoad": true }, "model": "claude-sonnet-4-20250514", "baseUrl": "https://taotoken.net/api" }

注意baseUrl和model这两项要和你在第二节里配的环境变量保持一致,否则会出现「Skills 加载了但调用失败」的情况。路径.claude/skills是相对项目根目录的,如果你在子目录里启动 Claude Code,它可能找不到技能,所以建议始终在项目根目录启动。

模板里的变量占位符也值得说一下。你可以在skill.md里用{{args}}接收用户输入的参数,用{{cwd}}表示当前工作目录。比如在review/skill.md里写「审查路径:{{args}}」,用户输入/review src/utils时,{{args}}就会被替换成src/utils。这个机制让同一个技能能处理不同目标,不用为每个目录单独建技能。

4. 验证请求:在终端里确认命令真的生效

配置写完不代表生效,必须实际跑一遍。验证分三步:确认技能被加载、确认命令能触发、确认执行结果符合预期。

第一步,进入项目根目录,启动 Claude Code:

cd /path/to/your/project claude

启动后,先输入一个斜杠看看命令列表里有没有你新建的技能。不同版本的 Claude Code 展示方式略有差异,有的会在你输入/时弹出补全列表,你能看到review、commit、docgen这些名字。如果列表里没有,说明技能没被加载,先检查目录名和文件位置。

第二步,直接触发命令。假设你要审查src/utils/format.js,输入:

/review src/utils/format.js

正常情况下,Claude Code 会读取这个文件,然后按skill.md里定义的维度输出问题清单。你会看到类似这样的返回结构:

## 审查结果:src/utils/format.js ### 严重 - 第 23 行:字符串拼接未做转义,存在注入风险 建议:使用参数化方式或对输入做校验 ### 一般 - 第 45 行:函数超过 80 行,建议拆分 建议:按职责拆成 formatDate 和 formatNumber ### 汇总 | 严重程度 | 数量 | |---------|------| | 严重 | 1 | | 一般 | 1 |

如果返回的是这种结构化内容,说明技能生效了。如果它只是泛泛地回了几句「这段代码看起来不错」,那多半是skill.md里的执行步骤写得太模糊,Claude Code 没有按你的意图走。

第三步,验证带参数的场景。输入/review不带路径,看它是否按skill.md里写的「用 git diff 获取变更文件」来执行。你可以先改一个文件但不提交,然后触发命令,观察它是否只审查了变更部分。这一步能验证{{args}}和默认逻辑是否都正常。

对于 commit 技能,验证方式类似。先git add一个文件,然后输入/commit,看它生成的 message 是否符合 Conventional Commits 格式,比如feat: 新增日期格式化工具函数。注意它应该停下来等你确认,而不是直接提交——如果它自动提交了,说明## 注意事项里的约束没起作用,需要把「不要自动执行 git commit」写得更靠前、更明确。

验证过程中,建议开两个终端:一个跑 Claude Code,一个用来改文件、看 git 状态。这样你能实时对照它的行为和你预期的差异。如果某个技能反复不按预期走,最有效的办法是把skill.md里的执行步骤拆得更细,每一步都写成可观察的动作,比如「先执行 git diff --staged」而不是「分析变更」。

5. 常见报错排查:401、local proxy failed 与 OAuth 问题

配 Skills 的过程中,报错基本集中在接入层和加载层。下面按真实遇到的错误逐条排查。

401 Unauthorized。这是最常见的,通常出现在你触发技能后 Claude Code 去调用模型时。原因有三个:Key 没配、Key 配错、Key 没生效。先确认环境变量:

echo $ANTHROPIC_API_KEY echo $ANTHROPIC_BASE_URL

如果输出为空,说明变量没写进当前 shell,检查你改的是不是当前 shell 对应的配置文件(bash 是~/.bashrc,zsh 是~/.zshrc)。如果变量有值但还是 401,去 TaoToken 控制台确认这个 Key 是否被禁用或额度耗尽。还有一种情况是 Key 复制时带了空格或换行,重新复制一次。

local proxy failed。这个报错说明 Claude Code 尝试走本地代理但没连上。检查你的环境里有没有设置HTTP_PROXY或HTTPS_PROXY变量,如果有,先临时取消:

unset HTTP_PROXY unset HTTPS_PROXY

然后重启 Claude Code 再试。如果你确实需要通过统一入口访问,确保ANTHROPIC_BASE_URL指向的是https://taotoken.net/api,而不是本地地址。

reading choices 相关报错。这类错误通常出现在返回体解析阶段,提示读取choices字段失败。原因是接口返回的格式和 Claude Code 预期的格式不一致。排查方向:确认 Base URL 没有多拼/v1或/chat/completions,Claude Code 会自己补路径;确认 Model ID 填的是真实存在的模型,填错模型时有些接入层会返回错误结构,导致解析失败。你可以先用模型对话页面发一条消息,确认模型可用,再把同样的 Model ID 填进环境变量。

OAuth 相关报错。如果你之前用账号登录方式配置过 Claude Code,可能会残留 OAuth 凭证,和现在的 API Key 方式冲突。解决办法是清理旧的凭证缓存,通常在~/.claude/或~/.config/claude/下,找到凭证文件后移除,然后重新用 API Key 方式启动。清理前建议备份,避免误删配置。

技能不加载。命令列表里看不到你的技能,先确认三点:目录是不是.claude/skills/,子目录名和命令名是否一致,skill.md文件名是否拼对(不是skills.md也不是SKILL.md,大小写敏感的环境下要完全匹配)。另外,如果你在子目录启动 Claude Code,它可能只扫描当前目录下的.claude,所以务必在项目根目录启动。

技能加载了但行为不对。这不算报错,但很常见。表现是你输入/review,它却去做了别的事。根因是skill.md里的触发条件和执行步骤有歧义。把触发条件写成明确的「当用户输入 /review 时触发」,把执行步骤写成有序列表,每一步都是具体动作,能解决大部分问题。

排查时有个通用技巧:先用最简单的技能验证链路。建一个.claude/skills/ping/skill.md,内容只有「当用户输入 /ping 时,回复 pong」。如果这个能跑通,说明接入和加载都没问题,再去排查复杂技能的逻辑。如果这个都跑不通,问题一定在接入层,回到第二节检查三件套。

6. 把重复任务沉淀成团队共享指令

Skills 真正的价值不在于省几次打字,而在于把「怎么做代码审查」「怎么写提交信息」这类隐性规范变成显性文件。当这些文件进了 Git 仓库,团队里每个人拉下来就有一套统一的指令,新人不用问「我们 commit 格式是什么」,直接/commit就行。

落地时有几个实用建议。第一,技能要小而专,一个技能只做一件事,review就只管审查,不要让它顺便改代码。第二,skill.md里多写使用示例,比如在描述里加一句「用法:/review src/main.js」,用户一看就懂。第三,定期根据实际使用反馈迭代,发现某个检查维度总是漏,就把它写进执行步骤里。

如果你想让多个项目共享同一套技能,可以把.claude/skills/做成一个独立的 Git 仓库,然后在各项目里用软链接或子模块引入。这样改一次,所有项目同步更新。对于需要跨团队协作、统一模型调用入口的场景,可以结合 Coding Plan 来管理调用额度,避免每个人各自配 Key 导致混乱。

最后留一个可以直接开始的清单:在项目根目录建.claude/skills/review/skill.md,把第三节的模板复制进去,启动 Claude Code,输入/review加一个文件路径,看它是否按你定义的维度输出。跑通这一个,剩下的commit、docgen就是复制结构、改内容的事。遇到报错就回到第五节对照排查,链路问题优先查三件套,逻辑问题优先改skill.md的执行步骤。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询