主题
Claude Code 进阶使用
拆解 Claude Code 的扩展能力:Skills、Hooks、MCP、Subagents 四个核心概念各自解决什么问题、配置放在哪里,以及 Plan 模式、print 模式、ultrathink、自定义指令与规则和权限配置的用法。
目录
一、核心概念
1. Skills
Skills 本质上是打包好的、可重复使用的工作流,相当于一份操作指南。
核心功能是「按需加载指令集」:只有当用户显式调用特定技能,或者 Claude 根据任务判断该技能相关时,它才会被读入上下文。
1. 自定义 skills
一个典型的 Skill 目录结构如下:
text
my-skill/
├── SKILL.md # 核心文件
├── assets/ # 资源文件(可选)
├── scripts/ # 脚本文件(可选)
├── references/ # 参考文件(可选)
└── templates/ # 模板文件(可选)SKILL.md 是 Skill 的入口,由 YAML 元数据和 Markdown 主体两部分构成:YAML 元数据定义技能名称与描述触发场景,Markdown 主体描述分步操作和示例。
元数据常用字段:
| 字段 | 是否必填 | 约束 | 作用 |
|---|---|---|---|
name | 必填 | 1–64 字符,仅小写字母、数字和连字符(-),不能以连字符开头/结尾,不得含连续连字符(--),必须与父目录名一致 | 技能唯一标识 |
description | 必填 | 1–1024 字符,非空,应同时说明「做什么」和「何时用」,含便于代理匹配的关键词 | 自动发现与触发的关键,模型仅凭此字段判断是否加载该技能 |
license | 可选 | 许可证名称或对许可证文件的引用 | 声明开源协议 |
metadata | 可选 | 任意 key-value 字符串对,建议 key 具有唯一性以避免冲突 | 相当于自定义标签,可存放版本等信息 |
allowed-tools | 可选 | 空格分隔的预批准工具列表(实验性,各实现支持度不一) | 限制该技能可调用的工具白名单 |
可通过 skill-creator 创建 skills 模板:
bash
npx skills add https://github.com/anthropics/skills --skill skill-creator安装之后,在 Claude Code 中运行 /skill-creator 即可使用。
2. 官方 skills
通过 /skills 指令查看已安装的技能,官方 skills 库:https://skills.sh/。
| 技能 | 说明 |
|---|---|
web-design-guidelines | 对 UI 代码进行多维度合规性审计,含 100+ 规则 |
frontend-design | 优化页面 |
vercel-react-best-practices | React 最佳实践 |
vue-best-practices | Vue 3 最佳实践 |
skill-creator | 创建技能模板 |
安装命令:
bash
npx skills add https://github.com/vercel-labs/agent-skills --skill web-design-guidelines
npx skills add https://github.com/anthropics/skills --skill frontend-design
npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-best-practices
npx skills add https://github.com/hyf0/vue-skills --skill vue-best-practices
npx skills add https://github.com/anthropics/skills --skill skill-creator2. Hooks
Hooks 是在特定事件触发时自动执行的脚本,用于自定义工作流、拦截危险操作、自动格式化代码等,通过 /hooks 查看。
2.1 版本中目前共有 5 类钩子:
| 钩子 | 触发时机与用途 |
|---|---|
PreToolUse | 在 Claude 执行任何工具(如 Bash、Write、Edit)之前触发;rtk 就是在这个钩子里压缩输入信息,从而减少 Token 使用量 |
PostToolUse | 工具成功执行后触发,可用于记录审计日志、执行后续清理等操作 |
PostToolUseFailure | 工具执行失败时触发,用于捕获失败信息、记录错误原因以便分析 |
PermissionDenied | 某操作因权限控制系统返回错误(权限被拒绝)时触发,提供了一个在失败后修复问题的最后机会 |
Notification | 处理 Claude Code 发出的各种通知事件,例如把任务完成、请求用户输入转发到桌面通知 |
3. MCP
1. 核心概念
MCP(Model Context Protocol)是 AI 的扩展接口标准,通过添加 MCP 服务器可以扩展 Claude Code 获取外部工具、资源、服务的能力。
2. 作用域
安装 MCP 等附加功能时,Claude Code 有三种作用域。
本地范围
这是很多命令的默认行为,配置文件位于项目特定路径 ~/.claude.json 中。在某个目录下安装服务器时,Claude 会把该服务器的配置与这个路径关联起来,因此只对当前项目生效,是项目私有的配置。
例如安装 @modelcontextprotocol/server-github:
bash
claude mcp add github npx -y @modelcontextprotocol/server-github@modelcontextprotocol/server-github 是 GitHub API 集成,与项目上下文强相关,因此 Claude Code 判定为默认的「本地范围」,会在 ~/.claude.json 中新增配置:
json
{
"D:/a/vite-ts-react": {
"allowedTools": [],
"mcpContextUris": [],
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {}
}
}
}
}用户范围
配置文件位于用户目录的 ~/.claude/settings.json,属于全局配置,本机任何 Claude Code 项目都可以使用。
例如安装 chrome-devtools-mcp:
bash
claude mcp add chrome-devtools npx chrome-devtools-mcp@latestchrome-devtools-mcp 用于浏览器测试,属于全局通用的开发者工具,适合在任何项目中复用,因此 Claude Code 自动选择「用户范围」,配置写入 ~/.claude/settings.json:
json
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest"]
}
}
}使用示例:
text
打开 http://localhost:3000 看看实际效果,与设计图做对比或者:
text
用 Chrome 浏览器打开 https://example.com,然后通过 chrome devtools mcp 完成以下任务:
1. 截取页面截图
2. 提取所有链接
3. 分析页面结构
4. 获取页面性能数据项目范围
配置文件位于项目根目录的 .mcp.json,这个文件可以提交到 Git 仓库,让团队其他成员共享相同的配置,适用于团队协作。
4. Subagents
Subagents 是可以并行处理任务的独立 AI 代理,每个子代理拥有独立的 200K 上下文窗口,可以分配不同任务以提高效率。
例如执行 /batch 指令进行批量修改,或执行 /simplify 指令进行代码审查,都会调用子智能体去执行任务。
创建方式:输入 /agents,选择 Library,再选择 Create new agent。
例如已有两个子智能体 .claude/agents/code-simplifier.md 和 .claude/agents/verify-app.md,在 Claude Code 中这样使用:
text
使用 code-simplifier agent 优化刚才写的代码
使用 verify-app agent 验证应用是否正常工作执行子代理时会生成很多 worktree 分支,可以按命名批量删除:
powershell
git branch | Select-String 'worktree-agent-' | ForEach-Object { git branch -D $_.ToString().Trim() }二、高级功能
1. Plan 计划模式
Plan 模式是一种「先规划、后执行」的工作模式。
text
/plan提示:也可以按两次 Shift+Tab 切换。
2. print 非交互式模式
print 模式是非交互式模式:claude 只负责输出,不会进入交互式对话界面。
1. 基本用法
bash
# 从管道输入
git diff 021a03 | claude -p "解释这些更改"
# 从文件输入
cat file.txt | claude -p "总结这个文件"
# 直接指定
claude -p "检查代码质量" < src/main.js|(管道符):将左侧命令的标准输出(stdout)作为右侧命令的标准输入(stdin)。-p:进入非交互式模式。
2. GitHub Actions 集成示例
yaml
# .github/workflows/claude-review.yml
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "20"
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Run Code Review
run: |
git diff origin/main...HEAD | claude -p "审查这个 PR 的代码变更" > review.txt
- name: Comment PR
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.txt', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: review
});3. ultrathink 深度思考模式
当你需要设计复杂的缓存层或重构架构时,在提示词中加上 ultrathink,claude code 会分配更多的上下文额度,缺点是更耗 Token。
text
# 标准模式
设计一个 Redis 缓存层
# ultrathink 模式
ultrathink: 设计一个高可用的 Redis 缓存层,考虑:
- 缓存穿透、缓存击穿、缓存雪崩
- 分布式锁
- 缓存更新策略
- 降级方案4. 自定义指令
通过自定义指令,可以把复杂的「人机对话」变成简单的「命令行指令」。
在 .claude/commands/ 目录创建 Markdown 文件,例如 commit-push-pr.md:
markdown
---
description: 你是一个发布助手,当要发布的时候执行
---
1. 检查 Git 状态
!git status重启 Claude Code 后,执行 /commit-push-pr。
5. 自定义规则
在 .claude/rules/ 目录创建 Markdown 文件,可通过元信息 paths 限制规则的生效范围,或配置 allowed_extensions 指定允许处理的文件扩展名列表。
例如只希望 AI 在处理 src/service/** 目录下的文件时遵循 API 开发规范,项目目录结构如下:
text
your-project/
├── .claude/
│ └── rules/
│ ├── code-style.md # 编码风格规则(通用)
│ ├── testing.md # 测试规则(通用)
│ └── api-rules.md # API 开发规范(仅作用于特定路径)创建 .claude/rules/api-rules.md:
markdown
---
paths:
- "src/service/**/*.ts"
name: API 开发规范
description: 项目 API 层的编码与安全标准
---
# API 开发规则
1. **必须** 使用 TypeScript 严格模式(`"strict": true`)。
2. **必须** 为所有 API 添加中文注释。保存文件后重启 Claude Code,提问「你知道我们项目的 API 开发规范吗?」;再让它「按照 api 规则帮我重构对应文件」,AI 会将 service 文件夹下的函数或类型接口等都加上中文注释。
三、开放权限
1. 使用启动命令
bash
claude --permission-mode acceptEdits --allowedTools "Read,Write,Edit,Bash,Git,Npm,Pip"2. 配置文件
~/.claude/settings.json:
json
{
"permissions": {
"initialPermissionMode": "acceptEdits",
"allow": [
"Read",
"Write",
"Edit",
"Bash",
"Git",
"Npm",
"Pip",
"Grep",
"Glob"
],
"deny": ["Rm", "Ssh", "Sud"]
}
}