Claude Code在大型項(xiàng)目中的最佳實(shí)踐指南
先說結(jié)論
很多團(tuán)隊(duì)引入 Claude Code 后,效果參差不齊。有的團(tuán)隊(duì)在百萬行 monorepo 里用得飛起,有的團(tuán)隊(duì)在幾千行的小項(xiàng)目里反而覺得"不如直接寫"。
差距不在模型,在配置。
Anthropic 的 Applied AI 團(tuán)隊(duì)觀察了大量企業(yè)級(jí)部署后,總結(jié)出一套可復(fù)用的模式。這篇文章把這套模式拆開講清楚,每一層都附上可以直接抄走的配置片段,讓你少走彎路。

Claude Code 怎么理解大型代碼庫
先搞清楚一個(gè)基礎(chǔ)問題:Claude Code 是怎么在代碼庫里找東西的?
它不用 RAG。
大多數(shù) AI 編碼工具的路子是:把整個(gè)代碼庫向量化,查詢時(shí)檢索相關(guān)片段。這套方案在小項(xiàng)目上沒問題,但在活躍的大型團(tuán)隊(duì)里會(huì)出問題——embedding 管道跟不上提交速度。你查的時(shí)候,索引可能還停留在兩周前的狀態(tài),返回的是已經(jīng)被重命名的函數(shù)、已經(jīng)刪掉的模塊,而且沒有任何提示說這些信息已經(jīng)過期。
Claude Code 的做法更接近一個(gè)真實(shí)的工程師:遍歷文件系統(tǒng)、讀文件、用 grep 精確定位、跨文件追蹤引用。它直接在開發(fā)者本地機(jī)器上運(yùn)行,操作的是實(shí)時(shí)代碼庫,沒有需要維護(hù)的中央索引。
你可以在一次會(huì)話里看到它真實(shí)的"思考路徑"——大致是這樣:
> 幫我找一下訂單超時(shí)退款的邏輯在哪
● 我先看一下項(xiàng)目結(jié)構(gòu)
└─ Bash(ls -la services/)
● 看起來訂單相關(guān)在 services/order/,先 grep 一下關(guān)鍵詞
└─ Grep("refund|timeout", path: "services/order", output_mode: "files_with_matches")
● 命中 3 個(gè)文件,重點(diǎn)看 refund_handler.go
└─ Read("services/order/internal/refund/refund_handler.go", offset: 1, limit: 80)
● 這里調(diào)用了 TimeoutPolicy.shouldRefund,跳過去看定義
└─ Grep("func.*shouldRefund", path: "services/order")
這個(gè)方案的代價(jià)是:它需要足夠的起始上下文才能知道去哪里找。如果你讓它在十億行代碼庫里搜索一個(gè)模糊的模式,還沒開始干活就會(huì)撞上上下文窗口限制。
所以,代碼庫的可導(dǎo)航性直接決定了 Claude Code 的上限。
核心認(rèn)知:模型只是一半,配置才是另一半
這是很多團(tuán)隊(duì)忽視的點(diǎn):Claude Code 的實(shí)際表現(xiàn),由圍繞模型構(gòu)建的"配套系統(tǒng)"決定,而不只是模型本身。
這套配套系統(tǒng)由五個(gè)擴(kuò)展點(diǎn)組成,加上兩個(gè)額外能力:
| 組件 | 是什么 | 何時(shí)加載 | 最適合做什么 |
|---|---|---|---|
| CLAUDE.md | Claude 自動(dòng)讀取的上下文文件 | 每次會(huì)話 | 項(xiàng)目約定、代碼庫知識(shí) |
| Hooks | 在關(guān)鍵時(shí)刻觸發(fā)的腳本 | 事件觸發(fā) | 自動(dòng)化一致性行為、捕獲會(huì)話學(xué)習(xí) |
| Skills | 特定任務(wù)類型的打包指令 | 按需加載 | 跨會(huì)話和項(xiàng)目的可復(fù)用專業(yè)知識(shí) |
| Plugins | 打包好的 skills + hooks + MCP 配置 | 安裝后始終可用 | 在組織內(nèi)分發(fā)一套完整配置 |
| LSP 集成 | 通過語言服務(wù)器提供實(shí)時(shí)代碼智能 | 配置后始終可用 | 符號(hào)級(jí)導(dǎo)航、自動(dòng)錯(cuò)誤檢測(cè) |
| MCP 服務(wù)器 | 連接外部工具和數(shù)據(jù)源 | 配置后始終可用 | 讓 Claude 訪問內(nèi)部工具 |
| Subagents | 獨(dú)立的 Claude 實(shí)例 | 按需調(diào)用 | 探索與編輯分離、并行工作 |
這五個(gè)擴(kuò)展點(diǎn)有構(gòu)建順序,每一層都建立在前一層之上。下面逐層拆。
第一層:CLAUDE.md——讓 Claude 理解你的項(xiàng)目
CLAUDE.md 是 Claude 在每次會(huì)話開始時(shí)自動(dòng)讀取的上下文文件。根目錄放全局信息,子目錄放局部約定。
關(guān)鍵原則:精簡(jiǎn)、分層。
根目錄的 CLAUDE.md 只放指針和關(guān)鍵注意事項(xiàng),其他的放到子目錄里。內(nèi)容越多,噪音越大,性能越差。
一個(gè)真實(shí)的根目錄 CLAUDE.md
# 項(xiàng)目概覽 這是一個(gè)電商平臺(tái)的 monorepo,約 80 萬行代碼,模塊如下: - /services/payment - 支付服務(wù)(Java 17 + Spring Boot 3.x) - /services/inventory - 庫存服務(wù)(Go 1.22) - /services/order - 訂單服務(wù)(Go 1.22) - /frontend - React 18 + Vite + TypeScript - /infra - Terraform + Helm - /docs - 架構(gòu)與 API 文檔 詳細(xì)模塊約定見各目錄下的 CLAUDE.md。 # 全局硬性約定 - 所有對(duì)外 API 的變更必須同步更新 `/docs/api-changelog.md`,未更新視為不完整 - 數(shù)據(jù)庫遷移文件放在 `/migrations`,命名格式:`YYYYMMDD_HHmm_描述.sql` - 禁止直接修改 `/generated` 目錄下的文件(由 buf/protoc 生成) - 提交前必須本地通過 `make precommit` - 任何新增依賴需要在 PR 描述里寫明引入理由 # 常用命令 | 場(chǎng)景 | 命令 | 說明 | |------|------|------| | 日常單元測(cè)試 | `make test-unit` | 約 1 分鐘 | | 完整測(cè)試 | `make test` | 約 20 分鐘,CI 才跑 | | 啟動(dòng)本地環(huán)境 | `make dev` | 依賴 Docker Desktop | | 類型 + lint 檢查 | `make check` | 提交前必跑 | # 不要做的事 - 不要在 `/services/payment` 里寫新功能時(shí)跑全量測(cè)試,單跑該模塊即可 - 不要在 PR 里同時(shí)混入格式化變更與邏輯變更 - 不要把環(huán)境變量寫進(jìn)代碼,統(tǒng)一在 `infra/env/` 配置
子目錄的 CLAUDE.md 只補(bǔ)充該目錄特有的信息
# /services/payment ## 技術(shù)棧 - Java 17,Spring Boot 3.2.x,Gradle 8 - 數(shù)據(jù)庫:PostgreSQL 15(主)+ Redis 7(限流/冪等) ## 測(cè)試與構(gòu)建 - 本模塊測(cè)試:`./gradlew :payment:test` - 集成測(cè)試需要 docker-compose:`make payment-it` - 構(gòu)建產(chǎn)物:`./gradlew :payment:bootJar` ## 關(guān)鍵文件 - `PaymentProcessor.java` —— 入口,**線程安全要求**,修改前必讀類頭注釋 - `gateway/` —— 各支付渠道適配,新增渠道走 `GatewayAdapter` 接口 - `idempotency/` —— 冪等鍵存儲(chǔ),禁止繞過 ## 常見任務(wù)索引 - 新增支付渠道:參考 `docs/add-gateway.md` - 修改對(duì)賬邏輯:必須同時(shí)更新 `tests/reconciliation/`
一個(gè)容易犯的錯(cuò)誤
把可復(fù)用的專業(yè)知識(shí)塞進(jìn) CLAUDE.md。比如把"如何做安全審查的 30 條清單"全塞進(jìn)根目錄——這些內(nèi)容應(yīng)該放進(jìn) Skills,按需加載,而不是每次會(huì)話都占用上下文。
判斷標(biāo)準(zhǔn)很簡(jiǎn)單:這條信息每次會(huì)話都需要嗎? 是 → CLAUDE.md;否 → Skill。
第二層:Hooks——讓配置自我進(jìn)化
大多數(shù)團(tuán)隊(duì)把 Hooks 理解成"防止 Claude 做錯(cuò)事的腳本"。這只用到了 Hooks 一半的價(jià)值。
Hooks 更大的價(jià)值在于持續(xù)改進(jìn)。
基礎(chǔ)用法:寫完文件自動(dòng)格式化
// .claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "if [[ \"$CLAUDE_FILE_PATH\" =~ \\.(ts|tsx|js|jsx)$ ]]; then npx prettier --write \"$CLAUDE_FILE_PATH\" && npx eslint --fix \"$CLAUDE_FILE_PATH\"; fi"
},
{
"type": "command",
"command": "if [[ \"$CLAUDE_FILE_PATH\" =~ \\.go$ ]]; then gofmt -w \"$CLAUDE_FILE_PATH\" && goimports -w \"$CLAUDE_FILE_PATH\"; fi"
}
]
}
]
}
}進(jìn)階用法:阻止危險(xiǎn)操作
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/guard-bash.sh"
}
]
}
]
}
}
.claude/hooks/guard-bash.sh:
#!/usr/bin/env bash
# 攔截高危命令:rm -rf /、生產(chǎn)數(shù)據(jù)庫連接、force push 到 main
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')
if echo "$CMD" | grep -qE '(rm\s+-rf\s+/|drop\s+database|--force.*origin/main)'; then
echo '{"decision":"block","reason":"危險(xiǎn)命令已攔截,請(qǐng)人工確認(rèn)后再執(zhí)行"}'
exit 0
fi
if echo "$CMD" | grep -qE 'psql.*prod|kubectl.*-n\s+production'; then
echo '{"decision":"ask","reason":"該命令會(huì)接觸生產(chǎn)環(huán)境,請(qǐng)確認(rèn)意圖"}'
exit 0
fi
最被低估的用法:會(huì)話學(xué)習(xí) Hook
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": ".claude/hooks/session-reflect.sh"
}
]
}
]
}
}.claude/hooks/session-reflect.sh:
#!/usr/bin/env bash
# 會(huì)話結(jié)束時(shí),讓 Claude 自己反思有沒有值得沉淀到 CLAUDE.md 的東西
SESSION_DIR="${CLAUDE_PROJECT_DIR}/.claude/sessions"
mkdir -p "$SESSION_DIR"
cat <<'PROMPT' > "$SESSION_DIR/reflect-prompt.md"
回顧這次會(huì)話:
1. 我有沒有走過彎路?是因?yàn)槿鄙倌臈l上下文?
2. 哪些用戶的糾正應(yīng)該寫進(jìn) CLAUDE.md 讓以后不再犯?
3. 是否發(fā)現(xiàn)了應(yīng)該寫成 Skill 的可復(fù)用模式?
請(qǐng)生成 patch 建議,不要直接修改文件。
PROMPT
# 觸發(fā)一次獨(dú)立 Claude 進(jìn)程做反思,寫到 inbox 等人 review
claude -p "$(cat $SESSION_DIR/reflect-prompt.md)" \
--output-format json \
> "$SESSION_DIR/$(date +%Y%m%d-%H%M%S).reflection.json"
第二天上班的時(shí)候,DRI 把 sessions/ 里的反思掃一遍,把真正有價(jià)值的沉淀到根 CLAUDE.md。這是配置隨時(shí)間自我進(jìn)化的核心機(jī)制。
第三層:Skills——按需加載專業(yè)知識(shí)
大型代碼庫有幾十種任務(wù)類型。如果把所有專業(yè)知識(shí)都塞進(jìn)每次會(huì)話,上下文會(huì)被撐爆,性能會(huì)下降。
Skills 解決這個(gè)問題的方式叫漸進(jìn)式披露:把專業(yè)工作流和領(lǐng)域知識(shí)打包成獨(dú)立的 Skill,只在任務(wù)需要時(shí)加載。
一個(gè) Skill 的真實(shí)結(jié)構(gòu)
.claude/skills/payment-gateway-onboarding/
├── SKILL.md # 入口文件,含 frontmatter
├── checklist.md # 接入新支付渠道的 30 項(xiàng)檢查清單
├── templates/
│ ├── adapter.java.tmpl # 適配器模板
│ └── test.java.tmpl # 測(cè)試模板
└── references/
└── compliance.md # PCI-DSS 合規(guī)要點(diǎn)(按需讀?。?
SKILL.md:
--- name: payment-gateway-onboarding description: 接入新的第三方支付渠道(Stripe / Adyen / 支付寶 / 微信支付等)。當(dāng)用戶提到"接入支付"、"新增 gateway"、"對(duì)接 XX 支付"時(shí)使用。 allowed-paths: - services/payment/** --- # 接入新支付渠道 ## 第一步:確認(rèn)信息齊全 在動(dòng)手前,確認(rèn)拿到了以下材料(缺一不可): - [ ] 渠道方的 API 文檔與沙箱環(huán)境憑證 - [ ] 商戶號(hào) / appid(生產(chǎn) + 沙箱) - [ ] 回調(diào)簽名算法與公私鑰 - [ ] 合規(guī)備案文檔(見 `references/compliance.md`) ## 第二步:生成骨架 基于 `templates/adapter.java.tmpl` 創(chuàng)建新文件: `services/payment/src/main/java/.../gateway/<channel>/<Channel>Adapter.java` ## 第三步:實(shí)現(xiàn) GatewayAdapter 接口 必須實(shí)現(xiàn):`charge`, `refund`, `query`, `verifyCallback`。 冪等鍵統(tǒng)一走 `IdempotencyService`,不要自己造輪子。 ## 第四步:測(cè)試矩陣 按 `checklist.md` 跑完 30 項(xiàng)檢查,缺一項(xiàng)不允許合并。
Skills 的路徑作用域
注意上面 frontmatter 里的 allowed-paths——這個(gè) Skill 只在 services/payment/** 下工作時(shí)激活。前端工程師改 React 組件時(shí),不會(huì)被這個(gè) Skill 打擾。這對(duì) monorepo 特別重要。
實(shí)際的 Skill 庫示例
成熟團(tuán)隊(duì)的 .claude/skills/ 目錄大概長(zhǎng)這樣:
.claude/skills/ ├── security-review/ # 安全審查清單 ├── payment-gateway-onboarding/ # 新增支付渠道 ├── db-migration/ # 數(shù)據(jù)庫遷移規(guī)范 ├── api-changelog/ # API 變更自動(dòng)更新 changelog ├── incident-postmortem/ # 事故復(fù)盤模板 └── frontend-component-new/ # 新增前端組件
每個(gè) Skill 只在被相關(guān)任務(wù)激活時(shí)加載,平時(shí)不占上下文。
第四層:Plugins——把好的配置分發(fā)出去
一個(gè)團(tuán)隊(duì)摸索出了好用的 Skills + Hooks + MCP 配置組合,怎么讓整個(gè)組織都用上?
答案是 Plugins:把這些東西打包成一個(gè)可安裝的包。新工程師入職第一天安裝這個(gè) Plugin,立刻擁有和老員工一樣的上下文和能力。
一個(gè)內(nèi)部 Plugin 的目錄結(jié)構(gòu)
acme-platform-plugin/
├── plugin.json # 清單
├── skills/
│ ├── deploy-to-staging/
│ └── internal-rpc-client/
├── hooks/
│ ├── settings.json
│ └── scripts/
│ └── jira-link.sh
└── mcp/
└── servers.json # 內(nèi)部 analytics / Jira / Confluence MCP
plugin.json:
{
"name": "acme-platform",
"version": "1.4.2",
"description": "Acme 內(nèi)部 Claude Code 配置:部署、Jira、內(nèi)部 RPC 工具集",
"skills": ["./skills/deploy-to-staging", "./skills/internal-rpc-client"],
"hooks": "./hooks/settings.json",
"mcp": "./mcp/servers.json",
"minimum-claude-code": "1.0.0"
}工程師只需要:
claude plugin install git@github.acme.com:devplatform/claude-code-plugin.git
Anthropic 觀察到的真實(shí)案例
一家大型零售商在全面推廣 Claude Code 之前,先構(gòu)建了一個(gè) Skill,把 Claude 連接到他們的內(nèi)部分析平臺(tái),讓業(yè)務(wù)分析師不用離開工作流就能拉取性能數(shù)據(jù)。這個(gè) Skill 被打包成 Plugin,在大規(guī)模推廣前就分發(fā)到位了——先做基礎(chǔ)設(shè)施,再做推廣,這是順序問題。
第五層:LSP 集成——從文本匹配升級(jí)到符號(hào)導(dǎo)航
沒有 LSP 的情況下,Claude 用文本匹配來找代碼。在大型代碼庫里,grep 一個(gè)常見函數(shù)名比如 process 可能返回幾千個(gè)匹配,Claude 要燒掉大量上下文逐個(gè)打開文件判斷哪個(gè)才是目標(biāo)。
有了 LSP,Claude 獲得了和 IDE 一樣的導(dǎo)航能力:追蹤函數(shù)調(diào)用到定義、跨文件追蹤引用、區(qū)分不同語言中同名函數(shù)。過濾在 Claude 讀任何文件之前就完成了。
配置 LSP 集成
// .claude/settings.json
{
"lsp": {
"servers": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"rootMarkers": ["package.json", "tsconfig.json"]
},
"go": {
"command": "gopls",
"args": ["serve"],
"rootMarkers": ["go.mod"]
},
"java": {
"command": "jdtls",
"rootMarkers": ["pom.xml", "build.gradle"]
},
"cpp": {
"command": "clangd",
"args": ["--background-index", "--clang-tidy"],
"rootMarkers": ["compile_commands.json"]
}
}
}
}沒 LSP 和有 LSP 的對(duì)比
# 沒 LSP:grep 找 ProcessOrder 的定義 $ grep -rn "ProcessOrder" . 找到 437 處匹配 → Claude 需要打開 N 個(gè)文件來確定真正的定義 # 有 LSP:goToDefinition → 一次調(diào)用直接返回 services/order/internal/processor.go:42 → 上下文消耗:1 個(gè)文件
一家企業(yè)軟件公司在推廣 Claude Code 之前,專門在全組織部署了 LSP 集成,目的是讓 C 和 C++ 的導(dǎo)航在大規(guī)模場(chǎng)景下可靠運(yùn)行。對(duì)于多語言代碼庫,這是投入產(chǎn)出比最高的基礎(chǔ)設(shè)施投資之一。
第六層:MCP 服務(wù)器——連接內(nèi)部工具
MCP 服務(wù)器是 Claude 連接內(nèi)部工具、數(shù)據(jù)源和 API 的方式。
一份典型的 MCP 配置
// .claude/mcp.json
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@acme/mcp-jira"],
"env": {
"JIRA_BASE_URL": "https://acme.atlassian.net",
"JIRA_TOKEN": "${JIRA_TOKEN}"
}
},
"internal-docs": {
"command": "node",
"args": ["./tools/mcp/confluence-server.js"],
"env": {
"CONFLUENCE_SPACE": "ENG"
}
},
"code-search": {
"command": "./tools/mcp/sourcegraph-server",
"env": {
"SG_ENDPOINT": "https://sg.internal.acme.com"
}
}
}
}
配上之后,Claude 可以直接調(diào)用 mcp__jira__create_issue、mcp__internal-docs__search 這類工具,不需要 copy-paste。
注意構(gòu)建順序
MCP 服務(wù)器應(yīng)該在基礎(chǔ)配置(CLAUDE.md、Hooks、Skills)都到位之后再構(gòu)建。常見的反模式是:
"我們先接一個(gè) GitHub MCP 上去看看效果。"
——結(jié)果是 Claude 在還沒搞清楚項(xiàng)目結(jié)構(gòu)的情況下亂調(diào)外部 API,搞出一堆噪音。基礎(chǔ)不打好,外部工具只會(huì)放大混亂。
三個(gè)讓大型代碼庫可用的配置模式
模式一:讓代碼庫對(duì) Claude 可導(dǎo)航
保持 CLAUDE.md 精簡(jiǎn)分層
根目錄只放指針和關(guān)鍵注意事項(xiàng)。Claude 在遍歷代碼庫時(shí)會(huì)逐層加載 CLAUDE.md,根目錄的上下文永遠(yuǎn)不會(huì)丟失,所以不需要在根目錄塞所有信息。
從子目錄初始化,不要從倉庫根目錄
在 monorepo 里,這可能反直覺——工具通常假設(shè)從根目錄運(yùn)行。但 Claude 會(huì)自動(dòng)向上遍歷目錄樹加載所有 CLAUDE.md,所以從子目錄開始工作,既能獲得局部精確上下文,也不會(huì)丟失根目錄的全局信息。
# 反例:在倉庫根目錄,讓它修支付服務(wù)的 bug cd ~/work/acme-monorepo claude # → 加載根 CLAUDE.md,但本地上下文還是倉庫根,開搜會(huì)掃到很多無關(guān)目錄 # 正解:直接進(jìn)子目錄 cd ~/work/acme-monorepo/services/payment claude # → 既加載了根 CLAUDE.md,又加載了 services/payment/CLAUDE.md # → 命令、測(cè)試范圍都自動(dòng)收斂到本服務(wù)
按子目錄作用域設(shè)置測(cè)試和 lint 命令
當(dāng) Claude 只改了一個(gè)服務(wù),卻要跑整個(gè)測(cè)試套件,會(huì)超時(shí),還會(huì)用無關(guān)輸出浪費(fèi)上下文。子目錄的 CLAUDE.md 應(yīng)該指定該目錄適用的命令:
# /services/inventory/CLAUDE.md ## 命令 - 單元測(cè)試:`go test ./...`(只跑本服務(wù),約 30 秒) - 集成測(cè)試:`make inventory-it`(依賴 docker-compose,約 3 分鐘) - 構(gòu)建:`go build ./cmd/server` - Lint:`golangci-lint run ./...` ?? 不要在本目錄下跑 `make test`(那是全量測(cè)試,20 分鐘,會(huì)超時(shí))。
注意:這個(gè)方案對(duì)服務(wù)化架構(gòu)效果好。對(duì)于有深層跨目錄依賴的編譯型語言 monorepo(比如大型 C++ 項(xiàng)目),按子目錄作用域更難實(shí)現(xiàn),可能需要項(xiàng)目特定的構(gòu)建配置。
用 .ignore 文件和權(quán)限規(guī)則排除噪音
// .claude/settings.json
{
"permissions": {
"deny": [
"Read(/generated/**)",
"Read(/node_modules/**)",
"Read(/build/**)",
"Read(/.next/**)",
"Read(/dist/**)",
"Read(/vendor/**)",
"Read(/**/*.min.js)",
"Read(/**/*.lock)"
],
"ask": [
"Bash(git push:*)",
"Bash(rm -rf:*)",
"Bash(kubectl:*)"
]
}
}把這個(gè)文件提交到版本控制,整個(gè)團(tuán)隊(duì)都能獲得同樣的降噪效果,不需要每個(gè)人單獨(dú)配置。
為目錄結(jié)構(gòu)不規(guī)范的代碼庫構(gòu)建代碼地圖
如果代碼沒有按常規(guī)目錄結(jié)構(gòu)組織,在倉庫根目錄放一個(gè) CODEMAP.md,給 Claude 一個(gè)可以掃描的目錄:
# 代碼庫結(jié)構(gòu)地圖 ## 一級(jí)目錄 - `/core` 核心業(yè)務(wù)邏輯(Java,約 30 萬行) - `/adapters` 外部系統(tǒng)適配器(按渠道分子目錄) - `/legacy-billing` 舊版計(jì)費(fèi)系統(tǒng)(PHP,**只讀**,2026Q4 下線) - `/tools` 內(nèi)部開發(fā)工具,CI 也依賴 - `/docs` 技術(shù)文檔(ADR + API 規(guī)范) ## 重要入口 - HTTP 入口:`core/src/main/java/.../HttpServer.java` - 定時(shí)任務(wù):`core/src/main/java/.../jobs/JobScheduler.java` - 配置加載:`core/config/` + 環(huán)境變量見 `infra/env/` ## 歷史包袱 - `core/util/Helpers.java` —— 4000 行的"什么都往里塞"工具類,要拆但還沒拆 - `adapters/legacy-mq/` —— 已停用但還沒刪,觸發(fā)別影響
然后在根 CLAUDE.md 加一句:不熟悉本倉庫的話先讀 CODEMAP.md。
模式二:隨模型演進(jìn)主動(dòng)維護(hù) CLAUDE.md
CLAUDE.md 里的指令是為當(dāng)時(shí)的模型寫的。模型升級(jí)后,這些指令可能變成負(fù)擔(dān)。
一個(gè)告訴 Claude 把每次重構(gòu)拆成單文件變更的規(guī)則,可能是為了幫助舊模型保持專注——但新模型完全能處理協(xié)調(diào)的跨文件編輯,這條規(guī)則反而會(huì)阻止它做正確的事。
建議每三到六個(gè)月做一次配置審查,在重大模型發(fā)布后也值得做一次。問自己每條規(guī)則:
| 問題 | 處理 |
|---|---|
| 這條規(guī)則是在補(bǔ)償模型的某個(gè)局限嗎? | 是 → 測(cè)試新模型是否還需要 |
| 這條規(guī)則是在表達(dá)真實(shí)的項(xiàng)目約定嗎? | 是 → 保留 |
| 半年內(nèi)有人違反過這條規(guī)則嗎? | 沒有 → 可能已是常識(shí),可以刪 |
| 這條規(guī)則的反例容易在 PR 里抓到嗎? | 是 → 移到 hook/CI,不要靠 prompt |
一份很務(wù)實(shí)的審查清單可以做成 Skill:
# .claude/skills/config-audit/SKILL.md --- name: config-audit description: 季度性審查 CLAUDE.md,識(shí)別可以刪除或遷移到 hook 的規(guī)則 --- 按以下步驟逐條審查: 1. 讀取所有 CLAUDE.md(根 + 各子目錄) 2. 對(duì)每條規(guī)則打三個(gè)標(biāo)簽:[必要 | 可移除 | 可移到 hook] 3. 生成 diff 提案到 `.claude/audit-YYYY-MM.md`,不直接改文件 4. 郵件 / Slack 通知 DRI review
模式三:給 Claude Code 管理分配明確的負(fù)責(zé)人
技術(shù)配置到位了,但沒有人負(fù)責(zé)維護(hù),配置會(huì)腐爛,好的實(shí)踐會(huì)停留在少數(shù)人手里。
Anthropic 觀察到推廣最順利的公司,都在大規(guī)模推廣之前做了專項(xiàng)基礎(chǔ)設(shè)施投入。有的是兩個(gè)工程師提前構(gòu)建了一套 Plugins 和 MCP,讓第一批用戶一上手就有生產(chǎn)力。有的是整個(gè)團(tuán)隊(duì)專門負(fù)責(zé) AI 編碼工具的基礎(chǔ)設(shè)施,在推廣前就把一切準(zhǔn)備好。
最低可行版本:一個(gè) DRI(直接負(fù)責(zé)人)。這個(gè)人負(fù)責(zé):
- Claude Code 配置的所有權(quán)
- Settings、權(quán)限策略、Plugin 市場(chǎng)、CLAUDE.md 約定的決策權(quán)
- 保持這些內(nèi)容的時(shí)效性
- 每月發(fā)一份"配置變更 + 數(shù)據(jù)指標(biāo)"周報(bào)
沒有這個(gè)角色,自下而上的采用會(huì)產(chǎn)生熱情,但也會(huì)產(chǎn)生碎片化——每個(gè)團(tuán)隊(duì)各自 摸索,好的實(shí)踐停留在部落知識(shí)里,無法擴(kuò)散。
對(duì)于大型組織,尤其是受監(jiān)管行業(yè),治理問題會(huì)早早浮現(xiàn):誰控制哪些 Skills 和 Plugins 可用?如何防止幾千個(gè)工程師各自重復(fù)構(gòu)建同樣的東西?AI 生成的代碼如何走和人工代碼一樣的審查流程?
建議從一開始就建立跨職能工作組,把工程、信息安全、合規(guī)代表拉在一起定義要求,共同制定推廣路線圖。
一個(gè)容易忽視的細(xì)節(jié):Subagents
Subagents 是獨(dú)立的 Claude 實(shí)例,有自己的上下文窗口,接受任務(wù)、完成工作、只把最終結(jié)果返回給父實(shí)例。
在大型代碼庫里,一個(gè)常見的高效模式是:探索和編輯分離。
實(shí)戰(zhàn)示例
假設(shè)你要在一個(gè) 50 萬行的服務(wù)里重構(gòu)日志模塊。直接做的問題是:父 Agent 一邊搜一邊讀,光是搞清楚"現(xiàn)在的日志怎么用的"就吃掉了 60% 的上下文,等到要編輯時(shí)已經(jīng)沒空間了。
正確的做法:
> 我要把項(xiàng)目里的 log4j 全部替換為 slog,先幫我摸清現(xiàn)狀
● 我先派一個(gè)只讀 subagent 去做完整調(diào)研,結(jié)果寫到文件,然后我基于結(jié)果做改動(dòng)。
● Task(subagent_type: "explore", description: "調(diào)研 log4j 使用")
Prompt:
遍歷整個(gè)倉庫,找出所有 log4j 的使用方式。生成報(bào)告到 .claude/scratch/log4j-usage.md,
包含:
1. 所有 import log4j 的文件路徑
2. 按使用模式分類(直接 logger.info / 包裝類 / 自定義 Appender)
3. 特殊用法清單(異步 logger、MDC、自定義格式)
不要做任何修改。
● [subagent 干完,返回報(bào)告路徑]
● 現(xiàn)在我讀這份報(bào)告,制定遷移計(jì)劃
└─ Read(".claude/scratch/log4j-usage.md")
父 Agent 的上下文窗口幾乎沒被探索消耗,全留給真正的重構(gòu)編輯。一次任務(wù)跑下來,能多撐 3-5 倍的工作量。
用 Subagent 做并行驗(yàn)證
> 改完后幫我跑三組驗(yàn)證 ● 并行啟動(dòng)三個(gè) subagent: Task(subagent_type: "test-engineer", "跑所有 log 相關(guān)單元測(cè)試") Task(subagent_type: "security-reviewer", "確認(rèn) slog 配置沒泄漏 PII") Task(subagent_type: "verifier", "對(duì)照遷移清單逐項(xiàng)核對(duì)")
主 Agent 等三個(gè)結(jié)果匯總,再?zèng)Q定是否合并。這個(gè)模式在大型 PR 收尾階段特別好用。
總結(jié):從哪里開始
如果你的團(tuán)隊(duì)剛開始在大型代碼庫里用 Claude Code,按這個(gè)順序來:
- 先寫 CLAUDE.md:根目錄放全局信息(用上面的模板抄一份),關(guān)鍵子目錄放局部約定。精簡(jiǎn),只放真正有用的。
- 配置 .ignore 和權(quán)限規(guī)則:排除生成文件和構(gòu)建產(chǎn)物,提交到版本控制。模板見上面
.claude/settings.json。 - 設(shè)置 LSP 集成:特別是 C/C++/Java 這類強(qiáng)類型語言,這是最高投入產(chǎn)出比的基礎(chǔ)設(shè)施。
- 構(gòu)建第一批 Hooks:從 lint/format 自動(dòng)化開始,再加一個(gè) stop 反思 hook,最后做命令攔截。
- 把可復(fù)用的專業(yè)知識(shí)打包成 Skills:不要全塞進(jìn) CLAUDE.md。先做 3-5 個(gè)高頻任務(wù)的 Skill。
- 打包成內(nèi)部 Plugin 分發(fā):讓新人
claude plugin install一行命令就能上車。 - 指定一個(gè) DRI:沒有負(fù)責(zé)人,配置會(huì)腐爛。
- 三到六個(gè)月做一次配置審查:隨模型演進(jìn)調(diào)整,刪掉已經(jīng)不需要的規(guī)則。
Claude Code 在百萬行 monorepo、幾十年歷史的遺留系統(tǒng)、跨幾十個(gè)倉庫的分布式架構(gòu)里都有成功案例。這些環(huán)境的共同點(diǎn)不是代碼庫有多整潔,而是團(tuán)隊(duì)在配置上做了投入。
模型只是一半,配置才是另一半。 把這另一半做到位,差距就出來了。
以上就是Claude Code在大型項(xiàng)目中的最佳實(shí)踐指南的詳細(xì)內(nèi)容,更多關(guān)于Claude Code在大型項(xiàng)目中的實(shí)踐的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章

Claude Code安裝完全指南(Mac版):Git,環(huán)境變量,PATH與常見報(bào)錯(cuò)一次講清
如果你是第一次從零配置 Claude Code,最容易失敗的不是安裝命令本身,而是整個(gè)環(huán)境鏈條沒有打通,這篇文章就專門講這個(gè)鏈條,而且盡量講全,有需要的小伙伴可以參考一下2026-05-21
Claude Code 是 Anthropic 官方的命令行 AI 編程助手,像在終端里有一個(gè)懂你整個(gè)代碼庫的高級(jí)工程師,本文給大家介紹Claude Code CLI 使用完整指南,感興趣的朋友跟隨小編一2026-05-21
Claude Code cli 及vscode版本的各種命令參考手冊(cè)(最新推薦)
Claudede是 Anthropic 提供的一個(gè)命令行接口,用于與 Claude AI 交互,它提供了超過70個(gè)內(nèi)置命令和綁定技能,這篇文章給大家介紹了Claude Code cli 及vscode版本的各種命令參2026-05-21
Claude code相關(guān)的skill是干什么以及有什么作用詳解
Skills是一種可復(fù)用的能力模塊,你可以把它理解成給Claude Code安裝的插件或技能包,這篇文章主要介紹了Claude code相關(guān)的skill是干什么以及有什么作用的相關(guān)資料,文中通過代2026-05-20
裝好 Claude Code 插件那一刻,大多數(shù)人就覺得集成完成了,其實(shí)那只是安裝完成,真正的集成是Claude 知道你的代碼風(fēng)格,你的項(xiàng)目結(jié)構(gòu),你用的技術(shù)棧,下面小編就和大家詳細(xì)2026-05-20
Claude Code 與 Codex Harness 設(shè)計(jì)對(duì)比分析:一種加法,一種減法
文章對(duì)比了ClaudeCode和CodexCLI的設(shè)計(jì)哲學(xué),從技術(shù)棧、主循環(huán)、工具系統(tǒng)、壓縮、權(quán)限、子agent、擴(kuò)展機(jī)制、跨端、成本與可觀測(cè)性等8個(gè)維度進(jìn)行了深入分析,感興趣的朋友跟隨2026-05-20
Claude Code對(duì)話自動(dòng)導(dǎo)入的完全指南
文章介紹了如何使用ChatCrystal導(dǎo)入和處理ClaudeCode的對(duì)話數(shù)據(jù),包括數(shù)據(jù)存儲(chǔ)位置、導(dǎo)入流程、噪音消息過濾、內(nèi)容清理、項(xiàng)目名提取、自定義數(shù)據(jù)目錄設(shè)置、自動(dòng)導(dǎo)入機(jī)制等步2026-05-19
一文徹底掌握.claude/目錄(讓Claude Code真正懂你的項(xiàng)目)
如果你曾經(jīng)用過Claude Code,或許會(huì)發(fā)現(xiàn)項(xiàng)目根目錄下突然多出一個(gè)名為.claude的文件夾,下面這篇文章主要介紹了ClaudeCode中.claude/目錄的相關(guān)資料,文中通過代碼介紹的非常2026-05-19
MCP是一種為Claude提供外部能力的機(jī)制,通過安裝不同功能的MCP服務(wù)器,可賦予Claude文件系統(tǒng)訪問、網(wǎng)頁抓取、瀏覽器自動(dòng)化等能力,下面就來詳細(xì)的介紹一下如何安裝,感興趣2026-05-19
本文主要介紹了安裝和配置Claude代碼助手的相關(guān)步驟,包括安裝官方包、配置環(huán)境變量、啟動(dòng)Claude、關(guān)閉確認(rèn)提示等,具有一定的參考價(jià)值,感興趣的可以了解一下2026-05-19










