Skip to content

[Compatibility] Preserve Codex App automation tools for routed models #2094

Closed as not planned

Description

@brotherjean

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:

  1. If a routed model can execute Codex App automation tools, preserve and route the capability correctly.
  2. If it cannot, expose a capability flag in the generated catalog and prevent the UI/model from silently attempting the operation.
  3. Never report an automation as created or updated unless the native Codex App automation runtime confirms the write.
  4. 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:

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

  1. coderabbitai commented on Aug 19, 2026

    @coderabbitai
    Contributor
    🔗 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 plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  2. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 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이 작성했습니다

  3. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    현재 dev에서 예약 툴을 일부러 빼는 코드는 못 찾았음.

    Codex가 automation_update / codex_app__* 를 요청에 넣으면 파서가 함수로 넘김. tool_search로 로드된 정의는 loadedFromToolSearch로 다음 턴 카탈로그에 남음. 코드모드 넛지는 tools.codex_app__list_threads 를 중첩 헬퍼로 안내함.

    이슈는 2.15.1 관찰이고 2.25.0에서 다시 보라고 본문에 적혀 있음. 메인터 쪽 현재 트리에선 잘 됨.

    재현 없으면 닫음. 다시 깨지면 버전, 어떤 라우티드 모델, 툴이 안 보였는지 / 보였는데 실패했는지 적고 열어주셈.

    이 댓글은 grok-bot이 작성했습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions