:10條技巧打造高效終端 AI 編程工作流)
我們團隊第一次認真把 Claude Code 放進日常開發(fā)流程是在一個內(nèi)部工具項目上。頭兩周的體驗可以用一句話概括每次開新會話它都像第一天入職的實習生——問一遍項目背景、又問一遍目錄結(jié)構(gòu)、改完代碼順手碰一下配置文件然后把環(huán)境搞壞。這些問題的根源并不復雜我們當時把 Claude Code 當成普通代碼生成器在用而它實際是一個需要“項目記憶 會話管理 權(quán)限約束 流程固化”的終端 Agent。堅持用下來之后我們把踩過的坑沉淀成 10 條內(nèi)部技巧。它們按四層展開記憶層CLAUDE.md 怎么寫、會話層上下文怎么維護、行為層權(quán)限和思考預算怎么調(diào)、自動化層高頻操作怎么變成長效按鈕。如果你已經(jīng)在用 Claude Code或者正打算把這類終端 AI 編程助手引入團隊這篇文章大概率能幫你跳過我們最初那幾個月反復翻車的過程。下面先給一張速覽表后面每個部分展開講。分層對應技巧一句話要點記憶層技巧 1-3用 CLAUDE.md 寫清項目身份、邊界和示例會話層技巧 4-6一個任務一條會話膨脹就壓縮恢復先復述行為層技巧 7-9審查用只讀模式權(quán)限按命令分檔思考預算設上限自動化層技巧 10斜杠命令 hooks 結(jié)構(gòu)化輸出把流程固化下來1. 項目記憶怎么喂CLAUDE.md 不只是說明書是入職培訓1.1 先把項目身份寫進去它得知道自己在哪個代碼庫里干活Claude Code 每次進入項目時會自動讀取根目錄下的 CLAUDE.md并且把它的內(nèi)容當作優(yōu)先于一切提示詞的“項目事實”。這個文件的重要性遠不是 README 能比的README 是給人類讀的項目說明書而 CLAUDE.md 是直接注入模型上下文的開發(fā)約定。你如果什么約定都不寫模型就只能從當前對話里的只言片語去推斷這個項目的全貌推斷一錯后面所有操作都會跟著歪。我建議在 CLAUDE.md 里至少包含這么幾塊項目的定位它到底解決什么問題、核心目錄結(jié)構(gòu)大的模塊分別在哪、常用命令測試、lint、構(gòu)建、啟動、以及當前已知的技術(shù)約束比如這個項目還沒有自動化測試改動后必須手動驗證某些頁面。寫的過程中不要追求文檔級嚴謹追求的是“模型第一次進項目就能上手”的完整度。比如你可以在里面寫# 項目 - 這是一個面向內(nèi)部運營人員的批量導出工具后端 Python FastAPI前端 Vue。 - 入口在 src/main.py配置文件集中在 config/。 - 新增接口時先看 controllers/ 里現(xiàn)有路由的寫法保持同一套風格。 # 常用命令 - 跑測試poetry run pytest tests/ - 跑 lintmake lint - 本地啟動make dev這段文字看起來像文檔但在實際運行中它就是模型每次思考的起點。把入口、命令、目錄邊界寫清楚之后它犯“不知道從哪里下手”這類低級錯誤的概率會明顯下降。1.2 除了“能做什么”還要寫清楚“不許做什么”很多團隊寫完 CLAUDE.md 的第一部分就停了這是一個典型缺口。模型是主動型 Agent它不只是回答你的問題它還會判斷“要不要順手改一下別的文件”“要不要幫你清一下緩存”。它對項目邊界的理解完全取決于你給了多少約束。所以 CLAUDE.md 里必須有一類負面清單明確告訴它哪些動作是紅線。這里要結(jié)合團隊真實情況去寫而不是把所有東西都塞進去。比如數(shù)據(jù)遷移腳本不能碰、生產(chǎn)配置文件不能動、刪除分支或強制推送之前必須停下來等人確認、測試用例只允許追加不允許重寫舊的斷言邏輯。邊界寫得太粗等于沒寫寫得太細模型每一步都會猶豫不決。我一般控制在“高風險動作 需要人工確認的例外”這個粒度把真正出過事或者一旦出事代價很大的動作列進去就夠了。1.3 規(guī)則必須配示例別指望模型靠“認真理解”來執(zhí)行這是我最想讓團隊新成員記住的一條。同一個約束寫在 CLAUDE.md 里有兩種寫法執(zhí)行效果天差地別。第一種是抽象描述“所有導出功能需要注意中文亂碼問題。”第二種是帶示例的寫法“導出 CSV 時統(tǒng)一使用 UTF-8 with BOM 編碼否則用 Excel 打開中文會亂碼參考 utils/csv_writer.py 里的 write_csv 實現(xiàn)?!蹦P蛯嶋H執(zhí)行時靠的不是你這句話的強烈程度而是它能否從上下文里找到一條可模仿的路徑。原理其實不復雜生成式模型在執(zhí)行規(guī)則時會傾向于選擇概率權(quán)重最高的路徑。你給的示例越具體路徑越清晰它就越容易按那條路走。反過來一條充滿“注意”“確?!薄罢_處理”這類抽象詞的規(guī)則會在第一次碰到具體場景時被各種可能性稀釋。所以我們在實際維護中定的規(guī)矩是每一條涉及代碼風格、編碼、目錄規(guī)范的約定后面必須跟一個可參考的文件名或代碼片段寧可用一行例子也不要寫五行形容詞。1.4 CLAUDE.md 的維護節(jié)奏每周花十分鐘過一遍CLAUDE.md 還有一個容易被忽視的坑它會長毛。項目推進兩周之后早期寫的約定可能已經(jīng)過時比如測試命令從 pytest 換成了 unittest但你還沒來得及更新。過時的記憶比沒有記憶更危險因為模型會把舊命令當成新事實然后每次跑測試都報錯你還以為是自己環(huán)境有問題。我們是固定每周五下午花十分鐘把本周新增的約定同步進 CLAUDE.md。做法很簡單大家把這次改動里“模型需要知道才能不犯錯”的信息提出來合并進去刪掉已經(jīng)失效的條目。這個動作本身不會花多少時間但它保證了 CLAUDE.md 永遠比團隊記憶新鮮。我見過很多團隊在 CLAUDE.md 上只花了 20 分鐘初始化之后就再也不碰結(jié)果半年后里面的命令已經(jīng)被廢棄了四分之三——這基本上是給自己埋雷。2. 會話怎么管Claude Code 的短期記憶要靠我們維護2.1 一個任務一條會話別把多需求塞進同一個窗口Claude Code 的一次會話本質(zhì)上是一段連續(xù)上下文。會話里聊過的內(nèi)容會一直保留在模型視野中直到上下文塞滿或者手動壓縮。很多問題都出在這用戶一邊讓它改支付模塊一邊順口問一句“順便幫我看下用戶列表那個 bug”結(jié)果改支付模塊的時候它突然把用戶列表相關(guān)的假設也帶進代碼里最后兩邊都沒改好。我們團隊現(xiàn)在的要求很簡單一個任務一條會話。任務開始前先想清楚目標任務結(jié)束之后把結(jié)論寫回項目文檔或直接 commit然后用 /clear 開一個全新的上下文。如果確實遇到“一個會話里必須處理兩個相關(guān)任務”就先做 A確認交付后再處理 B不要同時讓兩個任務共享同一段上下文。共享上下文本身不是問題問題是 A 的中間狀態(tài)會污染 B 的最終結(jié)果這種污染還特別難追查。2.2 上下文膨脹是有早期信號的別等它犯錯了再壓縮任何會話都逃不過上下文膨脹區(qū)別只是你能不能及時察覺。我們自己判斷是否需要壓縮靠三個信號模型開始反復確認同一個信息它開始遺忘早期對話里的關(guān)鍵約定同一個錯誤完全一樣地出現(xiàn)兩次以上。出現(xiàn)這些信號時用 /context 看一眼占用率然后執(zhí)行 /compact。有一點必須提醒壓縮之后的對話會丟掉大量細節(jié)模型能看到的“最近事實”變少了。所以壓縮前后要做一次交接動作——告訴它“項目背景都在 CLAUDE.md 里先把這份文件讀一遍再繼續(xù)我們剛才的任務”。如果沒有這個動作壓縮后它經(jīng)常會失憶式地重新問一遍問題。我們最初就吃過這個虧以為 /compact 是無損壓縮實際上它是摘要式壓縮前后的記憶銜接需要人來引導。2.3 恢復會話時先花十秒鐘復述目標再讓它繼續(xù)干活用claude -c恢復上一次會話是很多人的日常操作但這里藏著一個經(jīng)典錯誤一恢復就輸入“繼續(xù)”。問題在于“繼續(xù)”是個信息量極低的口令模型只能猜你繼續(xù)的方向。猜對了還好猜錯就在錯誤方向上多跑十分鐘還容易把已經(jīng)完成的部分改壞。我的習慣是恢復之后第一句話永遠按固定格式來“我們上一輪在改 XXX目標是什么目前做到了哪一步你現(xiàn)在先不要寫代碼先復述一下你對當前狀態(tài)的理解等我確認后再動手。”表面上是多花十幾秒實際上它能逼模型把決策上下文重新對齊。至少在我們實踐里加了這一步之后恢復會話后的返工率下降非常明顯。2.4 會話不是倉庫重要結(jié)論必須落盤這是會話管理里最反直覺的一條Claude Code 的上下文再好也是易失的。你關(guān)掉終端、清空會話、上下文壓縮都會讓之前的決策記錄消失。所以我們在團隊里立了一個規(guī)矩——凡是模型產(chǎn)出的關(guān)鍵結(jié)論、方案取舍、待辦事項都要在會話里讓它寫到一個 docs/ 或項目 notes 下的文件里。你甚至可以直接把它寫進 CLAUDE.md 作為固定姿勢任務結(jié)束前如果模型發(fā)現(xiàn)了會影響后續(xù)開發(fā)的信息它應該先更新 docs/ 再匯報。這樣做的好處是下次無論是你還是模型開一個新會話都能從文件而不是碎片對話里拿到完整背景。會話可以隨時丟倉庫里留下的才是資產(chǎn)。3. 自由度怎么給權(quán)限、只讀與思考預算的平衡術(shù)3.1 審查代碼時先切到規(guī)劃/只讀模式確認方案后再動手模型默認是邊看邊改的這讓“讓它審一下代碼”變成一件風險極高的事你以為它只是看它已經(jīng)在腦子里規(guī)劃了至少三種改法甚至順手刪掉了一個看著像沒用的變量。所以做代碼審查或方案設計時先把會話切到規(guī)劃模式讓它只能讀文件和搜索不能直接執(zhí)行寫操作等于給它的手戴上了手套。我們團隊的固定流程是審查需求先切規(guī)劃模式讓它寫出改動清單和風險點人工確認沒問題之后再切回正常模式把清單作為提示詞讓它實施。這個分步做法看起來多了一道工序但它帶來的收益很實在返工少了而且方案在動工之前就暴露了邊界問題。注意這個模式不是給模型看的是給人看的——它的核心目的是讓人類在模型動手前重新掌握一次決策權(quán)。3.2 權(quán)限審批按命令分檔別一鍵全放過也別每個動作都彈窗Claude Code 的權(quán)限機制經(jīng)常被用偏要么為了省事直接全部自動批準要么為了安全每個命令都彈確認框。前者出過一次事故后容易走向另一個極端后者又讓人疲勞到無腦點確定安全效果等于零。真正可持續(xù)的做法是按命令類型分檔讀取類操作自動放行測試、lint、構(gòu)建這類低風險命令放行文件寫入和需要改依賴的命令保留確認刪除分支、強制推送、修改生產(chǎn)配置這類高風險動作必須攔截。聽起來簡單但分檔表需要根據(jù)團隊實際慢慢調(diào)。剛開始可以偏保守每天花五分鐘看一次權(quán)限拒絕記錄把確認頻率太高的命令提升到自動放行把自動放行里出現(xiàn)過問題的命令降維。權(quán)限配置不是一次性的它跟 CLAUDE.md 一樣需要維護。我們團隊現(xiàn)在達成的共識是我們要的是低頻人工確認不是零確認零確認意味著人類對 Agent 的行為失去了感知。3.3 思考預算給模型的“想太多”設一個上限很多人沒有意識到的一件事是模型在復雜任務里的最大風險不是想得太少而是想得太多。具體表現(xiàn)是它會在一個方案的幾個備選路徑之間反復橫跳每改動一次就重新評估一次最后在旁支路徑上花了大量 token主路徑卻還沒走完。我們最初沒有限制思考預算時經(jīng)??吹剿谝粋€分支上重寫同一個文件三遍輸出看著很努力實際是無效內(nèi)耗。設置思考預算本質(zhì)上是在告訴模型你的探索額度有限把主要力氣花在核心路徑上。實踐里我們發(fā)現(xiàn)一個反直覺的現(xiàn)象把預算調(diào)低之后輸出反倒更穩(wěn)定了。因為它沒有多余的空間去考慮“要不要順便優(yōu)化一下這個模塊”只能沿著當前主任務走。這個調(diào)節(jié)需要根據(jù)不同任務的復雜程度分開設簡單的任務不需要高預算復雜重構(gòu)任務預算可以提高但始終要留一個上限防止它陷入無限翻燒餅。3.4 當它反復重試同一件事時先停手再接管最后一條行為層的經(jīng)驗來自我們每個人都遇到過的場景模型執(zhí)行某個命令失敗然后換個參數(shù)重試再失敗再換直到把上下文耗盡。這種反復重試看著像它在努力實際上很多時候它并沒有理解失敗的根本原因只是在同一個外環(huán)上打轉(zhuǎn)。如果連續(xù)兩三次同類型的工具調(diào)用都失敗繼續(xù)讓它試下去只會消耗預算不會帶來新進展。這時候要做的不是加大預算而是停手接管。先用 /status 看一眼它當前停在哪個狀態(tài)把失敗信息整理一下找出失敗的根本原因再以約束條件的形式重新告訴模型比如“剛才失敗是因為環(huán)境變量沒有設置現(xiàn)在不要重復執(zhí)行這個命令先檢查 env 配置”。接管之后通常一次就能走通。我們把它叫做人機協(xié)作里的守門員動作——模型負責推進人類負責在它原地轉(zhuǎn)圈時踩剎車。4. 流程怎么固化從斜杠命令到 hooks 的自動化鏈路4.1 把高頻操作變成斜杠命令讓團隊所有人在同一套姿勢里干活前面講的都是個人使用層面的經(jīng)驗但一個團隊能不能穩(wěn)定用好 Claude Code取決于流程有沒有被固化。我們做的最有效的一件事就是把高頻操作變成自定義斜杠命令在項目.claude/commands/目錄下放一個 Markdown 文件定義一條命令的固定提示詞成員在對話里輸入/命令名就能觸發(fā)。比如我定義過一條/code-review內(nèi)容是指定模型先檢查當前分支的改動范圍再跑 lint最后按影響面、風險點、建議三個維度輸出評審意見。這樣做的好處有兩個。第一新人不用自己摸索怎么提一個好問題直接輸入/code-review就能得到符合團隊標準的輸出第二評審口徑統(tǒng)一了不會出現(xiàn)一個人讓模型看性能、另一個人讓模型看代碼風格的情況。斜杠命令本質(zhì)上是把團隊的最佳實踐固化成了提示詞資產(chǎn)它比復制粘貼一長段提示詞可靠得多——因為命令名本身替你管好了上下文范圍。4.2 hooks 兜底在工具調(diào)用前后做自動檢查人記不住的事機器會記住斜杠命令解決的是“主動觸發(fā)”的場景但有些檢查不該靠人想起才做。Claude Code 支持 hooks一種在工具調(diào)用前后自動執(zhí)行命令的機制。我們固定掛了幾個在模型準備寫文件前檢查一次當前分支是否干凈在每次測試相關(guān)工具執(zhí)行后自動收集失敗輸出在任務結(jié)束時檢查是否有未提交的臨時文件。這些鉤子不用每次提醒觸發(fā)條件到了就會自動執(zhí)行。實戰(zhàn)中最能感受到 hooks 價值的是它消除了“人忘了讓模型做檢查”這個隱形成本。我們之前有個習慣每次提交前都讓模型手動檢查一遍有沒有遺留調(diào)試語句但人總有忘的時候模型也沒有主動意識去記住。掛了 hooks 之后這些檢查變成工程約束想跳都跳不過去。我的建議是從最簡單的鉤子開始比如放在文件寫入之前打印當前分支名并檢查是否包含臨時改動跑兩三天你就會發(fā)現(xiàn)它能攔住不少低級錯誤。4.3 結(jié)構(gòu)化輸出和子代理讓腳本能接力讓審查有痕跡當 Claude Code 開始處理大量重復性任務時純對話式的輸出就不夠用了。我們可以要求模型以 JSON 格式輸出結(jié)構(gòu)化結(jié)論然后用腳本或 CI 去讀取、校驗、匯總。比如批量檢查幾十個文件的代碼風格問題時模型的回答能不能被程序繼續(xù)處理決定了你是在看人肉報告還是在看可審計的報表。我們在 CLAUDE.md 里固定寫了一句當任務涉及批量檢查或清單匯總時先輸出 JSON再輸出人類可讀的摘要。另外子代理也是值得投入的方向。把安全掃描、日志分析、依賴版本核查這類專項任務分給獨立的子代理主 Agent 只負責調(diào)度和匯總結(jié)果能夠比所有事都交給一個 Agent 時更不容易串線。結(jié)構(gòu)化輸出解決的是“結(jié)果能不能被機器讀取”子代理解決的是“不同專業(yè)任務之間會不會互相污染”這兩個點配合起來就構(gòu)成了一條可以把 Claude Code 接進 CI 的鏈路。4.4 落地順序建議先記憶層再會話層最后才是自動化最后必須說一句潑冷水的話別在一開始就把上面十條全部鋪開。我們團隊的經(jīng)驗是一次性引入太多規(guī)則會讓大家每天都處在“被 AI 規(guī)范要求”的焦慮里反而失去用好工具的動力。真正跑通的節(jié)奏是分三個階段前兩周只做 CLAUDE.md把項目身份、邊界、示例規(guī)則寫到位第三周開始訓練會話習慣一人一任務、壓縮、恢復前先復述等這些都成為肌肉記憶之后再逐步上權(quán)限分檔和自動化命令。具體到自動化階段也要一個杠桿一個杠桿地加先加一條斜杠命令跑順了再加 hooks最后再考慮結(jié)構(gòu)化輸出和子代理。每加一項之前問自己一句這個流程是不是已經(jīng)被穩(wěn)定跑過了沒跑過就直接自動化只會把不穩(wěn)定的流程變成不穩(wěn)定的工程約束。如果你也剛準備把 Claude Code 引入團隊我的建議是從第一條開始先把你項目里最核心的十個約定寫進 CLAUDE.md——其余技巧都是在這個基礎上長出來的。