长期跑 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