课程大纲 › 领域 3:Claude Code 配置与工作流
3.2 创建并配置自定义斜杠命令与 Skills
タスクステートメント3.2:カスタムスラッシュコマンドとスキルを作成し設定する
官方大纲原文(日文):知识 4 条 · 技能 5 条
需要掌握的知识
- .claude/commands/ 内のプロジェクトスコープのコマンド(バージョン管理を通じて共有)と、~/.claude/commands/ 内のユーザースコープのコマンド(個人用)の違い
- context: fork、allowed-tools、argument-hintなどのフロントマター設定をサポートするSKILL.mdファイルを備えた、.claude/skills/内のスキル
- スキルを分離されたサブエージェントのコンテキストで実行し、スキルの出力がメインの会話を汚染するのを防ぐためのcontext: forkフロントマターオプション
- 個人用のスキルのカスタマイズ:チームメイトに影響を与えないように、~/.claude/skills/内に別の名前で個人用のバリエーションを作成すること
需要能做到的事
- バージョン管理を通じてチーム全体で利用できるように、.claude/commands/内にプロジェクトスコープのスラッシュコマンドを作成する
- context: forkを使用して、冗長な出力(例:コードベース分析)や探索的なコンテキスト(例:代替案のブレインストーミング)を生成するスキルをメインセッションから分離する
- スキルのフロントマターでallowed-toolsを設定し、スキル実行中のツールアクセスを制限する(例:破壊的な操作を防ぐためにファイル書き込み操作に限定する)
- argument-hintフロントマターを使用して、開発者が引数なしでスキルを呼び出したときに必須パラメータの入力を促す
- スキル(タスク固有のワークフローのためのオンデマンド呼び出し)とCLAUDE.md(常に読み込まれる全体共通の標準)のどちらを使用するかを選択する
课程讲解 · AI 草稿,未经人工审核 以官方文档为准
这一条考什么
考你能否用自定义斜杠命令和 Skills 封装可复用的工作流:知道项目级(.claude/commands/、.claude/skills/,随 Git 共享)与用户级(~/.claude/commands/、~/.claude/skills/,仅个人)的区别;会用 SKILL.md 的前置信息 context: fork、allowed-tools、argument-hint;并能判断某条知识该做成按需调用的 Skill,还是放进始终加载的 CLAUDE.md。
核心概念
自定义斜杠命令:项目级 vs 用户级
斜杠命令就是一个 Markdown 文件,文件名即命令名:
.claude/commands/review.md→/review,放在仓库里,提交后全团队可用,并随团队迭代保持同步。~/.claude/commands/review.md→ 只有你自己能用,不影响他人。
命令文件中可以用 $ARGUMENTS 接收全部参数,或用 $1、$2 接收位置参数:
---
description: 按团队清单审查当前分支的改动
argument-hint: [目标分支,默认 main]
allowed-tools: Bash(git diff:*), Bash(git log:*), Read, Grep
---
对比当前分支与 $ARGUMENTS 的差异,按以下清单逐条检查:
1. 是否有未处理的错误分支
2. 新增 SQL 是否参数化
3. 公共 API 变更是否更新了文档
输出:文件:行号 + 问题 + 建议修复。一个典型考点:团队有一份审查清单,只在做代码审查时需要,平时写功能、调试时不需要。最合适的是做成 /review 命令(或 Skill),而不是塞进 CLAUDE.md 让每次会话都加载。
Skills:.claude/skills/<名字>/SKILL.md
Skill 是一个目录,核心是 SKILL.md,还可以附带脚本、模板、参考文档。前置信息常用字段:
name、description:描述决定模型何时自动选用该 Skill,也可由用户用/名字显式调用。allowed-tools:Skill 运行期间可用的工具白名单。argument-hint:用户输入/名字后提示需要什么参数,没带参数时提醒必填项。context: fork:让 Skill 在独立的子 Agent 上下文中运行。
---
name: analyze-module
description: 深度分析一个模块的结构、依赖和潜在问题,输出精简报告
argument-hint: <模块路径,例如 src/billing>
context: fork
allowed-tools: Read, Grep, Glob
---
分析 $ARGUMENTS:
1. 列出公共导出和主要调用方
2. 画出依赖关系(文字形式)
3. 指出循环依赖、过大的函数、缺少测试的路径
最后只返回不超过 30 行的摘要。context: fork:隔离冗长输出
代码库分析、头脑风暴多个替代方案,都会产生大量中间内容。如果在主会话里直接跑,这些内容会挤占上下文、干扰后续工作。context: fork 让 Skill 在一个分离的子 Agent 上下文中执行,只把最终结果带回主会话,主会话保持干净。
allowed-tools:限制 Skill 的能力
allowed-tools 限定 Skill 执行期间能用的工具。例如一个只负责生成文档的 Skill,只允许 Read, Grep, Glob, Write,不给 Bash,避免它执行破坏性命令;一个只读分析 Skill 则只给 Read, Grep, Glob。这是“最小权限”原则在 Skill 上的应用。
个人定制:起个不同的名字放到用户目录
想按自己的习惯修改团队 Skill,不要直接改仓库里的 .claude/skills/...(会影响所有人),而是在 ~/.claude/skills/ 下用不同的名字创建个人变体,例如团队有 migrate-component,你建 my-migrate-component。这样团队版本保持不变,同名冲突也不会发生。
Skill 还是 CLAUDE.md?
- CLAUDE.md:始终加载的、普遍适用的标准。每次会话都需要的东西:构建命令、命名约定、架构概述。
- Skill / 斜杠命令:按需调用的、针对特定任务的工作流。只在某类任务时才需要:组件迁移步骤、发布清单、审查清单。
把任务专用的长流程写进 CLAUDE.md,会让每次会话都背着无关指令;反过来把全局编码规范做成 Skill,会导致平时不调用时规范缺失。
正确做法与反模式
- 正确:团队共用的工作流放
.claude/commands/或.claude/skills/并提交。反模式:让每个开发者在~/.claude/下各自复制一份,版本不同步。 - 正确:产生大量输出的分析、探索类 Skill 加
context: fork。反模式:在主会话里直接运行,把上下文塞满中间结果。 - 正确:用
allowed-tools把 Skill 限制在完成任务所需的最少工具。反模式:不设限制,让文档生成 Skill 也能跑任意 Bash。 - 正确:必填参数用
argument-hint提示。反模式:靠口头约定,开发者不带参数调用后得到错误结果。 - 正确:个人变体以不同名字放
~/.claude/skills/。反模式:直接修改仓库里的团队 Skill 来满足个人偏好。 - 正确:任务专用流程做成 Skill,通用标准放 CLAUDE.md。反模式:把审查清单写进 CLAUDE.md 让所有任务都加载。
常见陷阱
- 放错位置导致不能共享:“放在每个人的
~/.claude/skills/”是典型干扰项,题目要求“全团队都能/migrate-component且保持同步”时,答案是仓库内.claude/skills/并提交。 - 编造配置方式:如“在 settings.json 里用某个字段注册 Skill”这类选项,Skill 是靠目录和 SKILL.md 发现的。
- 把仅在特定任务需要的内容放进 CLAUDE.md:题干强调“只在审查时需要、其他任务不需要”,就该选斜杠命令或 Skill。
- 用子 Agent 或 plan mode 代替简单命令:为一份清单专门建子 Agent 或强制 plan mode,属于过度设计。
- 误解 context: fork:它不是“并行执行”或“新开一个会话需要手动复制结果”,而是隔离执行、只返回结果。
- 把 Skill 当作强制格式化工具:需要“每次都必定执行”的确定性动作(如每次写文件后跑 Prettier),应该用 hooks,而不是 Skill。
实操练习
目标:创建一个团队共享的斜杠命令和一个带 context: fork 与 allowed-tools 的 Skill,并做一个个人变体。
- 在仓库中创建
.claude/commands/review.md(内容参考上文)。 - 创建
.claude/skills/analyze-module/SKILL.md,设置context: fork、allowed-tools: Read, Grep, Glob、argument-hint。 - 启动 Claude Code,输入
/analyze-module不带参数,观察参数提示;再带上src/billing运行。 - 运行后检查主会话:应该只看到摘要,而不是大量 Read/Grep 输出。
- 在
~/.claude/skills/my-analyze-module/SKILL.md建个人变体(如改成英文输出),确认团队版本未受影响。
mkdir -p .claude/commands .claude/skills/analyze-module ~/.claude/skills/my-analyze-module
cat > .claude/skills/analyze-module/SKILL.md <<'EOF'
---
name: analyze-module
description: 深度分析一个模块的结构和依赖,返回精简报告
argument-hint: <模块路径>
context: fork
allowed-tools: Read, Grep, Glob
---
分析 $ARGUMENTS 的公共导出、依赖与风险点,只返回 30 行以内的摘要。
EOF
sed 's/name: analyze-module/name: my-analyze-module/; s/摘要。/摘要,用英文输出。/' \
.claude/skills/analyze-module/SKILL.md > ~/.claude/skills/my-analyze-module/SKILL.md
git add .claude && git commit -m "Add review command and analyze-module skill"检查结果:同事拉取后能用 /review 和 /analyze-module,但看不到 /my-analyze-module;Skill 运行期间尝试写文件会被拒绝。
自测清单
.claude/commands/与~/.claude/commands/的区别是什么?团队清单该放哪?context: fork解决什么问题?适合哪两类 Skill?- 如何用
allowed-tools防止 Skill 执行破坏性操作? argument-hint在什么场景下有用?- 想按个人喜好修改团队 Skill,正确的做法是什么?
- 给出一个应放进 CLAUDE.md 的例子和一个应做成 Skill 的例子,并说明判断依据。
对应题目(2)
题目归类由 AI 判断,仅供参考。
练习这 2 道题