第 3 章 Slash Commands 功能族

Slash command 解决的是什么问题

用自然语言操作 AI 有一个内在问题:结果不确定。你说"帮我进入规划模式",模型理不理解、怎么理解,每次可能不一样。

slash command 解决的就是这个问题。/plan 永远是进入 plan mode,/compact 永远是压缩上下文,跟模型怎么想没关系。它给熟练用户提供了一条绕过自然语言不确定性的高速通道。

这不是"AI 产品应该全用自然语言"和"还是用命令行吧"之间的妥协,而是两种模式各司其职的刻意设计。

命令是怎么工作的

slash command 有几种不同的执行方式,取决于命令的性质:

  1. 交给模型处理:把用户意图包装成 prompt,模型再去调用工具。/review 就是这样——命令把"审查当前改动"的意图构造成 prompt,模型决定读哪些文件、怎么分析。
  2. 本地直接执行:不经过模型,直接返回 UI 组件,结果是确定性的。/permissions 打开权限面板、/memory 打开记忆文件,都是这类。
  3. 两者组合:先在本地做准备,再交给模型。/compact 就是先在本地计算当前上下文的分布,再用模型做实际的摘要压缩。

这种分类让命令系统很灵活:不是所有命令都需要走一遍 LLM,能在本地确定性完成的,就在本地完成。

Feature flag 和命令可见性

命令注册表里有一个重要机制:命令可以通过 feature flag 条件注册。

实际效果是:某些命令只在内部版出现,某些只在实验版出现,某些只有在特定组织下才可见。从代码角度看,所有这些命令都在同一份代码里,但不同的构建、不同的环境下,命令列表是不同的。

这让 Claude Code 可以在一份主干代码上并行演化多条产品路线,而不是维护多个 fork。代价是命令注册逻辑变复杂了,好处是功能迭代速度快得多。

插件和 skill 的命令怎么融入

用户通过插件安装的 skill,最终也会并入同一个命令注册表。从用户的角度,通过 skill 安装的自定义命令和 /compact 这样的内建命令,使用体验完全一样。

这是一个重要的设计决策:扩展能力和内建能力共享同一个接口层。用户不需要区分"这个命令是内建的还是安装的",这条界限在使用层是透明的。