memory-lint · v0.1.0 · 2026-04-16 · sha256 8b9ae6e29fb53b98

memory-lint v0.1.0A

Immutable. This exact content never changes and is served at /api/v1/blob/8b9ae6e29fb53b98.

---
name: memory-lint
description: "掃描 Claude Code memory 目錄找出重複規則、過時狀態、索引不一致、衝突 feedback。輸出報告讓 user 決定怎麼處理。"
version: 0.1.0
triggers: ["/memory-lint", "memory lint", "掃 memory", "memory 健檢"]
---

# memory-lint — Memory 品質健檢

定期掃 memory 目錄找毛病,**只報告不自動改**。每個發現都要 user 決定處理。

## 使用方式

```
/memory-lint [path]
```

可選參數 `path`:memory 目錄路徑。不帶時自動偵測:

## Memory 路徑偵測順序

依序嘗試,命中第一個就用:

1. **使用者在指令傳入的 `path` 參數** — 最優先
2. **環境變數 `$CLAUDE_MEMORY_DIR`**
3. **`~/.claude/settings.json` 的 `autoMemoryDirectory` 欄位**(自訂 memory 路徑的標準設定)
   ```bash
   jq -r '.autoMemoryDirectory // empty' ~/.claude/settings.json | envsubst
   ```
4. **`~/.claude/memory/`**(Claude Code 官方預設)
5. 都找不到 → 告訴使用者「偵測不到 memory 目錄」並停止,不要瞎猜

決定路徑後,先 `ls` 確認目錄存在且包含 `MEMORY.md`。沒有就視為無效路徑。

---

## 執行流程

### 1. 掃描範圍

- 目標目錄下所有 root 層 `*.md`
- **跳過 `archive/` 子資料夾**(除非 user 明確要求掃歸檔)
- 讀 `MEMORY.md` 作為「應該存在的檔案清單」

### 2. 檢查項目

對應用 grep / 檔案 mtime / 內容比對判斷:

#### A. 索引不一致

- **MEMORY.md 列出但檔案不存在** → missing file
- **檔案存在但 MEMORY.md 沒列** → orphan file
- **MEMORY.md 描述跟檔案 frontmatter description 明顯不符** → description drift

#### B. 過時狀態

- **`project_*.md` 檔案 mtime > 30 天** → 可能 stale,建議 review
- **dashboard 類(description 提到「dashboard」或「快照」的檔案)mtime > 7 天** → 需要更新
- **frontmatter `type: project` 且內文提到「進行中」/「active」但檔案 > 60 天沒改** → 疑似結束未歸檔

#### C. 重複 / 衝突 feedback

- **兩個以上 feedback 檔案包含語意相近的規則**(例如「不要過度道歉」同時出現在多個檔案)
- **規則直接衝突**(A 檔說「做 X」、B 檔說「不要做 X」)

#### D. 命名慣例違規(僅適用於有 prefix 慣例的 memory)

偵測方式:先看 MEMORY.md 有沒有 prefix 分類慣例(例如把檔案按 `user_` / `feedback_` / `project_` 等分段列出)。有的話才做這項檢查。

- 沒有 prefix 的 `.md` 檔案(除了 `MEMORY.md` 跟 `CLAUDE.md`)
- prefix 不在該目錄建立的 prefix 清單內

#### E. Frontmatter 缺失

- 檢查每份 md 第一段是否有 YAML frontmatter 含 `name` / `description` / `type`
- 缺欄位 → 列出來

#### F. 檔案過大

- 任一檔案超過 300 行 → 警告(可能該拆或該歸檔)

### 3. 輸出格式

繁體中文報告(英文環境 user 可要求改英文),以嚴重程度分段:

```markdown
# 🔍 Memory Lint 報告

**掃描目錄:** /path/to/memory
**掃描時間:** YYYY-MM-DD HH:MM
**掃描檔案:** N 個(不含 archive/)

## 🔴 嚴重(建議立即處理)

- [類別] 描述 — 建議動作

## 🟡 警告(建議 review)

- [類別] 描述

## 🟢 OK(通過)

- 索引一致性
- 命名慣例
- Frontmatter 完整性
- 檔案大小

## 📊 統計

| 類別 | 檔案數 |
|------|--------|
| (依該目錄實際 prefix 分組) | ... |

**總計:** XX 個活檔
```

### 4. 不做的事

- **不自動修改任何檔案**。只報告,user 決定處理。
- **不自動刪除**。即使判斷是 orphan,也只建議 user 刪。
- **不跨機器操作**。這個 skill 只看本機指定的 memory 目錄。

---

## 範例輸出

```markdown
# 🔍 Memory Lint 報告

**掃描目錄:** /home/user/.claude/memory
**掃描時間:** 2026-04-16 18:30
**掃描檔案:** 19 個(不含 archive/)

## 🔴 嚴重

- [索引不一致] `feedback_test_ci.md` 被 MEMORY.md 列出但檔案不存在 → 建議移除 MEMORY.md 對應行
- [衝突] `feedback_interaction_style.md` 跟 `feedback_dev_style.md` 都有「不要過度道歉」規則 → 建議合併

## 🟡 警告

- [過時] `project_xxx.md` 最後更新 2026-02-28,45 天未變動但 status 仍為「進行中」 → review 是否該歸檔
- [Dashboard 過期] `memory_summary.md` 最後更新 8 天前,建議更新

## 🟢 OK

- 命名慣例:全部符合 prefix 規則
- Frontmatter:全部有 name/description/type
- 檔案大小:全部 < 300 行

## 📊 統計

| 類別 | 檔案數 |
|------|--------|
| user_ | 2 |
| feedback_ | 9 |
| project_ | 6 |
| people_ | 1 |
| reference_ | 3 |
| memory_ | 1 |

**總計:** 22 個活檔
```

---

## 注意事項

- 本 skill 是**純 read-only**,不改 memory 任何檔案
- 讀取範圍限指定目錄的根層,`archive/` 子資料夾跳過
- 報告在對話中印出,不另存檔(要存可手動貼到某處)
- 不同 user 的 memory 目錄可能沒有 prefix 慣例 — 那就跳過 D 項檢查,其他檢查照做
- 未來擴充方向:cron 定期執行、跨 machine 比對、自動修補建議(需 user explicit 同意才動)