СейчасЧто такое Codex App Server
- Что такое Codex App Server
- Что выбрать: App Server, SDK, exec или MCP
- Запуск через stdio
- Формат протокола и генерация типов
- Потоки, ходы и элементы
- Основные методы и события
- Подтверждения и песочница (sandbox)
- Минимальный клиент на Node.js
- Полезные сценарии
- Codex внутри собственного продукта
- Обновление CLI без скрытой поломки клиента
- Восстановление после разрыва соединения
- Проверка результата
- Ограничения и совместимость
- Официальные источники
- Следующий шаг
- Связанные материалы
Практическое руководство по codex app-server: двунаправленному JSON-RPC-интерфейсу, через который клиенты управляют агентным контуром Codex. Разберём выбор способа интеграции, запуск через stdio, протокол, потоки и ходы, подтверждения действий и проверку минимального клиента.
openai/codex, справке Codex и журналу выпусков до стабильной версии 0.153.4. Протокол развивается, поэтому типы следует генерировать из той версии Codex CLI, с которой работает клиент.Содержание
- Что такое Codex App Server
- Что выбрать: App Server, SDK, exec или MCP
- Запуск и транспорт
- Формат протокола и генерация типов
- Потоки, ходы и элементы
- Основные методы и события
- Подтверждения и sandbox
- Минимальный клиент на Node.js
- Проверка результата
- Ограничения и совместимость
- Официальные источники
Что такое Codex App Server
codex app-server запускает долгоживущий процесс, который предоставляет клиенту возможности агентного контура Codex. Он управляет потоками диалогов, конфигурацией и аутентификацией, передаёт события работы агента и связывает клиент с инструментами Codex.
Протокол двунаправленный. Клиент отправляет запросы, а сервер возвращает ответы и поток уведомлений. Сервер также может сам инициировать запрос, например запросить подтверждение команды, и приостановить ход до ответа пользователя.
App Server появился как интерфейс между Codex и расширением для VS Code. В инженерной статье OpenAI App Server назван основным способом встраивания полного агентного контура Codex в сторонние продукты; протокол проектируется с обратной совместимостью для старых клиентов.
Клиент можно написать на любом языке, который умеет обмениваться JSON-строками; локальные интеграции обычно запускают бинарный файл App Server как дочерний процесс. OpenAI упоминает реализации на TypeScript, Python, Go, Swift и Kotlin.
Что выбрать: App Server, SDK, exec или MCP
| Инструмент | Подходящая задача | Ограничение |
| Codex App Server | IDE, десктопный или веб-клиент с историей, стримингом, диффами и подтверждениями | Нужно реализовать клиентскую часть JSON-RPC |
| Codex SDK | Серверные инструменты и автоматизация через библиотечный API TypeScript | Меньше языков и более узкая поверхность возможностей |
| codex exec | Разовая команда, скрипт или CI-задача | Не предназначен для богатого интерактивного интерфейса |
| Codex как MCP-сервер | Вызов Codex как инструмента из существующего MCP-клиента | Специфичные события и диффы Codex не всегда естественно отображаются через MCP |
Если продукт должен воспроизводить полноценный пользовательский цикл Codex, начните с App Server. Если задача завершается одним неинтерактивным запуском, обычно достаточно codex exec.
Запуск через stdio
Установите совместимую версию Codex CLI по официальной инструкции для вашей операционной системы, затем запустите App Server:
codex app-serverВ инженерной статье OpenAI для локальных приложений, IDE и TUI описан JSON-RPC-подобный протокол поверх stdio. Каждая строка стандартного ввода или вывода содержит одно JSON-сообщение, то есть используется формат JSONL.
Локальные приложения и IDE обычно поставляют или загружают подходящий бинарный файл Codex, запускают его как долгоживущий дочерний процесс и держат открытыми каналы stdin/stdout. В статье OpenAI для VS Code и Desktop App описан подход с платформенным бинарным файлом, закреплённым на протестированной версии.
Сетевые и удалённые транспорты зависят от версии CLI. Перед их использованием проверьте справку установленной версии и не открывайте локальный агентный процесс в интернет без аутентификации, шифрования и сетевого ограничения доступа.
Формат протокола и генерация типов
App Server использует облегчённый вариант JSON-RPC: сохраняются запросы, ответы и уведомления, но поле "jsonrpc": "2.0" опускается. При работе через stdio сообщения разделяются переводом строки.
Запрос содержит method, params и id:
{ "method": "thread/start", "id": 10, "params": {} }Ответ повторяет id и содержит result либо error:
{ "id": 10, "result": { "thread": { "id": "thr_123" } } }Уведомление не содержит id:
{ "method": "turn/started", "params": { "turn": { "id": "turn_456" } } }Не переписывайте типы протокола вручную. Codex CLI умеет генерировать определения TypeScript и комплект JSON Schema:
codex app-server generate-ts
codex app-server generate-json-schemaПерегенерируйте артефакты после обновления CLI и запускайте проверку типов или контрактные тесты до выкладки клиента.
Потоки, ходы и элементы
Протокол строится вокруг трёх сущностей:
- поток (
thread) — сохраняемый диалог пользователя с агентом; - ход (
turn) — одна единица работы агента, запущенная пользовательским вводом; - элемент (
item) — отдельное сообщение, выполнение инструмента, запрос подтверждения, дифф или другой ввод и вывод.
Типичный жизненный цикл выглядит так:
- Клиент отправляет единственный запрос
initializeс описанием клиента и ждёт успешный ответ. - После ответа клиент отправляет предусмотренное протоколом уведомление
initialized. - Клиент создаёт или возобновляет поток.
- Клиент запускает ход и передаёт пользовательский ввод.
- Сервер присылает уведомления о потоке, ходе и элементах.
- Для потоковых элементов между началом и завершением приходят дельты.
- Если действие требует разрешения, сервер отправляет запрос клиенту и ждёт решения.
- Финальное уведомление
turn/completedзавершает ход.
initialize. Клиенту также нужно постоянно читать stdout, иначе заполненный канал событий может остановить нормальную работу процесса.Основные методы и события
Точный набор методов зависит от установленной версии. Типичная поверхность App Server включает:
| Группа | Назначение | Примеры |
| Потоки | Создание, чтение, продолжение, ветвление и архивирование диалогов | thread/start, thread/resume, thread/fork, thread/read, thread/list, thread/archive |
| Ходы | Запуск, корректировка и остановка работы агента | turn/start, turn/steer, turn/interrupt |
| Модели и конфигурация | Получение доступных моделей и управление настройками | model/list, config/read и методы записи конфигурации |
| Аккаунт | Состояние входа, запуск авторизации и сведения об использовании | account/read, методы входа и выхода |
| Расширения | Навыки, приложения, MCP и развивающиеся API плагинов | Набор следует брать из схемы конкретной версии CLI |
Ключевые события пользовательского интерфейса:
thread/startedсообщает о доступном потоке;turn/startedиturn/completedограничивают один ход;item/startedсоздаёт элемент в интерфейсе;- события
item/*/deltaпередают потоковые части содержимого; item/completedсодержит финальное состояние элемента.
Для итогового состояния сообщения или инструмента используйте item/completed, а не самостоятельно собранную последнюю дельту.
При временной ошибке транспорта не считайте неизвестный запрос автоматически выполненным или невыполненным. В выпуске Codex 0.153.0 улучшено восстановление TUI после разрыва внешнего соединения с App Server: черновики и история сохраняются, а запросы с неопределённым результатом приостанавливаются для проверки. Собственному клиенту полезно применять такую же осторожную модель восстановления.
Подтверждения и песочница (sandbox)
App Server может запросить решение пользователя перед выполнением команды, изменением файлов или другим чувствительным действием. Клиент должен связать запрос с соответствующими threadId, turnId и itemId, показать понятное описание действия и вернуть только поддерживаемое схемой решение.
Безопасная логика интерфейса:
- Создайте элемент после
item/started. - При запросе подтверждения покажите точную команду, изменение или запрашиваемое разрешение.
- Не продолжайте действие до явного ответа пользователя.
- После разрешения или отказа дождитесь финального
item/completed. - Не считайте закрытие окна подтверждением.
Политика песочницы определяет, к каким файлам и системным ресурсам получает доступ агент. Начинайте с минимально необходимых прав. Разрешение записи ограничивайте рабочими каталогами, а полный доступ включайте только для явно контролируемого сценария.
В Codex CLI 0.149.0 и новее политика подтверждений untrusted больше не поддерживается. Для ограничительного режима официальный Help Center предлагает сочетание sandbox_mode = "read-only" и approval_policy = "on-request".
Минимальный клиент на Node.js
Упрощённый пример запускает App Server, ждёт ответ на initialize, завершает рукопожатие, создаёт поток и отправляет запрос. Модель намеренно не зашита: доступность моделей зависит от версии CLI, способа входа и настроек рабочей области.
import { spawn } from "node:child_process";
import readline from "node:readline";
const proc = spawn("codex", ["app-server"], {
stdio: ["pipe", "pipe", "inherit"],
});
const rl = readline.createInterface({ input: proc.stdout });
function send(message: unknown) {
proc.stdin.write(JSON.stringify(message) + "\n");
}
rl.on("line", (line) => {
const msg = JSON.parse(line);
if (msg.id === 0 && msg.result) {
send({ method: "initialized", params: {} });
send({ method: "thread/start", id: 1, params: {} });
return;
}
if (msg.id === 1 && msg.result?.thread?.id) {
send({
method: "turn/start",
id: 2,
params: {
threadId: msg.result.thread.id,
input: [{ type: "text", text: "Summarize this repository." }],
},
});
return;
}
if (msg.method === "item/agentMessage/delta") {
process.stdout.write(msg.params?.delta ?? "");
}
if (msg.method === "turn/completed") {
process.stdout.write("\nTurn completed.\n");
}
});
send({
method: "initialize",
id: 0,
params: {
clientInfo: {
name: "my_product",
title: "My Product",
version: "0.1.0",
},
},
});Пример намеренно не реализует серверные запросы подтверждения. Для задач, в которых агент выполняет команды или меняет файлы, добавьте обработчик таких запросов и передавайте только решения, разрешённые схемой вашей версии.
GPT-5.4 не следует использовать как универсальный пример модели: с 31 августа 2026 года она недоступна в Codex при входе через ChatGPT. Получайте доступные варианты через model/list или не задавайте модель, чтобы применить разрешённую конфигурацию по умолчанию.
Полезные сценарии
Codex внутри собственного продукта
Задача: добавить в редактор, админку или IDE диалог с Codex, потоковую печать ответа, историю и кнопки подтверждения действий.
Условия: подходящий бинарный файл Codex, реализованный JSONL-клиент и интерфейс для серверных запросов.
Действия: приложение запускает codex app-server, проходит рукопожатие, создаёт поток, запускает ход и отображает жизненный цикл каждого элемента.
Наблюдаемый результат: пользователь видит дельты ответа во время работы, а клиент получает финальные item/completed и turn/completed.
Ограничение: клиент обязан обрабатывать разрывы соединения, неизвестный статус отправленных запросов и подтверждения пользователя.
Обновление CLI без скрытой поломки клиента
Задача: проверить совместимость интеграции перед переходом на новую версию Codex.
Действия: закрепите текущую версию, сгенерируйте типы или JSON Schema из новой версии и запустите контрактные тесты на инициализацию, создание потока, один ход и подтверждение.
Наблюдаемый результат: несовместимые поля и методы обнаруживаются до выкладки.
Ограничение: сгенерированная схема соответствует конкретному бинарному файлу. Храните версию сервера и схему рядом с кодом клиента.
Восстановление после разрыва соединения
Задача: сохранить пользовательский интерфейс и не повторить потенциально выполненное действие после обрыва транспорта.
Действия: храните идентификаторы потоков, восстанавливайте сохранённую историю и помечайте запросы с неизвестным результатом для отдельной проверки.
Наблюдаемый результат: черновик и история остаются доступны, а сомнительная команда не запускается повторно автоматически.
Ограничение: конкретный механизм повторного подключения зависит от транспорта и версии CLI.
Проверка результата
Минимальная проверка локальной интеграции:
- Запустите
codex app-serverкак дочерний процесс. - Отправьте
initializeи дождитесь ответа с тем жеid. - После ответа отправьте уведомление
initialized. - Выполните
thread/startи сохраните полученныйthread.id. - Отправьте
turn/startс простым текстовым запросом. - Убедитесь, что пришли события элементов и финальный
turn/completed. - Завершите процесс и проверьте обработку неожиданного разрыва соединения.
Для полной контрактной проверки добавьте сценарий с запросом подтверждения, отказом пользователя и проверкой финального состояния элемента.
Ограничения и совместимость
- App Server требует больше клиентского кода, чем SDK или
codex exec: нужно обрабатывать запросы, ответы, уведомления, дельты и серверные запросы. - Точные методы, поля, решения подтверждений и сетевые транспорты зависят от версии. Источником контракта должна быть схема установленного CLI.
- В выпуске Codex 0.153.0 CLI получил команды для перечисления, установки и удаления плагинов из удалённых маркетплейсов; журнал изменений также содержит API App Server для согласования плагинов. Не закрепляйте непроверенный список plugin-методов вручную.
- В актуальном README указано специальное ограничение для внутренних рабочих потоков:
thread/archiveиthread/deleteотклоняют попытку удалить живого внутреннего worker ошибкой JSON-RPC-32600. Завершением такого worker управляет его владелец; после освобождения сохранённый поток можно архивировать или удалить обычным способом. - Доступ к моделям зависит от типа аккаунта и конфигурации. При входе через ChatGPT GPT-5.4 и GPT-5.4 mini выведены из Codex 31 августа 2026 года.
- Это руководство основано на официальных источниках и не заявляет локальный прогон каждого метода. Перед внедрением воспроизведите критичные сценарии на закреплённой версии бинарного файла.
Официальные источники
- Документация Codex App Server
- README App Server в репозитории openai/codex
- Выпуски Codex CLI
- Как OpenAI построила App Server
- Справка по использованию Codex с подпиской ChatGPT
Следующий шаг
Если нужен разовый запуск Codex из терминала или скрипта, продолжите с руководством codex exec — как выполнять конкретные задачи Codex из терминала и скриптов.
Связанные материалы
- Статья: Редакция pimenov.ai на Codex app-server: архитектура собственного агентного приложения
- Блог: OpenAI выложил Symphony — и теперь ваш трекер задач может стать оркестратором кодящих агентов
- База знаний: Codex App — единый справочник по среде от OpenAI
App Server подходит командам, которым нужен собственный интерфейс поверх полного агентного контура Codex. До фиксации протокола в продукте полезно отдельно проверить модель безопасности, обновление клиента и восстановление после разрывов соединения.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Практическое руководство по Cloudflare Agents: трассировка, session replay, approvals, Workflows и границы с Agents SDK и AI Gateway.