跳至主要內容
HK Learn AI
AI 開發工具

Claude Code 新手教學:用 CLAUDE.md 由零做一個香港報價小工具(含權限、測試、commit)

按 Anthropic 現行官方文件(2026 年 9 月 15 日核對),由空資料夾做一個香港報價小工具:先睇清權限模式、用 /init 生成再親手改 CLAUDE.md、寫 .claude/settings.json 權限規則、Plan mode 傾計劃、先寫測試再實作、/diff 檢查同 commit。文中所有 Claude 回覆均為示例。

HK Learn AI 編輯部標誌

HK Learn AI 編輯部

編輯部

發佈於 2026年9月15日

最後審閱:2026年9月20日

分享這篇文章
本頁內容
資訊圖解:Claude Code 新手,第一個報價小工具;揀權限 → 寫 CLAUDE.md → 測試報價 → commit;先講規則,再開始寫

難度

初階

所需時間

約 60–90 分鐘(視乎 Claude 回覆速度和你檢查的時間)

你需要準備

Claude Code(CLI) · Git(Windows 用 Git for Windows) · Node.js 24 LTS(只用來執行範例測試) · 任何文字編輯器

開始之前

  • 已按官方步驟安裝 Claude Code,並用 Pro、Max、Team、Enterprise 或 Console 帳戶登入;Claude 免費方案不包括 Claude Code
  • 所在地屬 Anthropic 官方支援國家/地區(見文首方格;截至 2026-09-15 香港不在名單內)
  • 已安裝 Git;Windows 原生環境要先安裝 Git for Windows
  • Node.js 24 LTS,只用來執行範例的 node --test;Claude Code 原生安裝本身不需要 Node.js
  • 一個全新的空資料夾,不要用公司正式項目做第一次練習

裝好 Claude Code 之後,好多人第一件事就叫它「幫我寫個 app」,結果它一口氣改咗一大堆檔案,自己又睇唔明做過乜。其實新手最值得先學的是三件事:用 CLAUDE.md 講清楚項目規則、用權限設定限制 Claude 可以做乜、用測試和 Git 檢查它做咗乜。本文用一個細小但完整的例子——香港報價小工具——由空資料夾一路做到第一個 commit,每一步都附官方文件出處。

支援地區(2026 年 9 月 15 日核對):Claude Code 官方系統要求把「Location:Anthropic supported countries」列為條件之一。截至 2026-09-15,香港並不在 Anthropic 官方支援國家/地區名單(涵蓋 Commercial API 及 Claude.ai)。名單會變,使用或付款前請自行重查。本文只介紹官方文件中的使用方法,不提供 VPN、外地地址、借用電話或身份等任何規避方法;香港用家請先讀 Claude 香港訂閱指南。

一句答案:在一個已 git init 的新資料夾輸入 claude,先看狀態列確認權限模式(Pro、Max、Team 預設是 Auto mode,第一次練習建議用 Shift+Tab 轉到 Manual 或 Plan mode);再用 /init 生成 CLAUDE.md,親手刪減到只剩 Claude 估唔到的規則;用 .claude/settings.json 寫 allow/deny 權限規則;在 Plan mode 傾好計劃,叫 Claude 先寫測試、再實作並執行 node --test;最後用 /diff 檢查,才 commit。記住:CLAUDE.md 只是建議,真正攔住操作的是權限規則、hooks 和 sandbox。

資料核對日期:2026 年 9 月 15 日。當日 官方 changelog 最新版本為 2.1.272,而 Claude Code 差不多每日都有新版,選單名稱和預設值都可能改變。開始前先執行 claude --version 查看版本,需要時用 claude update 更新;畫面與本文不同時,以 Claude Code 官方文件為準。

關於示例:本文列出的 Claude 回覆、計劃內容和程式碼全部是示例(實際輸出會不同),不是某一次 session 的測試紀錄。文中的範例程式碼和測試檔已由編輯在 Node.js v25.9.0 執行 node --test,5 項測試全部通過(2026-09-15);這只證明範例本身可以運行,不代表 Claude 每次都會寫出同樣的程式。

開始前:你需要乜?

  • 已安裝 Claude Code:未裝好請先跟 Claude Code 安裝教學,本文不重複安裝和登入步驟。
  • 付費方案或 Console 帳戶:官方寫明 Claude Code 需要 Pro、Max、Team、Enterprise 或 Console 帳戶,Claude.ai 免費方案不包括 Claude Code;亦可經 Amazon Bedrock 等第三方雲端供應商使用。按 Claude 官方價格頁(2026-09-15 核對),Pro 月繳 US$20,年繳折合 US$17/月(US$200 一次過預繳);Max 由 US$100/月起,用量可選 Pro 的 5 倍或 20 倍,這是相對級別,不是固定訊息數。以上為美元標價、不含適用稅項,官方可隨時調整。揀邊個方案,請看 Claude Code 要用邊個 Claude 方案,或用 AI 方案比較器篩選。
  • Git:本文用 Git 做版本控制和還原;Windows 原生環境要先安裝 Git for Windows 才有 git 指令。官方說明,對 Claude Code 本身而言 Git for Windows 只屬建議安裝:裝了它,Claude Code 會用 Git Bash 執行 Bash 工具;沒有裝,就改用 PowerShell 工具。這會影響步驟 4 的權限規則要點名 Bash 還是 PowerShell。
  • Node.js 24 LTS:只用來執行範例測試,Claude Code 的原生安裝本身不需要 Node.js。Node.js 內置的測試執行器 node --test 由 v20.0.0 起列為穩定;按 Node.js 發佈時間表,截至 2026-09-15,v24 是 Active LTS(2026-10-20 起轉入維護期),v22 維護至 2027-04-30,v20 已於 2026-04-30 停止支援。用 node --version 檢查你的版本。
  • 一個空資料夾:第一次請不要在公司正式項目練習,出錯亦不會影響工作。

今次做乜:香港報價小工具規格

揀報價工具做第一個項目,是因為它夠細、規則清楚,而且有一個 AI 和人都容易踩中的陷阱:用小數計錢。規格如下,稍後會原封不動寫入 CLAUDE.md 和測試:

項目規格
輸入每行有項目名稱、數量(正整數)、港幣單價(以文字輸入,最多兩位小數,例如 "35.5")
折扣可選,0 至 100 的整數百分比
計算所有金額一律以整數「仙」儲存和計算(HK$12.50 = 1250 仙)
捨入折扣金額四捨五入到最近一仙,剛好半仙時向上
輸出小計、折扣、總額,格式為 HK$1,234.50
範圍示例不計稅項及其他附加費;不使用任何 npm 套件
檔案計算邏輯放 src/quote.mjs,測試放 test/quote.test.mjs

點解一定要用整數仙?JavaScript 的數字是二進位浮點數,有些小數無法準確表示。你可以自己在終端機試:

node -e "console.log(0.1 + 0.2)"
node -e "console.log(Math.round(1.005 * 100) / 100)"

示例輸出(編輯在 Node.js v25.9.0 執行)分別是 0.30000000000000004 和 1——後者本應是 1.01。報價單上差一仙都會令客人質疑,所以這條規則要寫入 CLAUDE.md,並且用測試守住。文中所有 HK$ 金額都是計算示例,不是任何產品或服務的價格。

步驟 1:開項目資料夾、git init

mkdir hk-quote-tool
cd hk-quote-tool
git init
claude

這四行在 macOS Terminal、Linux、WSL 和 Windows PowerShell 都可以逐行執行。先 git init 再開 Claude,原因很實際:之後每一步都可以用 git diff 看改動、用 commit 留下還原點。Claude Code 自己的 checkpoint 不會追蹤經 Bash 指令改動的檔案,不能取代 Git(詳見步驟 7)。

官方安全文件指出,第一次在一個代碼庫執行 Claude Code 需要通過「trust verification」,即確認你信任這個資料夾。這是你自己剛建立的空資料夾,可以確認;日後打開別人的 repo,就要先看清楚它帶來的設定。其中一個原因是:項目 .claude/settings.json 內的 allow 規則,只會在你接受該資料夾的 workspace trust 對話框之後才生效,而對話框會先列出這些規則讓你審閱。

步驟 2:第一件事,睇清權限模式

如果你以為 Claude 每改一個檔案都會先問你,要先更正。按現行官方文件:

  • Pro、Max、Team 方案在終端機(以及 VS Code 擴充)開始的 session,內置起始模式是 Auto mode:由背景安全檢查代你審核,Claude 會在不逐一詢問的情況下改大部分檔案、執行大部分指令。
  • Enterprise 方案或 Claude Console API key 則由 Manual mode(設定值為 default)開始。
  • Auto mode 作為預設,需要 Claude Code v2.1.228 或以上(macOS、Linux、WSL)或 v2.1.233 或以上(原生 Windows);更舊的版本預設是 Manual。
  • 安裝或升級後的第一個 session,可能因功能設定尚未下載而以 Manual mode 開始,下一個 session 才轉為 Auto mode。

所以開始前,先看終端機底部的狀態列。各模式的分別如下:

模式(設定值)狀態列顯示不問你就會做適合
Manual(default)⏸ manual mode on只讀取自己審核每個動作、敏感工作
Accept edits(acceptEdits)⏵⏵ accept edits on讀取、改檔,以及 mkdir、touch、mv、cp 等常用檔案指令一邊改一邊 review 的 code
Plan(plan)⏸ plan mode on讀取;Auto mode 可用時,另加分類器批准的指令;不會改源碼改動之前先探索和計劃
Auto(auto)⏵⏵ auto mode on全部,背景有安全檢查你信任大方向的任務
Bypass(bypassPermissions)⏵⏵ bypass permissions on全部只限隔離的 container 和 VM;新手不要用

session 進行中隨時可以按 Shift+Tab 切換:由 Auto mode 按第一下會轉到 Manual,之後依次是 Accept edits、Plan,再回到 Manual。部分 Windows 環境亦可以用 Alt+M。

建議:第一個項目用 Manual 或 Plan mode,觀察 Claude 每一步想做甚麼,熟悉之後才決定是否用回 Auto mode。官方亦提醒,Auto mode 可以減少權限提示,但不保證安全,只適合你信任大方向的任務,不能取代對敏感操作的檢查。不要為咗唔想被問而用 --dangerously-skip-permissions 或 bypassPermissions 模式,官方只建議在隔離的 container 或 VM 使用。

想每個終端 session 都由 Manual mode 開始,可以在個人設定檔 ~/.claude/settings.json 寫入:

{
  "permissions": {
    "defaultMode": "default"
  }
}

有三點要留意:

  1. 把 auto 寫在項目的 .claude/settings.json 或 .claude/settings.local.json 不會生效;想用 Auto mode 作預設,只能寫在 ~/.claude/settings.json 或機構的 managed settings。
  2. 項目設定可以把 defaultMode 設為 plan,令這個項目的終端 session 預設進入 Plan mode。
  3. 在 Pro、Max、Team 方案,如果只有 ~/.claude/settings.json 設了 auto 以外的 defaultMode,Claude Code 會問你一次是否改為 Auto mode;拒絕就會保持你的設定。

步驟 3:/init 生成 CLAUDE.md,再親手改

CLAUDE.md 是 Claude Code 每個 session 開始時都會讀的項目說明。在 Claude Code 輸入:

/init

官方說明 /init 會分析代碼庫,自動生成一份起始 CLAUDE.md,內容包括它發現的 build 指令、測試方法和項目慣例;如果 CLAUDE.md 已經存在,/init 只會建議改善,不會覆蓋。空資料夾可以分析的東西不多,所以之後要親手補上 Claude 自己發現不到的規則——這亦是官方建議的做法。想用互動式流程,可以先設定環境變數 CLAUDE_CODE_NEW_INIT=1 再啟動:/init 會問你要設定 CLAUDE.md、skills 還是 hooks,用 subagent 探索代碼庫、追問缺漏,並在寫入任何檔案之前給你一份可審閱的建議。

以下是這個項目的 CLAUDE.md 範本(示例,約 25 行)。可以輸入 /memory,揀項目的 CLAUDE.md 用編輯器打開再貼上:

# 香港報價小工具

用 Node.js 內置功能計算報價:項目、數量、港幣單價、可選折扣。不使用任何 npm 套件。

## 指令
- 執行全部測試:node --test
- 只跑一個測試檔:node --test test/quote.test.mjs

## 金額規則(最重要)
- 所有金額一律以整數「仙」儲存和計算(HK$12.50 = 1250),不要用小數計錢
- 單價以文字輸入,最多兩位小數;負數或格式錯誤要拋出錯誤
- 折扣是 0 至 100 的整數百分比;折扣金額四捨五入到最近一仙,半仙向上
- 只在輸出時用 formatHKD() 格式化成 HK$1,234.50
- 示例不計稅項及其他附加費

## 工作方式
- 修改 src/ 之前,先在 test/ 寫好或更新測試
- 完成的定義:node --test 全部通過,並在回覆中貼出測試結果
- 不要新增任何依賴;不要 git push
- 不要讀取或建立 .env 檔

<!-- 維護備註:金額規則有改動時,同步更新 test/quote.test.mjs -->

這份範本刻意寫得短:它只寫 Claude 讀 code 也估唔到的東西——測試指令、金額陷阱、完成的定義和禁止事項。最後一行是區塊級 HTML 註解;官方說明這類註解會在注入 context 前被刪走,適合留給同事看的備註,不會佔用 context(寫在 code block 內的註解則會保留)。

好同唔好的 CLAUDE.md 寫法

官方最佳實踐文件列出一張「應寫/不應寫」清單。應寫的是:Claude 估唔到的 Bash 指令、與預設不同的寫法規則、測試方法和慣用的測試工具、repo 慣例(例如分支命名)、項目特有的架構決定、開發環境的特殊要求(例如必需的環境變數),以及常見陷阱。不應寫的是:Claude 讀 code 就知道的資料、它本身已熟悉的語言慣例、詳細 API 文件(改為放連結)、經常變動的資料、長篇解說、逐個檔案的介紹,以及「寫乾淨的 code」這類不言自明的要求。官方亦強調指示要具體到可以驗證。對照到今次的項目:

主題應避免(太空泛或應刪)建議寫法(具體、可驗證)
測試「改完記得測試」「完成任何改動後執行 node --test,全部通過才算完成」(官方例子:寫「Run npm test before committing」,而不是「Test your changes」)
格式「code 要寫得整齊」「用 2 格空格縮排」(官方例子:「Use 2-space indentation」,而不是「Format code properly」)
金額「計錢要小心」「所有金額一律用整數仙;只在輸出時格式化」
檔案介紹逐個檔案寫「src/quote.mjs 是計算邏輯……」刪走;Claude 讀 code 就知道
依賴列出每個套件和版本只寫與預設不同的規矩:「不要新增任何 npm 套件」
進度「今日做到第幾步、下一步做乜」放在對話或 issue;經常變動的資料不要寫入 CLAUDE.md

官方建議每份 CLAUDE.md 少於 200 行:檔案越長,佔用的 context 越多,Claude 遵守的程度亦會下降。逐行問自己:「刪走這一行,Claude 會唔會做錯?」唔會就刪。對已受 Git 管理的 CLAUDE.md,Claude Code v2.1.206 或以上的 /doctor 會建議刪走 Claude 可以從代碼推斷的內容,例如目錄結構、依賴清單和架構概覽,保留陷阱、背後原因和與工具預設不同的慣例。

CLAUDE.md 放邊度?四個範圍

位置用途入唔入 Git
機構的 managed policy 位置公司 IT 統一派發的規則由 IT 管理
~/.claude/CLAUDE.md你個人在所有項目通用的偏好不適用(在你的使用者資料夾)
./CLAUDE.md 或 ./.claude/CLAUDE.md團隊共用的項目規則入,經 Git 與隊友共享
./CLAUDE.local.md只屬你自己的項目偏好不入;要自己加入 .gitignore

另外兩個整理技巧:

  • @ 匯入:在 CLAUDE.md 寫 @docs/money-rules.md,可以匯入另一個檔案。相對路徑以「寫匯入的那個檔案」為起點,而不是你的工作資料夾;匯入最多可以嵌套四層。匯入的檔案同樣在啟動時載入,所以只幫你整理內容,並不會節省 context。如果匯入的路徑在工作資料夾以外,Claude Code 第一次遇到時會顯示批准對話框。
  • 已有 AGENTS.md:Claude Code 讀的是 CLAUDE.md,不是 AGENTS.md。如果 repo 已經為其他 coding agent 寫了 AGENTS.md,建立一個 CLAUDE.md,內容寫 @AGENTS.md 匯入,兩邊就共用同一份規則;Claude 專用的指示可以寫在匯入行下面。Windows 建立 symlink 需要系統管理員權限或開發人員模式,所以官方建議直接用 @AGENTS.md 匯入。AGENTS.md 本身怎樣寫,本站會另文介紹。

確認 Claude 真係讀到

在 session 內輸入 /context,在 Memory files 一欄確認 CLAUDE.md 有列出;沒有列出,Claude 就看不到它。/memory 會列出你的 CLAUDE.md、CLAUDE.local.md 等檔案位置,可以直接打開編輯,亦可以開關 auto memory(見下文「第二次 session」)。

最重要的一點:CLAUDE.md 是 context,不是強制設定。官方說明 Claude 會閱讀並嘗試遵守,但不保證嚴格執行,尤其是含糊或互相矛盾的指示。你在 CLAUDE.md 寫「不要 git push」,只會影響 Claude 嘗試做甚麼;要無論如何都攔住某個動作,要用下一步的權限規則,或者 PreToolUse hook。

專案規則,寫呢 4 樣先有用;成果要求|檔案範圍|驗證方法|完成標準;少寫空泛口號,多寫可檢查要求
圖解:專案規則,寫呢 4 樣先有用。少寫空泛口號,多寫可檢查要求

步驟 4:用 .claude/settings.json 設定權限

安裝 Claude Code 不會自動建立任何設定檔。建議你自己用編輯器在項目根目錄建立 .claude/settings.json,不要交給 Claude 寫:.claude 資料夾屬官方列明的受保護路徑,在 Manual 和 Accept edits 模式下,Claude 要寫入這裏一定會先問你;但在 Auto mode,這類寫入會交由背景分類器審核,不一定會彈出提示。以下是這個項目的起手設定:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "allow": [
      "Bash(node --test *)",
      "Bash(git commit *)",
      "PowerShell(node --test *)",
      "PowerShell(git commit *)"
    ],
    "deny": [
      "Bash(git push *)",
      "PowerShell(git push *)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}
  • $schema:讓編輯器提供自動完成和格式檢查。
  • Bash(node --test *):跑測試不用再問。結尾「空格加 *」亦會配對不帶參數的 node --test;空格本身是規則的一部分。
  • Bash(git commit *):官方示例之一,commit 不用再問。git add 沒有列入,在 Manual mode 下仍會先問你。
  • 不用寫 git status、git diff:官方有一組內置唯讀指令,包括 ls、cat、grep 和 git 的唯讀用法,任何模式都不會彈出提示。
  • Bash(git push *):push 一律拒絕,review 完成後由你自己 push。
  • Read(./.env)、Read(./.env.*):來自官方設定示例,阻止 Claude 讀取目前資料夾的 .env 檔(在項目根目錄啟動時,即項目根目錄)。
  • 那兩行 PowerShell(...) 是給 Windows 用的:官方說明,Windows 原生環境沒有安裝 Git Bash 時會自動啟用 PowerShell 工具;即使裝了 Git for Windows,claude.ai 及 Console 帳戶也預設同時開啟這個工具。PowerShell 規則自成一套,寫法與 Bash 規則相同,但 Bash(git push *) 攔不住經 PowerShell 工具發出的 git push。同理,下面提到的內置唯讀指令集只涵蓋 Bash,所以在 Windows 上 git status 仍可能問你一次。macOS、Linux 和 WSL 預設不啟用 PowerShell 工具,多寫這兩行亦無害。

儲存後在 Claude Code 輸入 /status,Status 分頁的 Setting sources 一行會列出這個 session 已載入的設定檔。設定檔是嚴格 JSON:多一個 // 註解或結尾逗號都是語法錯誤,下次啟動會顯示 Settings Error。確認無誤後,把 .claude/settings.json commit 到 Git,隊友就會用同一套規則。

規則點樣生效:deny、ask、allow

輸入 /permissions 可以查看和管理 Allow、Ask、Deny 三類規則,對話框亦會顯示每條規則來自哪個 settings.json。規則按 deny → ask → allow 的次序比對,第一個配對的結果決定一切,規則寫得多具體都不會改變這個次序。在 Manual mode 下,不同工具的批准方式如下:

工具類型例子要唔要批准揀「Yes, and don't ask again」後
唯讀讀檔、Grep不用(限工作資料夾內)不適用
Bash 指令執行 shell 指令要,內置唯讀指令除外按 repo 和指令永久記住
改檔編輯或寫入檔案要直至 session 結束

揀「Yes, and don't ask again」而批准屬永久保存(例如 Bash 指令)時,Claude Code 會把規則寫入 git repo 根目錄的 .claude/settings.local.json。Claude Code 第一次寫這個檔案時,會把它加入你的全域 git excludes,所以不會被 commit;如果你自己手動建立這個檔案,就要自行加入 .gitignore。

設定檔範圍同優先次序

範圍檔案影響誰
Managed由機構統一派發整個機構;你自己的檔案改變不到
User~/.claude/settings.json你自己,在這部電腦的所有項目
Shared project.claude/settings.json所有在這個資料夾工作的人;commit 到 Git 後隊友會拎到
Project local.claude/settings.local.json只有你,只限這個項目;不應入 Git

優先次序由高至低是:managed、命令列參數、project local、shared project、user。permissions.allow 這類清單會合併;而任何一層 deny 了的工具,其他層都不能 allow——例如 user 設定 allow、項目設定 deny,結果是被 deny。

權限規則攔唔到乜?

  • Bash 規則只比對 Claude 寫出來的指令文字。Bash(git push *) 攔得住 git push origin main,但攔不住 git -C . push origin main 等其他寫法;官方說明這類 deny 規則不是圍住程式的保安邊界。在 Windows,經 PowerShell 工具發出的同一條指令亦要另寫 PowerShell(...) 規則才攔得住。
  • Read/Edit 的 deny 規則有盲點:它們不適用於沒有點名該檔案的指令(例如在同一資料夾執行 grep -r pattern .),亦不適用於自己開檔的 Python 或 Node script。
  • 要作業系統層面的保護:要在作業系統層面限制 Bash 指令及其子程序可以存取的檔案和網絡,要啟用 sandbox(在 Windows 上只有 WSL 2 支援,詳見安裝教學);想用自己的邏輯檢查完整指令,可以用 PreToolUse hook。
  • 反過來,受保護路徑不會被自動批准:.git、.claude、.vscode、.husky、.zshrc、.npmrc、.mcp.json 等路徑的寫入,在 Manual 和 Accept edits 模式下一定會問你,在 Auto mode 會交由分類器審核;allow 規則不能預先批准這些寫入。只有 bypassPermissions 模式(以及以 bypass 權限啟動、仍在 Plan mode 的 session)會直接放行。

一句總結:CLAUDE.md 講「應該點做」,權限規則、hooks 和 sandbox 決定「可以做乜」。重要的限制兩邊都寫,但只有後者會被強制執行。

步驟 5:用 Plan mode 先傾計劃

準備好 CLAUDE.md 和權限設定後,按 Shift+Tab 直至狀態列顯示 ⏸ plan mode on(由 Auto mode 出發要按三下,由 Manual mode 出發按兩下),或者直接在提示前加 /plan;亦可以用 claude --permission-mode plan 啟動。Plan mode 會讓 Claude 研究並提出改動方案,但不會改源碼。

/plan 按 CLAUDE.md 的規格,做一個香港報價小工具:src/quote.mjs 提供 toCents、formatHKD、calculateQuote 三個函數,test/quote.test.mjs 放測試。先列出你會建立的檔案、每個函數的輸入和輸出,以及你會寫的測試案例,等我確認。

示例計劃(實際輸出會不同):

  1. 建立 test/quote.test.mjs,覆蓋:三個項目加 10% 折扣、0.1 加 0.2、半仙捨入、千位分隔、錯誤輸入。
  2. 建立 src/quote.mjs:toCents 把 "35.5" 轉成 3550;calculateQuote 以仙累加小計並計算折扣;formatHKD 輸出 HK$1,234.50 格式。
  3. 執行 node --test,全部通過後回報結果。

計劃出來後會有幾個選項:

  • Yes, and use auto mode:批准並轉入 Auto mode;Auto mode 不可用時,這個選項會顯示為 Yes, auto-accept edits。
  • Yes, manually approve edits:批准,但每個改動都要你逐一確認。第一個項目建議揀這個。
  • No, keep planning:留在 Plan mode,告訴 Claude 要改計劃的哪部分。

想直接修改計劃內容,可以按 Ctrl+G 用預設文字編輯器打開。官方推薦的流程是「探索 → 計劃 → 實作 → commit」;不過,如果改動可以一句講完(例如改一個錯字),就不必開 Plan mode。

步驟 6:先寫測試,再實作

官方最佳實踐的重點之一,是給 Claude 一個它可以自己執行的檢查,例如測試、build 或截圖對比。有了會「通過/失敗」的檢查,Claude 就可以做完、跑檢查、讀結果、再修正,而不是等你逐一發現錯誤。官方的示範是在提示中直接寫出測試案例,並要求實作後執行測試。套用到今次的項目,分兩次提示:

先寫 test/quote.test.mjs,暫時不要實作。測試案例:
1. 網站設計 1200 × 1、相片修圖 35.5 × 4、網站寄存 88.8 × 3,折扣 10%:
   小計 HK$1,608.40、折扣 HK$160.84、總額 HK$1,447.56
2. 單價 0.1 加 0.2,總額要等於 30 仙
3. 10.05 打九折:折扣是 101 仙(1.005 元,半仙向上),總額 HK$9.04
4. formatHKD(123450) 是 HK$1,234.50;formatHKD(5) 是 HK$0.05
5. 單價 "-5"、"12.345" 和數量 0 都要拋出錯誤
寫好之後執行 node --test,確認測試因為未實作而失敗,再告訴我。
實作 src/quote.mjs,令全部測試通過,不要修改測試。完成後執行 node --test,把結果貼出來。

「不要修改測試」很重要:遇到測試失敗時,最快的「修正」往往是把測試改來遷就程式,這正是你要防止的。以下是其中一種寫法(示例;Claude 為你寫的版本會不同)。先看測試檔:

// test/quote.test.mjs
import { test } from "node:test";
import assert from "node:assert/strict";
import { toCents, formatHKD, calculateQuote } from "../src/quote.mjs";

test("三個項目加 10% 折扣", () => {
  const quote = calculateQuote(
    [
      { name: "網站設計", unitPrice: "1200", quantity: 1 },
      { name: "相片修圖", unitPrice: "35.5", quantity: 4 },
      { name: "網站寄存(月)", unitPrice: "88.8", quantity: 3 },
    ],
    10,
  );
  assert.equal(formatHKD(quote.subtotal), "HK$1,608.40");
  assert.equal(formatHKD(quote.discount), "HK$160.84");
  assert.equal(formatHKD(quote.total), "HK$1,447.56");
});

test("0.1 加 0.2 等於 30 仙", () => {
  const quote = calculateQuote([
    { name: "A", unitPrice: "0.1", quantity: 1 },
    { name: "B", unitPrice: "0.2", quantity: 1 },
  ]);
  assert.equal(quote.total, 30);
});

test("折扣剛好半仙時向上捨入", () => {
  const quote = calculateQuote([{ name: "A", unitPrice: "10.05", quantity: 1 }], 10);
  assert.equal(quote.discount, 101);
  assert.equal(formatHKD(quote.total), "HK$9.04");
});

test("千位分隔同兩位小數", () => {
  assert.equal(formatHKD(123450), "HK$1,234.50");
  assert.equal(formatHKD(5), "HK$0.05");
});

test("拒絕錯誤輸入", () => {
  assert.throws(() => toCents("-5"));
  assert.throws(() => toCents("12.345"));
  assert.throws(() => calculateQuote([{ name: "A", unitPrice: "10", quantity: 0 }]));
});

再看實作:

// src/quote.mjs:所有金額都用整數「仙」,HK$12.50 = 1250
export function toCents(amount) {
  const text = String(amount).trim();
  if (!/^\d+(\.\d{1,2})?$/.test(text)) {
    throw new Error("金額格式不正確:" + text);
  }
  const [dollars, decimals = ""] = text.split(".");
  return Number(dollars) * 100 + Number(decimals.padEnd(2, "0"));
}

export function formatHKD(cents) {
  const sign = cents < 0 ? "-" : "";
  const abs = Math.abs(cents);
  const dollars = String(Math.floor(abs / 100)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  const rest = String(abs % 100).padStart(2, "0");
  return sign + "HK$" + dollars + "." + rest;
}

export function calculateQuote(items, discountPercent = 0) {
  if (!Number.isInteger(discountPercent) || discountPercent < 0 || discountPercent > 100) {
    throw new Error("折扣要係 0 至 100 的整數");
  }
  let subtotal = 0;
  for (const item of items) {
    if (!Number.isInteger(item.quantity) || item.quantity <= 0) {
      throw new Error("數量要係正整數:" + item.name);
    }
    subtotal += toCents(item.unitPrice) * item.quantity;
  }
  const discount = Math.round((subtotal * discountPercent) / 100);
  return { subtotal, discount, total: subtotal - discount };
}

第 3 個案例最能看出整數仙的價值:如果用小數計算折扣,先計 10.05 * 10 / 100 得到 1.005,再用 Math.round(x * 100) / 100 取兩位小數,編輯在 Node.js v25.9.0 得到的是 1(即 HK$1.00),而不是正確的 HK$1.01。換成 10.05 * 0.1 又會碰巧得到 1.01——同一條數,寫法不同結果就不同,這正是小數計錢不可靠的地方。改用整數仙,1005 × 10 ÷ 100 = 100.5,四捨五入就是 101 仙。這就是測試要守住的地方。

node --test 預設會搜尋符合 **/*.test.{cjs,mjs,js} 等命名規則的檔案,所以 test/quote.test.mjs 會被自動找到,唔使額外設定。想自己跑,可以在 Claude Code 的輸入框打 ! node --test:以 ! 開頭的輸入會直接交給 shell 執行,不經 Claude;結果出來後,Claude 會自動回應並解釋,這個回應的用量等同一次普通提示。示例輸出(節錄,已刪去執行時間;格式視乎 Node.js 版本):

✔ 三個項目加 10% 折扣
✔ 0.1 加 0.2 等於 30 仙
✔ 折扣剛好半仙時向上捨入
✔ 千位分隔同兩位小數
✔ 拒絕錯誤輸入
ℹ tests 5
ℹ pass 5
ℹ fail 0

CLAUDE.md 已把「貼出測試結果」寫進完成的定義。如果 Claude 說「全部通過」卻沒有貼出結果,就用 ! node --test 自己再跑一次,不要只信文字描述。

步驟 7:檢查改動,出錯點樣退

按鍵/指令作用
/diff不離開 Claude Code 就可以看工作區的所有改動,包括 Claude 的改動和你自己未 commit 的改動
! git diff在 Claude Code 內直接執行 git diff;亦可以在另一個終端機視窗執行
EscClaude 執行中按一下即可中斷
輸入框空白時按兩下 Esc,或 /rewind打開 rewind 選單,還原較早的對話和程式碼狀態
/code-review可選:請 Claude 檢查目前的 diff 有沒有正確性錯誤和可清理的地方

要特別留意:checkpoint 不會追蹤經 Bash 指令改動的檔案——例如 Claude 用 rm、mv、cp 刪除或搬移檔案,rewind 無法還原;只有 Claude 用檔案編輯工具直接改的檔案會被追蹤。官方亦寫明 checkpoint 是 session 層面的快速還原,長期的版本紀錄仍然要靠 Git。

commit 之前,用這四條問題檢查一次:

  1. 有沒有改到規格以外的檔案?
  2. 測試有沒有被改來遷就實作?
  3. 金額計算有沒有出現小數運算,例如直接乘 0.1?
  4. node --test 的結果,你有沒有親眼看到?
AI 改完 Code,未算完成;檢查 Diff → 執行測試 → 睇實際結果 → commit;出錯先修正,通過先保存
圖解:AI 改完 Code,未算完成。出錯先修正,通過先保存

步驟 8:commit

確認無誤後,可以直接用對話叫 Claude 處理 Git,例如官方快速入門的例子:

commit my changes with a descriptive message

用中文講「幫我 commit,寫一句清楚的 commit message」亦可以。按上面的設定,git commit 不用再問;git add 在 Manual mode 下仍會先問你一次。

預設情況下,Claude Code 會在 commit 加上一行 Co-Authored-By 尾註,名稱是當時使用的模型,例如 Claude Sonnet 5。想改寫或隱藏,可以用 attribution 設定(舊的 includeCoAuthoredBy 自 v2.0.62 起已被取代)。把 commit 設為空字串,即可隱藏 commit 尾註:

{
  "attribution": {
    "commit": ""
  }
}

要不要保留這行尾註,視乎你的團隊規定。至於 push,因為已經被 deny,Claude 嘗試時會被拒絕;review 完成後,由你自己在終端機執行 git push。

第二次 session:令 CLAUDE.md 越用越準

CLAUDE.md 不是一次寫完的。官方建議在以下情況加規則:

  • Claude 第二次犯同一個錯;
  • code review 發現一些 Claude 本應知道的項目規矩;
  • 你在對話中打了一段上次 session 已經打過的更正或說明。

例如 Claude 第二次把折扣當成小數(0.1)而不是整數百分比(10),就在 CLAUDE.md 的金額規則加一行具體寫法。第二個任務可以試:加一個指令行入口,由 JSON 檔讀取項目並列印報價單——同樣先 Plan、先寫測試。

「remember」同「add this to CLAUDE.md」唔同

對 Claude 說「remember……」(官方例子是「always use pnpm, not npm」),它會把內容存入 auto memory,而不是 CLAUDE.md。要寫入 CLAUDE.md,要直接說「add this to CLAUDE.md」,或者用 /memory 自己編輯。部分較早的官方說明文章寫法不同,本文以 2026-09-15 的 Claude Code 文件為準。

CLAUDE.mdauto memory
由誰寫你,或你叫 Claude 寫入Claude 在 session 中自行記錄
存放位置項目內,可以入 Git 與隊友共享~/.claude/projects/<project>/memory/,只存在這部電腦
每次載入session 開始時整份載入MEMORY.md 的首 200 行或首 25KB(以先到者為準)
預設要自己建立(或用 /init)預設開啟,可以在 /memory 關閉
適合團隊都要遵守的規則個人工作習慣和 Claude 自己學到的東西

/compact、/clear 同用量

  • CLAUDE.md 不怕壓縮:項目根目錄的 CLAUDE.md 在 /compact 之後會重新從磁碟讀取。只在對話中講過的指示,可能在壓縮後消失;要長期有效,就寫入 CLAUDE.md。
  • 換任務就 /clear:做完一件事、開始另一件無關的事,用 /clear 清空 context。同一個問題更正兩次仍然錯,官方建議 /clear,然後把學到的東西寫進一個更具體的新提示。
  • 用量:/usage 顯示方案用量上限和使用情況;/clear 不耗用量,而對很長的對話執行 /compact 本身就是一個大請求(可以附上重點指示,例如 /compact 保留金額規則)。五小時 session 和每週上限點樣計,請看 Claude Pro、Max 與 Claude Code 用量限制。

常見問題排解

情況可能原因解決方法
Claude 好似無跟 CLAUDE.md檔案沒有載入;規則太空泛;幾份 CLAUDE.md 互相矛盾(Claude 可能隨意揀一條);檔案太長先用 /context 看 Memory files 有沒有列出;把規則改寫得具體、可驗證;刪走矛盾和過時的內容;控制在 200 行內。必須攔住的動作改用權限規則或 hook
講過的規則在 /compact 後唔記得規則只在對話中講過寫入項目根目錄的 CLAUDE.md,它在壓縮後會重新讀取
在項目設定寫 "defaultMode": "auto" 無效項目的 .claude/settings.json 和 .claude/settings.local.json 不接受 auto移到 ~/.claude/settings.json
啟動時出現 Settings Error設定檔有 // 註解、結尾逗號,或 schema 不接受的值按對話框讓 Claude 協助修正,或自己改好;之後用 /status 確認已載入,需要時執行 claude doctor 看詳情
寫了 allow 規則,Claude 仍然問未接受該資料夾的 workspace trust;規則寫法不配對(例如漏了空格);另一個設定檔有配對的 ask 規則(ask 永遠先於 allow);要寫的是 .claude 等受保護路徑重新開啟並接受 trust 對話框;用 /permissions 查看規則及其來源檔案;受保護路徑在 Manual mode 本來就一定會問
狀態列沒有 Auto mode版本低於 v2.1.228(原生 Windows 為 v2.1.233);安裝後第一個 session;模型不支援;機構停用了 Auto modeclaude update 後開新 session;用 /model 查看模型(Pro 預設 Sonnet 5、Max 預設 Opus 5;Anthropic API 上 Auto mode 需要 Opus 4.6、Sonnet 4.6 或以上,或 Fable 模型);公司帳戶請問 IT
git push 被拒絕設計如此:Bash(git push *) 在 deny 清單review 完成後自己在終端機 push。反過來,如果 Windows 上 push 竟然成功,檢查 deny 清單有沒有一併寫 PowerShell(git push *)
用 /rewind 後,有些檔案仍是改動後的樣子那些檔案經 Bash 指令改動,checkpoint 不會追蹤用 Git 還原到上一個 commit;以後每完成一步就 commit
Windows 想用 symlink 共用 AGENTS.md建立 symlink 需要系統管理員權限或開發人員模式改為在 CLAUDE.md 寫 @AGENTS.md 匯入

下一步

如果你仲未有可以用 Claude Code 的方案,可到本站 Claude Code 方案服務頁了解服務內容(Claude Code 包含在 Pro 及以上方案),落單步驟見服務流程。本站與 OpenAI/Anthropic 並無從屬關係;頁面上的港幣價錢是本站獨立服務總價,不是 Anthropic 官方香港價格。下單前請閱讀服務條款,並先了解代充與成品號涉及的憑證、條款和停權風險。任何方式都不會改變文首所述的官方支援地區狀態。

結論

Claude Code 新手最容易忽略的,不是某條指令,而是「誰在控制」。先看狀態列,知道自己在 Auto、Manual 還是 Plan mode;用 CLAUDE.md 寫下 Claude 估唔到的規則,並記住它只是建議;真正要攔住的動作,交給 .claude/settings.json 的 deny 規則、hook 或 sandbox。然後按「計劃 → 測試 → 實作 → /diff → commit」一步步做,每一步都有證據可以檢查。報價小工具只是練習,同一套流程可以直接搬到你的下一個項目。

資料來源與引用

我們附上第一手及官方來源,方便你逐一核實。

  1. 1.How Claude remembers your project (CLAUDE.md and auto memory) — Anthropic (Claude Code Docs)
  2. 2.Best practices for Claude Code — Anthropic (Claude Code Docs)
  3. 3.Configure permissions — Anthropic (Claude Code Docs)
  4. 4.Permission modes — Anthropic (Claude Code Docs)
  5. 5.Claude Code settings — Anthropic (Claude Code Docs)
  6. 6.Settings reference: attribution — Anthropic (Claude Code Docs)
  7. 7.Environment variables: first session after an install or upgrade — Anthropic (Claude Code Docs)
  8. 8.Claude Code commands — Anthropic (Claude Code Docs)
  9. 9.Interactive mode — Anthropic (Claude Code Docs)
  10. 10.Checkpointing — Anthropic (Claude Code Docs)
  11. 11.Manage costs effectively — Anthropic (Claude Code Docs)
  12. 12.Model configuration — Anthropic (Claude Code Docs)
  13. 13.Security — Anthropic (Claude Code Docs)
  14. 14.Tools reference: PowerShell tool — Anthropic (Claude Code Docs)
  15. 15.Claude Code quickstart — Anthropic (Claude Code Docs)
  16. 16.Claude Code advanced setup — Anthropic (Claude Code Docs)
  17. 17.Claude Code changelog — Anthropic (Claude Code Docs)
  18. 18.Claude plans and pricing — Anthropic
  19. 19.Anthropic supported countries — Anthropic
  20. 20.Node.js test runner — Node.js
  21. 21.Node.js release schedule — Node.js Release Working Group (GitHub)

常見問題

CLAUDE.md 同 auto memory 有乜分別?

CLAUDE.md 是你寫給 Claude 的項目規則,放在項目內,可以經 Git 與隊友共享,每個 session 開始時載入。auto memory 由 Claude 在 session 中自行記錄,預設開啟,存放在本機 ~/.claude/projects/ 內對應項目的 memory 資料夾,只屬這部電腦,每次載入 MEMORY.md 的首 200 行或首 25KB(以先到者為準)。對 Claude 說「remember……」會存入 auto memory;想寫入 CLAUDE.md,要說「add this to CLAUDE.md」,或用 /memory 自己編輯。

點解 Claude Code 冇問我就改咗檔案?

現行官方文件寫明,Pro、Max、Team 方案在終端機開始的 session,內置起始模式是 Auto mode(需要 v2.1.228 或以上,原生 Windows 為 v2.1.233 或以上),由背景安全檢查代你審核,所以大部分操作不會逐一詢問。狀態列顯示 ⏵⏵ auto mode on 即是 Auto mode。按 Shift+Tab 可以轉到 Manual mode(⏸ manual mode on)或 Plan mode;想每次都由 Manual 開始,在 ~/.claude/settings.json 把 permissions.defaultMode 設為 "default"。已經改錯的檔案,可以用 /rewind 或 Git 還原。

CLAUDE.md 應該寫幾長?

官方建議每份 CLAUDE.md 少於 200 行;檔案越長,佔用的 context 越多,Claude 遵守的程度亦會下降。只寫 Claude 讀 code 也估唔到的東西,例如測試指令、與預設不同的寫法規則、項目陷阱和完成的定義。每一行都問自己「刪走它,Claude 會唔會做錯?」,唔會就刪。用 @ 匯入其他檔案可以整理內容,但匯入的檔案同樣在啟動時載入,不會節省 context。

.claude/settings.json 同 .claude/settings.local.json 有乜分別?

.claude/settings.json 是共享的項目設定,commit 到 Git 後隊友都會用到,適合寫團隊都要遵守的 allow/deny 規則。.claude/settings.local.json 只影響你自己在這個項目的設定;在權限提示揀「Yes, and don't ask again」而批准屬永久保存時,規則就會寫入這裏。Claude Code 第一次寫入這個檔案時會把它加入全域 git excludes;如果是你手動建立的,要自己加入 .gitignore。兩者衝突時 local 優先,但任何一層的 deny 都不能被 allow 推翻。

repo 已經有 AGENTS.md,仲使唔使寫 CLAUDE.md?

要。Claude Code 讀的是 CLAUDE.md,不是 AGENTS.md。官方建議建立一個 CLAUDE.md,內容用 @AGENTS.md 匯入,令 Claude Code 和其他 coding agent 共用同一份規則;Claude 專用的指示可以寫在匯入行下面。Windows 建立 symlink 需要系統管理員權限或開發人員模式,所以用 @AGENTS.md 匯入較簡單。

Claude 改錯咗,點樣還原?

Claude 執行中先按 Esc 中斷。之後在輸入框空白時按兩下 Esc,或輸入 /rewind,可以還原較早的對話和程式碼狀態。不過 checkpoint 只追蹤 Claude 用檔案編輯工具直接改的檔案,經 Bash 指令(例如 rm、mv、cp)改動的檔案無法 rewind,官方亦寫明 checkpoint 不能取代 Git。所以開始前先 git init,每完成一步就 commit。

香港可以用 Claude Code 嗎?

Claude Code 的官方系統要求把所在地列為 Anthropic 支援國家之一。截至 2026 年 9 月 15 日,Anthropic 官方支援國家/地區名單未列出香港。本文不提供任何繞過地區限制的方法,請先閱讀本站的 Claude 香港訂閱指南,並留意官方名單更新。

本文遵循我們的 編輯準則.

HK Learn AI 編輯部標誌

關於作者

HK Learn AI 編輯部

HK Learn AI 編輯部負責研究、查證同編寫每一篇內容,並引用官方及第一手來源。