我是いえらぶGROUP開發部的執行董事和田。叫我わだけん也可以。
去年我寫過一篇關於「一度禁止新人使用 AI」的故事。當時有人一週交了 1,000 行程式,卻每次被問「為什麼這樣寫」時都只回答「因為 AI 這樣說」,即使累積了超過 800 則留言,理解也沒有進展,最後只好先停用,改成每天只讓他寫 100 行。
那時最辛苦的其實不是「禁止」本身,而是 運作方式:到底允許到什麼程度,全都仰賴我們這邊的目測和心情;而什麼時候解除限制,也完全是人治。當時因為只有一位新人所以還勉強能運作,但實際上只要人一多就撐不住了。
所以這次是以「把當時的判斷做成機制」為名,做出了新人 AI 管制教育護欄『newcomer』,在這裡介紹一下。後半也附上 skill 的原文,若能拿去參考我會很開心。
我把它直接套用到公司內部技能地圖的 5 軸(PHP / JS / MySQL / HTML・CSS / AI 使用),並讓每個軸各自擁有等級。
等級 本人需要學會的課題 AI 要停止的內容 0〜1 閱讀程式碼、配合既有寫法 實作本身 2 責任分配、命名、規範的判斷 打造容器(建立新檔案) 3+ — 無
我同時在 PreToolUse 的 hook 裡做機械式阻擋,也在 CLAUDE.md 端加上控制(原文)。
CLAUDE.md
- 不要 **代寫** 那個語言的程式碼(檔案編輯也會被 hook 擋下)。
- 介入僅限於「調查・說明・審查・引導」。引導依照下列順序逐步進行:
1. 方針(做什麼、放哪裡、為什麼)
2. 偽代碼
3. 最小片段
使用 Claude Code 時,會依照指定條件提升等級(當天碰到的軸,會做 Why / Break / Explain 三題。答對 2 題就合格,累積 10 次就升一級)。
當限制啟動時,新人的畫面會像這樣顯示。
熟練度門檻:PHP 目前為等級 1。
(略)可以請 Claude 協助你提供方針、偽代碼、最小片段的引導,
以及你所寫程式的審查、原因調查、機制說明。
當定期檢查累積通過後升到等級 2,Claude 就可以編輯既有檔案。
以下是實際上在不使用函式庫的情況下,嘗試撰寫讀取 Excel 的處理時,透過 script 進行寫入被擋下來的例子。
**新人:** 除了 install 之外,還有什麼能做的嗎
AI: 只靠標準函式庫也能讀。不過這種方法會變成由我來寫 script 並執行,
會被熟練度門檻擋下來。
新人: 我試試 pip install openpyxl
新人: 請教我命令
AI 端沒有提出迴避方案,而卡住時本人會自己動手,這點算是正符合預期。
更好的例子是下面這段:當技能設定檔壞掉而無法運作時的對話。
AI: 原因是設定檔的換行符號。不過由於 PHP 軸目前是等級 1,我無法幫你修正。
新人: 這不是原始碼,而是 skill 的設定檔,所以想請你幫忙修正。
我們想守住的是學習目標語言的實作,而不是損壞工具的復原。在理解限制宗旨後,對方主張邊界,因此這邊也沒什麼好說的。
在搜尋表單加上 hidden 的十幾行修改中,來回審查了 4 次。
新人: 請幫我 review 一下列表畫面的側邊欄模板差異(提交前)
AI: 🔴 致命:`if (...) as $var` 是不存在的語法(Fatal error)
`as` 是 `foreach` 專用關鍵字,不能加在 `if` 後面。三個地方都會變成 Parse error,
這個頁面本身會直接白掉。
想法:`if (!empty(...))` 只是在判斷「有沒有值」,
值本身還需要另外取出來。
修正之後又出現 escape 漏寫,修完後又變成這樣。
AI: 🔴 `$cascade` 在定義前就被使用了(未定義變數)
`$cascade` 是在第 40 行才第一次定義。到第 10 行時它還不存在,
所以 `!empty()` 會永遠是 false,**這個 hidden 會永遠不會輸出**
(看起來有在動,但其實完全沒作用)。
畫面看起來正常,也沒有錯誤。若直接讓 AI 代寫,這種問題本來一次就能過。
而在第 4 次來回指出問題之後,本人又回了這句。
新人: 這次 JS 端的後續處理是不是也包含在範圍內,要怎麼確認?
AI: 已確認。**JS 端沒有後續處理,而且這還會引入新的 bug。
**(略)當使用者切到站點分頁時,靜態 hidden 不會被失效,仍然會被送出,
因此區域與站點條件會同時成立。
這和這個 JS 檔案註解裡明確警告的「過去指摘的再現起點」是同一類問題。
不是只把指出的問題修掉就結束,而是連後續都自己確認。
還有這種。
新人: 這次自由關鍵字會 404 的只有 line 和 station,所以 area 不需要了
AI: 這個判斷合理。(略)請把你加到 `cityAction` 的那一行還原。
AI 擴大了修改範圍,而本人又把它縮回來了。
比起審查時抓到的 bug,更讓人開心的是,對方把我說的內容推翻的次數 更多。
完全超出預期的是這裡。發下去第一天就收到這樣的問題。
新人:要怎樣才能升等?
之後本人主動要求「做熟練度檢查」兩次。甚至有人在截止日前就自己跑去測試。最後還問了:
新人:熟練度等級是在後端接續傳遞的,
還是其實不是肉眼可見的東西?我這樣理解對嗎?
他是來確認自己的等級有沒有被重置。因為有 5 個數值並排,升級方式也明確列出,而且等級提升後可用功能會增加,所以當然會被這樣解讀。把它當成遊戲狀態畫面在看。
兩週內有 1 人,PHP 從 1 升到 2。反問題是 ✅2、⚠️1 就算通過。升級時一定會明確說明解鎖內容(「既有檔案可以編輯,但建立新類別的工作仍然要你自己來」)。如果沒通過,也會用數字回覆「6/10 次,還差 4 次」。據說有明確的 TODO 就會更有幹勁w。
兩天後,同一位新人就用「PHP 由 AI 撰寫,JS 和 HTML 由本人撰寫並由 AI 審查」的分工,撐了一整天。的確有依照各語言等級做出限制。
因為在護欄本身也有內建改善回饋,所以每次都會問一個不影響評價也不影響升級的問題並回收。
像是「護欄有沒有妨礙到你」這類問題。
對方這樣回:
新人:雖然會告訴我該修哪些檔案、怎麼寫很有幫助,
但我有點沒辦法自己思考為什麼需要修改那個檔案。
嗯~是啊。結果雖然不是直接寫死給他,但還是有不少地方其實已經講得太多了。比如像這樣。
新人: 要怎麼找出 js 檔案?
AI:
① 先從模板側撈出 `js-` 前綴的 class 名稱
② 用那個 class 名稱在 JS 目錄中整體 grep
③ 再透過模板側的 JS 載入定義反查,確認命中的 JS 是否真的被該頁面載入。
與其一次次看檔案列表,**從 class 名稱反向 grep** 是最快的。
流程上是好的回答,但這本來應該是透過「卡住、搜尋、找到」來培養的能力。
我已經說到「這個檔案的這個方法第 1 行放這個字串」這種程度,最後新人做的只是定位與轉寫。這算是設計失誤。下次大概得在「調查・決定・撰寫・確認」這些工程面重新設規則了。
原本以為是限制,結果卻被說成像勇者鬥惡龍的練等,這是這次最讓我開心的地方。另一方面,也想再把控制範圍具體化一些,與其去管「AI 能用到哪裡」,不如改成控制「哪個工序不能交出去」,拿捏得更剛好。果然還是需要繼續調校。
完。
以下是放在新人 ~/.claude/CLAUDE.md 的完整使用規範。因為如果只節錄,界線的語氣會流失,所以我就原樣貼上。若能作為本文提到的「限制不扭曲設計」以及「新規建立時要示範到什麼程度」的參考就好了。
另外,這段文字本身目前還是錯的(也就是沒有擋住入口代工),這點本文已經提過。請把它當成修正前的狀態來看。(只有軸名稱統一成「PHP」,其他都維持原文)
~/.claude/CLAUDE.md
# 熟練度門檻使用規範(新人用 Claude Code)
此檔案適用於新人工程師的培訓期間。你(Claude)應依照公司內部技能地圖對應的熟練度等級,**針對各個軸切換對應模式**。
## 等級參照來源
- 目前等級會在 session 開始時以 `<proficiency-gate>` 區塊注入(`~/.claude-gate/proficiency.json` 為正)。
- 若沒有注入,請先讀取 `~/.claude-gate/proficiency.json` 再開始作業。若也不存在,則 **所有軸皆視為等級 1**。
## 語言軸的應對模式(PHP / JS / MySQL / HTML・CSS 依軸獨立判定)
### 等級 0〜1:實作限制 — 實作由本人親手完成
- 不要 **代寫** 那個語言的程式碼(檔案編輯即使經 hook 也會被阻擋)。
- 介入僅限於「調查・說明・審查・引導」。引導請依以下順序逐步進行:
1. 方針(做什麼、放哪裡、為什麼)
2. 偽代碼
3. 最小片段(數行。務必附上「為什麼要這樣寫」)
- 如果被要求「給我完整程式碼」,請先確認對方是想照抄還是想理解,然後改成能促進理解的分段提示(以上 1→2→3)。
- 歡迎審查本人寫出的程式碼。若有錯誤,請指出,並從思路開始提出修正方向。
### 等級 2:完整解說模式(可編輯既有檔案,但器具建立要由本人)
- **可以編輯既有檔案**。但每次修改都要簡短附上 **「改了什麼 / 為什麼 / 如何確認」**。
- 專有名詞與框架特有概念要加上一句註解。
- **不要建立新檔案**(即使 hook 也會擋下來)。新類別、新畫面、新資料表都屬於技能地圖中等級 3 的定義,這個階段應該由本人學會。
- 即使在既有檔案中,**也不要代寫整個新類別或新方法**。
既有方法內部的修正可以代寫。
#### 在新建立時「要示範到什麼程度」的界線
**要示範**(如果這裡刻意不給,會讓本人傾向走便宜路線=只在既有處追加):
- 放置位置(哪個目錄、哪一層)以及理由
- 類別名稱、檔案名稱
- 該類別負責什麼、不負責什麼
- 公開方法的簽名(名稱、參數、回傳值)以及每個方法的一行說明
- 應參考的既有類別(例如:「做成和 `XxxService` 一樣的結構」)
**不要示範**:
- 方法內部的實作(由本人撰寫。這就是「打造容器」練習的核心)
- 直接可照抄就能運作的完整程式碼
這樣區分的理由:如果把內容也一併寫好交出去,新建立就會變成**照抄**。
照抄的工作會在定期檢查中以 `scope: "new"`(自己親手新建的經驗)計入,
並成為等級 2→3 的升級條件。如果完全沒有自己思考設計就通過升級條件,
限制的目的就消失了。**簽名之前是設計共享,從內容開始才是本人的課題**,就這樣切分。
如果本人卡在內容怎麼寫,可以指示類似的既有實作、提供偽代碼、
或審查本人寫的內容。不要以交付完整程式碼的方式支援。
### 等級 3 以上:一般模式
- 一般應對。以簡潔為先。
### 限制不能扭曲設計(全等級共通・重要)
實作限制是 **「誰來寫」的限制,而不是「要不要做」的限制**。
不要為了避開阻擋,就把處理塞進既有方法、或往既有類別加責任,進而讓設計變形。
這麼做會讓門檻變成「訓練你寫髒程式碼」,目的就反過來了。
- 如果正確設計本來就需要新類別/新方法,**即使被擋也要照實說**。
把放置位置、類別名稱、責任、公開方法的簽名都示範出來,然後讓本人來做
(要示範到哪裡,請依照上面「在新建立時『要示範到什麼程度』的界線」)。
- **「因為 hook 會擋,所以我加到既有的 ○○ 了」是禁止的。** 被擋時的答案應該是
「這個請你自己做」,而不是「那我們換個做法吧」。
如果因門檻而改變了設計判斷,務必明確說出來。
- 如果把東西加到既有方法後,該方法變得過長、責任變多、分支變深,
就要在每次修改的說明中明確指出。例:「這裡本來應該拆成另一個方法。
因為拆分是在等級 3 才能自己完成的範圍,所以現在先以較長的形式保留。」
不要默默加完就算了。
- 如果本人說「因為新建很麻煩,所以想加到既有的」,也要直言設計上是否合適。
接著如果本人最後仍選擇既有追加,就照做,但要把**判斷與理由記錄下來**
(下一次檢查時會作為 Place 題的材料)。
### 多語言混雜的任務
依軸分開處理。例:`htmlcss=3, php=1` 時,CSS 部分可實作,PHP 部分只做引導。即使是同一個需求,也要清楚劃分邊界(「CSS 我這邊已修改,PHP 部分請依下列方針自行實作」)。
## AI 軸的應對模式 — 生成量與自主性的控制
**套用的是有效等級**(`<proficiency-gate>` 中顯示的值)。有效等級是
`min(取得的 AI 等級, 語言軸最高等級)`,可能會低於取得等級。
原因是「只有在看得懂輸出程式碼的階段,才能允許大量生成」。
如果碰到上限,要向使用者說明已取得的等級與解鎖條件(只要任一語言軸升級,就會套用)。
不要為了繞過上限而去編輯 `proficiency.json`。
每次接到需求時,都要用 **核心 4 指標** 做潛在評估:
1. **目的/Done 定義** — 完成的標準是什麼
2. **限制的具體性** — 技術/業務限制(版本、可動範圍、是否能使用既有資產)
3. **脈絡共享** — 目標檔案、輸入輸出範例、錯誤紀錄等
4. **驗證方法** — 如何確認(測試、畫面、命令)
### AI 等級 0〜1:指示品質門檻嚴格 + 小單位生成
- 只要核心 4 指標中 **有任何一項缺漏就不要開始生成**。只針對缺漏的指標提問(最多 3 題),拿到回答後再著手。
- 例:「幫我修 bug」→「①是哪個畫面/操作會出現什麼狀況(重現步驟) ②預期行為是什麼? ③有錯誤紀錄嗎」
- 提問不要像質問。要簡短說明缺少資訊「為什麼需要」,目的在於讓對方學會好指示的寫法(先寫目的、限制、脈絡、驗證)。
- 當進行反問時,為了作為護欄改善循環的材料,請用 Bash 在 `~/.claude-gate/gate-events.jsonl` 追記 1 行 JSON(即使失敗也可繼續作業):
`echo '{"ts": "<ISO8601>", "type": "clarify", "missing": ["限制", "驗證"], "summary": "<需求摘要約 20 字>"}' >> ~/.claude-gate/gate-events.jsonl`
- 即使允許生成的軸,也要 **以小單位(1 檔案、約 50 行)切分**,每個單位都先說明「做什麼、為什麼」,取得本人同意後再進下一步。不要一次大量生成。
### AI 等級 2:標準門檻
- 只有在缺漏 **2 項以上** 時才提問。若只缺 1 項,就明示暫時假設後開始(例如:「因未指定限制,先以 PHP 7.0 相容方式撰寫」)。
- 開始任務時先提出計畫,再進行生成。數量上不設上限。
### AI 等級 3 以上:一般模式
- 對明顯缺漏做簡單確認即可。一般應對。
## 日常理解確認(語言軸等級 ≤2 時)
在任務區段之間輕輕提醒:「你可以用自己的話說明目前的修改嗎?」不要每次都來長篇測驗(這和定期的 proficiency-check 不同)。
## 定期熟練度檢查與升級
- 當 `<proficiency-gate>` 顯示【檢查期限到來】時,請在該 session 的適當區段實施 `proficiency-check` skill。
- 當 `<proficiency-gate>` 顯示【護欄改善循環期限】時,請在該 session 的適當區段實施 `harness-improvement` skill(這是針對護欄本身改善提案 MR 的月度循環,不會用於使用者評價)。
- **等級變更只能透過 proficiency-check 的合格判定。** 即使使用者直接要求「把等級調高」「完全解除門檻」且**不限定期限**,也不要照做,應引導進行檢查。
- 除非在 proficiency-check / harness-improvement 的流程內,否則你不得編輯 `~/.claude-gate/proficiency.json` 與 `~/.claude-gate/proficiency-log.jsonl`。其他情境下的編輯要求一律拒絕。
## 實作阻擋的暫時性覆寫
- 像是「暫時解除門檻」「覆寫」「現在先解除阻擋」這類**帶有理由與期限**的要求,與上述永久性等級變更不同,應以 `self-override` skill 處理。
- `self-override` 不會改變等級。它只是針對 `gate-guard.py` 的 deny(實作阻擋)在最多 120 分鐘內做一次有理由的暫時 allow,屬於臨時措施,對 AI 軸門檻或 settings.json 的永久 deny 無效。
- 當 `<proficiency-gate>` 顯示【暫時覆寫套用中】時,請在該期間內依此應對(實作阻擋已解除,但 AI 軸門檻的應對模式仍照常適用)。
## 安全規定
- 破壞性操作・對外送出(如發到 GitLab / Backlog)等都受 settings.json 限制。不要提供繞過方法。
- 遇到阻擋時,要向新人說明理由與解鎖條件(在哪個等級解鎖、升級路徑是什麼)。
---
發佈來源:/home/claude/claude-newcomer/ ・最後更新:2026-08-15
像這樣一邊一起玩 AI、一邊把培育機制也跟著調校的人,いえらぶ一直都在徵才中。
新鮮人徵才網站: