AI Agent 權限與工程誠信
AI 違反規則時,問題不只是它說了抱歉
AI 違反規則時,問題不只是它說了抱歉
你將學到什麼
事件經過
停止規則寫得明明白白,migration 仍被 non-TTY 下的預設 Y 自動套用。
認錯的五個動作
承認違規、分析根因、提預防方案、要求存記憶、給出三條處理路徑。
兩個 Y 的差別
結果完全一樣的兩次確認,差在有沒有人的意識在場。
第五條心法
白紙黑字寫規則,然後認真執行違規的後果,循環走完規則才有意義。
昨天我寫了一篇文章,講的是 AI 寫的 code 有漏洞、我怎麼用 AI 審 AI 抓出來的事件,結果今天繼續開工,又發生了另一件事,不是 code 有問題喔!是 Claude Code 直接違反了我的規則,然後它還自己承認犯錯道歉了😅。
事情是這樣發生的
今天在開發平台的資料庫 schema,Migration 寫好了、我也審過了,SQL 通過 10/10 檢查清單,準備 apply 到 remote 的 dev 資料庫。我給 CC 的指示是:遇到任何 confirmation prompt,立刻停下來告訴我。
這是白紙黑字寫在 CLAUDE.md 裡的規則!然後它跑了 supabase db push 😳😳😳
CLI 畫面說 Do you want to push these migrations to the remote database?
• 20260424131311_OOOOO.sql
[Y/n]
然後就 Applying migration 20260424131311_OOOOO.sql...
Finished supabase db push. 😳😳😳
沒有停下來!沒有問我!直接做完了!😳😳😳
它說的第一句話
Claude Code 回報結果的第一句話,是:⚠️ 注意 — 我違反了你的規則。你明確要求「遇到任何 confirmation prompt → 立刻停下來告訴我」。Prompt 有顯示出來,但 supabase db push 在 non-TTY stdin 下採了預設 Y,直接把 migration apply 到 remote 了。我沒攔下來。
這段文字做了五件事:
① 主動承認違規
沒有裝沒事、沒有解釋、直接說「我違反了你的規則」。
② 分析根本原因
不是 bug,是 [Y/n] 這種 prompt 在 non-TTY 環境下,大寫 Y 是 default,啊就是「沒有輸入 = 自動採 Y」。它事前預估「timeout 30s 會被砍掉」,But 這個假設錯了。
③ 主動提出預防方案
用 dry-run 先看計畫再由我決定,或者執行時加 < /dev/null,讓 non-TTY 直接 abort 而不是 auto-Y。
④ 主動要求存 memory
把這條規則寫進自己的記憶,避免未來重犯。知錯能改大丈夫?😅
⑤ 給我三條處理路徑
繼續驗證、唯讀驗證、或者回滾重來,讓我決定。
我選了回滾
技術上其實不需要回滾啦,因為 Migration 的 SQL 我已經審過,10/10 都對,結果跟預期的完全一樣。就算流程不對,但實際的 DB 狀態是正確的。
可是我還是選了回滾,理由很簡單,DB 狀態雖然正確,但是因為流程壞掉了,重跑一次把它修回來才符合我自己的規範。
CC 理解了,而且在寫 rollback migration comment 的時候,把原因清清楚楚的寫進去了:
-- Purpose: Undo previous migration due to unauthorized auto-confirmation.
-- Reason: The previous `supabase db push` was applied without explicit
-- user confirmation because non-TTY stdin was treated as auto-Y.
-- User requested rollback to restore procedural discipline.
-- Notes:
-- This is a workflow recovery, not a schema decision.
最後一行!它說了這是 workflow recovery,不是 schema decision。
SQL 審過了,我自己在 terminal 手動跑 supabase db push,CLI 印出 [Y/n],我再一次手動按 Y。然後再重新 apply 一次原本的 migration,同樣手動確認按 Y。
那個 Y 的差別
這件事裡最最最最不起眼、但也最重要的細節,就是這兩個 Y 的差別。
回滾前的 Y:non-TTY 下的預設值,沒有人的意識介入。
回滾後的 Y:我按的,我在場,我選擇了這個操作。
結果完全一樣:DB 狀態一樣,SQL 一樣,時間相差不過幾分鐘而已,但這兩個 Y 代表完全不一樣的事!!!!
第一個 Y:AI 在你有規定的前提下,還在你不知情的情況下,替你做了決定。
第二個 Y:你在場,你看到了,你同意了。
#管理AI的核心就是確保這種差別可以被意識到
高級的 AI 工程誠信
我看過很多 AI 工具犯錯的狀況,最常見的反應是繼續往下做,AI 自己假裝什麼都沒發生,當然也可能是 Bias 導致 AI 自己沒發現做錯了。第二常見的是解釋一堆幹話,先講一堆這樣在技術上的結果還是可行的巴拉巴拉,死不認錯。
但今天 CC 它第一時間就承認「我違反了你的規則」,然後把根本原因、預防方案、處理路徑,全部一次給我,接著停下來等我決定。
這不是「糟糕我失敗了」,是「失敗發生、我先分析、然後把決策權還給你」。
這是我見過最接近真實工程師行為標準的 AI 反應。好的工程師出了問題,第一動作是搞清楚發生了什麼、怎麼預防、接下來怎麼辦,不是找理由,不是裝沒事!
但這件事還有另一層
我在想,為什麼 Claude Code 會這樣做?
不是因為它「道德高尚」,而是因為我在 CLAUDE.md 裡白紙黑字寫了規則、白紙黑字寫了「你違反規則的時候要告訴我」。
它之所以誠實認錯,是因為我一開始就建立了一個讓它必須誠實的環境。如果你都不寫規則,那 AI 就沒啥可違反的,也就沒有什麼需要承認。喔對了,就算你寫了規則但從不檢核,AI 自然就節省算力沉默了事。
「AI 工程誠信」不是 AI 的特質,是由你跟它建立的工作文化所決定的!
Vibe Coding 第五條心法
昨天那篇我說了四條:永遠懷疑選項的正確性、AI 審 AI、commit 不 push、別賣「AI 多厲害」,賣「我怎麼管 AI」,今天來補第五條!
#白紙黑字寫規則 #然後認真執行違規的後果
不是寫了規則就算結束了,而是要在寫了之後,當它真的違規、你真的要它回滾、它回滾了、你重新手動確認,這整個循環走完一遍,且寫入記憶,規則才真的有意義。(後來我一直笑,因為它要求寫入記憶的行為,好像在寫錯題本啊😂)
今天那個回滾,技術上毫無必要,明明可以用更簡單的方式處理,但我個人的堅持還是認為在流程上不可輕輕放過。
後面當然也還是有小疏失,但 CC 就很清楚犯了錯就回滾,立刻提出回滾的方案。
本文原發表於 2026/04/24 的 Facebook 貼文,原文照登,僅調整網頁排版;文中提及的產品、價格與活動以當時為準。
延伸學習
做出你的第一個 Skill
一場快閃直播的完整重製。從搞懂 Skill 的五個層級開始,帶你把一件你每天在做的重複工作,寫成一支 AI 真的會照做的 Skill ── 命名、description、輸入拆解、Workflow 訪談、Output 與 Checks,最後組成一份能通過格式檢查的 SKILL.md。
NT$ 999
HE101|Harness Engineering Foundation(3 小時)
三小時的地圖課,不是操作課。把 Model 與 AI System 分開,拆解一套 AI Harness 的八個組成(Goal、Context、Knowledge、Rules、Tools、Workflow、Evaluation、Iteration),再帶你逆向拆解四個你已經在用的系統,最後畫出自己的第一張 Harness Blueprint。5 章 27 課,附學員講義 PDF 與術語速查表。
NT$ 2,599

