来源
Codex 源码分析(reference/codex-source-analysis,第 06 章「Agent 核心循环」):Codex 的核心循环不是 loop { call_model(); call_tool(); } 式的单函数 ReAct,而是 session / task / turn / thread 四层显式协作的分层状态机 。
四层含义
session —— 串行的会话命令层。 一个会话对应一条串行事件分发循环 submission_loop:所有命令/事件(用户输入、审批回包、中断、压缩、关闭等)都先进入单一队列,按 Op 类型依次分发。同一时刻至多一个活动任务,且可被用户输入打断。它是「串行化」的保障——杜绝多入口并发写。
task —— 任务层。 会话里正在执行的那件具体任务的生命周期。新任务进来先 abort_all_tasks(中止旧任务)再 start_task,保证同一时刻只有一个 active turn;结束时 on_task_finished 收尾并统计 token / 工具调用。它是「可替换、可中止」的粒度。
turn —— 回合层。 一个任务内部由若干回合组成。每回合是 run_turn 驱动的「采样 → 工具调用 → 采样」循环,直到 needs_follow_up == false(模型不再跟进,且无 pending 用户输入)才结束。真正的 ReAct 循环就在这里,也是 token 压力与 compaction 处理的地方。
thread —— 线程层。 比会话更横向的生命周期管理,ThreadManager 负责线程的 start / resume / fork / shutdown。fork 不是文本复制,而是「历史快照 + 中断标记 + 统一 spawn 入口」的状态复制。它是「并行探索 + 可回溯」的粒度。
对 byteseek 的启发
当前 corebrain 是单一 mainbrain 循环(input → llm.call → byteseek.run)。对照四层,可思考各自在 byteseek 里的落点:
session 层 → 命令/事件的串行分发队列(现有 talk 队列是雏形,但无统一 Op 分发)。
task 层 → 一次真实任务的可替换/可中止粒度(现有 session/<name> 生成程序,无 abort 语义)。
turn 层 → 生成程序内部的「采样—工具」迭代(现有 vthread 执行,无 needs_follow_up 收敛语义)。
thread 层 → 会话的 start/resume/fork,与 rwir/rwfunc 进化议题 01-anything/rwir/rwfunc 版本+评分进化:n 变体实测择优,沉淀通用/本地最优库 #7 的「n 变体并行择优」天然相关。
来源
Codex 源码分析(
reference/codex-source-analysis,第 06 章「Agent 核心循环」):Codex 的核心循环不是loop { call_model(); call_tool(); }式的单函数 ReAct,而是 session / task / turn / thread 四层显式协作的分层状态机。四层含义
session —— 串行的会话命令层。 一个会话对应一条串行事件分发循环
submission_loop:所有命令/事件(用户输入、审批回包、中断、压缩、关闭等)都先进入单一队列,按Op类型依次分发。同一时刻至多一个活动任务,且可被用户输入打断。它是「串行化」的保障——杜绝多入口并发写。task —— 任务层。 会话里正在执行的那件具体任务的生命周期。新任务进来先
abort_all_tasks(中止旧任务)再start_task,保证同一时刻只有一个 active turn;结束时on_task_finished收尾并统计 token / 工具调用。它是「可替换、可中止」的粒度。turn —— 回合层。 一个任务内部由若干回合组成。每回合是
run_turn驱动的「采样 → 工具调用 → 采样」循环,直到needs_follow_up == false(模型不再跟进,且无 pending 用户输入)才结束。真正的 ReAct 循环就在这里,也是 token 压力与 compaction 处理的地方。thread —— 线程层。 比会话更横向的生命周期管理,
ThreadManager负责线程的 start / resume / fork / shutdown。fork 不是文本复制,而是「历史快照 + 中断标记 + 统一 spawn 入口」的状态复制。它是「并行探索 + 可回溯」的粒度。对 byteseek 的启发
当前 corebrain 是单一
mainbrain循环(input → llm.call → byteseek.run)。对照四层,可思考各自在 byteseek 里的落点:session/<name>生成程序,无 abort 语义)。needs_follow_up收敛语义)。