1. 目标在模型外持久化
thread_goals 表以 thread_id 为主键,保存 objective、
status、token budget、tokens used、time used。即使上下文被压缩,目标状态仍在 sqlite。
Codex CLI internals
结论:goal 不是让模型自己“记住”一切,而是把目标持久化到线程状态库,
在每轮空闲时由运行时重新注入目标、预算和完成审计要求,再启动下一轮 turn。
这让 agent 可以跨多轮、跨压缩、跨 resume 继续工作,直到明确调用
update_goal(status = complete)。
点击流程图节点查看源码角色。绿色回路是长时间工作的核心: 只要目标仍是 active 且线程空闲,运行时就会注入 continuation prompt 并启动下一轮。
长时间工作的能力来自运行时调度,不是来自一次模型请求的超长输出。 每轮结束后,系统主动决定是否再开一轮。
thread_goals 表以 thread_id 为主键,保存 objective、
status、token budget、tokens used、time used。即使上下文被压缩,目标状态仍在 sqlite。
continuation prompt 把 objective 包进 <untrusted_objective>,
附带预算与完成审计要求。模型每次循环看到的是当前持久目标,不依赖压缩摘要是否写全。
TurnFinished 清掉 active turn 后调用 MaybeContinueIfIdle。
如果没有排队输入、没有触发消息、目标仍 active,就创建新 turn 并继续。
下面三个视角分别回答:命令怎么进来、状态怎么保存、压缩后怎么恢复。
TUI 的 /goal 会打开目标菜单或把 objective 交给 app-server 的
thread/goal/set。模型侧有三个 Responses API 工具:
get_goal 读取状态,create_goal 创建目标,
update_goal 只能设置 complete。
GoalRuntimeEvent 把 turn 生命周期抽象成事件:
TurnStarted 建立记账基线,工具完成时累计 token 和 wall clock,
TurnFinished 结束本轮并在空闲时触发 MaybeContinueIfIdle。
continuation 候选成立时,运行时把 developer prompt 放进下一轮 pending input,
然后 start_task。
compaction 会生成 summary,并用 replacement_history
替换内存中的对话历史;resume 时也优先按 compaction 记录重建历史。
但 goal 的 objective/status/usage 不在这段历史里,而在 state-db。
所以压缩后只要 goal 仍 active,下一轮 continuation prompt 会再次把目标显式注入模型上下文。
Codex 没有把“模型想停了”当作完成。完成需要显式工具调用,并且 prompt 要求先做审计。
continuation prompt 要求模型把 objective 拆成可验证交付物,建立 prompt-to-artifact
checklist,检查文件、命令输出、测试、PR 状态等真实证据。只有确认“目标已经达成且没有剩余必需工作”时,
才能调用 update_goal,并且唯一可写状态是 complete。
不算。达到 token budget 时状态变为 budget_limited,系统注入 budget-limit
steering,要求停止新增实质工作、总结进度和剩余事项。源码和 prompt 都明确禁止因为预算接近或耗尽而标记完成。
中断会先进行当前进度记账,然后把 active goal 暂停为 paused。
暂停状态不会自动 continuation,除非用户或外部 API 再把它恢复为 active。
continuation 需要满足空闲、无排队输入、无 trigger-turn mailbox、goal 仍 active。 源码还记录 continuation turn;如果某些 continuation 没有产生可计入的自主活动,会抑制下一次自动 continuation, 直到用户、工具或外部活动重置这个状态。
这些文件是理解 goal 功能的最短阅读路径。
codex-rs/core/src/goals.rs:goal runtime、continuation、记账、resume。codex-rs/state/src/runtime/goals.rs:sqlite CRUD、预算状态迁移、usage accounting。codex-rs/core/templates/goals/continuation.md:每次 loop 注入给模型的任务续跑 prompt。codex-rs/core/templates/goals/budget_limit.md:预算耗尽时的收尾 steering。codex-rs/tools/src/goal_tool.rs:Responses API 工具定义。codex-rs/core/src/tools/handlers/goal.rs:工具调用处理,尤其是 complete 限制。codex-rs/tui/src/chatwidget/slash_dispatch.rs:/goal slash command。codex-rs/app-server-protocol/src/protocol/v2.rs:app-server v2 goal payload。