构建 CLI 工具以浏览 AI 编码助手日志(Claude Code 与 Codex CLI)
Source: Dev.to
问题
如果你在使用 Claude Code 或 OpenAI Codex CLI 这类 AI 编码助手,可能会遇到以下情形:
- “Claude 上周给的那个解决方案是什么?”
- “我当时用了哪个提示词效果这么好?”
这两个工具都会把对话日志保存在本地,但要找过去的会话非常痛苦:
# Claude Code 日志
~/.claude/projects//*.jsonl
# Codex CLI 日志
~/.codex/sessions/YYYY/MM/DD/*.jsonl
手动在这些嵌套目录中导航?不想这么做。
解决方案
我编写了两个简单的 shell 脚本,使用 fzf 实现交互式日志浏览:
- claude-logs – 用于 Claude Code
- codex-logs – 用于 OpenAI Codex CLI
每个脚本都是单文件(约 200 行),只需要 fzf 和 jq,开箱即用。
功能
两款工具共享相同的命令结构:
| 命令 | 描述 |
|---|---|
| (无参数) | 交互模式 – 使用 fzf 浏览 |
list | 显示所有项目/月份 |
latest | 查看最近一次会话 |
tail | 实时监控进行中的会话 |
status | 检查 CLI 是否在运行 |
快速演示
交互模式
$ claude-logs
# → 用 fzf 选择项目
# → 用 fzf 选择会话
# → 查看格式化后的对话
实时监控
$ claude-logs tail
# → 实时观看活动会话(Ctrl+C 退出)
状态检查
$ claude-logs status
Claude Code 正在运行 (PID: 12345)
最近的会话:
2025-12-18 15:30 - my-project
2025-12-18 14:00 - another-project
输出格式
原始的 JSONL 日志会被转换为可读的对话形式:
━━━━━━━━━━ USER ━━━━━━━━━━
Fix the bug in this function
━━━━━━━━━━ CLAUDE ━━━━━━━━━━
I found the issue. The problem is...
🔧 [Tool: Edit file]
对于 Codex CLI,还会显示项目路径和 Git 分支信息:
=== rollout-xxx.jsonl ===
Project: /Users/me/my-project | Branch: main
安装
前置条件
brew install fzf jq
安装 claude-logs
git clone https://github.com/wondercoms/claude-logs.git
chmod +x claude-logs/claude-logs
cp claude-logs/claude-logs ~/.local/bin/
安装 codex-logs
git clone https://github.com/wondercoms/codex-logs.git
chmod +x codex-logs/codex-logs
cp codex-logs/codex-logs ~/.local/bin/
注意: 确保
~/.local/bin已加入你的PATH。
工作原理
这两个工具的思路很直接:
- 扫描 日志目录结构。
- 解析 JSONL 文件(使用
jq)以提取消息。 - 展示 选项(使用
fzf,并带预览)。 - 格式化 输出(使用 ANSI 颜色)。
fzf 的预览功能是关键——在打开之前就能看到对话片段:
fzf --preview 'head -20 {} | jq -r "..."'
使用场景
- 查找过去的解决方案 – 找到之前是如何解决类似问题的。
- 复用有效的提示词 – 发现表现好的提示词并加以改进。
- 每日回顾 – 回顾今天在 AI 辅助下完成了哪些工作。
- 调试 – 当 AI CLI 行为异常时检查日志。
当前局限
- 仅支持 macOS(使用
stat -f获取时间戳)。 - 若要支持 Linux,需要改为
stat --format——欢迎提交 PR!
链接
- claude-logs: https://github.com/wondercoms/claude-logs
- codex-logs: https://github.com/wondercoms/codex-logs
结语
如果你是 Claude Code 或 Codex CLI 的重度用户,试试这些工具吧。它们轻量、依赖少,能够解决真实的使用烦恼。
发现 bug?想要 Linux 支持?欢迎提交 Issue 和 PR!