尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

装了 30 个 Skills 之后,我才搞清楚哪些是在白浪费 context:一份 SKILL.md 与 allowed-tools 的体检清单

发布时间:2026/9/28 19:13:57

资讯中心
01
ARTICLE

装了 30 个 Skills 之后,我才搞清楚哪些是在白浪费 context:一份 SKILL.md 与 allowed-tools 的体检清单

装了 30 个 Skills 之后,我才搞清楚哪些是在白浪费 context:一份 SKILL.md 与 allowed-tools 的体检清单
1. 装了 30 个 Skills 之后我的 Claude Code 变慢了Claude Code 的 Skills 机制简单说就是把一段可复用的指令、脚本或工作流打包成SKILL.md放在~/.claude/skills或项目级.claude/skills目录下Claude 在合适的时机自动加载并执行。它能让 Claude 记住你团队的 API 约定、代码审查清单、部署流程适合所有想把 Claude Code 从聊天工具变成工程助手的开发者。但问题也出在这里。我一开始抱着多装一个就多一种超能力的心态陆陆续续装了 30 多个 Skills。结果实测下来Claude Code 确实变聪明了一点但也开始变慢明明只是问一个普通的代码问题它会莫名其妙触发一堆不相关的 Skilltoken 飞速消耗最夸张的一次一个问题跑了三轮 context compaction。后来我花了一个周末做体检把 Skills 从 30 多个砍到 11 个上下文加载速度明显变快Claude 的行为也更可预测。这篇文章就是把这套体检方法拆开讲清楚怎么从SKILL.md的描述长度和allowed-tools声明范围切入判断哪些 Skill 在空耗你的 context并给出可复制的精简骨架和收敛配置。2. 先搞清楚 context 到底被谁吃掉了2.1 Skill 的 context 占用分两部分很多人以为 Skill 只有被触发时才占 context其实不是。Claude Code 对 Skill 的处理分两层第一层是描述列表skill listing。所有已安装 Skill 的name和description会被拼进系统提示让 Claude 知道有哪些 Skill 可用。这部分是常驻的不管你这次用不用它都在。第二层是完整内容加载。当 Claude 判断某个 Skill 相关时才会把完整的SKILL.md正文读进 context。这部分是动态的但一旦触发几百上千行内容就直接进去了。所以一个 Skill 即使你从没主动用过它的描述也在悄悄占你的预算。官方默认给 Skill 描述列表分配的预算是模型 context window 的 1%超出后使用最少的 Skill 描述会被截断甚至丢弃——结果就是 Claude 不知道它存在你手动/skill-name还能触发但自动触发彻底失效。2.2 描述长度是第一道税我翻了自己那 30 个 Skill 的description字段发现最长的有 400 多字符最短的只有 30 字符。30 个 Skill 平均 200 字符光描述列表就吃掉 6000 字符左右的常驻预算。更麻烦的是描述写得越宽泛触发概率越高。比如一个 Skill 的 description 写的是优化代码质量、提升可维护性那 Claude 在你问任何代码相关问题时都可能把它拉进来。真正好的描述应该精确到触发条件比如当用户询问 Sentry error tracking 接入方式时。2.3 allowed-tools 是第二道隐形税allowed-tools声明的是这个 Skill 激活时 Claude 可以调用的工具范围。写Bash(*)意味着 Skill 激活期间 Claude 可以执行任意 shell 命令写Bash(rm *)更危险删除命令可以不经确认执行。从 context 角度看宽泛的allowed-tools会让 Claude 在触发该 Skill 后倾向于做更多工具调用尝试每一次调用都是一轮 token 消耗。而且宽泛权限本身也是安全隐患尤其是从不知名仓库复制来的 Skill。3. TaoToken 前置把模型调用和 Skill 调试分开在动手体检 Skills 之前建议先把模型调用链路和 Skill 调试链路分开。我自己的做法是用 TaoToken 作为统一的模型接入层这样调试 Skill 触发行为时模型侧的调用是稳定可观测的不会因为模型切换导致 Skill 行为漂移。TaoToken 是一个模型 API 聚合服务官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它支持 Claude 系列模型的对话调用适合用来做 Skill 触发行为的对照测试。具体操作上你可以先在控制台创建一个 API Key然后把它配置到 Claude Code 的环境变量里。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite API Keys 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。配置方式是在 shell 配置文件里加一行export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的_taotoken_key这样 Claude Code 的模型请求就走 TaoToken 了。为什么要这么做因为 Skill 体检的核心是观察同样的输入触发行为是否变化如果模型侧本身不稳定你根本分不清是 Skill 的问题还是模型的问题。如果你只是想先验证模型对话是否正常可以直接用模型对话页测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。长期做编码和 Agent 工作流的话Coding Plan 更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。4. 可复制的 SKILL.md 精简骨架4.1 一个典型的臃肿 SKILL.md先看我体检前的一个真实 Skill 结构简化版--- name: code-quality-helper description: 帮助优化代码质量提升可维护性检查潜在问题改进命名规范建议重构方案适用于各种编程语言和项目类型当用户需要代码相关帮助时使用 allowed-tools: Bash(*), Read, Write, Edit, Glob, Grep --- # Code Quality Helper ## 概述 这个 Skill 帮助提升代码质量... ## 使用场景 - 场景1... - 场景2... 此处省略 300 行通用最佳实践问题一目了然description 宽泛到几乎任何代码问题都能触发allowed-tools直接给了Bash(*)正文 300 多行大部分是 Claude 本来就知道的通用建议。4.2 精简后的骨架我把上面这个 Skill 重写成这样--- name: api-convention-check description: 当用户提交涉及内部 REST API 的代码变更需要检查是否符合团队 API 约定版本号位置、错误码格式、分页参数命名时使用 allowed-tools: Read, Grep --- # 内部 API 约定检查 ## 触发条件 仅当代码变更涉及 src/api/ 目录下的接口定义时激活。 ## 检查清单 1. 版本号必须放在 URL path 而非 header 2. 错误码格式为 {domain}.{category}.{number} 3. 分页参数统一用 page_size 和 page_token ## 参考 详细约定见 docs/api-convention.md需要时再读取。对比一下description 从 80 多字压到 50 字以内且精确到触发条件allowed-tools从Bash(*)收敛到只读的Read和Grep正文从 300 行压到 20 行把详细材料拆到 supporting file 里按需读取。4.3 骨架的四个原则第一description必须包含明确的触发条件用当……时使用的句式避免帮助优化提升这类泛化动词。第二allowed-tools遵循最小权限原则。只读检查类 Skill 只给Read和Grep需要改文件的才加EditBash尽量限定到具体命令前缀比如Bash(npm test:*)。第三SKILL.md正文控制在 500 行以内超出部分拆到references/或scripts/子目录主文件只留触发逻辑和索引。第四把Claude 本来就知道的通用最佳实践全部删掉。Skill 的价值在于教 Claude 它不知道的东西——你团队的约定、内部工具的用法、特定的判断逻辑。5. 用 /context 验证前后占用变化5.1 体检前的基线测量在 Claude Code 里运行/context会看到当前 context 的占用分布。重点看 Skill listing 那一项占了多少。我体检前的数据是30 个 Skill描述列表占用约 6200 字符接近默认预算上限。同时运行/doctor可以看 Skill 列表的预算状态如果显示接近溢出说明该清理了。5.2 逐个 Skill 做触发测试对每个 Skill用一句贴近它 description 的话去问 Claude观察它是否触发。比如对上面那个code-quality-helper我问帮我看看这段代码有没有问题它触发了但我问这个函数命名合理吗它也触发了——说明 description 太宽泛。测试时可以用模型对话页做对照https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 把同样的 prompt 分别在有 Skill 和无 Skill 的情况下跑一遍对比 token 消耗和响应内容。5.3 清理后的对比砍到 11 个 Skill 后重新跑/context描述列表占用降到约 2100 字符加载速度明显变快。更重要的是触发行为变得可预测——以前问一个普通问题会触发 3 到 4 个 Skill现在通常只触发 0 到 1 个。如果你需要更细的接入文档来配置环境变量和调试参数参考 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。6. 本篇常见错排查6.1 Skill 出现在列表但自动触发失效这是最典型的 context 预算溢出症状。原因是描述列表超出 1% 预算后使用最少的 Skill 描述被截断。排查方法运行/doctor看预算状态解决方法是删掉不常用的 Skill或者在 settings 里调skillListingBudgetFraction或者把低频 Skill 设为 name-only 模式。6.2 多个 Skill 同时触发导致指令冲突我遇到过code-review、pr-review、git-commit-review三个 Skill 在代码审查时同时触发context 里出现互相矛盾的指令。排查方法在/context里看哪些 Skill 被同时加载解决方法是保留一个最符合工作方式的其余删掉或改窄 description。6.3 allowed-tools 权限过宽导致意外执行从不知名仓库复制的 Skillfrontmatter 里可能有Bash(rm *)这类配置。在 project-level skills 里接受 workspace trust 时这个权限会自动生效。排查方法装任何外部 Skill 前先看 frontmatter 的allowed-tools解决方法是手动收敛到最小权限有Bash(*)的直接改掉或不用。6.4 SKILL.md 过大导致每次触发都是重税官方建议SKILL.md不超过 500 行。超过后每次触发都是一笔很贵的 token 税。排查方法wc -l统计每个 Skill 的主文件行数解决方法是把参考材料拆到 supporting files主文件只留触发逻辑。6.5 跨平台使用时 frontmatter 字段被忽略Claude Code 特有的context: fork、allowed-tools等字段在 Cursor、Codex CLI 等工具里可能被忽略。排查方法跨平台使用前查目标工具的 Skill 规范解决方法是把平台特有配置和通用内容分开通用部分放主文件平台特有部分按需覆盖。7. 把 Skill 当投资而不是收藏体检完这 30 个 Skill我最大的感受是装 Skills 本身不是目的把工作流里最高频、最独特的步骤写成 Skill 才是。一个你自己写的、教了 Claude 你团队内部 API 约定的 Skill价值远大于 10 个从 Awesome 仓库装来的通用 Skill。如果你还在用 Claude Code 做长期编码和 Agent 工作流建议先把模型接入层稳定下来再动手做 Skill 体检。接入配置参考 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 长期编码场景可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。Claude Code 专项接入说明在 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。最后留一个我自己的判断标准装一个 Skill 之前问自己这个 Skill 教的是 Claude 不知道的东西吗如果只是把 Claude 本来就会的事情包装成命令那它的价值上限就是便利性不值得占用你的 context 预算。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。