ARTICLE DETAIL

资讯详情

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

自己动手编写skills:我让AI使用git更规范、合理——TaoToken统一Key接入Claude Code的skill配置实战

自己动手编写skills:我让AI使用git更规范、合理——TaoToken统一Key接入Claude Code的skill配置实战 1. 为什么 AI 提交 git 总是「一锅端」如果你最近在用 Claude Code 这类工具写代码大概率遇到过这种场景你让它改三个文件它改完顺手git add .然后git commit -m update一次提交把登录逻辑、样式调整、依赖升级全塞进同一个 commit。等你哪天想回滚登录改动发现根本拆不开——只能整块 revert把无关的样式也一起干掉。这不是 AI 笨而是它默认没有「提交粒度」这个概念。git 的对象模型决定了提交质量直接决定后续所有操作的成本commit 的 SHA 由内容加父指针哈希得出一旦创建历史就不可篡改提交通过 parent 指针连成 DAGgit log、git bisect、git revert、git blame全部建立在「每个提交可独立理解」这个假设上。一旦提交混杂二分定位到的往往是无关提交定点回滚变成牵一发动全身。所以「原子提交」不是洁癖而是让历史 DAG 变得可被机器分析的前提。这篇要解决的就是怎么通过 Claude Code 的自定义 skill把「分类 → 确认 → 分批提交 → 评审 → 推送」这套流程固化下来让 AI 每次执行 git 都按规范走。同时用 TaoToken 统一 Key 接入 Claude Code把 API 通道也收敛到一处省得每个工具配一遍密钥。适合谁看已经在用 Claude Code 或准备接入、被 AI 乱提交折磨过的开发者想给团队统一 git 规范但不想靠人肉 review 的人以及想搞明白 skill 机制到底怎么落地的人。2. TaoToken 前置统一 Key 接入 Claude Code在写 skill 之前先把 API 通道理顺。Claude Code 需要模型服务如果你同时用多个 AI 工具每个都配一套 key 会很乱。TaoToken 的作用就是提供一个统一的 Key 和 API 通道Claude Code、其他 coding 工具都走同一个入口。先拿到 Key。打开控制台创建 API Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole创建后复制那串sk-开头的密钥后面配置要用。如果你还没决定用哪个模型可以先在模型对话页试一下效果https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chatAPI 的基础地址是https://taotoken.net/api注意这个地址不带任何查询参数配置时直接填。Claude Code 走的是 Anthropic 兼容协议所以 base URL 要指向对应的兼容端点具体路径在接入文档里有说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc注意Key 只创建一次就够多个工具复用同一个 Key。不要把它硬编码进 skill 文件或提交到仓库用环境变量或 settings.json 管理。如果你打算长期用 Claude Code 做编码和 Agent 任务Coding Plan 会更划算额度按编码场景优化过https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan3. 可复制配置settings.json 接入片段Claude Code 的配置放在~/.claude/settings.json全局或项目根目录的.claude/settings.json项目级。推荐项目级方便团队共享。下面是一份可直接改的骨架{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key粘贴到这里, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [ Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*), Bash(git push:*) ], deny: [ Bash(git push --force:*), Bash(git reset --hard:*) ] } }几个关键点解释一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址ANTHROPIC_AUTH_TOKEN填你创建的 Key。permissions.allow里放行 git 的常规读写命令deny里直接封掉强推和硬重置——这是安全底线skill 里还会再拦一层但配置层先堵住更保险。提示ANTHROPIC_MODEL按你实际可用的模型名填不确定就先留空让 Claude Code 用默认值跑通后再指定。改完配置后重启 Claude Code用/status或发一句「你好」确认模型能正常响应。如果报 401八成是 Key 没填对或 base URL 多了斜杠。4. 编写 skill原子提交的流程骨架skill 的本质是在模型上下文里注入一份确定性的过程规范让 LLM 作为解释器去执行。Claude Code 的 skill 放在~/.claude/skills/skill-name/SKILL.md通过软链接注册改源文件即改即生效。先建目录结构mkdir -p ~/.claude/skills/wdp-git/references touch ~/.claude/skills/wdp-git/SKILL.md touch ~/.claude/skills/wdp-git/references/commit-conventions.mdSKILL.md控制在 200 行左右重内容下沉到references/按需加载——skill 一旦被加载就占用上下文 token常用 skill 必须保持低常驻成本。下面是骨架--- name: wdp-git description: 当用户要求提交代码、整理提交记录、推送、更新 release notes 时触发。不写流程摘要只写触发条件。 --- # wdp-git 提交流程 ## 前置检查 - 确认在 git 仓库内非分离 HEAD - 执行 git -c core.quotepathfalse status 和 git branch -vv ## 七步流程 1. 环境检查仓库、分支、远程信息 2. 分析与分组逐文件读 git diff按 hunk 实际语义归类产出分组方案表 3. 确认方案用 AskUserQuestion 让用户批准AI 是提议者不是决策者 4. 分批提交每组 git add 后执行 git diff --cached --stat 校验不一致则 git reset 重来 5. 发布说明聚合本次提交按 type 聚类改写为面向用户语言单独提交 docs(release) 6. 评审闸门推送前询问是否执行 code-review / security-review 7. 推送落后先 rebase无上游则 -u 设置 ## 安全底线 - 禁止 force-push仅用户明确要求且非保护分支时允许 --force-with-lease - 提交前扫描敏感信息私钥头、AKIA[0-9A-Z]{16}、.env/*.pem - main/master 直接提交时拦截引导建功能分支description字段是语义检索触发器模型每轮都会读它判断是否加载该 skill。所以只写触发条件千万别写流程摘要——否则模型可能照着 description 走捷径跳过正文里的强制步骤。references/commit-conventions.md放前缀表和格式约定# 提交约定 ## 前缀 feat / hotfix / bugfix / docs / refactor / perf / test / style / chore / release ## 格式 type(scope): 主题 主题 ≤ 50 字符正文写「为什么改」不写「改了什么」。前缀系统本质是给提交做静态分类的类型系统收益不只是可读性git log --grep^feat能过滤出全部特性增量CI 可按类型触发不同流水线feat→MINOR、bugfix→PATCH 的映射还能自动推断版本号。5. 验证请求确认 AI 真的按规范提交配置和 skill 都就位后得验证它是否真的生效。准备一个测试仓库故意制造多类改动mkdir /tmp/skill-test cd /tmp/skill-test git init echo console.log(a) app.js echo body{} style.css echo lodash package.json git add . git commit -m init然后改三个文件分别对应不同语义echo console.log(login) app.js echo body{color:red} style.css echo axios package.json在 Claude Code 里输入「提交并推送」观察它的行为。符合规范的执行应该长这样第一步它先跑环境检查输出类似分支main 远程origin (未设置上游) 变更3 个文件第二步它读 diff 后给出分组方案表分组文件类型说明1app.jsfeat新增登录逻辑2style.cssstyle调整样式3package.jsonchore新增依赖第三步它用 AskUserQuestion 问你「是否按此方案提交」你确认后才继续。第四步逐组提交每组提交后你能看到git diff --cached --stat的校验输出。最终git log --oneline应该显示三个独立提交a1b2c3d chore(deps): 新增 axios 依赖 e4f5g6h style: 调整 body 样式 i7j8k9l feat(login): 新增登录逻辑如果它还是git add .一把梭说明 skill 没被加载。检查~/.claude/skills/wdp-git/SKILL.md是否存在、软链接是否指对、description 是否写成了流程摘要。6. 本篇常见错排查skill 不触发最常见的原因是 description 写得太像流程说明。模型读到「本 skill 用于分批提交」就以为已经知道怎么做了直接跳过正文。改成纯触发条件比如「当用户要求提交代码、整理提交记录时触发」。中文文件名乱码git 默认core.quotepathtrue非 ASCII 路径会被转义成八进制导致按文件名归类失效。skill 里所有输出类命令统一加-c core.quotepathfalsegit -c core.quotepathfalse status git -c core.quotepathfalse diff --stat同一文件多类改动拆不开git add -p需要 TTY 交互Claude Code 里跑不了。用纯管道替代git diff -- app.js /tmp/f.patch # 手动筛选出目标类别的 hunk git apply --cached /tmp/f.patchgit apply --cached只把补丁写进暂存区、不动工作区行为等价于git add -p但无需交互。拆分太复杂时兜底策略是归入主导类别并在正文说明不为完美拆分引入新错误。推送被拒如果远程有新提交先git pull --rebase再推。skill 里禁止 force-push因为已推送的 commit 改写必须强推会破坏协作者基于旧 SHA 的工作。已推送的改动一律走git revert追加新提交。评审闸门被跳过检查 skill 第 6 步是否真的调用了 AskUserQuestion。有些实现会图省事直接推送这违背了「评审前移到变更成本最低点」的设计——未推送的 commit 用--amend就能改已推送的只能 revert。7. 把流程固化下来让每次提交都不靠运气跑通这套之后你拿到的不是「更干净的 log」而是可验证的确定性历史可追溯一提交一类一事按前缀可检索可 bisectrelease notes 永不欠账每次提交自动聚合发布时打开即用质量前置评审从可选项变成必选项。skill 的定制也很简单改references/commit-conventions.md里的前缀和格式改references/release-notes.md里的模板和版本规则改文件即生效。仓库内如果有自己的CLAUDE.md或.gitmessageskill 会优先遵循——进入陌生仓库时按仓库的规矩办事而不是强行推行自己的规范。如果你还没配好 API 通道先去创建 Keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys接入细节看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc长期做编码和 Agent 任务的话Coding Plan 的额度更贴合场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan最后留一个我踩过的坑skill 写完后别急着在正式仓库跑先拿/tmp下的测试仓库验证一遍分组和提交是否符合预期。确认无误再软链接到项目里能省掉不少回滚的麻烦。
返回列表