Appearance
10 — 命令系统 — Commands
概述
命令系统处理用户在 REPL 中输入的 斜杠命令(/command)。它与 Tool 系统的区别是:
- Tool 是模型调用的——模型决定什么时候用什么工具
- Command 是用户调用的——用户通过
/xxx直接触发
但两者有交集:某些命令(如 /compact)实际上调用了底层的服务(Compact Service),某些工具(如 SkillTool)实际上执行的是命令/Skill。
命令注册与路由
Command 接口
typescript
interface Command {
name: string // 命令名 (如 "compact")
description: string // 描述
aliases?: string[] // 别名 (如 compact 的别名 "c")
isEnabled?: (state) => boolean // 运行时条件启用
isHidden?: boolean // 是否在帮助中隐藏
// 两种执行方式 (通常二选一):
call?(args, context): Promise<CommandResult> // 后台执行,返回结果
userFacingComponent?(props): ReactNode // 交互式 UI 组件
}两种执行方式的区别:
call()适用于简单命令——执行后返回结果文本,不需要用户交互userFacingComponent()适用于复杂命令——渲染一个 React 组件,支持用户交互(如选择、确认)
模糊匹配
用户不需要输入完整命令名。/com 可以匹配到 /compact,/con 可以匹配到 /config 或 /context。如果有多个匹配,会提示歧义让用户选择。
命令分类
📝 会话管理
| 命令 | 说明 | 实现方式 |
|---|---|---|
/clear | 清除对话历史 | 重置 messages 数组 |
/compact | 压缩上下文 | 调用 Compact Service |
/resume | 恢复历史会话 | 读取会话存储,渲染选择器 |
/session | 会话管理 (列表/切换) | UI 组件 |
/export | 导出对话为文件 | 序列化 messages |
/share | 分享对话 | 上传到 API + 生成链接 |
/rename | 重命名会话 | 修改会话元数据 |
/copy | 复制到剪贴板 | 序列化最后回复 |
/summary | 生成摘要 | 调用模型 |
/rewind | 回退到之前的消息 | 截断 messages |
⚙️ 模型与配置
| 命令 | 说明 | 实现方式 |
|---|---|---|
/model | 切换模型 | 修改 AppState.mainLoopModel |
/config | 查看/修改配置 | 读写 settings.json |
/theme | 主题切换 | 修改颜色方案 |
/fast | 切换 Fast 模式 | 切换模型输出速度 |
/effort | 设置推理努力级别 | 修改 effort 参数 |
/output-style | 输出风格 | 修改输出格式 |
/permissions | 权限管理 | 查看/修改权限规则 |
/sandbox-toggle | 沙箱开关 | 切换沙箱状态 |
🔌 工具与扩展
| 命令 | 说明 | 实现方式 |
|---|---|---|
/mcp | MCP 服务器管理 | 列出/连接/断开 MCP 服务器 |
/plugin | 插件管理 | 安装/卸载/启用/禁用插件 |
/skills | 技能管理 | 列出可用 Skills |
/hooks | 用户钩子管理 | 查看已配置的 Hooks |
/ide | IDE 集成设置 | 配置 VS Code/JetBrains 集成 |
/terminalSetup | 终端设置 | 配置终端快捷键/集成 |
🔐 账户与认证
| 命令 | 说明 |
|---|---|
/login | 登录 Anthropic 账户 |
/logout | 登出 |
/install-github-app | 安装 GitHub App |
/install-slack-app | 安装 Slack App |
📊 信息查看
| 命令 | 说明 |
|---|---|
/help | 帮助信息 |
/status | 系统状态 |
/stats | 会话统计 |
/cost | 费用查看 |
/usage | Token 用量 |
/doctor | 诊断(检查环境是否正确配置) |
/context | 上下文信息(剩余 token、压缩状态等) |
/files | 会话中涉及的文件列表 |
🧪 功能模式
| 命令 | 说明 |
|---|---|
/vim | 切换 Vim 编辑模式 |
/voice | 语音模式 |
/plan | 规划模式(限制写操作) |
/tasks | 查看后台任务 |
/review | 代码审查模式 |
/memory | 查看/管理记忆 |
/keybindings | 快捷键设置 |
🔧 Git 相关
| 命令 | 说明 |
|---|---|
/diff | 查看文件 diff |
/branch | 分支管理 |
其他
| 命令 | 说明 |
|---|---|
/feedback | 提交反馈 |
/good-claude | 正面反馈(对模型好的回复点赞) |
/upgrade | 升级 Claude Code |
/teleport | Teleport(跨设备迁移会话) |
/desktop | Desktop App 提示 |
/mobile | Mobile App 提示 |
/bughunter | Bug 猎手模式 |
/add-dir | 添加额外工作目录 |
/stickers | 贴纸(彩蛋) |
Feature-gated 命令
某些命令只在特定构建版本中可用:
typescript
const bridge = feature('BRIDGE_MODE')
? require('./commands/bridge/index.js').default : null
const voiceCommand = feature('VOICE_MODE')
? require('./commands/voice/index.js').default : null这些命令在不支持的构建中不会出现在帮助列表中。
命令与 Query 循环的交互
某些命令会产生消息注入到对话中,触发 Query 循环。例如:
这种模式让命令可以复用模型的能力,而不需要自己实现逻辑。