术语表:一页纸,忘了就回来查
这不是第 42 章,是索引。每个词只给一句话定义 + 第一次被认真讲清楚的章节链接。忘了 B5 说的 TaskKind 是什么,别去翻 B5 全文,先回这里。
术语按书里出现的大致顺序分组,不是字母序——想线性建立心智模型的话,从上往下读也可以。
A:任务的骨架
| 术语 | 一句话 | 详见 |
|---|---|---|
| Thread | 一条能关掉再打开、能 resume 的"会话命";本地叫 CodexThread | A2 |
| Turn | 用户看得见的"这一轮":可能包含好几次模型采样、好几次工具调用 | A2 |
| Step | Turn 里的一次采样:一次真正打给模型的请求 | A2 |
| Session | Thread 背后真正跑活的运行时,拥有 SQ/EQ,同时最多一个 running task | A2 B1 |
| ThreadManager | 只管创建 / resume / fork Thread,不跑 turn | A2 |
| TurnContext | 一轮的壳,构造时冻住;initial_settings legacy 消费者用,current_settings 给下一步用 | A2 |
| StepContext | 每次采样前重算:这一枪模型看见哪些工具、哪份说明书 | A2 |
| Rollout | 落盘的事件日志(JSONL),resume 靠重放它重建 Session;真相源 | A2 B4 |
B:主循环与事件
| 术语 | 一句话 | 详见 |
|---|---|---|
| Op | 客户端往 Session 提交的一条控制指令(不止聊天,还有中断、resume 等) | B1 |
| Submission | 一条 Op 加上 id,进 Submission Queue(SQ) | B1 |
| Event / EventMsg | Session 往外吐的投影:文本、工具生命周期、审批、turn 边界……进 Event Queue(EQ) | B1 |
| oneshot | Op 提交时立刻拿到的一次性回包(start/steer/reject),不是 Event,不进 rollout | B1 |
| submission_loop | Session 里真正"活着"的那条循环,穷尽分发 Op | B1 |
| SessionTask | "这一轮该干什么"的统一接口:kind / run / 取消令牌 | B1 |
| TaskKind | 只有三种:Regular(含 user shell)/ Compact / Review | B1 |
| InputQueue | 内存里的插话队列,分 Steer 轨(改当前 Turn)和 Mailbox 轨(子代理回信) | B1 |
持久队列(ext/queue) | 落 sqlite 的用户消息队列,跨进程存活,等 thread 空闲才派发 | B1 |
| CancelToken | 取消信号的载体;取消的是 tokio 任务,不是杀 OS 进程 | B1 |
| ModelClient / ModelClientSession | 前者活在 Session 上(鉴权、传输回退状态),后者每个 Turn 新建(WS、sticky routing) | B1 G1 |
B:工具与执行
| 术语 | 一句话 | 详见 |
|---|---|---|
| ToolSpec | 模型这一枪能看见的工具表面(JSON),不执行任何副作用 | B2 |
| Handler | 接模型的 call,解析参数、决定走哪条 Runtime | B2 |
ToolRuntime(Approvable + Sandboxable) | "这次尝试"的合同:问不问人、要哪种隔离、失败能不能升级 | B2 |
| Orchestrator | 所有工具副作用必经的同一条流水线:审批 → 选沙箱 → 尝试 → 失败升级重试 | B2 |
| ToolRouter | 这一 Step 冻住的工具计划:模型可见列表 + 能 dispatch 的 registry,必须同源 | B2 |
| Extension / ExtensionRegistry | 进程内 contributor 缝:产品能力先挂这里,不焊进 codex-core 的 Handler | B2 |
| Plugin | 用户侧的安装单元(打包 Skill/MCP/Hook/App 声明),跟 Extension 是两个概念 | D2 |
| unified_exec | 默认的可恢复 PTY 执行路径;Interrupt 取消采样,不杀这个进程 | B2 附录B |
| apply_patch | 结构化改文件的正路:Lark freeform 文法,可预览可审批,不是 shell 里 sed | B2 附录E |
B:安全三旋钮
| 术语 | 一句话 | 详见 |
|---|---|---|
| PermissionProfile | 能力档案:磁盘 + 网络能不能碰,三档(read-only/workspace/danger-full-access)只是内置快捷方式 | B3 |
| SandboxPolicy / SandboxType | 运行时投影 / 平台实现(Seatbelt、bwrap、Windows token) | B3 |
| AskForApproval | 问不问人、问谁(人 or Guardian)的旋钮,跟能力旋钮独立 | B3 |
| ExecPolicy | spawn 之前的前缀禁令(Starlark 规则),机械拦截,不靠模型自觉 | B3 |
| Guardian | 同意链上的隔离评审员子会话,替代部分"人点 Allow",不是第四套沙箱 | B3 附录A |
B:上下文与配置
| 术语 | 一句话 | 详见 |
|---|---|---|
| Fragment / ContextualUserFragment | 注入模型上下文的最小可寻址单元,自带 role/content_kind/markers,可被 resume 和 compact 重新认出 | B4 |
| Compact | 窗口要满时"换起点",不是改写过去的历史 | B4 |
| Prompt 三块 | 一枪打出去的合同:历史投影 + 这一 Step 的 tools + base 指令 | B7 |
| CODEX_HOME | 本机身份根:登录态、rollout、sqlite 索引、memories/plugins/skills 都住这 | B5 |
| 信任(TrustLevel) | 项目层配置默认 untrusted:文件会读,但不参与 effective_config() | B5 |
C/D:行为与扩展(各章一句话,细节点链接)
| 术语 | 一句话 | 详见 |
|---|---|---|
| AGENTS.md | 进 git 的短项目政策;正本,CLAUDE.md 等是 fallback | C1 |
| Memories | 本机默关的跨会话笔记,读/写分开拧,不替代 AGENTS.md | C2 |
| Goal | Thread 上的完成条件,不是 cron | C5 |
| Skill | 说明书包:先目录(name+description)后正文,渐进披露 | D1 |
| MCP | Codex 是 client;stdio 服务器 initialize 即执行 | D3 |
| Hook | 生命周期拦截点;同步 hook 用 exit 2 或 JSON 拦截 | D4 |
| Subagent | 显式 spawn_agent;角色只能减权,不能加权 | D5 |
怎么用这张表
新读者建议路径:先扫一遍这张表混个脸熟,不用记住细节 → 读 A0-A2 → 遇到生词回来查一次定义 + 链接 → 再进 B1。读完 B 之后大部分词会变成常识,这张表基本用不上了。