ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

claude code 添加 skills 自动生成 git commit 信息:TaoToken 统一 Key 接入实操

claude code 添加 skills 自动生成 git commit 信息:TaoToken 统一 Key 接入实操 1. 为什么要在 Claude Code 里加一个 git commit 助手写代码的时候最烦的往往不是改逻辑而是改完之后对着git diff发呆这次到底改了啥、该写fix还是refactor、scope 填哪个模块。尤其是 Claude Code 帮你一口气改了五六个文件之后你回头一看 diff脑子里只剩一句“它刚才动了什么”。我试过让 Claude Code 直接帮我写 commit message结果它有时候会顺手把git commit也执行了提交信息还带着一堆“This commit introduces...”的废话。后来我换了个思路不让模型碰提交动作只让它读 staged diff然后吐出一段规范的 Conventional Commit 文本我自己复制粘贴执行。这样既保留了 AI 的归纳能力又把最终控制权留在自己手里。这就是git-commit-helper这个 skill 要解决的问题。它本质上是一个放在.claude/skills/目录下的SKILL.md通过allowed-tools限定 Claude Code 只能执行git status和git diff这类只读命令然后按照你定义的格式输出 commit message。整个过程里git commit、git push、git add全部被 deny 掉模型想动手也动不了。适合谁用三类人最合适一是团队里对 commit 规范有要求、但自己懒得背 Conventional Commit 格式的二是用 Claude Code 做重构、一次改十几个文件、需要快速归纳改动类型的三是想把“AI 改代码”和“人工提交”这两个环节隔离开、避免模型误操作仓库的。如果你只是偶尔改一两个文件手动写 commit 也不费事那这个 skill 的收益没那么明显。接下来我会从 TaoToken 的统一 Key 接入开始把模型通道配好再给出完整的 skill 配置片段、权限设置最后跑一次真实的 commit 生成验证。整个流程你照着复制就能跑通。2. TaoToken 统一 Key 接入给 Claude Code 配一条稳定的模型通道Claude Code 本身是一个 CLI 工具它需要调用模型 API 才能工作。默认情况下它走的是 Anthropic 官方通道但如果你同时用多个模型、或者想让 Claude Code 和 Cline、Codex 这些工具共用一套 Key就会遇到“每个工具配一遍、Key 散落各处”的问题。TaoToken 在这里的角色就是一个统一的 API 入口你拿一个 Key配一个 Base URLClaude Code、Cline、Codex 都能指向同一个地址。先说清楚它是什么TaoToken 提供的是兼容 Anthropic 和 OpenAI 风格的 API 通道你可以在它的控制台里创建 API Key然后把 Claude Code 的ANTHROPIC_BASE_URL指向https://taotoken.net/api再用ANTHROPIC_AUTH_TOKEN填上你的 Key。这样 Claude Code 发出的请求就会经过 TaoToken 转发到对应模型你不需要在每个工具里单独维护多套凭证。适合谁如果你只用 Claude Code 一个工具且官方通道够用那不一定要换。但如果你同时跑 Claude Code 做编码、Cline 做 MCP 调用、Codex 做补全那统一 Key 能省掉很多“这个 Key 过期了、那个额度用完了”的排查时间。另外TaoToken 的模型对话页面可以单独验证某个模型是否可用排障时很有用。操作路径分三步。第一步打开控制台创建 Key访问https://taotoken.net/console在 API Keys 页面点创建复制出来的 Key 形如sk-xxxxxxxx。第二步如果你要用 Claude Code 的 Coding Plan 模式可以在https://taotoken.net/coding-plan查看套餐说明确认额度够用。第三步把 Key 写进 Claude Code 的环境变量或配置文件。这里有个细节Claude Code 读取的是ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN这两个环境变量。你可以在 shell 的~/.zshrc或~/.bashrc里 export也可以写进项目的.claude/settings.json的env字段。我推荐后者因为项目级配置跟着仓库走换机器不用重新配。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key } }注意 Base URL 后面不要加/v1Claude Code 会自己拼路径。如果你填成https://taotoken.net/api/v1请求会变成/api/v1/v1/messages直接 404。这个坑我踩过排查了半天才发现是多写了一层。配好之后你可以先用模型对话页面验证 Key 是否有效打开https://taotoken.net/models选一个模型发一句“你好”能正常返回就说明 Key 和通道都没问题。这一步很重要因为如果 Key 本身有问题后面 skill 配置得再对也跑不起来。3. 可复制的 skill 配置SKILL.md 与 settings.json 完整片段这一节是核心我会把git-commit-helper的SKILL.md和.claude/settings.json完整贴出来你直接复制到项目里就能用。先说目录结构Claude Code 的项目级 skill 路径是固定的your-project/ ├── CLAUDE.md ├── .claude/ │ ├── skills/ │ │ └── git-commit-helper/ │ │ └── SKILL.md │ └── settings.json ├── main.py └── utils/SKILL.md的 frontmatter 里name是 skill 的调用名description决定 Claude Code 什么时候自动触发它allowed-tools限定它能用哪些工具disable-model-invocation: true表示不让模型自动调用、必须你手动输入/git-commit-helper才触发。这个设置很关键否则 Claude Code 可能在你没要求的时候自己跑一遍。--- name: git-commit-helper description: Generate clear Conventional Commit messages from staged git changes. Use after code modifications when the user asks what commit message to write. Analyze staged diff and suggest commit messages only. Do not execute git commit. allowed-tools: Bash, Read disable-model-invocation: true --- # Git Commit Helper 你是当前项目的 Git commit message 助手。 你的任务是根据 staged changes 生成清晰、准确、可复制的 commit message。 ## 严格规则 - 只生成 commit message。 - 不要执行 git commit。 - 不要执行 git push。 - 不要执行 git add。 - 不要修改任何文件。 - 如果没有 staged changes提醒用户先手动执行 git add file。 - 如果 staged changes 过多先建议用户拆分提交。 ## 允许读取的信息 优先读取 staged changes bash git status --short git diff --staged --name-only git diff --stagedCommit 格式使用 Conventional Commit 格式type(scope): subject body常用 typefeat: 新增功能fix: 修复 bugrefactor: 重构不改变默认行为perf: 性能优化docs: 文档修改test: 测试相关style: 格式或排版不改变逻辑chore: 工程维护、配置维护、依赖或杂项config: 配置参数调整experiment: 实验流程或评估脚本调整Subject 规则使用英文、祈使句、小写开头、不超过 72 字符、不以句号结尾。Body 规则用英文 bullet points说明 what 和 why不要复述代码实现。输出格式Recommended commit message 完整 commit message Alternative messages type(scope): subject type(scope): subject type(scope): subject Why this message 改动类型 推荐 scope 核心原因 是否包含 breaking change 是否建议拆分提交然后是 .claude/settings.json这里要同时配 TaoToken 的环境变量和 git 权限。注意 permissions.allow 里只放只读命令deny 里把写操作全部堵死 json { env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key }, permissions: { allow: [ Read(*), Bash(git status:*), Bash(git diff:*) ], deny: [ Bash(git commit:*), Bash(git push:*), Bash(git reset:*), Bash(git add:*), Bash(rm -rf:*) ] } }这里有个容易忽略的点Bash(git diff:*)里的:*是通配符表示允许git diff后面跟任意参数包括--staged、--name-only。如果你只写Bash(git diff)那git diff --staged会被拒绝skill 就读不到 staged 内容。同理git status也要带:*。另外如果你用的是个人级 skill路径是~/.claude/skills/git-commit-helper/SKILL.md对所有项目生效。但个人级配置里不要写死项目相关的 scope 规则否则换个仓库就不适用了。我建议项目级和个人级分开项目级放具体的 scope 映射个人级放通用的 Conventional Commit 规则。配好之后重启 Claude Code 或者重新加载配置输入/git-commit-helper应该能看到 skill 被识别。如果提示 “skill not found”先检查目录名和name字段是否一致再检查SKILL.md的 frontmatter 有没有语法错误。4. 验证请求跑一次完整的 commit 生成闭环配置写完得实际跑一遍才知道有没有问题。这一节我用一个真实场景演示改了两个文件git add之后调用 skill看它能不能吐出规范的 commit message。先准备改动。假设我在一个 Python 项目里改了utils/slam_frontend.py和configs/rgbd/tum/base_config.yaml前者调整了子图初始化的位姿逻辑后者加了两个参数。改完之后在终端里检查状态git status --short输出应该是M configs/rgbd/tum/base_config.yaml M utils/slam_frontend.py注意这里还没有git add所以是工作区改动。接下来手动 stagegit add utils/slam_frontend.py git add configs/rgbd/tum/base_config.yaml再确认一次git diff --staged --name-only输出configs/rgbd/tum/base_config.yaml utils/slam_frontend.py到这里staged changes 就准备好了。现在回到 Claude Code输入/git-commit-helper 请分析 staged changes只生成 commit message不要执行 git commit。Claude Code 会先执行git status --short和git diff --staged读取改动内容然后按照SKILL.md里定义的格式输出。一个典型的返回长这样Recommended commit message fix(submap): preserve global pose during submap transition - Initialize new submaps from the tracked global camera pose - Keep frontend and backend pose semantics aligned - Avoid pose jumps when cutting submaps Alternative messages fix(frontend): align submap init with global pose refactor(submap): separate pose tracking from submap creation config(rgbd): add synchronized submap pruning parameters Why this message 改动类型fix config 推荐 scopesubmap 核心原因修复子图切换时的位姿跳变同时补充配置参数 是否包含 breaking change否 是否建议拆分提交建议拆成 fix 和 config 两个提交拿到这段文本后你自己在终端执行git commit -m fix(submap): preserve global pose during submap transition -m - Initialize new submaps from the tracked global camera pose - Keep frontend and backend pose semantics aligned - Avoid pose jumps when cutting submaps提交完成后git log --oneline -1应该能看到这条记录。整个闭环就跑通了Claude Code 改代码 → 你检查 diff → 你 stage → skill 生成 message → 你手动 commit。这里有个验证技巧如果 skill 返回的 message 里出现了git commit命令或者它试图执行提交说明settings.json的 deny 规则没生效。回去检查Bash(git commit:*)是否写在了deny数组里而不是allow。另外如果 skill 读不到 diff返回“no staged changes”先确认你是不是忘了git add或者Bash(git diff:*)的权限被 deny 了。5. 常见报错排查401、local proxy failed 与 reading choices配置过程中最容易卡在几个固定报错上我按实际遇到的频率排一下。401 Unauthorized这个通常是 Key 的问题。先检查ANTHROPIC_AUTH_TOKEN有没有写错比如多复制了一个空格、或者把sk-前缀漏了。然后确认 Base URL 是https://taotoken.net/api不是https://taotoken.net/api/v1。如果 Key 本身没问题去控制台的 API Keys 页面看这个 Key 是否被禁用或额度耗尽。还有一种情况是环境变量没生效你在.claude/settings.json里配了env但 shell 里又 export 了一个旧的ANTHROPIC_AUTH_TOKEN两者冲突时以 shell 为准。用echo $ANTHROPIC_AUTH_TOKEN确认一下当前值。local proxy failed / connection refused这个报错说明 Claude Code 连不上 Base URL。先curl -I https://taotoken.net/api看能不能通如果 curl 也失败那是网络层的问题不是配置问题。如果 curl 通但 Claude Code 报错检查是不是在settings.json里把ANTHROPIC_BASE_URL写成了http://而不是https://。另外有些公司网络会拦截非标准端口但 TaoToken 走的是 443一般不受影响。reading choices / unexpected response format这个通常出现在模型返回的 JSON 结构不符合预期时。Claude Code 期望的是 Anthropic 风格的content数组如果你在 TaoToken 里选的模型是 OpenAI 风格的返回的可能是choices数组Claude Code 解析不了。解决办法是在 TaoToken 的模型对话页面确认你用的模型支持 Anthropic 协议或者换一个兼容的模型。这个报错和 skill 本身无关是模型通道的问题。skill not found输入/git-commit-helper提示找不到。先检查目录名是不是git-commit-helper和 frontmatter 里的name是否完全一致包括连字符。然后检查SKILL.md的文件名是不是全大写有些系统对大小写敏感。最后确认.claude/skills/是在项目根目录下不是子目录里。permission denied for Bash(git diff)skill 执行时被权限拦截。检查settings.json的allow里是不是写成了Bash(git diff)而不是Bash(git diff:*)。通配符:*不能省否则带参数的git diff --staged会被拒绝。同理git status --short也需要Bash(git status:*)。CC Switch / Cline MCP / Codex auth.json 三件套如果你同时用这几个工具记住每个工具都需要独立的 Base URL、Key、Model ID 三件套。CC Switch 里配的是ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN 模型名Cline 的 MCP 配置里是baseUrlapiKeymodelCodex 的auth.json里是api_baseapi_keymodel。三者指向同一个 TaoToken Key 没问题但字段名不一样别复制串了。排障的时候建议先用模型对话页面单独验证 Key 和模型确认通道没问题再回来查 Claude Code 的配置。这样能把问题范围缩小到“是通道问题还是工具配置问题”。6. 把 commit 生成接进日常流程几个实用习惯跑通之后我建议把几个动作固定成习惯能省不少事。第一永远先git add再调 skill。skill 读的是 staged changes不是工作区改动。如果你改了三个文件但只想提交其中两个先 stage 那两个skill 就只会分析这两个的 diff。这样 commit message 的 scope 也更准确。第二让 Claude Code 改完代码后先总结 diff再决定要不要提交。我通常会说“请总结本次修改的 git diff不要提交”这样我能快速扫一眼它改了什么确认没有越界改动再手动 stage。这一步是人工审查的关键别跳过。第三commit message 生成后如果 skill 建议拆分提交就真的拆。比如上面例子里的fix和config混在一起拆成两个 commit 之后回滚和 review 都更清晰。Conventional Commit 的价值就在于每个 commit 只做一件事。第四把SKILL.md里的 scope 映射改成你自己项目的模块名。比如你的项目有frontend、backend、loop三个模块就在 skill 里写清楚哪个文件对应哪个 scope。这样模型生成的 scope 不会乱猜准确率高很多。如果你还没配 TaoToken 的 Key先去https://taotoken.net/api-keys创建一个然后按第 2 节的 JSON 片段填进settings.json。接入文档在https://taotoken.net/doc里面有各工具的完整配置示例。长期用 Claude Code 做编码的话https://taotoken.net/coding-plan里有套餐说明可以按需选。模型对话页面在https://taotoken.net/models排障时用它验证 Key 最直接。最后说一个我踩过的坑disable-model-invocation: true这个字段一定要加。不加的话Claude Code 可能在你改完代码后自动触发 skill然后你还没 stage 任何文件它就返回“no staged changes”白白浪费一次调用。加上之后只有你手动输入/git-commit-helper才会执行控制权完全在你手里。
返回列表