Repository navigation
[Compatibility] Preserve Codex App automation tools for routed models #2094
Description
What are you trying to accomplish?
Use OpenCodex as a quota supplement while retaining Codex App capabilities such as creating, listing, and updating scheduled automations.
What prevents this today?
In a Codex Desktop task, native OpenAI turns can use the Codex App automation workflow. After switching the task to an OpenCodex-routed non-OpenAI provider/model, the same automation workflow becomes unavailable or the model reports that the automation command/tool is not available. This was observed on macOS Apple Silicon with OpenCodex 2.15.1; please retest on current 2.25.0.
This report is about Codex App automation capability, not a provider API key or account problem. The exact user-facing symptom can vary by routed provider: the automation tool may be absent from the model-visible tool surface, or a request may fail after the tool is discovered.
What should OpenCodex do?
OpenCodex should make this boundary explicit and safe:
- If a routed model can execute Codex App automation tools, preserve and route the capability correctly.
- If it cannot, expose a capability flag in the generated catalog and prevent the UI/model from silently attempting the operation.
- Never report an automation as created or updated unless the native Codex App automation runtime confirms the write.
- Prefer a clear fallback to a native task/model for automation operations.
Example usage or interface
Native Codex task/model:
Ask: create a daily automation
Expected: the Codex App automation flow is callable
OpenCodex-routed task/model:
Ask: create the same daily automation
Observed: automation management is unavailable or the tool is not callable
Alternatives or workarounds
Use a native OpenAI model in a separate task for automation management, and use OpenCodex-routed models only for ordinary coding/research turns. This workaround is safe but makes it easy to lose the boundary unless the UI communicates it.
Additional context
Related compatibility work:
- [Provider compatibility] Codex App plugins unavailable for routed models when catalog forces supports_search_tool=true #1522 — routed catalog capability advertisement can hide Codex App plugin tools
- [Bug]: xAI/Grok 400 after tool_search loads automation_update's nested oneOf schema #122 —
automation_updateschema can break some third-party adapters after tool discovery - kimi-routed turns store non-standard reasoning content (reasoning_text) in thread history — OpenAI remote compaction 400s (array_above_max_length), thread permanently bricked #234 — provider-specific reasoning history reached native compaction and was fixed on the development branch
The report contains no keys, tokens, OAuth data, task IDs, local paths, or personal data. A sanitized event trace can be provided if maintainers need a minimal reproduction.
Checks
- I searched existing issues and documentation.
- This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
- I removed secrets and personal data.
Activity
coderabbitai commentedon Aug 19, 2026
🔗 Related PRs
#426 - feat(codex): add account-qualified model namespaces [open]
#1447 - feat(lab): CL-08 bounded automation with trusted live-route dispatch [merged]
#1529 - fix(codex): keep direct MCP tools visible for routed models [merged]
#1606 - docs(devlog): routed tool-discovery profile plan with landing verification [open]
#1799 - fix(routing): source capability evidence from explicit catalog provenance [merged]
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 Issue enrichment is currently in open beta.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:💬 Have feedback or questions? Drop into our discord!
lidge-jun commentedon Aug 19, 2026
리뷰 · 우선순위 26 / 80
Codex Desktop에서 native 턴은 스케줄 자동화(생성/목록/수정)를 쓰는데, 같은 태스크를 OpenCodex 라우티드 모델로 바꾸면 그 워크플로가 사라지거나 도구가 없다고 한다. 2.15.1 macOS 관찰이고 현재
dev재검증을 요청한다. 기본 native 설치를 깨는 버그가 아니라 라우티드 호환/능력 표시 요청이라 26이다. 자동화는 native 태스크에서 하고 라우티드는 코딩 턴만 쓰는 우회가 있다.라우티드 행은
src/codex/catalog/parsing.ts의applyRoutedCodexToolMode()가tool_mode = "code_mode_only"를 찍는다. 같은 파일의normalizeRoutedCatalogEntry()는supports_search_tool = true로 deferred 발견을 광고한다. 주석대로 code mode에서 MCP/앱 헬퍼는exec의tools글로벌로 남는다.src/adapters/tool-catalog-nudge.ts도await tools.codex_app__list_threads({})를 예로 든다. 최상위 카탈로그에 없다고 없는 것이 아니라는 뜻이다. 모델이 넛지를 무시하면 사용자에게는 “자동화 도구가 없다”로 보인다.ensureStrictCatalogFields()는experimental_supported_tools가 배열이 아니면[]로 만든다. 네이티브 템플릿에 자동화 관련 experimental 도구가 있어도 라우티드 정규화 경로에서 비거나 상속이 끊길 수 있다. 이 필드가 Codex App 자동화 노출의 단일 스위치인지는 이 리뷰에서 단정하지 않는다. 다만 카탈로그 정규화가 플러그인/앱 로더를 통째로 죽이지 않으려고 닫힌 enum을 강제하는 지점은 맞다(input_modalities주석).도구가 발견된 뒤 깨지는 쪽은 #122와 같다. 테스트에
automation_update스키마가 capt되어 있다.tests/xai-transport.test.ts와tests/opencode-go-deepseek.test.ts가 그 이름을 쓴다. 어댑터가 스키마를 거부하면 발견 후 실패가 난다. 성공으로 위장하면 안 된다는 리포터 요구와 맞다. OpenCodex Lab automation(src/lab/automation)은 Codex App 스케줄러가 아니므로 이 이슈의 패치 위치가 아니다.현재
dev에서 자동화가 라우티드에 진짜로 없는지는 2.15.1 로그만으로는 닫히지 않는다. 재현이 카탈로그 광고 문제인지, code-mode 중첩 헬퍼를 모델이 안 부르는 문제인지, 어댑터 스키마 거부인지를 먼저 나눠야 한다.해결방안
라우티드 행에 Codex App 자동화 가능 여부를 카탈로그 플래그로 드러낸다. 실행할 수 없으면 모델/UI가 조용히 시도하지 않게 하고, 가능하다고 찍었으면 native Codex App 런타임이 write를 확인하기 전에는 생성/수정 성공을 말하지 않는다. 플래그 키 이름과 앱 포크 API는 추측하지 않는다. 코드로 손댈 후보는
applyRoutedCodexToolMode()/normalizeRoutedCatalogEntry()의 능력 광고, 그리고experimental_supported_tools가 네이티브 자동화 도구를 지우는지 확인하는 것이다. 어댑터 스키마 거부는 기존automation_update정규화를 유지한다. 2.26/dev에서 native vs 라우티드 같은 태스크로 자동화 생성 한 번을 재현한 뒤에 패치 범위를 고정하는 것이 먼저다. 그 전까지 자동화 관리는 native 태스크로 분리하는 우회가 안전하다.이 댓글은 grok-bot이 작성했습니다
lidge-jun commentedon Aug 19, 2026
현재
dev에서 예약 툴을 일부러 빼는 코드는 못 찾았음.Codex가
automation_update/codex_app__*를 요청에 넣으면 파서가 함수로 넘김.tool_search로 로드된 정의는loadedFromToolSearch로 다음 턴 카탈로그에 남음. 코드모드 넛지는tools.codex_app__list_threads를 중첩 헬퍼로 안내함.이슈는 2.15.1 관찰이고 2.25.0에서 다시 보라고 본문에 적혀 있음. 메인터 쪽 현재 트리에선 잘 됨.
재현 없으면 닫음. 다시 깨지면 버전, 어떤 라우티드 모델, 툴이 안 보였는지 / 보였는데 실패했는지 적고 열어주셈.
이 댓글은 grok-bot이 작성했습니다