model_catalog_json pour changer à tout moment depuis la liste /model).
Installation
Téléchargement officiel (version macOS)
https://openai.com/en/codex/Installation via la ligne de commande
Configuration de base
Configurer à l’aide des fichiers de configuration
- Modifiez le fichier de configuration
~/.codex/config.tomlen ajoutant les paramètres suivants :
- Affectez votre clé API AIHubMix à la variable d’environnement indiquée par
env_key(attention à ne pas mettre d’espaces de part et d’autre du=) :
~/.zshrc / ~/.bashrc pour la rendre persistante. Récupérez votre clé dans la console AIHubMix.
Par défaut, un fournisseur personnalisé ne lit pas la clé
OPENAI_API_KEY de ~/.codex/auth.json. Transmettez la clé via la variable d’environnement indiquée par env_key ; sinon, les requêtes partent sans clé et renvoient une erreur 401.model par n’importe quel autre ID de modèle disponible sur AIHubMix. Pour les modèles non OpenAI comme GLM ou Claude, Codex affiche Model metadata for ... not found et revient aux paramètres par défaut ; utilisez plutôt la méthode des modèles personnalisés décrite plus bas.
Configurer via cc-switch
- Lancez CC-Switch et ajoutez le fournisseur.

- Sélectionnez « AiHubMix » dans la liste prédéfinie.

- Saisissez votre clé dans le champ « API Key » et cliquez sur « Add » pour enregistrer les paramètres.

- Revenez à la page d’accueil, sélectionnez « AiHubMix » dans la liste des fournisseurs et cliquez sur « Enable » pour commencer à l’utiliser.

Utilisation de Codex
Utilisation dans le terminal
- Ouvrez le terminal, accédez au répertoire de votre projet et exécutez la commande
codex.
-
Définissez les autorisations selon vos besoins ; vous pouvez les modifier à tout moment avec
/permissions. -
Sélectionnez le modèle dont vous avez besoin. La barre d’état en bas affiche le modèle courant ; saisissez
/modelpour en changer.

- Saisissez du langage naturel ; si vous recevez une réponse normale, la configuration est réussie.

Utilisation dans l’application de bureau Codex
- Ouvrez l’application de bureau Codex et sélectionnez le répertoire de travail.
- Saisissez la tâche dans la zone de saisie ; si vous recevez une réponse normale, la configuration est réussie.

Références de commandes utiles
Consultezcodex --help pour la liste complète. Voici les commandes et options les plus courantes :
Utiliser des modèles personnalisés dans Codex
Par défaut, Codex n’affiche que les modèles officiels d’OpenAI dans la liste/model. Si vous souhaitez sélectionner directement n’importe quel modèle disponible sur AIHubMix (GLM, Claude, Gemini, DeepSeek, Kimi, Qwen, etc.) depuis cette liste, vous pouvez utiliser le mécanisme officiel de « modèles personnalisés » : déclarez les modèles disponibles via un fichier JSON local (model_catalog_json), puis dirigez les requêtes vers AIHubMix à l’aide de [model_providers.aihubmix].
Documentation officielle : Advanced Configuration · Custom model providers
Deux méthodes d’intégration
La section « Configuration de base » plus haut sur cette page décrit la méthode de base, tandis que cette section décrit la méthode des modèles personnalisés. Voici les différences, à choisir selon vos besoins :
Le processus complet ne comporte que 4 étapes : générer le fichier de catalogue → modifier
config.toml → définir la variable d’environnement → redémarrer et choisir le modèle.
Étape 1 : générer le fichier de catalogue de modèles
Le fichier de catalogue est une structure{ "models": [ ... ] } ; chaque élément du tableau décrit un modèle sélectionnable dans /model. Nous expliquons d’abord les champs avec un modèle fixe, puis nous fournissons un script pour générer en masse les 30 premiers modèles.
1.1 Comprendre d’abord le format : un modèle fixe
Voici un catalogue minimal complet dont la prise en charge par Codex a été vérifiée (ne contenant que le modèleglm-5.2). Enregistrez-le simplement sous ~/.codex/model-catalogs/custom-models.json pour l’utiliser ; pour ajouter d’autres modèles, continuez d’ajouter des entrées de même structure au tableau models.
À propos de
base_instructions : il s’agit du prompt système de ce modèle. L’exemple utilise une simple phrase comme valeur de remplacement, et le modèle fonctionne normalement ; pour obtenir un comportement de codage au plus proche du Codex natif, remplacez-la par les base_instructions complètes de l’un des modèles intégrés listés par codex debug models --bundled (c’est exactement ce que fait le script de génération en masse de la section suivante).
Le catalogue officiel utilise des champs en snake_case (
display_name, supported_in_api, visibility). Deux types d’erreurs font ignorer l’intégralité du catalogue, et les modèles n’apparaissent pas dans /model : l’absence d’un champ obligatoire provoque missing field ... ; l’usage d’un ancien format camelCase comme displayName, hidden, ou d’une valeur non reconnue, provoque unknown variant .... Suivez le jeu de champs présenté dans cet article pour éviter ces écueils.1.2 Générer en masse les 30 premiers modèles
Saisir plusieurs entrées à la main expose à des oublis de champs. Pour écrire en une seule fois dans le catalogue les 30 premiers LLM de l’API de liste des modèles AIHubMix, utilisez le script ci-dessous : il clone un modèle intégré comme modèle de référence, si bien que les champs obligatoires (y compris lesbase_instructions correctes) sont par nature complets, quelle que soit la version de Codex. Nécessite curl, python3 et la CLI codex déjà installée :
slug, display_name, description, context_window, etc.) et limite les niveaux de raisonnement à low / medium / high ; tous les autres champs obligatoires sont clonés depuis le modèle intégré ; il s’agit précisément du jeu de champs de la section 1.1, à ceci près que base_instructions utilise le prompt officiel complet.
Le fichier généré est volumineux (chaque entrée contient lesbase_instructionscomplètes, soit environ 1 à 2 Mo), ce qui est normal. Après l’exécution, vérifiez aveccodex debug modelsqu’il est correctement analysé (voir l’étape 5).
La ligne de filtrageimage_generationdu script est intentionnellement conservée : parmi les résultats detype=llm, quelques rares modèles portent aussi le labelimage_generation(par exemplegemini-3.1-flash-image), qui ne conviennent pas au dialogue ; le script les ignore automatiquement avant de prendre les 30 premiers.
Étape 2 : modifier config.toml
Éditez ~/.codex/config.toml, ajoutez model_catalog_json au niveau racine et définissez le fournisseur aihubmix :
wire_api n’accepte désormais que responses (qui est aussi la valeur par défaut s’il est omis) ; chat n’est plus pris en charge. Codex n’utilise que l’API Responses d’OpenAI (/v1/responses) ; AIHubMix étant nativement compatible avec l’API Responses, il suffit de pointer directement vers https://aihubmix.com/v1, sans avoir à mettre en place votre propre proxy de conversion.model doit être un modèle présent dans votre catalogue. Si vous avez écrit le catalogue à la main en 1.1, indiquez glm-5.2. Si vous avez utilisé le script de 1.2, le catalogue contient les 30 premiers modèles renvoyés par l’API à ce moment-là, et cette liste évolue : exécutez d’abord codex debug models | grep -o '"slug":"[^"]*"' et choisissez un modèle dans le résultat (ce guide utilise claude-opus-5-5).
Une fois configuré, votre config.toml ressemblera à ceci (les cadres rouges indiquent les éléments clés de cette étape : model / model_provider / model_catalog_json au niveau racine, ainsi que la section [model_providers.aihubmix]) :

Étape 3 : définir la variable d’environnement
Configurez la variable d’environnement spécifiée parenv_key ci-dessus (attention à ne pas mettre d’espaces de part et d’autre du =) :
~/.zshrc / ~/.bashrc pour la rendre persistante. Récupérez votre clé dans la console AIHubMix.
Étape 4 : redémarrer et choisir le modèle
Redémarrez l’application / le TUI Codex pour que le fichier de catalogue prenne effet, puis :/model, tous les modèles déclarés dans le catalogue s’affichent ; sélectionnez avec les flèches et confirmez avec Entrée :

/model vous permet aussi de choisir le niveau de raisonnement (effort) ; choisissez low / medium / high selon vos besoins.

Étape 5 : vérifier la prise en compte
- Une fois dans Codex, saisissez
/model, vérifiez que vous voyez bien les modèles déclarés dans le catalogue et basculez sur l’un d’eux (par exempleclaude-opus-5-5). - Posez une question quelconque pour vérifier que la chaîne fonctionne. Attention : ne vous fiez pas à la question « quel modèle es-tu ? » :
base_instructionsindique « You are Codex… based on GPT-5 », si bien que tous les modèles se présenteront comme GPT-5 ; la question ne permet pas de distinguer le modèle réel. Pour confirmer le modèle réellement appelé, connectez-vous à la console AIHubMix, ouvrez la page « Journaux » et consultez lemodel_idde cette requête : c’est cela qui fait foi.
Model changed to ... s’affiche en haut, et la barre d’état en bas indique le modèle courant ainsi que la fenêtre de contexte (sur l’image ci-dessous, le modèle a été basculé sur claude-opus-5-5, avec une fenêtre de 950K) :

Questions fréquentes sur les modèles personnalisés
-
Le démarrage échoue avec
legacy profile = "..." config is no longer supported. Depuis Codex 0.134.0,profile =et[profiles.xxx]ne sont plus pris en charge. Supprimez ces deux éléments et réécrivez la configuration comme indiqué dans la section « Configuration de base » plus haut. - Catalogue généré avec l’ancien script. L’ancien script ne désactivait pas le mode code sur le modèle intégré servant de modèle de référence. Avec les mises à jour de Codex, le premier modèle intégré est désormais un modèle de la série gpt-6 : le catalogue obtenu s’analyse toujours correctement, mais les requêtes ne transmettent aucune liste d’outils standard. Régénérez le catalogue avec le nouveau script de l’étape 1.
-
Vous ne voyez pas les modèles personnalisés dans
/model? Vérifiez dans l’ordre suivant :- Exécutez d’abord
codex debug models. S’il signalemissing field ...(le plus fréquent, champ obligatoire manquant) ouunknown variant ...(nom de champ / valeur incorrect), c’est que l’intégralité du catalogue a échoué à l’analyse et a été ignorée : régénérez-le avec le script « cloner le modèle intégré » de l’étape 1. - Vérifiez que
model_catalog_jsonest bien au niveau racine deconfig.toml, et non dans une section[model_providers.*]; - Vérifiez que le JSON utilise les champs officiels en snake_case et que
visibilityvautlist; - Si
codex debug modelsaffiche déjà tous les modèles mais que, dans l’application de bureau (Desktop App), il n’en reste qu’un ou deux et que le modèle courant s’affiche comme « personnalisé », il s’agit d’un bug connu de l’application de bureau : elle superpose, au-dessus du catalogue local, un filtre par liste blanche de slugs officiels, qui supprime du sélecteur les modèles non officiels (voir les GitHub Issues #19694 et #15138). Dans ce cas, le modèle est en réalité toujours appelé conformément aumodel = "..."deconfig.toml(les journaux AIHubMix le confirment) ; seul son nom ne s’affiche pas. Pour un affichage correct, utilisez la CLIcodex/ le TUI dans le terminal ; sur l’application de bureau, vous ne pouvez que coder en durmodel = "le modèle souhaité"dansconfig.toml, en attendant un correctif officiel.
- Exécutez d’abord
-
Le catalogue « remplace », il ne « fusionne » pas.
model_catalog_jsonremplace l’intégralité de la liste de modèles au lieu d’y ajouter des entrées (vérifié : avec seulement 2 modèles dans le catalogue,codex debug modelsn’en montre plus que 2, tous lesgpt-5.xintégrés ayant disparu). Si vous voulez les deux types, écrivez-les ensemble dans votre catalogue personnalisé. -
La requête signale une erreur de protocole / impossible de se connecter. C’est le plus souvent que le
base_urlou lewire_apidu fournisseur n’est pas correctement apparié. Pour AIHubMix, il faut impérativementwire_api = "responses"+base_url = "https://aihubmix.com/v1". Si vous intégrez un tiers ne prenant en charge que Chat Completions, un proxy de conversion local est nécessaire ; les utilisateurs d’AIHubMix n’ont pas besoin de cette étape. -
« Reconnecting » en boucle, puis une erreur. Commencez par lire la dernière ligne d’erreur.
401 Unauthorizedsignifie que la requête est partie sans clé : vérifiez que la section du fournisseur définit bienenv_keyet que la variable est définie dans le terminal depuis lequel vous lancez Codex (ouvrez un nouveau terminal ou exécutezsource ~/.zshrc). Une clé présente uniquement dansauth.jsonn’est pas utilisée par les fournisseurs personnalisés. -
L’analyse signale
missing field ...(par exemplemissing field base_instructions). Une entrée n’a pas de champ obligatoire. Les versions récentes de Codex appliquent une analyse stricte :base_instructions,availability_nux,upgrade,supports_reasoning_summaries,support_verbosity,default_verbosity,apply_patch_tool_type,truncation_policy,supports_parallel_tool_calls,experimental_supported_tools, etc., doivent tous être présents. Le script « cloner le modèle intégré » de l’étape 1 permet de tout compléter en une fois. -
L’analyse signale
unknown variant. Le JSON du catalogue contient un nom de champ ou une valeur que Codex ne reconnaît pas (souvent des anciens formats camelCase commedisplayName/hidden). Passez au jeu de champs snake_case présenté dans cet article.
Articles de référence
- Documentation officielle : Advanced Configuration | Configuration Reference
- Format de référence du catalogue officiel intégré : codex-rs/models-manager/models.json
- Guide communautaire : Codex config.toml : intégrer n’importe quel fournisseur personnalisé en 6 lignes
Dernière mise à jour : 2026-10-15