Claude Code 使用指南
快速入门
初始化项目
/init # 生成 CLAUDE.md 文件配置文件说明
CLAUDE.md- 项目级配置,建议提交到 GitCLAUDE.local.md- 个人配置,已自动忽略
核心功能
文件与上下文管理
文件引用
@文件路径- 引用指定文件,帮助 Claude 定位上下文支持在 CLAUDE.md 中使用此语法
Ctrl+V粘贴图片
记忆管理
/compact- 压缩上下文,保留关键信息/clear- 清空当前会话上下文直接告诉claude更新信息到CLAUDE.md
工作模式
Plan Mode
Shift + Tab切换模式Claude 会先制定执行计划并确认
适用于复杂任务和多步骤操作
Thinking Levels
"Think"→"Think more"→"Think a lot"→"Think longer"→"Ultrathink"从快速响应到深度分析,适用于不同复杂度的问题
快捷键与命令
快捷键
系统命令
!命令- 执行 bash 命令(零延迟)/init- 初始化项目/compact- 压缩上下文/clear- 清空上下文/vim- 开启 Vim 模式/statusline- 自定义状态栏显示内容/context- 查看 Token 消耗详情/stats- 查看使用统计/usage- 查看使用限额/hooks- 配置生命周期钩子/rename 名称- 重命名当前会话/resume 名称- 按名称恢复会话/export- 导出完整对话记录
会话管理
/init— 让 Claude 为项目生成 CLAUDE.md 文档/rename 名称— 重命名当前会话/resume 名称— 按名称恢复会话/export— 导出完整对话记录claude --continue— 继续上一个会话claude --resume— 选择要恢复的会话
自定义命令
在
.claude/commands/创建.md文件文件名即命令名,内容为执行说明
支持参数:
$ARGUMENTS- 全部参数$1, $2, $3...- 位置参数
示例:
# ~/.claude/commands/review-pr.md
Review PR #$1 with priority $2 and assign to $3
# 使用
/review-pr 456 high aliceCLI 模式
claude -p "任务"— 无交互模式执行任务claude --continue— 继续上一个会话claude --resume— 选择要恢复的会话claude --teleport 会话ID— 从网页会话同步到本地claude --dangerously-skip-permissions— YOLO 模式(跳过所有确认,需谨慎使用)
MCP 扩展
什么是 MCP
Model Context Protocol - Anthropic 的开放标准协议,连接 AI 与外部工具
安装与配置
安装服务器
claude mcp add <name> npx <package>
claude mcp add my-server file:///path/to/server权限配置 编辑 .claude/settings.local.json:
{
"permissions": {
"allow": ["mcp__服务器名"],
"deny": []
}
}推荐服务器
MCP 管理
claude mcp list- 查看已安装服务器claude mcp remove <name>- 移除服务器npx @modelcontextprotocol/inspector- 测试服务器@<server-name>- 在对话中引用 MCP 资源
完整配置示例
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"]
},
"github": {
"command": "npx",
"args": ["-y", "@composio/mcp@latest", "github"]
}
},
"permissions": {
"allow": ["mcp__filesystem", "mcp__github"],
"deny": []
}
}注意事项
MCP 服务器可访问敏感数据,只安装可信任的服务器
某些服务器需要额外认证(如 GitHub OAuth)
企业环境建议严格控制允许的服务器列表
配置更改后需重启 Claude Code
Claude Code SDK
概述
Claude Code SDK 允许你在自己的应用程序和脚本中编程调用 Claude Code。它提供与终端版相同的功能,但可以集成到自动化工作流中。
主要特性
支持 TypeScript、Python 和 CLI
继承项目目录下的 Claude Code 设置
默认只读权限(安全考虑)
流式输出,实时获取响应
适合集成到大型工具链和自动化流程
基础用法
TypeScript 示例:
import { query } from "@anthropic-ai/claude-code";
const prompt = "查找 ./src/queries 目录中的重复查询";
for await (const message of query({ prompt })) {
console.log(JSON.stringify(message, null, 2));
}Python 示例:
from anthropic_claude_code import query
import json
prompt = "分析这个项目的代码质量"
async for message in query(prompt=prompt):
print(json.dumps(message, indent=2))权限控制
默认只有读权限。启用写权限:
for await (const message of query({
prompt: "重构这个函数",
options: {
allowedTools: ["Edit", "Write"] // 允许编辑和创建文件
}
})) {
console.log(message);
}实际应用场景
Git Hooks - 自动审查代码变更
构建脚本 - 代码分析和优化
CI/CD 集成 - 代码质量检查
文档生成 - 自动生成项目文档
代码维护 - 批量重构和清理
在 Hook 中使用 SDK
SDK 的强大之处在于可以在 Hook 中调用,实现"Claude 审查 Claude":
Hook 配置:
{
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "node scripts/ai-review.js"
}]
}]
}scripts/ai-review.js:
import { query } from "@anthropic-ai/claude-code";
async function reviewCode() {
const filePath = process.env.CLAUDE_TOOL_INPUT_file_path;
// 针对不同文件类型的智能审查
if (filePath?.endsWith('.java')) {
const prompt = `
审查 ${filePath} 的代码质量:
1. 检查是否符合 Java 命名规范
2. 查找潜在的空指针异常
3. 评估方法复杂度
4. 检查是否有重复代码
`;
for await (const message of query({ prompt })) {
if (message.type === 'text' && message.text.includes('问题')) {
console.error(`代码审查发现问题:\n${message.text}`);
}
}
}
}
reviewCode();Java/Python 特定示例
Java 项目质量检查:
const javaPrompt = `
分析 src/main/java 目录:
1. 找出所有未使用的导入
2. 检查是否有违反 SOLID 原则的类
3. 识别可以使用 Java 8+ 特性优化的代码
`;
for await (const message of query({
prompt: javaPrompt,
options: { allowedTools: ["Read", "Grep"] }
})) {
// 处理分析结果
}Python 依赖分析:
prompt = """
检查 Python 项目依赖:
1. 找出 requirements.txt 中未使用的包
2. 检查是否有安全漏洞
3. 建议版本升级
"""
async for message in query(prompt=prompt):
if message.get('type') == 'text':
print(message['text'])最佳实践
性能优化 - SDK 调用会启动新的 Claude 实例,注意控制频率
错误处理 - 始终处理可能的异常和超时
成本控制 - 每次调用都会产生 API 费用
权限最小化 - 只授予必要的工具权限
Hooks 自动化
概述
Hooks 允许你拦截和控制 Claude 的工具调用,在执行前后运行自定义命令,实现精细化的访问控制和工作流自动化。
Hook 类型
基础 Hook
PreToolUse - 工具执行前运行
可阻止操作(返回 exit code 2)
用于访问控制、验证检查
PostToolUse - 工具执行后运行
不能撤销已完成的操作
用于后续处理、通知反馈
扩展 Hook
Notification - Claude 请求权限或闲置60秒时触发
Stop - Claude 完成响应后运行
SessionStart/End - 会话开始/结束时执行
UserPromptSubmit - 用户提交提示词时触发
可监控的工具
💡 提示:使用 MCP 服务器时会增加新的工具类型,可直接询问 Claude 查看当前可用工具列表。
配置位置
优先级从低到高:
~/.claude/settings.json- 全局配置.claude/settings.json- 项目配置(团队共享).claude/settings.local.json- 个人配置(不提交)
使用 /hooks 命令可视化管理。
Hook 数据结构
Hook 命令通过标准输入接收 JSON 数据:
{
"session_id": "2d6a1e4d-6...",
"transcript_path": "/Users/sg/...",
"hook_event_name": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "/code/queries/.env"
}
}不同 Hook 类型的输入结构差异较大,开发时建议先使用调试 Hook 了解数据格式:
{
"PostToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "jq . > debug/hook-data.json"
}]
}]
}返回码规则
环境变量
Hook 脚本可访问:
CLAUDE_SESSION_ID- 当前会话 IDCLAUDE_TRANSCRIPT_PATH- 会话记录文件路径CLAUDE_HOOK_EVENT_NAME- Hook 事件名称CLAUDE_TOOL_NAME- 工具名称CLAUDE_TOOL_INPUT_*- 工具参数(如CLAUDE_TOOL_INPUT_file_path)CLAUDE_PROJECT_ROOT- 项目根目录标准输入 - 完整的 JSON 数据
实战示例
1. 阻止访问敏感文件
{
"PreToolUse": [{
"matcher": "Read|Grep",
"hooks": [{
"type": "command",
"command": "python -c \"import sys, json; data=json.load(sys.stdin); path=data['tool_input'].get('file_path',''); sys.exit(2 if '.env' in path else 0)\" 2>&1 | tee -a /dev/stderr"
}]
}]
}2. Java 代码格式化
{
"PostToolUse": [{
"matcher": "Write|Edit|MultiEdit",
"hooks": [{
"type": "command",
"command": "bash -c 'if [[ \"$CLAUDE_TOOL_INPUT_file_path\" == *.java ]]; then google-java-format -i \"$CLAUDE_TOOL_INPUT_file_path\" 2>/dev/null || true; fi'"
}]
}]
}3. Python 类型检查
{
"PostToolUse": [{
"matcher": "Edit|Write|MultiEdit",
"hooks": [{
"type": "command",
"command": "bash -c 'if [[ \"$CLAUDE_TOOL_INPUT_file_path\" == *.py ]]; then mypy \"$CLAUDE_TOOL_INPUT_file_path\" 2>&1 | head -20 || true; fi'"
}]
}]
}4. Java 编译检查
{
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "bash -c 'if [[ \"$CLAUDE_TOOL_INPUT_file_path\" == *.java ]]; then javac -Xlint:all \"$CLAUDE_TOOL_INPUT_file_path\" 2>&1 | head -20; rm -f \"${CLAUDE_TOOL_INPUT_file_path%.java}.class\" 2>/dev/null; fi'"
}]
}]
}5. 阻止危险命令
{
"PreToolUse": [{
"matcher": "Execute",
"hooks": [{
"type": "command",
"command": "bash -c 'if echo \"$CLAUDE_TOOL_INPUT_command\" | grep -qE \"rm.*-rf|:(){ :|:& };:\"; then echo \"危险命令被阻止\" >&2; exit 2; fi'"
}]
}]
}6. Python 代码风格检查
{
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "bash -c 'if [[ \"$CLAUDE_TOOL_INPUT_file_path\" == *.py ]]; then flake8 \"$CLAUDE_TOOL_INPUT_file_path\" --max-line-length=120 2>&1 | head -10 || true; fi'"
}]
}]
}高级应用
1. 使用 SDK 进行 AI 代码审查
结合 Claude Code SDK 实现智能代码审查:
{
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "node scripts/ai-code-review.js"
}]
}]
}scripts/ai-code-review.js:
import { query } from "@anthropic-ai/claude-code";
async function aiCodeReview() {
const filePath = process.env.CLAUDE_TOOL_INPUT_file_path;
// Java 代码审查
if (filePath?.endsWith('.java')) {
const prompt = `
审查 ${filePath}:
1. 是否存在重复的业务逻辑
2. 是否有潜在的并发问题
3. 是否符合项目的设计模式
`;
for await (const message of query({ prompt })) {
if (message.type === 'text') {
console.log("AI 代码审查结果:", message.text);
}
}
}
// Python 代码审查
if (filePath?.endsWith('.py')) {
const prompt = `
审查 ${filePath}:
1. 是否有重复的函数定义
2. 是否正确处理了异常
3. 是否有性能优化空间
`;
for await (const message of query({ prompt })) {
if (message.type === 'text') {
console.log("AI 代码审查结果:", message.text);
}
}
}
}
aiCodeReview();2. 会话管理
{
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "echo \"会话开始: $(date)\" >> .claude/session.log"
}]
}],
"SessionEnd": [{
"hooks": [{
"type": "command",
"command": "python scripts/backup_session.py"
}]
}]
}3. 依赖安全检查
{
"PostToolUse": [{
"matcher": "Edit",
"hooks": [{
"type": "command",
"command": "bash -c 'if [[ \"$CLAUDE_TOOL_INPUT_file_path\" == *requirements.txt ]]; then safety check --json 2>&1 | jq -r \".vulnerabilities | length\"; fi'"
}]
}]
}Hook 与 SDK 协同工作
Hook 和 SDK 的结合使用可以创建强大的自动化工作流:
Hook 作为触发器 - 监听 Claude 的操作
SDK 作为执行器 - 执行复杂的 AI 任务
双向反馈 - SDK 的结果可以影响原始 Claude 的行为
示例工作流:
Claude 修改代码 → Hook 触发 → SDK 审查代码 →
反馈给 Claude → Claude 根据反馈优化代码最佳实践
性能考虑 - Hook 会影响响应速度,保持命令轻量
错误处理 - 总是处理异常情况,避免阻塞 Claude
日志记录 - 将重要操作记录到日志文件
团队协作 - 将通用 hooks 放在项目配置,个人偏好放在 local 配置
安全第一 - 使用 PreToolUse 建立安全边界
调试先行 - 开发新 Hook 前先用日志 Hook 了解数据结构
SDK 集成 - 对于复杂的代码分析任务,考虑使用 SDK
常见问题
Q: Hook 执行失败会怎样? A: PreToolUse 失败(返回码2)会阻止工具执行,PostToolUse 失败不影响已完成的操作。
Q: 如何调试 Hook? A: 使用 jq . > debug.json 记录输入数据,或在脚本中添加日志输出。
Q: Hook 对性能的影响? A: 简单的 Hook(如格式化)影响很小,复杂操作(如 AI 审查)会明显增加延迟。
Q: Hook 和 SDK 的区别? A: Hook 是被动响应 Claude 的操作,SDK 是主动调用 Claude 执行任务。两者可以结合使用。
Q: 如何在 Hook 中使用 SDK? A: 在 Hook 脚本中导入 SDK,创建新的 Claude 实例进行分析。注意这会产生额外的 API 调用费用。
Skills 功能详解
Skills 是 Claude Code 的智能能力扩展系统,让你能够将专业知识、工作流程和最佳实践封装成模块化组件。与 Hooks(事件驱动)和 SDK(编程调用)不同,Skills 通过自然语言理解实现智能激活。
核心概念
什么是 Skills
Skills 本质上是一个包含 SKILL.md 文件的文件夹,它教会 Claude 如何处理特定领域的任务。就像《黑客帝国》中 Neo 瞬间学会功夫一样,Skills 让 Claude 即时获得专业能力。
工作原理
元数据预加载 - Claude 启动时加载所有 Skills 的元数据(约 100 tokens)
智能识别 - 根据用户需求和上下文,Claude 自主判断需要哪个 Skill
按需加载 - 仅在需要时加载完整 Skill 内容,避免上下文膨胀
专家模式 - 加载后 Claude 按照 Skill 定义的专业方式处理任务
Skill 结构
基本结构
my-skill/
├── SKILL.md # 必需:核心定义文件
├── instructions.md # 可选:详细操作指南
├── templates/ # 可选:代码模板
├── examples/ # 可选:使用示例
└── resources/ # 可选:参考资料SKILL.md 格式
---
name: skill-name
description: 简短描述这个 Skill 的用途
version: 1.0.0
tags: [tag1, tag2, tag3]
---
# Skill 名称
## 功能概述
详细描述这个 Skill 能做什么
## 核心能力
- 能力1:具体描述
- 能力2:具体描述
- 能力3:具体描述
## 使用场景
描述什么情况下应该使用这个 Skill
## 工作流程
1. 步骤1
2. 步骤2
3. 步骤3部署方式
Skills 可以部署在三个位置:
全局 Skills -
~/.claude/skills/个人所有项目都可使用
适合通用工具类 Skills
项目 Skills -
.claude/skills/仅在当前项目中可用
适合项目特定的 Skills
远程 Skills - 通过 URL 或包管理器
社区共享的 Skills
第三方提供的专业 Skills
实战示例
1. Spring Boot 开发 Skill
创建一个完整的 Spring Boot 开发助手:
.claude/skills/spring-boot-expert/SKILL.md:
---
name: spring-boot-expert
description: Spring Boot 全栈开发专家,提供架构设计和代码生成
version: 2.0.0
tags: [java, spring, backend, microservices]
---
# Spring Boot Expert
## 核心能力
### 1. 项目架构
- 创建标准的分层架构(Controller, Service, Repository)
- 配置多模块项目结构
- 设置环境配置(dev, test, prod)
### 2. 代码生成
- 自动生成 CRUD 操作
- 创建 RESTful API 端点
- 生成 Swagger/OpenAPI 文档
### 3. 最佳实践
- 统一异常处理
- 全局响应封装
- 分页查询优化
- 缓存策略实施
## 激活场景
- 用户提到 Spring Boot、JPA、REST API
- 创建 Java 微服务项目
- 需要数据库操作代码
## 工作流程
1. 分析需求,确定实体和业务逻辑
2. 生成项目结构和配置文件
3. 创建实体类和数据库映射
4. 实现服务层和控制器
5. 添加测试用例templates/entity.java:
package ${package}.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "${table_name}")
public class ${EntityName} {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(name = "created_at")
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
updatedAt = LocalDateTime.now();
}
@PreUpdate
protected void onUpdate() {
updatedAt = LocalDateTime.now();
}
}2. React 组件开发 Skill
.claude/skills/react-component-builder/SKILL.md:
---
name: react-component-builder
description: React 组件开发专家,支持 TypeScript 和现代 Hooks
version: 1.5.0
tags: [react, typescript, frontend, components]
---
# React Component Builder
## 核心能力
### 1. 组件创建
- 函数组件与 Hooks
- TypeScript 类型定义
- 组件性能优化
### 2. 状态管理
- useState, useReducer 最佳实践
- Context API 应用
- 自定义 Hooks 开发
### 3. 样式方案
- CSS Modules
- Styled Components
- Tailwind CSS 集成
## 代码规范
- 使用函数组件而非类组件
- Props 使用 TypeScript 接口定义
- 组件按功能拆分,保持单一职责
- 使用 React.memo 优化渲染性能templates/component.tsx:
import React, { useState, useCallback, memo } from 'react';
import styles from './${ComponentName}.module.css';
interface ${ComponentName}Props {
title: string;
onAction?: (value: string) => void;
}
export const ${ComponentName} = memo<${ComponentName}Props>(({
title,
onAction
}) => {
const [value, setValue] = useState('');
const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
const newValue = e.target.value;
setValue(newValue);
onAction?.(newValue);
}, [onAction]);
return (
<div className={styles.container}>
<h2>{title}</h2>
<input
type="text"
value={value}
onChange={handleChange}
className={styles.input}
/>
</div>
);
});
${ComponentName}.displayName = '${ComponentName}';3. 代码审查 Skill
.claude/skills/code-reviewer/SKILL.md:
---
name: code-reviewer
description: 智能代码审查专家,提供安全、性能和质量分析
version: 3.0.0
tags: [review, quality, security, performance]
---
# Code Reviewer
## 审查维度
### 1. 代码质量
- 命名规范检查
- 函数复杂度分析
- 代码重复检测
- SOLID 原则遵循
### 2. 安全审查
- SQL 注入风险
- XSS 攻击防护
- 敏感信息暴露
- 依赖漏洞扫描
### 3. 性能优化
- 算法时间复杂度
- 数据库查询优化
- 内存泄漏检测
- 异步操作优化
## 审查流程
1. 静态代码分析
2. 潜在问题识别
3. 改进建议生成
4. 优先级排序
## 输出格式
- 🔴 严重问题:必须修复
- 🟡 警告:建议改进
- 🟢 建议:可选优化
- 💡 最佳实践提示创建自定义 Skills
方法一:使用 skill-creator
最简单的方式是使用官方的 skill-creator:
# 在 Claude 中运行
/skill-creator "创建一个 Python FastAPI 开发专家 Skill"Claude 会自动生成完整的 Skill 结构。
方法二:手动创建
创建 Skill 文件夹
mkdir -p .claude/skills/my-custom-skill编写 SKILL.md
--- name: my-custom-skill description: 我的自定义技能 version: 1.0.0 --- # 技能内容...添加支持文件
模板文件
示例代码
参考文档
高级特性
1. 动态模板
Skills 可以根据项目上下文动态调整行为:
## 代码生成策略
根据项目环境自动适配:
- 检测到 TypeScript → 生成类型安全代码
- 检测到 ESLint → 遵循项目代码规范
- 检测到测试框架 → 同时生成测试用例2. Skill 组合
多个 Skills 可以协同工作:
---
name: fullstack-developer
dependencies: [react-expert, node-backend, database-designer]
---
# 全栈开发者 Skill
整合前端、后端和数据库设计能力3. 条件激活
通过关键词和模式匹配控制激活:
---
name: performance-optimizer
activation_keywords: [slow, optimize, performance, 性能优化]
activation_patterns: ["查询.*慢", "页面.*卡顿"]
---Skills vs 其他功能
最佳实践
单一职责 - 每个 Skill 专注一个领域
清晰文档 - 明确说明能力边界和使用场景
示例驱动 - 提供丰富的代码示例
版本管理 - 使用语义化版本号
性能考虑 - 避免在元数据中包含大量内容
测试验证 - 创建测试场景验证 Skill 行为
调试技巧
查看已加载 Skills
/skills测试 Skill 激活
# 使用相关关键词测试 "帮我创建一个 Spring Boot 项目" # 应该激活 spring-boot-expert检查 Skill 内容
cat .claude/skills/my-skill/SKILL.md
社区资源
常见问题
Q: Skills 会增加 token 消耗吗? A: 元数据始终加载(约 100 tokens),完整内容仅在需要时加载。
Q: 如何防止 Skill 误激活? A: 使用明确的 activation_keywords 和描述,避免过于宽泛的触发条件。
Q: Skills 可以调用外部 API 吗? A: Skills 本身不能,但可以指导 Claude 使用 MCP 工具或生成调用 API 的代码。
Q: 项目 Skills 会覆盖全局 Skills 吗? A: 是的,项目级 Skills 优先级更高。
Q: 如何共享我的 Skills? A: 可以发布到 GitHub,或提交到社区 Skills 仓库。