CODEX 文档模式规格
July 22, 2026 · View on GitHub
状态
Windows 与 macOS 的 Phase 1、Phase 2 和 Phase 3 均已实现,并通过 renderer 与主题仓库自动化测试。发布前仍需在当前 Codex 任务页完成实机验证。本规格定义非政府化的文档式回复呈现、可配置的回复提示词包装和圈叉反馈文字;不得声称制作、签发或代表政府官方文件。
Windows 是首个目标平台;在可行范围内,renderer 合约应可移植到 macOS 注入器。
产品定义
CODEX 文档模式将每条助手回复渲染为正式、克制的 CODEX 风格文档,同时保留官方 Codex Desktop 的导航、消息、输入框、项目和任务控制。Phase 3 还在原生 composer 左侧加入一个紧凑的圈叉反馈标记板。
功能彼此独立:
- 回复呈现:将助手回复渲染为文档。
- 回复引导:Dream Skin 文档模式运行期间默认、无感地使用经用户提供资料定义的运行期 prompt wrapper,引导模型按指定文体回复。
- 反馈标记:用户在 composer 侧的紧凑标记板画红圈或红叉;本地算法高置信识别后,将可见反馈文字写入当前 composer。composer 原本为空且自动发送启用时,系统随后触发 Codex 原生发送;其余情况绝不自动发送。
非目标
- 不模仿中国政府机构、国徽、印章、文号、密级、官方签发、审批或法律文书。
- 不修改官方 Codex 可执行文件、
app.asar、WindowsApps、签名、API Key、Base URL、认证或后端请求协议。 - 不修改左侧栏的标签、结构、样式、行为或导航。
- 不把用户消息渲染成文档,也不替换、删除或重排用户输入;Phase 3 仅按本规格向当前 composer 追加可见、可编辑的反馈文字。
- 首版不支持 PDF、DOCX、OCR、本地 ML、全文手写批注、多页批示、协作批示或永久批示存储。
- 不拦截、重写、重放或构造 Codex 上传网络请求;不得为反馈标记构造附件、截图、文件选择自动化或任何替代上传路径。
交互边界
官方 Codex Desktop
|
| 本机回环 CDP 注入
v
CODEX 文档模式
|- 助手回复文档呈现
|- 可配置回复提示词包装
`- composer 圈叉反馈文字与受限自动发送
所有装饰只能注入经验证的 Codex renderer target。装饰层不得拦截原生控件;现有回环 CDP 与 target 身份校验规则仍为强制要求。
回复呈现
范围
只装饰模型作者消息。优先使用稳定 renderer 标识,例如 [data-message-author-role="assistant"] 的祖先节点;不得依据消息文本或位置选择器识别。
每条命中的消息添加幂等文档壳:
美国科代克斯技术服务有限公司
------------------------------------------------
尊敬的董事长:
[原生助手回复内容]
此致
山姆·奥特曼
YYYY年M月D日
原生回复 DOM 始终是唯一事实来源。文档壳不得克隆内容、替换消息节点、改变链接、消耗选择行为或改变代码复制控件。
视觉与字体
- 题头固定为
美国科代克斯技术服务有限公司;演示稿必须保留,以避免声称真实公司签发。 - 使用克制的红色小标宋风格题头及红线;致意固定为
尊敬的董事长:,不得推定职务、组织或收件人身份。 此致左对齐;山姆·奥特曼与本机日期分两行右对齐。这是演示界面落款,不是公司签名、授权、审批或法律签发。- 纸面为暖白、正文为近黑、边框为低对比中性色;避免沉浸式壁纸和大阴影。
- 文档壳圆角为
0至2px;任务页、侧栏、用户消息、composer 和原生 chrome 保持 Codex 自身外观。 - 流式回复出现消息容器后立即显示题头、标题区域、称谓与正文纸面,不闪烁、不重复;
此致、署名与日期只在流式结束后显示。
| 内容 | 首选字体 | 回退 |
|---|---|---|
| 演示题头 | 小标宋风格 | 衬线标题字体 |
| 自然语言正文 | 仿宋风格 | FangSong、Noto Serif CJK SC、serif |
| Markdown H1 | 黑体风格 | SimHei、sans-serif |
| Markdown H2 | 楷体风格 | KaiTi、serif |
| 行内代码、代码块、命令、JSON、路径 | Cascadia Code / JetBrains Mono | monospace |
| 表格、元数据、紧凑控件 | Codex 原生 UI 字体 | 原有 UI 回退 |
字体必须有授权来源或系统回退。不得将 pre、code、终端输出、路径、JSON 或 diff 改为仿宋;不得改变文本、标题、列表、链接、复制按钮、表格、选择或键盘导航。原生 Markdown h1 可样式化为文档标题,但不得凭空提取或生成标题。
主题合约
{
"schemaVersion": 2,
"id": "preset-codex-document",
"name": "CODEX Document",
"appearance": "light",
"mode": "codex-document",
"document": {
"masthead": "美国科代克斯技术服务有限公司",
"greeting": "尊敬的董事长:",
"closing": "此致",
"signature": "山姆·奥特曼",
"accent": "#8B1E1E",
"surface": "#FCFBF7",
"text": "#24201D",
"border": "#D8D1C6"
}
}
mode: "codex-document" 禁用本预设原有的全窗口艺术背景。文档模式 CSS 必须限定在助手文档壳中,且不得包含 aside.app-shell-left-panel 选择器。
Phase 2:回复提示词包装
目的与边界
Phase 2 在 Dream Skin 文档模式运行期间默认启用一份运行期 prompt wrapper,以引导模型采用指定的正式文风并返回结构化标题。具体规则以 codex-official-prose-style-guide.md、项目级 codex-official-prose-style Skill reference 和 Windows 运行时镜像为唯一规则源;三者内容逐字一致,且仅提取语言风格、表达习惯、惯用语和组织方法,不迁移参考资料中的具体业务内容、选材、机关身份或法定格式。
包装器必须保持可审计:其来源、版本、启用范围和完整文本都保存在项目中。它不得伪装为系统、平台、政府或组织授权,不得表示任何回复为正式文件、签发文件或具有法律效力。
实现方案
采用“完整文风规则源 + 运行期消息 wrapper + 结构化标题渲染”的三层实现:
- 将文风规则维护在独立指南、项目级 Skill reference 和 Windows 运行时镜像中,版本化、可审阅且与用户内容隔离。
- Dream Skin 启用期间,在用户触发 Codex 原生发送动作时,renderer 在本次消息中临时加入完整规则和结构化输出契约;不改写网络请求、不重放消息、不新增后端协议。
- 临时 wrapper 要求模型先输出唯一 JSON metadata 代码块:
{"codex_document":{"title":"关于{事项}的{文种}"}},随后才输出正常 Markdown。title是 renderer 渲染文档标题的唯一来源;不得从正文、位置或文本猜测标题。 - wrapper 置于 Markdown HTML 注释中发送,使模型收到完整上下文而用户消息、历史消息和 composer 只显示原始请求;wrapper 不常驻 composer、不增加可见控制、不写入
config.toml或全局 Codex 设置。 - pause、remove、reload、reapply、restore 和退出 Dream Skin 时必须卸载发送监听;若清理发生在临时 wrapper 写入期间,必须立即恢复原始草稿。之后的普通 Codex 使用不得携带该 wrapper。
集成约束
- Wrapper 仅在当前 Dream Skin document-mode renderer 运行时和用户实际发送时生效;不写入任何 Codex 持久配置。
- 包装器只影响正在发送的后续用户消息,不改写既有用户消息、助手回复、项目文件或本地任务内容。
- 用户原始输入必须在临时包装前后保持字节等价;异常、取消、暂停和退出均恢复原始草稿。
- 结构化 metadata 必须是单独 JSON 代码块,且只接受
codex_document.title的非空单行字符串;标题必须为关于{事项}的{文种},最大 28 个汉字或 56 个字符。 - 文档页面按“题头、标题、称谓、正文、结尾、署名、日期”排列;正文使用可读性优先的仿宋体系、自然段首行缩进两字,列表和代码不缩进。法定版头、文号、密级、印章、签发等要素不渲染。
- 原生回复 DOM 仍是唯一事实来源:metadata 块可被 CSS 隐藏但不得删除,标题渲染块只反映已解析字段。
- 资料、配置和可能包含的敏感内容只存于用户明确指定的位置;不得上传、同步或用于与该请求无关的处理。
待补充资料
已从用户提供资料中提取第一版规则指南和项目级 Skill。后续如补充资料,应先更新指南、Skill reference 和 Windows 运行时镜像,并验证三者内容一致后再重新打包 wrapper。
Phase 3:圈叉反馈文字与自动发送
目的与边界
Phase 3 不在助手文档上覆盖 canvas,也不改写助手原回复。在原生 composer 左侧、紧邻 添加文件等内容 控件的位置,加入一个紧凑、固定尺寸的标记板;其大小与 composer 工具区相称,不挤压输入框,不覆盖原生加号、权限状态、模型选择或发送按钮。识别成功时仅向当前 composer 追加可见、可编辑的反馈文字,不得替换、删除或重排既有草稿。
标记板是 composer 局部的独立 canvas,只在其自身边界内处理 pointer 事件,不安装 document-level pointer handler,不影响原生输入、文本选择、链接、复制、滚动或消息操作。MVP 仅将高置信红色圈映射为同意、红色叉映射为不同意;不支持自由手写文字、划线、箭头、颜色、橡皮擦或全文批注。
工作流
1. 用户在 composer 左侧标记板绘制红圈或红叉;手势开始时记录 composer 是否为空。
2. 用户结束绘制后,标记板在短暂稳定窗口内完成本地识别,并保留当前笔画预览。
3. 高置信圈向当前 composer 追加 `【反馈:同意】`;高置信叉追加 `【反馈:不同意】`。无法高置信识别时不改写 composer。
4. 若手势开始时 composer 为空、自动发送已启用、Codex 原生发送按钮可用且未处于生成或发送中,系统确认文字已进入 composer 后仅点击一次原生发送按钮。
5. 若 composer 原本非空、自动发送关闭、发送按钮不可用或状态不稳定,只追加可见文字,用户自行使用 Codex 原生发送按钮。
同一稳定手势至多追加一次反馈文字、至多自动发送一次。没有笔画、低置信图形或识别结果并列时不写入、不发送;标记板保留笔画和失败状态,用户可重画。清空或撤销不会删除已经写入 composer 的反馈文字,用户始终可按普通文本编辑它。系统不会构造附件、不会自动上传;自动发送只触发 Codex 原生发送控件。
标记板、识别与发送
- 标记板采用透明背景、DPR 感知 canvas;它仅保存和处理自身的 pointer 坐标,不导出 PNG、不截取回复、侧栏、任务头、composer 或其他应用 chrome。
- 每个手势会话以 pointerdown 开始;最后一次 pointerup 后等待 300ms 至 500ms 的稳定窗口,以允许用户画两笔叉或连笔叉。稳定窗口内的新 pointerdown 合并到同一会话。
- 坐标以标记板 CSS 宽高归一化,按最小距离重采样并轻度平滑;DPR 只影响绘制清晰度,不参与识别阈值。
- 圈候选必须是单条主笔画:首尾距离相对包围盒对角线足够小、绕中心角覆盖接近一周、绕行量接近一圈、经主轴归一化后的半径方差较小,且不存在明显的自交或螺旋特征。该规则接受圆和椭圆,但拒绝未闭合弧线、随手涂写和螺旋线。
- 叉候选使用两条鲁棒直线的拟合,而不是按笔画数量判断。先从所有重采样点拟合一条有足够长度和支持点的直线,再拟合第二条;两线必须在各自有效线段内部相交、夹角充分远离平行、长度和点覆盖均衡。允许一笔连续画成的叉:连接两条对角线的短折返段可作为有限离群点,但其余笔迹必须由两条相交直线解释。该规则拒绝 V、Y、T、Z 和两条只在端点相接的线。
- 圈和叉分别计算 0 到 1 的置信度。仅当最高置信度超过保守阈值,且与第二高置信度具有最小差距时才映射文字;其余情况统一为“未识别”,不写入、不发送。阈值必须由真实鼠标、触控板和触屏样本校准,不得仅按理想几何图形设定。
- 每个稳定手势版本使用规范化笔画数据计算幂等标识;同一内容不得因重渲染、流式更新或重复 pointer 事件重复写入或发送。后续实质性笔画变更才可创建新的映射结果。
- 标记板是 composer 左侧的独立手写区,只包含 canvas,不显示撤销、清空或自动发送控件。每次识别结束后再次落笔会自动清空上一份笔迹并开始新手势。自动发送由主题配置控制,默认启用,但只适用于手势开始时 composer 为空的情况;不得有独立的伪造发送按钮。
- 发送只能通过 Codex 原生发送控件,且必须先确认可见反馈文字已进入当前 composer。不得使用 Enter 事件模拟、重放、构造网络请求或绕过原生发送状态。
实施计划
Phase 1:助手回复文档壳
- 添加
preset-codex-document主题。 - 扩展
renderer-inject.js,识别助手消息,为每条消息幂等挂载题头、致意、结束语、署名与日期。 - 添加限定范围的题头、红线、纸面和字体 CSS。
- pause、remove、reload、restore、reapply 必须清理所有文档节点、类与样式资源。
- 不添加改变左侧栏的选择器。
Phase 2:回复提示词包装
- 维护
codex-official-prose-style-guide.md、项目级 Skill reference 与 Windows 运行时镜像三份逐字一致的完整文风规则,且不含业务内容、选材、机构身份或法定格式。 - Dream Skin document mode 默认安装无感发送 wrapper;wrapper 只在一次原生发送事件中临时存在,之后恢复用户可见草稿。
- 要求模型先输出
codex_document.titleJSON metadata,再输出正常 Markdown;renderer 只根据这个字段渲染文档标题。 - 测试点击发送、Enter 发送、暂停、remove、reload、reapply 和 restore 后 wrapper 监听与草稿恢复行为;测试不改写网络请求或既有会话内容。
Phase 3:圈叉反馈文字与自动发送
- 在 composer 左侧工具区加入紧凑的红圈/红叉标记板,不改变或覆盖原生 composer 控件;不在
.codex-document-response上安装批示层。 - 实现位于 composer 左侧的独立、DPR 感知手写 canvas 和圈叉本地识别;不显示撤销、清空或自动发送控件,也不支持手写文字或自由批注。识别结束后再次落笔自动开始新手势。
- 对圈追加
【反馈:同意】,对叉追加【反馈:不同意】;低置信结果不改写 composer。不得替换、删除或重排原有草稿。 - 验证空 composer 的高置信手势只会向原生 composer 写入一次可见文字,并在确认原生发送按钮可用后自动发送一次;有既有草稿或任一不稳定状态时不得自动发送。
- 保留原回复;识别或发送失败时保留标记并可重试,不得丢失用户笔画或重复发送。
验收标准
回复呈现
- 每条已完成助手回复恰有一个演示题头、致意、结束语、署名和日期块;流式助手回复在完成前只显示题头、标题区域、致意和正文纸面。用户消息没有文档样式。
- 左侧栏无视觉或行为变化;代码、终端、diff 和行内代码保持等宽且复制/选择可用。
- 链接、表格、Markdown、按钮和消息操作可交互;流式、路由切换、重载与清理不产生重复或残留。
- 不得出现政府文件、政府行为或官方法律效力声明。
回复提示词包装
- 文风规则来自独立指南、项目级 Skill reference 与 Windows 运行时镜像,三者逐字一致,且不包含用户业务内容、选材、机构身份、法定格式或固定套语。
- 当前 Dream Skin 会话中每次原生发送都携带完整 wrapper;pause、remove、reload、reapply、restore 或退出后不再携带。
- wrapper 要求并接收唯一的
codex_document.title字段;有字段时正确渲染标题,无字段或非法字段时不猜测标题。 - 原始用户输入、既有会话内容和本地项目文件保持不变;不改写网络请求、不重放或构造额外发送。
圈叉反馈文字与自动发送
- 标记板位于 composer 左侧工具区,尺寸稳定且不遮挡、挤压或替换原生加号、权限状态、模型选择、输入框或发送按钮。
- 标记板之外的所有页面控件和文本交互保持原生;不安装全局 pointer handler,也不改变助手文档 DOM。
- 高置信圈只追加一次可见
【反馈:同意】,高置信叉只追加一次可见【反馈:不同意】;低置信、歧义或空笔画不改写 composer。 - 圈、椭圆、两笔叉和连笔叉在校准样本上正确识别;未闭合弧线、涂写、螺旋、V、Y、T、Z 和端点相接的两线不得误映射为同意或不同意。
- 每个稳定手势版本至多写入一次、至多自动发送一次;重渲染、流式更新、重复 pointer 事件和发送状态变化不得造成重复。撤销、清空不删除已写入的普通文本。
- 只有手势开始时 composer 为空、自动发送启用、反馈文字已可见、且 Codex 原生发送按钮可用时才自动发送;其余情况不自动发送。绝不构造附件、上传或网络请求。
测试策略
- 单元测试 renderer 对助手/用户消息、辅助窗口、流式、路由与清理的幂等性。
- 回归测试禁止文档 CSS 选择侧栏,并验证字体回退与代码等宽字体。
- 测试提示词包装的启用、停用、版本切换、用户输入保真、配置来源可审计性和受支持入口的失败处理。
- 测试 composer 标记板的稳定布局、canvas 边界、DPR 缩放、圈叉识别、连笔叉、两笔叉、撤销、清空、置信度拒绝、去重和状态清理;验证标记板外的原生 composer 与消息控件保持可用。
- 为鼠标、触控板和触屏收集带标签的圈、椭圆、两笔叉、连笔叉、未闭合弧线、涂写、螺旋、V、Y、T、Z 与端点相接笔迹;以固定回归夹具校准阈值,重点限制“不同意”被误判为“同意”或反之。
- 测试空 composer 自动发送、已有草稿不自动发送、发送按钮禁用不自动发送、生成中不自动发送、识别失败不发送、写入失败不发送、发送失败不重试、以及同一手势不会重复写入或发送。发布前在真实 Codex 任务页验证可见文本映射和绝不重复自动发送。
待决事项
- 各捆绑字体的最终授权来源与再分发政策。
- 当前 Codex 构建中稳定的助手消息选择器,以及 composer、原生发送按钮、发送禁用状态和生成中状态的稳定选择器。
- 后续用户补充的文体资料和确认后的指令文本版本。