App Server 协议入门
了解 Thread、Turn、Item,完成连接初始化,并生成与当前 CLI 版本匹配的协议 Schema。
App Server 用于构建完整的 Codex 客户端,例如需要认证、对话历史、审批与流式进展的产品。只做后台编码任务或 CI 时,优先考虑 SDK。官方迁移页将 app-server 命令标为实验性,不支持生产工作负载;应按当前版本的协议与支持范围评估。
协议对象
- Thread 保存一段对话,包含多个 turn。
- Turn 对应一次用户请求以及随后执行的工作。
- Item 是输入输出的单位,例如消息、命令、文件修改或工具调用。
协议采用双向 JSON-RPC 2.0 消息,但线上消息省略 "jsonrpc":"2.0" 头。请求有 method、params 和 id;响应按相同 ID 返回 result 或 error;通知没有 ID。
先使用本地 stdio
codex app-server默认是以换行分隔 JSON 的 stdio 传输,等价于 --listen stdio://。连接后先发送 initialize,随后发送 initialized 通知,再创建 thread 和 turn,并持续读取事件。
初始化请求需要描述客户端,官方示例结构为:
{
"method": "initialize",
"id": 0,
"params": {
"clientInfo": {
"name": "my_product",
"title": "My Product",
"version": "0.1.0"
}
}
}创建 thread 的响应会返回线程 ID;发起 turn/start 时传这个 ID 以及输入内容。不要把本地示例中的假 ID 当作可复用的服务端标识。
生成匹配版本的类型
codex app-server generate-ts --out ./schemas
codex app-server generate-json-schema --out ./schemas输出对应执行命令的 Codex 版本。升级运行时后应重新对照生成的 Schema;需要实验字段或方法时,官方说明可添加 --experimental。
WebSocket 与远程连接
本机实验连接可以分别运行:
codex app-server --listen ws://127.0.0.1:4500
codex --remote ws://127.0.0.1:4500WebSocket transport 是实验性且不支持生产工作负载。非本机访问前应配置认证并放在 TLS 后;plain ws 只适合 localhost 或 SSH 转发。服务端可通过 --ws-auth capability-token --ws-token-file /absolute/path 配置令牌,客户端使用 --remote-auth-token-env 从环境变量取 token。
--listen 控制客户端如何接入 App Server;--code-mode-host 控制 App Server 向外连接哪个 Code Mode host,二者方向不同。同一个 App Server 进程的线程共享选定的 Code Mode host。