用 Codex 一段时间后,侧栏很容易堆满聊天:临时排查、已经完成的任务、重复尝试,还有早就不会再打开的会话。
想清理时才发现,归档、永久删除和最近会话列表的刷新,是三件不同的事。
经过搜索发现在Reddit中有人遇到同样问题的人:
下方的评论中的意思是“告诉它删除所有我在x天内没有触碰过的聊天记录”
所以,我决定按照这个思路来清理我本地超过 5 天没有活动的聊天。
最终我筛选出 55 条本地聊天,执行删除后再次检查,符合条件的记录已经归零。但界面的最近会话列表仍显示部分旧条目,点击后却提示聊天已删除。
这个过程有几处值得分享。
1、先确定:想隐藏,还是想彻底删除?
归档适合整理侧栏:聊天从日常列表消失,但记录仍保留,可以恢复。
如果明确不需要保留内容,就要使用永久删除。不能因为列表变干净了,就认为聊天记录已经清除。
还有一个区别:同一个应用可能同时显示本地 Codex 会话和普通 ChatGPT 云端聊天。清理本地会话的命令,并不能一起删除云端聊天。
2、本地 Codex 有永久删除命令
官方文档提供了按会话 ID 或名称删除的方法:
codex delete '聊天的完整标题'运行后,核对提示,再确认删除。永久删除可能同时移除派生子会话,操作前应确认范围。官方命令说明
不过,我第一次运行时遇到了:
-bash: codex: command not found这并不一定意味着电脑没有安装 Codex。此次问题是终端找不到应用内附带的命令,改用可执行文件的完整路径后就能调用。
我这台 Mac 上的路径是:
"/Applications/ChatGPT.app/Contents/Resources/codex-cli/CodexCLI.app/Contents/MacOS/codex" delete '聊天的完整标题'这只是本次电脑上的实际路径,不同安装方式和版本可能不同。遇到找不到命令的问题,应先确认自己的安装位置。
3、批量清理,关键是先生成准确的清单
逐条输入标题很慢,也容易选错。更实用的办法是先读取会话列表,按规则筛选,再通过会话 ID 逐条执行删除。
此次使用的规则是:
- 最后更新时间和可获取的最近打开时间,都超过 5 天。
- 包含已归档的本地聊天。
- 如果会话树中有近期活动,保留相关聊天,避免连带删除。
- 内部审查会话不作为独立的清理目标。
筛选时要读取完整列表,包括后续分页。只检查侧栏当前显示的几十条记录,很容易漏掉更早的聊天。
批量工具先展示清单,用户确认一次后,再调用删除命令。按 UUID 删除时,官方支持 --force 参数跳过逐条确认;因此,前面的清单核对尤其重要。参数说明
本次先做了只读预览,找到 55 条符合条件的本地聊天。删除后重新读取列表,符合条件的记录变成了 0 条。
(PS: 批量清理的python代码我将放到最后)
4、删除成功,为什么最近会话还在?
这次最容易让人困惑的现象是:旧标题仍在最近会话列表里,但点击后提示已经删除。
结合重新读取的会话列表,可以判断聊天删除已生效;界面残留条目很可能与列表尚未刷新有关。仅凭标题还在,不能断定删除失败。
此时可以先等其他正在运行的任务结束,再完全退出应用并重新打开。Mac 上可使用 ⌘Q,而不仅是关闭窗口。官方排障文档也建议在活动聊天完成后重启应用,处理持续卡住的状态。官方排障说明
如果重启后仍有失效条目,应继续排查列表状态,而不是反复删除同一批会话。本次记录尚未确认重启后的界面结果,不能把重启写成已经验证成功的修复。
5、清理完成,要看两项结果
一次完整的清理,需要分别检查:
- **记录是否已删除:**重新读取会话列表,确认目标记录不再存在。
- **界面是否已更新:**最近会话和侧栏是否还残留失效入口。
这次经验说明,批量清理最重要的不是把删除命令执行得更快,而是先明确范围、展示清单,再核对实际结果。这样既能清掉不需要的聊天,也能分辨删除失败与界面未刷新这两种不同的问题。