Claude Code 大型代码库最佳实践培训指南

时间:2026-5-19    作者:悬浮的青春    分类:


Claude Code 大型代码库最佳实践培训指南

本指南基于 Anthropic 官方博客文章改编,旨在为团队提供系统化的 Claude Code 学习和培训材料。
适用于技术负责人、开发工程师、DevOps 工程师以及负责 Claude Code 部署和推广的团队成员。


目录

  1. 快速入门
  2. 概述与核心概念
  3. Claude Code 的工作原理
  4. 扩展点详解
  5. 配置模式与最佳实践
  6. 上下文管理高级技巧
  7. 完整工作流示例
  8. 组织管理与推广策略
  9. 实战案例与示例
  10. 安全最佳实践
  11. 故障排除与性能优化
  12. 常见反模式与错误
  13. 检查清单
  14. 常见问题解答
  15. 附录

1. 快速入门

1.1 安装 Claude Code

# 使用 npm 安装
npm install -g @anthropic-ai/claude-code

# 或使用 yarn
yarn global add @anthropic-ai/claude-code

# 验证安装
claude --version

1.2 基础配置

配置文件位置

用户级配置:
~/.claude/settings.json          # 全局设置
~/.claude/commands/              # 全局命令

项目级配置:
<project-root>/.claude/settings.json    # 项目设置
<project-root>/.claude/commands/        # 项目命令
<project-root>/CLAUDE.md               # 根目录上下文
<project-root>/<subdir>/CLAUDE.md      # 子目录上下文

最小配置示例

创建 .claude/settings.json

{
  "permissions": {
    "allow": [
      {
        "path": "src/**",
        "description": "允许编辑源代码目录"
      }
    ],
    "deny": [
      {
        "path": "node_modules/**",
        "reason": "依赖文件无需查看"
      }
    ]
  }
}

1.3 第一个会话

# 进入项目目录
cd my-project

# 启动 Claude Code
claude

# 询问项目结构
> 帮我分析这个项目的架构

# 让 Claude 执行任务
> 在 src/components 目录创建一个 Button 组件

1.4 快速进阶

# 使用斜杠命令
/help                    # 获取帮助
/clear                   # 清空上下文
/compact                 # 压缩对话历史

# 使用 @ 引用文件或目录
> 请参考 @src/utils/helpers.ts 中的函数

> 查看 @tests 目录的测试结构

1.5 常用命令速查表

斜杠命令

命令 说明 示例
/help 显示帮助信息 /help
/clear 清空当前会话上下文 /clear
/compact 压缩对话历史,节省上下文 /compact
/context 显示当前上下文使用情况 /context
/cost 显示当前会话的 token 消耗 /cost
/model 切换模型 /model claude-sonnet-4-6
/permissions 管理权限设置 /permissions
/mcp 管理 MCP 服务器 /mcp list

常用提示词模式

场景 提示词示例
代码生成 在 src/auth 目录创建用户登录功能
代码解释 解释 @src/utils/auth.ts 中的认证逻辑
Bug 修复 修复登录接口返回 500 错误的问题
代码重构 重构 @src/api/users.ts,提取公共逻辑
测试编写 为 @src/services/user.ts 编写单元测试
文档生成 为 @src/api/endpoints 生成 API 文档
代码审查 审查 @src/auth/login.ts 的安全性
性能优化 分析并优化 @src/utils/heavy-computation.ts

文件引用技巧

# 引用单个文件
> 请查看 @src/index.ts

# 引用目录
> 分析 @src/components 目录的结构

# 引用多个文件
> 比较 @src/v1/api.ts 和 @src/v2/api.ts 的差异

# 使用通配符
> 检查 @src/**/*.test.ts 中的所有测试文件

高效提示词技巧

  1. 明确范围:指定具体的目录和文件

    # 不好的提示词
    > 修复 bug
    
    # 好的提示词
    > 修复 @src/auth/login.ts 中处理登录请求时的空指针异常
  2. 提供上下文:解释背景和约束

    > 我们正在将 Express 4 升级到 Express 5,
    > 请帮我更新 @src/api/routes.ts 中的路由定义,
    > 确保兼容新版本的路由语法
  3. 分步骤:复杂任务分解

    > 第一步:分析 @src/utils/data-processor.ts 的性能瓶颈
    > 第二步:提出优化方案
    > 第三步:实现优化

2. 概述与核心概念

2.1 什么是大型代码库

"大型代码库"是一个广泛的概念,涵盖以下场景:

类型 特征 示例 典型规模
单体仓库(Monorepo) 统一版本控制,多项目共存 Google、Meta 内部仓库 百万-十亿行代码
遗留系统 数十年历史,技术栈陈旧 银行核心系统、企业 ERP 复杂度高,文档少
分布式架构 多个微服务,跨多个仓库 电商、SaaS 平台 数十-数百服务
多语言代码库 包含多种编程语言 游戏、嵌入式系统 语言差异大

2.2 Claude Code 的核心优势

Claude Code 采用智能体搜索(Agentic Search)而非传统的 RAG 方法:

┌─────────────────────────────────────────────────────────────┐
│                    传统 RAG 方法                              │
├─────────────────────────────────────────────────────────────┤
│  代码库 → 嵌入索引 → 向量数据库 → 查询检索 → 结果              │
│           ↑                                                 │
│        需要持续维护,容易过时                                  │
│        可能返回已删除/重命名的代码                             │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                   Claude Code 方法                           │
├─────────────────────────────────────────────────────────────┤
│  实时代码库 ← 直接访问 ← Claude Code                           │
│     ↑                                                       │
│  无需索引,始终最新                                            │
│  运行在开发者机器上                                            │
└─────────────────────────────────────────────────────────────┘

关键洞察:Claude Code 像软件工程师一样工作——遍历文件系统、读取文件、使用 grep 搜索、跟踪引用。它运行在开发者的机器上,不需要构建或维护代码库索引。

2.3 Harness 框架的重要性

关于 Claude Code 能力最常见的误解之一是它完全由所使用的模型决定。实际上,围绕模型的生态系统——即"Harness"——比模型本身更能决定 Claude Code 的表现

┌─────────────────────────────────────────────────────────────┐
│                      Claude Code 架构                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                      ┌─────────────┐                        │
│                      │  Claude 模型 │                       │
│                      └──────┬──────┘                        │
│                             │                               │
│              ┌──────────────┼──────────────┐               │
│              │              │              │               │
│     ┌────────▼────────┐    │    ┌────────▼────────┐        │
│     │   CLAUDE.md     │    │    │    Hooks        │        │
│     │   (上下文层)     │    │    │   (自动化层)    │        │
│     └─────────────────┘    │    └─────────────────┘        │
│                            │                               │
│     ┌────────────────┐    │    ┌────────────────┐         │
│     │    Skills      │    │    │   Plugins      │         │
│     │   (技能层)      │    │    │   (分发层)     │         │
│     └────────────────┘    │    └────────────────┘         │
│                            │                               │
│     ┌────────────────┐    │    ┌────────────────┐         │
│     │  MCP Servers   │    │    │   LSP/子智能体  │         │
│     │   (集成层)      │────┴───│   (增强层)     │         │
│     └────────────────┘         └────────────────┘         │
│                                                            │
└─────────────────────────────────────────────────────────────┘

2.4 扩展点优先级与构建顺序

团队构建这些扩展点的顺序很重要,因为每一层都构建在前一层之上:

优先级 扩展点 必要性 构建成本 预期收益
1 CLAUDE.md 必需
2 钩子(Hooks) 推荐
3 技能(Skills) 推荐
4 LSP 集成 推荐
5 MCP 服务器 可选 中-高
6 插件(Plugins) 可选
7 子智能体 可选

建议构建路径:

第 1 周:CLAUDE.md + 基础钩子
    ↓
第 2-4 周:技能开发 + LSP 集成
    ↓
第 2-3 月:MCP 服务器 + 插件
    ↓
长期:子智能体优化

3. Claude Code 的工作原理

3.1 智能体搜索 vs RAG

特性 RAG(检索增强生成) 智能体搜索(Claude Code)
索引方式 预先嵌入整个代码库 无需索引,实时访问
时效性 可能过时(小时到周) 始终反映当前状态
维护成本 需要持续更新索引 无额外维护
准确性 可能返回已删除/重命名的代码 始终最新
资源需求 需要服务器资源 本地运行
规模扩展 索引构建时间线性增长 无额外开销

3.2 上下文管理的重要性

Claude 的导航质量取决于代码库配置的质量。关键原则:

如果你要求 Claude 在十亿行代码中查找某种模糊模式的所有实例,你在工作开始前就会触及上下文窗口限制。

这意味着需要通过 CLAUDE.md 文件和技能来分层提供上下文

上下文层次结构:
┌─────────────────────────────────────────────────────────────┐
│  根目录 CLAUDE.md          ← 全局概览(200 行以内)          │
│    │                                                       │
│    ├── services/CLAUDE.md  ← 服务层约定                     │
│    │     │                                                 │
│    │     ├── auth/CLAUDE.md  ← 认证服务特定配置             │
│    │     └── payment/CLAUDE.md  ← 支付服务特定配置          │
│    │                                                       │
│    ├── frontend/CLAUDE.md  ← 前端约定                      │
│    │     └── components/CLAUDE.md  ← 组件约定               │
│    │                                                       │
│    └── 技能加载        ← 按需加载专业知识                   │
│          │                                                 │
│          ├── 安全审查技能   ← 安全相关任务时加载             │
│          ├── 数据库迁移技能 ← 数据库操作时加载               │
│          └── 部署技能       ← 部署相关任务时加载             │
└─────────────────────────────────────────────────────────────┘

4. 扩展点详解

4.1 CLAUDE.md 文件

4.1.1 核心概念

CLAUDE.md 是 Claude 在每次会话开始时自动读取的上下文文件。它们为 Claude 提供无需任何额外操作即可掌握的代码库知识。

关键特性:

  • 会话开始时自动加载
  • 无需开发者手动配置
  • 支持分层结构
  • 跟随版本控制共享

4.1.2 分层架构

my-project/
├── CLAUDE.md                    # 根目录:全局概览、关键注意事项
├── frontend/
│   └── CLAUDE.md               # 前端:React 约定、组件结构
├── backend/
│   └── CLAUDE.md               # 后端:API 约定、数据库模式
├── services/
│   ├── auth/
│   │   └── CLAUDE.md           # 认证服务:特定配置
│   └── payment/
│       └── CLAUDE.md           # 支付服务:特定配置
└── tests/
    └── CLAUDE.md               # 测试:测试约定和覆盖规则

4.1.3 CLAUDE.md 最佳实践

应该包含的内容:

  • 项目概述和架构图
  • 关键技术栈
  • 常用命令(构建、测试、运行)
  • 编码约定
  • 重要的配置说明
  • 导航指针(指向其他 CLAUDE.md)

不应该包含的内容:

  • 每个文件的结构(可以动态发现)
  • 详细实现细节
  • 经常变化的信息
  • 重复的全局信息

行数建议:

位置 建议行数 重点
根目录 100-200 行 概览、指针、关键约定
子目录 50-150 行 本地约定、特定命令
子子目录 30-100 行 极度具体的约定

4.1.4 示例:根目录 CLAUDE.md

# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## 项目概述
这是一个电商平台的单体仓库,采用前后端分离架构。
- 核心业务:商品管理、订单处理、支付结算、用户管理
- 开发团队:30+ 工程师,5 个子团队

## 技术栈
- 前端:React 18 + TypeScript + Tailwind CSS
- 后端:Node.js + Express + PostgreSQL
- 基础设施:Docker + Kubernetes
- 监控:Datadog + Sentry

## 常用命令

### 开发环境
```bash
# 安装依赖
pnpm install

# 启动开发服务器(前端 + 后端)
pnpm dev

# 仅启动前端
pnpm dev:frontend

# 仅启动后端
pnpm dev:backend

测试

# 运行所有测试
pnpm test

# 运行特定模块测试
pnpm test:auth
pnpm test:payment

# 运行单个测试文件
pnpm test -- --grep "test name"

构建和部署

# 构建生产版本
pnpm build

# Docker 构建
docker build -t my-app .

# 部署到开发环境
pnpm deploy:dev

架构说明

  • /frontend - React 前端应用
  • /backend - Node.js API 服务
  • /shared - 共享类型和工具
  • /infra - 基础设施配置

编码约定

  • 使用 TypeScript 严格模式
  • 遵循 ESLint 推荐规则
  • 测试覆盖率不低于 80%
  • Git 提交信息遵循 Conventional Commits

重要提示

  • 修改 API 时同步更新 /shared/types
  • 数据库迁移文件放在 /backend/migrations
  • 前端组件放在 /frontend/src/components

导航

  • 后端开发:查看 /backend/CLAUDE.md
  • 前端开发:查看 /frontend/CLAUDE.md
  • 数据库操作:查看 /backend/migrations/CLAUDE.md

4.1.5 示例:子目录 CLAUDE.md

# 前端模块说明

## 目录结构
- `/components` - 可复用 UI 组件
- `/pages` - 页面级组件
- `/hooks` - 自定义 React Hooks
- `/utils` - 工具函数
- `/api` - API 调用层

## 组件约定
- 组件使用 PascalCase 命名
- 每个组件包含自己的样式和测试
- 使用 React.forwardRef 暴露 DOM 引用
- Props 接口定义在组件文件顶部

## 状态管理
- 全局状态:使用 Zustand
- 服务端状态:使用 React Query
- 表单状态:使用 React Hook Form

## 常用命令
```bash
# 运行前端开发服务器
pnpm dev:frontend

# 运行前端测试
pnpm test:frontend

# 构建前端
pnpm build:frontend

# Lint 检查
pnpm lint:frontend

注意事项

  • 新组件必须包含 stories 和测试
  • 使用 CSS-in-JS 而非全局样式
  • 避免在组件中直接调用 API

4.1.6 示例:代码库地图

对于目录结构复杂的代码库,在根目录 CLAUDE.md 中添加代码库地图:

## 代码库地图

| 目录 | 描述 | 维护团队 | 技术栈 |
|------|------|---------|--------|
| `/apps/web` | 用户端 Web 应用 | 前端团队 | React, TypeScript |
| `/apps/admin` | 管理后台 | 前端团队 | Vue, JavaScript |
| `/services/api` | API 网关 | 平台团队 | Go, gRPC |
| `/services/auth` | 认证服务 | 安全团队 | Node.js, OAuth |
| `/services/payment` | 支付服务 | 金融团队 | Java, Spring |
| `/libs/shared` | 共享库 | 平台团队 | TypeScript |
| `/infra` | 基础设施 | DevOps | Terraform, K8s |
| `/data` | 数据管道 | 数据团队 | Python, Spark |

4.2 钩子(Hooks)

4.2.1 核心概念

钩子是在特定事件发生时自动执行的脚本。它们可以:

  • 阻止或修改操作
  • 执行自动化任务
  • 记录和监控活动
  • 强制执行团队规范

4.2.2 钩子类型详解

钩子类型 触发时机 用途 示例
PreToolUse 工具执行前 验证输入、阻止危险操作 检查敏感信息、验证路径
PostToolUse 工具执行后 格式化输出、记录日志 代码格式化、生成文档
Notification 发送通知时 自定义通知处理 发送 Slack 通知
Stop 会话结束时 清理、总结、建议改进 更新 CLAUDE.md

4.2.3 钩子环境变量

钩子可以访问以下环境变量:

变量名 说明
CLAUDE_TOOL_NAME 当前工具名称
CLAUDE_TOOL_INPUT 工具输入(JSON 格式)
CLAUDE_FILE_PATH 被操作的文件路径
CLAUDE_PROJECT_DIR 项目根目录

4.2.4 钩子配置示例

.claude/settings.json 中配置:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo '[PRE-CHECK] 验证 Bash 命令...'"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "prettier --write \"$CLAUDE_FILE_PATH\""
          }
        ]
      }
    ],
    "Stop": [
      {
        "type": "command",
        "command": "echo '[会话结束] 请检查本次更改的文件'"
      }
    ]
  }
}

4.2.5 实用钩子示例

示例 1:自动格式化代码

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

示例 2:防止提交敏感信息

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE '(password|secret|api_key|token)'; then echo '警告:可能包含敏感信息'; exit 1; fi"
          }
        ]
      }
    ]
  }
}

示例 3:记录所有文件修改

#!/bin/bash
# hooks/log-changes.sh
LOG_FILE="$HOME/.claude/changes.log"
echo "$(date): Modified $CLAUDE_FILE_PATH" >> "$LOG_FILE"
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "bash hooks/log-changes.sh"
          }
        ]
      }
    ]
  }
}

示例 4:Perforce 集成

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "p4 edit \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      }
    ],
    "Stop": [
      {
        "type": "command",
        "command": "echo '建议:运行 p4 submit 提交更改'"
      }
    ]
  }
}

示例 5:会话结束建议更新 CLAUDE.md

{
  "hooks": {
    "Stop": [
      {
        "type": "command",
        "command": "echo '建议:如果有新的约定或模式,请更新 CLAUDE.md 文件'"
      }
    ]
  }
}

4.3 技能(Skills)

4.3.1 核心概念

技能是按需加载的专业化工作流,实现了渐进式披露——只有当任务需要时才加载,避免每个会话都加载所有上下文。

4.3.2 技能的优势

┌─────────────────────────────────────────────────────────────┐
│                    无技能:全量加载                           │
├─────────────────────────────────────────────────────────────┤
│  会话开始 → 加载所有上下文 → 上下文膨胀 → 性能下降            │
│           → 响应变慢 → 消耗更多 token                         │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                    有技能:按需加载                           │
├─────────────────────────────────────────────────────────────┤
│  会话开始 → 加载核心上下文 → 需要时加载技能 → 高效运行        │
│           → 响应快速 → 节省 token                             │
└─────────────────────────────────────────────────────────────┘

4.3.3 技能配置示例

示例:安全审查技能

.claude/skills/security-review.md 中:

# 安全审查技能

## 触发条件
当用户请求安全审查或代码涉及敏感操作时自动加载。

## 审查清单
- [ ] 输入验证
- [ ] SQL 注入防护
- [ ] XSS 防护
- [ ] CSRF 防护
- [ ] 敏感数据处理
- [ ] 认证和授权
- [ ] 依赖安全

## 常见漏洞模式

### SQL 注入
```javascript
// 危险
const query = `SELECT * FROM users WHERE id = ${userId}`;

// 安全
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);

XSS

// 危险
element.innerHTML = userInput;

// 安全
element.textContent = userInput;
// 或使用 DOMPurify
element.innerHTML = DOMPurify.sanitize(userInput);

敏感数据暴露

// 危险
console.log('User password:', password);

// 安全
console.log('User authenticated:', !!user);

报告格式

## 安全审查报告

### 发现的问题
| 严重程度 | 文件 | 行号 | 描述 |
|---------|-----|-----|------|
| 高 | auth.js | 42 | SQL 注入风险 |
| 中 | utils.ts | 15 | 敏感数据暴露 |
| 低 | api.ts | 89 | 缺少输入验证 |

### 修复建议
1. auth.js:42 - 使用参数化查询
2. utils.ts:15 - 移除敏感日志
3. api.ts:89 - 添加输入验证中间件

**示例:数据库迁移技能**

在 `.claude/skills/db-migration.md` 中:

```markdown
# 数据库迁移技能

## 触发条件
当处理数据库迁移、模式变更相关任务时加载。

## 迁移文件命名规范

YYYYMMDDHHMMSS_.sql

示例:`20240115120000_add_users_table.sql`

## 迁移文件模板
```sql
-- 迁移:添加用户表
-- 创建时间:2024-01-15
-- 作者:xxx

-- Up
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email VARCHAR(255) UNIQUE NOT NULL,
  name VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_users_email ON users(email);

-- Down
DROP INDEX IF EXISTS idx_users_email;
DROP TABLE IF EXISTS users;

迁移最佳实践

  1. 始终提供 Up 和 Down 迁移
  2. 大表修改分批进行(使用 pt-online-schema-change 等工具)
  3. 迁移前备份数据
  4. 测试环境验证后再上生产
  5. 避免在迁移中执行业务逻辑

命令

# 创建迁移
pnpm db:migrate:create --name add_users_table

# 运行所有待执行迁移
pnpm db:migrate:up

# 回滚上一次迁移
pnpm db:migrate:down

# 查看迁移状态
pnpm db:migrate:status

注意事项

  • 不要修改已发布的迁移文件
  • 生产环境迁移需要双人审批
  • 涉及数据删除的迁移必须先备份

示例:部署技能

.claude/skills/deployment.md 中:

# 部署技能

## 触发条件
当处理部署、发布相关任务时加载。

## 部署流程
1. 代码审查通过
2. CI/CD 流水线通过
3. 部署到开发环境
4. 冒烟测试通过
5. 部署到预发布环境
6. 集成测试通过
7. 部署到生产环境

## 命令
```bash
# 部署到开发环境
pnpm deploy:dev

# 部署到预发布环境
pnpm deploy:staging

# 部署到生产环境
pnpm deploy:prod

# 回滚
pnpm deploy:rollback --version <version>

部署检查清单

  • [ ] 所有测试通过
  • [ ] 代码审查完成
  • [ ] 数据库迁移已准备
  • [ ] 配置已更新
  • [ ] 监控已配置
  • [ ] 回滚计划已准备

常见问题

  1. 部署失败:检查 CI/CD 日志
  2. 数据库迁移失败:回滚迁移后重试
  3. 健康检查失败:检查服务日志

示例:测试技能

.claude/skills/testing.md 中:

# 测试技能

## 触发条件
当编写或运行测试时加载。

## 测试约定
- 单元测试:测试单个函数/组件
- 集成测试:测试模块间交互
- E2E 测试:测试完整用户流程

## 测试文件命名
/ ├── __tests__/ │ ├── unit/ │ │ └── .test.ts │ └── integration/ │ └── .test.ts └── .ts ``` ## 命令 ```bash # 运行所有测试 pnpm test # 运行单元测试 pnpm test:unit # 运行集成测试 pnpm test:integration # 运行特定文件测试 pnpm test -- src/__tests__/auth.test.ts # 查看测试覆盖率 pnpm test:coverage # 监听模式 pnpm test:watch ``` ## Mock 约定 - 外部 API 使用 Mock - 数据库使用 Mock 或测试数据库 - 时间相关使用 Mock 时间 ## 断言约定 - 使用 expect 进行断言 - 描述测试行为,而非实现 - 每个测试只测试一个行为 ``` #### 4.3.4 路径限定技能 技能可以限定在特定路径上激活: ```json { "skills": { "payment-skill": { "path": "services/payment/**", "description": "支付服务专用技能" } } } ``` --- ### 4.4 插件(Plugins) #### 4.4.1 核心概念 插件将技能、钩子和 MCP 配置打包成可分发的包,解决大型代码库中"部落化知识"的问题。 #### 4.4.2 插件的价值 ``` 传统方式(部落化知识): ┌─────────────────────────────────────────────────────────────┐ │ 工程师A的配置 ──────► 仅工程师A可用 │ │ 工程师B的配置 ──────► 仅工程师B可用 │ │ 新工程师 ────────────► 需要从头配置 │ │ → 上手慢,效率低 │ └─────────────────────────────────────────────────────────────┘ 插件方式(知识共享): ┌─────────────────────────────────────────────────────────────┐ │ 团队插件 ────────────► 所有工程师立即可用 │ │ 组织市场 ────────────► 跨团队共享最佳实践 │ │ 新工程师 ────────────► 安装插件即可开始工作 │ │ → 上手快,效率高 │ └─────────────────────────────────────────────────────────────┘ ``` #### 4.4.3 插件结构示例 ``` my-org-claude-plugin/ ├── plugin.json # 插件元数据 ├── README.md # 插件说明 ├── skills/ │ ├── code-review.md │ └── deployment.md ├── hooks/ │ └── settings.json # 钩子配置 ├── mcp/ │ └── servers.json # MCP 服务器配置 └── commands/ └── deploy.md # 自定义命令 ``` **plugin.json 示例:** ```json { "name": "my-org-claude-plugin", "version": "1.0.0", "description": "组织标准 Claude Code 配置", "author": "Platform Team", "skills": [ "skills/code-review.md", "skills/deployment.md" ], "hooks": "hooks/settings.json", "mcpServers": "mcp/servers.json", "commands": [ "commands/deploy.md" ], "dependencies": [] } ``` #### 4.4.4 插件安装与管理 ```bash # 安装本地插件 claude plugin install /path/to/plugin # 安装远程插件 claude plugin install https://github.com/org/plugin-repo # 列出已安装插件 claude plugin list # 更新插件 claude plugin update # 卸载插件 claude plugin uninstall ``` --- ### 4.5 MCP 服务器 #### 4.5.1 核心概念 MCP(Model Context Protocol)服务器将 Claude 连接到原本无法触及的内部工具、数据源和 API。 #### 4.5.2 常见 MCP 服务器用途 | 用途 | 描述 | 示例 | |------|------|------| | **内部文档** | 连接公司知识库、Wiki | Confluence、Notion | | **票务系统** | 项目管理和问题跟踪 | Jira、Linear、GitHub Issues | | **分析平台** | 数据分析、监控仪表板 | Datadog、Grafana | | **数据库** | 直接查询内部数据库 | PostgreSQL、MySQL | | **版本控制** | 非 Git 版本控制 | Perforce、SVN | | **内部工具** | 自定义内部工具 | 自研系统 | #### 4.5.3 MCP 服务器配置示例 ```json { "mcpServers": { "internal-docs": { "command": "node", "args": ["./mcp-servers/docs-server/index.js"], "env": { "DOCS_API_URL": "https://docs.internal.company.com/api" } }, "jira": { "command": "node", "args": ["./mcp-servers/jira-server/index.js"], "env": { "JIRA_URL": "https://company.atlassian.net", "JIRA_TOKEN": "${JIRA_API_TOKEN}" } }, "analytics": { "command": "python", "args": ["./mcp-servers/analytics-server/main.py"], "env": { "ANALYTICS_DB_URL": "${ANALYTICS_DB_URL}" } } } } ``` #### 4.5.4 MCP 服务器示例 **Node.js MCP 服务器示例:** 首先安装 MCP SDK: ```bash npm install @modelcontextprotocol/sdk ``` ```javascript // mcp-servers/docs-server/index.js const { Server } = require('@modelcontextprotocol/sdk'); const { StdioServerTransport } = require('@modelcontextprotocol/sdk'); const axios = require('axios'); const server = new Server({ name: 'internal-docs', version: '1.0.0' }); server.setRequestHandler('tools/list', async () => ({ tools: [ { name: 'search_docs', description: '搜索内部文档', inputSchema: { type: 'object', properties: { query: { type: 'string', description: '搜索关键词' }, limit: { type: 'number', description: '返回结果数量', default: 5 } }, required: ['query'] } } ] })); server.setRequestHandler('tools/call', async (request) => { if (request.params.name === 'search_docs') { const { query, limit } = request.params.arguments; const results = await searchInternalDocs(query, limit); return { content: [ { type: 'text', text: JSON.stringify(results, null, 2) } ] }; } }); async function searchInternalDocs(query, limit) { const response = await axios.get(`${process.env.DOCS_API_URL}/search`, { params: { q: query, limit } }); return response.data; } async function main() { const transport = new StdioServerTransport(); await server.connect(transport); } main().catch(console.error); ``` **Python MCP 服务器示例:** 首先安装 MCP SDK: ```bash pip install mcp ``` ```python # mcp-servers/analytics-server/main.py from mcp.server import Server from mcp.server.stdio import stdio_server import asyncio import os server = Server("analytics") @server.list_tools() async def list_tools(): return [ { "name": "query_metrics", "description": "查询性能指标", "inputSchema": { "type": "object", "properties": { "metric": { "type": "string", "description": "指标名称" }, "time_range": { "type": "string", "description": "时间范围(如 1h, 24h, 7d)", "default": "24h" } }, "required": ["metric"] } } ] @server.call_tool() async def call_tool(name: str, arguments: dict): if name == "query_metrics": metric = arguments["metric"] time_range = arguments.get("time_range", "24h") results = await fetch_metrics(metric, time_range) return {"content": results} async def fetch_metrics(metric: str, time_range: str): # 实现指标查询逻辑 return f"指标 {metric} 在过去 {time_range} 的数据..." async def main(): async with stdio_server() as (read_stream, write_stream): await server.run(read_stream, write_stream) if __name__ == "__main__": asyncio.run(main()) ``` --- ### 4.6 LSP 集成 #### 4.6.1 核心概念 LSP(语言服务器协议)让 Claude 具备与开发者在 IDE 中相同的导航能力:**转到定义**和**查找所有引用**。 #### 4.6.2 LSP 的价值 ``` ┌─────────────────────────────────────────────────────────────┐ │ 无 LSP:文本搜索 │ ├─────────────────────────────────────────────────────────────┤ │ 搜索 "getUser" → 返回 1,234 个匹配 │ │ 需要逐个检查 → 消耗大量上下文 │ │ 可能混淆同名函数(不同模块的同名函数) │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ 有 LSP:符号搜索 │ ├─────────────────────────────────────────────────────────────┤ │ 搜索 "getUser" → 返回定义 + 相关引用 │ │ 精确区分同名符号(不同模块的同名函数) │ │ 节省上下文空间 │ └─────────────────────────────────────────────────────────────┘ ``` #### 4.6.3 配置 LSP **TypeScript/JavaScript:** ```json { "languages": { "typescript": { "lsp": { "command": "typescript-language-server", "args": ["--stdio"] } }, "javascript": { "lsp": { "command": "typescript-language-server", "args": ["--stdio"] } } } } ``` **Python:** ```json { "languages": { "python": { "lsp": { "command": "pylsp", "args": [] } } } } ``` **Go:** ```json { "languages": { "go": { "lsp": { "command": "gopls", "args": [] } } } } ``` **Java:** ```json { "languages": { "java": { "lsp": { "command": "jdtls", "args": [] } } } } ``` #### 4.6.4 LSP 安装指南 ```bash # TypeScript/JavaScript npm install -g typescript-language-server typescript # Python pip install python-lsp-server # Go go install golang.org/x/tools/gopls@latest # Java (需要 JDK 17+) # 下载 jdtls: https://github.com/eclipse/eclipse.jdt.ls ``` #### 4.6.5 多语言代码库的 LSP 投资价值 对于多语言代码库,LSP 是最具价值的投资之一: - 一家大型软件公司在全面推广 Claude Code 之前,**在全公司范围内集成了 LSP**,专门用于 C 和 C++ 的大规模导航 - 这使得 Claude 能够精确跟踪函数调用、区分同名符号,避免文本匹配的歧义 --- ### 4.7 子智能体(Subagents) #### 4.7.1 核心概念 子智能体是拥有独立上下文窗口的隔离 Claude 实例,承担任务、完成工作,仅将最终结果返回给父智能体。 #### 4.7.2 使用场景 ``` ┌─────────────────────────────────────────────────────────────┐ │ 主智能体工作流 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 启动子智能体 A(只读)→ 探索认证模块 → 返回摘要 │ │ 2. 启动子智能体 B(只读)→ 探索支付模块 → 返回摘要 │ │ 3. 主智能体 ────────────────► 综合分析并进行编辑 │ │ │ │ 优势: │ │ - 分离探索与编辑 │ │ - 避免上下文污染 │ │ - 并行处理 │ │ - 保持主上下文清洁 │ └─────────────────────────────────────────────────────────────┘ ``` #### 4.7.3 子智能体配置示例 ```json { "subagents": { "codebase-explorer": { "type": "read-only", "description": "探索代码库,返回摘要", "tools": ["Glob", "Grep", "Read"], "output": "markdown-file" }, "test-runner": { "type": "isolated", "description": "运行测试并返回结果", "tools": ["Bash", "Read"], "output": "test-results" } } } ``` #### 4.7.4 子智能体最佳实践 1. **只读探索**:使用只读子智能体探索代码库,避免污染主上下文 2. **任务分解**:将大任务分解为多个子任务,分配给不同子智能体 3. **结果汇总**:子智能体返回结构化结果,便于主智能体处理 4. **错误处理**:设置超时和错误处理机制 --- ## 5. 配置模式与最佳实践 ### 5.1 三种核心配置模式 #### 模式一:分层 CLAUDE.md ``` 代码库根目录/ ├── CLAUDE.md # 全局概览,仅包含指针和关键注意事项 ├── service-a/ │ └── CLAUDE.md # 服务 A 的特定配置 ├── service-b/ │ └── CLAUDE.md # 服务 B 的特定配置 └── shared/ └── CLAUDE.md # 共享代码的说明 ``` **最佳实践:** - 根目录文件保持在 200 行以内 - 子目录文件专注于本地约定 - 避免重复内容 - 使用导航指针连接各层级 #### 模式二:子目录初始化 **推荐做法:** 在子目录中启动 Claude Code,而不是在代码库根目录。 ```bash # 不推荐:在根目录启动 cd /monorepo claude # 推荐:在工作目录启动 cd /monorepo/services/auth-service claude ``` **原因:** - 限制上下文范围 - 提高响应速度 - 减少无关信息 - 避免上下文污染 #### 模式三:按子目录限制命令 在子目录 CLAUDE.md 中指定特定命令: ```markdown # 认证服务 ## 测试命令 仅运行本服务的测试: ```bash pnpm test --filter=auth-service ``` ## 构建命令 ```bash pnpm build --filter=auth-service ``` ## 数据库操作 ```bash # 运行迁移 pnpm db:migrate:up # 生成迁移文件 pnpm db:migrate:create --name add_users_table ``` ## 注意事项 - 不要运行全局测试套件(会超时) - 数据库迁移使用本服务的配置 - 避免修改共享代码 ``` ### 5.2 忽略文件配置 使用 `.ignore` 文件排除不需要的文件: ```gitignore # .ignore # 构建产物 dist/ build/ *.min.js *.min.css *.bundle.js # 依赖 node_modules/ vendor/ .venv/ __pycache__/ # 生成的文件 *.generated.* *.pb.go *.pb.ts *.proto.ts # 文档 docs/api/generated/ # 第三方代码 third_party/ external/ # 大文件 *.zip *.tar.gz *.pdf *.png *.jpg # 测试覆盖率 coverage/ .nyc_output/ # IDE 配置 .idea/ .vscode/ *.swp ``` 在 `.claude/settings.json` 中配置权限: ```json { "permissions": { "deny": [ { "path": "node_modules/**", "reason": "依赖文件无需查看" }, { "path": "*.generated.*", "reason": "生成文件不直接编辑" }, { "path": ".env*", "reason": "环境变量文件敏感" } ] } } ``` ### 5.3 完整 settings.json 模板 ```json { "permissions": { "allow": [ { "path": "src/**", "description": "允许编辑源代码目录" }, { "path": "tests/**", "description": "允许编辑测试文件" }, { "path": "docs/**", "description": "允许编辑文档" } ], "deny": [ { "path": "node_modules/**", "reason": "依赖文件无需查看" }, { "path": "*.generated.*", "reason": "生成文件不直接编辑" }, { "path": ".env*", "reason": "环境变量文件敏感" }, { "path": "dist/**", "reason": "构建产物不直接编辑" } ] }, "hooks": { "PostToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true" } ] } ] }, "mcpServers": {}, "languages": { "typescript": { "lsp": { "command": "typescript-language-server", "args": ["--stdio"] } } } } ``` ### 5.4 维护策略 **审查周期:** 每 3-6 个月进行一次配置审查。 **审查清单:** - [ ] CLAUDE.md 是否还有必要? - [ ] 指令是否与新模型冲突? - [ ] 钩子是否仍然需要? - [ ] 技能是否过时? - [ ] MCP 服务器是否正常运行? - [ ] LSP 配置是否需要更新? **更新原则:** - 移除对新模型不必要的指令 - 简化过度详细的配置 - 保持与代码库演变同步 - 记录配置变更历史 --- ## 6. 上下文管理高级技巧 ### 6.1 理解上下文窗口 Claude 的上下文窗口是有限的资源。有效管理上下文是高效使用 Claude Code 的关键。 ``` 上下文窗口构成: ┌─────────────────────────────────────────────────────────────┐ │ 系统提示 + CLAUDE.md + 技能 + 对话历史 + 工具结果 │ │ ↓ │ │ 总计不超过上下文窗口限制 │ └─────────────────────────────────────────────────────────────┘ ``` ### 6.2 上下文优化策略 #### 策略一:精简 CLAUDE.md **原则:** 每个字都要有价值 ```markdown # 不推荐:冗长的描述 ## 数据库配置 我们的项目使用 PostgreSQL 数据库,版本是 15.2。 数据库服务器运行在内部网络上,地址是 10.0.0.100。 端口是标准的 5432。数据库名称是 myapp_production。 用户名是 myapp_user,密码存储在环境变量 DB_PASSWORD 中。 连接池使用 pg-pool,最大连接数是 20... (继续 100 行) # 推荐:精炼的要点 ## 数据库 - PostgreSQL 15,连接配置见 .env - ORM: Prisma,schema: prisma/schema.prisma - 迁移: `pnpm db:migrate` ``` #### 策略二:使用 /compact 命令 当对话变长时,使用 `/compact` 压缩历史: ```bash # 长对话后压缩 > /compact # 带指令压缩(保留重要上下文) > /compact 保留我们讨论的 API 设计决策 ``` #### 策略三:分阶段对话 ``` 阶段 1:探索和理解 > 分析 @src/auth 模块的架构 > (Claude 读取文件,消耗上下文) 阶段 2:使用 /compact 压缩 > /compact 保留架构分析结果 阶段 3:执行任务 > 基于刚才的分析,重构认证逻辑 ``` ### 6.3 上下文使用监控 ```bash # 查看当前上下文使用情况 /context # 查看 token 消耗 /cost # 查看详细统计 /context --verbose ``` ### 6.4 避免上下文污染 **问题:** 不相关的文件读取会浪费上下文 ```bash # 不推荐:让 Claude 搜索整个代码库 > 找到所有处理用户认证的代码 # 推荐:指定范围 > 在 @src/auth 目录找到处理用户认证的代码 ``` **问题:** 过大的文件会消耗大量上下文 ```bash # 不推荐:读取整个大文件 > 读取 @src/generated/types.ts 并解释 # 推荐:只读取需要的部分 > 在 @src/generated/types.ts 中找到 User 相关的类型定义 ``` ### 6.5 上下文管理检查清单 ```markdown ## 上下文管理检查 ### 每次会话前 - [ ] 确定工作目录(使用子目录初始化) - [ ] 准备好需要引用的文件路径 ### 会话中 - [ ] 定期检查 /context 使用情况 - [ ] 长对话后使用 /compact - [ ] 避免让 Claude 读取不必要的大文件 ### 会话后 - [ ] 记录有用的上下文到 CLAUDE.md - [ ] 总结关键决策供下次会话使用 ``` --- ## 7. 完整工作流示例 ### 7.1 新功能开发工作流 ``` 用户请求:添加用户注册功能 Claude Code 工作流: ┌─────────────────────────────────────────────────────────────┐ │ 1. 读取 CLAUDE.md → 了解项目架构和约定 │ │ 2. 探索代码库 → 找到相关模块(auth 模块) │ │ 3. 读取 auth/CLAUDE.md → 了解认证模块约定 │ │ 4. 加载安全审查技能 → 检查安全要求 │ │ 5. 编写代码 → 创建注册 API、前端表单、数据库迁移 │ │ 6. 运行测试 → 确保功能正常 │ │ 7. 格式化代码 → 自动格式化(通过钩子) │ │ 8. 提交代码 → 创建有意义的提交 │ └─────────────────────────────────────────────────────────────┘ ``` **实际会话示例:** ```bash # 用户输入 > 在 auth 模块添加用户注册功能,包括邮箱验证 # Claude Code 自动执行 1. 读取 CLAUDE.md 2. 探索 /services/auth 目录 3. 读取 /services/auth/CLAUDE.md 4. 加载安全审查技能 5. 创建以下文件: - /services/auth/src/controllers/register.ts - /services/auth/src/services/email.ts - /services/auth/migrations/20240115120000_add_users_table.sql 6. 更新相关测试 7. 运行 pnpm test:auth 8. 格式化代码 ``` ### 7.2 Bug 修复工作流 ``` 用户请求:修复登录时的 500 错误 Claude Code 工作流: ┌─────────────────────────────────────────────────────────────┐ │ 1. 读取 CLAUDE.md → 了解项目架构 │ │ 2. 加载调试技能 → 查看错误日志 │ │ 3. 探索代码库 → 找到登录相关代码 │ │ 4. 分析问题 → 定位到具体函数 │ │ 5. 修复代码 → 应用修复 │ │ 6. 编写测试 → 确保问题不会再次发生 │ │ 7. 运行测试 → 验证修复 │ └─────────────────────────────────────────────────────────────┘ ``` **实际会话示例:** ```bash # 用户输入 > 登录接口返回 500 错误,请帮我定位并修复 # Claude Code 自动执行 1. 读取 CLAUDE.md 2. 加载调试技能 3. 搜索登录相关代码 4. 分析错误日志 5. 定位问题:password 比较逻辑错误 6. 修复代码 7. 添加回归测试 8. 运行 pnpm test:auth ``` ### 7.3 代码审查工作流 ``` 用户请求:审查这个 PR Claude Code 工作流: ┌─────────────────────────────────────────────────────────────┐ │ 1. 读取 CLAUDE.md → 了解代码约定 │ │ 2. 加载代码审查技能 → 应用审查规则 │ │ 3. 检查变更 → 分析代码质量、安全性、性能 │ │ 4. 生成报告 → 列出问题和建议 │ │ 5. 提供修复建议 → 给出具体修改方案 │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 8. 组织管理与推广策略 ### 8.1 推广三阶段 ``` ┌─────────────────────────────────────────────────────────────┐ │ 第一阶段:试点 │ ├─────────────────────────────────────────────────────────────┤ │ - 选择 1-2 个团队试点 │ │ - 专门的基础设施投入 │ │ - 预配置工具和插件 │ │ - 收集反馈并迭代 │ │ - 时长:1-2 个月 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 第二阶段:推广 │ ├─────────────────────────────────────────────────────────────┤ │ - 基于试点经验优化配置 │ │ - 创建标准插件和技能包 │ │ - 建立内部知识库 │ │ - 培训和支持 │ │ - 时长:2-3 个月 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 第三阶段:全面部署 │ ├─────────────────────────────────────────────────────────────┤ │ - 组织范围推广 │ │ - 建立治理流程 │ │ - 持续监控和改进 │ │ - 社区和最佳实践分享 │ │ - 持续进行 │ └─────────────────────────────────────────────────────────────┘ ``` ### 8.2 角色定义 #### 智能体经理(Agent Manager) 这是一个新兴角色,混合 PM/工程师职能: **职责:** - 管理 Claude Code 生态系统 - 维护 CLAUDE.md 约定 - 审批技能和插件 - 协调跨团队配置 - 培训和支持团队 **技能要求:** - 理解 AI 工具能力 - 软件工程背景 - 跨团队沟通能力 - 文档和培训能力 #### 最小可行方案 对于没有专门团队的组织: **DRI(直接负责人):** 一个人拥有: - Claude Code 配置所有权 - 设置审批权 - 权限策略控制 - 更新责任 ### 8.3 治理框架 #### 技能和插件管理 ```json { "governance": { "approvedSkills": [ "security-review", "code-review", "deployment" ], "approvedPlugins": [ "org-standard-tools" ], "approvalProcess": { "submitter": "开发者", "reviewer": "智能体经理", "criteria": [ "安全性审查", "性能影响评估", "业务价值评估" ] } } } ``` #### 代码审查流程 ``` ┌─────────────────────────────────────────────────────────────┐ │ AI 代码审查流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ AI 生成代码 ────► 自动化检查 ────► 人工审查 │ │ │ │ │ ▼ │ │ ┌──────────┐ │ │ │ Lint │ │ │ │ 测试 │ │ │ │ 安全扫描 │ │ │ └──────────┘ │ │ │ │ 关键原则:AI 生成的代码经过与人类代码相同的审查流程 │ └─────────────────────────────────────────────────────────────┘ ``` ### 8.4 跨职能工作组 建议早期建立的代表: | 代表 | 关注点 | 交付物 | |------|--------|--------| | 工程团队 | 技术可行性、开发体验 | CLAUDE.md 约定、技能 | | 信息安全 | 安全策略、数据保护 | 安全审查技能、权限策略 | | 合规/治理 | 监管要求、审计痕迹 | 审计日志、合规检查 | | 法务 | 知识产权、许可 | 许可证合规、数据处理 | --- ## 9. 实战案例与示例 ### 9.1 案例:大型电商平台 **背景:** - 单体仓库 - 5M+ 行代码 - 多团队协作 - 技术栈:Java、TypeScript、Python **配置策略:** ``` repo/ ├── CLAUDE.md # 全局架构概览 ├── .claude/ │ ├── settings.json # 全局设置 │ ├── skills/ │ │ ├── java-backend.md │ │ ├── react-frontend.md │ │ ├── data-pipeline.md │ │ ├── security-review.md │ │ └── deployment.md │ └── hooks/ │ └── settings.json # 自动化钩子 ├── backend/ │ ├── CLAUDE.md # Java 服务配置 │ └── services/ │ ├── order/ │ │ └── CLAUDE.md # 订单服务配置 │ └── inventory/ │ └── CLAUDE.md # 库存服务配置 ├── frontend/ │ └── CLAUDE.md # React 前端配置 └── data/ └── CLAUDE.md # 数据管道配置 ``` **根目录 CLAUDE.md:** ```markdown # CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## 代码库概述 大型电商平台单体仓库,包含后端服务、前端应用和数据管道。 ## 架构 - **后端**:Java 17 + Spring Boot,微服务架构 - **前端**:React 18 + TypeScript - **数据**:Python + Spark + Airflow - **基础设施**:Kubernetes + AWS ## 技术栈详情 | 层级 | 技术 | 版本 | |------|------|------| | 后端 | Java | 17 | | 框架 | Spring Boot | 3.x | | 前端 | React | 18 | | 数据库 | PostgreSQL | 15 | | 缓存 | Redis | 7 | ## 重要约定 - API 版本化:`/api/v1/...` - 所有 API 变更需要更新 OpenAPI 规范 - 数据库迁移必须可逆 - 前端组件测试覆盖率 > 70% ## 导航 - 后端开发:查看 `/backend/CLAUDE.md` - 前端开发:查看 `/frontend/CLAUDE.md` - 数据管道:查看 `/data/CLAUDE.md` - 安全审查:加载安全审查技能 - 部署:加载部署技能 ``` ### 9.2 案例:遗留银行系统 **背景:** - 20+ 年历史 - COBOL + Java + C# 混合 - Perforce 版本控制 - 受监管行业 **特殊配置:** ```json { "hooks": { "PreToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "p4 edit \"$CLAUDE_FILE_PATH\"" } ] } ] }, "mcpServers": { "perforce": { "command": "node", "args": ["./mcp-servers/perforce-server/index.js"] }, "mainframe-docs": { "command": "python", "args": ["./mcp-servers/mainframe-docs/main.py"] } } } ``` **COBOL 专用技能:** ```markdown # COBOL 开发技能 ## 触发条件 处理 `.cbl`、`.cpy` 文件时加载。 ## COBOL 编码约定 - 遵循 ANSI COBOL 85 标准 - 使用有意义的变量名 - 每段代码添加注释 ## 常见模式 ### 文件处理 ```cobol OPEN INPUT CUSTOMER-FILE. READ CUSTOMER-FILE INTO WS-CUSTOMER-RECORD AT END SET WS-EOF TO TRUE END-READ. CLOSE CUSTOMER-FILE. ``` ### 数据库访问 ```cobol EXEC SQL SELECT CUSTOMER_NAME, BALANCE INTO :WS-NAME, :WS-BALANCE FROM CUSTOMERS WHERE CUSTOMER_ID = :WS-CUST-ID END-EXEC. ``` ## 调试指南 1. 检查 JCL 作业日志 2. 验证文件分配 3. 检查数据格式转换 ## 测试策略 1. 单元测试:使用 COBOL 测试框架 2. 集成测试:使用 JCL 作业测试 3. 端到端测试:使用生产数据子集 ``` --- ## 10. 安全最佳实践 ### 10.1 敏感信息保护 #### 环境变量管理 ```json { "permissions": { "deny": [ { "path": ".env*", "reason": "环境变量文件包含敏感配置" }, { "path": "**/credentials*", "reason": "凭证文件不应被访问" }, { "path": "**/*.pem", "reason": "私钥文件敏感" } ] } } ``` #### 钩子安全检查 ```json { "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE '(curl|wget).*(password|secret|token)'; then echo '警告:检测到可能的敏感信息传输'; exit 1; fi" } ] }, { "matcher": "Write", "hooks": [ { "type": "command", "command": "if echo \"$CLAUDE_FILE_PATH\" | grep -qE '(\\.env|credentials|secrets)'; then echo '警告:尝试写入敏感文件'; exit 1; fi" } ] } ] } } ``` ### 10.2 代码安全审查 #### 安全检查清单 在 CLAUDE.md 中添加安全要求: ```markdown ## 安全要求 ### 代码审查要点 - [ ] 所有用户输入必须验证 - [ ] SQL 查询使用参数化查询 - [ ] 敏感数据不记录到日志 - [ ] API 密钥使用环境变量 - [ ] 密码使用 bcrypt 等安全哈希 - [ ] 文件上传限制大小和类型 - [ ] CORS 配置正确 - [ ] 依赖项无已知漏洞 ### 禁止事项 - 禁止硬编码密码或 API 密钥 - 禁止使用 eval() 或 exec() - 禁止禁用 SSL 验证 - 禁止在前端暴露后端逻辑 ``` ### 10.3 权限控制 #### 最小权限原则 ```json { "permissions": { "allow": [ { "path": "src/**", "description": "仅允许编辑源代码" }, { "path": "tests/**", "description": "仅允许编辑测试文件" } ], "deny": [ { "path": "src/**/config/**", "reason": "配置文件需要特殊审批" }, { "path": "src/**/secrets/**", "reason": "敏感文件禁止直接编辑" } ] } } ``` ### 10.4 审计日志 记录所有 Claude Code 操作: ```json { "hooks": { "PostToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "echo \"$(date -u +%Y-%m-%dT%H:%M:%SZ) WRITE $CLAUDE_FILE_PATH $(whoami)\" >> ~/.claude/audit.log" } ] }, { "matcher": "Bash", "hooks": [ { "type": "command", "command": "echo \"$(date -u +%Y-%m-%dT%H:%M:%SZ) BASH $(echo $CLAUDE_TOOL_INPUT | head -c 100) $(whoami)\" >> ~/.claude/audit.log" } ] } ] } } ``` --- ## 11. 故障排除与性能优化 ### 11.1 常见问题及解决方案 | 问题 | 原因 | 解决方案 | |------|------|---------| | Claude 响应缓慢 | 上下文过长 | 减少 CLAUDE.md 长度,使用技能按需加载 | | 找不到文件 | 目录结构复杂 | 创建代码库地图,使用 @ 引用 | | 生成错误代码 | 缺少上下文 | 完善 CLAUDE.md,添加更多约定 | | 钩子不执行 | 配置错误 | 检查 settings.json 格式,查看日志 | | LSP 不工作 | 未安装服务器 | 安装对应语言服务器 | | MCP 连接失败 | 服务器未启动 | 检查服务器配置和日志 | ### 11.2 性能优化建议 1. **优化 CLAUDE.md 长度** - 根目录:100-200 行 - 子目录:50-150 行 - 避免重复内容 2. **使用 .ignore 排除无关文件** - 构建产物 - 依赖目录 - 生成的文件 3. **配置 LSP** - 提高搜索精度 - 减少上下文消耗 4. **使用技能按需加载** - 避免每个会话加载所有上下文 - 只在需要时加载专业知识 5. **配置子目录初始化** - 限制上下文范围 - 提高响应速度 ### 11.3 调试技巧 1. **查看钩子日志** ```bash # 启用详细日志 claude --verbose ``` 2. **检查配置文件** ```bash # 验证 settings.json 格式 cat .claude/settings.json | jq . ``` 3. **测试 MCP 连接** ```bash # 测试 MCP 服务器 claude mcp test ``` 4. **查看上下文使用情况** ```bash # 查看当前会话上下文大小 /context ``` ### 11.4 故障排除清单 ```markdown ## 故障排除清单 ### Claude 响应缓慢 - [ ] 检查 CLAUDE.md 长度 - [ ] 检查是否加载了过多技能 - [ ] 检查 .ignore 配置 - [ ] 检查 LSP 是否正常运行 ### 找不到文件 - [ ] 检查当前工作目录 - [ ] 检查 CLAUDE.md 中的导航指针 - [ ] 检查 .ignore 配置 - [ ] 使用 @ 引用文件 ### 生成错误代码 - [ ] 检查 CLAUDE.md 中的编码约定 - [ ] 检查技能是否正确加载 - [ ] 检查 LSP 是否正常运行 - [ ] 提供更多上下文信息 ### 钩子不执行 - [ ] 检查 settings.json 格式 - [ ] 检查钩子命令语法 - [ ] 检查文件权限 - [ ] 查看 Claude Code 日志 ``` ### 11.5 Claude Code 的限制与边界 了解 Claude Code 的局限性有助于合理规划使用场景,避免在不适合的任务上浪费时间。 #### 不擅长处理的任务类型 | 任务类型 | 原因 | 替代方案 | |---------|------|---------| | **模糊的全局搜索** | "在十亿行代码中找到所有类似模式"会触及上下文限制 | 使用 @ 引用限定范围,或分阶段搜索 | | **大规模重构** | 跨数百个文件的重构超出上下文容量 | 分批次执行,每次处理一个模块 | | **无上下文的遗留代码** | 缺少文档和约定的代码难以理解 | 先构建 CLAUDE.md 和技能,再执行任务 | | **视觉/UI 设计** | Claude 主要处理文本,视觉理解有限 | 提供详细的文字描述或使用截图 | | **实时调试运行程序** | Claude 无法直接调试运行中的程序 | 使用日志分析、添加调试代码 | | **复杂的数学/算法** | 需要多次迭代验证,一次性完成困难 | 分步骤验证,提供中间检查点 | | **多语言实时翻译** | 需要语言专业知识 | 提供术语表和翻译指南 | #### 大型代码库中的特殊限制 ``` ┌─────────────────────────────────────────────────────────────┐ │ Claude Code 在大型代码库中的边界 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 边界 1:上下文窗口 │ │ ───────────────────────── │ │ - 无法一次性理解整个代码库 │ │ - 需要通过 CLAUDE.md 分层引导 │ │ - 子目录初始化比根目录初始化更有效 │ │ │ │ 边界 2:导航能力 │ │ ───────────────────── │ │ - 没有 LSP 时只能文本搜索 │ │ - 文本搜索在大型代码库返回大量结果 │ │ - 需要人工筛选或 LSP 精确导航 │ │ │ │ 边界 3:知识时效 │ │ ───────────────────── │ │ - CLAUDE.md 可能反映过时的约定 │ │ - 需要定期审查和更新 │ │ - 模型能力提升后某些限制可能不再必要 │ │ │ │ 边界 4:并行工作 │ │ ───────────────────── │ │ - 单个会话无法同时处理多个独立模块 │ │ - 需要多个子智能体或分开会话 │ │ - 复杂任务需要分阶段执行 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` #### 正确使用 Claude Code 的原则 1. **限定范围**:始终指定具体目录或文件,避免全局搜索 2. **分层上下文**:使用 CLAUDE.md 分层提供信息,而非一次性全部加载 3. **分步执行**:复杂任务分解为多个步骤,每步完成后验证 4. **提供验证点**:要求 Claude 在关键步骤后停下来让你检查 5. **使用工具辅助**:LSP、MCP 服务器扩展 Claude 的能力边界 ### 11.6 错误恢复策略 当 Claude Code 遇到障碍或产生错误时,以下策略可以帮助恢复: #### 常见障碍类型及恢复方法 | 障碍类型 | 恢复策略 | |---------|---------| | **上下文过载** | 使用 `/compact` 压缩历史,或开始新会话 | | **找不到相关代码** | 提供更精确的路径引用,检查 .ignore 配置 | | **生成的代码不符合约定** | 完善 CLAUDE.md 约定,提供正确的代码示例 | | **理解偏差** | 用更明确的指令重新描述需求,提供示例 | | **工具执行失败** | 检查错误信息,修复环境问题后重试 | | **钩子阻止操作** | 检查钩子配置,理解阻止原因,必要时调整 | #### 分层恢复策略 ``` ┌─────────────────────────────────────────────────────────────┐ │ 错误恢复层级 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 第 1 层:会话内调整 │ │ ───────────────────── │ │ - 重新表述需求 │ │ - 提供更多上下文 │ │ - 使用 /compact 压缩 │ │ - 指定更精确的范围 │ │ │ │ 第 2 层:配置调整 │ │ ───────────────────── │ │ - 更新 CLAUDE.md │ │ - 调整技能配置 │ │ - 修改钩子规则 │ │ - 更新 .ignore 排除规则 │ │ │ │ 第 3 层:环境调整 │ │ ───────────────────── │ │ - 切换工作目录 │ │ - 检查 LSP/MCP 状态 │ │ - 修复工具链问题 │ │ - 开始新会话 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` #### 错误恢复流程示例 **场景:Claude 生成的代码不符合团队约定** ```bash # 第 1 步:识别问题 > Claude 生成的代码使用了 var 而不是 const,不符合我们的约定 # 第 2 步:提供正确示例 > 请使用 const 和 let,示例: > const user = { name: 'Alice' }; > let count = 0; # 第 3 步:如果重复出现,更新 CLAUDE.md # 在 CLAUDE.md 中添加: ## 编码约定 - 使用 const 和 let,禁止使用 var # 第 4 步:验证修复 > 重新生成代码,检查是否遵守约定 ``` **场景:Claude 找不到需要的文件** ```bash # 第 1 步:检查 .ignore 配置 > 检查 .ignore 文件是否排除了目标文件 # 第 2 步:使用 @ 引用 > 查看 @src/services/auth/login.ts # 第 3 步:如果仍找不到,检查路径 > 确认文件路径是否正确 # 第 4 步:更新 CLAUDE.md 导航指针 # 添加: ## 导航 - 认证服务:/services/auth/ ``` **场景:钩子阻止了必要的操作** ```bash # 第 1 步:理解阻止原因 > 钩子显示:检测到敏感信息传输 # 第 2 步:评估是否真的包含敏感信息 > 检查命令内容 # 第 3 步:如果是误判,调整钩子规则 # 在 settings.json 中修改钩子条件 # 第 4 步:如果确实需要,使用其他方式 > 通过其他安全渠道处理敏感信息 ``` #### 预防性措施 ```markdown ## 预防错误的最佳实践 ### 会话前 - [ ] 明确任务范围和预期结果 - [ ] 准备必要的文件路径引用 - [ ] 检查 CLAUDE.md 是否有相关约定 ### 会话中 - [ ] 关键步骤后要求 Claude 停下来验证 - [ ] 定期检查 /context 使用情况 - [ ] 遇到问题立即调整,不要累积 ### 会话后 - [ ] 记录遇到的问题和解决方案 - [ ] 更新 CLAUDE.md 防止重复问题 - [ ] 分享经验给团队 ``` --- ## 12. 常见反模式与错误 ### 12.1 常见反模式 #### 反模式 1:CLAUDE.md 过于冗长 **错误做法:** ```markdown # CLAUDE.md(2000 行) ## 数据库配置 - 服务器地址:10.0.0.100 - 端口:5432 - 数据库名:myapp_production - 用户名:admin - 密码:xxx(见环境变量) - 连接池大小:20 - 超时时间:30 秒 - ...(继续 500 行配置细节) ``` **正确做法:** ```markdown # CLAUDE.md(150 行) ## 数据库 - PostgreSQL 15,配置见 .env - ORM: Prisma - 迁移: `pnpm db:migrate` ``` #### 反模式 2:让 Claude 搜索整个代码库 **错误做法:** ```bash > 找到所有处理用户认证的代码 (Claude 会搜索整个项目,消耗大量上下文) ``` **正确做法:** ```bash > 在 @src/auth 目录找到处理用户认证的代码 (限定范围,高效搜索) ``` #### 反模式 3:忽略子目录 CLAUDE.md **错误做法:** ``` 项目根目录/ ├── CLAUDE.md(包含所有细节) ├── frontend/ ├── backend/ └── services/ ``` **正确做法:** ``` 项目根目录/ ├── CLAUDE.md(概览和指针) ├── frontend/CLAUDE.md(前端细节) ├── backend/CLAUDE.md(后端细节) └── services/CLAUDE.md(服务细节) ``` #### 反模式 4:不使用 .ignore 排除无关文件 **错误做法:** - 让 Claude 读取 node_modules - 让 Claude 读取构建产物 - 让 Claude 读取生成的文件 **正确做法:** ```gitignore # .ignore node_modules/ dist/ build/ *.generated.* ``` #### 反模式 5:频繁切换任务而不压缩上下文 **错误做法:** ```bash # 任务 A > 实现用户注册功能 # ... 执行 10 分钟 ... # 任务 B(不压缩,直接开始) > 修复登录 bug (上下文已经很长,性能下降) ``` **正确做法:** ```bash # 任务 A > 实现用户注册功能 # ... 执行 10 分钟 ... # 压缩上下文 > /compact 保留用户注册功能的实现细节 # 任务 B > 修复登录 bug (上下文清爽,性能良好) ``` ### 12.2 常见错误及解决方案 | 错误 | 原因 | 解决方案 | |------|------|---------| | "上下文已满" | CLAUDE.md 或对话历史过长 | 使用 /compact,精简 CLAUDE.md | | "找不到文件" | 路径错误或文件不存在 | 使用 @ 引用,检查路径 | | "钩子执行失败" | 命令语法错误或权限问题 | 检查命令,验证权限 | | "MCP 连接失败" | 服务器未启动或配置错误 | 检查服务器状态和配置 | | "LSP 不工作" | 未安装语言服务器 | 安装对应的 LSP 服务器 | | "代码生成错误" | 缺少上下文或约定 | 完善 CLAUDE.md,提供更多上下文 | ### 12.3 调试流程 ```mermaid graph TD A[发现问题] --> B{问题类型} B -->|上下文问题| C[检查 CLAUDE.md 长度] B -->|配置问题| D[检查 settings.json] B -->|钩子问题| E[检查钩子日志] B -->|MCP 问题| F[检查 MCP 服务器] C --> C1[使用 /compact] C --> C2[精简 CLAUDE.md] D --> D1[验证 JSON 格式] D --> D2[检查权限配置] E --> E1[查看日志文件] E --> E2[测试钩子命令] F --> F1[检查服务器状态] F --> F2[验证连接配置] ``` --- ## 13. 检查清单 ### 13.1 初始设置检查清单 ```markdown ## Claude Code 初始设置检查清单 ### 基础配置 - [ ] 创建根目录 CLAUDE.md - [ ] 创建 .claude/settings.json - [ ] 配置 .ignore 文件 - [ ] 设置 LSP 集成 - [ ] 配置基础钩子 ### 技能设置 - [ ] 识别核心工作流 - [ ] 创建相应的技能文件 - [ ] 配置技能触发条件 - [ ] 测试技能加载 ### 团队配置 - [ ] 定义编码约定 - [ ] 配置共享钩子 - [ ] 设置代码审查流程 - [ ] 文档化最佳实践 ### 高级配置(可选) - [ ] 配置 MCP 服务器 - [ ] 设置子智能体 - [ ] 创建组织插件 - [ ] 建立内部技能市场 ``` ### 13.2 定期维护检查清单 ```markdown ## 季度维护检查清单 ### CLAUDE.md 审查 - [ ] 内容是否仍然相关? - [ ] 是否有冗余信息? - [ ] 技术栈是否更新? - [ ] 命令是否仍然有效? ### 钩子审查 - [ ] 是否有不再需要的钩子? - [ ] 新的自动化机会? - [ ] 性能影响评估 ### 技能审查 - [ ] 技能是否过时? - [ ] 是否需要新增技能? - [ ] 触发条件是否准确? ### MCP 服务器审查 - [ ] 服务器是否正常运行? - [ ] 是否有新的集成需求? - [ ] 安全性审查 ### 模型适配 - [ ] 评估新模型能力 - [ ] 调整过于详细的指令 - [ ] 移除不必要的限制 ``` ### 13.3 新项目设置检查清单 ```markdown ## 新项目 Claude Code 设置 ### 第一天 - [ ] 创建基础 CLAUDE.md - [ ] 配置 LSP - [ ] 设置基础钩子(格式化、lint) - [ ] 配置 .ignore ### 第一周 - [ ] 完善架构文档 - [ ] 添加项目特定技能 - [ ] 配置 MCP 服务器(如需要) - [ ] 创建子目录 CLAUDE.md ### 第一个月 - [ ] 评估使用效果 - [ ] 收集团队反馈 - [ ] 迭代优化配置 - [ ] 建立维护流程 ``` --- ## 14. 常见问题解答 ### Q1: CLAUDE.md 应该有多长? **回答:** 根目录 CLAUDE.md 应该保持在 100-200 行以内。关键原则是: - 包含指针和关键注意事项 - 避免详细实现 - 详细信息放在子目录 CLAUDE.md 中 ### Q2: 如何处理多语言代码库? **回答:** 1. 使用 LSP 集成支持多语言 2. 为每种语言创建专用技能 3. 在子目录中配置语言特定的 CLAUDE.md ### Q3: 钩子会影响性能吗? **回答:** 会。建议: - 只配置必要的钩子 - 使用异步钩子处理耗时操作 - 定期审查和清理钩子 ### Q4: 如何在团队中推广 Claude Code? **回答:** 1. 从试点团队开始 2. 提供预配置的插件和技能 3. 建立内部文档和培训 4. 指定 DRI 负责维护 5. 定期分享最佳实践 ### Q5: 如何处理 Perforce 等非 Git 版本控制? **回答:** 1. 使用钩子在写入前执行 `p4 edit` 2. 构建 MCP 服务器连接 Perforce 3. 考虑使用 Git p4 桥接 ### Q6: 如何衡量 Claude Code 的效果? **回答:** 建议跟踪: - 开发者满意度调查 - 代码审查时间 - 功能交付周期 - 问题修复时间 - 新工程师入职时间 ### Q7: 如何保护敏感信息? **回答:** 1. 使用 .ignore 文件排除敏感文件 2. 配置权限拒绝规则 3. 使用钩子检测敏感信息 4. 教育开发者最佳实践 ### Q8: 模型更新后如何调整配置? **回答:** 1. 重大模型发布后进行配置审查 2. 移除不再需要的变通方案 3. 简化过度详细的指令 4. 测试现有配置的兼容性 ### Q9: 如何处理大型 monorepo? **回答:** 1. 使用分层 CLAUDE.md 2. 配置子目录初始化 3. 使用 .ignore 排除无关文件 4. 考虑使用代码库地图 ### Q10: 如何处理遗留代码? **回答:** 1. 创建遗留系统专用技能 2. 配置非 Git 版本控制支持 3. 添加系统特定文档 4. 逐步改进,避免大规模重写 ### Q11: Claude Code 有哪些任务不适合处理? **回答:** 以下任务类型不适合: - 模糊的全局搜索("在十亿行代码中找所有类似模式") - 跨数百个文件的大规模重构 - 缺少文档和约定的遗留代码理解 - 视觉/UI 设计类任务 - 实时调试运行中的程序 替代方案: - 使用 @ 引用限定范围 - 分批次执行,每次处理一个模块 - 先构建 CLAUDE.md 和技能再执行任务 ### Q12: 当 Claude 遇到障碍时如何恢复? **回答:** 分层恢复策略: **第 1 层(会话内):** - 重新表述需求 - 提供更多上下文 - 使用 /compact 压缩 - 指定更精确的范围 **第 2 层(配置):** - 更新 CLAUDE.md - 调整技能或钩子配置 - 更新 .ignore 排除规则 **第 3 层(环境):** - 切换工作目录 - 检查 LSP/MCP 状态 - 开始新会话 ### Q13: 如何判断上下文是否过载? **回答:** 使用 `/context` 命令检查。以下迹象表明过载: - Claude 响应明显变慢 - 返回不完整或截断的响应 - 开始遗忘早期的讨论内容 - 找不到之前已读取的文件信息 解决方法: - 使用 /compact 压缩历史 - 开始新会话处理新任务 - 精简 CLAUDE.md 长度 --- ## 15. 附录 ### 15.1 CLAUDE.md 模板 ```markdown # CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## 项目概述 [一句话描述项目] ## 技术栈 - 前端:[技术栈] - 后端:[技术栈] - 数据库:[技术栈] - 基础设施:[技术栈] ## 常用命令 ### 开发 ```bash # 安装依赖 [命令] # 启动开发服务器 [命令] ``` ### 测试 ```bash # 运行测试 [命令] # 运行特定测试 [命令] ``` ### 构建 ```bash # 构建生产版本 [命令] ``` ## 架构说明 [描述主要架构和模块] ## 编码约定 - [约定 1] - [约定 2] - [约定 3] ## 重要提示 - [提示 1] - [提示 2] ## 导航 - [子模块 A]:查看 `/path/to/CLAUDE.md` - [子模块 B]:查看 `/path/to/CLAUDE.md` ## 相关文档 - [文档链接 1] - [文档链接 2] ``` ### 15.2 技能模板 ```markdown # [技能名称] ## 触发条件 [描述何时应该加载此技能] ## 概述 [技能的简要描述和用途] ## 详细指南 [详细的操作指南和最佳实践] ## 代码示例 ```[语言] [代码示例] ``` ## 常见问题 [常见问题和解决方案] ## 相关资源 [相关文档和资源链接] ``` ### 15.3 钩子配置模板 ```json { "hooks": { "PreToolUse": [ { "matcher": "[工具名称]", "hooks": [ { "type": "command", "command": "[命令]" } ] } ], "PostToolUse": [ { "matcher": "[工具名称]", "hooks": [ { "type": "command", "command": "[命令]" } ] } ] } } ``` ### 15.4 术语表 | 术语 | 定义 | |------|------| | **Harness** | Claude Code 的生态系统,包括 CLAUDE.md、钩子、技能、插件、MCP 服务器等 | | **Agentic Search** | 智能体搜索,Claude Code 使用的实时搜索方法 | | **RAG** | 检索增强生成,传统的代码库搜索方法 | | **MCP** | Model Context Protocol,Claude 连接外部工具的协议 | | **LSP** | 语言服务器协议,提供代码导航能力 | | **Skills** | 技能,按需加载的专业化工作流 | | **Hooks** | 钩子,在特定事件发生时自动执行的脚本 | | **Plugins** | 插件,可分发的技能、钩子和 MCP 配置包 | | **Subagents** | 子智能体,拥有独立上下文的隔离 Claude 实例 | | **DRI** | 直接负责人,对 Claude Code 配置拥有所有权的个人 | | **Monorepo** | 单体仓库,多个项目共享一个版本控制仓库 | ### 15.5 IDE 集成 #### VS Code 集成 1. **安装 Claude Code 扩展** ```bash # 在 VS Code 中安装 code --install-extension anthropic.claude-code ``` 2. **配置 settings.json** ```json { "claude-code.enableTelemetry": false, "claude-code.defaultModel": "claude-sonnet-4-6" } ``` 3. **使用方式** - 命令面板:`Ctrl+Shift+P` → "Claude Code: Open" - 快捷键:`Ctrl+Shift+C` 打开 Claude Code 面板 - 右键菜单:选中代码 → "Ask Claude about this" #### JetBrains 集成 1. **安装 Claude Code 插件** - 打开 Settings → Plugins - 搜索 "Claude Code" - 安装并重启 IDE 2. **配置** - Settings → Tools → Claude Code - 设置 API 密钥和模型 3. **使用方式** - 工具窗口:View → Tool Windows → Claude Code - 快捷键:`Ctrl+Shift+A` → "Claude Code" - 右键菜单:选中代码 → "Claude Code: Explain" ### 15.6 自定义斜杠命令 #### 创建自定义命令 在 `.claude/commands/` 目录创建 Markdown 文件: ```markdown # .claude/commands/review.md ## 代码审查命令 请对 @{{file}} 进行代码审查,检查以下方面: 1. 代码质量和可读性 2. 潜在的 bug 和错误 3. 性能问题 4. 安全漏洞 5. 测试覆盖 请提供具体的改进建议。 ``` #### 使用自定义命令 ```bash # 在 Claude Code 中使用 > /review src/auth/login.ts # 带参数的命令 > /review {{文件路径}} ``` #### 命令模板变量 | 变量 | 说明 | |------|------| | `{{file}}` | 当前选中的文件 | | `{{selection}}` | 当前选中的代码 | | `{{directory}}` | 当前目录 | | `{{project}}` | 项目根目录 | ### 15.7 成本估算 #### Token 消耗参考 | 操作类型 | 大约 Token 消耗 | 说明 | |---------|----------------|------| | 读取 CLAUDE.md | 500-2000 | 取决于文件大小 | | 读取单个文件 | 200-1000 | 取决于文件大小 | | 生成代码 | 500-3000 | 取决于复杂度 | | 代码审查 | 1000-5000 | 取决于代码量 | | 完整会话 | 5000-50000 | 取决于任务复杂度 | #### 成本优化建议 1. **精简 CLAUDE.md**:减少每次会话的基础消耗 2. **使用子目录初始化**:限制上下文范围 3. **使用 /compact**:压缩对话历史 4. **使用 .ignore**:排除无关文件 5. **分阶段对话**:避免一次加载过多内容 ### 15.8 团队培训要点 #### 基础培训(第 1 天) - Claude Code 安装和基础使用 - CLAUDE.md 概念和分层配置 - 上下文管理基础(/compact、@ 引用) - 实际操作练习 #### 进阶培训(第 2-3 天) - 扩展点详解(钩子、技能、MCP) - 大型代码库配置模式 - 安全最佳实践 - 故障排除和错误恢复 #### 专家培训(后续) - 自定义扩展开发 - 组织治理框架 - 最佳实践制定和分享 ### 15.9 学习路径概览 ``` 基础阶段(1-2 周) ├── 安装配置、基本命令 ├── CLAUDE.md 编写 ├── 上下文管理技巧 └── 日常任务处理 进阶阶段(1-2 月) ├── 钩子和技能开发 ├── MCP 服务器集成 ├── 大型代码库配置策略 ├── 安全和治理 专家阶段(长期) ├── 组织级部署 ├── 自定义扩展开发 ├── 团队培训和指导 └── 最佳实践制定 ``` ### 15.10 参考资源 - [Claude Code 官方文档](https://claude.ai/code/docs) - [Anthropic API 文档](https://docs.anthropic.com) - [MCP 协议规范](https://modelcontextprotocol.io) - [LSP 规范](https://microsoft.github.io/language-server-protocol/) - [Claude Code GitHub](https://github.com/anthropics/claude-code) ### 15.11 远程开发环境使用 Claude Code 支持多种远程开发环境,这对于大型代码库的分布式团队很重要。 #### SSH 远程连接 ```bash # 通过 SSH 在远程服务器使用 Claude Code ssh user@remote-server # 在远程服务器上启动 cd /path/to/repo claude # 注意事项: # - 需要在远程服务器上安装 Claude Code # - API 密钥需要在远程服务器配置 # - 文件编辑在远程服务器上进行 ``` #### Docker 容器环境 ```bash # 在 Docker 容器中使用 Claude Code docker run -it \ -v /path/to/repo:/workspace \ -v ~/.claude:/root/.claude \ node:18 \ /bin/bash # 容器内安装 Claude Code npm install -g @anthropic-ai/claude-code # 在容器内启动 cd /workspace claude ``` #### WSL (Windows Subsystem for Linux) ```bash # 在 WSL 中使用 Claude Code # 进入 WSL wsl # 安装 Claude Code npm install -g @anthropic-ai/claude-code # 配置 Windows 文件访问 cd /mnt/c/Users/username/project claude ``` #### 远程环境注意事项 | 环境 | 特殊配置 | 注意事项 | |------|---------|---------| | **SSH** | API 密钥配置 | 网络延迟可能影响响应速度 | | **Docker** | 挂载卷配置 | 确保工作目录和配置正确挂载 | | **WSL** | Windows 路径映射 | 使用 /mnt/c/ 访问 Windows 文件 | | **远程桌面** | 无特殊配置 | 与本地使用体验一致 | ### 15.12 团队协作场景 大型代码库中多人协作的典型场景和最佳实践。 #### 场景 1:共享 CLAUDE.md 配置 ``` ┌─────────────────────────────────────────────────────────────┐ │ 团队配置共享流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 团队负责人创建 CLAUDE.md 模板 │ │ ↓ │ │ 2. 提交到版本控制(Git) │ │ ↓ │ │ 3. 所有成员拉取最新配置 │ │ ↓ │ │ 4. 成员可根据本地需求添加个人配置 │ │ (在 ~/.claude/settings.json) │ │ │ │ 关键:项目级配置版本控制,用户级配置本地 │ └─────────────────────────────────────────────────────────────┘ ``` **配置层级原则:** | 配置类型 | 存储位置 | 版本控制 | 适用范围 | |---------|---------|---------|---------| | 项目约定 | 项目 CLAUDE.md | 是 | 全团队 | | 共享技能 | `.claude/skills/` | 是 | 全团队 | | 共享钩子 | 项目 settings.json | 是 | 全团队 | | 个人偏好 | `~/.claude/settings.json` | 否 | 个人 | #### 场景 2:多人同时编辑同一模块 ```markdown ## 协作最佳实践 ### 避免冲突的方法 1. **明确分工**:在 CLAUDE.md 中记录各模块负责人 2. **小批量修改**:每次会话只处理少量文件 3. **及时同步**:频繁提交和拉取更改 4. **代码审查**:AI 生成的代码同样需要审查 ### 处理流程 1. 开始会话前:git pull 获取最新代码 2. 会话中:Claude Code 编辑文件 3. 会话后:git commit + git push 4. 如遇冲突:手动解决或重新生成 ``` #### 场景 3:跨团队知识共享 ```json // 组织级插件配置示例 { "name": "org-shared-skills", "skills": [ "security-review.md", // 安全团队贡献 "database-migration.md", // DBA 团队贡献 "api-conventions.md" // 平台团队贡献 ], "distribution": { "method": "internal-marketplace", "updateFrequency": "monthly" } } ``` #### 场景 4:新成员快速上手 ``` 新成员入职第一天: ┌─────────────────────────────────────────────────────────────┐ │ 1. 安装 Claude Code │ │ 2. 安装组织插件(包含团队约定) │ │ 3. 拉取项目代码(包含 CLAUDE.md) │ │ 4. 在子目录启动 Claude Code │ │ 5. 请求 Claude 解释项目架构 │ │ 6. 使用 Claude 生成的代码作为学习参考 │ │ │ │ 预期效果:半天内理解项目结构,一天内开始贡献 │ └─────────────────────────────────────────────────────────────┘ ``` ### 15.13 版本兼容性说明 不同版本 Claude Code 的主要差异和升级注意事项。 #### 主要版本特性 | 版本 | 主要特性 | 配置变化 | |------|---------|---------| | **最新版** | 支持最新模型、MCP、子智能体 | 无重大变化 | | **早期版本** | 基础功能、CLAUDE.md、钩子 | 可能缺少新特性 | #### 升级建议 ```bash # 检查当前版本 claude --version # 升级到最新版 npm update -g @anthropic-ai/claude-code # 升级后检查配置兼容性 claude config check ``` #### 配置向后兼容 ```markdown ## 保持配置兼容性的建议 1. **使用标准配置格式** - 遵循官方文档的配置格式 - 避免使用实验性特性 2. **版本控制配置文件** - 配置变更时记录版本 - 升级后可回退配置 3. **定期审查配置** - 新版本发布后检查配置 - 移除已弃用的配置项 ``` --- ## 总结 成功部署 Claude Code 的关键因素: 1. **分层配置**:根目录提供概览,子目录提供细节 2. **渐进式披露**:使用技能按需加载专业知识 3. **自动化**:使用钩子强制执行规则,减少记忆负担 4. **知识共享**:使用插件分发最佳实践 5. **持续维护**:定期审查配置,适应模型发展 6. **组织支持**:指派负责人,建立治理流程 7. **了解边界**:理解 Claude Code 的限制,合理规划任务 8. **错误恢复**:掌握恢复策略,快速应对障碍 9. **团队协作**:配置共享、明确分工、及时同步 10. **环境适配**:支持远程开发、容器环境等多种场景 遵循本指南的模式和实践,团队可以充分发挥 Claude Code 在大型代码库中的潜力。记住:**有效的 Harness 配置比模型本身更能决定 Claude Code 的表现**。 --- *本指南基于 Anthropic 官方博客文章改编,并添加了详细示例和实践指南。* *原文链接:https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start*

WRITTEN BY

avatar