我写了个终端工具管理 Claude Code / Codex 的历史会话
用 Claude Code 有半年多了,~/.claude/projects/ 下面堆了一堆目录,全是乱码路径名。
有次想找上周某个对话里写的一段逻辑,翻了二十分钟没找到。token 用了多少不知道,哪些会话能删不知道,想清理只能手动 rm。
终端里用了这么久,居然没有个像样的工具管这些。那就自己写一个——CSM。
CSM 是什么
CSM(Claude Session Manager) 是一个终端 UI 工具,专门用来浏览和管理 Claude Code、OpenAI Codex 的历史会话。
不用离开终端,直接在命令行里:
- 看所有项目和会话,带时间、消息数、token 用量
- 搜索会话内容
- 批量删除旧会话
- 给会话改个有意义的名字
主要功能
项目视图
按工作目录分组展示所有项目,显示会话数、文件大小、最后修改时间,一眼知道哪个项目活跃、哪个可以清掉。
会话列表
列出每个项目下的所有会话,显示标题、日期、消息数、input/output token 估算。
详情视图
精确 token 统计(基于 tiktoken cl100k_base),工具调用次数统计,改动文件列表,消息预览。
搜索 & 批量删除
按 / 进入搜索模式,模糊匹配标题和消息内容。搜出来之后用 Space 多选,d 一键批量删除。
重命名
在详情页按 r,给会话起个有意义的名字,下次一眼就能找到。
双 provider 支持
--source claude 管 Claude Code,--source codex 管 OpenAI Codex,标题栏会显示当前是 [Claude] 还是 [Codex]。
快速上手
依赖: Bun v1.3+
git clone https://github.com/borneygit/csm
cd csm
bun install
bun run dev # Claude Code(默认)
bun run dev -- --source codex # OpenAI Codex
或者编译成单二进制,直接丢到 PATH 里:
bun run build
./csm
./csm --source codex
./csm --path /custom/dir
键位一览
| 视图 | 按键 | 操作 |
|---|---|---|
| 全局 | q / Esc | 退出 / 返回 |
| 项目 / 列表 | ↑ ↓ | 导航 |
| 项目 / 列表 | Enter | 打开 |
| 项目 / 列表 | d | 删除(确认后执行) |
| 列表 | / | 进入搜索模式 |
| 列表(搜索中) | Space | 切换选中 |
| 列表(搜索中) | d | 删除选中会话 |
| 详情 | r | 重命名会话 |
技术实现
用 Ink(React for CLI)写 UI,js-tiktoken 做精确 token 计数,Bun 作为运行时和打包工具,编译出无依赖单二进制。
项目结构很简单:
src/
├── index.tsx # 入口
├── components/ # UI 组件(ProjectView / ListView / DetailView)
├── providers/ # Claude / Codex provider 实现
├── scanner.ts # 扫描 & 解码目录名
└── parser.ts # 解析 JSONL,提取元数据和 token
代码量不大,感兴趣的可以直接读源码。
最后
这个工具目前解决了我自己的痛点,功能还比较基础。如果你也在用 Claude Code 或 Codex,欢迎试试。
有 bug、有想要的功能,欢迎开 issue 或 PR。
GitHub:borneygit/csm
觉得有用的话,点个 star ⭐ 是对我最大的支持。