AI 工作區自動清掃:四層架構讓你的 Agent 不再被自己的垃圾淹沒
AI Agent 每天產生大量暫存檔、日誌、截圖。不清理就會拖慢效能、吃光空間。這篇介紹一套四層自動維護系統——從每小時的健康檢查到每月的深度審計,讓 workspace 永遠保持乾淨。
AI 工作區自動清掃:四層架構讓你的 Agent 不再被自己的垃圾淹沒
這套系統從實際管理一個 100+ 檔案每天變動、20+ 專案同時進行的 AI 工作區中誕生。每一條清理規則都是因為「某天早上發現磁碟空間又少了 2GB」才被加進來的。
你有一個 AI Agent 在幫你做事。很好。
過了一個月,你打開它的工作目錄:
- 47 個已經沒用的暫存檔
- 230 個排程日誌,最舊的從上個月就在了
- 15 張截圖,你早就不記得是哪個任務產生的
- 記憶檔案膨脹到 30 幾個,一半內容已經過時
你花了 20 分鐘手動清理。第二天,一樣的事情又發生了。
這不是偶爾的問題,是結構性的問題。 AI Agent 的工作區天生會膨脹——每個 session 產生暫存檔,每個排程任務留下日誌,每個媒體任務產出截圖。沒有自動清理機制,就是在跟熵做一場必輸的仗。
核心理念:腳本做苦力,AI 做判斷

在設計這套系統之前,我們嘗試過「全部交給 AI 清理」。結果:
| 方法 | 成本 | 問題 |
|---|---|---|
| 全部人工清理 | $0,但花時間 | 每天 10-20 分鐘,容易忘記 |
| 全部交給 AI | 每次 $0.10-0.50 | 95% 的清理工作不需要判斷力 |
| 腳本 + AI 混合 | 每次 ~$0.01 | 腳本處理確定性工作,AI 只在需要判斷時介入 |
核心原則很簡單:
「超過 3 天的暫存檔就刪」不需要 AI 判斷——shell script 就夠了。 「這兩份記憶筆記內容有 80% 重複,要合併嗎?」才需要 AI。
四層架構

graph TD
T0["⏱ Tier 0:每小時健康檢查<br/>純 Shell・$0"] --> T1["🧹 Tier 1:每日清掃<br/>純 Shell・$0"]
T1 --> T2["🔍 Tier 2:每週掃描<br/>Shell + AI・~$0.01"]
T2 --> T3["📋 Tier 3:每月審計<br/>Shell + AI・~$0.05"]
style T0 fill:#2A2118,stroke:#CBA000,color:#FAF6EE
style T1 fill:#4A3828,stroke:#CBA000,color:#FAF6EE
style T2 fill:#8A6830,stroke:#CBA000,color:#FAF6EE
style T3 fill:#CBA000,stroke:#2A2118,color:#2A2118
| Tier | 頻率 | 執行者 | 成本 | 做什麼 |
|---|---|---|---|---|
| 0 | 每小時 | Shell | $0 | 健康檢查、哨兵監控、錯誤去重 |
| 1 | 每天 | Shell | $0 | 刪暫存檔、清媒體、清日誌 |
| 2 | 每週 | Shell + AI | ~$0.01 | 主題檔精煉、筆記壓縮 |
| 3 | 每月 | Shell + AI | ~$0.05 | 環境清單比對、複雜度審計 |
越往上走,頻率越低、判斷力要求越高、成本越貴。這就是為什麼不能全用 AI——如果連「刪 3 天前的暫存檔」都用 AI,一個月下來的 token 費可能比磁碟空間還貴。
Tier 0:每小時健康檢查
這是整個系統的心跳。它不清理任何東西,只做三件事:
1. 哨兵檔案檢查

每個 Tier 執行完畢後,都會更新一個「哨兵檔案」:
# Tier 1 完成時寫入
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) OK" > .last-daily-ok
# Tier 0 檢查哨兵
last_daily=$(cat .last-daily-ok 2>/dev/null)
# 如果超過 36 小時沒更新 → 警告
graph LR
T1["Tier 1 跑完"] -->|寫入| S1[".last-daily-ok"]
T2["Tier 2 跑完"] -->|寫入| S2[".last-weekly-ok"]
T0["Tier 0(每小時)"] -->|檢查| S1
T0 -->|檢查| S2
S1 -->|超過 36 小時沒更新| WARN["⚠️ 警告"]
S2 -->|超過 10 天沒更新| WARN
style T0 fill:#CBA000,stroke:#2A2118,color:#2A2118
style WARN fill:#F44336,stroke:#2A2118,color:white
這招很巧妙:你不需要監控排程系統本身是否正常——只要看哨兵檔案夠不夠新,就知道一切是否在跑。
2. 錯誤去重
同樣的警告連續出現三次以上,才報一次。這防止了「通知疲勞」——如果每小時都收到「暫存檔超過 50 個」的警告,你很快就會開始忽略所有警告。
3. 早期退出
如果工作區很乾淨(沒有超限的檔案、沒有遺失的哨兵),整個腳本在幾毫秒內就結束。不做不必要的掃描。
Tier 1:每日清掃
這是真正開始清東西的地方。所有規則都是確定性的——不需要判斷,只看年齡和類型:
graph TD
START["每日清掃開始"] --> CHK{"有東西要清嗎?"}
CHK -->|沒有| EXIT["✅ 早期退出"]
CHK -->|有| TEMP["🗑 暫存檔 > 3 天"]
TEMP --> MEDIA["🗑 媒體檔 > 7 天"]
MEDIA --> CRON["🗑 排程日誌 > 14 天"]
CRON --> REPORT["📊 輸出報告"]
style EXIT fill:#4CAF50,stroke:#2A2118,color:white
style TEMP fill:#FAF6EE,stroke:#CBA000,color:#2A2118
style MEDIA fill:#FAF6EE,stroke:#CBA000,color:#2A2118
style CRON fill:#FAF6EE,stroke:#CBA000,color:#2A2118
清理規則
| 目標 | 規則 | 預設閾值 |
|---|---|---|
暫存檔(tmp/) | 超過 N 天就刪 | 3 天 |
媒體檔(media/) | 超過 N 天就刪 | 7 天 |
排程日誌(cron/runs/) | 超過 N 天就刪 | 14 天 |
| 空目錄 | 自動清除 | — |

兩層早期退出
Tier 1 有一個聰明的設計:兩層早期退出。
# 第一層:整體檢查
total_candidates=$(find tmp/ media/ cron/runs/ -type f | wc -l)
if [ "$total_candidates" -eq 0 ]; then
echo "Nothing to clean. Exiting."
exit 0
fi
# 第二層:每個分類單獨檢查
old_temps=$(find tmp/ -mtime +3 -type f | wc -l)
if [ "$old_temps" -eq 0 ]; then
echo "tmp/ is clean. Skipping."
# 繼續下一個分類,不是整個退出
fi
這讓一個乾淨的工作區幾乎不花任何 I/O。
安全刪除
所有刪除都用 trash(macOS)而不是 rm。這讓你有 30 天的後悔期。沒有 trash 指令?腳本會 fallback 到移動到 ~/.Trash/。
Tier 2:每週 AI 輔助掃描
到了這裡,我們開始需要判斷力了。Shell script 負責收集數據,AI 負責做決定。
Script 做什麼
graph LR
SCAN["Shell 掃描"] --> D1["列出所有主題檔 + 最後修改日"]
SCAN --> D2["計算每個專案目錄大小"]
SCAN --> D3["找出跟其他檔案 80%+ 重複的筆記"]
SCAN --> D4["列出 30 天沒動的專案"]
D1 --> REPORT["📄 掃描報告"]
D2 --> REPORT
D3 --> REPORT
D4 --> REPORT
REPORT --> AI["🤖 AI 審閱 + 行動"]
style SCAN fill:#E8ECF1,stroke:#2A2118,color:#2A2118
style AI fill:#CBA000,stroke:#2A2118,color:#2A2118
AI 做什麼
拿到掃描報告後,AI 判斷:
- 這兩份筆記內容重疊 80%,要合併嗎?→ 合併
- 這個專案 30 天沒動了,是暫停還是結束?→ 標記為暫停
- 這個主題檔超過 200 行了,要拆分嗎?→ 拆分
為什麼這樣分
Shell script 收集數據幾乎是免費的(毫秒級)。AI 判斷一次大約 $0.01。如果讓 AI 自己去掃描,它要讀幾十個檔案(每個都是 token),成本可能是 $0.50+。
腳本先篩選,AI 只看精華。 這就是為什麼整套系統每週的 AI 成本只有 ~$0.01。
Tier 3:每月深度審計
一個月一次,做一次全面體檢。
graph TD
M["每月審計"] --> ENV["🔧 環境清單比對"]
M --> STALE["📅 30 天以上未改的檔案"]
M --> COMP["📊 複雜度審計"]
M --> DB["💾 資料庫 VACUUM"]
ENV --> DIFF["跟上月清單比對<br/>新增了什麼?消失了什麼?"]
STALE --> ARCHIVE["標記可歸檔的檔案"]
COMP --> ALERT["哪個目錄膨脹太快?"]
DB --> SIZE["回收多少空間?"]
style M fill:#CBA000,stroke:#2A2118,color:#2A2118
環境清單(Manifest)
每月產生一份環境快照:
## 環境清單 — 2026-03
- 專案數:22(上月 20,+2)
- 記憶筆記:18(上月 15,+3)
- 主題檔:8(上月 8,不變)
- 排程任務:12(上月 10,+2)
- 總磁碟使用:2.3 GB(上月 2.1 GB,+200 MB)
跟上月比對,就能看出哪裡在膨脹、哪裡在萎縮。
複雜度陷阱
維護系統本身也會膨脹。每月審計會檢查:
- 清理規則是不是越來越多?(超過 20 條就該精簡)
- 腳本是不是越來越長?(超過 500 行就該拆分)
- 是不是在維護「維護系統的維護系統」?(是時候退後一步了)
回饋循環:系統會自己進化

這套系統最精妙的設計是自我改善機制:
graph TD
D["Tier 1 每日清掃"] -->|發現異常模式| S["optimization-suggestions.md"]
W["Tier 2 每週掃描"] -->|評估建議| S
M["Tier 3 每月審計"] -->|採納規則| C["config.sh"]
C -->|更新後| D
S -->|累積建議| W
W -->|篩選可行的| M
M -->|寫入新閾值| C
style S fill:#FAF6EE,stroke:#CBA000,color:#2A2118
style C fill:#CBA000,stroke:#2A2118,color:#2A2118
流程是這樣的:
- Tier 1 發現異常:「連續 5 天都有超過 10 個暫存檔要清,也許 3 天的閾值太長了?」→ 寫進
optimization-suggestions.md - Tier 2 評估建議:AI 看建議,判斷是否合理
- Tier 3 採納規則:如果建議被 AI 和人都認可,更新
config.sh的閾值
系統從自己的運作經驗中學習,而不是靠你記住「上次是怎麼調的」。
從踩坑中學到的事
幾個寫進腳本前先撞過的牆:
null-byte bug
某些 AI 工具偶爾會在檔案裡寫入 null bytes(\x00)。看起來檔案正常,但 grep 會把它當二進位檔跳過。解法:清掃時加一個 null-byte 掃描步驟。
-newermt 陷阱
macOS 的 find 不支援 -newermt。解法:改用 -mtime +N,或用 stat -f%m 取 epoch 時間自己算。每個平台差異都封裝在 config.sh 的 helper function 裡。
早期退出的價值
一開始沒做早期退出,每小時的健康檢查要跑 2-3 秒。加了早期退出後,乾淨的工作區只要 50ms。聽起來小,但一天跑 24 次就是差 70 秒和 1.2 秒的差別。
快速開始
只需要四步:
1. Clone + 設定路徑
git clone https://github.com/p3nchan/auto-optimization.git
cd auto-optimization
export WORKSPACE_ROOT="$HOME/.my-agent-workspace"
2. 調整閾值
編輯 config/config.sh:
THRESHOLD_TEMP_DAYS=3 # 暫存檔保留天數
THRESHOLD_MEDIA_DAYS=7 # 媒體檔保留天數
THRESHOLD_CRON_LOG_DAYS=14 # 排程日誌保留天數
3. 排程
# crontab -e
0 * * * * /path/to/auto-optimization/scripts/hourly-healthcheck.sh
0 3 * * * /path/to/auto-optimization/scripts/daily-cleanup.sh
0 4 * * 0 /path/to/auto-optimization/scripts/weekly-scan.sh
0 5 1 * * /path/to/auto-optimization/scripts/monthly-scan.sh
4. 觀察
跑幾天後,看看 optimization-suggestions.md 有沒有累積建議。根據建議調整閾值。
總結
| 你的狀況 | 建議 |
|---|---|
| 剛開始用 AI Agent | 先加 Tier 1(每日清掃)就夠了 |
| 有 5+ 個專案在跑 | 加 Tier 0(健康檢查)+ Tier 1 |
| 有排程任務 + 大量日誌 | 全部四層都上 |
| 只想最小投入 | 把 daily-cleanup.sh 加進 cron,其他先不管 |
完整的腳本、設定檔和文件都在開源 repo 裡:
MIT 授權,clone 下來改一改就能用。