GPT-5.6 推出之后,Codex 也随之推出了不少新特性。这篇分享其中两个新特性,以及一个我自己在用的技巧。

输入框里的 @ 可以选自定义 Agent 和之前的话题

以前在输入框里输入 @ 的时候,我们可以 @ 项目里的文件,以及触发一些新的模式。现在 @ 的列表里多了一类内容:我们自己创建的自定义 Agent。

@ 菜单里的自定义子 Agent

比如我自己创建的探索代码的子 Agent、视频发布的子 Agent,都可以直接通过 @ 的方式指定。

更实用的是,我们还可以输入左侧话题的标题,让当前 Agent 快速获取之前的上下文。比如我有一个创建 oil-slides 介绍 PPT 的话题,输入 @ 然后打「创建」,就能在列表里选中这个话题。

通过 @ 选中之前的话题

在新的话题里 @ 这个话题之后,当前 Agent 就能获取之前对话的上下文信息。

在新话题里 @ 之前的话题

这和直接点击话题旁边的 Fork 有一个区别:在新话题里 @ 出来的上下文更加干净。它不会包含工具调用的结果,只保留我们的对话信息以及大概调用了哪些工具,帮助当前话题快速了解之前聊过什么。我觉得这个非常实用。

对话里的可视化交互表单

第二个新特性是,Codex 的对话里现在可以渲染很好看的交互表单。下面是我的一个 PPT Skill 生成的表单,可以在里面选择大纲方式、视觉方向、文字类型和配色。

Codex 对话里渲染的可视化表单

之前类似的需求是 AskUserQuestion 这样的纯选项交互,现在可以更加可视化地查看。每切换一个选项,底下的预览就会即时更新,提前看到最终会生成的效果。

切换配色后预览即时更新

选好之后点击「采用并继续」,Codex 会把当前的选择整理成一条结构化的信息发送出去。相比去外部打开一个 HTML,或者只面对 A B C D 几个文字选项,这种方式直观得多。它的原理是 Codex 在话题里写一个 HTML 作为对话的交互界面,再把这个交互的结果作为上下文输入。

想让 Codex 写这样的交互表单,除了直接跟它说,还可以在 Plugins 里看到一个新的 Skill 叫 visualize,它告诉 Codex 怎样创建这种对话式表单。我觉得现在很多 Skill 都可以用上这个新工具,比如设计类 Skill 和 PPT Skill,可以用 visualize 优化对话过程中的体验。

一个技巧:解决 ImageGen 生图后的线程卡顿

在 Codex 里输入 /imagegen 可以使用 ImageGen Skill 让 Codex 生成图片。

在输入框里使用 ImageGen Skill

但深度使用过这个 Skill 的话会发现,生成多张图片之后,这个线程会变得特别卡。我自己用的过程中,有时生成四五张图片之后,线程就经常卡在执行工具的状态或者思考的状态,没办法继续对话,只能新建话题,使用负担很大。

我排查了一下这个问题,并把原始问题、原因和修复整理成了一个页面。这条真实的任务里,本地会话的 JSONL 文件已经达到 35.6 MB,其中约 29.1 MiB 是图片 Base64 内容,日志里累计了 30 次图片输入记录。

ImageGen 卡顿问题的排查页面

主要原因是这样的:Codex 调用生图工具的时候,工具返回的生图结果是一个 Base64 字符串。Base64 是把图片从二进制转换成字符串的形式,这个字符串非常大,占用的上下文很长,尤其是一张复杂的图片。而且同一份 Base64 会在会话记录里保存两次:生图工具返回结果时写一次,后续 Codex 通过 input_image 查看这张图片时再读一次。生成几张图之后,线程大小就到 30 多 MB 了。

同一份 Base64 在会话记录里重复累积

之后我优化了一下 ImageGen Skill 的默认执行方式:

  • 默认由专用的子 Agent 调用生图工具,主 Agent 只负责整理需求,不直接生图,这样主线程不会膨胀得那么快;
  • 子 Agent 完成后只把图片文件的路径返回给主 Agent,主 Agent 只需要读图一次;
  • 本地参考图优先使用 referenced_image_paths 传入缩略图,读图时的 Base64 就不会那么长。

修改后的 ImageGen Skill 默认执行方式

完整的修改提示词如下,可以直接交给 Codex 执行:

请修改:

/Users/linzhihuang/.codex/skills/.system/imagegen/SKILL.md

目标:避免 ImageGen 生成和查看的图片 Base64 让主线程膨胀、卡顿。

要求:

1. 默认由专用子 Agent 调用 `image_gen`、查看参考图、迭代和做视觉 QA;主 Agent 只负责整理需求、prompt、输入文件路径和最终项目接入。
2. 子 Agent 完成后只返回最终文件路径、最终 prompt、生成模式和简短 QA,不得把图片、Base64 或废弃变体传回主线程。
3. 后续修改继续交给同一个子 Agent,不要让主 Agent 重新查看或生成。
4. 本地参考图优先直接使用 `referenced_image_paths`;确实需要查看时,只查看 512–768px 缩略图或 contact sheet,不逐张加载高分辨率原图。
5. `image_gen` 输出已对执行生成的 Agent 可见,不要再次调用 `view_image` 查看同一结果。
6. 尺寸、格式、透明通道、边缘和锚点优先使用本地脚本验证。
7. 子 Agent 不可用、并发已满、图片无法通过本地路径传递,或用户明确要求主线程内联预览时,才降级到主线程;降级时最多展示一张最终图。
8. 保持现有 built-in 优先、CLI 需用户确认、透明图、保存路径及非覆盖规则不变;不要修改 `scripts/image_gen.py`。
9. 做增量修改,避免重复规则,保持 SKILL.md 在 500 行以内。
10. 修改后运行 skill-creator 的 `quick_validate.py`,检查 diff,并报告修改内容和验证结果。不要为测试实际生成图片。

我对优化后的 ImageGen 还没有特别深入的使用,后续会继续优化这个 Skill 并深入体验一下,确认它是不是真的能解决主线程卡顿的问题。这里先提供一个解决问题的方向。