所有正常安装的 Skill 的 description 字段都将作为系统提示词加入到上下文中,以便 Claude Code 根据用户的需求按需加载 Skill。根据 Claude Code 公布的文档,description 总预算上限为上下文窗口总量的 2%,若未特别指定,默认固定为 16000 个字符。这 16000 个字符由所有已安装的 Skill 平均分配,不论 Skill 大小都是平均分配。如果你安装了 20 个 Skill,那么每个 Skill 能够分配到 800 个字符。如果有个 Skill 的 description 超过了 800 个字符,比如是 1000 个字符,不同版本的 Claude Code 将有两种处理方式:
方式一:
它将被 Claude Code 排除在上下文窗口预算之外,对于用户来说这个 Skill 将消失,不会被按需自动激活调用。
方式二:
当超出预算时,系统并不会直接将超额的 Skill 从上下文中“剔除”或让其“消失”。description 将按比例压缩或截断,根据源码,单个 Skill 的 description 在清单中最多保留 250 个字符(MAX_LISTING_DESC_CHARS = 250)。一旦超过,第 251 个字符之后的内容会被直接砍掉并替换为省略号(…)。当所有 description 加起来极度超出 1%(源码中另一个常量 SKILL_BUDGET_CONTEXT_PERCENT = 0.01)的硬性上限,且压缩后仍装不下时,才会进入降级模式——此时系统会只显示 Skill 的名字,连一个字的 description 都不保留。描述被截断,从而使得 Claude 无法获取完整的触发条件,最终导致“自动触发率大幅下降”或“退化成只有名字的哑巴”。
基于此:
- 不要过多安装 Skill,通常不要超过 20 个。如果你的 Skill 超过了 20 个,就需要考虑合并一些同类 Skill,将多个零散的同类 Skill 合并成一个综合性的 Skill。装得越多,每个 Skill 能保留的判断信息越少。贵精不贵多,合并同类项是解决预算挤兑的最佳工程实践。
- Skill 的 description 需要精准描述,每一个字符都要仔细考虑。投入精准,就换来高效的检索和准确的执行;投入浪费,不仅浪费自身的预算配额,而且挤占其他 Skill 的生存空间。Description 的真正读者是模型,必须以“触发条件”而非“功能摘要”的形式组织,把用户实际会说的话放在前面。
- 将一些不需要自动调用,平时显示命令调用的任务型 Skill 隐藏,设置 disable-model-invocation: true,这样该 Skill 的 description 不会被注入上下文中,需要时手动 / 调用即可。
- 运行诊断命令 /context或/doctor可以查看 Skill 列表的预算状态,确认是否有 Skill 因超出预算被截断或排除。
通过调整系统环境变量 SLASH_COMMAND_TOOL_CHAR_BUDGET是可以调大 description 上下文预算的,但是通常不推荐这么做,因为除了 Skill 之外,Claude Code 还有需要东西需要上下文空间。盲目调大 Skill 预算,必然会挤占实际对话历史、代码文件读取等核心工作空间的 token 额度。