Note
Grok responding on behalf of Julius.
Triage
Thanks @Neonsy for the thorough diagnosis, and especially the trusted and untrusted CODEX_HOME controls! This is a real gap on current main, including nightly 0.0.46-nightly.20261003.2623. Nothing since that nightly touches the Codex session path.
What happens
Codex loads a project .codex layer (MCP servers, hooks, and exec policies) only when that project is trusted in the Codex home's config.toml. Full Access doesn't grant that trust. In CodexAdapterV2, Full Access only starts the turn with approvalPolicy: "never" and sandboxPolicy: { type: "dangerFullAccess" }. Thread start passes the project cwd and session config overrides, which Codex layers above the user and project config.
T3 never calls config/read with includeLayers, and the adapter doesn't subscribe to configWarning. So when Codex disables the project layer, the MCP tools just go missing and the layer's disabledReason never reaches the chat. Codex's own TUI shows that reason by reading the project layer, and T3 doesn't. That matches your isolated controls: same project config, with and without trust_level = "trusted".
This is separate from #13437 (open; a partial tool catalog while MCP servers are still starting), #297 (closed; an MCP process whose working directory didn't match the project), and #9230 (closed; env_vars on desktop-launched profiles).
Scope
The bug is the missing diagnostic. A per-project "Trust this project" action would be a separate product change. Trusting a project also enables its hooks and exec policies, the entry has to use the exact project key from disabledReason, and the app-server schema T3 generates has no trust RPC. Copying the project's MCP servers into the session config would quietly bypass Codex's trust gate. A maintainer will decide on the fix direction.
Workaround
This matches your isolated control. In the config.toml of the Codex home named in disabledReason, add the project key Codex names, with trust_level = "trusted". Then start a new Codex session, because an already-open session won't pick up the project layer. You don't need to restart T3 for the file edit itself. On a shadow-home instance, config.toml is shared from the configured Codex home unless that shadow already has its own real file.