Codex SDK
「把 Codex CLI 变成 Node 进程里可驱动的对象」 —— 官方 README 首句就是
「Embed the Codex agent in your workflows and apps」,第二句划清了形态:
> The TypeScript SDK wraps the codex CLI from @openai/codex.
> It spawns the CLI and exchanges JSONL events over stdin/stdout.
适合与不适合
适合:要把 Codex 塞进 Node / Electron 应用或 CI;需要非交互执行;
需要精确到路径的权限规则;TS 或 Python 栈。
不适合:想要一个纯库、不愿多背一个 CLI 子进程(用 OpenAI Agents SDK);
目标目录不是 Git 仓库又不愿开 skipGitRepoCheck;
需要 SDK 层自己管上下文压缩。
固定坐标系
8 个维度,与同赛道其他对象逐项可比。
- 模型与开放条件
- 两条路径,本站的判断是「默认走OpenAI,但架构上没锁死」。 证据一:README 里的配置示例
baseUrl会被翻译成--config openai_base_url=...传给 CLI, 即换 API 端点是一等配置项(原文:If you setbaseUrl, the SDK passes it as a--config openai_base_url=...override)。 证据二:codex-rs源码里model_providers是正式配置项(站内搜索 162 处引用, 分布在config/src/thread_config.rs、core/src/config/requirements.rs等)。 证据三:ThreadOptions有独立的model?: string字段。 但要说清:SDK 本身没有任何「provider-agnostic」表述,也没有像 OpenAI Agents SDK 那样列出可选 extra(litellm / any-llm)。 换第三方模型后工具调用与 structured output 的可靠性,本站未核验。 - 运行位置
- 进程形态是「你的 Node 进程 + 一个被 spawn 的 CLI 子进程」。 README 的
env参数说明值得注意:「By default, the Codex CLI inherits the Node.js process environment」,你可以整体控制 CLI 看到哪些环境变量, 官方给的用途是 sandboxed hosts like Electron apps。 SDK 仍会在这之上注入自己需要的变量(如CODEX_API_KEY)。 这条对 Electron / 桌面应用集成是决定性的,官方明确点了这个场景。 - 本地文件
- 本地文件是 CLI 的原生能力,SDK 侧只需给工作目录。
workingDirectory设置运行目录;additionalDirectories可追加额外目录; 另有local_image类型的输入条目可把本地图片传给 CLI(走--image)。 一个必须知道的行为:Codex 要求工作目录是一个 Git 仓库, 否则拒绝运行(官方原文:To avoid unrecoverable errors, Codex requires the working directory to be a Git repository)——可以用skipGitRepoCheck跳过。 这对选型是硬约束:非 Git 目录(纯数据目录、临时目录)里开箱即用不了。 - 关机后的任务
- 最值得注意的一点:这是本站收录对象里唯一官方明确支持「非交互执行」的。 仓库里有
docs/exec.md,标题就是 Non-interactive mode(正文只留外链, 指向 developers.openai.com/codex/noninteractive)。 与 CLI 站那份档案里 Gemini CLI 是「唯一明确支持非交互」的对照正好构成一组: 在这个 harness 站里,Codex SDK 同样是非交互执行这条路的主要候选。 线程持久化有官方支撑:README 说 Threads are persisted in~/.codex/sessions, 内存里的 Thread 对象丢了可以用resumeThread()重建继续。 注意 ~/.codex/sessions 是文件目录而非数据库 —— 意味着状态与进程同机器, 跨机迁移与并发写的语义本站未核验。 - 工具与扩展
- 工具面完全由 CLI 决定,SDK 不新增也不裁剪。README 全文没有出现 MCP。 SDK 侧你拿到的是结构化事件流:
runStreamed()返回 async generator, 事件类型包括item.completed(工具调用、流式响应、文件变更通知) 与turn.completed(含 usage 统计)。 Structured output 是 SDK 明确支持的一等能力:outputSchema可传 JSON Schema,也有官方推荐的 Zod 转换路径 (zodToJsonSchema(schema, { target: "openAi" }))。 注意这里有个命名陷阱:那个target 是"openAi", 但它产出的是 JSON Schema 给任意遵守该schema 的模型用,不代表只能 OpenAI。 本站点MCP 收录的 9 个 server 里没有它的位置 —— Codex CLI 是否支持 MCP、 本站未核验(SDK README 未提,主仓 docs 目录里也没有 mcp.md)。 - 上下文与记忆
- 本站最关心的维度,本对象提供的是「会话续接」而不是「上下文管理」。 证据是
resumeThread(threadId):能恢复对话继续跑,但没有压缩、摘要或落盘机制。 换句话说:Thread解决的是可靠续跑(本站主张的「状态」面), 不解决长上下文(本站主张的「上下文」面)。 要压上下文只能靠 CLI 侧的配置或换模型,SDK 层没有暴露相关选项。 - 权限与限制
- 这是本站核对下来最有价值的一处发现 —— 它把 CLI 站那份档案里标为「未核验」的问题补上了。 证据来自 SDK 源码
sdk/typescript/src/threadOptions.ts的类型定义(不是文档,是源码):ApprovalMode = "never" | "on-request" | "on-failure" | "untrusted"—— 四种审批模式;SandboxMode = "read-only" | "workspace-write" | "danger-full-access"—— 三档沙箱。 网络单独控制:networkAccessEnabled?: boolean、webSearchMode?: "disabled" | "cached" | "live"、webSearchEnabled?: boolean。 推理强度可调:ModelReasoningEffort有 8 档 (minimal / low / medium / high / xhigh / max / ultra / persistent)。 另一层权限机制是配置透传:SDK 支持config(自动展平成 dotted path转 TOML 传给--config) 与configOverrides(原始 TOML 逐条透传)。官方示例直接给出了文件系统级规则:permissions.audit.filesystem={":root"="read","/path/to/project/.env"="deny"}, 即可以按路径精确拒绝读.env 这类文件。官方说明优先级: 原始 overrides >结构化 config > SDK 托管设置。 ⚠ 三档沙箱各档在具体平台(Windows / macOS / Linux)上的实现差异本站未核验 (docs/sandbox.md 正文只有外链)。 - 适合什么任务
- 适合:要把 Codex 塞进自己的 Node 应用 / Electron 应用 / CI; 需要非交互执行;需要精确的文件级权限规则;TypeScript 或 Python 栈; 已经决定用 OpenAI 模型但想让模型层可换。 不适合:想要一个纯库、不想额外背一个 CLI 子进程(用 OpenAI Agents SDK); 目标目录不是 Git 仓库又不愿开
skipGitRepoCheck; 需要 SDK 层自己做上下文压缩(本站未核验 CLI 侧是否有可配的压缩策略)。
头号误解
- 以为 v3 计划里的 openai/codex-sdk 存在 —— 该仓 404,SDK 是 monorepo 子目录
- 以为 SDK 版本号能反映能力 —— package.json 里是 0.0.0-dev,实际版本跟CLI 走(当前 0.159.3)
- 在非 Git 目录里开箱即用就跑不了 —— CLI 要求工作目录是 Git 仓库,必须显式跳过
- 把
sandbox_workspace_write.network_access与 SDK 的networkAccessEnabled当成两套东西 —— 后者才是 SDK 层入口,前者是 config透传的写法 - 把 OpenAI Agents SDK(纯 Python 库)当成本 SDK 的同类替代 —— 形态不同,见 layer_position
价格
| 月度入口 | SDK 本身免费(Apache-2.0),推理按你接的 provider 计费 |
|---|---|
| 额度说明 | 三条计费路径要分清: (1)SDK 与 CLI 都开源免费,跑起来要 OpenAI API key 或 ChatGPT 额度; (2)可以配 baseUrl 指向自建/第三方网关,此时计费跟着那个网关走; (3)OpenAI 另有 Codex Web(chatgpt.com/codex)这条云端产品线, 那是订阅制,与本地 SDK 不是同一件事。 |
不同币种不做折算。优惠、地区、税费与登录后报价可能变化,购买前请到官方页面确认。
未知项清单
- 三档沙箱在 Windows / macOS / Linux 的实现差异(尤其 Windows 是否走 WSL)
- Codex CLI 是否支持 MCP,若支持则能力边界如何
model_providers可配置的具体第三方 provider 清单- Python SDK 的 API 是否与 TS 版对齐(
Thread/run/resumeThread概念是否一致) ~/.codex/sessions的并发写与跨机迁移语义- 非交互模式的完整配置项与失败退出码约定
permissions.audit规则的完整语法(官方只给了文件系统一项示例)
证据来源
判断可回到以下一手源复核。本站核验日 2026-10-01,内容更新日 2026-10-01。
| 类型 | 名称 | 链接 |
|---|---|---|
| repo | openai/codex · 仓库(monorepo,SDK 在 sdk/ 子目录) | https://github.com/openai/codex |
| docs | TypeScript SDK README(包裹 CLI、JSONL 通信、thread/turn、resume、config 透传) | https://github.com/openai/codex/tree/main/sdk/typescript |
| code | 源码 sdk/typescript/src/threadOptions.ts(ApprovalMode 四档/ SandboxMode 三档 / 网络与推理强度) | https://github.com/openai/codex/blob/main/sdk/typescript/src/threadOptions.ts |
| code | sdk/typescript/package.json(包名 @openai/codex-sdk、Apache-2.0、Node≥18) | https://github.com/openai/codex/blob/main/sdk/typescript/package.json |
| docs | docs/exec.md · Non-interactive mode(正文仅外链) | https://github.com/openai/codex/blob/main/docs/exec.md |
| docs | docs/sandbox.md · Sandbox & approvals(正文仅外链) | https://github.com/openai/codex/blob/main/docs/sandbox.md |
| repo | Python SDK 目录(本站记录存在,细节未核验) | https://github.com/openai/codex/tree/main/sdk/python |
| changelog | Releases(0.159.3 @ 2026-09-30,另有 0.161.0-alpha 预发布) | https://github.com/openai/codex/releases |
| docs | 官方安全文档(沙箱与审批,JS 渲染,本站点未取到正文) | https://developers.openai.com/codex/security |
实测记录
本站尚未完成实测。测试协议见 tasks/_protocol.md。
实测建议(按本 SDK 形态定制):
| # | 测什么 | 为什么值得测 |
|:--:|---|---|
| 1 | CLI 与 SDK 版本组合矩阵(CLI 0.159.3 / 0.161.0-alpha × SDK) | SDK 版本号不反映能力,得知道哪些组合是验过的 |
| 2 | permissions.audit.filesystem 的 deny 规则能否真的挡住读 .env | 官方示例给了写法,但拦截强度未核验 |
| 3 | resumeThread 在进程崩溃后恢复的完整度 | 本站最关心的「可靠长期运行」 |
| 4 | 8 档 modelReasoningEffort 的实际耗时与成本差异 | 官方只给枚举,不给代价 |
| 5 | 非交互模式跑一条真实任务链的失败率与中断行为 | 无人值守场景的核心指标 |
| 6 | 换 baseUrl 接第三方 provider 后 structured output 是否仍可靠 | 架构上没锁死,但可靠性未知 |
相关条目
- Claude Agent SDK本站最该对照的一对:同样是 CLI 包装型(捆绑 / spawn CLI + 进程通信),但Claude 侧 README 明说只支持 Claude、没有 provider 旁路,而本 SDK 有
baseUrl与model_providers。 - OpenAI Agents SDK同一家厂商的两种形态:那个是纯 Python 库(primitives-only),这个是 Node + CLI 子进程包装。选型第一问就是「要不要多背一个 CLI 进程」。
- Deep Agentsbatteries-included 的对照面:本 SDK 不预置任何东西,工具与沙箱全由 CLI 版本决定。
- LangGraph若要「非交互 + 有图结构 + 多Agent 协作」,编排框架才是对应层;本 SDK 只给单线程执行。
本页由 ai-agent-guide 数据层生成(CC BY 4.0)。
方法论与坐标系定义见仓库内 METHODOLOGY.md。