codex_inspector 是本机 Codex Inspector。它启动一个只绑定本机地址的 HTTP 服务,用浏览器查看 ~/.codex 里的历史 session、活跃度统计和记忆内容。
当前状态:实验工具。它会进入 tag Release 的 Go 二进制包,但不在根目录 install.sh 默认稳定安装清单中。
| 场景 | 能力 |
|---|---|
| 查看 Codex 使用活跃度 | 统计 session 总量、事件数量、日/周/月维度和 heatmap |
| 回收 token 用量 | 从 token_count 事件统计每个 session 的累计 token、本轮 token、cached input、reasoning output、context window 和 rate limit |
| 排查历史对话 | 按时间范围浏览 session,按原始顺序展示 user、assistant、tool call、tool result 和 system event |
| 查看记忆内容 | 浏览 MEMORY.md、memory_summary.md、rollout_summaries/,支持关键词搜索和详情预览 |
| 诊断数据源 | 检查关键路径是否存在,只读探测 SQLite schema |
快速安装到用户级目录:
./cli/codex_inspector/install.sh
codex_inspector -addr 127.0.0.1:8787默认安装到 $HOME/.local/bin/codex_inspector。脚本支持 macOS 和 Linux,默认只写当前用户目录;只有显式传 --system 或 --allow-sudo 时,才会尝试使用 sudo 写系统目录。
自定义安装目录:
./cli/codex_inspector/install.sh --prefix "$HOME/.local"系统级安装:
./cli/codex_inspector/install.sh --system从仓库根目录构建:
go build -o output/codex_inspector ./cli/codex_inspector/...启动本机服务:
./output/codex_inspector -addr 127.0.0.1:8787指定 Codex home,适合用脱敏 fixture 做演示或截图:
./output/codex_inspector -codex-home /tmp/codex-inspector-fixture -addr 127.0.0.1:8787历史 session summary 会缓存到本机 SQLite 文件,用于减少重复解析历史 rollout。默认路径放在系统临时目录下的用户隔离子目录,避免 macOS/Linux 上用户 cache 目录权限异常影响页面使用:
| 系统 | 默认 cache |
|---|---|
| macOS | ${TMPDIR:-/tmp}/life_tools-codex-inspector-<uid>/session_summary_cache.sqlite |
| Linux | /tmp/life_tools-codex-inspector-<uid>/session_summary_cache.sqlite |
可以显式指定或禁用:
./output/codex_inspector -cache-path /tmp/codex_inspector_cache.sqlite
./output/codex_inspector -no-cache
./output/codex_inspector -cache-workers 2
./output/codex_inspector -cache-workers 0-cache-workers 控制启动后的后台自动补齐,默认是 2。设为 0 时不会自动补齐;Diagnostics 页面上的手动 build/rebuild 仍可执行一次。
打开浏览器访问:
http://127.0.0.1:8787
| 数据源 | 读取内容 | 用途 | 写入 |
|---|---|---|---|
~/.codex/session_index.jsonl |
id、thread_name、updated_at |
session 列表标题和更新时间 | 否 |
~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl |
JSONL 事件流 | session 详情、消息统计、工具调用统计、token 用量统计 | 否 |
~/.codex/memories/MEMORY.md |
Markdown 文本 | 记忆索引总览和搜索 | 否 |
~/.codex/memories/memory_summary.md |
Markdown 文本 | 记忆摘要预览 | 否 |
~/.codex/memories/rollout_summaries/*.md |
Markdown 文本 | 相关 rollout 列表和详情预览 | 否 |
~/.codex/state_5.sqlite |
schema | Diagnostics 页面只读探测 | 否 |
~/.codex/goals_1.sqlite |
schema | Diagnostics 页面只读探测 | 否 |
~/.codex/memories_1.sqlite |
schema | Diagnostics 页面只读探测 | 否 |
~/.codex/auth.json |
不读取内容 | Diagnostics 只标记为排除项 | 否 |
系统 tmp 目录下的 life_tools-codex-inspector-<uid>/session_summary_cache.sqlite |
脱敏 session summary、token 统计、文件大小和修改时间 | 历史数据缓存,不存 raw JSONL 或完整对话,不写 ~/.codex |
是 |
历史 session 详情页使用分页读取。若列表或 SQLite cache 已经提供可信 SessionSummary,后端会用其中的事件总数作为 hint,读取到当前页事件窗口后停止;今天仍在变化的 rollout 不使用该 hint,继续实时解析。
| 页面 | 内容 |
|---|---|
| Overview | 统计卡片、默认最近一周时间筛选、快捷时间范围、最近半年活跃度 heatmap、月度趋势和最近 session |
| Sessions | 左侧 session 列表,右侧按原生顺序分页展示消息、工具调用、工具结果、系统事件和 token usage 摘要;raw JSONL 按行展开时再加载 |
| Memory | 左侧记忆文件列表,右侧详情预览;支持关键词搜索 |
| Diagnostics | 数据源状态、SQLite schema 探测结果和只读边界 |
顶部菜单负责全局数据源状态和时间范围入口。左侧菜单只负责页面切换。小屏幕下左侧菜单会折叠成页面上方的两列导航。
右上角时间范围影响统计卡片、月度趋势、最近 session 和 Sessions 列表。Activity heatmap 不跟随该筛选,固定展示最近 183 天;鼠标悬停单元格时显示日期和当日对话次数。
大数字使用 k、m、b 简写,分别代表千、百万、十亿。精确值保留在指标悬浮提示中。
Diagnostics 的 Summary cache 面板展示派生 cache 生命周期:
| 状态 | 页面动作 | 后端行为 |
|---|---|---|
missing |
Create cache |
新建 SQLite cache 并后台补齐今天以前的 rollout |
healthy |
Fill missing cache |
只补齐缺失或过期的历史 summary |
corrupt |
Backup and rebuild cache,二次确认 |
将损坏文件改名为 .corrupt.<timestamp>.bak 后新建 cache |
rebuilding |
展示进度 | 返回当前 job,不重复启动 |
disabled |
无操作按钮 | -no-cache 下只实时解析 JSONL |
unavailable |
无操作按钮 | 展示权限、busy timeout 或其他非损坏错误 |
后端 API:
| API | 方法 | 用途 |
|---|---|---|
/api/cache/status |
GET | 返回 cache 状态和 job 进度 |
/api/cache/build |
POST | 创建或补齐 cache;job 运行中返回当前 job |
/api/cache/rebuild |
POST | 仅用于 corrupt cache 的备份重建;job 运行中返回当前 job |
flowchart TD
A["Browser UI (127.0.0.1)"] --> B["Go HTTP server"]
B --> C["Session parser"]
B --> D["Memory reader"]
B --> E["Diagnostics reader"]
C --> F["session_index.jsonl"]
C --> G["sessions/YYYY/MM/DD/rollout-*.jsonl"]
C --> N["tool-owned summary cache.sqlite"]
D --> H["memories/MEMORY.md"]
D --> I["memories/memory_summary.md"]
D --> J["memories/rollout_summaries/*.md"]
E --> K["state_5.sqlite schema"]
E --> L["goals_1.sqlite schema"]
E --> M["memories_1.sqlite schema"]
渲染校验状态:当前机器未安装 mmdc 或 mermaid 命令;通过 npx 临时运行 @mermaid-js/mermaid-cli 需要下载并执行外部包,未被当前安全策略允许。因此该 Mermaid 图已按语法约束编写,但未完成本机实际渲染校验。
- 默认监听
127.0.0.1,只服务当前用户。 - 不实现登录、账号或权限系统,不适合暴露到局域网或公网。
- 安装脚本默认写
$HOME/.local/bin,不写/usr/local、/etc或/var;系统级安装必须显式传--system或--allow-sudo。 - 不写入
~/.codex,不修改 session、memory、SQLite 或配置文件。 - 不读取
auth.json内容。 - 历史 summary cache 默认写在系统 tmp 下的用户隔离目录,cache 目录权限为
0700,文件权限固定为0600;也可以用-cache-path指定位置。缓存不包含 raw JSONL 或完整对话内容,只包含脱敏后的SessionSummary、token 聚合、文件大小和修改时间。 - 损坏 cache 不直接删除,只在用户触发 rebuild 时改名为
.corrupt.<timestamp>.bak后重建。 - JSON 和文本展示层会脱敏常见
auth、token、cookie、password、secret、api_key、access_key字段。 - raw JSONL 展开能力按行读取并展示脱敏后的 JSONL,方便排查格式和事件顺序;页面不默认下载完整 raw JSONL,不用于导出完整敏感内容。
- token usage 只读取 Codex JSONL 中的结构化
token_count元数据,不读取或推断账单、账号或认证信息。
以下截图来自脱敏 fixture,不包含真实对话、真实 token 或内部信息。
| 现象 | 原因 | 处理 |
|---|---|---|
| 页面显示没有 session | session_index.jsonl 或 sessions/ 不存在,或时间筛选太窄 |
查看 Diagnostics,清空时间筛选后刷新 |
| 某个 session 没有详情 | 索引里有 session,但 rollout JSONL 不存在或无法匹配 | 查看 session 列表里的路径和 Diagnostics 数据源 |
| 点击 session 后一直 loading | 冷启动正在建立 session 索引,或目标 JSONL 文件很大 | 等待首次索引完成;详情接口会优先使用缓存中的 id -> path,首屏只返回有限事件,后续通过 Load more events 追加 |
| token 统计为 0 | 该历史 JSONL 没有 event_msg.type=token_count,或格式不同 |
这是兼容性缺失,不影响对话查看;Diagnostics 和 raw JSONL 可用于确认格式 |
| CPU 占用高 | 首次历史范围加载需要解析该范围内尚未缓存的历史 rollout;今天的数据实时解析;直接打开未缓存的超大 session 仍可能扫描目标文件 | 等待首次缓存写入;后续历史请求会复用 SQLite summary cache;历史详情页在有 summary hint 时只扫描当前事件窗口,raw JSONL 按行加载,避免浏览器一次性渲染完整会话 |
| cache 状态是 missing | cache 文件尚未创建 | 在 Diagnostics 点击 Create cache |
| cache 状态是 corrupt | SQLite 返回明确损坏错误 | 在 Diagnostics 二次确认后点击 Backup and rebuild cache |
| cache 状态是 unavailable | 权限、busy timeout 或其他非损坏错误 | 处理错误原因;页面会降级实时解析 JSONL |
| cache 文件权限不符合预期 | 旧版本或手动创建的 cache 文件权限过宽 | 删除 cache 文件后重启,或执行 chmod 600 <cache-path> |
| raw JSONL 缺少部分内容 | 单行过大时后端会限制返回长度 | 到本机文件系统只读查看原文件 |
| SQLite schema 没有展示 | 系统没有 sqlite3 命令,或数据库不存在 |
安装 sqlite3 或忽略 schema 诊断 |
| 浏览器访问不到服务 | 服务未启动或地址不是 127.0.0.1:8787 |
检查启动命令和终端输出 |
推荐验证命令:
go test ./cli/codex_inspector
go build -o output/codex_inspector ./cli/codex_inspector/...
./output/codex_inspector -cache-workers 2页面验证需要启动服务后用 Chrome 检查:
- Overview、Sessions、Memory、Diagnostics 四个页面能正常渲染。
- Chrome console 没有相关 error。
390x844、768x1024、1440x900三类视口没有文字重叠、按钮溢出、菜单遮挡或横向滚动失控。
功能回归样例见 codex_inspector_regression.md。修改页面、API、parser、redaction、SQLite summary cache 或响应式布局时,必须同步更新对应回归样例。



