Claude Code 不是一个更好的代码补全工具,它是一个AI Agent。
区别在哪里:
- 代码补全(Copilot):你告诉它写什么,它帮你打字
- Agent(Claude Code):你告诉它做什么,它自己规划、执行、调试,直到完成
这个区别意味着,Claude Code 能做的事情边界,取决于你对它的理解深度。
第一部分:安装与基本交互
安装
npm install -g @anthropic-ai/claude-code
claude --version
三种工作模式
默认模式:每次执行前询问确认
claude
# > 帮我创建一个 Flask 项目
# [需要执行 mkdir flask-project...] 确认?(y/n)
自动模式(--dangerously-skip-permissions):跳过所有权限确认
claude --dangerously-skip-permissions
# 适合:你完全信任 Claude Code 的操作,不想频繁确认
# 风险:Claude Code 会无提示删除/修改任何文件
规划模式(Plan Mode):先输出执行计划,确认后再执行
用户输入:重构这个模块,提取公共逻辑
Claude Code:
我的计划是:
1. 分析 utils.py、helpers.py 的共同函数
2. 创建 common.py 提取共同函数
3. 修改 utils.py 和 helpers.py 引用 common.py
4. 运行测试确认功能不变
是否按此计划执行?
规划模式是处理大型任务的最佳实践——先看计划,不满意就调整,再执行。
第二部分:MCP 集成
MCP 是 Claude Code 能力扩展的核心机制。
安装一个 MCP Server
以 Figma MCP Server 为例(让 Claude Code 能直接读取设计稿):
# 方法一:直接告诉 Claude Code
> 帮我安装 Figma MCP Server
# 方法二:手动配置 .claude/mcp.json
{
"mcpServers": {
"figma": {
"command": "npx",
"args": ["-y", "figma-developer-mcp"],
"env": {
"FIGMA_API_KEY": "your-api-key"
}
}
}
}
配置后,Claude Code 就能:
> 根据 Figma 设计稿 https://figma.com/file/xxx 实现这个登录页面
Claude Code 会自动调用 Figma MCP Server 获取设计稿内容,理解颜色、尺寸、布局,然后生成对应代码。
第三部分:Context 管理
为什么要管理 Context
长时间工作后,Claude Code 的 Context Window 会逐渐填满:
- 之前的对话历史
- 读取过的文件内容
- 工具调用结果
Context 满了会导致:响应变慢、遗忘早期内容、成本增加。
两种处理方式
压缩(/compact):保留关键信息,丢弃细节
> /compact
# Claude Code 会生成一个当前任务的摘要,替换完整历史
清除(/clear):完全清空,重新开始
> /clear
# 适合:当前任务完成,开始新任务
恢复历史会话:
claude --resume
# 显示最近的会话列表,选择要继续的
CLAUDE.md:项目级记忆文件
在项目根目录创建 CLAUDE.md,Claude Code 启动时会自动读取,相当于给它注入"项目上下文":
# 项目说明
这是一个 Django + React 的电商项目。
## 技术栈
- 后端:Django 4.2,PostgreSQL,Redis
- 前端:React 18,TypeScript,Tailwind CSS
- 部署:Docker + Nginx
## 编码规范
- 所有 Python 函数必须有类型注解
- 前端组件用函数式组件 + Hooks
- API 接口遵循 RESTful 规范
## 常用命令
- 运行测试:`python manage.py test`
- 启动开发服务器:`docker-compose up`
## 注意事项
- 不要直接修改 migrations 文件,让 Django 自动生成
- 环境变量在 .env 文件中,不要 hardcode
第四部分:Hook 机制
Hook 是 Claude Code 最强大也最少人用到的功能之一。
Hook 允许你在 Claude Code 的执行流程中插入自定义脚本,在特定事件发生时自动触发。
Hook 类型
| Hook 类型 | 触发时机 |
|---|---|
pre_tool_use | 工具调用前(可以拦截) |
post_tool_use | 工具调用后 |
stop | 任务完成时 |
notification | 需要用户注意时 |
配置 Hook
// .claude/hooks.json
{
"hooks": {
"pre_tool_use": [
{
"matcher": "bash",
"hooks": [{
"type": "command",
"command": "python /path/to/security-check.py"
}]
}
],
"post_tool_use": [
{
"matcher": "write_file",
"hooks": [{
"type": "command",
"command": "python /path/to/format-check.py"
}]
}
]
}
}
实际使用案例
安全检查:在 Claude Code 执行任何 bash 命令前,检查是否包含危险操作:
# security-check.py
import sys, json
tool_input = json.loads(sys.stdin.read())
command = tool_input.get("command", "")
DANGEROUS_PATTERNS = ["rm -rf", "DROP TABLE", "format", "> /dev/"]
for pattern in DANGEROUS_PATTERNS:
if pattern in command:
print(f"安全检查:检测到危险命令 '{pattern}',已拦截")
sys.exit(2) # 退出码 2 = 拦截此次工具调用
sys.exit(0) # 放行
自动格式化:每次写入 Python 文件后自动运行 Black 格式化:
# format-check.py
import sys, json, subprocess
tool_input = json.loads(sys.stdin.read())
file_path = tool_input.get("path", "")
if file_path.endswith(".py"):
subprocess.run(["black", file_path], capture_output=True)
print(f"已自动格式化:{file_path}")
第五部分:Agent Skill
见上一篇文章(第10篇)的详细介绍。
Claude Code 安装 Skill 后,AI 会自动识别何时使用它——不需要你每次手动调用。
第六部分:SubAgent
SubAgent 是 Claude Code 的多 Agent 协作机制。
场景:一个大型任务,不同部分需要不同专业能力。比如"把这个项目迁移到新框架"——需要分析现有代码、规划迁移路径、逐模块迁移、测试验证。
# 创建专门的 SubAgent
> 创建一个专注于测试的 SubAgent,负责这次迁移中的所有测试工作
# SubAgent 配置
~/.claude/subagents/test-agent/
├── AGENT.md # SubAgent 的 System Prompt
└── tools.json # 这个 SubAgent 可用的工具列表
# AGENT.md(测试专家 SubAgent)
你是一个测试工程师专家。你的职责是:
1. 为代码写单元测试和集成测试
2. 分析测试覆盖率,提出补充测试的建议
3. 执行测试,分析失败原因
你不负责写业务代码,只负责测试相关工作。
遇到需要修改业务代码才能修复的 Bug,告知主 Agent 处理。
Skill vs SubAgent 的区别:
| 维度 | Skill | SubAgent |
|---|---|---|
| 粒度 | 能力模块(如"代码审查") | 完整 Agent(有独立角色和工具集) |
| 生命周期 | 随会话存在 | 可以持久化,多任务复用 |
| 适合场景 | 标准化流程 | 专业化分工 |
第七部分:后台任务
Claude Code 支持在后台运行长时间任务,不阻塞当前会话:
# 启动后台任务
> 在后台帮我跑完整的测试套件,完成后告诉我结果
[后台任务 #1 已启动]
# 继续做其他事情...
> 帮我看一下这个函数有没有问题
# 后台任务完成后会通知你
[后台任务 #1 完成] 测试结果:128 通过,3 失败...
总结
Claude Code 的能力层次:
基础层:自然语言指令 + 文件操作 + 终端命令
扩展层:MCP(接入外部工具/服务)
智能层:Hook(拦截和增强执行流程)
能力层:Agent Skill(复用专业化工作流)
团队层:SubAgent(多角色协作)
效率层:后台任务 + Context 管理
每一层都是独立的,可以按需学习和使用。但理解完整的层次,才能知道面对不同类型的任务,该用哪一层的工具。