Codex & Claude Chats
在 VS Code 的活动栏中显示 Codex 和 Claude Code 的本地聊天历史,可选择只看当前工作区目录、或跨目录查看全部会话(按目录分组)。点击会话会在对应的官方扩展中打开(都是编辑器区域,精确定位到这条会话)。行内还有终端图标,点了会新开终端分别执行 codex resume <id> / claude --resume <id>,同样能精确恢复到这条对话;旁边有别的模型来源可选时,还会多一个 🔀 图标,可以换个来源继续这条会话的终端对话。
这个界面是一个内嵌网页(VS Code Webview),不是原生树形列表:所有筛选/排序控件常驻在顶部工具栏里,点选立即生效,不会弹出单独的选择框;星标和备注也是直接点击行内图标操作,不需要右键菜单。
使用方式
- 在 VS Code 中打开一个本地文件夹或多根工作区。
- 点击活动栏里的 Codex & Claude Chats 图标。
- 顶部工具栏(常驻,不是弹出菜单):刷新按钮;工具下拉(Codex / Claude Code,只有两种都存在时才显示);查看范围下拉(仅看当前目录 / 全部会话按目录分组);排序下拉(最后活动时间 / 创建时间);按模型来源筛选下拉(只对 Codex 会话生效,只有检测到来源时才显示);按创建渠道筛选下拉(CLI 终端 / VS Code)。选择立即应用。
- 按模型来源筛选会读取 Codex
config.toml 里配置的全部 model_providers(即使还没有任何会话),分成"官方"和"自定义"两组——Codex 内置的官方(ChatGPT/OpenAI)后端不需要在 config.toml 里配置也会始终出现;会话描述里的来源标签用配置里的名称,而不是内部 key。
- 每条会话/每个目录行上直接有三颗小星星,点第几颗就设成几级重要程度(再点一次当前等级可以清零),星标越高排序越靠前;备注图标点开是行内输入框,填完点"保存"即可,不需要弹窗。目录行右侧还有一个"在文件资源管理器中打开"的图标,直接进入该目录(不是"在上级目录里选中它")。
- 想要更宽的显示区域:点工具栏的"在编辑器区域打开"图标,会把同一个界面在编辑器标签页里再开一份(跟侧栏是同一份数据,两边都会实时刷新);也可以把左侧"Codex & Claude Chats"这个视图直接拖到底部面板区域,那里默认横跨整个窗口宽度。
多根工作区会合并显示各根目录的聊天。"当前目录"视图下未打开文件夹时不会显示任何历史,避免把其他项目的聊天混在一起;"全部会话"视图不受此限制。后台自动刷新不会打断你在"全部会话"视图里展开的目录、或正在编辑的备注输入框——刷新只推送新数据,不会整个重绘界面。
备注、重要程度、来源筛选与排序方式偏好保存在 VS Code 全局状态中,跨工作区、跨窗口共享;侧栏展开的目录状态保存在 webview 自身的状态里,跨会话重开也能记住。
依赖与兼容性
- VS Code 1.95 或更高版本。支持本地工作区和 Remote-SSH/VS Code Server;远程使用时,Codex 与本扩展须在同一台远程机器上。
- 官方 Codex 扩展(
openai.chatgpt)用于打开对应聊天;即使尚未安装,目录会话列表仍可正常读取。
- 本机可运行 Codex。默认优先使用 PATH 中的
codex;在 Windows 上若找不到,会自动尝试官方 Codex 扩展自带的可执行文件。也可在设置中填写 codexWorkspaceChats.codexExecutable。
扩展通过 Codex 官方本地 app-server 读取会话,不会修改 .codex 中的聊天记录,也不会把聊天内容上传到其他服务。
关于跨来源可见性:Codex 官方的 thread/list 接口只会返回当前生效来源(config.toml 里 model_provider 指向的那个)的会话,切换来源后旧来源的会话会从接口里"消失"(不是删除,只是这个接口不返回)。为了让"全部会话"和按来源筛选能看到所有来源的历史,本扩展会额外直接扫描 ~/.codex/sessions/ 下的回放文件来补全数据,两边结果去重合并(接口数据优先)。这部分补全数据依赖 Codex 内部未公开的文件格式,没有官方接口那样准确的预览文字和已归档过滤。
关于 Claude Code 会话:Claude Code 没有类似 thread/list 的本地查询接口,所以它的会话完全来自直接扫描 ~/.claude/projects/ 下的转录文件(.jsonl)。标题读取转录文件里 Claude Code 自己写入的 AI 总结记录,没有的话退回显示第一条真实用户消息。
跳转说明
点击后优先使用官方 Codex 的本地会话深链;若深链不可用,会尝试打开官方的会话标签页,最后至少聚焦官方 Codex 侧栏。深链属于官方扩展的本地集成接口,未来官方扩展大幅改版时可能需要同步适配。
点击 Claude Code 会话使用的是它自己的 vscode://anthropic.claude-code/open?session=<id> 深链(反编译它的扩展代码确认的,跟它自己"在主编辑器中打开"用的是同一条命令),会精确定位到这条会话——但只能开在编辑器区域,不能开进侧边栏:官方插件里唯一能把辅助栏调出来的命令(sidebar.open)不接受会话 ID,registerWebviewViewProvider 的 resolve 回调也没有"该显示哪条会话"这个参数通道,只能聚焦侧边栏原本开着的对话,没法保证跳对,所以选了"跳对会话"优先于"开在侧边栏"。
行内的 🔀 图标(有别的来源可选时才出现)可以让这次终端恢复换一个模型来源继续,不用非得用会话原来的那个:Codex 读 config.toml 里配置的 [model_providers.*];Claude Code 读"Claude Switch"插件(如果装了的话)自己保存的预设。两边都只是给这一次的终端命令临时加参数/环境变量,不会改 config.toml 的全局默认来源,不会碰 Claude Switch 自己的 ~/.claude/settings.json,也不会改会话文件本身记录的来源——只影响这一次恢复。
Codex 会话的这个面板里还有一个"在 VS Code 中打开"按钮,跟终端那个的实现方式完全不同,而且代价大得多:实测确认(用一个故意连不通的自定义来源地址做的确定性验证,不依赖账号额度这种会波动的东西)不管是终端 codex resume 还是官方 VS Code 扩展的恢复方式,实际发消息用哪个来源只看 config.toml 的全局默认值,跟会话文件里记录的来源完全无关——那个字段只是历史展示标签。所以要让官方扩展真的换来源发消息,只能改这个全局配置;而且这个值只在 Codex 后台进程启动那一刻读一次,改配置对已经在跑的进程没用,必须靠"重新加载窗口"重启它。点这个按钮会先弹确认框说明这两点代价(全局设置 + 强制重载),确认后才会真的切换、重新加载,加载完自动跳转回这条会话。工具栏"🔧 当前来源"就是读这个全局配置的实际值。
设置
| 设置 |
默认值 |
说明 |
codexWorkspaceChats.codexExecutable |
codex |
Codex 命令或完整可执行文件路径。 |
codexWorkspaceChats.maxSessions |
100 |
当前工作区最多显示的会话数。 |
codexWorkspaceChats.autoRefreshSeconds |
30 |
侧栏可见时的自动刷新秒数;0 表示关闭。 |
隐私
会话标题或首条预览会显示在你的 VS Code 侧栏中,这是为了便于识别聊天。扩展本身不写入、不删除、不上传 Codex 会话内容。
License
MIT