⚠️ 学习声明:本文档基于 Claude Code 2.1.88 源码分析整理,仅供个人学习研究使用,不做任何商业用途。
用户在 REPL 中输入
/help、/commit、/compact等斜杠命令,由命令系统处理。
一、命令 vs 工具
| 维度 | 命令 (Command) | 工具 (Tool) |
|---|---|---|
| 触发方 | 用户 输入 /xxx |
LLM 决定调用 |
| 入口 | commands.ts |
tools.ts |
| 执行环境 | REPL 内 | Agentic Loop 内 |
| 权限 | 用户自己操作,无需检查 | 需要权限系统审批 |
| UI | 可直接渲染 JSX | 通过 setToolJSX 渲染 |
二、命令定义结构
// types/command.ts (推断的类型) |
三、60+ 内置命令分类
3.1 对话控制类
| 命令 | 文件 | 功能 |
|---|---|---|
/help |
commands/help/ |
显示帮助信息 |
/clear |
commands/clear/ |
清除对话历史 |
/compact |
commands/compact/ |
手动压缩对话上下文 |
/resume |
commands/resume/ |
恢复历史会话 |
/session |
commands/session/ |
会话管理 |
/cost |
commands/cost/ |
显示当前花费 |
/status |
commands/status/ |
显示系统状态 |
3.2 Git/PR 类
| 命令 | 文件 | 功能 |
|---|---|---|
/commit |
commands/commit.ts |
AI 生成 commit message 并提交 |
/commit-push-pr |
commands/commit-push-pr.ts |
提交 + 推送 + 创建 PR |
/review |
commands/review.ts |
AI 代码审查 |
/diff |
commands/diff/ |
显示文件 diff |
/pr_comments |
commands/pr_comments/ |
PR 评论管理 |
3.3 配置类
| 命令 | 文件 | 功能 |
|---|---|---|
/config |
commands/config/ |
查看/修改配置 |
/init |
commands/init.ts |
初始化项目 (生成 CLAUDE.md) |
/login |
commands/login/ |
登录认证 |
/logout |
commands/logout/ |
注销 |
/theme |
commands/theme/ |
切换主题 |
/vim |
commands/vim/ |
Vim 模式开关 |
/keybindings |
commands/keybindings/ |
快捷键配置 |
3.4 项目分析类
| 命令 | 文件 | 功能 |
|---|---|---|
/init-verifiers |
commands/init-verifiers.ts |
初始化验证器 |
/doctor |
commands/doctor/ |
诊断项目问题 |
/context |
commands/context/ |
查看上下文使用 |
/memory |
commands/memory/ |
管理 Memory 文件 |
/security-review |
commands/security-review.ts |
安全审查 |
/bughunter |
commands/bughunter/ |
Bug 搜索 |
3.5 MCP/插件类
| 命令 | 文件 | 功能 |
|---|---|---|
/mcp |
commands/mcp/ |
MCP 服务器管理 |
/skills |
commands/skills/ |
技能管理 |
/install |
commands/install.tsx |
安装插件 |
3.6 远程/协作类
| 命令 | 文件 | 功能 |
|---|---|---|
/share |
commands/share/ |
分享对话 |
/teleport |
commands/teleport/ |
会话传送(设备间) |
/bridge |
commands/bridge/ |
远程桥接 (feature flag) |
/mobile |
commands/mobile/ |
移动端连接 |
/desktop |
commands/desktop/ |
桌面端交互 |
/ide |
commands/ide/ |
IDE 集成 |
3.7 高级功能类
| 命令 | 文件 | 功能 |
|---|---|---|
/agents |
commands/agents/ |
Agent 管理 |
/tasks |
commands/tasks/ |
后台任务管理 |
/add-dir |
commands/add-dir/ |
添加工作目录 |
/branch |
commands/branch/ |
分支管理 |
/copy |
commands/copy/ |
复制内容到剪贴板 |
/rename |
commands/rename/ |
重命名会话 |
3.8 条件编译命令
// 这些命令只在特定 feature flag 下启用 |
四、命令注册机制
// commands.ts |
五、命令执行流程
用户输入: /commit -m "fix: bug" |
六、典型命令实现分析
6.1 /compact — 对话压缩
// commands/compact/ (简化) |
6.2 /commit — AI 提交
// commands/commit.ts (简化) |
6.3 /init — 项目初始化
// commands/init.ts (简化) |
七、命令与工具的交互
某些命令会将自己转化为 注入到对话中的消息,从而触发 LLM 使用工具:
// 返回 messages 类型的结果会注入到对话历史 |
八、Skill-Tool 命令
部分命令实际上是 “Skill” 的入口,它们注入特定的 prompt 来触发 LLM 的特定行为:
// 通过 getSkillToolCommands() 动态生成 |
九、命令系统的设计模式
11.1 Command Pattern 的实现
Claude Code 的命令系统是经典 Command Pattern(Gamma et al., 1994, Design Patterns)的现代 TypeScript 实现:
interface Command { |
11.2 60+ 命令的分类
命令分类: |
11.3 命令 vs 工具
| 维度 | 命令 (Commands) | 工具 (Tools) |
|---|---|---|
| 触发者 | 用户(通过 /command) | LLM(通过 tool_use) |
| 执行时机 | 用户输入时 | LLM 请求时 |
| 权限 | 用户自身权限 | Agent 权限(可能受限) |
| 示例 | /compact, /review |
FileEdit, BashTool |
命令是用户的手段,工具是 Agent 的手段。两者互补。
十、命令生命周期与中间件
12.1 命令执行管道
用户输入 "/compact" |
12.2 命令中间件
类似 Express.js 的中间件模式:
type CommandMiddleware = ( |
十一、命令自动补全与发现机制
13.1 命令注册流程
启动时: |
13.2 动态命令
部分命令不是静态注册的,而是根据上下文动态生成:
/mcp__<server>__<tool>命令由 MCP 服务器动态注入- 插件可以注册新的命令(
plugin.registerCommand()) - 技能(Skills)可以添加带命名空间的命令
13.3 与 VSCode Command Palette 的对比
| 维度 | CC Commands | VSCode Command Palette |
|---|---|---|
| 触发方式 | /command 文本输入 |
Ctrl+Shift+P GUI |
| 发现性 | / 触发自动补全 |
搜索 + 分类浏览 |
| 扩展性 | MCP + 插件 + 技能 | 扩展 API |
| 上下文感知 | 项目类型/语言 | 文件类型/workspace |
十二、命令实现的工程规范
14.1 命令文件的组织结构
commands/<command-name>/ |
每个命令不到 200 行,职责单一。
14.2 错误处理模式
// 统一的命令错误处理 |
涉及源文件
bridge/index.jscommands/add-dir/commands/agents/commands/branch/commands/bridge/commands/bughunter/commands/clear/commands/commit-push-pr.tscommands/commit.tscommands/compact/commands/config/commands/context/commands/copy/commands/cost/commands/desktop/commands/diff/commands/doctor/commands/help/commands/ide/commands/init-verifiers.tscommands/init.tscommands/install.tsxcommands/keybindings/commands/login/commands/logout/commands/mcp/commands/memory/commands/mobile/commands/pr_comments/commands/rename/commands/resume/commands/review.tscommands/security-review.tscommands/session/commands/share/commands/skills/commands/status/commands/tasks/commands/teleport/commands/theme/commands/vim/







