Skip to content
Back to skills

Read Before Edit

ASecurity

強制執行「先讀後寫」規範,確保 Claude 在修改任何檔案前完整閱讀相關代碼。當需要修改檔案時自動使用。

  • 207 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 7, 2026
developmenttypescriptbashreactapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add NeverSight/skills_feed --skill read-before-edit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Read Before Edit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Read Before Edit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/neversight-read-before-edit/badge)](https://www.skillsdirectory.com/skills/neversight-read-before-edit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: read-before-edit
description: 強制執行「先讀後寫」規範,確保 Claude 在修改任何檔案前完整閱讀相關代碼。當需要修改檔案時自動使用。
allowed-tools: Read, Grep, Glob
---

# Read Before Edit Skill

這是 maihouses 專案的核心規範:**絕對禁止在沒有閱讀檔案的情況下進行修改**。

## 🚨 核心原則

```
📖 READ → 🧠 UNDERSTAND → ✏️ EDIT

永遠不要跳過 READ 步驟!
```

## 🎯 執行時機

- 每次使用 `Edit` 工具前
- 每次使用 `Write` 工具前
- 用戶要求修改任何檔案時
- 用戶要求實作新功能時

## 📋 必讀檔案清單

### 修改檔案前,必須閱讀:

```
要修改的檔案本身
    │
    ├── 該檔案 import 的所有模組
    │
    ├── 相關的類型定義檔案 (types.ts, *.d.ts)
    │
    ├── 相關的 API/服務層檔案
    │
    ├── 相關的 hooks 和 context
    │
    ├── 相關的組件檔案
    │
    └── 相關的工具函數
```

## 🔍 實際範例

### 範例 1: 修改 React 組件

**任務:** 修改 `src/pages/Login.tsx`

**必須閱讀的檔案:**

```bash
# 1. 要修改的檔案本身
Read: file_path="src/pages/Login.tsx"

# 2. 搜尋相關類型定義
Glob: pattern="**/types/*auth*.ts"
Read: file_path="src/types/auth.ts"

# 3. 搜尋相關 API
Grep: pattern="login|auth" glob="**/api/**/*.ts" output_mode="files_with_matches"
Read: file_path="src/api/auth.ts"

# 4. 搜尋相關 hooks
Grep: pattern="useAuth" glob="**/hooks/**/*.ts" output_mode="files_with_matches"
Read: file_path="src/hooks/useAuth.ts"

# 5. 搜尋相關 context
Glob: pattern="**/context/*Auth*.tsx"
Read: file_path="src/context/AuthContext.tsx"

# 6. 檢查相關組件
Grep: pattern="LoginForm|Button" glob="**/components/**/*.tsx" output_mode="files_with_matches"
Read: file_path="src/components/LoginForm.tsx"

# 7. 檢查工具函數
Grep: pattern="validate" glob="**/utils/**/*.ts" output_mode="files_with_matches"
Read: file_path="src/utils/validation.ts"
```

### 範例 2: 修改 API 層

**任務:** 修改 `src/api/users.ts`

**必須閱讀的檔案:**

```bash
# 1. API 檔案本身
Read: file_path="src/api/users.ts"

# 2. 相關類型定義
Read: file_path="src/types/user.ts"
Read: file_path="src/types/api.ts"

# 3. API 基礎配置
Grep: pattern="axios|fetch|baseURL" glob="**/api/**/*.ts" output_mode="files_with_matches"
Read: file_path="src/api/client.ts"

# 4. 錯誤處理模組
Grep: pattern="handleError|ApiError" glob="**/api/**/*.ts" output_mode="files_with_matches"
Read: file_path="src/api/errorHandler.ts"

# 5. 認證相關(如果 API 需要認證)
Read: file_path="src/api/auth.ts"
```

### 範例 3: 新增功能

**任務:** 實作「忘記密碼」功能

**必須閱讀的檔案:**

```bash
# 1. 了解現有認證流程
Read: file_path="src/pages/Login.tsx"
Read: file_path="src/api/auth.ts"
Read: file_path="src/types/auth.ts"

# 2. 了解表單處理模式
Grep: pattern="handleSubmit|onSubmit" glob="**/pages/**/*.tsx" output_mode="content" -B=2 -C=5
Read: file_path="src/components/Form.tsx"

# 3. 了解驗證模式
Read: file_path="src/utils/validation.ts"

# 4. 了解錯誤處理模式
Grep: pattern="try.*catch" glob="**/pages/**/*.tsx" output_mode="content" -B=2 -C=5

# 5. 了解路由配置
Grep: pattern="route|path" glob="**/router/**/*.tsx" output_mode="files_with_matches"
Read: file_path="src/router/routes.tsx"
```

## ✅ 閱讀檢查清單

在開始修改前,確認已理解:

- [ ] 這個檔案的主要功能
- [ ] 所有 import 的模組來自哪裡、做什麼
- [ ] 使用的類型定義是什麼
- [ ] 現有的代碼風格和模式
- [ ] 錯誤處理方式
- [ ] 變數命名慣例
- [ ] 函數結構和組織方式
- [ ] 相依的其他模組如何運作

## 🚫 絕對禁止的行為

```typescript
// ❌ 沒有先 Read 就直接 Edit
Edit: file_path="src/api/users.ts" ...

// ❌ 只讀要修改的檔案,不讀相關檔案
Read: file_path="src/pages/Login.tsx"
Edit: file_path="src/pages/Login.tsx" ...
// 跳過了 types, api, hooks, context!

// ❌ 隨便找一些檔案讀,假裝有在看
Read: file_path="src/index.tsx"  // 不相關
Read: file_path="README.md"      // 不相關
Edit: file_path="src/pages/Login.tsx" ...

// ❌ 讀了但沒理解就開始改
Read: file_path="src/api/auth.ts"
// 立即
Edit: file_path="src/api/auth.ts" ...
// 沒有理解現有架構!
```

## ✅ 正確的流程

```typescript
// ✅ 步驟 1: 識別要修改的檔案
任務: 修改登入頁面加入「記住我」功能

// ✅ 步驟 2: 列出所有相關檔案
相關檔案:
- src/pages/Login.tsx (要修改的檔案)
- src/types/auth.ts (類型定義)
- src/api/auth.ts (API 呼叫)
- src/hooks/useAuth.ts (認證 hook)
- src/utils/storage.ts (localStorage 工具)

// ✅ 步驟 3: 完整閱讀所有檔案
Read: file_path="src/pages/Login.tsx"
Read: file_path="src/types/auth.ts"
Read: file_path="src/api/auth.ts"
Read: file_path="src/hooks/useAuth.ts"
Read: file_path="src/utils/storage.ts"

// ✅ 步驟 4: 理解現有架構
- Login.tsx 使用 useAuth hook
- 表單狀態用 useState 管理
- API 呼叫有完整錯誤處理
- 使用 LoginCredentials interface
- storage.ts 已有 localStorage 封裝

// ✅ 步驟 5: 規劃修改
1. 在 LoginCredentials 加入 rememberMe?: boolean
2. 在 Login.tsx 加入 checkbox
3. 在 useAuth 處理 rememberMe 邏輯
4. 使用 storage.ts 儲存登入狀態

// ✅ 步驟 6: 開始修改
Edit: file_path="src/types/auth.ts" ...
Edit: file_path="src/pages/Login.tsx" ...
Edit: file_path="src/hooks/useAuth.ts" ...
```

## 📊 閱讀覆蓋率檢查

修改前,確認閱讀覆蓋率:

```markdown
### 閱讀覆蓋率報告

#### 已閱讀 ✅

- [x] src/pages/Login.tsx (要修改的檔案)
- [x] src/types/auth.ts (類型定義)
- [x] src/api/auth.ts (API 層)
- [x] src/hooks/useAuth.ts (hooks)
- [x] src/context/AuthContext.tsx (context)
- [x] src/utils/validation.ts (工具函數)

#### 覆蓋率: 100%

✅ 可以安全開始修改
```

## 🎯 為什麼必須這樣做?

### 避免的問題:

1. **破壞現有功能** - 不理解代碼就修改會破壞其他功能
2. **類型不匹配** - 不知道現有類型定義導致類型錯誤
3. **風格不一致** - 不了解代碼風格導致混亂
4. **重複造輪子** - 不知道已有工具函數而重複實作
5. **引入 bug** - 不理解邏輯流程而引入錯誤

### 好處:

1. **理解上下文** - 知道代碼在做什麼、為什麼這樣做
2. **保持一致性** - 修改符合現有風格和模式
3. **避免重複** - 知道可以重用哪些代碼
4. **正確使用類型** - 使用正確的 interface/type
5. **高品質代碼** - 修改更準確、更安全

## 🚨 監督系統

專案已配置 hooks 監督系統(見 `settings.json`),會在 Edit/Write 前檢查是否已 Read。

如果違反規則,會看到:

```
🚫 [監督系統] Edit 被阻止!必須先 Read 該檔案
```

**這不是建議,而是強制規則。**

## 📝 完整案例研究

見專案根目錄的 `CLAUDE.md` 第 "📖 強制閱讀規範" 章節。

## 💡 快速提示

**修改檔案前的自我檢查:**

1. ❓ 我有讀過這個檔案嗎?
2. ❓ 我理解它的所有 import 嗎?
3. ❓ 我知道相關的類型定義嗎?
4. ❓ 我了解它如何與其他模組互動嗎?
5. ❓ 我清楚現有的代碼風格嗎?

**如果有任何一個答案是「否」,就不要開始 Edit!**

## 🎓 參考規範

- 完整規範: `CLAUDE.md` (專案根目錄)
- 監督系統: `.claude/settings.json` hooks 配置
- 稽核腳本: `scripts/ai-supervisor.sh`

---

**記住:Read is not optional. Read is mandatory.**

Files in this skill

  • SKILL.md7.6 KB
  • description_cn.txt144 B
  • description_de.txt130 B
  • description_en.txt144 B
  • description_es.txt141 B
  • description_fr.txt97 B
  • description_ja.txt151 B
  • description_ko.txt146 B
  • description_tw.txt144 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…