OpenClaw Codex Happy Path 提示词快照:如何逐层复现 Codex 运行时的模型绑定 Prompt 栈
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
OpenClaw 通过一组“happy path”提示词快照(prompt snapshots)机制,把 Codex 运行时(Codex harness + Codex app-server runtime)在默认 OpenAI 模型链路上的线程/轮次参数与模型绑定 prompt 层栈,确定性地固化为可 diff、可校验的仓库夹具。本文围绕test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path目录下 README.md 展开,说明这套快照“抓了什么、分层结构如何、如何再生成与漂移检查”,并结合 生成脚本 与真实夹具文件给出源码级实现证据。读完可掌握:如何阅读一份 Codex 场景快照、如何用pnpm prompt:snapshots:gen/check管理快照漂移、以及“base + SHA 绑定 diff”这种零上下文增量快照的设计思路。
这套快照的定位与覆盖范围
Codex happy path 快照目录(codex-runtime-happy-path)捕获的是 OpenAI/Codex 默认链路的“幸福路径”,用于 prompt 审查(prompt review)。根据 README.md,它覆盖三类场景:
- 通过 Codex harness 与 Codex app-server runtime 的 OpenAI 模型;
- Codex harness 对“tool-only visible source replies”(可见来源回复只允许通过工具发出)的默认覆盖;
- Telegram 直聊、Discord 群聊,以及带
heartbeat_respond动态工具的 heartbeat 轮次。
目录内实际包含 6 个工件(README.md 列出):
| 文件 | 形态 | 角色 |
|---|---|---|
| telegram-direct-codex-message-tool.md | 完整 canonical Markdown 快照 | Telegram 直聊基线 |
| discord-group-codex-message-tool.md.diff | SHA 绑定的零上下文 diff | Discord 群聊相对基线的无损差异 |
| telegram-heartbeat-codex-tool.md.diff | SHA 绑定的零上下文 diff | heartbeat 轮次相对基线的无损差异 |
| codex-dynamic-tools.telegram-direct.json | 完整共享工具目录 JSON | 工具目录基线 |
| codex-dynamic-tools.discord-group.json | 顶层工具/命名空间替换 JSON | Discord 场景工具替换 |
| codex-dynamic-tools.heartbeat-turn.json | 顶层工具/命名空间替换 JSON | heartbeat 场景工具替换 |
Markdown 快照展示的是“选中的 app-server thread/turn 参数 + 重建的模型绑定 prompt 层栈”,具体包含:来自固定 Codex 模型目录夹具的gpt-5.5模型指令、happy-path yolo profile 的 Codex 权限开发者指令、OpenClaw 开发者指令、带模拟 OpenClaw workspace bootstrap 运行时的 turn 输入,以及对完整动态工具目录的引用(README.md)。
快照的分层结构:从 thread 参数到模型绑定 prompt 栈
以基线文件 telegram-direct-codex-message-tool.md 为例,快照由若干固定小节构成,逐层对应 Codex app-server 的输入与重建出的模型 prompt:
场景元数据与有效配置
Scenario Metadata(L12-L33)描述通道(telegram/direct)、模型(gpt-5.5)、provider(openai)、runtime(codex_app_server)、触发器(user),以及模拟的 workspace bootstrap 文件:
simulatedWorkspaceParentLocalInstructionFiles:IDENTITY.md、SOUL.md、USER.md(作为 parent-local request instructions);simulatedWorkspaceBootstrapFiles:MEMORY.md(进入 turn input)。
这里刻意模拟了 Codex 的 workspace bootstrap 路由:AGENTS.md走 Codex 原生项目文档发现(因此不在快照中重复),SOUL.md/IDENTITY.md/USER.md作为父级局部请求指令,MEMORY.md保留在 turn 输入(README.md)。Effective OpenClaw Config(L35-L58)展示默认 heartbeatevery: 30m、userTimezone: UTC,以及messages.groupChat.visibleReplies: message_tool——这正是“tool-only visible replies”的体现。
Thread start / resume / turn start 参数
Thread Start Params(L60-L108)是 Codex app-serverthread/start的入参,关键字段包括:
approvalPolicy: never、approvalsReviewer: user:happy-path 的“yolo”审批姿态;config.features.*:如code_mode(含direct_only_tool_namespaces: ["openclaw_direct"])、shell_tool、standalone_web_search、web_search: cached、project_doc_max_bytes: 131072等;dynamicTools:16 个 OpenClaw 动态工具名(agents_list、message、sessions_spawn、automations、gateway、nodes、session_status、sessions_history、sessions_list、sessions_search、sessions_send、subagents、tts、web_fetch、web_search、sessions_yield);sandbox: danger-full-access、model: gpt-5.5、threadSource: openclaw。
Thread Resume Params(L110-L140)在此基础上多了excludeTurns: true与initialTurnsPage分页视图,Turn Start Params(L142-L187)则携带additionalContext(openclaw_current_sender/openclaw_source_delivery/openclaw_temporal_context)、collaborationMode(reasoning_effort: medium)与 turninput。
重建的模型绑定 prompt 层栈
Reconstructed Model-Bound Prompt Layers(L189-L230)是快照核心。Layer Metadata明确了每一层的来源映射(openClawRuntime.*From字段),例如:
developerInstructionsFrom:Codex app-serverthread/start developerInstructions;dynamicToolsFrom:codex-dynamic-tools.telegram-direct.json;parentLocalInstructionsFrom:Codex inference relay 的Responses.instructions;userInputFrom:turn/start input。
Rough Text Token Estimates(L232-L281)给出每层与总计的字符数/粗估 token,例如codexModelInstructions约 5334 tokens、dynamicToolsJson约 14803 tokens、totalWithDynamicToolsJson约 21419 tokens——这是量化“prompt 体量”的关键证据。
随后各层正文依次展开:Codex 模型指令(System: Codex Model Instructions (gpt-5.5, pragmatic),L283-L441,正文来自 gpt-5.5.pragmatic.instructions.md)、OpenClaw parent-local 上下文(SOUL/IDENTITY/USER,L443-L463)、Codex 权限开发者指令(L465-L470)、OpenClaw runtime 指令(L478-L513)、各 additional context 块(sender/source delivery/temporal,L519-L541)、turn 输入文本(含MEMORY.md占位与openclaw:ctx会话元数据,L543-L568),以及动态工具目录的工具名列表(L574-L595)与关键可见回复工具 spec(message等,L597-L619+)。
增量快照:base + SHA 绑定零上下文 diff 的设计
README 指出:Telegram 的 Markdown 是完整 canonical 快照,而 Discord 与 heartbeat 是“带完整无损差异的可读、SHA 绑定零上下文.md.diff文件”(README.md)。这一设计在 生成脚本 中得到印证:
createCodexPromptSnapshotDelta(scripts/generate-prompt-snapshots.ts#L68-L83)用createTwoFilesPatch以context: 0、FILE_HEADERS_ONLY生成零上下文 patch,并在旧/新文件头写入sha256=<base>/sha256=<target>;materializeCodexPromptSnapshotDelta(scripts/generate-prompt-snapshots.ts#L86-L120)严格校验:patch 必须只有一个、文件名必须匹配 scenario、旧文件 SHA 必须等于 canonical base 的 SHA、以fuzzFactor: 0应用 patch 后产物 SHA 必须等于 target SHA,且重新生成的 delta 必须与提交的一致(“canonical zero-context output”)。任何一项不满足即抛错。
这正是 discord-group-codex-message-tool.md.diff 与 telegram-heartbeat-codex-tool.md.diff 文件头携带sha256=...的原因:它把“差异”与“基线内容”强绑定,避免 base 变更后 diff 悄悄错位。Discord diff 的关键差异包括:群聊需通过message(action=send)显式可见、模型应“mostly lurk”、Discord 群元数据(was_mentioned、group_subject等,见 diff L564-L73);heartbeat diff 则移除openclaw_current_sender、把turnTrigger改为heartbeat、并把heartbeat_respond加入可搜索动态工具(diff L16-L76)。
工具目录 JSON 同样采用 base + replace 模型。codex-dynamic-tools.discord-group.json 内容为{"base": "codex-dynamic-tools.telegram-direct.json", "replace": {}},即指向 Telegram 目录、无顶层替换;heartbeat 场景则携带完整heartbeat_respond工具 spec(L77-L116,必填outcome/notify/summary,outcome枚举no_change/progress/done/blocked/needs_attention)。脚本中CODEX_DYNAMIC_TOOL_BASE_SNAPSHOT也硬编码指向telegram-direct目录(scripts/generate-prompt-snapshots.ts#L39-L40)。
Codex 模型指令夹具的来源
gpt-5.5模型指令层并非手写,而是从与 Codex 运行时使用的同一“模型目录/缓存形态”生成。来源元数据见 gpt-5.5.pragmatic.source.json:catalogPath为<codex-home>/models_cache.json,catalogKind为models_cache,字段为model_messages.instructions_template + model_messages.instructions_variables.personality_pragmatic。正文落在 gpt-5.5.pragmatic.instructions.md。这与 README.md 中“由 Codex 运行时缓存或本地 Codex checkout 再生成”一致。
再生成、物化与漂移检查
所有操作均通过仓库 npm scripts 驱动(package.json 定义):
- 再生成全部快照:
pnpm prompt:snapshots:gen(内部执行node --import ./scripts/tsx.mjs scripts/generate-prompt-snapshots.ts --write); - 漂移检查:
pnpm prompt:snapshots:check(--check); - 从 Codex 运行时缓存/本地 checkout 同步模型夹具:
pnpm prompt:snapshots:sync-codex-model(scripts/sync-codex-model-prompt-fixture.ts)。
物化某个场景的完整、格式化 Markdown 快照(README 中的命令,README.md):
node --import tsx scripts/generate-prompt-snapshots.ts --materialize-prompt discord-group将discord-group换成heartbeat-turn或telegram-direct即可物化对应场景。物化完整工具目录:
node --import tsx scripts/generate-prompt-snapshots.ts --materialize discord-group脚本会校验场景名必须落在CODEX_PROMPT_SNAPSHOT_FILES已知集合内(resolvePromptSnapshotFileName,scripts/generate-prompt-snapshots.ts#L49-L54),并依赖 happy-path-prompt-snapshots 测试辅助 构造快照文件,配合 prompt-snapshot-files 工具 清理陈旧工件(deleteStalePromptSnapshotFiles,见脚本头部导入 scripts/generate-prompt-snapshots.ts#L18-L21)。
明确边界:这不是逐字节的原始请求抓取
需要强调,README(L35)与快照limitations(L214-L218)都声明:这些快照不是Codex core 原始 OpenAI 请求的字节级抓取。Codex 运行时仍可在 OpenClaw 发送 thread/turn 参数后,追加其自有的AGENTS.md(原生项目文档)、环境上下文、memories、app/plugin 指令与内建协作模式指令。从源码结构看,Layer Metadata的limitations明确把“native truncation/deduplication/retained history 不被模拟”以及“provider tool 序列化”列为运行时所有(runtime-owned)的缺口,直到 Codex 暴露渲染 prompt 检查 API。因此,快照的价值在于“OpenClaw 侧可控输入的确定性审查与漂移门禁”,而非对 Codex 内部最终请求的完整还原。
小结
codex-runtime-happy-path快照目录把 Codex 默认链路的 thread/turn 参数与模型绑定 prompt 层栈固化为可复现、可 diff、可校验的仓库夹具:canonical Markdown 提供完整基线,.md.diff以 SHA 绑定零上下文差异表达场景增量,工具目录 JSON 以 base + replace 表达工具替换。再生成、物化与漂移检查全部由 package.json 中的prompt:snapshots:gen/check/sync-codex-model驱动,底层逻辑集中在 generate-prompt-snapshots.ts。对需要审计 Codex 运行时 prompt 构成、验证 happy-path 行为、或在改动后防止快照漂移的开发者,这套机制提供了“既有完整可读快照、又有严格哈希门禁”的确定性基础。
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考