4 4
5# Claude Code 最佳實踐5# Claude Code 最佳實踐
6 6
7> 從設定環境到跨平行工作階段擴展,充分利用 Claude Code 的提示和模式。7> 充分發揮 Claude Code 的效用:告訴 Claude 它看不到的資訊、給它一個可執行的檢查,並強制執行不容例外的規則。
8 8
9Claude Code 是一個代理式編碼環境。與等待回答問題的聊天機器人不同,Claude Code 可以讀取您的檔案、執行命令、進行變更,並在您觀看、重新導向或完全離開時自主地解決問題。9Claude Code 的設計讓您在大多數情況下,於全新工作階段中輸入的第一個簡單提示詞就已經能做對事情,完全不需要您事先進行任何設定。
10 10
11這改變了您的工作方式。您不再自己編寫程式碼並要求 Claude 審查,而是描述您想要的內容,Claude 會找出如何建立它。Claude 會探索、規劃和實施。11例如:
12 12
13但這種自主性仍然伴隨著學習曲線。Claude 在您需要理解的某些限制條件內工作。13* 為了讓命令能安全執行而不需要您逐一核准,新的終端機和 VS Code 工作階段會以[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)啟動,由分類器在任何有風險的操作執行前先進行審查。
14* 為了讓您的主要對話保持專注,同時讓獨立的工作平行進行,Claude 會將工作委派給 subagent,並且只在必要時才回報。
15* 為了讓長時間的工作階段能持續進行而不需要您管理,對話會在上下文視窗填滿之前自動壓縮。
14 16
15本指南涵蓋了在 Anthropic 內部團隊和在各種程式碼庫、語言和環境中使用 Claude Code 的工程師中已證明有效的模式。有關代理式迴圈在幕後如何運作的資訊,請參閱 [Claude Code 如何運作](https://code.claude.com/docs/zh-TW/how-claude-code-works.md)。17本頁說明預設行為不夠用時該怎麼做。這通常發生在您的專案有 Claude 無法單憑程式碼看出的知識、規則或限制時:
16 18
17***19* 只存在於某個人腦中的部署流程
20* 絕對不能被讀取的檔案
21* 任何工作必須通過才能算完成的檢查
22* 您必須控制在範圍內的預算
18 23
19大多數最佳實踐都基於一個限制條件:Claude 的內容視窗填滿得很快,隨著填滿,效能會下降。24沒有任何預設值能知道您專案的這些事情,因此在這方面,您只需少量設定就能獲得豐厚回報。
20 25
21Claude 的內容視窗保存您的整個對話,包括每條訊息、Claude 讀取的每個檔案和每個命令輸出。但是,這可能會很快填滿。單一除錯工作階段或程式碼庫探索可能會產生並消耗數萬個 token。26當工作階段的進展不如預期時,原因幾乎總是以下其中之一:
22 27
23這很重要,因為隨著內容填滿,LLM 效能會下降。當內容視窗即將滿時,Claude 可能會開始「忘記」早期的指示或犯更多錯誤。內容視窗是最重要的資源,需要管理。若要查看工作階段在實踐中如何填滿,請 [觀看互動式逐步解說](https://code.claude.com/docs/zh-TW/context-window.md),了解啟動時載入的內容以及每個檔案讀取的成本。使用 [自訂狀態列](https://code.claude.com/docs/zh-TW/statusline.md) 持續追蹤內容使用情況,並查看 [減少 token 使用](https://code.claude.com/docs/zh-TW/costs.md#reduce-token-usage) 以了解減少 token 使用的策略。28* Claude 打造出的東西與您想像的不同,或者它必須在每個工作階段開始時重新發現同一件事實。它缺少了無法透過閱讀儲存庫取得的資訊。請參閱[告訴 Claude 它看不到的資訊](#tell-claude-what-it-cant-see)。
29* Claude 說它完成了,但其實並未完全完成,通常是因為它沒有辦法檢查自己的工作。請參閱[給 Claude 一個可執行的檢查](#give-claude-a-check-to-run)。
30* Claude 做了在這個儲存庫中絕對不能發生的事,或跳過了必須執行的步驟。單靠提示詞無法保證這兩者。請參閱[強制執行不容例外的規則](#enforce-the-rules-that-cant-have-exceptions)。
31* Claude 做對了,但花費的時間、token 或權限提示超出了這項任務應有的成本。請參閱[變更預設值](#change-a-default)。
24 32
25***33[讓 Claude 在您不在時執行](#let-claude-run-without-you)將同樣的四點套用到無人值守的執行上,而[可以停止做的事](#what-you-can-stop-doing)則列出了因目前的模型而變得不再必要的建議。
26 34
27## 給 Claude 一種驗證其工作的方式35> [!NOTE]
28
29> [!TIP]
30>36>
31> 給 Claude 一個可以運行的檢查:測試、構建、截圖比較。這是您可以觀看的會話和可以離開的會話之間的區別。37> 整個團隊的設定請參閱另一個頁面:[為您的組織設定 Claude Code](https://code.claude.com/docs/zh-TW/admin-setup.md)。
32 38
33Claude 在工作看起來完成時停止。沒有可以運行的檢查,「看起來完成」是唯一可用的信號,您成為驗證循環:每個錯誤都在等待您注意到它。給 Claude 一些能產生通過或失敗的東西,循環就會自動關閉。Claude 完成工作、運行檢查、讀取結果,並迭代直到檢查通過。39## 確定性與非確定性指令
34 40
35檢查是任何在對話中返回 Claude 可以讀取的信號的東西:測試套件、構建退出代碼、linter、針對固定裝置比較輸出的腳本,或與設計進行比較的[瀏覽器截圖](https://code.claude.com/docs/zh-TW/chrome.md)。執行 [`/verify`](https://code.claude.com/docs/zh-TW/skills#run-and-verify-your-app) 在 Claude 的檢查通過後自己確認針對執行中應用程式的變更。41您給 Claude Code 的每一項指令都屬於以下其中一種:
36 42
37| 策略 | 之前 | 之後 |431. 非確定性:您撰寫指令,由 Claude(模型)讀取。這可以是您的提示詞、`CLAUDE.md` 或 skill。接著由模型決定如何處理這些資訊。它通常會遵循您的命令,而且目前的模型很擅長在沒有太多上下文的情況下理解您的意圖,但*無法保證*它會遵循您的指令。它仍然可能決定不做某些事,或做其他的事。
38| - | - | - |442. 確定性:您設定指令,由 Claude Code(執行框架)*必須*執行。這可以是 hook、拒絕規則或受管設定。無論模型決定做什麼,Claude Code 每次都會套用它。
39| **提供驗證標準** | *「實現一個驗證電子郵件地址的函數」* | *「編寫一個 validateEmail 函數。示例測試用例:[user@example.com](mailto:user@example.com) 為真,invalid 為假,[user@.com](mailto:user@.com) 為假。實施後運行測試」* |
40| **以視覺方式驗證 UI 更改** | *「使儀表板看起來更好」* | *「\[粘貼截圖] 實施此設計。對結果進行截圖並與原始設計進行比較。列出差異並修復它們」* |
41| **解決根本原因,而不是症狀** | *「構建失敗」* | *「構建失敗,出現此錯誤:\[粘貼錯誤]。修復它並驗證構建成功。解決根本原因,不要抑制錯誤」* |
42 45
43檢查存在後,決定它對停止的限制有多嚴格:46Claude Code 中的大多數功能都有這兩種形式:
44 47
45* **在一個提示中**:要求 Claude 運行檢查並在同一消息中迭代,如上表所示。48| | 非確定性(由 Claude 決定) | 確定性(由 Claude Code 強制執行) |
46* **在整個會話中**:將檢查設置為 [`/goal` 條件](https://code.claude.com/docs/zh-TW/goal)。單獨的評估器在每次轉換後重新檢查它,Claude 繼續工作直到目標解決。如果 Claude 停滯,Claude Code 最終會停止運行,目標仍然設置 — 請參閱 [/goal 評估如何運作](https://code.claude.com/docs/zh-TW/goal.md#how-evaluation-works)。49| :- | :- | :- |
47* **作為確定性門**:[Stop hook](https://code.claude.com/docs/zh-TW/hooks.md#stop) 將您的檢查作為腳本運行,並阻止轉換結束直到它通過。[Stop input](https://code.claude.com/docs/zh-TW/hooks.md#stop-input) 涵蓋連續阻止的上限。50| 要做什麼 | 您的提示詞、`CLAUDE.md`、Claude 自行選用的 skill | Hook,以及只有您能啟動的 skill |
48* **由第二意見**:[驗證子代理](https://code.claude.com/docs/zh-TW/sub-agents.md)或[動態工作流](https://code.claude.com/docs/zh-TW/workflows.md)檢查自己的發現,有一個新鮮的模型嘗試反駁結果,所以做工作的代理不是給它評分的那個。51| 可以觸及什麼 | 自動模式的分類器 | 拒絕規則、[嚴格模式](https://code.claude.com/docs/zh-TW/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)下的沙箱、受管設定 |
52| 何時算完成 | 要求提供證據、`/goal`、`/code-review` | 測試、型別檢查、`Stop` hook、CI |
53| 花費多少 | Effort 等級、Claude 自己的步調 | 搭配 `-p` 使用的 `--max-turns` 或 [`--max-budget-usd`](https://code.claude.com/docs/zh-TW/cli-reference)、您設定的[支出上限](https://code.claude.com/docs/zh-TW/costs.md) |
54| 誰有最終決定權 | Claude 對其所做工作的摘要 | 分支保護、核准合併的人 |
49 55
50每一步都用設置換取關注。提示版本適用於今天的任何任務。`/goal` 和 Stop hook 版本是讓無人值守運行正確完成而無需您的版本。56大多數時候,您會希望由 Claude 來決定。幾乎每項準則都有例外,而目前的模型很擅長閱讀眼前的程式碼,並判斷某項準則是否適用於當下情況。面對實際的程式碼,Claude 通常比您事先寫好的規則更適合做出判斷。
51 57
52讓 Claude 展示證據而不是聲稱成功:測試輸出、它運行的命令及其返回的內容,或結果的截圖。審查證據比自己重新運行驗證要快得多,並且它適用於您沒有觀看的會話。58確定性的方式適用於您希望確保某些事情*一定*發生(或一定不發生)的情況,無論模型如何決定。這不一定是什麼重大的事。自動模式已經會[封鎖重大的事情](https://code.claude.com/docs/zh-TW/permission-modes.md#what-the-classifier-blocks-by-default),例如正式環境部署或強制推送覆蓋他人的工作。它通常是*您的*專案特有的事情,而且可以要多小眾就多小眾:
53 59
54***60* 絕對不要編輯 `src/gen/` 中產生的用戶端
61* 建立檔案後一律執行授權標頭指令碼
55 62
56## 先探索,然後規劃,然後編碼63您可以將上述任一項寫成 `CLAUDE.md` 或提示詞中的一行,而 Claude 幾乎每次都會遵循。但無論您的措辭多麼強烈,Claude 是否在某個回合遵循那一行,仍然是由 Claude 決定。
57 64
58> [!TIP]65> [!TIP]
59>66>
60> 將研究和規劃與實施分開,以避免解決錯誤的問題。67> 如果您不斷為 `CLAUDE.md` 中的某一行加強語氣,而 Claude 仍然漏掉它,這表示那一行應該改成 hook。反之亦然:如果您為只是偏好的事情設了 hook,請刪除它們,讓 Claude 自行決定。
61 68
62讓 Claude 直接跳到編碼可能會產生解決錯誤問題的代碼。使用 [Plan Mode](https://code.claude.com/docs/zh-TW/permission-modes.md#analyze-before-you-edit-with-plan-mode) 將探索與執行分開。69## 告訴 Claude 它看不到的資訊
63 70
64推薦的工作流程有四個階段:71> [!TIP]
72>
73> 只寫下 Claude 無法透過閱讀儲存庫找到的內容,或是它原本必須在每個工作階段花時間重新發現的內容。
65 74
66**1. 探索**75Claude 在每項任務開始時都會閱讀您的程式碼,而目前的模型在這方面*非常*擅長。它們會找出您的檔案配置、慣例、測試框架,以及現有元件的建構方式,通常比您解釋得還快。這意味著您可能想為它寫下的大部分內容,Claude 其實都已經知道了。
67 76
68按 `Shift+Tab` 進入 Plan Mode,直到狀態欄顯示 `⏸ plan mode on`,或使用 `claude --permission-mode plan` 啟動工作階段。Claude 讀取文件並回答問題,不進行任何更改。77它找不到的是從來不在儲存庫中的資訊:
69 78
70```txt title="claude (plan mode)" wrap theme={null}79* 您的團隊在會議中做出的決定
71read /src/auth and understand how we handle sessions and login.80* 只存在於某個人腦中的部署流程
72also look at how we manage environment variables for secrets.81* 整合測試需要的環境變數
73```
74 82
75**2. 規劃**83還有一些資訊*確實*在儲存庫中,但需要花幾分鐘挖掘才能找到,而 Claude 必須在每個工作階段開始時重新挖掘一次。
76 84
77要求 Claude 創建詳細的實施計劃。85在為 Claude 寫下任何內容之前,一個很好的測試方式是:
78 86
79```txt title="claude (plan mode)" wrap theme={null}871. 它能透過閱讀程式碼找到這個資訊嗎?
80I want to add Google OAuth. What files need to change?882. 它實際上會去找嗎?
81What's the session flow? Create a plan.
82```
83 89
84按 `Ctrl+G` 在文本編輯器中打開計劃進行直接編輯,然後 Claude 再繼續。90如果兩者的答案都是肯定的,就不用寫。
85 91
86**3. 實施**92### 撰寫具體的提示詞
87 93
88通過批准計劃或按 `Shift+Tab` 切換出 Plan Mode,然後讓 Claude 編碼,根據其計劃進行驗證。94具體的提示詞之所以有幫助,也是同樣的道理,因為它給了 Claude 原本沒有的資訊。如果您一開始就指出檔案、描述症狀,並說明「修好」是什麼樣子,通常可以省下之後一輪的修正。
89 95
90```txt title="claude" wrap theme={null}96在兩種合理做法之間的偏好也是如此:Claude 無法從程式碼中讀出這一點,所以如果您在意它選哪一種,請一開始就說明。
91implement the OAuth flow from your plan. write tests for the
92callback handler, run the test suite and fix any failures.
93```
94 97
95**4. 提交**98| 與其說 | 不如試試 |
99| :- | :- |
100| *「修復登入錯誤」* | *「使用者回報工作階段逾時後登入失敗。檢查 src/auth/ 中的 token 重新整理,寫一個能重現問題的失敗測試,然後修復它」* |
101| *「新增日曆小工具」* | *「依照 HotDogWidget.php 的模式,打造一個可以選擇月份並在年份之間翻頁的日曆小工具。不要使用新的程式庫」* |
96 102
97要求 Claude 使用描述性消息進行提交並創建 PR。103如果您手上已經有 Claude 需要的東西,請直接交給它,而不是描述它:
98 104
99```txt title="claude" wrap theme={null}105* 檔案:輸入 `@` 和路徑,即可在訊息中[包含檔案內容](https://code.claude.com/docs/zh-TW/common-workflows.md#reference-files-and-directories)。
100commit with a descriptive message and open a PR106* 影像:將設計或錯誤的螢幕擷取畫面貼到提示詞中。
101```107* 命令輸出:從您的 shell 用 `cat error.log | claude -p "what's going on here"` 以管道傳入。
102 108
103Plan Mode 很有用,但也增加了開銷。109像 `think step by step` 或 `be thorough` 這樣的詞句只是一般的提示詞文字,而不是關鍵字。控制 Claude 思考深度的主要方式是 [effort 等級](https://code.claude.com/docs/zh-TW/model-config.md#adjust-effort-level),[變更模型和 effort](#change-the-model-and-effort) 中會說明。這類措辭仍然可以在 effort 設定範圍內稍微引導 Claude,但無法讓它超越該設定。
104 110
105對於範圍明確且修復很小的任務(如修復拼寫錯誤、添加日誌行或重命名變量),直接要求 Claude 執行。111仍然有幫助的一句話是 `be ambitious`。Claude 傾向以保守的方式理解請求,並打造能滿足需求的最小成果,因為它看不出您期望的程度有多高。當您想要更完整的版本,包含處理邊界情況和自然延伸的功能時,請明確說出來:
106 112
107當您對方法不確定、更改修改多個文件或您不熟悉被修改的代碼時,規劃最有用。如果您可以用一句話描述 diff,請跳過計劃。113```text theme={null}
114build the settings page from the mockup. be ambitious: empty and error states, the save flow wired up, keyboard navigation, not just the layout
115```
108 116
109***117這是在告訴 Claude 範圍(只有您知道),而不是要它多努力思考。
110 118
111## 在提示中提供具體的背景資訊119而當您是在探索而非修復特定問題時,像 `what would you improve in this file?` 這樣模糊的提示詞完全沒問題。您在過程中會需要多修正一些,這就是取捨。
112 120
113> [!TIP]121### 先與 Claude 腦力激盪
114>
115> 您的指示越精確,需要的修正就越少。
116 122
117Claude 可以推斷意圖,但無法讀心術。參考特定檔案、提及限制條件,並指出範例模式。123當您還不確定自己到底想要什麼時,不必在下提示詞之前就全部想清楚。改為請 Claude 採訪您:
118 124
119| 策略 | 之前 | 之後 |125```text theme={null}
120| - | - | - |126I want to add rate limiting to the public API but haven't thought it through yet. Interview me until you could write the spec, then write it to SPEC.md.
121| **限定任務範圍。** 指定哪個檔案、什麼情境和測試偏好。 | *「為 foo.py 新增測試」* | *「為 foo.py 編寫測試,涵蓋使用者未登入的邊界情況。避免使用 mock。」* |127```
122| **指向來源。** 引導 Claude 查看可以回答問題的來源。 | *「為什麼 ExecutionFactory 有這麼奇怪的 API?」* | *「查看 ExecutionFactory 的 git 歷史記錄,並總結其 API 是如何演變的」* |
123| **參考現有模式。** 指向您程式碼庫中的模式。 | *「新增日曆小工具」* | *「查看首頁上現有小工具的實作方式以了解模式。HotDogWidget.php 是一個很好的例子。按照模式實作新的日曆小工具,讓使用者選擇月份並向前/向後分頁以選擇年份。從頭開始構建,除了程式碼庫中已使用的程式庫外,不使用其他程式庫。」* |
124| **描述症狀。** 提供症狀、可能的位置,以及「修復」的樣子。 | *「修復登入錯誤」* | *「使用者報告在工作階段逾時後登入失敗。檢查 src/auth/ 中的驗證流程,特別是權杖重新整理。編寫一個失敗的測試來重現問題,然後修復它」* |
125 128
126模糊的提示在您進行探索且能夠進行過程修正時很有用。像 `「您會改進這個檔案的哪些地方?」` 這樣的提示可以發現您不會想到要詢問的事項。129Claude 會針對您尚未確定的部分提出選擇題:依使用者或依金鑰限制、超過限制的請求如何處理、哪些不在範圍內。它會持續提問,直到答案足以構成一份規格。
127 130
128### 提供豐富的內容131`SPEC.md` 產生之後,開啟一個全新的工作階段來依據它進行建置,讓建置從乾淨的上下文和書面的完成定義開始。這也是您之後在[給 Claude 一個可執行的檢查](#give-claude-a-check-to-run)中要讓審查者參照的檔案。
129 132
130> [!TIP]133### 保持 CLAUDE.md 簡短
131>
132> 使用 `@` 參考檔案、貼上螢幕擷取畫面/影像,或直接傳送資料。
133 134
134您可以透過多種方式向 Claude 提供豐富的資料:135Claude Code 會在每個工作階段載入 [`CLAUDE.md`](https://code.claude.com/docs/zh-TW/memory),這意味著其中的每一行在*每項*任務中都會佔用 Claude 一點注意力,無論是否相關。這就是為什麼這個檔案最好只包含 Claude 無法從程式碼本身推斷出的內容:
135 136
136* **使用 `@` 參考檔案**,而不是描述程式碼的位置。Claude 會在回應前讀取檔案。137* 如何在這個儲存庫中確認工作:確切的測試、型別檢查和 lint 命令,以及如何執行單一測試檔案
137* **直接貼上影像**。複製/貼上或拖放影像到提示中。138* 程式碼容易誤導的地方:到處都是但新程式碼不能仿效的舊模式,或看起來未使用但其實在用的目錄
138* **提供文件和 API 參考的 URL**。使用 `/permissions` 將常用網域加入允許清單。139* 不在儲存庫中的決定:團隊最終採用哪個錯誤輔助函式、部署如何運作、什麼需要遷移審查
139* **透過管道傳入資料**,執行 `cat error.log | claude -p "explain this error"` 來直接傳送檔案內容。140* 任何您已經修正過兩次的事情
140* **讓 Claude 自行取得所需內容**。告訴 Claude 使用 Bash 命令、MCP 工具或讀取檔案來自行提取背景資訊。
141 141
142***142通過這項測試的 `CLAUDE.md` 會保持簡短:
143 143
144## 設定你的環境144```markdown CLAUDE.md theme={null}
145# Commands
146- Install: pnpm install
147- Run one test file: pnpm vitest run path/to/file.test.ts
148- Typecheck: pnpm tsc --noEmit
145 149
146幾個設定步驟可以讓 Claude Code 在所有工作階段中發揮更大的效能。如需完整概述擴充功能及何時使用各功能,請參閱[擴充 Claude Code](https://code.claude.com/docs/zh-TW/features-overview.md)。150# Conventions
151- Use the error helpers in src/lib/errors.ts, never throw raw strings
152- src/legacy/ is still live but don't copy its patterns into new code
147 153
148### 撰寫有效的 CLAUDE.md154# Gotchas
155- Integration tests need DATABASE_URL set, see .env.example
156```
149 157
150> [!TIP]158在工作階段中,執行 `/context` 以確認 Claude 已載入該檔案。
151>
152> 執行 `/init` 以根據你目前的專案結構產生入門 CLAUDE.md 檔案,然後隨著時間推移進行調整。
153 159
154CLAUDE.md 是一個特殊檔案,Claude 在每次對話開始時都會讀取。包含 Bash 命令、程式碼風格和工作流程規則。這讓 Claude 擁有它無法從程式碼單獨推斷的持久性背景資訊。160請注意,型別檢查那一行只有命令。Claude 需要知道這個命令,才能在過程中檢查自己的工作。如果您還希望 Claude Code 在 Claude 完成前*強制*通過型別檢查,那是 [`Stop` hook](#enforce-the-check-with-a-stop-hook) 的工作。在這個檔案中寫 `Always typecheck before you finish` 這樣的一行,大多數時候有效,但不是每次都有效。
155 161
156CLAUDE.md 檔案沒有必需的格式,但要保持簡短且易於人類閱讀。例如:162您不必從頭撰寫這個檔案:
157 163
158```markdown CLAUDE.md theme={null}164* `/init` 會根據您的程式碼庫產生一個初始版本。之後的工作主要是刪除行數。[記憶指南](https://code.claude.com/docs/zh-TW/memory.md#write-effective-instructions)建議保持在 200 行以下。
159# 程式碼風格165* `/doctor` 會針對 Claude [已經能從程式碼推斷出](https://code.claude.com/docs/zh-TW/memory.md#my-claude-md-is-too-large)的內容建議刪除。
160- 使用 ES modules (import/export) 語法,而不是 CommonJS (require)166* `/doctor prompt-audit` 會標記為舊模型撰寫的指令、指向已不存在之檔案的指令,或[彼此矛盾](https://code.claude.com/docs/zh-TW/memory.md#audit-your-instruction-files)的指令。
161- 盡可能解構匯入 (例如 import { foo } from 'bar')
162 167
163# 工作流程168您的個人偏好應放在 `CLAUDE.local.md` 而非 `CLAUDE.md`,並將該檔案加入 `.gitignore`,讓它不會進入儲存庫。
164- 完成一系列程式碼變更後,務必進行型別檢查
165- 優先執行單一測試,而不是整個測試套件,以提高效能
166```
167 169
168執行 `/context` 以確認 Claude 已載入該檔案。CLAUDE.md 在每個工作階段都會被載入,所以只包含廣泛適用的內容。對於只有在某些時候相關的領域知識或工作流程,請改用[技能](https://code.claude.com/docs/zh-TW/skills.md)。Claude 會按需載入它們,而不會讓每次對話都變得臃腫。170> [!NOTE]
171>
172> 如果 Claude 一直忽略*確實*寫在 `CLAUDE.md` 中的某一行,加上 IMPORTANT 大概無法解決問題。要嘛是檔案變得太長導致那一行被淹沒,要嘛那一行是不容例外的規則,這種情況下它應該放在 [hook](#enforce-the-rules-that-cant-have-exceptions) 中。
169 173
170保持簡潔。對於每一行,問自己:*「移除這一行會導致 Claude 犯錯嗎?」* 如果不會,就刪除它。臃腫的 CLAUDE.md 檔案會導致 Claude 忽略你的實際指示!174### 將規則限定在程式碼庫的某個部分
171 175
172| ✅ 包含 | ❌ 排除 |176如果某條規則只在程式碼庫的某個部分有意義,請將它放在 [`.claude/rules/`](https://code.claude.com/docs/zh-TW/memory#path-specific-rules) 中並加上 `paths:` 篩選器,讓它只在 Claude 實際於該處工作時才載入。例如,這個 `.claude/rules/api.md` 會在處理 `src/api/` 下的 TypeScript 檔案時載入:
173| - | - |
174| Claude 無法猜測的 Bash 命令 | Claude 可以透過閱讀程式碼推斷的任何內容 |
175| 與預設值不同的程式碼風格規則 | Claude 已經知道的標準語言慣例 |
176| 測試指示和偏好的測試執行器 | 詳細的 API 文件(改為連結到文件) |
177| 儲存庫禮儀(分支命名、PR 慣例) | 經常變更的資訊 |
178| 專案特定的架構決策 | 冗長的解釋或教學 |
179| 開發人員環境怪癖(必需的環境變數) | 檔案逐一描述程式碼庫 |
180| 常見陷阱或非顯而易見的行為 | 自明的做法,如「編寫乾淨的程式碼」 |
181 177
182如果 Claude 儘管有規則反對仍持續做某件事,該檔案可能太長,規則被遺漏了。如果 Claude 詢問你在 CLAUDE.md 中已回答的問題,措辭可能不明確。將 CLAUDE.md 視為程式碼:當事情出錯時檢查它,定期修剪它,並透過觀察 Claude 的行為是否實際改變來測試變更。對於簽入的 CLAUDE.md,執行[`/doctor`](https://code.claude.com/docs/zh-TW/commands#all-commands),Claude 會建議刪除它可以從程式碼庫衍生的內容。178```markdown .claude/rules/api.md theme={null}
179---
180paths:
181 - "src/api/**/*.ts"
182---
183- Validate request bodies with the zod schemas in src/api/schemas/, don't hand-roll checks
184- Every new endpoint needs an entry in openapi.yaml, CI fails without it
185```
183 186
184如果 Claude 持續跳過一項指示,請在該行單獨添加強調,例如「重要」。如果你強調許多行,沒有一行會突出。將 CLAUDE.md 簽入 git,以便你的團隊可以貢獻。該檔案的價值會隨著時間推移而複合增長。187### 將團隊流程放在 skill 中
185 188
186CLAUDE.md 檔案可以使用 `@path/to/import` 語法匯入其他檔案。如需匯入規則和 CLAUDE.md 檔案可以存放的位置,請參閱 [CLAUDE.md 檔案](https://code.claude.com/docs/zh-TW/memory.md#claude-md-files)。189能力更強的模型懂得更多工程知識,但它不知道*您的*團隊如何進行發布、您的事件處理手冊寫了什麼,或您希望 API 文件如何撰寫。這類知識應放在 [skill](https://code.claude.com/docs/zh-TW/skills.md) 中:一個儲存在 `.claude/skills/<name>/SKILL.md` 的流程或團隊知識。
187 190
188### 設定權限191對於這類內容,skill 佔用的上下文也比 `CLAUDE.md` 少。對於 Claude 可以自行啟動的 skill,它在每個工作階段都會看到名稱和描述,但只有在任務需要時才會[讀取完整檔案](https://code.claude.com/docs/zh-TW/skills.md#skill-content-lifecycle)。放在 skill 中的冗長發布流程,不會像放在 `CLAUDE.md` 中那樣拖累您無關的錯誤修復。
189 192
190> [!TIP]193> [!NOTE]
191>194>
192> 若要減少提示而不放棄控制,請使用 `/permissions` 預先核准你信任的工具,並使用 `/sandbox` 讓沙箱命令無需詢問即可執行。當你想自己核准編輯和命令時,切換到手動模式。195> `CLAUDE.md` 的原則同樣適用於 skill:只寫下 Claude 無法自行找到的內容。
193 196
194在 Claude Code v2.1.283 或更新版本中,自動模式是互動式終端和 VS Code 工作階段的[內建起始權限模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode):一個單獨的分類器模型會檢查大多數操作,而不是你,並且只會阻止看起來有風險的操作,例如範圍提升、未知基礎設施或敵對內容驅動的操作。在較早的版本中,自動模式只在 Pro、Max 和 Team 方案上才是互動式終端和 VS Code 工作階段的內建起始權限模式。197對於有副作用的工作流程,例如實際進行發布,請加上 `disable-model-invocation: true`。這樣 Claude 就[無法自行啟動該 skill](https://code.claude.com/docs/zh-TW/skills.md#control-who-invokes-a-skill),只有在您自己輸入 `/release` 時才會執行。儲存為 `.claude/skills/release/SKILL.md` 時,它可能看起來像這樣:
195 198
196在手動模式中,Claude Code 會在可能修改你的系統的操作前詢問:檔案寫入、Bash 命令、MCP 工具。這很安全但很繁瑣。在第十次核准後,你就是在點擊而不是檢查。兩個工具在手動模式中減少了這些中斷,也適用於自動模式:199```markdown .claude/skills/release/SKILL.md theme={null}
200---
201name: release
202description: Cut a new release. Bumps the version, writes the changelog entry, tags it and pushes the tag so CI can publish.
203disable-model-invocation: true
204---
2051. Make sure you're on main with a clean tree. If not, stop and ask.
2062. Run `pnpm changeset version` and commit the result.
2073. Summarize the PRs merged since the last tag into CHANGELOG.md, one line each, user-facing changes only.
2084. Tag `v<new version>` and push the tag. CI publishes from there, never publish from your machine.
209```
197 210
198* **權限允許清單**:允許你知道是安全的特定工具,如 `npm run lint` 或 `git commit`211### 連接 Claude 需要的工具
199* **沙箱**:啟用作業系統級隔離,限制檔案系統和網路存取,讓 Claude 在定義的邊界內更自由地工作
200 212
201深入瞭解[權限模式](https://code.claude.com/docs/zh-TW/permission-modes.md)、[權限規則](https://code.claude.com/docs/zh-TW/permissions.md)和[沙箱](https://code.claude.com/docs/zh-TW/sandboxing.md)。213Claude 看不到的部分資訊完全存在於另一個系統中,例如您的議題追蹤器或錯誤儀表板。如果該系統有 CLI,那通常是最簡單的接入方式。例如,安裝並登入 `gh` 後,Claude 就能開啟 pull request 並閱讀審查留言,完全不需要您解釋。對於它沒見過的 CLI,讓它參考 `--help` 就足夠了。
202 214
203### 使用 CLI 工具215對於沒有 CLI 的系統,可以使用 [MCP](https://code.claude.com/docs/zh-TW/mcp.md)。您可以從 shell 新增伺服器:
204 216
205> [!TIP]217```bash theme={null}
206>218claude mcp add --transport http notion https://mcp.notion.com/mcp
207> 告訴 Claude Code 在與外部服務互動時使用 CLI 工具,如 `gh`、`aws`、`gcloud` 和 `sentry-cli`。219```
220
221之後該伺服器會出現在工作階段內的 `/mcp` 下。已連接的伺服器即使在您沒有使用時,也會將它們的工具名稱和指令加入上下文,因此值得在那裡[關閉您不需要的伺服器](https://code.claude.com/docs/zh-TW/mcp.md#disable-a-server-without-removing-it)。
222
223如果您使用的是有型別的語言,[程式碼智慧外掛](https://code.claude.com/docs/zh-TW/plugins/code-intelligence.md)能讓 Claude 直接跳到定義處,而不必翻閱許多檔案來尋找。
208 224
209CLI 工具是與外部服務互動最具背景資訊效率的方式。如果你使用 GitHub,請安裝 `gh` CLI。Claude 知道如何使用它來建立議題、開啟提取請求和閱讀評論。沒有 `gh`,Claude 仍然可以使用 GitHub API,但未經驗證的請求經常會達到速率限制。225## 給 Claude 一個可執行的檢查
210 226
211Claude 也很擅長學習它還不知道的 CLI 工具。嘗試像 `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.` 這樣的提示。227Claude 在工作看起來完成時就會停止。如果它沒有可以執行的東西來告訴它工作是否*真的*完成,那麼「看起來完成」就是它唯一的依據。實際上這會讓您成為測試套件,每個錯誤都會一直留在那裡,直到您碰巧注意到為止。
212 228
213### 連接 MCP 伺服器229如果您給它一個會回傳通過或失敗的東西,Claude 就能自己完成這個迴圈。它會進行變更、執行檢查,如果有東西壞了,它會閱讀輸出並加以修復,然後再次執行檢查。
214 230
215> [!TIP]231> [!TIP]
216>232>
217> 執行 `claude mcp add` 並提供伺服器名稱和 URL 或命令,以連接外部工具,如 Notion、Figma 或你的資料庫。例如:`claude mcp add --transport http notion https://mcp.notion.com/mcp`。233> 給 Claude 一個它可以執行且會回傳通過或失敗的東西。一旦有了這個,它就能自行持續進行,您也不必在旁盯著。
218 234
219使用 [MCP 伺服器](https://code.claude.com/docs/zh-TW/mcp.md),你可以要求 Claude 從議題追蹤器實現功能、查詢資料庫、分析監控資料、整合來自 Figma 的設計,以及自動化工作流程。235只要 Claude 能讀取結果,檢查幾乎可以是任何東西:
220 236
221### 設定 hooks237* 一個測試檔案
238* 建置的退出碼
239* Linter
240* 將輸出與固定測試資料進行差異比對的指令碼
241* 與設計稿並排的[瀏覽器螢幕擷取畫面](https://code.claude.com/docs/zh-TW/chrome.md)
222 242
223> [!TIP]243如果您的儲存庫已經有其中之一,那麼 `CLAUDE.md` 中最有用的一行就是執行它的命令。
224>
225> 對於必須每次都發生且沒有例外的操作,使用 hooks。
226 244
227[Hooks](https://code.claude.com/docs/zh-TW/hooks-guide.md) 在 Claude 工作流程中的特定點自動執行指令碼。與作為建議的 CLAUDE.md 指示不同,hooks 是確定性的,並保證操作會發生。245檢查要多嚴格由您決定。選項從由 Claude 自行決定,一路到由 Claude Code 強制執行:
228 246
229Claude 可以為你編寫 hooks。嘗試像 *「編寫一個在每次檔案編輯後執行 eslint 的 hook」* 或 *「編寫一個阻止寫入遷移資料夾的 hook。」* 這樣的提示。直接編輯 `.claude/settings.json` 以手動設定 hooks,並執行 `/hooks` 以瀏覽已設定的內容。247* 在提示詞中:`run the auth tests after, and keep going until they pass`。由 Claude 自行決定何時滿意。這適用於任何任務,今天就能用,不需要任何設定。
248* 作為目標:[`/goal all tests in tests/auth pass and lint is clean`](https://code.claude.com/docs/zh-TW/goal) 會設定一個條件,由另一個模型在每個回合後根據對話進行檢查,Claude 會持續工作直到條件達成。您在工作階段中自己很少需要這個。它對長時間的背景執行很重要,因為 Claude 有時會在仍有未完成項目時以進度摘要結束回合,而目標會把它送回去繼續工作。
249* 作為 Stop hook:[`Stop` hook](https://code.claude.com/docs/zh-TW/hooks#stop) 會在 Claude 嘗試結束回合時執行您的指令碼,如果指令碼以退出碼 2 結束,就會讓 Claude 回去繼續工作。這是由 Claude Code(執行框架)強制執行的,因此在型別檢查通過或達到[封鎖上限](https://code.claude.com/docs/zh-TW/hooks.md#stop-input)之前,回合不會結束。[下方有範例](#enforce-the-check-with-a-stop-hook)。
250* 由沒有撰寫程式碼的人審查:在終端機中,[`/code-review`](https://code.claude.com/docs/zh-TW/code-review-local) 會在一個從未看過您對話的全新 subagent 中審查差異。它不會受到產生程式碼時的推理所影響。
230 251
231### 建立技能252無論使用哪個選項,都請向 Claude 要求*證據*:它執行的命令及其輸出,或螢幕擷取畫面。單單一句「所有測試都通過」能告訴您的資訊很少,而閱讀輸出比自己重新執行檢查更快。對於您沒有在旁觀看的工作階段,這也是您唯一擁有的證據。
232 253
233> [!TIP]254> [!TIP]
234>255>
235> 在 `.claude/skills/` 中建立 `SKILL.md` 檔案,以提供 Claude 領域知識和可重複使用的工作流程。256> Claude 說它完成後,您也可以在工作階段中執行 [`/verify`](https://code.claude.com/docs/zh-TW/skills#run-and-verify-your-app),讓 Claude 建置並執行應用程式,然後查看結果。這能抓到測試和型別檢查會漏掉的問題。
236 257
237[技能](https://code.claude.com/docs/zh-TW/skills.md)使用特定於你的專案、團隊或領域的資訊擴充 Claude 的知識。Claude 在相關時自動應用它們,或者你可以使用 `/skill-name` 直接呼叫它們。258### 依據您的規格進行審查
238 259
239透過在 `.claude/skills/` 中添加包含 `SKILL.md` 的目錄來建立技能:260如果您希望審查是依據您的計畫檢查工作,而不是廣泛地尋找錯誤,請自己撰寫審查提示詞:
240 261
241```markdown .claude/skills/api-conventions/SKILL.md theme={null}262```text theme={null}
242name: api-conventions263use a subagent to review the rate limiter diff against SPEC.md, check every requirement is implemented and the listed edge cases have tests, report gaps that affect correctness and skip style
243description: REST API design conventions for our services
244# API 慣例
245- 為 URL 路徑使用 kebab-case
246- 為 JSON 屬性使用 camelCase
247- 始終為清單端點包含分頁
248- 在 URL 路徑中版本化 API (/v1/, /v2/)
249```264```
250 265
251技能也可以定義你直接呼叫的可重複工作流程:266> [!NOTE]
252 267>
253```markdown .claude/skills/fix-issue/SKILL.md theme={null}268> 不要刪掉提示詞中的 `skip style` 部分。被要求找出問題的審查者一定會找到*某些東西*。如果您修正每一項發現,最後會得到多餘的抽象層,以及針對不可能發生之情況的測試。
254name: fix-issue269
255description: Fix a GitHub issue270### 使用 Stop hook 強制執行檢查
256disable-model-invocation: true271
257分析並修復 GitHub 議題:$ARGUMENTS。272型別檢查規則的 `Stop` hook 版本只需要在 `.claude/settings.json` 中寫幾行。退出碼 2 會阻止停止。命令輸出到 stderr 的任何內容都會回傳給 Claude,作為它還不能完成的原因,這就是為什麼要將編譯器輸出重新導向到那裡:
258 273
2591. 使用 `gh issue view` 取得議題詳細資訊274```json .claude/settings.json theme={null}
2602. 理解議題中描述的問題275{
2613. 搜尋程式碼庫以尋找相關檔案276 "hooks": {
2624. 實現必要的變更以修復議題277 "Stop": [
2635. 編寫並執行測試以驗證修復278 {
2646. 確保程式碼通過 linting 和型別檢查279 "hooks": [
2657. 建立描述性提交訊息280 { "type": "command", "command": "pnpm tsc --noEmit 1>&2 || exit 2" }
2668. 推送並建立 PR281 ]
282 }
283 ]
284 }
285}
267```286```
268 287
269執行 `/fix-issue 1234` 以呼叫它。對於具有副作用且你想手動觸發的工作流程,使用 `disable-model-invocation: true`。288若要看看它的效果,請要求 Claude 做一個會破壞型別的變更:它不會直接完成,而是收到編譯器錯誤並持續工作,直到 `tsc` 通過。如果 hook [連續封鎖八次停止](https://code.claude.com/docs/zh-TW/hooks.md#stop-input)且期間沒有任何工具呼叫,Claude Code 會覆寫下一次封鎖並結束回合。若要提高上限,請設定 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](https://code.claude.com/docs/zh-TW/env-vars)。
270 289
271### 建立自訂子代理290## 強制執行不容例外的規則
272 291
273> [!TIP]292> [!TIP]
274>293>
275> 在 `.claude/agents/` 中定義專門的助手,Claude 可以委派給它們以執行隔離的任務。294> 如果某件事每次都必須發生,就把它做成 hook、拒絕規則或受管設定。`CLAUDE.md` 是用來放準則的,而 Claude 可以決定某項準則不適用。
276 295
277[子代理](https://code.claude.com/docs/zh-TW/sub-agents.md)在自己的背景資訊中執行,具有自己的一組允許工具。它們對於讀取許多檔案或需要專門關注而不會讓主要對話變得混亂的任務很有用。296以您現在可能寫在 `CLAUDE.md` 中的三條規則為例:`Never read .env`、`Always run the formatter after editing`、`Don't touch the migrations folder`。Claude 幾乎每次都會遵循這些規則。對於那些「幾乎」還不夠好的規則,請將它們從 `CLAUDE.md` 移到由 Claude Code(執行框架)自行套用的設定中。從此以後,結果就不再取決於模型記得什麼或決定什麼。
278 297
279```markdown .claude/agents/security-reviewer.md theme={null}298### 使用 hook 強制執行步驟
280name: security-reviewer299
281description: Reviews code for security vulnerabilities300[Hook](https://code.claude.com/docs/zh-TW/hooks-guide.md) 會在 Claude 迴圈中的固定時間點執行您的某個東西:工具呼叫之前或之後、Claude 嘗試停止時、工作階段開始時等等。這個東西可以是:
282tools: Read, Grep, Glob, Bash301
283model: opus302* Shell 命令(一般情況)
284你是一名資深安全工程師。檢查程式碼以查找:303* 對 HTTP 端點發送 POST
285- 注入漏洞 (SQL、XSS、命令注入)304* 對您某個 MCP 伺服器的工具呼叫
286- 驗證和授權缺陷305* [`prompt` 或 `agent` hook](https://code.claude.com/docs/zh-TW/hooks#hook-handler-fields),讓模型來決定
287- 程式碼中的祕密或認證306
288- 不安全的資料處理307`prompt` 或 `agent` hook 是請*另一個模型*做決定,所以它也不是確定性的。若要真正強制執行,請使用 `command` 或 `http` hook,如果在 hook 本身當機或逾時時也應該阻止該動作,請加上 [`onFailure: "block"`](https://code.claude.com/docs/zh-TW/hooks#block-the-action-when-a-hook-fails)。例如,對於掃描提交中機密資訊的 hook,在掃描器故障時,您會寧願阻止提交,而不是讓它未經掃描就通過。
308
309以下是以 `PostToolUse` hook 實作的格式化工具規則。它會在每次 `Edit` 或 `Write` 後執行,Claude 是否記得這條規則已經不重要了,因為執行它的不是 Claude:
289 310
290提供特定的行參考和建議的修復。311```json .claude/settings.json theme={null}
312{
313 "hooks": {
314 "PostToolUse": [
315 {
316 "matcher": "Edit|Write",
317 "hooks": [
318 { "type": "command", "command": "npx prettier --write --ignore-unknown \"$(jq -r '.tool_input.file_path')\"" }
319 ]
320 }
321 ]
322 }
323}
291```324```
292 325
293明確告訴 Claude 使用子代理:*「使用子代理檢查此程式碼是否存在安全問題。」*326若要檢查這個 hook,請要求 Claude 在 Prettier 會格式化的檔案中加入一行縮排錯誤的程式碼。儲存後的檔案會以修正後的縮排呈現。
294 327
295### 安裝外掛程式328遷移規則則變成一個 [`PreToolUse` hook](https://code.claude.com/docs/zh-TW/hooks-guide#block-edits-to-protected-files),對 `migrations/` 下的任何路徑以退出碼 2 結束。您不必自己撰寫:`write a hook that blocks edits to the migrations folder` 就能當作提示詞使用,而 `/hooks` 會顯示結果。不過不要過度使用:hook 是給*零*例外的規則用的,而 `Prefer named exports` 有很多例外,所以它應該留在 `CLAUDE.md` 中。
296 329
297> [!TIP]330### 使用權限規則和沙箱限制存取
298>
299> 執行 `/plugin` 以瀏覽市場。外掛程式無需設定即可添加技能、工具和整合。
300 331
301[外掛程式](https://code.claude.com/docs/zh-TW/plugins/overview.md)將技能、hooks、子代理和 MCP 伺服器從社群和 Anthropic 捆綁到單個可安裝單位中。如果你使用型別語言,請安裝[程式碼智慧外掛程式](https://code.claude.com/docs/zh-TW/plugins/code-intelligence.md),以提供 Claude 精確的符號導航和編輯後的自動錯誤偵測。332[權限規則](https://code.claude.com/docs/zh-TW/permissions.md)決定 Claude 可以執行、讀取和擷取什麼。`deny` 規則在每種權限模式中都有效,包括自動模式和 `bypassPermissions`,這正是 `.env` 規則應該放在那裡的原因:
302 333
303如需有關在技能、子代理、hooks 和 MCP 之間選擇的指導,請參閱[擴充 Claude Code](https://code.claude.com/docs/zh-TW/features-overview.md#match-features-to-your-goal)。334```json .claude/settings.json theme={null}
335{
336 "permissions": {
337 "allow": ["Bash(pnpm tsc --noEmit)"],
338 "ask": ["Bash(git push *)"],
339 "deny": ["Read(./.env)", "Read(./.env.local)", "Read(./secrets/**)"]
340 }
341}
342```
304 343
305***344儲存這個設定後,詢問 Claude `.env` 的內容會失敗,無論是透過 `Read` 工具還是透過 `cat .env` 都一樣。
306 345
307## 有效溝通346規則比對的是工具呼叫,而不是意圖,所以值得了解它的邊界在哪裡:
308 347
309詢問 Claude 您會詢問另一位工程師的問題,對於較大的功能,讓 Claude 採訪您並在開始實施前撰寫規格。348* `Read` 規則*確實*會攔截 `cat .env`,因為 Claude Code 能辨識[常見的檔案讀取命令](https://code.claude.com/docs/zh-TW/permissions.md#read-and-edit)。
349* 它不會攔截開啟該檔案的指令碼。
350* 針對某個網域的 `WebFetch` 拒絕規則,對於以 `curl` 存取同一網域毫無作用,除非沙箱已開啟。
310 351
311### 詢問代碼庫問題352若要在作業系統層級限制檔案系統或網路存取,請在工作階段中使用 `/sandbox` 開啟[沙箱](https://code.claude.com/docs/zh-TW/sandboxing.md)。它會在 macOS、Linux 和 WSL2 上限制 Claude 的 shell 命令,而且也會[套用您的 `Read` 拒絕規則和 `WebFetch(domain:...)` 規則](https://code.claude.com/docs/zh-TW/sandboxing#permission-rules),因此對於任何與安全相關的事項,您會希望兩者都使用。
312 353
313> [!TIP]354預設情況下,Claude 仍然可以要求在沙箱外重試被封鎖的命令,而該請求會經過一般的權限流程。`/sandbox` **Overrides** 分頁中的[嚴格沙箱模式](https://code.claude.com/docs/zh-TW/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)會關閉這種重試。
355
356> [!WARNING]
314>357>
315> 詢問 Claude 您會問資深工程師的問題。358> 自動模式是由分類器模型判斷每個動作,而不是硬性規則。它很擅長這件事,但就像任何判斷一樣,它也可能出錯。您也可以調整它認定為有風險的內容,而您的組織可以完全關閉它,所以您的「絕對不行」規則應該放在拒絕規則或 hook 中。
359
360### 選擇規則適用的對象
316 361
317當加入新代碼庫時,使用 Claude Code 進行學習和探索。您可以詢問 Claude 與詢問另一位工程師相同類型的問題:362規則放在哪裡,決定了它適用於誰:
318 363
319* 日誌記錄如何工作?364* `.claude/settings.local.json` 和 `~/.claude/settings.json` 只屬於您自己。當您對某個命令選擇 **Yes, and don't ask again** 時,Claude Code 會將該規則儲存到本機檔案。
320* 我如何建立新的 API 端點?365* `.claude/settings.json` 及其中的 hook 屬於儲存庫。提交之後,它們會適用於在該儲存庫中工作的每個人。其中的拒絕規則會立即生效。其中的 `allow` 規則會等到每個人接受該資料夾的[信任對話框](https://code.claude.com/docs/zh-TW/permissions.md#what-runs-before-you-trust-a-folder)後才生效,而[工作區信任](https://code.claude.com/docs/zh-TW/hooks.md#workspace-trust)也決定了其中的 hook 何時開始在他們的電腦上執行。
321* `foo.rs` 第 134 行的 `async move { ... }` 做什麼?366* [受管設定](https://code.claude.com/docs/zh-TW/managed-settings.md)屬於組織。它們來自管理主控台、MDM 或 `managed-settings.json` 檔案,任何個人設定檔都無法覆寫它們,這使得它們成為安全團隊政策的唯一存放處。如果您是負責設定它們的人,請參閱[為您的組織設定 Claude Code](https://code.claude.com/docs/zh-TW/admin-setup.md)。
322* `CustomerOnboardingFlowImpl` 處理哪些邊界情況?
323* 為什麼此代碼在第 333 行呼叫 `foo()` 而不是 `bar()`?
324 367
325以這種方式使用 Claude Code 是一個有效的入職工作流程,改進了入職時間並減少了對其他工程師的負擔。無需特殊提示:直接提出問題。368無論範圍為何,都請讓強制執行的項目保持精簡。每個 hook 和拒絕規則偶爾都會在不該觸發時觸發,而且每一項都需要有人維護。如果您發現自己累積了四十個,其中大多數可能都只是 Claude 本可以自行權衡的偏好。
326 369
327### 讓 Claude 採訪您370## 變更預設值
328 371
329> [!TIP]372> [!TIP]
330>373>
331> 對於較大的功能,讓 Claude 先採訪您。從最小的提示開始,並要求 Claude 使用 `AskUserQuestion` 工具採訪您。374> 預設值已經夠好,可以維持不動,直到某項任務花費的時間、token 或中斷超出應有的程度為止。發生這種情況時,請在工作階段中執行 `/usage` 查看花費去了哪裡。
332 375
333Claude 會詢問您可能還沒有考慮的事情,包括技術實施、UI/UX、邊界情況和權衡。將 `[brief description]` 替換為您的功能,然後再傳送提示。376新的工作階段已經替您做了幾項決定:
334 377
335```text wrap theme={null}378* 互動式終端機和 VS Code 工作階段以自動模式啟動。
336I want to build [brief description]. Interview me in detail using the AskUserQuestion tool.379* 在大多數方案和供應商上,它會執行[中等 effort 的 Claude Opus 5.5](https://code.claude.com/docs/zh-TW/model-config.md#default-model-setting)。
380* 當它認為有理由時,會將工作委派給 subagent。
381* 它會在對話增長時進行壓縮。
337 382
338Ask about technical implementation, UI/UX, edge cases, concerns, and tradeoffs. Don't ask obvious questions, dig into the hard parts I might not have considered.383大多數時候您根本不會想到這些。當某項任務的花費確實超出應有的程度時,原因通常就是這四項之一。
339 384
340Keep interviewing until we've covered everything, then write a complete spec to SPEC.md.385### 變更權限模式
341```
342 386
343規格完成後,開始新會話以執行它。新會話具有完全專注於實施的乾淨 context,您有一個書面規格可供參考。387權限範圍的兩端都有代價:
344 388
345最有用的規格是自包含的:它們命名涉及的檔案和介面、說明什麼超出範圍,並以端到端驗證步驟結束,證明該功能有效。花費時間使規格精確的回報遠大於花費時間觀看實施的回報。389* **手動模式**:您要親自核准每一次編輯和每一個非唯讀的命令。很安全,但到了第十個提示後,您就會開始不讀內容就核准,而且在您離開鍵盤時,一切都不會進展。
390* **`bypassPermissions`**:核准所有不在您的拒絕和詢問規則涵蓋範圍內的操作,這只在可拋棄的容器中才合理。
346 391
347***392[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)介於兩者之間,也是互動式終端機和 VS Code 工作階段[啟動時](https://code.claude.com/docs/zh-TW/permission-modes.md#which-mode-a-session-starts-in)使用的模式。Claude 在工作時不會為例行核准而停下來,而另一個分類器模型會在動作執行前依照[固定順序](https://code.claude.com/docs/zh-TW/permission-modes.md#how-the-classifier-evaluates-actions)檢查它們。它專注於[您會希望有人出面阻止的事情](https://code.claude.com/docs/zh-TW/permission-modes.md#what-the-classifier-blocks-by-default):
348 393
349## 管理您的工作階段394* `curl | bash`
395* 正式環境部署和遷移
396* 強制推送覆蓋他人的工作
397* 將敏感資料傳送到外部端點
398* 看起來是由 Claude 讀取的內容而非由您驅動的動作
350 399
351對話是持久且可逆的。善加利用這一點!400當它確實封鎖了某個動作時,您會收到通知,而該動作會顯示在 `/permissions` 中的 **Recently denied** 下,您可以在那裡以手動核准的方式重試。在[連續封鎖三次](https://code.claude.com/docs/zh-TW/permission-modes.md#when-auto-mode-falls-back)(或總計二十次)之後,自動模式會暫停並改回詢問您。
352 401
353### 及早且頻繁地修正方向402這些都不會取代您的確定性控制,因為它是在確定性控制*之後*執行的。拒絕和詢問規則以及 `PreToolUse` hook 會在分類器看到任何內容之前套用,因此拒絕規則在自動模式中的封鎖效果與在其他地方完全相同。沙箱仍然會限制[它所包覆的 shell 命令](https://code.claude.com/docs/zh-TW/sandboxing.md#what-runs-outside-the-sandbox)。
354 403
355> [!TIP]404> [!NOTE]
356>405>
357> 一旦發現 Claude 偏離軌道,請立即修正。406> 您也可以在對話中說 `don't push until I've reviewed`,分類器會[將其視為封鎖訊號](https://code.claude.com/docs/zh-TW/permission-modes.md#boundaries-you-state-in-conversation)。但這仍然是由模型閱讀逐字稿,而這句話可能會在對話壓縮時遺失,所以任何重要的事項都應該放在拒絕規則中。
407
408相反的問題是分類器一再阻止在您環境中屬於例行的操作。與其每次都手動核准,不如將它加入 `autoMode.allow`,或在[自動模式設定](https://code.claude.com/docs/zh-TW/auto-mode-config.md)中描述您信任的基礎設施。它使用的是一般英文而非模式比對,而 [`/auto-mode-setup`](https://code.claude.com/docs/zh-TW/auto-mode-config#generate-environment-entries) 可以根據您的專案和最近的工作階段為您草擬 `environment` 部分:
409
410```json ~/.claude/settings.json theme={null}
411{
412 "autoMode": {
413 "environment": [
414 "$defaults",
415 "Source control: github.com/example-org and every repo under it",
416 "Trusted internal domains: *.internal.example.com"
417 ],
418 "allow": [
419 "$defaults",
420 "Deploying to the staging namespace is fine, it's isolated from production and resets nightly"
421 ]
422 }
423}
424```
358 425
359最佳結果來自於緊密的回饋迴圈。雖然 Claude 有時能在第一次嘗試時完美解決問題,但快速修正通常能更快產生更好的解決方案。426> [!WARNING]
427>
428> 請在您設定的每個清單中保留 `"$defaults"`,因為如果沒有它,您的項目會*取代*該清單的內建規則,而不是新增到其中。對於 `environment` 和 `allow`,您會失去內建的上下文和例外,而沒有它的 `soft_deny` 清單則會移除針對強制推送和正式環境部署的內建封鎖。
429>
430> `autoMode` 區塊也必須放在 `~/.claude/settings.json` 中,而不是專案中,因為分類器會忽略專案設定中的 `autoMode`。
360 431
361* **`Esc`**:使用 `Esc` 鍵在 Claude 執行中途停止。內容會被保留,因此您可以重新導向。432如果您希望在每次編輯和命令發生前都能看到它們,可以在工作階段中按 `Shift+Tab` 循環切換權限模式(包括手動模式),或從 shell 以 `claude --permission-mode manual` 啟動。而如果手動模式詢問得太頻繁,`/fewer-permission-prompts` 會掃描您最近的逐字稿,找出常見的唯讀 Bash 和 MCP 呼叫,並將它們加入 `.claude/settings.json` 中的允許清單。
362* **`Esc + Esc` 或 `/rewind`**:按兩次 `Esc` 或執行 `/rewind` 以開啟倒帶選單,並復原先前的對話和程式碼狀態,或從選定的訊息進行摘要。
363* **`"Undo that"`**:讓 Claude 復原其變更。
364* **`/clear`**:在不相關的任務之間重設內容。包含無關內容的長工作階段可能會降低效能。
365 433
366如果您在一個工作階段中針對同一問題修正 Claude 超過兩次,內容會因失敗的方法而變得混亂。執行 `/clear` 並使用更具體的提示重新開始,該提示應納入您所學到的內容。具有更好提示的乾淨工作階段幾乎總是優於包含累積修正的長工作階段。434### 變更模型和 effort
367 435
368### 積極管理內容436[Effort](https://code.claude.com/docs/zh-TW/model-config.md#adjust-effort-level) 是控制 Claude 思考時間長短的主要方式,它取代了過去人們透過提示詞措辭所做的大部分事情。Claude Opus 5.5、Sonnet 5.5 和 Haiku 5.5 預設為 `medium`,這對於範圍明確的日常功能開發已經綽綽有餘。您會需要在工作階段中以 `/effort` 調整它的時機:
369 437
370> [!TIP]438* 當做對與否取決於容易被忽略的情況時,用 `/effort high` 或 `/effort xhigh` 調高它。例如您沒寫過的程式碼中的錯誤、不穩定的測試,或是 Claude 必須找出舊結構所有讀取者的 schema 變更。這樣 Claude 會在回答之前檢查更多邊界情況並驗證更多工作,額外的時間和 token 就花在這裡。
371>439* 當您正在快速來回互動且無論如何都會審查每個結果時,用 `/effort low` 調低它:腦力激盪、初步草稿、跨幾個檔案的重新命名。Claude 會更快給您一個起點,而既然您在每一步都會引導,額外的深思熟慮除了讓您等待更久之外,不會有太大改變。
372> 在不相關的任務之間執行 `/clear` 以重設內容。440* 將 `max` 留給您希望 Claude 在沒有您的情況下努力解決的困難問題,例如尋找安全漏洞。在一般任務上它容易想太多,所以您會付出更多,得到的答案卻可能不比 `high` 更好。
441* 當只有下一則訊息需要時,例如在原本例行的工作中穿插一個棘手的問題,請在該提示詞中加入 [`ultrathink`](https://code.claude.com/docs/zh-TW/model-config#use-ultrathink-for-one-off-deep-reasoning),而不是變更設定。
373 442
374Claude Code 會在您接近內容限制時自動壓縮對話歷史,這會保留重要的程式碼和決策,同時釋放空間。443至於模型本身,預設的 Opus 5.5 能妥善處理大多數程式撰寫工作,而 Sonnet 在例行工作上成本較低。[Claude Fable 5.1](https://code.claude.com/docs/zh-TW/model-config.md#work-with-fable) 需要您以 `/model fable` 明確選取,而 Haiku 很適合做簡單工作的 subagent。[模型設定](https://code.claude.com/docs/zh-TW/model-config.md)列出了各方案和供應商的完整清單。
375 444
376在長工作階段期間,Claude 的內容視窗可能會填滿無關的對話、檔案內容和命令。這可能會降低效能,有時甚至會分散 Claude 的注意力。445### 了解 subagent 的成本
377 446
378* 在任務之間頻繁使用 `/clear` 以完全重設內容視窗447Claude 會自行將工作委派給 [subagent](https://code.claude.com/docs/zh-TW/sub-agents.md):
379* 當自動壓縮觸發時,Claude 會摘要最重要的內容,包括程式碼模式、檔案狀態和關鍵決策
380* 為了獲得更多控制,執行 `/compact <instructions>`,例如 `/compact Focus on the API changes`
381* 若要只壓縮對話的一部分,使用 `Esc + Esc` 或 `/rewind`,選擇訊息檢查點,然後選擇**從此處摘要**或**摘要至此處**。第一個選項會壓縮該點之後的訊息,同時保留較早的內容;第二個選項會壓縮較早的訊息,同時保留最近的訊息完整。請參閱[倒帶選單的摘要選項](https://code.claude.com/docs/zh-TW/checkpointing.md#rewind-and-summarize)。
382* 在 CLAUDE.md 中使用 `"When compacting, always preserve the full list of modified files and any test commands"` 之類的指示來自訂壓縮行為,以確保關鍵內容在摘要後倖存
383* 對於不需要保留在內容中的問題,使用 [`/btw`](https://code.claude.com/docs/zh-TW/interactive-mode#side-questions-with-%2Fbtw)。答案永遠不會進入對話歷史,因此您可以檢查詳細資訊而不會增加內容。
384 448
385### 使用子代理進行調查449* 大範圍的程式碼庫搜尋會交給內建的 Explore agent。
450* 在分叉模式開啟時(預設),支線任務會被[分叉](https://code.claude.com/docs/zh-TW/sub-agents.md#fork-the-current-conversation)出去。
451* 它啟動的 subagent 預設在背景執行,因此您的主要對話可以持續進行。
386 452
387> [!TIP]453您很少需要主動要求這些,但了解您得到什麼以及它的成本會有幫助。
388>
389> 使用 `"use subagents to investigate X"` 委派研究。它們在單獨的內容中進行探索,保持您的主要對話乾淨以供實施。
390 454
391由於內容是您的基本限制,請使用子代理將研究保持在內容之外。當 Claude 研究程式碼庫時,它會讀取許多檔案,所有這些都會消耗您的內容。子代理在單獨的內容視窗中執行並報告摘要:455Subagent 在以下情況能帶來效益:
392 456
393```text wrap theme={null}457* 同時執行獨立的工作片段,讓整個任務更快完成
394Use subagents to investigate how our authentication system handles token458* 將冗長的輸出(例如完整的測試執行或大範圍搜尋)排除在主要對話之外,否則它會在整個工作階段剩餘時間中一直跟著
395refresh, and whether we have any existing OAuth utilities I should reuse.459* 取得一個沒看過程式碼撰寫過程的審查者
396```460* 給予某項任務比主要工作階段更少的工具,例如只能讀取但不能編輯的審查者
397 461
398您也可以在 Claude 實施某些內容後使用子代理進行驗證。請參閱[新增對抗性審查步驟](#add-an-adversarial-review-step)。462它們的成本主要是 token,因為每個 subagent 都會發送自己的請求,而這些請求與您的主要對話計入相同的用量。有時也包括時間:全新的 subagent 必須先收集您的對話中已有的上下文,所以它最後可能比您直接在當下完成任務*更慢*。
399 463
400### 使用檢查點倒帶464而且預設情況下,它是同一個模型(或更小的模型)處理同一項任務。您能從中得到平行處理或一雙新的眼睛,但不會得到更聰明的答案。
401 465
402> [!TIP]466若要減少它們的花費:
403>
404> 您發送的每個提示都會建立一個檢查點。您可以將對話、程式碼或兩者復原到任何先前的檢查點。
405 467
406Claude 會在每次變更前自動快照檔案,因此檢查點可以復原它們。按兩次 `Escape` 或執行 `/rewind` 以開啟倒帶選單。您可以只復原對話、只復原程式碼、復原兩者,或從選定的訊息進行摘要。詳細資訊請參閱[檢查點](https://code.claude.com/docs/zh-TW/checkpointing.md)。468* 如果某個 subagent 的工作很簡單,例如收集匯入某個模組的檔案或檢查文件中的連結,請在其定義中設定 [`model: haiku`](https://code.claude.com/docs/zh-TW/sub-agents#choose-a-model)。這類工作不需要較大的模型,而 Haiku 每次請求的成本低得多。
469* 要求回傳簡短的摘要,這樣二十個結果就不會塞滿您的上下文。
470* 查看 `/usage`,了解每種 subagent 類型佔您用量的比例,藉此判斷哪些是值得其成本的。
471* 為 `.claude/agents/` 中的自訂 subagent 只提供 `tools: Read, Grep, Glob`。如此它就成為一個無法編輯任何內容的審查者,而這項限制是由 Claude Code 強制執行的,而不是在提示詞中請求的。
407 472
408與其仔細規劃每一步,您可以告訴 Claude 嘗試一些冒險的事情。如果不起作用,倒帶並嘗試不同的方法。檢查點會與對話一起保存,因此您可以關閉終端機、稍後復原工作階段,並仍然可以倒帶。473這個審查者只是一個簡短的檔案,`.claude/agents/reviewer.md`:
409 474
410> [!WARNING]475```markdown .claude/agents/reviewer.md theme={null}
411>476---
412> 檢查點只追蹤透過 Claude 的檔案編輯工具所做的變更。透過 Bash 命令或外部程序所做的變更不會被捕獲。這不是 git 的替代品。477name: reviewer
478description: Reviews changed files against the spec they were built from. Use after implementing a feature, before opening the PR.
479tools: Read, Grep, Glob
480---
481You're reviewing code you didn't write. Compare the changed files against the spec you're given,
482check that every requirement is implemented and the listed edge cases have tests,
483and report only the gaps that affect correctness. Skip style.
484```
413 485
414### 復原對話486請 Claude `have the reviewer compare the rate limiter against SPEC.md`,缺漏就會回到您的工作階段中,讓 Claude 加以修正。
415 487
416> [!TIP]488### 降低成本和上下文
417>
418> 使用 `/rename` 命名工作階段,並將它們視為分支:每個工作流都有自己的持久內容。
419 489
420Claude Code 在本地保存對話,因此當任務跨越多個工作階段時,您不必重新解釋內容。執行 [`claude --continue`](https://code.claude.com/docs/zh-TW/sessions#resume-a-session) 以從中斷的地方繼續,或執行 `claude --resume` 以從清單中選擇。給工作階段起描述性名稱,例如 `oauth-migration`,以便稍後找到它們。完整的復原、分支和命名控制集合請參閱[管理工作階段](https://code.claude.com/docs/zh-TW/sessions.md)。490大多數目前的模型都有 1M token 的視窗,而且壓縮會在接近上限時進行,因此您很少會用完上下文。不過,您仍然可能為不需要的上下文*付費*。每個請求都會傳送整個對話,所以一個累積了三項不相關任務的工作階段,在第四項任務的每個回合都會重新讀取這三項。在[快取仍有效時會有折扣](https://code.claude.com/docs/zh-TW/costs.md#why-usage-climbs-in-a-long-session),快取過期後則是全價。
421 491
422***492[`/usage`](https://code.claude.com/docs/zh-TW/costs) 是第一個要查看的地方。在 Pro、Max、Team 和 Enterprise 上,它會依 skill、subagent、外掛和 MCP 伺服器細分您的用量。當長上下文或頻繁的快取未命中等模式超過您用量的 10% 時,它也會標記出來。接下來是常見的解決方式:
423 493
424## 自動化和擴展494* 在不相關的任務之間使用 `/clear`。它不需要任何成本,而且意味著下一項任務不必持續為前一項任務的歷史付費。`/clear oauth-migration` 會為您要離開的工作階段命名,讓您之後可以回來。
495* 帶著重點使用 `/compact`,例如 `/compact keep the API changes and the test commands`。在長時間的工作階段中,`/compact` 本身就是一個大型請求,因為它要讀取整個對話才能進行摘要,快取過期後更是如此。
496* 留意背景工作:`/loop`、目標在每個回合後的檢查,以及 Claude 自己的 subagent,都會在您沒有輸入時持續發送請求。
425 497
426一旦您對一個 Claude 有效,通過平行會話、非交互模式和扇出模式將您的輸出乘以倍數。498> [!NOTE]
499>
500> [提示快取](https://code.claude.com/docs/zh-TW/prompt-caching.md)在訂閱方案上約持續一小時,在 API 金鑰、雲端供應商或用量點數上則是五分鐘。除非您變更設定,否則 subagent 的快取為五分鐘。
501>
502> 在一小時快取的情況下,超過約 200K token 且閒置的工作階段會在快取過期前不久被壓縮,所以午餐後回來時,您會從摘要繼續。如果您完全不需要歷史紀錄,開啟新的工作階段仍然比較便宜。
427 503
428### 運行非交互模式504## 引導工作階段
429 505
430> [!TIP]506> [!TIP]
431>507>
432> 在 CI、pre-commit hooks 或腳本中使用 `claude -p "prompt"`。添加 `--output-format stream-json --verbose` 以獲得流式 JSON 輸出。508> 觀察第一分鐘,在 Claude 偏離方向時立即按 `Esc`,在兩次修正失敗後執行 `/clear` 並寫一個更好的提示詞,而不是進行第三次修正。
433 509
434使用 `claude -p "your prompt"`,您可以非交互地運行 Claude,不需要互動式提示。除非您傳遞 `--no-session-persistence`,否則執行仍會建立可恢復的會話。[非交互模式](https://code.claude.com/docs/zh-TW/headless.md)是您將 Claude 整合到 CI 管道、pre-commit hooks 或任何自動化工作流中的方式。輸出格式讓您以編程方式解析結果:純文本、JSON 或流式 JSON。510再多的設定也無法取代觀察第一分鐘,並在 Claude 朝著您不想要的方向前進時介入。這方面的控制方式只有少數幾個,值得熟記:
435 511
436```bash theme={null}512* `Esc` 會讓 Claude 在動作途中停下,並保留到那一刻為止的所有內容,讓您可以重新導向而不會失去工作成果。
437# One-off queries513* `/rewind`,或在空白提示下按兩次 `Esc`,會開啟[倒帶選單](https://code.claude.com/docs/zh-TW/checkpointing.md#rewind-and-summarize),您可以在那裡將程式碼、對話或兩者都回復到先前的提示詞。這使得先嘗試較大膽的做法、不成功再倒帶變得低風險。同一個選單也可以在部分對話已經過時時將其摘要。
438claude -p "Explain what this project does"514* `/clear` 會重新開始。如果您已經修正同一件事兩次而它仍然是錯的,第三次修正大多只是增加到一個已經包含兩次失敗嘗試的對話中,而 Claude 必須一直重新讀取這些內容。`/clear` 加上一個納入您所學內容的新提示詞,幾乎每次都效果更好。
439
440# Structured output for scripts
441claude -p "List all API endpoints" --output-format json
442 515
443# Streaming for real-time processing516> [!WARNING]
444claude -p "Analyze this log file" --output-format stream-json --verbose517>
445```518> 檢查點涵蓋 Claude 在主要對話中以其自身檔案工具編輯的檔案,因此只有被 Bash 命令動過的檔案[不會被還原](https://code.claude.com/docs/zh-TW/checkpointing.md#bash-command-changes-not-tracked)。它們與 git 搭配使用,而不是取代 git。
446 519
447第一個命令列印純文本。`json` 格式傳回一個具有 `result` 欄位的單一 JSON 物件。`stream-json` 格式每行列印一個 JSON 物件,從初始化事件開始。520另外兩個較小的控制:[`/btw`](https://code.claude.com/docs/zh-TW/interactive-mode#side-questions-with-%2Fbtw) 可以回答快速問題而不在歷史中加入任何內容。而對於跨越數天的工作,在工作階段中使用 `/rename oauth-migration` 為它命名,之後從 shell 執行 [`claude --resume oauth-migration`](https://code.claude.com/docs/zh-TW/sessions#resume-by-session-id-or-name) 就能接續,檢查點也包含在內。`claude --continue` 會繼續最近的一個工作階段。
448 521
449### 運行多個 Claude 會話522## 讓 Claude 在您不在時執行
450 523
451> [!TIP]524> [!TIP]
452>525>
453> 並行運行多個 Claude 會話以加快開發、運行隔離的實驗或啟動複雜的工作流。526> 在執行進入無人值守狀態之前,請確保它知道完成是什麼樣子、能檢查自己的工作,而且只能觸及它應該觸及的東西。給它回合數或花費的上限,並在最後讓一個人核准結果。
454
455選擇適合您想要自己進行多少協調的平行方法,並在會話需要相互傳遞發現時添加訊息:
456 527
457* [Worktrees](https://code.claude.com/docs/zh-TW/worktrees.md):在隔離的 git 檢出中運行單獨的 CLI 會話,以便編輯不會衝突528當您不在場捕捉錯誤時,本頁的所有內容都會變得更重要一些。在您觀看時,Claude 缺少某些上下文不是什麼大問題:您會在一兩則訊息內注意到並告訴它。但在您睡前啟動的執行中,沒有人會告訴它,而您會在隔天早上發現它整晚都在錯誤的假設上打造東西。
458* [跨會話訊息](https://code.claude.com/docs/zh-TW/cross-session-messaging.md):讓您自己運行的會話相互傳遞發現
459* [桌面應用](https://code.claude.com/docs/zh-TW/desktop.md#work-in-parallel-with-sessions):以視覺方式管理多個本地會話,每個會話都在自己的 worktree 中
460* [Claude Code 在網路上](https://code.claude.com/docs/zh-TW/claude-code-on-the-web.md):在雲端運行會話,預設情況下在 Anthropic 管理的基礎設施上
461* [Agent view](https://code.claude.com/docs/zh-TW/agent-view.md):研究預覽。執行 `claude agents` 以分派在背景中持續運行的會話,並從一個螢幕監視它們
462* [Agent teams](https://code.claude.com/docs/zh-TW/agent-teams.md):實驗性且預設停用。多個會話的自動協調,具有共享任務、訊息和團隊領導
463 529
464除了並行化工作外,多個會話還支持質量聚焦的工作流。新鮮的 context 改進代碼審查,因為 Claude 不會偏向於它剛剛編寫的代碼。530在讓任務自行執行之前,值得針對該特定任務逐一檢視以下五個問題:
465 531
466例如,使用 Writer/Reviewer 模式:5321. 它知道完成是什麼樣子嗎?一個目標條件、一份規格檔案,或一個它必須讓其通過的失敗測試。
5332. 它能檢查自己的工作嗎?測試套件、`Stop` hook、某種審查步驟。
5343. 它被允許觸及什麼?權限規則、`dontAsk`、沙箱、worktree、它唯一可以推送的分支。
5354. 什麼會讓它停下?`--max-turns`、`--max-budget-usd`、支出上限。
5365. 結果會送到哪裡,由誰簽核?一個 PR、一則留言或一份摘要,然後由一個人核准合併、部署,或任何其他無法撤回的動作。
467 537
468| 會話 A(Writer) | 會話 B(Reviewer) |538一旦開始執行,Claude 就會自行完成一項長時間的任務。留給您的部分是啟動它、決定這次「完成」的意義,以及在最後核准合併。
469| - | - |
470| `為我們的 API 端點實作速率限制器` | |
471| | `審查 @src/middleware/rateLimiter.ts 中的速率限制器實作。找出邊界情況、競態條件,以及與我們現有中介軟體模式的一致性。` |
472| `這是審查回饋:[工作階段 B 輸出]。請處理這些問題。` | |
473 539
474您可以對測試做類似的事情:讓一個 Claude 編寫測試,然後另一個編寫代碼來通過它們。540### 從指令碼執行 Claude
475 541
476### 跨文件扇出542[`claude -p "prompt"`](https://code.claude.com/docs/zh-TW/headless) 會執行一次後結束,Claude Code 就是這樣被用在 CI 作業、git hook 和 shell 迴圈中。
477
478> [!TIP]
479>
480> 迴圈處理各項任務,為每個任務呼叫 `claude -p`。使用 `--allowedTools` 為批次作業預先核准工具。
481 543
482對於大型遷移或分析,您可以在許多平行 Claude 調用中分配工作。執行 [`/batch <instruction>`](https://code.claude.com/docs/zh-TW/commands#all-commands) 讓 Claude 將變更分割到 5 到 30 個子代理。每個子代理在自己的 worktree 中工作。要改為從您自己的腳本驅動扇出,請循環遍歷 `claude -p`:544在指令碼中,您幾乎總會需要多加幾個旗標:
483 545
484**1. 生成任務列表**546* [`--bare`](https://code.claude.com/docs/zh-TW/headless#start-faster-with-bare-mode) 會略過 hook、skill、外掛、MCP 伺服器和 `CLAUDE.md` 檔案(包括儲存庫的以及電腦的),讓執行無論在哪裡執行都做同樣的事。它也完全不會動到您的 claude.ai 登入:身分驗證來自 `ANTHROPIC_API_KEY`、您以 `--settings` 傳入的檔案中的 `apiKeyHelper`,或您雲端供應商的憑證。
547* `--append-system-prompt`、`--mcp-config` 和 `--settings` 會明確傳入執行*確實*需要的東西。
548* `--allowedTools` 會預先核准它的工具,而 [`--permission-mode dontAsk`](https://code.claude.com/docs/zh-TW/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 會拒絕其他任何原本會觸發提示的操作。
549* `--output-format json` 會給您一個可供剖析的單一結果物件,而搭配 `--verbose` 的 `stream-json` 會在事件發生時即時串流。
485 550
486讓 Claude 將需要遷移的文件列表寫入文件,以便下一步中的循環可以讀取它,使用類似 `list all 2,000 Python files that need migrating and save the list to files.txt` 的提示551組合起來看起來像這樣:
487
488**2. 編寫腳本以循環遍歷列表**
489 552
490```bash theme={null}553```bash theme={null}
491for file in $(cat files.txt); do554for file in $(cat files.txt); do
492 claude -p "Migrate $file from Python 2 to Python 3. Return OK or FAIL." \555 claude --bare -p "Migrate $file to the new logger API and commit. Reply OK or FAIL." \
493 --allowedTools "Edit,Bash(git commit *)" \556 --allowedTools "Read,Edit,Bash(git add *),Bash(git commit *)" \
494 --permission-mode dontAsk557 --permission-mode dontAsk \
558 --max-turns 20
495done559done
496```560```
497 561
498**3. 先在幾個檔案上測試,再對全部檔案執行**562執行完成時,Claude 會回覆 `OK` 或 `FAIL`,而達到回合上限的執行則會以錯誤結束。請先在三個檔案上試試看,看看哪裡出錯,修正提示詞,然後再執行其餘檔案。
499
500根據前 2-3 個檔案出現的問題改進您的提示詞,然後對完整集合執行。`--allowedTools` 旗標會預先核准遷移所需的工具。[`--permission-mode dontAsk`](https://code.claude.com/docs/zh-TW/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 會拒絕其他任何需要核准的操作,這在無人值守執行時非常重要,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准其中部分呼叫。
501 563
502您也可以將 Claude 整合到現有的資料/處理管道中:564如果您傳入 `--permission-mode auto`,自動模式也能搭配 `-p` 使用。在非互動式執行中,分類器的封鎖會拒絕該單一動作,而 Claude 會繼續進行,重複的封鎖也不會像在終端機中那樣暫停執行。在依賴它之前,請先閱讀[門檻在該情況下如何套用](https://code.claude.com/docs/zh-TW/permission-modes.md#repeated-block-thresholds)。
503 565
504```bash theme={null}566### 依排程或事件啟動執行
505claude -p "<your prompt>" --output-format json | your_command
506```
507 567
508### 使用 auto mode 自主運行568一旦執行開始,Claude 就能自行處理其餘部分。它唯一做不到的是決定*開始*,所以必須有某個東西來啟動:您、計時器,或是像 CI 檢查失敗或新 PR 這類的事件。
509 569
510對於不間斷的執行和背景安全檢查,使用 [auto mode](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)。分類器模型在命令運行前審查它們,阻止範圍升級、未知基礎設施和由敵對內容驅動的操作,同時讓常規工作無提示進行。570在開啟的工作階段內,那就是 [`/loop`](https://code.claude.com/docs/zh-TW/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop),它會依間隔重複執行一個提示詞:
511 571
512```bash theme={null}572```text theme={null}
513claude --permission-mode auto -p "fix all lint errors"573/loop 15m check CI on this branch, and if it's red pull the failing job's log, fix it and push
514```574```
515 575
516當分類器在使用 `-p` 旗標的非交互運行中重複阻止操作時,Claude Code 不會停止執行。請參閱 [auto mode 何時回退](https://code.claude.com/docs/zh-TW/permission-modes.md#when-auto-mode-falls-back) 以了解發生的情況以及閾值。576每次執行都是同一個工作階段中的另一個回合,所以不要在長對話中讓它一直執行。對於任何應該在您筆電闔上時進行的事情,[`/schedule`](https://code.claude.com/docs/zh-TW/routines#create-from-the-cli) 會設定一個依計時器執行的[雲端排程任務](https://code.claude.com/docs/zh-TW/routines.md)。它需要 claude.ai 登入,而不是 API 金鑰。您可以請 Claude 新增 GitHub 事件觸發條件,或在 [claude.ai/code/routines](https://claude.ai/code/routines) 新增 API 觸發條件。
517
518### 添加對抗性審查步驟
519 577
520> [!TIP]578> [!WARNING]
521>579>
522> 在將任務視為完成之前,讓一個子代理在新鮮的 context 中審查差異並報告缺陷。580> 在讓雲端排程任務持續執行之前,請以[任務無法繞過的 GitHub 分支規則](https://code.claude.com/docs/zh-TW/routines.md#repositories-and-branch-permissions)保護 `main`。對於任何新的東西,請先觀察最初幾次執行,再放心讓它無人值守。
523
524Claude 無人值守工作的時間越長,在您將工作視為完成之前進行獨立檢查就越重要。在新鮮的 [subagent](https://code.claude.com/docs/zh-TW/sub-agents.md) context 中運行的審查者只看到差異和您給它的標準,而不是產生變更的推理,因此它按自己的條款評估結果。
525 581
526對於正確性檢查,執行捆綁的 [`/code-review` skill](https://code.claude.com/docs/zh-TW/commands),它在新鮮的子代理中審查當前差異以查找錯誤,並將發現返回到會話。要檢查差異是否符合您的計劃,請自己編寫審查提示。命名要檢查的工作、要檢查的計劃以及什麼算作發現:582### 平行執行工作階段
527 583
528```text wrap theme={null}584當您同時進行多項獨立的工作時,請為每一項提供自己的檢出,讓編輯不會互相衝突。[`claude -w feature-auth`](https://code.claude.com/docs/zh-TW/worktrees#start-claude-in-a-worktree) 會在新的 worktree 中啟動工作階段,[桌面應用程式](https://code.claude.com/docs/zh-TW/desktop.md#work-in-parallel-with-sessions)可以並排執行多個這樣的工作階段,而[雲端工作階段](https://code.claude.com/docs/zh-TW/claude-code-on-the-web.md)則是在雲端而非您的電腦上執行它們。
529Use a subagent to review the rate limiter diff against PLAN.md. Check that
530every requirement is implemented, the listed edge cases have tests, and
531nothing outside the task's scope changed. Report gaps, not style preferences.
532```
533 585
534因為審查者作為子代理運行,實施會話直接接收缺陷,可以修復它們並重新審查,而無需您在窗口之間複製發現。586Worktree 是全新的檢出,這意味著像 `.env` 這樣被 gitignore 的檔案不會在那裡,相依套件也尚未安裝。對於前者,請在儲存庫根目錄的 [`.worktreeinclude`](https://code.claude.com/docs/zh-TW/worktrees#copy-gitignored-files-into-worktrees) 中列出您需要的被 gitignore 檔案(語法與 `.gitignore` 相同),Claude Code 就會將它們複製到它建立的每個 worktree 中:
535 587
536被提示尋找缺陷的審查者通常會報告一些,即使工作是健全的,因為那是它被要求做的。追逐每個發現會導致過度工程:額外的抽象層、防禦性代碼和無法發生的情況的測試。告訴審查者只標記影響正確性或陳述要求的缺陷,並將其餘的視為可選。588```text .worktreeinclude theme={null}
589.env
590.env.local
591config/dev-credentials.json
592```
537 593
538***594只放小檔案:它是複製而不是連結,所以把 `node_modules` 放在裡面就意味著每個 worktree 都要完整複製一份。對於大型目錄,可以使用 [`worktree.symlinkDirectories`](https://code.claude.com/docs/zh-TW/settings-reference#worktree-symlinkdirectories) 設定,或將安裝命令寫在 `CLAUDE.md` 中,讓 Claude 每次在新的檢出中啟動時都會執行它。
539 595
540## 避免常見的失敗模式596您很少需要自己清理這些:
541 597
542這些是常見的錯誤。及早識別它們可以節省時間:598* 當您結束一個未命名的 worktree 工作階段時,如果其中沒有任何內容,Claude Code 會[移除該 worktree](https://code.claude.com/docs/zh-TW/worktrees.md#clean-up-worktrees)。對於已命名的工作階段或有變更的工作階段,它會詢問要怎麼做。
599* Subagent 的 worktree 會在 subagent 完成且沒有變更時消失。
600* 確實被遺留下來的 subagent 和背景工作階段 worktree,會在存在時間超過 `cleanupPeriodDays` 且不含任何工作時被清除。
543 601
544* **廚房水槽會話。** 你從一項任務開始,然後問 Claude 一些無關的事情,然後回到第一項任務。上下文充滿了無關的資訊。602> [!NOTE]
545 > **修正**:在無關的任務之間使用 `/clear`。603>
546* **一次又一次地更正。** Claude 做錯了什麼,你更正它,它仍然是錯的,你再次更正。上下文被失敗的方法污染了。604> `claude -p --worktree` 執行需要您自己清理,因為它結束時不會詢問。請使用 `git worktree remove <path>` 移除它們,如果 git 因為 worktree 被鎖定而拒絕,請先執行 `git worktree unlock <path>`。
547 > **修正**:在兩次失敗的更正後,使用 `/clear` 並寫一個更好的初始提示,納入你所學到的內容。
548* **過度指定的 CLAUDE.md。** 如果你的 CLAUDE.md 太長,Claude 會忽略其中一半,因為重要的規則在雜訊中丟失了。
549 > **修正**:無情地修剪。如果 Claude 已經在沒有指令的情況下正確地做了某事,請刪除它或將其轉換為 hook。
550* **信任然後驗證的差距。** Claude 產生了一個看起來合理的實現,但沒有處理邊界情況。
551 > **修正**:始終提供驗證(測試、指令碼、螢幕截圖)。如果你無法驗證它,就不要發佈它。
552* **無限探索。** 你要求 Claude「調查」某些東西而沒有限定範圍。Claude 讀取數百個檔案,填滿了上下文。
553 > **修正**:將調查範圍縮小或使用子代理,以便探索不會消耗你的主要上下文。
554 605
555***606對於跨越許多檔案的單一大型機械式變更,[`/batch migrate every handler to the v2 response helpers`](https://code.claude.com/docs/zh-TW/commands) 會將工作分成 5 到 30 個單元,並向您展示計畫。接著它會在各自的 worktree 中執行每個單元,並為其開啟一個 PR。從您的 shell 執行 [`claude agents`](https://code.claude.com/docs/zh-TW/agent-view)(仍為研究預覽)可以在一個畫面中查看您電腦上所有在背景執行的內容。
556 607
557## 培養您的直覺608第二個工作階段也是您能取得的最簡單的獨立審查者。一個工作階段撰寫速率限制器,另一個在沒有看過撰寫過程的情況下審查 `@src/middleware/rateLimiter.ts`,然後您將發現貼回第一個工作階段。這與 `/code-review` 的概念相同,只是由您傳遞訊息。
558 609
559本指南中的模式不是一成不變的。它們是通常效果很好的起點,但可能不是每種情況的最優選擇。610## 可以停止做的事
560 611
561有時您\_應該\_讓 context 累積,因為您深入一個複雜的問題,歷史很有價值。有時您應該跳過規劃,讓 Claude 找出答案,因為任務是探索性的。有時模糊的提示正是您想要的,因為您想在限制它之前看到 Claude 如何解釋問題。612以下每一項在撰寫時都是好建議。大多數是為了彌補模型當時還無法可靠做到的事,而模型現在已經趕上了。如果其中幾項仍是您的習慣,以下說明為什麼可以安心捨棄它們。
562 613
563注意什麼有效。當 Claude 產生出色的輸出時,注意您做了什麼:提示結構、您提供的 context、您所在的模式。當 Claude 遇到困難時,問為什麼。Context 太嘈雜了嗎?提示太模糊了嗎?任務對於一次通過來說太大了嗎?614| 舊建議 | 為什麼不再需要 |
615| :- | :- |
616| 上下文視窗是您的主要限制,要積極管理它 | 大多數目前的模型都有 1M token 的視窗,而且壓縮會自動進行,所以用完的情況很少見。在任務之間使用 `/clear` 仍然值得,因為專注的上下文能帶來更好的答案且成本更低。 |
617| 對 Claude 一直漏掉的指令加上 IMPORTANT 或全大寫 | 較舊的模型有時需要這種強調。目前的模型會遵循措辭平實的一行,而堆疊強調大多只會讓 Claude 過度套用規則。如果它是不能變通的規則,請將它改成 hook 或拒絕規則。如果那一行在長檔案中被淹沒了,需要的是讓檔案更短。 |
618| 使用 subagent 來保護您的上下文視窗 | 用完上下文已經很少是問題了。Subagent 仍然很適合平行工作、將嘈雜的輸出排除在外,以及獨立審查,但每一項都需要額外的 token。 |
619| 委派給 subagent 以得到更好的答案 | 將同一項任務交給 subagent 並不會讓答案變得更好。全新的審查者確實有幫助,因為它沒看過您的推理,但這與委派是不同的事。 |
620| 在提示詞中使用 `think hard`、`think harder`、`be thorough` | Effort 才是控制這件事的方式。這些詞句是一般的提示詞文字,只會在 effort 設定範圍內稍微引導 Claude,而不是能提高 effort 的關鍵字。`ultrathink` 仍然有效:它會在該單一回合要求更深入的推理,而不會動到您的 effort 設定。 |
621| 告訴 Claude 繼續、迴圈直到完成、不要偷懶 | 目前的模型通常會在不被告知的情況下持續完成已說定的任務,而這類語句更可能導致過度工作,而不是解決停滯。給 Claude 一個要通過的檢查則是另一回事,仍然值得去做。如果某次執行確實提前停止,請說 `continue`,而對於沒有人觀看的執行,`/goal` 或 `Stop` hook 會強制執行。 |
622| 在 `CLAUDE.md` 中描述您的架構和檔案配置 | Claude 會自己閱讀儲存庫。只寫下儲存庫中沒有的內容。 |
564 623
565隨著時間的推移,您將培養沒有指南可以捕捉的直覺。您將知道何時具體以及何時開放,何時規劃以及何時探索,何時清除 context 以及何時讓它累積。624如果本頁的任何其他建議開始讓您覺得是瑣碎的雜事,那可能表示它也應該被列入這張表中。
566 625
567## 相關資源626## 相關資源
568 627
569* [Claude Code 如何工作](https://code.claude.com/docs/zh-TW/how-claude-code-works.md):代理循環、工具和 context 管理628* [Claude Code 如何運作](https://code.claude.com/docs/zh-TW/how-claude-code-works.md):迴圈、工具,以及啟動時載入的內容
570* [擴展 Claude Code](https://code.claude.com/docs/zh-TW/features-overview.md):skills、hooks、MCP、subagents 和 plugins629* [探索上下文視窗](https://code.claude.com/docs/zh-TW/context-window.md):工作階段中佔用空間的內容及其載入時機
571* [常見工作流](https://code.claude.com/docs/zh-TW/common-workflows.md):調試、測試、PR 等的分步配方630* [擴充 Claude Code](https://code.claude.com/docs/zh-TW/features-overview.md):在 skill、hook、MCP、subagent 和外掛之間做選擇
572* [CLAUDE.md](https://code.claude.com/docs/zh-TW/memory.md):存儲項目約定和持久 context631* [選擇權限模式](https://code.claude.com/docs/zh-TW/permission-modes.md)和[設定權限](https://code.claude.com/docs/zh-TW/permissions.md)
632* [有效管理成本](https://code.claude.com/docs/zh-TW/costs.md)
633* [以程式方式執行 Claude Code](https://code.claude.com/docs/zh-TW/headless.md)和[使用雲端排程任務自動化工作](https://code.claude.com/docs/zh-TW/routines.md)
634* 給團隊主管和管理員:[為您的組織設定 Claude Code](https://code.claude.com/docs/zh-TW/admin-setup.md)