首页/命令系统

命令系统

86 个 Slash 命令的注册与执行

命令系统处理用户输入的 /command 指令。所有命令注册在 commands.ts 中,每个命令以独立目录存在于 commands/ 下,包含元数据、处理逻辑和权限配置。

核心要点

86 个内置命令,按目录组织
命令与工具分离 — 命令面向用户,工具面向模型
支持参数解析和自动补全
部分命令仅内部用户可用(ant-only)
命令可触发复杂工作流(如 commit-push-pr)

设计亮点

命令给人用,工具给 AI 用

就像餐厅里,菜单给客人看(命令),厨房设备给厨师用(工具)。客人说'我要宫保鸡丁'(/commit),厨师操作炒锅和刀具(Bash, Edit)来完成

这个分离设计解决了一个关键的 UX 问题:用户需要的交互方式和 AI 需要的接口是不同的。用户想要简洁的 /commit,AI 需要精确的 Bash(git add...) + Edit(commit-msg) 调用链。命令系统将用户意图翻译成 AI 可以理解和执行的工具调用序列。

复合命令像流水线

就像汽车工厂的装配线,每个工位做一件事,车从头走到尾就组装完成了

commit-push-pr 命令把 6 个步骤串联在一起:检查状态 → 分析差异 → 生成 commit message → 创建 commit → push → 创建 PR。每个步骤都可以独立执行,但组合在一起就是一个完整的工作流。失败时会在出错步骤停下来,不会继续执行后续步骤(比如 commit 失败就不会 push)。

模块架构图

加载架构图...
核心文件
commands.ts900 LOC

命令注册中心,导入所有命令

commands/commit/300 LOC

Git commit 命令

commands/review/400 LOC

代码审查命令

commands/session/500 LOC

会话管理命令

commands/config/300 LOC

配置管理命令

commands/mcp/400 LOC

MCP 服务器命令

commands/agents/500 LOC

Agent 平台命令

commands/skills/300 LOC

技能管理命令

数据流程
1
用户输入 /command
在 REPL 中输入斜杠命令
2
解析命令名和参数
提取命令名和参数列表
3
查找命令
在 commands.ts 注册表中查找
4
验证权限
检查命令是否可用
5
执行命令
调用 handler 函数
6
输出结果
显示命令结果

关键代码

加载代码...
加载代码...

深入解析

命令和工具是两个独立的系统:命令面向用户(/commit),工具面向模型(Bash, Read 等)。用户通过 / 前缀触发命令,Claude 通过 tool_use API 调用工具。

部分命令如 commit-push-pr 是复合命令,串联多个操作为完整工作流:先运行 git status、git diff 分析变更,生成 commit message,创建 commit,推送到远程,最后创建 Pull Request。

命令支持自动补全,在 REPL 中按 Tab 可以看到可用命令列表。自动补全系统会根据上下文过滤命令(如未在 git 仓库中时隐藏 git 相关命令)。

每个命令以独立目录存在于 commands/ 下,包含元数据(名称、描述、参数定义)、处理函数、权限要求。这种组织方式让添加新命令就像添加新目录一样简单。

部分命令用 feature() 守卫,仅在内部构建中可见(ant-only)。外部用户看不到也无法调用这些命令,甚至不知道它们的存在。

命令的 handler 函数可以直接操作 AppState(修改消息、更新 UI),也可以向 REPL 注入新的用户消息让 Claude 处理。比如 /commit 命令实际上是向 Claude 发送了一条'帮我创建 commit'的消息。

命令系统和技能系统有明确分工:命令是'硬编码'的 TypeScript 函数,有完整的运行时访问权限;技能是'软编码'的提示词模板,通过 AI 间接执行。命令更强大但需要代码修改,技能更灵活但能力有限。