# Claude Code 斜杠命令全盘点（源码调查素材）

> 基于 `claude-code/src/commands/`（约 101 个文件）+ `src/commands.ts`。
> 注册：COMMANDS() 数组（commands.ts:258）对外约 60 个；INTERNAL_ONLY_COMMANDS（:225）仅内部；feature() 门控一批。loadAllCommands()（:449）= bundledSkills → 内置插件技能 → 目录技能 → 工作流 → 插件命令 → 插件技能 → 硬编码命令。
> 类型（types/command.ts）：local-jsx（渲染终端 UI）/ local（本地函数）/ prompt（生成提示词发模型）。
> 分发：processUserInput → parseSlashCommand → findCommand（精确匹配，commands.ts:688）→ getMessagesForSlashCommand（processSlashCommand.tsx:525）。全部命令懒加载（index.ts 只存元数据，load: () => import(...)）。

## 一、全部内置命令总表

### 1. 会话管理
| 命令 | 类型 | 说明 |
|---|---|---|
| /clear（别名 reset/new） | local | 清空对话历史开启新会话（实质是一次"软重启"，见深度剖析） |
| /compact | local | 清空历史但保留摘要；可带参数自定义摘要指令 |
| /resume（别名 continue） | local-jsx | 恢复之前的对话：弹选择器或按 ID/标题搜索 |
| /branch（别名 fork） | local-jsx | 在当前节点分叉出对话分支 |
| /rewind（别名 checkpoint） | local | 把代码和/或对话回滚到之前的检查点 |
| /rename | local-jsx · immediate | 重命名当前对话；无参自动生成名字 |
| /export | local-jsx | 导出对话为 .txt 或复制到剪贴板 |
| /copy | local-jsx | 复制最后一条回复；/copy N 取倒数第 N 条 |
| /exit（别名 quit） | local-jsx · immediate | 退出 REPL |
| /session（别名 remote） | local-jsx | 显示远程会话 URL 和二维码 |
| /btw | local-jsx · immediate | 不打断主对话、快速问一个支线小问题 |
| /plan | local-jsx | 开启计划模式或查看当前计划 |
| /share /summary /teleport /onboarding /backfill-sessions | 内部 stub | 内部专用，外部构建为空壳 |

### 2. 模型与配置
| 命令 | 类型 | 说明 |
|---|---|---|
| /model | local-jsx | 设置主循环模型；无参弹选择器，有参直接切换 |
| /effort | local-jsx | 设置模型 effort 档位 low/medium/high/max/auto |
| /fast | local-jsx | 开关 fast 模式 |
| /advisor | local | 设置/取消 advisor 模型 |
| /config（别名 settings） | local-jsx | 打开设置面板 |
| /output-style | local-jsx（已废弃） | 提示改用 /config |
| /statusline | prompt | 派 statusline-setup 子代理配置状态栏 |
| /theme | local-jsx | 更换终端主题 |
| /color | local-jsx · immediate | 设置本会话提示条颜色 |
| /vim | local | Vim/Normal 编辑模式切换 |
| /keybindings | local | 打开或创建键位配置文件 |
| /terminal-setup | local-jsx | 安装 Shift+Enter 换行键绑定 |
| /voice | local（特性门控） | 切换语音模式 |
| /brief | local-jsx · immediate（KAIROS） | 切换极简回复模式 |

### 3. 上下文与记忆
| 命令 | 类型 | 说明 |
|---|---|---|
| /memory | local-jsx | 选择并用编辑器打开记忆文件（CLAUDE.md 系列） |
| /init | prompt | 扫描代码库，生成/改进 CLAUDE.md（新版还可生成技能与 hooks） |
| /context | local-jsx | 彩色网格可视化当前上下文占用 |
| /add-dir | local-jsx | 添加新工作目录 |
| /insights | prompt | 分析所有会话生成 HTML 洞察报告（115KB，懒加载） |
| /files | local（内部） | 列出上下文中的所有文件 |

### 4. 任务与代码
| 命令 | 类型 | 说明 |
|---|---|---|
| /review | prompt | 评审 PR（本地走 gh pr diff 让模型写评审） |
| /ultrareview | local-jsx | 在 Claude Code on the web 跑 10-20 分钟深度找 bug |
| /security-review | prompt | 对待提交改动做安全评审 |
| /commit | prompt（本快照仅内部） | 分析改动创建 git commit |
| /commit-push-pr | prompt（内部） | 提交、推送、建 PR 一条龙 |
| /pr-comments | prompt | 拉取 PR 评论（已迁为插件的过渡壳） |
| /diff | local-jsx | 查看未提交改动和逐轮 diff |
| /tasks（别名 bashes） | local-jsx | 列出并管理后台任务 |
| /agents | local-jsx | 管理子代理配置 |
| /skills | local-jsx | 列出可用技能 |
| /hooks | local-jsx · immediate | 查看 hook 配置 |
| /mcp | local-jsx · immediate | 管理 MCP 服务器 |
| /plugin（别名 plugins/marketplace） | local-jsx · immediate | 管理插件与市场（10+ 子界面） |
| /reload-plugins | local | 应用待生效的插件变更 |
| /ultraplan | local-jsx（门控） | 云端起草 10-30 分钟高级计划 |
| /ide | local-jsx | 管理 IDE 集成 |
| /sandbox | local-jsx · immediate | 沙箱开关与配置 |

### 5. 权限与安全
| 命令 | 类型 | 说明 |
|---|---|---|
| /permissions（别名 allowed-tools） | local-jsx | 管理 allow/ask/deny 规则（含"重试被拒操作"） |
| /privacy-settings | local-jsx | 隐私设置 |
| /doctor | local-jsx | 诊断安装与设置 |
| /login | local-jsx | 登录/切换 Anthropic 账户（OAuth2+PKCE） |
| /logout | local-jsx | 登出 |

### 6. 远程与协作
| 命令 | 类型 | 说明 |
|---|---|---|
| /desktop（别名 app） | local-jsx | 在 Claude Desktop 中继续会话 |
| /mobile（别名 ios/android） | local-jsx | 显示移动 App 下载二维码 |
| /chrome | local-jsx | Claude in Chrome 设置 |
| /install-github-app | local-jsx | 配置 Claude GitHub Actions（完整向导） |
| /install-slack-app | local | 安装 Slack 应用 |
| /remote-env | local-jsx | 配置远程环境 |
| /web-setup | local-jsx | 设置 Claude Code on the web |
| /bridge | local-jsx（门控） | Remote Control 桥接 |
| /feedback（别名 bug） | local-jsx | 提交产品反馈 |

### 7. 信息与帮助
| 命令 | 类型 | 说明 |
|---|---|---|
| /help | local-jsx | 帮助与全部命令（渲染运行时命令注册表） |
| /status | local-jsx · immediate | 版本、模型、账户、API 连通性 |
| /cost | local | 会话总成本与耗时（纯本地账本） |
| /usage | local-jsx | 套餐用量限制 |
| /extra-usage | local-jsx | 限额用尽后的额外用量配置 |
| /stats | local-jsx | 使用统计与活跃度 |
| /release-notes | local | 版本更新日志 |
| /upgrade | local-jsx | 升级 Max 套餐 |
| /passes | local-jsx | 分享免费周给好友 |
| /stickers | local | 订购贴纸（彩蛋） |
| /think-back | local-jsx（门控） | 年度回顾 |
| /heapdump | local（隐藏） | JS 堆转储到桌面 |

### 8. 其他说明
- createMovedToPluginCommand.ts：命令迁往插件的兼容壳工厂（/pr-comments、/security-review 在用）
- 快照中不存在的特性门控命令：/proactive、/assistant、/fork（独立版）、/workflows、/subscribe-pr、/torch、/peers、/buddy 等
- REMOTE_SAFE_COMMANDS（commands.ts:619）：远程模式只留 17 个纯本地 UI 命令；BRIDGE_SAFE_COMMANDS（:651）：手机/网页端可远程触发 6 个：/compact、/clear、/cost、/summary、/release-notes、/files
- 外部构建中 19 个 .js 命令目录是死代码空壳（isEnabled:()=>false）

## 二、代表命令深度剖析

### /clear —— 不只是"清屏"
入口 clear/clear.ts:4 → conversation.ts:49 clearConversation()：
1. 先执行 SessionEnd hooks（1.5s 超时，:68-74）
2. 上报 tengu_cache_eviction_hint 提示服务端驱逐提示缓存（:77-85）
3. 后台 agent 任务和主会话任务（Ctrl+B）存活，前台任务一律 kill（:93-107、135-166）
4. setMessages([]) 清空消息，更新 conversationId 强制重绘（:109-122）
5. clearSessionCaches() 清会话缓存（保留存活 agent 私有状态）、重置 cwd、清文件读取缓存/已发现技能/嵌套记忆路径（:124-132）
6. 重置 AppState：文件历史快照、attribution、MCP 客户端全部重置（触发重连），保留 pluginReconnectKey（:168-191）
7. regenerateSessionId({setCurrentAsParent:true}) 新会话 ID（旧 ID 记为 parent 血缘分析），存活任务的 TaskOutput 符号链接指向新会话目录（:203-224）
8. 重新持久化 mode/worktree 状态，执行 SessionStart hooks 注入消息（:230-250）
一句话：不重启进程完成一次"软重启"，连分析血缘、后台任务存活、hook 生命周期都考虑到。

### /compact —— 派 fork agent 写摘要
入口 compact/compact.ts:40：
1. 投影掉被 snip 的消息；用户参数作为自定义摘要指令（:46-52）
2. 无自定义指令先试 session memory compaction（更便宜的渐进路径 :57-83）
3. 传统路径：先 microcompact（就地压缩旧工具结果），再 compactConversation()（services/compact/compact.ts:387）
4. PreCompact hooks 可注入额外摘要指令（mergeHookInstructions）；streamCompactSummary（:451）；返回 prompt too long 则截掉最旧轮次重试，最多 MAX_PTL_RETRIES（:460-491）
5. **fork agent 缓存共享路径**（:1151-1203）：runForkedAgent 派只跑 1 轮（maxTurns:1）、无工具的子代理，带与主线程完全相同的系统提示/工具/消息前缀命中 prompt cache（注释：旧路径 98% 缓存未命中、每天浪费约 38B token）；失败回退普通流式（:1280-1326）
6. 摘要模板 BASE_COMPACT_PROMPT（services/compact/prompt.ts:61）：9 个固定小节（Primary Request/Key Technical Concepts/Files and Code Sections/Errors and fixes/Problem Solving/All user messages/Pending Tasks/Current Work/Optional Next Step）
7. buildPostCompactMessages 重建消息序列：压缩边界+摘要+保留近期消息
一句话：不是删消息，而是"用缓存友好的 fork 子代理把旧对话写成结构化摘要，以摘要为新地基重建会话"。

### /init —— 一段超长"采访剧本"
入口 commands/init.ts:226（prompt 型）。命令本身不扫描——返回提示词让主模型自己干活：
- 旧版（:6-26）：让模型分析代码库写 CLAUDE.md，明确"该写"（构建/lint/测试命令、高层架构）和"不该写"（显而易见的建议、逐文件罗列）
- 新版（:28-224）：8 阶段剧本——P1 AskUserQuestion 问建项目/个人文件；P2 派子代理调研代码库；P3 采访用户补盲；P4/5 写文件（每行过"删掉会不会让 Claude 犯错"测试）；P6 创建技能；P7 创建 hooks；P8 总结
一句话：prompt 型命令的极致形态——"命令即剧本"。

### /memory —— 打开编辑器，而非对话
入口 memory/memory.tsx:83：clearMemoryFileCaches() 预热 getMemoryFiles()，渲染 MemoryFileSelector；选定后 mkdir -p、wx 旗标创建、editFileInEditor() 用 $VISUAL/$EDITOR 打开（:21-58）。
注意：本快照**没有 `#` 快捷记忆前缀**——inputModes 只有 !/普通等模式；记忆体系=/memory 命令+memdir 自动记忆+SessionMemory。

### /model —— 选择器+双层持久化
model/model.tsx：无参渲染 ModelPicker，setAppState 更新 mainLoopModel（内存态 :50-56），同时 updateSettingsForSource("userSettings",{effortLevel})（ModelPicker.tsx:234）持久化；带参走 SetModelAndClose：isModelAllowed 组织允许名单→资格检查→validateModel→落盘；/model default 恢复默认。

### /permissions —— 规则面板+"重试被拒操作"
permissions/permissions.tsx：PermissionRuleList 五标签页（recent/allow/ask/deny/workspace）；规则来自分层 settings 并标注来源；applyPermissionUpdate 内存生效+persistPermissionUpdate 写文件；检测被遮蔽规则；onRetryDenials 把最近被拒命令包成 createPermissionRetryMessage 塞回队列让模型重试。

### /login —— PKCE OAuth+本地回环监听
login/login.tsx:19 → ConsoleOAuthFlow（components/ConsoleOAuthFlow.tsx）：
1. OAuthService 生成 PKCE code_challenge+state，拼授权 URL（services/oauth/client.ts:47-87）
2. 起临时 localhost HTTP 服务器监听 /callback（auth-code-listener.ts:10-16），浏览器授权后自动捕获 code 校验 state；3 秒没跳转则显示手动粘贴框（:157-181）
3. 换 token 后 installOAuthTokens 存安全存储
4. 收尾（login.tsx:25-55）：onChangeAPIKey() 重建客户端、stripSignatureBlocks 剥旧 thinking 签名、resetCostState()、刷新托管设置/特性旗标、重新 enrollTrustedDevice、authVersion+1 触发重取鉴权数据
一句话：标准 OAuth2+PKCE，双通道（回环自动/手动粘贴）保证 SSH 无浏览器环境也能完成。

### /resume —— 会话考古学家
resume/resume.tsx：无参时 getWorktreePaths+loadSameRepoMessageLogs+filterResumableSessions 渲染 LogSelector（支持语义搜索）；选中后 checkCrossProjectResume——同仓库 worktree 直接恢复，不同项目**不恢复**而是拼 `claude --resume ...` 命令复制到剪贴板（:145-164）；带参先 UUID 精确匹配再按标题搜；读的是 ~/.claude/projects/<项目>/<sessionId>.jsonl 转录文件。

### /cost —— 纯本地账本
cost/cost.ts:6：订阅用户显示订阅提示；API 用户 formatTotalCost()（cost-tracker.ts:228）输出总成本/时长/代码增删行/按模型分组 token 用量（含 cache 读写）；数据全部来自进程内累计器，不发网络请求。local 型命令的典型：纯函数格式化内存计数。

### /help —— 把命令表渲染成标签页
help/help.tsx 返回 <HelpV2 commands={commands}/>：General（快捷键）+Commands 两标签页，遍历 getCommands() 过滤后的全量命令（内置+技能+插件+MCP），formatDescriptionWithSource 标注来源。本身没有静态帮助文本，是运行时命令注册表的镜子。

### /doctor —— 安装环境体检
doctor/doctor.tsx → getDoctorDiagnostic()（utils/doctorDiagnostic.ts:514）：探测安装类型（npm-global/native/package-manager/development）、版本、多重安装冲突（给具体卸载命令）、自动更新权限、ripgrep 状态、沙箱依赖、shell 别名、上下文告警。全本地，"自检脚本 UI 化"。

### /review 与 /ultrareview —— 一本地一云端双胞胎
/review（prompt 型，review.ts:34-47）：LOCAL_REVIEW_PROMPT 让模型自己跑 gh pr list/view/diff 按"概述/代码质量/改进建议/风险"输出——注入一段 SOP。
/ultrareview（local-jsx，review/ultrareviewCommand.tsx）：checkOverageGate 检查余额→launchRemoteReview 创建 CCR 远程会话发评审提示，注册 RemoteAgentTask 轮询把云端结果以 task-notification 回灌本地。

### /commit —— prompt 命令教科书（本快照仅内部）
commands/commit.ts:76：提示词嵌四处 `!\`...\`` 预执行：git status、git diff HEAD、git branch --show-current、git log --oneline -10（:16-19）——发给模型前本地执行，输出替换进文本；allowedTools 白名单只放行 git add/status/commit；提示词本体是"Git 安全协议"（不改 config、不跳 hooks、不 amend、不提交疑似密钥）+两段式任务（起草聚焦 why 的 message→HEREDOC 单条消息 stage+commit+署名）。

## 三、自定义命令机制

### 加载位置（skills/loadSkillsDir.ts:638-803）
四处来源：managed 策略目录、~/.claude/、项目目录（cwd 向上到 home 每个 .claude/）、--add-dir；另有插件命令（loadPluginCommands.ts:414）。
两种格式：新格式 .claude/skills/<name>/SKILL.md（只认目录 :407）；旧格式 .claude/commands/*.md（:566 标 commands_DEPRECATED）。
命名空间：子目录变冒号前缀——.claude/commands/frontend/lint.md → /frontend:lint（buildNamespace :523-552）；插件命令带 plugin:command 前缀。同名按 realpath 先到先得（:725-763）。

### 模板能力（getPromptForCommand :344-399）
1. **参数替换**（utils/argumentSubstitution.ts）：$ARGUMENTS 全部参数；$ARGUMENTS[0]/$0 第 N 个；命名参数 frontmatter `arguments: ticketId priority` 后 $ticketId；没写占位符自动追加 \n\nARGUMENTS: <args>（:140-142）
2. **shell 预执行**（utils/promptShellExecution.ts:69）：行内 `!\`cmd\`` 与块级 ```! 两种语法，发出前由 BashTool（或 shell:powershell）执行，stdout/stderr 替换进文本；执行前过 hasPermissionsToUseTool；技能的 allowed-tools 临时并入 always-allow；**安全红线**：MCP 加载的技能一律跳过 shell 预执行（:371-374）——远程内容不可信
3. **变量注入**：${CLAUDE_SKILL_DIR}、${CLAUDE_SESSION_ID}
4. **执行方式**：默认 inline 展开进当前对话；frontmatter context:fork 时作为子代理运行（executeForkedSlashCommand，processSlashCommand.tsx:62），可配 agent: 指定类型

### frontmatter 字段全表（parseSkillFrontmatterFields :185-265）
description / allowed-tools / argument-hint / arguments / when_to_use / version / model（可 inherit）/ effort / disable-model-invocation（模型不能调）/ user-invocable（用户不能敲）/ hooks / context(fork) / agent / paths（条件技能 glob）/ shell / name

### prompt 命令完整生命周期
用户敲 /my-cmd arg1 → getMessagesForPromptSlashCommand（processSlashCommand.tsx:827）→ 注册技能 hooks → addInvokedSkill 记录 → 生成命令元数据消息+isMeta 展开正文 → 解析 @文件 附件 → 附 command_permissions 附件 → shouldQuery:true 发模型。

## 四、immediate: true 的特殊性
- 定义：立即执行不等停止点（绕过队列）
- 为什么：模型忙碌时普通输入排队，但纯本地 UI 命令（改主题、看状态）等待体验差
- 实现：REPL.tsx:3158-3184——shouldTreatAsImmediate = queryGuard.isActive && (command.immediate || fromKeybinding)；命中直接 load().call()，绕过排队管线，上报 tengu_immediate_command_executed
- 拥有者：/btw、/color、/exit、/hooks、/mcp、/plugin、/rename、/sandbox、/status、/brief；/model、/effort、/fast 条件启用（shouldInferenceConfigCommandBeImmediate，utils/immediateCommand.ts:11）；**任何键位触发的命令一律 immediate**
- 护栏：远程桥接（手机/网页）输入另有 isBridgeSafeCommand（commands.ts:672）：local-jsx 一律拒绝、prompt 放行、local 需白名单——防止手机端弹出本地 Ink 选择器（PR #19134 教训）
