ai会话清洁器
macOS CLI工具,用于检测并清除过时 克劳德代码 会话、Codex拥有的代理和MCP帮助进程,以及泄漏内存和CPU的Chrome测试浏览器实例。
问题
如果你大量使用Claude Code或Codex,过时的辅助进程会很快堆积起来:
- Claude Code会话在活动监视器中显示为版本号,如
2.1.92 - Codex可以保留副本
npm exec,node,chrome-devtools-mcp,以及类似的MCP/代理辅助链app-server - Playwright MCP或Chrome DevTools MCP启动的Chrome测试会话通常在任务结束后仍然存在
几个小时后,通常会有几十个过时的进程消耗多GB的RAM,而没有活动的工作。
安装
git clone https://github.com/davefmurray/ai-session-cleaner.git
cd ai-session-cleaner
make install这将安装到 ~/.local/bin/ai-session-cleaner.确保 ~/.local/bin 在你的 PATH.
或者直接运行而不安装:
./ai-session-cleaner scan
# or
python3 -m ai_session_cleaner scan要求: Python 3.10+(无pip依赖)。
用法
扫描过时进程
ai-session-cleaner scan # Table output
ai-session-cleaner scan --json # JSON output
ai-session-cleaner scan --verbose # Include paths and command lines
ai-session-cleaner scan --category claude # Filter: claude, chrome, or mcp清理陈旧流程
ai-session-cleaner clean # Respects config mode (alert-only or auto-clean)
ai-session-cleaner clean --dry-run # Show what would be killed
ai-session-cleaner clean --force # Kill immediately, skip mode check在第一次运行时, clean 在干运行模式下运行,并在以下位置创建默认配置 ~/.config/ai-session-cleaner/config.json.
菜单栏应用程序
pip3 install rumps py2app
python3 build_app.py
open "AI Session Cleaner.app"这将在菜单栏中构建一个带有画笔图标的原生macOS应用程序。单击它可以查看过时进程计数、扫描、清理、切换自动清理和调整检查间隔。没有Dock图标,通知显示为“AI会话清理器”。
将其干净地安装到 /Applications 因此,您不会保留早期版本中的旧py2app二进制文件:
rm -rf "/Applications/AI Session Cleaner.app"
ditto "AI Session Cleaner.app" "/Applications/AI Session Cleaner.app"然后发射 /Applications/AI Session Cleaner.app 并将其添加到登录项中以自动启动。
菜单栏应用程序是在py2app别名模式下构建的,因此它针对构建它的本地git克隆运行。 Check for Updates... 使用相同的克隆,重建捆绑包,替换已安装的应用程序,并自动重新启动它。源代码仓库必须仍然存在于本地,并且具有干净的工作树。
在后台运行
# Install as a LaunchAgent (runs every 10 minutes)
ai-session-cleaner install
# Install in alert-only mode (sends notifications but doesn't kill)
ai-session-cleaner install --mode alertOnly
# Custom interval
ai-session-cleaner install --interval 5
# Check daemon status
ai-session-cleaner status
# Remove the LaunchAgent
ai-session-cleaner uninstall
ai-session-cleaner uninstall --purge # Also remove logs and config观看模式(前景)
ai-session-cleaner watch # Check every 10 minutes
ai-session-cleaner watch --interval 5 # Check every 5 minutes配置
配置文件: ~/.config/ai-session-cleaner/config.json
{
"mode": "autoClean",
"checkIntervalMinutes": 10,
"ageThresholdMinutes": 30,
"notificationsEnabled": true,
"sourceRepoPath": "/Users/dfm/Documents/GitHub/dev/ai-session-cleaner",
"whitelist": []
}| 字段 | 描述 | 默认值 |
|---|---|---|
mode | autoClean 自动终止过时的进程; alertOnly 发送通知 | alertOnly |
checkIntervalMinutes | 守护进程检查的频率 | 10 |
ageThresholdMinutes | 进程被视为过时之前的最低年龄 | 30 |
notificationsEnabled | 发送macOS通知 | true |
sourceRepoPath | 菜单栏应用程序用于自我更新的本地git克隆 | 在构建时嵌入(如果可用) |
whitelist | 数组 {pathPattern, argsPattern, reason} 永远不要杀死正则表达式条目 | [] |
白名单示例
{
"whitelist": [
{
"pathPattern": "worker-service",
"reason": "Intentional background daemon"
}
]
}检测工作原理
Claude代码会话
匹配可执行文件位于的进程 ~/.local/share/claude/versions/X.Y.Z。如果出现以下情况,则认为进程已过时:
- 其父PID为1(由于父PID已死亡,因此重新启动)
- 它是工人守护进程的孩子(
worker-service.cjs --daemon) - 它没有控制终端,运行时间已超过年龄阈值
安全: 具有活动终端(当前会话)和清洁器本身祖先的进程永远不会被杀死。
Chrome测试会话
匹配使用测试标志启动的Chrome/Chromium进程(--remote-debugging-port, --headless, --enable-automation,或温度 --user-data-dir).您的常规Chrome浏览器从未被触碰。如果父进程已死亡或会话超过年龄阈值,则认为已过时。
食品法典委员会拥有的代理/MCP流程
匹配Node.js、Bun、Python、包运行器和助手进程,如 npm exec, npx, node .../.bin/...,以及 chrome-devtools-mcp 当 mcp 出现在他们的论点或路径中。如果父进程不再存在,或者它们是同一Claude或Codex会话所有者下的较旧的重复启动链,则这些被认为是过时的。
还可以检测单个Claude或Codex会话所有者下泄漏的重复发射链。如果同一个MCP服务器或代理助手在同一个长期所有者下多次生成,则保留最新实例,并标记超过年龄阈值的旧副本进行清理。这就是该工具如何捕获过时的Codex拥有的 npm exec, node,以及 chrome-devtools-mcp 即使在当前的食品法典委员会 app-server 还活着。
日志
日志文件: ~/.local/var/ai-session-cleaner/ai-session-cleaner.log
自动以10MB的速度旋转,保留3个旧文件。
卸载
ai-session-cleaner uninstall --purge # Remove LaunchAgent, logs, and config
make uninstall # Remove the binary许可证
麻省理工学院
