)
1. 為什么你的 Claude Code 總在“失憶”從一次真實(shí)返工說起剛用 Claude Code 的前兩周我?guī)缀趺刻於荚谥貜?fù)同一句話“保持最小改動別順手重構(gòu)。”它答應(yīng)得很好下一次會話又忘得干干凈凈。這不是模型笨而是它每次開新會話時對項(xiàng)目的認(rèn)知是空白的——除非你提前把規(guī)矩寫下來。CLAUDE.md就是這份“規(guī)矩”。它是 Claude Code 在每次會話啟動時第一個讀取的文件相當(dāng)于給 AI 簽的一份項(xiàng)目契約代碼風(fēng)格、目錄約定、測試命令、禁止事項(xiàng)全寫在這里。你不需要每次對話都重復(fù)交代它自己會先讀一遍再動手。這份契約適合誰三類人最該馬上做一是剛接觸 Claude Code、還在被“AI 亂改代碼”折磨的開發(fā)者二是團(tuán)隊(duì)里多人共用一套倉庫、希望 AI 輸出風(fēng)格統(tǒng)一的工程組三是用 Claude Code 做非編碼任務(wù)寫文檔、做產(chǎn)品原型的產(chǎn)品或運(yùn)營同學(xué)。一句話只要你希望 AI 穩(wěn)定遵循項(xiàng)目規(guī)范CLAUDE.md就是初始化階段最該花時間的一件事。我實(shí)測下來同一句“優(yōu)化 index.html”沒有契約時它刪了半個文件的樣式還改了變量命名寫好契約后它只動了三處、每處都帶注釋說明。差別不在模型在于你有沒有把約束前置。下面按“問題場景 → 前置準(zhǔn)備 → 可復(fù)制配置 → 驗(yàn)證請求 → 常見報錯 → 后續(xù)動作”的順序展開每一步都能直接跟做。2. 接入前的準(zhǔn)備TaoToken 環(huán)境與 Claude Code 安裝配置在寫契約之前得先讓 Claude Code 能跑起來。國內(nèi)直連 Anthropic 官方接口經(jīng)常超時所以這里用 TaoToken 做接入層——它提供兼容 Anthropic 協(xié)議的 API 端點(diǎn)Claude Code 只需改兩個環(huán)境變量就能指向它。先拿到 API Key。打開 https://taotoken.net/api-keys 登錄后創(chuàng)建一個新 Key復(fù)制保存。注意 Key 只在創(chuàng)建時完整顯示一次丟了就得重建。接著配置環(huán)境變量。Claude Code 讀取的是ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN這兩個變量。Linux/macOS 下寫入 shell 配置文件# 寫入 ~/.zshrc 或 ~/.bashrc export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-你剛才復(fù)制的KeyWindows PowerShell 用戶用$env:ANTHROPIC_BASE_URL https://taotoken.net/api $env:ANTHROPIC_AUTH_TOKEN sk-你剛才復(fù)制的Key改完執(zhí)行source ~/.zshrc或重開終端然后驗(yàn)證 Claude Code 是否裝好claude --version如果提示命令不存在先安裝npm install -g anthropic-ai/claude-code安裝完成后進(jìn)入你的項(xiàng)目目錄執(zhí)行claude啟動。第一次啟動它會問你信任哪些目錄選當(dāng)前項(xiàng)目即可。此時如果配置正確你會看到交互界面輸入一句“你好”能正?;貜?fù)說明接入層通了。這里有個容易踩的坑ANTHROPIC_BASE_URL末尾不要加/v1Claude Code 會自己拼接路徑。加了反而會 404。另外 Key 不要寫進(jìn)項(xiàng)目里的.env并提交到 Git環(huán)境變量方式最安全。環(huán)境通了才輪到本文的主角——契約文件。沒有可用的 Claude Code寫再多CLAUDE.md也沒人讀。3. 可復(fù)制的 CLAUDE.md 配置三層結(jié)構(gòu)與完整模板Claude Code 的契約體系分三層按加載順序從廣到窄層級路徑作用域是否提交 Git全局~/.claude/CLAUDE.md本機(jī)所有項(xiàng)目否項(xiàng)目./CLAUDE.md或./.claude/CLAUDE.md當(dāng)前倉庫是本地./CLAUDE.local.md當(dāng)前倉庫、僅自己否全局文件放跨項(xiàng)目通用的偏好比如“注釋用英文”“保持最小 diff”。項(xiàng)目文件放架構(gòu)、命令、目錄約定。本地文件放個人備注比如“我本地測試端口是 3001”。先創(chuàng)建全局文件mkdir -p ~/.claude touch ~/.claude/CLAUDE.md然后寫入下面這份精簡模板控制在 80 行內(nèi)別貪多# 全局編碼契約 ## 溝通方式 - 默認(rèn)中文回復(fù)代碼、命令、變量名用英文 - 不確定時先讀代碼庫不要憑空發(fā)明模式 ## 代碼風(fēng)格 - 注釋僅使用英文 - 遵循 DRY、KISS、YAGNI 原則 - 保持改動最小只圍繞當(dāng)前請求不回退無關(guān)改動 ## 錯誤處理 - 始終顯式拋出錯誤絕不靜默忽略 - 錯誤信息包含調(diào)試上下文請求參數(shù)、狀態(tài)碼 - 日志用結(jié)構(gòu)化字段不要把動態(tài)值插進(jìn)消息字符串 ## 終端使用 - 優(yōu)先非交互式命令 - git diff 用 git --no-pager diff - 搜索優(yōu)先用 rg ## 工作流 - 修改前先讀現(xiàn)有代碼和相關(guān) CLAUDE.md - 若項(xiàng)目指令含測試或 lint 命令且本次改了代碼完成前必須運(yùn)行項(xiàng)目級文件更具體。在項(xiàng)目根目錄執(zhí)行 Claude Code 的/init命令它會掃描項(xiàng)目生成初稿cd your-project claude # 進(jìn)入交互后輸入 /init生成的初稿通常是英文且偏泛手動改成中文并補(bǔ)上關(guān)鍵信息。一份可直接用的項(xiàng)目模板# 項(xiàng)目契約 ## 項(xiàng)目概述 靜態(tài) HTML 演示頁單文件 index.html內(nèi)嵌 CSS 與 JS。 ## 目錄結(jié)構(gòu) - index.html 入口頁面 - assets/ 靜態(tài)資源 - docs/ 設(shè)計(jì)文檔 ## 常用命令 - 本地預(yù)覽python3 -m http.server 8000 - 格式化npx prettier --write . ## 命名規(guī)范 - CSS 類名用 kebab-case - JS 變量用 camelCase常量全大寫 ## 邊界與禁止 - 不要引入新的第三方庫除非明確要求 - 不要改動 assets/ 下的二進(jìn)制文件 - 提交前必須跑一次格式化命令如果項(xiàng)目前后端分離在frontend/和backend/各自放一份CLAUDE.md避免規(guī)范互相干擾。子目錄文件會覆蓋上層同名規(guī)則。寫契約的核心判斷標(biāo)準(zhǔn)只有一條Claude 能從代碼里讀出來的不要寫它猜不到的必須寫。比如“用 4 空格縮進(jìn)”它能從現(xiàn)有代碼看出來不用寫“測試前必須先跑npm run build”它猜不到必須寫。4. 驗(yàn)證契約是否生效重跑同一任務(wù)對比輸出寫完契約不算完得驗(yàn)證它真的被讀取、真的改變了行為。方法很簡單找一個之前讓 AI 做過的任務(wù)清空會話重跑對比前后差異。先準(zhǔn)備一個“反例”。在沒寫契約時讓 Claude Code 優(yōu)化index.html它大概率會大改結(jié)構(gòu)、改命名、加一堆沒要求的兜底邏輯。記下這次 diff 的行數(shù)。然后確認(rèn)契約文件就位ls -la ./CLAUDE.md cat ./CLAUDE.md | head -20重啟 Claude Code退出再進(jìn)確保新會話加載契約輸入同一句指令優(yōu)化 index.html保持最小改動觀察它的行為。生效時你會看到幾個明顯信號它先讀CLAUDE.md界面會顯示讀取動作改動前會說明“根據(jù)項(xiàng)目契約我只調(diào)整 X”diff 行數(shù)顯著減少且不會引入新庫。我實(shí)測同一任務(wù)無契約時改了 47 行、動了 3 個函數(shù)名有契約后只改了 9 行全部集中在目標(biāo)區(qū)域還附了英文注釋。這就是契約的價值——把“每次都要交代”變成“一次寫好、次次生效”。如果發(fā)現(xiàn)它沒讀契約檢查三點(diǎn)文件是否在項(xiàng)目根目錄、文件名大小寫是否為CLAUDE.md、當(dāng)前會話是否在契約寫入之后啟動的。改完契約必須重啟會話才生效熱更新不保證。驗(yàn)證通過后把契約提交到 Gitgit add CLAUDE.md git commit -m chore: add CLAUDE.md contract團(tuán)隊(duì)協(xié)作時這份文件就是 AI 輸出的統(tǒng)一標(biāo)準(zhǔn)新人拉下倉庫即生效。5. 常見報錯排查401、local proxy failed 與契約不生效接入和驗(yàn)證過程中幾類報錯最常出現(xiàn)逐個對照處理。401 UnauthorizedKey 無效或沒被讀取。先確認(rèn)環(huán)境變量生效echo $ANTHROPIC_AUTH_TOKEN輸出為空說明沒寫進(jìn)當(dāng)前 shell重新source配置文件。輸出有值但仍 401去 https://taotoken.net/api-keys 檢查 Key 是否被刪或額度耗盡必要時重建。local proxy failed / connection refused通常是ANTHROPIC_BASE_URL寫錯。正確值是https://taotoken.net/api不要帶/v1不要帶末尾斜杠。改完重啟終端。reading choices 相關(guān)報錯這類多出現(xiàn)在用 OpenAI 兼容格式調(diào)用時。Claude Code 走的是 Anthropic 協(xié)議確認(rèn)你用的端點(diǎn)是 Anthropic 兼容入口而不是 OpenAI 的/v1/chat/completions。契約不生效最常見原因是文件位置或命名錯誤。Claude Code 只認(rèn)根目錄的CLAUDE.md或.claude/CLAUDE.mdclaude.md小寫不認(rèn)。另一個原因是會話沒重啟舊會話仍用舊契約。OAuth 相關(guān)提示如果你之前登錄過官方賬號可能殘留憑證沖突。清理~/.claude/下的舊憑證文件只保留環(huán)境變量方式。排查時記住一個順序先驗(yàn)證環(huán)境變量 → 再驗(yàn)證網(wǎng)絡(luò)可達(dá) → 最后驗(yàn)證契約文件。多數(shù)問題出在第一步。6. 契約之后讓規(guī)則隨錯誤迭代而不是一次寫全契約不是一次性寫完的文檔而是隨項(xiàng)目生長的活文件。最好的迭代方式是AI 每犯一次同樣的錯就往CLAUDE.md加一條規(guī)則。你可以直接讓 Claude Code 自己寫規(guī)則。發(fā)現(xiàn)它又加了沒要求的兜底邏輯就說你剛才加了未要求的兜底邏輯把這條約束寫進(jìn) CLAUDE.md它會生成一條精確規(guī)則并追加。這比自己措辭更省事也更貼合實(shí)際場景。長期用 Claude Code 做編碼和 Agent 任務(wù)的話穩(wěn)定的額度比反復(fù)試錯更重要。需要持續(xù)跑項(xiàng)目、頻繁調(diào)用模型的可以看看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan 按周期計(jì)費(fèi)比按量更劃算。只是偶爾驗(yàn)證模型效果的用模型對話https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chat 就夠。接入細(xì)節(jié)和參數(shù)說明都在接入文檔https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc 里遇到協(xié)議問題先查它。最后給一個實(shí)用習(xí)慣每次項(xiàng)目初始化先跑/init生成草稿手動精簡到 80 行內(nèi)提交 Git再開始寫業(yè)務(wù)代碼。契約先行后面每一次會話都省心。