{
"codex": {
"compatibility": {
"upstream_repository": "https://github.com/openai/codex",
"baseline_source": "openai/codex main branch",
"guard_command": "node scripts/compat/check-upstream-baseline.mjs",
"format_version": 2,
"critical_files": [
{
"path": "codex-rs/core/src/client.rs",
"reason": "Owns Responses route constants, compact route constants, conversation headers, turn-state replay, previous-response continuations, and websocket enablement.",
"required_contains": [
"RESPONSES_ENDPOINT",
"/responses",
"RESPONSES_COMPACT_ENDPOINT",
"/responses/compact",
"build_conversation_headers",
"previous_response_id",
"X_CODEX_INSTALLATION_ID_HEADER",
"x-codex-installation-id",
"X_CODEX_TURN_STATE_HEADER",
"x-codex-turn-state",
"X_CODEX_TURN_METADATA_HEADER",
"x-codex-turn-metadata",
"X_CODEX_PARENT_THREAD_ID_HEADER",
"x-codex-parent-thread-id",
"X_CODEX_WINDOW_ID_HEADER",
"x-codex-window-id",
"X_OPENAI_MEMGEN_REQUEST_HEADER",
"x-openai-memgen-request",
"X_OPENAI_SUBAGENT_HEADER",
"x-openai-subagent",
"X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER",
"x-responsesapi-include-timing-metrics",
"x-codex-beta-features",
"OPENAI_BETA_HEADER",
"responses_websockets=2026-02-06",
"x-client-request-id",
"stream_responses_websocket"
]
},
{
"path": "codex-rs/core/src/compact_remote.rs",
"reason": "Owns remote compaction flow that reaches the unary Responses compact endpoint through ModelClient.",
"required_contains": [
"run_remote_compact_task",
"compact_conversation_history",
"CompactionImplementation::ResponsesCompact",
"ContextCompactionItem"
]
},
{
"path": "codex-rs/codex-api/src/sse/responses.rs",
"reason": "Owns SSE Responses stream parsing, turn-state capture, completion boundary, and quota/error event interpretation.",
"required_contains": [
"spawn_response_stream",
"process_sse",
"process_responses_event",
"x-codex-turn-state",
"response.completed",
"response.failed",
"response.metadata",
"openai-model",
"x-reasoning-included",
"X-Models-Etag",
"insufficient_quota",
"rate_limit_exceeded"
]
},
{
"path": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
"reason": "Owns websocket Responses connection setup, request header merging, stream completion boundary, rate limit events, and wrapped websocket errors.",
"required_contains": [
"ResponsesWebsocketConnection",
"websocket_url_for_path(\"responses\")",
"merge_request_headers",
"add_auth_headers",
"x-codex-turn-state",
"response.completed",
"response.metadata",
"codex.rate_limits",
"openai-model",
"x-reasoning-included",
"x-models-etag",
"parse_wrapped_websocket_error_event",
"websocket_connection_limit_reached"
]
}
],
"expected_headers": [
"session_id",
"x-openai-subagent",
"x-openai-memgen-request",
"x-codex-installation-id",
"x-codex-turn-state",
"x-codex-turn-metadata",
"x-codex-parent-thread-id",
"x-codex-window-id",
"x-client-request-id",
"x-codex-beta-features",
"x-responsesapi-include-timing-metrics",
"OpenAI-Beta",
"User-Agent"
],
"proxy_replaced_headers": [
"Authorization",
"ChatGPT-Account-Id"
],
"expected_routes": [
"/responses",
"/responses/compact",
"/memories/trace_summarize",
"websocket_url_for_path(\"responses\")"
],
"expected_stream_events": [
"response.completed",
"response.failed",
"response.metadata",
"codex.rate_limits"
],
"semantic_checks": [
{
"id": "client.responses-route",
"kind": "route",
"file": "codex-rs/core/src/client.rs",
"reason": "Responses unary traffic must keep the upstream route constant and path together.",
"file_contains_all": [
"RESPONSES_ENDPOINT",
"/responses"
],
"expected_routes_all": [
"/responses"
]
},
{
"id": "client.responses-compact-route",
"kind": "route",
"file": "codex-rs/core/src/client.rs",
"reason": "Remote compaction must keep using the upstream Responses compact route.",
"file_contains_all": [
"RESPONSES_COMPACT_ENDPOINT",
"/responses/compact"
],
"expected_routes_all": [
"/responses/compact"
]
},
{
"id": "client.conversation-headers",
"kind": "header_group",
"file": "codex-rs/core/src/client.rs",
"reason": "Conversation metadata headers are forwarded together for affinity and upstream Codex behavior.",
"file_contains_all": [
"build_conversation_headers",
"x-codex-installation-id",
"x-codex-turn-state",
"x-codex-turn-metadata",
"x-codex-parent-thread-id",
"x-codex-window-id",
"x-openai-memgen-request",
"x-openai-subagent",
"x-responsesapi-include-timing-metrics",
"x-client-request-id"
],
"expected_headers_all": [
"x-codex-installation-id",
"x-codex-turn-state",
"x-codex-turn-metadata",
"x-codex-parent-thread-id",
"x-codex-window-id",
"x-openai-memgen-request",
"x-openai-subagent",
"x-responsesapi-include-timing-metrics",
"x-client-request-id"
]
},
{
"id": "client.websocket-beta",
"kind": "co_occurrence",
"file": "codex-rs/core/src/client.rs",
"reason": "Websocket transport remains gated by the upstream beta header and version token.",
"file_contains_all": [
"stream_responses_websocket",
"OPENAI_BETA_HEADER",
"responses_websockets=2026-02-06"
],
"expected_headers_all": [
"OpenAI-Beta"
]
},
{
"id": "compact.remote-responses-compact",
"kind": "route",
"file": "codex-rs/core/src/compact_remote.rs",
"reason": "Remote compaction is tied to the Responses compact implementation and item shape.",
"file_contains_all": [
"run_remote_compact_task",
"compact_conversation_history",
"CompactionImplementation::ResponsesCompact",
"ContextCompactionItem"
],
"expected_routes_all": [
"/responses/compact"
]
},
{
"id": "sse.responses-events",
"kind": "event_group",
"file": "codex-rs/codex-api/src/sse/responses.rs",
"reason": "SSE parsing must keep response lifecycle events grouped for stream compatibility.",
"file_contains_all": [
"process_responses_event",
"response.completed",
"response.failed",
"response.metadata"
],
"expected_stream_events_all": [
"response.completed",
"response.failed",
"response.metadata"
]
},
{
"id": "sse.quota-codes",
"kind": "co_occurrence",
"file": "codex-rs/codex-api/src/sse/responses.rs",
"reason": "Quota rotation must remain tied to explicit upstream quota and rate-limit codes.",
"file_contains_all": [
"insufficient_quota",
"rate_limit_exceeded"
]
},
{
"id": "websocket.responses-route",
"kind": "route",
"file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
"reason": "Websocket sessions must keep the upstream Responses websocket route.",
"file_contains_all": [
"ResponsesWebsocketConnection",
"websocket_url_for_path(\"responses\")"
],
"expected_routes_all": [
"websocket_url_for_path(\"responses\")"
]
},
{
"id": "websocket.responses-events",
"kind": "event_group",
"file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
"reason": "Websocket stream parsing must preserve response lifecycle and rate-limit events.",
"file_contains_all": [
"response.completed",
"response.metadata",
"codex.rate_limits"
],
"expected_stream_events_all": [
"response.completed",
"response.metadata",
"codex.rate_limits"
]
},
{
"id": "websocket.header-auth-merge",
"kind": "header_group",
"file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
"reason": "Websocket request metadata should merge upstream headers while auth remains profile-owned.",
"file_contains_all": [
"merge_request_headers",
"add_auth_headers",
"x-codex-turn-state"
],
"expected_headers_all": [
"x-codex-turn-state"
],
"proxy_replaced_headers_all": [
"Authorization",
"ChatGPT-Account-Id"
]
}
]
},
"latestRelease": {
"tag_name": "rust-v0.125.0",
"name": "0.125.0",
"published_at": "2026-04-24T18:00:38Z",
"html_url": "https://github.com/openai/codex/releases/tag/rust-v0.125.0",
"body_head": [
"## New Features",
"- App-server integrations now support Unix socket transport, pagination-friendly resume/fork, sticky environments, and remote thread config/store plumbing. (#18255, #18892, #18897, #18908, #19008, #19014)",
"- App-server plugin management can install remote plugins and upgrade configured marketplaces. (#18917, #19074)",
"- Permission profiles now round-trip across TUI sessions, user turns, MCP sandbox state, shell escalation, and app-server APIs. (#18284, #18285, #18286, #18287, #19231)",
"- Model providers now own model discovery, with AWS/Bedrock account state exposed to app clients. (#18950, #19048)",
"- `codex exec --json` now reports reasoning-token usage for programmatic consumers. (#19308)",
"- Rollout tracing now records tool, code-mode, session, and multi-agent relationships, with a debug reducer command for inspection. (#18878, #18879, #18880)",
"## Bug Fixes"
]
}
},
"claude": {
"latestRelease": {
"tag_name": "v2.1.119",
"name": "v2.1.119",
"published_at": "2026-04-23T23:24:19Z",
"html_url": "https://github.com/anthropics/claude-code/releases/tag/v2.1.119"
},
"docs": [
{
"url": "https://docs.anthropic.com/en/docs/claude-code/settings",
"title": "Claude Code settings - Claude Code Docs",
"description": "Configure Claude Code with global and project-level settings, and environment variables.",
"required_contains": [
"settings.json",
"CLAUDE.md",
"hooks",
"permissions",
"MCP"
]
},
{
"url": "https://docs.anthropic.com/en/docs/claude-code/setup",
"title": "Advanced setup - Claude Code Docs",
"description": "System requirements, platform-specific installation, version management, and uninstallation for Claude Code.",
"required_contains": [
"System requirements",
"platform-specific installation",
"version management",
"uninstallation",
"Claude Code"
]
},
{
"url": "https://docs.anthropic.com/en/docs/claude-code/github-actions",
"title": "Claude Code GitHub Actions - Claude Code Docs",
"description": "Learn about integrating Claude Code into your development workflow with Claude Code GitHub Actions",
"required_contains": [
"GitHub Actions",
"workflow",
"development workflow",
"integrate",
"Claude Code"
]
}
]
}
}