長期跑 AI Agent 之後,打開工作目錄常常會遇到這種狀況:暫存檔、排程日誌、截圖、過時的記憶筆記堆滿了整個目錄。手動清理 20 分鐘,第二天又長回來。
這屬於結構性問題,AI Agent 的工作區天生會膨脹。每個 session 產生暫存檔,每個排程任務留下日誌,每個媒體任務產出截圖。沒有自動清理機制,就是在跟熵做一場必輸的仗。
核心理念:腳本做苦力,AI 做判斷

設計這套系統前曾試過「全部交給 AI 清理」,結果如下:
| 方法 | 成本 | 問題 |
|---|---|---|
| 全部人工清理 | 不花錢,但花時間 | 每天 10-20 分鐘,容易忘記 |
| 全部交給 AI | 每次都要付 token | 多數清理工作其實不需要判斷力 |
| 腳本 + AI 混合 | 每次成本極低 | 腳本處理確定性工作,AI 只在需要判斷時介入 |
核心原則:
「超過 3 天的暫存檔就刪」不需要 AI 判斷,shell script 就夠了。 「這兩份記憶筆記內容有 80% 重複,要合併嗎?」才需要 AI。
四層架構

graph TD
T0["⏱ Tier 0:每小時健康檢查<br/>純 Shell"] --> T1["🧹 Tier 1:每日清掃<br/>純 Shell"]
T1 --> T2["🔍 Tier 2:每週掃描<br/>Shell + AI"]
T2 --> T3["📋 Tier 3:每月審計<br/>Shell + AI"]
| Tier | 頻率 | 執行者 | 做什麼 |
|---|---|---|---|
| 0 | 每小時 | Shell | 健康檢查、哨兵監控、錯誤去重 |
| 1 | 每天 | Shell | 刪暫存檔、清媒體、清日誌 |
| 2 | 每週 | Shell + AI | 主題檔精煉、筆記壓縮 |
| 3 | 每月 | Shell + AI | 環境清單比對、複雜度審計 |
越往上走,頻率越低、判斷力要求越高、成本越貴。如果連「刪 N 天前的暫存檔」都用 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 小時沒更新 → 警告
不需要監控排程系統本身是否正常,只要看哨兵檔案夠不夠新,就知道一切是否在跑。
2. 錯誤去重
同樣的警告連續出現多次以上,才報一次。可以避免「通知疲勞」。如果每小時都收到「暫存檔超過 N 個」的警告,很快就會開始忽略所有警告。
3. 早期退出
工作區很乾淨(沒有超限的檔案、沒有遺失的哨兵)時,整個腳本在幾毫秒內就結束。不做不必要的掃描。
Tier 1:每日清掃
真正開始清東西的地方。所有規則都是確定性的:不需要判斷,只看年齡和類型。
清理規則
| 目標 | 規則 | 預設閾值 |
|---|---|---|
暫存檔(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,留下後悔期。沒有 trash 指令的話,腳本會 fallback 到移動到 ~/.Trash/。
Tier 2:每週 AI 輔助掃描
到了這裡開始需要判斷力。Shell script 負責收集數據,AI 負責做決定。
Script 做什麼
- 列出所有主題檔 + 最後修改日
- 計算每個專案目錄大小
- 找出跟其他檔案高度重複的筆記
- 列出長時間沒動的專案
AI 做什麼
拿到掃描報告後,AI 判斷:
- 這兩份筆記內容重疊 80%,要合併嗎?→ 合併
- 這個專案 30 天沒動了,是暫停還是結束?→ 標記為暫停
- 這個主題檔超過 200 行,要拆分嗎?→ 拆分
為什麼這樣分
Shell script 收集數據幾乎是免費的(毫秒級)。AI 判斷一次成本很低。讓 AI 自己去掃描則要讀幾十個檔案(每個都是 token),成本會放大很多倍。
腳本先篩選,AI 只看精華。 整套系統每週的 AI 成本可以壓得非常低。
Tier 3:每月深度審計
一個月一次,做一次全面體檢。
環境清單(Manifest)
每月產生一份環境快照:
## 環境清單:2026-03
- 專案數:N(上月 M,差異)
- 記憶筆記:N(上月 M,差異)
- 主題檔:N(上月 M,差異)
- 排程任務:N(上月 M,差異)
- 總磁碟使用:X GB(上月 Y GB,差異)
跟上月比對,就能看出哪裡在膨脹、哪裡在萎縮。
複雜度陷阱
維護系統本身也會膨脹。每月審計會檢查:
- 清理規則是不是越來越多?(超過某個門檻就該精簡)
- 腳本是不是越來越長?(超過某個行數就該拆分)
- 有沒有在維護「維護系統的維護系統」?(是時候退後一步了)
回饋循環:系統會自己進化

整套系統的精妙設計是自動改善機制:
- Tier 1 發現異常:「連續 5 天都有超過 10 個暫存檔要清,也許閾值太長了?」→ 寫進
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 秒。加了早期退出後,乾淨的工作區只要幾十毫秒。聽起來小,但一天跑 24 次累積下來的差距相當可觀。
快速開始
只需要四步:
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(每日清掃)就夠了 |
| 有多個專案在跑 | 加 Tier 0(健康檢查)+ Tier 1 |
| 有排程任務 + 大量日誌 | 全部四層都上 |
| 只想最小投入 | 把 daily-cleanup.sh 加進 cron,其他先不管 |
完整的腳本、設定檔和文件都在開源 repo 裡:
MIT 授權,clone 下來改一改就能用。
延伸閱讀
小企鵝的經驗
OpenClaw 上跑過完整的三層自動最佳化迴圈:daily cron 跑清理腳本,weekly cron 翻 log 找模式並寫進 optimization-suggestions.md,monthly 才人工 review 一輪是否要把建議升級成正式規則。實戰最常踩的是兩個坑:第一,閾值太緊會不停誤殺有用的暫存檔;第二,不寫 dry-run mode 直接跑刪除,第一週就會弄丟東西。建議從只看不刪的觀察階段開始,跑兩週看分布合理之後再開動作。
常見問題
Q: 為什麼 AI Agent 的工作區需要自動清理?
AI Agent 每個 session 都會產生暫存檔、日誌、截圖等檔案。一個有多專案、每天跑排程任務的工作區,檔案量會快速膨脹。如果不定期清理,不僅浪費磁碟空間,AI 搜尋檔案時也會變慢、容易混淆。
Q: 為什麼不全部交給 AI 來清理?
AI 的每次判斷都有成本(API token),而絕大多數的清理工作是確定性的(超過 N 天的暫存檔就刪、超過 N 天的日誌就刪)。用 shell script 處理這些免費、快速、可靠。只有少數需要判斷的工作(這個筆記還需要嗎?這兩個檔案可以合併嗎?)才交給 AI。
Q: 這套系統需要什麼前提?
只需要 bash 和 cron(或任何排程工具)。macOS 和 Linux 都支援。AI 輔助的 Tier 2 和 Tier 3 是可選的。即使只用 Tier 0 和 Tier 1(純 shell),也能大幅改善工作區衛生。
整理:Penna|小企鵝 Penchan