claude-code-learn_
05COMMANDS & SKILLS

05 - 斜杠命令与 Skills

斜杠命令和 Skills 是两种不同的"能力入口",用户层看起来都像 /xxx,但内部实现与生效方式差别很大。

读完你能回答

问题
/help 和 /init 虽然都是斜杠命令,处理方为什么不一样?
Skill 是由模型触发还是用户触发?两者都可以吗?
想固化一段"复杂工作流"给以后复用,该用斜杠命令还是 Skill?
同名 Skill 出现在全局和项目里,哪个生效?

两种入口的路径差异

客户端内置/help客户端本地执行不经过模型
模型可见/init展开为 prompt → user 消息进入 Agent Loop
Skill/skill-name加载 SKILL.md 全文进入 Agent Loop

关键差异:客户端内置命令根本不经过模型;模型可见命令和 Skill 都会进入 Agent Loop,但加载的内容不同。

斜杠命令

斜杠命令是客户端层面的快捷入口,由 CLI 或 IDE 客户端直接解析。

类型 举例 处理方 模型感知
客户端内置 /help /clear /model /login /logout 客户端本地执行 否
模型可见 /init /review 等 展开为 prompt 发给模型 是(像用户说了那句话)
外部插件 用户自定义 客户端分发 视实现

客户端内置命令(代表)

命令 作用
/help 打开帮助
/clear 清空当前会话上下文
/model 切换当前使用的模型
/login /logout 账号登录态管理
/config 打开配置面板

这类命令不消耗 token,执行过程模型看不到。

模型可见命令

这类命令被客户端展开为一段预定义提示词插入 user 消息,再进入正常的 Agent Loop。对模型而言和普通用户输入没有本质区别,只是内容是结构化的。

展开 /init 的展开路径

用户输入 /init,客户端内部大致等价于:

<user turn 被替换成>
请阅读当前仓库的结构和关键文件,生成一份 CLAUDE.md,
其中包含:主要目录作用、技术栈、测试约定、代码风格、分支规范。
将生成的内容直接写入项目根的 CLAUDE.md。

模型收到这段 prompt,进入 Agent Loop,调用 Read / Glob / Grep 扫描仓库,最后用 Write 生成 CLAUDE.md。从用户视角看是"跑了一个命令",从模型视角看是"收到一段长指令"。

Skills

Skill 是一段可按名调用的工作流说明。它解决的问题是:某类任务有固定套路,与其每次让模型现想,不如把套路存下来,需要时由模型按需加载并执行。

定义

一个 Skill 是一个目录,最少包含一个 SKILL.md。

文件 内容
SKILL.md 说明文档,frontmatter 决定是否被触发,正文是工作指令
可选辅助脚本 Shell / Python 脚本,由 Skill 执行时调用
可选资源文件 模板、配置、参考数据
展开一个最小可跑的 SKILL.md
---
name: update-changelog
description: Update CHANGELOG.md with the latest diff. Use after shipping a feature.
---

# Update Changelog

1. Read the current CHANGELOG.md
2. Run `git log main..HEAD --oneline` to see what changed since last release
3. Group commits into Added / Changed / Fixed sections
4. Insert a new entry at the top with today's date
5. Write the file back

Keep entries concise — one line per change, user-facing language.

关键点:

  • frontmatter 里的 description 必须写清楚"什么时候用",因为这一行会进入系统提示词的 Skills 清单,模型就靠它判断该不该触发
  • 正文是写给模型的"工作手册",用命令式,步骤清晰
  • 目录里可以放辅助资产:scripts/check-format.sh、reference/style-guide.md 等,在 SKILL.md 里引用

目录结构:

.claude/skills/update-changelog/
├── SKILL.md                  ← 必需
├── scripts/
│   └── group-commits.sh      ← 可选辅助
└── reference/
    └── voice-examples.md     ← 可选参考

存放位置与优先级

路径 作用范围 优先级
~/.claude/skills/<name>/ 用户级,跨项目可用 低
<repo>/.claude/skills/<name>/ 项目级,仅该仓库会话中可见 高

同名 Skill 以项目级优先。这和 CLAUDE.md 的合并规则是一致的——越"具体"的越先生效。

调用路径

两种触发方式的区别:

  • 用户直接触发(/skill-name):客户端把它转成 Skill 工具调用
  • 模型自主触发:模型根据 Skills 清单里的 description 判断该用哪个 Skill
展开时序图:Skill 从触发到执行的完整往返

两者的边界

维度 斜杠命令 Skill
调用方式 客户端识别 模型识别并决定调用
生效范围 客户端范围内 会话范围内
内容位置 客户端代码里(固化) 文件系统里可编辑
谁可以自定义 客户端作者 用户
更新方式 升级客户端 改 SKILL.md 立即生效

选哪个?

你想做什么 选
快捷键式的客户端操作(切换模型、清屏) 斜杠命令(但你只能用已有的,无法自己加)
可复用的工作流(审 PR、生 changelog、做迁移) Skill
跨项目通用的规则 全局 Skill + ~/.claude/CLAUDE.md
项目特定的流程 项目 Skill + <repo>/CLAUDE.md

斜杠命令固化在客户端,你改不了;Skill 由用户自己维护。想要"自定义一个可复用的套路",答案永远是 Skill。