model_catalog_json in profile not honoured
Open 💬 4 comments Opened Aug 20, 2026 by siddhpant
What version of Codex CLI is running?
v0.148.0
What subscription do you have?
Enterprise
Which model were you using?
_No response_
What platform is your computer?
Linux
What terminal emulator and version are you using (if applicable)?
_No response_
Codex doctor report
What issue are you seeing?
I set model_catalog_json in a profile file.
Codex doesn't apply that setting.
The setting isn't present on main config.
What steps can reproduce the bug?
Make a model_catalog_json and use it in a profile.
What is the expected behavior?
The setting is honoured.
Additional information
_No response_
4 Comments
Source trace on main (@67b2c8c):
model_catalog_jsoninside a legacy[profiles.X]table is dead config — it parses but is never applied.load_model_catalog(cfg.model_catalog_json…)(codex-rs/core/src/config/mod.rs:3878), wherecfgis the layer-stack merge result.[profiles.X]tables parse intoConfigToml.profiles(codex-rs/config/src/config_toml.rs:312–317; the field exists in the legacyConfigProfileatcodex-rs/config/src/profile_toml.rs:41), but nothing merges those tables into the effective config. The legacy selector is now a hard error: "legacyprofile = …config is no longer supported; use--profile {profile}with{profile}.config.tomlinstead" (mod.rs:3222–3229).The working path today is profile v2: put
model_catalog_jsonin${CODEX_HOME}/NAME.config.tomland run with--profile NAME. That file is merged as a fullConfigTomllayer above the user config (codex-rs/config/src/loader/mod.rs:105–119, 310–357), so the field is honored there. (If you combine--profile NAMEwith a same-named legacy table, the loader errors with migration guidance —loader/mod.rs:330–343.)So the setting isn't broken — it's silently ignored in the legacy table shape. The trap is that
[profiles.X]still parses without warning; a load-time warning (or rejection) for unapplied legacy profile tables would make this discoverable.@tsuvic I added it in profile
fileas mentioned in the issue description. The profilefileimplies profilev2. The setting is not honoured in new way.Your AI model assumed an incorrect case.
@siddhpant
I thought I had reproduced a similar issue and was hoping the information might be helpful, but sorry I’ll check it later.
Interested in this one: profile-scoped catalogs would let provider-specific model metadata stay out of the base config, which is the cleaner layout for managing several custom providers side by side.
We will verify locally how model_catalog_json behaves in a profile file on current versions and report back with details if it reproduces here.