OpenClaw Codex Happy Path 提示词快照:如何逐层复现 Codex 运行时的模型绑定 Prompt 栈
2026/9/14 10:14:06 网站建设 项目流程

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.diffSHA 绑定的零上下文 diffDiscord 群聊相对基线的无损差异
telegram-heartbeat-codex-tool.md.diffSHA 绑定的零上下文 diffheartbeat 轮次相对基线的无损差异
codex-dynamic-tools.telegram-direct.json完整共享工具目录 JSON工具目录基线
codex-dynamic-tools.discord-group.json顶层工具/命名空间替换 JSONDiscord 场景工具替换
codex-dynamic-tools.heartbeat-turn.json顶层工具/命名空间替换 JSONheartbeat 场景工具替换

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 文件:

  • simulatedWorkspaceParentLocalInstructionFilesIDENTITY.mdSOUL.mdUSER.md(作为 parent-local request instructions);
  • simulatedWorkspaceBootstrapFilesMEMORY.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: 30muserTimezone: 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: neverapprovalsReviewer: user:happy-path 的“yolo”审批姿态;
  • config.features.*:如code_mode(含direct_only_tool_namespaces: ["openclaw_direct"])、shell_toolstandalone_web_searchweb_search: cachedproject_doc_max_bytes: 131072等;
  • dynamicTools:16 个 OpenClaw 动态工具名(agents_listmessagesessions_spawnautomationsgatewaynodessession_statussessions_historysessions_listsessions_searchsessions_sendsubagentsttsweb_fetchweb_searchsessions_yield);
  • sandbox: danger-full-accessmodel: gpt-5.5threadSource: openclaw

Thread Resume Params(L110-L140)在此基础上多了excludeTurns: trueinitialTurnsPage分页视图,Turn Start Params(L142-L187)则携带additionalContextopenclaw_current_sender/openclaw_source_delivery/openclaw_temporal_context)、collaborationModereasoning_effort: medium)与 turninput

重建的模型绑定 prompt 层栈

Reconstructed Model-Bound Prompt Layers(L189-L230)是快照核心。Layer Metadata明确了每一层的来源映射(openClawRuntime.*From字段),例如:

  • developerInstructionsFrom:Codex app-serverthread/start developerInstructions
  • dynamicToolsFromcodex-dynamic-tools.telegram-direct.json
  • parentLocalInstructionsFrom:Codex inference relay 的Responses.instructions
  • userInputFromturn/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)用createTwoFilesPatchcontext: 0FILE_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_mentionedgroup_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/summaryoutcome枚举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.jsoncatalogKindmodels_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-turntelegram-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 Metadatalimitations明确把“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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询