13 KiB
Claude Code 命令系统详解
概述
Claude Code 的命令系统是用户与 CLI 交互的核心方式。每个斜杠命令(slash command)都是一个独立的模块,支持懒加载以提高启动性能。命令定义遵循统一的 Command 接口,包含元数据和执行逻辑。
命令类型
1. prompt 类型命令
生成提示词发送给 AI 模型处理。
type Command = {
type: 'prompt'
name: string
description: string
contentLength: number
source: 'builtin'
async getPromptForCommand(args): Promise<ContentBlockParam[]>
}
2. local-jsx 类型命令
渲染本地 React 组件的交互式命令。
type Command = {
type: 'local-jsx'
name: string
description: string
load: () => import('./xxx.js')
}
3. local 类型命令
执行本地逻辑的命令,不涉及 AI 模型。
type Command = {
type: 'local'
name: string
description: string
supportsNonInteractive: boolean
load: () => import('./xxx.js')
}
命令详解
/commit - 创建 Git 提交
文件位置: src/commands/commit.ts
功能描述: 分析当前 Git 状态,生成符合项目规范的提交信息,创建新的 Git 提交。
触发条件: 用户输入 /commit
核心逻辑:
- 获取当前 Git 状态(
git status、git diff HEAD、git branch --show-current) - 获取最近 10 条提交记录以了解项目提交风格
- 根据变更内容生成提交信息
- 使用 HEREDOC 语法执行
git commit
安全协议:
- 禁止更新 git config
- 禁止跳过 hooks(除非用户明确要求)
- 必须创建新提交,禁止使用
--amend - 禁止提交包含密钥的文件(.env 等)
- 禁止使用需要交互输入的 git 命令(如
git rebase -i)
相关文件:
src/commands/commit.ts- 命令入口src/utils/attribution.js- 获取归属文本
/review - 代码审查
文件位置: src/commands/review.ts
功能描述: 审查 GitHub Pull Request 的代码变更。
触发条件: 用户输入 /review [PR编号]
核心逻辑:
- 若未提供 PR 编号,执行
gh pr list显示打开的 PR 列表 - 若提供 PR 编号,执行
gh pr view <number>获取详情 - 执行
gh pr diff <number>获取代码差异 - 分析代码质量、风格、潜在问题、安全性等
- 提供改进建议
本地审查提示词 (LOCAL_REVIEW_PROMPT):
You are an expert code reviewer. Follow these steps:
1. If no PR number is provided, run `gh pr list`
2. Analyze the changes and provide a thorough code review
...
ultrareview 命令:
- 唯一入口:通过
/ultrareview触发远程 Bug Hunter 路径 - 使用
~10-20 min执行深度 bug 查找 - 需要在 Claude Code 网页版运行
相关文件:
src/commands/review.ts- 包含本地 review 和 ultrareview 命令src/commands/review/ultrareviewEnabled.ts- ultrareview 功能开关
/compact - 对话压缩
文件位置: src/commands/compact/index.ts, src/commands/compact/compact.ts
功能描述: 清除对话历史但保留摘要,保持在上下文中。
触发条件: 用户输入 /compact [自定义摘要指令]
核心逻辑:
- 首先尝试会话内存压缩(无自定义指令时)
- 若有自定义指令或会话内存压缩不适用,执行传统的压缩流程:
- 执行 PreCompact hooks
- 运行 microcompact 减少 token 数量
- 调用
compactConversation生成摘要 - 执行 PostCompact hooks
- 重置文件状态缓存
- 生成压缩边界标记和摘要消息
压缩类型:
- 完整压缩: 总结整个对话历史
- 部分压缩: 围绕选定消息索引进行压缩
from: 总结索引之后的消息,保留早期消息up_to: 总结索引之前的消息,保留后续消息
相关服务:
src/services/compact/compact.ts- 核心压缩逻辑src/services/compact/microCompact.ts- 微压缩src/services/compact/sessionMemoryCompact.ts- 会话内存压缩src/services/compact/postCompactCleanup.ts- 压缩后清理
/mcp - MCP 服务器管理
文件位置: src/commands/mcp/index.ts
功能描述: 管理 MCP(Model Context Protocol)服务器连接。
触发条件: 用户输入 /mcp [enable|disable [服务器名称]]
核心逻辑:
- 懒加载 MCP 管理界面组件
- 支持启用/禁用特定 MCP 服务器
- 管理 MCP 服务器配置
MCP 配置类型 (Transport):
stdio- 标准 I/O 传输sse- Server-Sent Eventshttp- HTTP 传输ws- WebSocketsdk- SDK 传输
相关服务:
src/services/mcp/useManageMCPConnections.ts- MCP 连接管理 Hooksrc/services/mcp/types.ts- MCP 类型定义src/services/mcp/client.ts- MCP 客户端实现
/config - 配置面板
文件位置: src/commands/config/index.ts
功能描述: 打开配置面板,管理 Claude Code 设置。
别名: /settings
触发条件: 用户输入 /config
核心逻辑:
- 懒加载配置面板 React 组件
- 支持用户偏好设置、项目设置等
/doctor - 诊断检查
文件位置: src/commands/doctor/index.ts
功能描述: 诊断和验证 Claude Code 安装状态和设置。
触发条件: 用户输入 /doctor
核心逻辑:
- 检查环境变量
DISABLE_DOCTOR_COMMAND确认是否启用 - 懒加载诊断组件
- 执行多项检查:安装完整性、配置正确性、认证状态等
/login - 登录
文件位置: src/commands/login/index.ts
功能描述: 使用 Anthropic 账户登录或切换账户。
触发条件: 用户输入 /login
核心逻辑:
- 检测是否已有 API Key 认证(
hasAnthropicApiKeyAuth()) - 根据认证状态显示不同描述
- 检查环境变量
DISABLE_LOGIN_COMMAND - 懒加载登录组件
/logout - 登出
文件位置: src/commands/logout/index.ts
功能描述: 从 Anthropic 账户登出。
触发条件: 用户输入 /logout
核心逻辑:
- 检查环境变量
DISABLE_LOGOUT_COMMAND - 执行登出逻辑,清除认证信息
/memory - 记忆文件编辑
文件位置: src/commands/memory/index.ts
功能描述: 编辑 Claude 记忆文件。
触发条件: 用户输入 /memory
核心逻辑:
- 懒加载记忆编辑器组件
/skills - 技能列表
文件位置: src/commands/skills/index.ts
功能描述: 列出可用的技能(Skills)。
触发条件: 用户输入 /skills
核心逻辑:
- 懒加载技能列表组件
- 显示所有已安装和可用的技能
/tasks - 后台任务管理
文件位置: src/commands/tasks/index.ts
功能描述: 列出和管理后台任务。
别名: /bashes
触发条件: 用户输入 /tasks
核心逻辑:
- 懒加载任务管理界面
- 显示正在运行、完成、失败的任务
/vim - Vim 模式切换
文件位置: src/commands/vim/index.ts, src/commands/vim/vim.ts
功能描述: 在 Vim 和 Normal 编辑模式之间切换。
触发条件: 用户输入 /vim
核心逻辑:
- 切换 REPL 的编辑模式
- 仅在交互式会话中可用
/diff - 变更查看
文件位置: src/commands/diff/index.ts
功能描述: 查看未提交的变更和每轮对话的差异。
触发条件: 用户输入 /diff
核心逻辑:
- 懒加载差异查看组件
- 显示工作区与上次提交的差异
/cost - 成本显示
文件位置: src/commands/cost/index.ts, src/commands/cost/cost.ts
功能描述: 显示当前会话的总成本和持续时间。
触发条件: 用户输入 /cost
隐藏条件:
- Claude.ai 订阅用户(Ants 除外)默认隐藏
- 订阅用户可看到成本明细
/theme - 主题切换
文件位置: src/commands/theme/index.ts
功能描述: 更改终端主题。
触发条件: 用户输入 /theme
核心逻辑:
- 懒加载主题选择组件
/context - 上下文可视化
文件位置: src/commands/context/index.ts
功能描述: 将当前上下文使用情况可视化为彩色网格。
触发条件: 用户输入 /context
交互模式变体:
context- 交互式彩色网格(仅交互式会话)context(非交互式) - 纯文本上下文使用情况
/pr_comments - PR 评论获取
文件位置: src/commands/pr_comments/index.ts
功能描述: 获取 GitHub Pull Request 的评论。
触发条件: 用户输入 /pr-comments [参数]
核心逻辑:
- 使用
gh pr view获取 PR 信息 - 使用
gh api获取 PR 级评论 - 使用
gh api获取代码审查评论 - 格式化显示评论列表
备用方案: 若市场不可用,使用内置提示词直接调用 GitHub CLI
/resume - 恢复对话
文件位置: src/commands/resume/index.ts
功能描述: 恢复之前的对话。
别名: /continue
触发条件: 用户输入 /resume [对话ID或搜索词]
核心逻辑:
- 懒加载恢复界面
- 支持按 ID 或关键词搜索历史对话
/share - 分享会话
文件位置: src/commands/share/index.ts
功能描述: 分享当前会话。
触发条件: 用户输入 /share
核心逻辑:
- 生成分享链接或会话导出
/desktop - 桌面客户端
文件位置: src/commands/desktop/index.ts
功能描述: 在 Claude Desktop 中继续当前会话。
别名: /app
触发条件: 用户输入 /desktop
平台限制:
- macOS: 完全支持
- Windows (x64): 支持
- 其他平台: 隐藏
/mobile - 移动应用
文件位置: src/commands/mobile/index.ts
功能描述: 显示下载 Claude 移动应用的二维码。
别名: /ios, /android
触发条件: 用户输入 /mobile
核心逻辑:
- 懒加载移动应用下载界面组件
- 显示 iOS 和 Android 的下载选项
/permissions - 权限管理
文件位置: src/commands/permissions/index.ts
功能描述: 管理允许和拒绝的工具权限规则。
别名: /allowed-tools
触发条件: 用户输入 /permissions
核心逻辑:
- 懒加载权限管理界面
- 配置
alwaysAllowRules等权限规则
/agents - Agent 配置管理
文件位置: src/commands/agents/index.ts
功能描述: 管理 Agent 配置。
触发条件: 用户输入 /agents
核心逻辑:
- 懒加载 Agent 管理界面
- 支持多 Agent 配置
/exit - 退出 REPL
文件位置: src/commands/exit/index.ts
功能描述: 退出 REPL 会话。
别名: /quit
触发条件: 用户输入 /exit
特性:
immediate: true- 立即执行,不等待 AI 响应
/bridge - 远程控制
文件位置: src/commands/bridge/index.ts
功能描述: 连接此终端进行远程控制会话。
别名: /rc
触发条件: 用户输入 /remote-control [名称]
条件限制:
- 需要启用
BRIDGE_MODE功能 - 需要
isBridgeEnabled()返回 true
核心逻辑:
- 建立与 Claude Code 网页版的桥接连接
- 支持远程会话控制
命令注册机制
命令通过 src/commands.js 统一注册和管理:
export interface Command {
type: 'prompt' | 'local-jsx' | 'local'
name: string
description: string
aliases?: string[]
load?: () => Promise<any>
getPromptForCommand?: (args: string, context: CommandContext) => Promise<ContentBlockParam[]>
allowedTools?: string[]
contentLength?: number
progressMessage?: string
source?: 'builtin'
isEnabled?: () => boolean
isHidden?: boolean
supportsNonInteractive?: boolean
argumentHint?: string
}
懒加载机制
大多数命令使用懒加载模式:
const command = {
type: 'local-jsx',
name: 'example',
load: () => import('./example.js'),
}
这确保只有实际使用的命令才会加载其代码,优化启动性能。
权限控制
某些命令支持 isEnabled() 方法动态控制可用性:
const command = {
type: 'local',
name: 'doctor',
isEnabled: () => !isEnvTruthy(process.env.DISABLE_DOCTOR_COMMAND),
load: () => import('./doctor.js'),
}
相关源码文件
| 命令 | 源码路径 |
|---|---|
| commit | src/commands/commit.ts |
| review | src/commands/review.ts |
| compact | src/commands/compact/ |
| mcp | src/commands/mcp/ |
| config | src/commands/config/ |
| doctor | src/commands/doctor/ |
| login | src/commands/login/ |
| logout | src/commands/logout/ |
| memory | src/commands/memory/ |
| skills | src/commands/skills/ |
| tasks | src/commands/tasks/ |
| vim | src/commands/vim/ |
| diff | src/commands/diff/ |
| cost | src/commands/cost/ |
| theme | src/commands/theme/ |
| context | src/commands/context/ |
| resume | src/commands/resume/ |
| share | src/commands/share/ |
| desktop | src/commands/desktop/ |
| mobile | src/commands/mobile/ |
| permissions | src/commands/permissions/ |
| agents | src/commands/agents/ |
| exit | src/commands/exit/ |
| bridge | src/commands/bridge/ |