Claude Code
→ 返回工具
Anthropic 官方 CLI 工具,在终端中直接使用 Claude 进行编码,可读写文件、执行命令、搜索代码库,支持完整的软件开发工作流。
安装与启动
npm install -g @anthropic-ai/claude-code
claude # 启动交互式会话
claude "解释这个函数" # 单次查询
claude --help核心工具
| 工具 | 能力 |
|---|---|
| Read | 读取文件内容 |
| Write | 创建/覆写文件 |
| Edit | 精准替换文件中的片段 |
| Bash | 执行 shell 命令 |
| Glob | 按模式匹配文件路径 |
| Grep | 正则搜索文件内容 |
| Agent | 派发子 Agent 执行任务 |
| WebSearch / WebFetch | 网络搜索与页面抓取 |
常用斜杠命令
| 命令 | 说明 |
|---|---|
/help | 查看帮助 |
/clear | 清空当前会话上下文 |
/compact | 压缩对话历史,节省上下文 |
/config | 打开配置界面 |
/cost | 查看本次会话费用 |
/doctor | 诊断环境配置问题 |
/init | 在当前项目生成 CLAUDE.md |
/model | 切换使用的模型 |
/review | 代码审查 |
/vim | 切换 vim 键位模式 |
快捷键
| 快捷键 | 说明 |
|---|---|
Ctrl+C | 中断当前操作 |
Shift+Enter | 多行输入换行 |
↑ / ↓ | 翻历史消息 |
Esc Esc | 编辑上一条消息 |
MCP(模型上下文协议)
MCP Server 以统一协议向 Claude 暴露工具、数据源和提示模板,无需修改 Claude Code 本身即可扩展能力。
配置位置
~/.claude/settings.json # 全局,所有项目生效
.claude/settings.json # 项目级,优先级更高
配置格式
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
"description": "读写本地文件系统"
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"custom-server": {
"command": "python",
"args": ["/path/to/my_mcp_server.py"]
}
}
}传输方式
| 方式 | 场景 |
|---|---|
stdio | 本地进程,命令行工具(默认) |
SSE (HTTP) | 远程服务,多客户端共享 |
常用官方 Server
| Server | 能力 |
|---|---|
server-filesystem | 读写本地文件 |
server-github | 仓库、PR、Issue 操作 |
server-postgres | 只读 SQL 查询 |
server-brave-search | 网页搜索 |
server-memory | 持久化知识图谱 |
自定义 Python MCP Server
import mcp.server.stdio
from mcp.server import Server
from mcp.types import Tool, TextContent
app = Server("my-tools")
@app.list_tools()
async def list_tools() -> list[Tool]:
return [Tool(
name="query_db",
description="查询内部数据库",
inputSchema={
"type": "object",
"properties": {"sql": {"type": "string"}},
"required": ["sql"]
}
)]
@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "query_db":
result = execute_query(arguments["sql"])
return [TextContent(type="text", text=str(result))]
if __name__ == "__main__":
import asyncio
asyncio.run(mcp.server.stdio.run(app))Hooks(钩子)
在工具调用前后自动执行 shell 命令,实现自动化检查、格式化、通知等。
配置结构
{
"hooks": {
"PreToolUse": [
{
"matcher": "工具名或正则",
"command": "shell 命令",
"description": "说明"
}
],
"PostToolUse": [...],
"Stop": [...],
"Notification": [...]
}
}Hook 类型
| 类型 | 触发时机 | 可阻断 |
|---|---|---|
PreToolUse | 工具调用前 | 是(exit code 2) |
PostToolUse | 工具调用后 | 否 |
Stop | Claude 停止响应时 | 否 |
Notification | 收到系统通知时 | 否 |
matcher 语法
"Write" # 精确匹配工具名
"Write|Edit" # 匹配多个工具(OR)
"Bash" # 匹配所有 Bash 调用
".*" # 匹配所有工具
阻断机制
PreToolUse 中 exit code 返回 2 时,工具调用被阻断,stderr 内容作为错误反馈给 Claude。
#!/bin/bash
# 阻止删除 src/ 下的文件
if echo "$CLAUDE_TOOL_INPUT" | grep -q "rm.*src/"; then
echo "禁止删除 src/ 目录内容" >&2
exit 2
fi常用 Hook 示例
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$FILE_PATH\"",
"description": "保存后自动格式化"
},
{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$FILE_PATH\" 2>/dev/null || true",
"description": "自动修复 lint 问题"
}
],
"PreToolUse": [
{
"matcher": "Bash",
"command": "node scripts/hooks/block-dangerous-commands.js",
"description": "阻止危险命令"
}
],
"Stop": [
{
"command": "npm run build 2>&1 | tail -5",
"description": "会话结束验证构建"
}
]
}
}Hook 环境变量
| 变量 | 说明 |
|---|---|
$FILE_PATH | 被操作的文件路径(Write/Edit) |
$CLAUDE_TOOL_NAME | 当前工具名 |
$CLAUDE_TOOL_INPUT | 工具输入参数(JSON) |
Rules(规则)
Rules 是写给 Claude 的持久指令,控制行为风格、代码规范、工作流约定,每次会话自动加载。
配置层级
优先级(高→低):
1. 对话中的用户消息
2. 项目 CLAUDE.md(.claude/rules/)
3. 用户全局规则(~/.claude/rules/)
CLAUDE.md(项目说明)
项目根目录,描述架构、命令、约定:
# CLAUDE.md
## 命令
npm run dev # 开发服务器 http://localhost:5173
npm run build # 生产构建(先 tsc 再 vite build)
npm run test # 运行测试
## 架构
src/
├── views/ # 路由级页面
├── components/ # 通用组件
├── composable/ # Vue composable(状态逻辑)
├── utils/ # HTTP 工具层
└── router/ # 路由定义 + 守卫
## 约定
- TypeScript 严格模式,禁止 any
- 组件 PascalCase,文件 camelCase
- 提交格式:feat/fix/refactor: <描述>
- 禁止直接修改 main 分支全局规则文件(~/.claude/rules/)
按主题拆分,模块化管理:
~/.claude/rules/
├── common/
│ ├── coding-style.md # 不可变性、命名约定、文件组织
│ ├── git-workflow.md # 提交格式、PR 流程
│ ├── testing.md # TDD、覆盖率要求
│ ├── security.md # 安全检查清单
│ └── agents.md # Agent 编排规则
└── web/
├── coding-style.md # 前端组织结构
└── performance.md # Web 性能指标
规则文件示例:
# coding-style.md
## 不可变性(关键)
始终创建新对象,永远不要 in-place 修改:
- 错误:array.push(item)
- 正确:return [...array, item]
## 文件大小
- 单文件上限 800 行
- 函数上限 50 行
- 嵌套深度上限 4 层Memory(内存系统)
跨会话的文件持久化记忆,Claude 在会话开始时自动加载,积累用户偏好、项目上下文和协作反馈。
存储位置
~/.claude/projects/<project-hash>/memory/
├── MEMORY.md # 索引文件(必须),会话开始自动读取
├── user_profile.md # 用户角色、技术背景、偏好
├── project_xxx.md # 项目上下文、架构决策、里程碑
├── feedback_xxx.md # 协作反馈(做什么/不做什么)
└── reference_xxx.md # 外部资源指针(Linear、Grafana等)
MEMORY.md 索引格式
# Memory Index
- [用户信息](user_profile.md) — 全栈工程师,Vue + Java 技术栈
- [项目:博客前端](project_blog.md) — Vue3 博客,知识仓库集成 Quartz
- [反馈:代码风格](feedback_style.md) — 不要在回复末尾总结已做的事
- [参考:外部资源](reference_tools.md) — 常用工具链接记忆类型
| 类型 | 内容 | 示例 |
|---|---|---|
user | 用户角色、技术背景 | 「有10年Java经验,Vue新手」 |
project | 项目上下文、决策背景 | 「auth 重写是合规要求,非技术债」 |
feedback | 协作规范、行为纠正 | 「不要 mock 数据库,上次出了生产事故」 |
reference | 外部资源指针 | 「Bug 追踪在 Linear INGEST 项目」 |
记忆文件格式
---
name: 反馈:测试规范
description: 集成测试必须使用真实数据库
type: feedback
---
不要 mock 数据库做集成测试。
**Why:** 上季度 mock 测试全通过,但生产迁移失败,因为 mock 没有模拟真实的事务行为。
**How to apply:** 所有涉及数据库的测试必须连接真实测试库。Skills(技能)
Skills 是通过插件加载的可复用工作流文档,/skill-name 触发后 Claude 读取技能内容并按其流程执行。
触发方式
/tdd # 测试驱动开发
/code-review # 代码审查
/feature-dev # 完整功能开发流程
/security-scan # 安全扫描
/plan # 制定实现计划
技能执行流程
用户输入 /skill-name
→ Claude 加载技能文档(Skill 工具)
→ 宣告「使用 [skill] 来 [目的]」
→ 按技能文档中的步骤逐一执行
→ 每步完成后更新 TodoWrite 任务状态
自定义 Skill
在 ~/.claude/skills/ 或项目 .claude/skills/ 下创建 .md 文件:
---
name: api-review
description: 审查 REST API 设计,检查命名规范、幂等性、错误码
---
# API 审查流程
1. 检查 URL 命名:是否使用名词复数、kebab-case
2. 检查 HTTP 方法语义:GET 无副作用、POST 创建、PUT/PATCH 更新
3. 检查状态码:4xx 客户端错误、5xx 服务端错误、201 创建成功
4. 检查错误响应格式:统一 { code, message, data } 结构
5. 检查幂等性:PUT/DELETE 多次调用结果一致
6. 输出审查报告内置 Skills(ECC 插件提供)
多 Agent 模式
Claude Code 通过 Agent 工具将任务委派给子 Agent,支持并行执行和专业化分工。
基本模式
主 Agent(主对话)
├── 子 Agent 1:独立上下文,执行子任务 A
├── 子 Agent 2:独立上下文,执行子任务 B
└── 子 Agent 3:独立上下文,执行子任务 C
↓
主 Agent 汇总结果
子 Agent 特性:
- 拥有独立上下文,不共享主 Agent 的对话历史
- 可以使用全套工具(Read/Write/Bash 等)
- 完成后将结果作为文本返回给主 Agent
并行 vs 串行
# 并行(推荐,互不依赖的任务)
同时派发:
- Agent A:分析 auth 模块安全问题
- Agent B:分析 cache 模块性能瓶颈
- Agent C:检查 utils 类型错误
# 串行(有依赖关系时)
先 Agent A 研究方案 → 根据结果让 Agent B 实现
专用子 Agent 类型
通过 subagent_type 参数调用预定义的专业 Agent:
| subagent_type | 专长 |
|---|---|
planner | 制定实现计划 |
architect | 系统架构设计 |
code-reviewer | 代码质量审查 |
security-reviewer | 安全漏洞检测 |
tdd-guide | 测试驱动开发 |
build-error-resolver | 构建错误修复 |
typescript-reviewer | TypeScript 专项 |
performance-optimizer | 性能优化 |
典型使用场景
代码审查(多视角并行):
主 Agent 发现代码变更
├── security-reviewer:检查安全漏洞
├── typescript-reviewer:检查类型问题
└── performance-optimizer:检查性能问题
主 Agent 汇总三份报告
功能开发(串行流水线):
planner → 输出实现计划
→ tdd-guide → 编写测试
→ 主 Agent → 实现功能
→ code-reviewer → 审查代码
→ security-reviewer → 安全扫描
大规模重构(并行分模块):
主 Agent 分析模块依赖
├── Agent 1:重构 auth 模块
├── Agent 2:重构 api 模块
└── Agent 3:重构 utils 模块
主 Agent 整合并解决冲突
Worktree 隔离模式
子 Agent 在独立 git worktree 中工作,不影响主分支,完成后合并:
{
"isolation": "worktree"
}权限控制
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git add *)",
"Bash(git commit *)",
"Read(**)",
"Write(src/**)",
"Edit(src/**)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force*)"
]
}
}环境变量
| 变量 | 说明 |
|---|---|
ANTHROPIC_API_KEY | API 密钥 |
CLAUDE_MODEL | 默认模型 |
MAX_THINKING_TOKENS | 扩展思考 token 上限 |
CLAUDE_PLUGIN_ROOT | 插件根目录路径 |
IDE 集成
提供 VS Code 和 JetBrains 插件,在编辑器侧边栏直接使用,与终端版功能一致。
相关文档
- Claude — 底层模型介绍
- Everything Claude Code — Claude Code 增强插件
- MCP — MCP 协议详解
- Harness — Agent Harness 工程实践