把協作當成系統設計:我們的 CLAUDE.md 與最小改動原則


CLAUDE.md 一定要放在「專案根目錄(repository root)」而且要跟 README.mdpackage.json 同一層。

my-project/
├─ CLAUDE.md
├─ README.md
├─ package.json
├─ pnpm-lock.yaml
├─ src/
├─ docs/
└─ specs/

老實說,這套做法不是一開始就規劃好的。它是很多次多人協作、反覆改需求、處理 merge conflict,以及一次又一次看到「明明專案裡已經有現成做法,卻還是重寫一套」之後,慢慢逼出來的。

最後我得到一個很直接的結論:真正拖慢專案的,從來不是寫程式,而是不斷重來、不斷修正理解、不斷重複造輪子。

在多人協作裡,最耗能的事情通常不是技術,而是這些狀況:

  • 每個人對「應該怎麼做」的理解不同
  • 改需求時,很難快速判斷影響範圍
  • Code review 變成在討論風格、習慣,而不是問題本身
  • 同樣的提醒,要一再重複對人、對 AI 說

如果這些原則只靠默契或對話傳遞,它一定會失真。所以我選擇把它們寫成一份 CLAUDE.md,放在專案根目錄,讓它變成:人、AI、與 code review 都共同遵守的協作規則。

透過 OpenSpec,把需求先整理成結構化的規格,再用 CLAUDE.md 明確限制「可以做什麼、不能做什麼」。結果是:

  • 討論次數變少
  • 誤解發生得更早(不會寫到一半才發現方向錯了)
  • 前期溝通時間實際少了約 30~50%

最大的改變其實是一個工作順序的轉換:改需求時,我先確認「哪些不用動」,而不是急著想「要加什麼」。因為規則要求:

  • 先列出最小必要改動的檔案
  • 先確認影響範圍
  • 嚴禁順便重構或整理

這讓改需求變成一個「可預期的小調整」,而不是一次高風險的重構。

在像 Vben Admin 這種後台框架裡,「自己再寫一套」往往不是效率,而是技術債的開始。我們把「框架優先、禁止重複造輪子」寫成明確規則後:

  • 多數功能只需要調整既有組件或設定
  • 很少再出現自製 table / modal / form
  • 專案風格與維護方式更一致

因為它把很多原本「不好意思講」的事情,變成:不是你對我,而是大家一起遵守同一份規則。Review 時我不需要說「我覺得你這樣寫不太好」,我只需要說「這裡不符合 CLAUDE.md 裡的最小改動或重用原則」。

CLAUDE.md(放在專案根目錄)

# 專案開發指引

## 專案架構說明
本專案基於 **Vben Admin** 框架開發,是一個多人協作的後台管理系統。

### 🔧 框架重用原則
⚠️ **禁止重複造輪子** - Vben Admin 已提供大量開箱即用的功能和組件。

**開發前必須檢查**
1. **組件庫優先**
   - 檢查 `src/components/` 是否已有相似組件
   - 查看 Vben Admin 官方文檔確認內建功能
   - 優先使用框架提供的 hooks、utils、組件

2. **調整而非重寫**
   - 如果現有組件 80% 符合需求,調整它而不是新建
   - 使用組件的配置選項和插槽來定制
   - 通過 props 和 events 擴展功能

3. **常見已有功能**(請勿重複實現):
   - 表單驗證、表格操作、彈窗管理
   - 權限控制、路由守衛、標籤頁管理
   - 請求封裝、錯誤處理、loading 狀態
   - 主題切換、國際化、布局組件
   - 工具函數:日期處理、樹形數據、深拷貝等

**原則**:先搜尋、再調整、最後才考慮新建。減少不必要的程式碼。

---

## 開發原則
⚠️ **所有開發工作都必須遵循** `.claude/development-principles.md` 中定義的 YAGNI 原則和最小改動原則。

核心原則:
- 只修改完成任務「絕對必要」的文件
- 先分析、列出改動清單,等待確認後再執行
- 嚴禁「順便」優化、重構或改變代碼風格
- 記住:**最好的代碼是寫得最少的代碼**

詳細內容請參閱:`.claude/development-principles.md`

---

## Model Usage Strategy (Token Efficiency)

為降低 token 消耗並提升協作效率,本專案採用「模型分工」策略。

### 可使用較低成本模型的情境(如 Gemini)

僅限於 **前處理、分析、整理類任務**,包括但不限於:

- 條列既有程式碼結構
- 搜尋與彙整既有元件 / hooks / utils
- 列出可能重用的 Vben Admin 能力
- 產出「計畫修改的檔案清單」
- 產出「每個檔案預計修改內容說明」
- 將需求整理為結構化清單(不涉及設計決策)

### 強制限制

- 低成本模型 **不得**
  - 產出實際實作代碼
  - 做架構設計或重構決策
  - 新增功能或提出實作方案
  - 違反本文件中任何開發原則

- 所有輸出必須:
  - 嚴格遵守本 `CLAUDE.md` 中的規範
  - 僅作為「輔助分析結果」,而非最終決策

### 必須使用 Claude 的情境

以下情境 **必須由 Claude 處理**

- `/openspec:proposal` 的最終內容確認
- `/openspec:apply` 的實作與修改
- `/openspec:archive` 的規格收斂
- 任何涉及:
  - 實際程式碼修改
  - 設計選擇
  - Scope 判斷
  - 取捨與風險評估

### 原則

> 低成本模型負責「整理與檢索」  
> Claude 負責「判斷與執行」

不得自行切換角色或越權執行。

---

# OpenSpec Instructions

These instructions are for AI assistants working in this project.

Always open `@/openspec/AGENTS.md` when the request:
- Mentions planning or proposals (words like proposal, spec, change, plan)
- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work
- Sounds ambiguous and you need the authoritative spec before coding

Use `@/openspec/AGENTS.md` to learn:
- How to create and apply change proposals
- Spec format and conventions
- Project structure and guidelines

Keep this managed block so 'openspec update' can refresh the instructions.

.claude/development-principles.md

# 開發原則 (Development Principles)

## 專案背景
本專案基於 **Vben Admin** 框架開發,是一個多人協作的後台管理系統。

## 框架重用原則 - 禁止重複造輪子

### 開發前檢查清單
在實現任何功能前,**必須先檢查** Vben Admin 是否已提供相關功能:

1. **組件庫優先**
   - 檢查 `src/components/` 目錄
   - 查閱 Vben Admin 官方文檔
   - 搜尋現有的 hooks、utils、組件

2. **調整而非重寫**
   - 現有組件符合 80% 需求 → 調整配置
   - 使用組件的 props、slots、events 擴展
   - 避免複製貼上後修改(維護噩夢)

3. **Vben 已提供的常見功能**(請勿重複實現):
   - 表單系統:驗證、動態表單、表單聯動
   - 表格系統:排序、篩選、分頁、導出
   - 彈窗管理:Modal、Drawer 組件
   - 權限系統:路由守衛、按鈕權限、數據權限
   - 標籤頁管理:多標籤、緩存、拖拽排序
   - 請求封裝:攔截器、錯誤處理、loading
   - 布局系統:側邊欄、頂欄、主題切換
   - 工具函數:日期處理、樹形數據、深拷貝等

### 決策流程
需要實現功能

檢查 Vben 是否已有 ────→ 有 ────→ 直接使用或調整配置
    ↓ 沒有
檢查 src/components/ ───→ 有類似 ─→ 調整現有組件
    ↓ 沒有
確認無法重用 ─────────→ 新建(最後手段)

**原則:先搜尋、再調整、最後才新建。**

---

## 遵循 YAGNI (You Aren't Gonna Need It) 原則

### 1. 最小改動原則
- 只修改完成任務「絕對必要」的文件
- 不做任何「順便」的優化、重構或改進
- 不修改格式、不調整 import 順序、不改變現有代碼風格

### 2. 先分析後動手
- 先告訴我你計劃修改哪些文件
- 先告訴我每個文件具體要改什麼
- 等我確認後再開始修改

### 3. 嚴格禁止
- ❌ 修改不相關的文件
- ❌ 「順便」重構現有代碼
- ❌ 添加「可能以後用得上」的功能
- ❌ 改變現有的代碼結構

### 4. 執行步驟
- **Step 1**: 分析問題,列出最小必要改動
- **Step 2**: 向我確認改動範圍
- **Step 3**: 只修改確認過的部分
- **Step 4**: 完成後自我檢查是否有多餘改動

---

**記住:最好的代碼是寫得最少的代碼。**

---

## Model Usage Strategy (Token Efficiency)

為降低 token 消耗並提升協作效率,本專案採用「模型分工」策略。

### 可使用較低成本模型的情境(如 Gemini)

僅限於 **前處理、分析、整理類任務**,包括但不限於:

- 條列既有程式碼結構
- 搜尋與彙整既有元件 / hooks / utils
- 列出可能重用的 Vben Admin 能力
- 產出「計畫修改的檔案清單」
- 產出「每個檔案預計修改內容說明」
- 將需求整理為結構化清單(不涉及設計決策)

### 強制限制

- 低成本模型 **不得**
  - 產出實際實作代碼
  - 做架構設計或重構決策
  - 新增功能或提出實作方案
  - 違反本文件中任何開發原則

- 所有輸出必須:
  - 嚴格遵守本 `CLAUDE.md` 中的規範
  - 僅作為「輔助分析結果」,而非最終決策

### 必須使用 Claude 的情境

以下情境 **必須由 Claude 處理**

- `/openspec:proposal` 的最終內容確認
- `/openspec:apply` 的實作與修改
- `/openspec:archive` 的規格收斂
- 任何涉及:
  - 實際程式碼修改
  - 設計選擇
  - Scope 判斷
  - 取捨與風險評估

### 原則

> 低成本模型負責「整理與檢索」  
> Claude 負責「判斷與執行」

不得自行切換角色或越權執行。

在 Vben Admin 專案裡談 YAGNI 的真正意思

在一般 Vue 專案裡談 YAGNI,有時會被誤解成「先不要想那麼遠」。但在 Vben Admin 這種高度封裝、已有完整規範的後台框架裡,YAGNI 的意義其實更清楚,也更務實。因為在 Vben 裡,「未來」早就被框架替你想過一次了。

Vben Admin 不是一個空白框架,它已經幫你處理好:

  • CRUD 頁面的典型流程
  • Table / Form / Modal / Drawer 的組合方式
  • 權限、路由、選單、快取的慣用解法
  • request / loading / error handling 的一致做法
  • hooks、utils、schema 的使用模式

這些本來就來自無數真實後台專案的需求總和。所以在 Vben 專案裡:你以為你在「為未來設計」,其實很可能只是重複做了一次 Vben 已經做過的事。

你一定不陌生這些句子:

  • 「這個 Table 我自己包一個,之後比較好擴充」
  • 「這個流程先抽一層,未來可能會用到」
  • 「Vben 那個太複雜,我先寫一個簡單版」

在一般專案裡可能合理;但在 Vben 底下,幾乎都是在製造平行系統。結果通常是:同一種功能有兩套寫法、新人不知道該用哪一套、AI 也搞不清楚該遵循哪個 pattern、後期維護成本急速上升。

把話講白一點:Vben 的設計哲學,本身就很 YAGNI。它不是要你每次都發明新架構、每個需求都客製到極致,而是要你:在既有規範內解決 80~90% 的問題,真的不行,再「最小幅度」擴充。


來源:https://uneven-tarantula-5e0.notion.site/CLAUDE-md-vben-admin-2e148a1740bf807f9ef5f1617f3b9e74