这份文档定义本仓库在研究 Codex 行为时的一个硬约束:
只有先明确
Codex真正暴露了什么,我们才允许在 bench、报告、CSV 和论文证据里使用这些字段。
它的目的不是描述“我们希望看到什么”,而是描述:
- vendored Codex 原生直接暴露了什么
- bench 可以从这些原生信号中 稳定推导 出什么
- 哪些结论只能算 弱推断
- 哪些东西 当前不可观测
后续所有 schema、probe、report.txt、Markdown 专题和 CSV 数据集,都应以这份契约为准。
本仓库统一使用四类观测级别:
observed- 直接来自 Codex 原生协议、App Server notification 或原生 raw probe
inferred- 由 bench 从多个原生信号稳定推导得到
estimated- 需要额外近似、估算或启发式打分
unobservable- 当前 runtime 没有暴露,不能写成结论性字段
后续每个 artifact 字段都应当能回答:
- 它来自哪一层
- 它依赖哪些 source refs
- 如果不是
observed,它的推导规则是什么
当以下几类信息发生冲突时,优先级应当是:
- 本地真实 run artifact
- 本地 vendored Codex 源码
- 外部架构参考资料
这意味着:
- DeepWiki 和 OpenAI 官方文章只用于帮助理解 seam 和设计 probe
- 真正写进报告和论文里的行为结论,必须能回到本地 artifact
本契约当前主要依据以下本地 seam:
- 协议层
- App Server v2 接口层
- App Server 请求处理
- 外层 bench runtime 集成
- 派生 probe 逻辑
这一层是 bench 的 ground truth。
可以直接观测:
TurnStartedTurnCompleteTurnAborted
直接可拿字段包括:
turn_idmodel_context_windowcollaboration_mode_kindlast_agent_message
可以直接观测:
TokenCount
直接可拿字段包括:
total_token_usage.input_tokenstotal_token_usage.cached_input_tokenstotal_token_usage.output_tokenstotal_token_usage.reasoning_output_tokenstotal_token_usage.total_tokenslast_token_usage.*model_context_windowrate_limits
因此:
- “session 累积 token”
- “最近一次 token delta”
都属于 observed。
可以直接观测:
AgentMessageAgentMessageDeltaAgentReasoningAgentReasoningDeltaAgentReasoningRawContentAgentReasoningRawContentDeltaAgentReasoningSectionBreak
注意:
AgentMessage*属于用户可见输出层AgentReasoning*/AgentReasoningRawContent*是否进入正式研究使用,应额外受实验 policy 约束
可以直接观测:
ExecCommandBeginExecCommandOutputDeltaTerminalInteractionExecCommandEnd
直接可拿字段包括:
call_idprocess_idturn_idcommandcwdparsed_cmdsourceinteraction_inputstdoutstderraggregated_outputexit_codedurationformatted_outputstatus
可以直接观测:
McpToolCallBeginMcpToolCallEnd
直接可拿字段包括:
call_idinvocation.serverinvocation.toolinvocation.argumentsdurationresult
可以直接观测:
PatchApplyBeginPatchApplyEnd
直接可拿字段包括:
call_idturn_idauto_approvedchangesstdoutstderrsuccessstatus
可直接观测:
DynamicToolCallRequestDynamicToolCallResponseViewImageToolCallWebSearchBeginWebSearchEndImageGenerationBeginImageGenerationEnd
在 App Server 层可以直接观测:
thread/start/turn/start请求里的:modelmodel_providerservice_tiercwdapproval_policysandboxbase_instructionsdeveloper_instructionsdynamic_toolsexperimental_raw_eventspersonalitypersist_extended_historystudy_metadata
并且在运行中可以直接观测:
- requested vs active config mismatch details
其中包括:
- model mismatch
- provider mismatch
- service tier mismatch
- cwd mismatch
- approval mismatch
- sandbox mismatch
- personality mismatch
- ignored override 提示
可直接观测:
ContextCompactedThreadRolledBackModelRerouteStreamErrorWarningError
可直接观测:
CollabAgentSpawnBegin/EndCollabAgentInteractionBegin/EndCollabWaitingBegin/EndCollabCloseBegin/EndCollabResumeBegin/End
可直接观测:
StudyMetadataStudyProbeEvent
当前 raw probe 分 subsystem:
ConfigFreezeInstructionChannelTurnLifecycleContextCompactionToolMediationPersistenceReconstructionHarnessFrictionArchitectureMap
这些字段不属于原生协议直接提供,但可以由 bench 通过本地 artifact 稳定重建。
来源:
TurnStarted/CompleteTokenCount.last_token_usageTokenCount.total_token_usage
可稳定推导:
turn_input_tokensturn_output_tokensturn_cached_input_tokensturn_total_tokens
来源:
AgentMessageAgentMessageDelta
可稳定推导:
- 句子数
- 段落数
- bullet 数
- code block 数
- 粗粒度 discourse category
- 可见文本总量
来源:
- message timeline
- exec / MCP / patch timeline
可稳定推导:
tokens_before_first_toolvisible_text_before_first_toolvisible_text_between_tool_callscommentary_to_tool_delaytool_result_to_commentary_delaytool_burst_countsilent_tool_burst_countmicro_narrated_tool_burst_count
来源:
PatchApply*- command timeline
- message timeline
可稳定推导:
- tool 是否后接 patch
- tool 是否后接 verification
- commentary 是否桥接 patch / verification
这些字段可以研究,但必须显式标注 inferred,不能当作原生事实。
当前原生协议里可以直接列出:
- skill catalog
- skill metadata
但当前没有统一的 SkillUsedEvent。
因此:
- “有哪些 skill 可用”是
observed - “这次 run 里某个 skill 被实际使用了”当前通常是
inferred
我们能观察到:
- requested personality
- developer/base instructions 请求
- study probe 中部分 instruction channel 事件
但“每一时刻模型内部实际用哪一层为主”并不是完全直接暴露的。
因此:
instruction_channel_count可以研究- 更强的“某层主导了当前策略”多半属于
inferred
像:
language_overhead_taxtool_mediation_taxharness_overhead_taxbootstrap_env_tax
都属于分析层概念,不是原生事件。
可以研究,但应明确是基于:
- resume / compaction / replacement history
- rediscovery pattern
的 inferred 结论。
这一层不能写成结论性字段。
1. 完整 hidden CoT
即使有 reasoning 相关事件,也不等于我们拿到了模型完整的、稳定定义的内部推理。
我们可以看到 shell / MCP / patch 等显式事件,但不能默认看到了每个内部 orchestration decision。
在当前 vendored Codex 中,这一层暂时没有统一稳定的原生事件。
后续 bench 增强必须遵守:
- 新字段先问“是 observed 还是 inferred”
report.txt中不得把inferred写成“Codex 直接表明”- 所有 CSV 里最好保留:
classificationsource_refs
- 凡是 tool / personality / skill / instruction 层的研究结论,都应当回指至少一个 raw artifact
这份契约是后续几项工作的前置条件:
- 自动报告流水线
- 更细 tool inventory
- 更细 message NLP
- personality mechanism analysis
- 2x2 cohort paired comparison
没有这份契约,就不应该继续盲目扩 schema。
用于高层架构理解,不用于替代本地源码和 artifact: