Claude Code 定时任务跑一次留一个会话,作者 618 个 session 攒到怀疑人生

把 Claude Code 的 routine(定时任务)跑起来,大概率会踩到一个坑:每执行一次,桌面端就多留一个历史会话,而且桌面应用里只能一个一个手动删。作者 naw103 说他光一个 routine 就攒了 618 个 open session,这个数字出来,经常跑定时脚本的人应该都明白那种头皮发麻的感觉。

他在 Hacker News 上发了个 Show HN,做的是个叫 Claude Routine Session Cleanup 的 skill,核心就是让 Claude 自己把这些历史会话清掉。逻辑不复杂:一个 Python 写的 planner 负责规划清理——保留最新的 N 个,也可以选择保护那些你手动回复过的会话——然后让 Claude 通过应用自带的 session 删除工具去删,每次调用删 25 个,每个都要过一个审批卡片。

有意思的在后头。他说他一开始直接手动删磁盘上的文件,结果根本没用,因为应用把会话列表缓存在内存里,删了文件之后它还会把记录写回去。也就是说直接动文件系统这一招在 Claude Code 这里走不通,得走它自己的删除接口。但还有一个限制:这个删除工具在 routine 运行内部是关闭的,所以清理命令得在正常的对话会话里跑。这个细节挺值得留意——意味着整个清理流程不是一个跑在后台的 routine 能独立完成的,你得手动开个会话去触发。

planner 那个 Python 文件特意做成非破坏性的,它本身不删任何东西,只是把清理方案列出来给你看。你完全可以先跑一遍预览,确认它要动哪些 session,再让 Claude 去执行。作者在评论区里也确认,目前只清理 routine 生成的会话,不碰普通会话——因为他不希望在没人人工审核的情况下删掉有自己回复记录的东西。想改成清理所有对话也行,fork 下来自己改。

我自己看这个工具,觉得它解决的是一个真实但不怎么性感的需求:定时任务跑多了,历史会话堆积,几乎每个重度用 Claude Code 的人迟早都会遇到。官方桌面端只给逐个删除的入口,在一个可能每天攒几十个 session 的场景下基本等于形同虚设。作者没有绕开官方机制搞黑魔法,而是顺着应用自己的删除接口来,还加了审批卡和预览层,属于那种把「我自己被这个问题烦了很久」做成产品的做法。

GitHub 地址在 https://github.com/naw103/claude-routine-cleanup ,代码应该也不复杂,就是那个 planner 加 skill 的定义文件。如果你也受 session 堆积困扰,可以先跑一遍预览看看它规划了删哪些,再决定要不要让它真的动手。清理这种事,宁可慢一点,也别误删自己回复过的会话。

不过也要说一句,这个 skill 目前只针对 routine 会话做了保护逻辑,普通会话默认不处理。想要更激进的清理策略,就得自己改源码了。整体是个小工具,但刚好补上了官方桌面端在批量历史会话管理上的一块空白。