Codex Desktop App / codex app-server does not honor project-scoped OTel config in trusted projects
What version of the Codex App are you using (From “About Codex” dialog)?
Codex 26.325.31654 (0.118.0-alpha.2)
What subscription do you have?
ChatGPT Enterprise
What platform is your computer?
Darwin 24.2.0 arm64 arm
What issue are you seeing?
We observed a difference between Codex CLI and Codex Desktop App regarding OpenTelemetry configuration.
- Codex CLI can read [otel] settings from a trusted project's .codex/config.toml and successfully send OTel logs.
- Codex Desktop App (appears to run via codex app-server) does not seem to honor the same project-scoped .codex/config.toml OTel settings.
- If the same [otel] configuration is added to the user's global ~/.codex/config.toml, Codex Desktop App can send telemetry.
This makes team-wide telemetry difficult in fork-based rollout because global config is a per-user workaround, not a scalable repository-distributed configuration model.
What steps can reproduce the bug?
- Create a trusted project with .codex/config.toml containing a valid [otel] configuration.
- Confirm that codex exec or Codex CLI reads the project-scoped config and exports OTel logs.
- Open the same trusted project in Codex Desktop App.
- Use Codex Desktop App normally and check whether OTel logs are exported.
- Add the same [otel] settings to the user's global ~/.codex/config.toml.
- Restart Codex Desktop App and repeat the same test.
Observed result:
- CLI: project-scoped OTel works
- Desktop App / app-server: project-scoped OTel appears not to work
- Desktop App / app-server: global OTel works
Uploaded thread: 019d6bed-eb78-7cc0-bc0f-6c655af763b7
What is the expected behavior?
Codex Desktop App / codex app-server should either:
- honor [otel] settings from a trusted project's .codex/config.toml, consistent with Codex CLI, or
- explicitly document that OTel is supported only from global ~/.codex/config.toml.
For team usage, project-scoped telemetry should be officially supported because depending on per-user global config does not scale in fork-based rollout.
Additional information
Please clarify whether this is expected behavior or a bug.
The main product request is:
- document the current intended scope for OTel config (global only vs project-local), and
- support project-scoped telemetry in Codex Desktop App / codex app-server for organizational rollout.
Feedback thread ID: 019d6bed-eb78-7cc0-bc0f-6c655af763b7
--
CodexDesktop App: 26.325.31654
Internal Codex binary version: 0.118.0-alpha.2
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Thanks. I reviewed the potentially related issues, but this does not appear to be the same problem.
I can confirm this is still reproducible on the latest Codex Desktop version available to me:
26.409.20454.The facts I can confirm are:
AGENTS.mdis picked up correctly for the same project.~/.codex/config.toml, they work..codex/config.toml, Codex Desktop App still does not emit usage logs.So this seems meaningfully different from the related issues listed above.
Since this is still reproducible in the latest environment, could you please re-investigate this issue and consider a fix on the Desktop side?
At this point, the consistent behavior I can observe is:
Hi @etraut-openai — before anything else, I want to acknowledge that this repository currently has 2.5k+ open issues, and I fully understand it is not realistic for the team to respond to every report promptly. The volume you are dealing with is extraordinary, and I can only imagine how difficult it must be to make priority calls across that many reports every single day.
With that said, I would still like to ask for a minimum of triage attention on this particular issue. It has been open for 2 weeks without any acknowledgment, and in the meantime the org-wide OTel-based usage metering rollout has been effectively stopped for our organization. I am trying to keep the ask as small and specific as possible precisely because I know how stretched the team is.
Still reproducing on the latest Codex Desktop:
26.417.40842 (1851). Same matrix as before — CLI emits OTel, Desktop App does not, when the[otel]block only lives in the project-scoped.codex/config.tomlof a trusted project.Why this is urgent for us. We distribute
.codex/config.tomlthrough a single repo fork to roll telemetry out to the entire QA organization. The global-config workaround does not scale — it requires every engineer to hand-edit~/.codex/config.toml, which breaks our clone-and-go model. As a result we currently have no reliable visibility into actual Codex usage across the org, which directly impacts capacity planning and the business case for continued rollout.Minimal ask. I am not asking for an immediate fix — I am asking for initial investigation and triage clarity:
[otel]in Desktop / app-server intended to be supported, a known gap, or explicitly out of scope?Please let me know what additional information would help move this forward, and I will provide it.
@etraut-openai — thank you for picking this up so quickly. Seeing PR #18725 ("Reload app-server OTel from thread config") opened and iterated on within a few hours was genuinely encouraging, and I appreciate the effort that went into it.
I noticed the PR was closed unmerged the same day. I understand there may have been reasons to close it as-is. If a replacement or follow-up is in flight, no need for details if it's too early to share — even a brief status signal like "working on it", "rethinking the approach", or "deprioritized for now" would help us plan on our side, since this is still blocking our org-wide rollout.
Thanks again.
Adding a related data point from a local OTLP receiver: with Codex CLI
0.128.0, project-scoped.codex/config.tomlcan exportcodex.turn.token_usageover OTLP HTTP JSON. The token metric arrived as an OTLP histogram, with token counts inhistogram.dataPoints[].sumandtoken_typeattributes likeinput,cached_input,output,reasoning_output, andtotal.The remaining rollout blocker for us is the config-scope distinction described here: terminal/exec telemetry works from project config, but desktop/app-server coverage still needs project-scoped support or clearer documentation. Once desktop/app-server honors trusted-project OTel config, downstream local receivers can keep a shadow lane and compare it against local SQLite before promotion.