所有入門單元免費開放 · 課程內容持續更新中

審查 Agent 的成果與權限控管

Agent 做得再快,最後按下「確定」的人都是你。這堂課教你看懂 diff、用 Git 存檔點保護進度、設定權限,並用一份審查清單把整個單元串起來。

第 6.6 堂約 14 分鐘

這是本單元的最後一堂。到目前為止,你已經會寫規格、準備 CLAUDE.md、讓 Agent 用測試檢查自己。這些都在提高 Agent 做對的機率。

但機率再高也不是百分之百。這一堂要處理的是:當 Agent 做錯的時候,怎麼發現、怎麼挽回、怎麼讓損害降到最低。

看懂 diff:它到底改了什麼

diff(差異)是一種顯示「修改前後差別」的格式。紅色、以 - 開頭的是被刪掉的行;綠色、以 + 開頭的是新增的行。Claude Code 在修改檔案時會顯示 diff,編輯器和 GitHub 上也都看得到。

diff 示意圖:expense.py 的程式修改用紅綠標示;下方 tests 檔案的預期結果從 0 被改成 None,被標記為警訊

上一堂提醒過:測試的預期結果被改了,是最需要停下來問的地方。

看 diff 時,你不需要看懂每一行的技術細節,但要能回答這三個問題:

  1. 範圍對嗎? 改的檔案是不是都和這次任務有關?有沒有動到不相關的地方?
  2. 理由懂嗎? 每一處修改,你能說出「為什麼要這樣改」嗎?說不出來就問它。
  3. 有沒有警訊? 測試被改、檔案被刪、新增了陌生的套件、出現網址或金鑰。
請 Agent 說明自己的修改

請用條列方式說明你這次的所有修改:

  • 每個被修改的檔案,改了什麼、為什麼
  • 有沒有刪除任何檔案或程式碼
  • 有沒有新增套件或修改設定檔
  • 有沒有修改任何測試?如果有,為什麼

說明要對照 diff 一起看。Agent 的說明也可能漏掉東西,diff 才是實際發生的事。

Git 存檔點:改壞了也能回來

Git 是記錄檔案版本的工具。每次 commit(提交)就像遊戲裡的存檔點,之後隨時能回到這個狀態。

和 Agent 合作的好習慣是:

  1. 開工前先 commit,把目前能正常運作的版本存起來。
  2. 每完成一個小步驟、測試通過,就再 commit 一次。
  3. 如果 Agent 把東西改壞了,直接回到上一個存檔點,不必一行一行手動修回去。
# 開工前:確認狀態並存檔
git status
git add .
git commit -m "加入預算提醒前的版本"

# Agent 完成後:看它改了什麼
git diff

你也可以請 Claude Code 幫你執行這些指令,但什麼時候存檔、存檔訊息寫什麼,最好由你決定。有些 Agent 工具也內建還原上一步的功能,很方便,但 Git 是最可靠、跨工具都通用的方式。還不熟悉 Git 的話,可以先看 Git 與 GitHub 那一堂。

權限控管:先問再做

Claude Code 和大多數 Agent 工具,都可以設定哪些動作要先經過你同意。常見的做法分成幾種程度:

程度 Agent 的行為 適合
只能規劃 只讀檔、提出計畫,不修改 剛開始一個任務、想先看方向
每次都問 修改檔案或執行指令前都詢問你 初學者、重要的專案
自動改檔案 可以直接改檔,執行指令前仍要問 熟悉之後、有 Git 存檔點
允許特定指令 例如 pytest 可以自動執行,其他仍要問 常用又安全的指令

各工具的模式名稱和設定方式不同,也會更新,請查官方文件。原則是:從嚴開始,熟悉後再逐步放寬,而且只放寬你理解的部分。

當 Agent 詢問「要執行這個指令嗎?」,請真的讀一下指令內容。看不懂就先拒絕,問它這個指令是做什麼的。

隔離:碰不到就弄不壞

權限設定是「請它先問」,但最根本的保護是讓它碰不到。

  • 不要在能直接影響正式環境的地方讓 Agent 工作。 正式網站、正式資料庫、客戶在用的系統,都不要連線設定在 Agent 的工作環境裡。
  • 真實資料換成測試資料。 就像 CLAUDE.md 裡寫的,用 tests/ 裡的範例檔,不用真實的記帳資料。
  • 正式金鑰不放在專案裡。 開發時用測試用的金鑰,並確認 .env 不會被 Agent 讀出來或被 Git 上傳。
  • 需要更強的隔離時,使用沙盒。 沙盒是一個與你電腦主要環境隔開的空間,Agent 在裡面能做的事和能碰到的檔案都受到限制。Claude Code 提供沙盒相關的設定,雲端 Agent 本身也是在隔離環境中執行,細節請查官方文件。

四層防護示意圖:最內層是隔離(不把正式環境、真實資料、正式金鑰放在 Agent 工作的地方),往外是權限與沙盒、Git 存檔點,最外層是你的審查

每一層都可能有疏漏,所以要一層一層疊起來。

審查清單

每次 Agent 說「完成了」,花幾分鐘走一遍這份清單:

□ 範圍:只改了這次任務相關的檔案?
□ 規格:符合 spec.md 的功能與「不做的事」?
□ 測試:pytest 全部通過?測試檔有沒有被不當修改?
□ 實際試用:我親自執行過,結果和預期一樣?
□ 邊界:想過空資料、錯誤輸入等情況了嗎?
□ 安全:沒有新增可疑套件、沒有金鑰或個資出現在程式碼裡?
□ 理解:每一處修改,我都能說出為什麼?
□ 存檔:確認沒問題後,commit 並寫清楚訊息

你可以把這份清單存在專案裡,甚至加進 CLAUDE.md,請 Agent 完成工作時先自己檢查一遍。但最後勾選的,一定是你。

行動練習:從零完成一個小專案

把本單元學到的全部串起來,用 Claude Code 完成一個「待辦清單網頁」或你自己的小點子:

  1. 準備:建立資料夾、git init,寫好 spec.md 和 CLAUDE.md,先 commit 一次。
  2. 規劃:請 Agent 先提出計畫,審查後再開工。權限設定為「修改與執行前都問我」。
  3. 測試:核心邏輯請它先寫測試、確認失敗,再實作到通過。
  4. 審查:每完成一步,看 diff、走一遍審查清單,沒問題就 commit。
  5. 回顧:故意請它做一個會改壞東西的修改,練習用 git diff 發現問題,並回到上一個存檔點。

完成後,寫下三件你學到的事,以及一條想加進 CLAUDE.md 的新規則。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。