Skip to main content
Codex CLI est l’outil de programmation en terminal officiel d’OpenAI. Après connexion à AIHubMix, une seule clé API suffit pour appeler et changer librement entre les modèles GLM, Claude, Gemini, DeepSeek et d’autres, sans dépendre d’un seul fournisseur. Ce guide couvre deux approches : l’approche de base (un seul modèle fixe, la plus rapide) et l’approche modèles personnalisés (un fichier catalogue 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

  1. Modifiez le fichier de configuration ~/.codex/config.toml en ajoutant les paramètres suivants :
  1. 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 =) :
Il est recommandé de l’ajouter à ~/.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.
Depuis Codex 0.134.0, profile = "..." et [profiles.xxx] ne sont plus pris en charge. Les anciennes configurations échouent au démarrage avec l’erreur legacy profile = "..." config is no longer supported. Si vous avez suivi une version précédente de ce guide, supprimez ces deux éléments et utilisez la configuration ci-dessus. Si vous avez besoin de plusieurs configurations, placez les paramètres qui diffèrent dans ~/.codex/<name>.config.toml (en clés de niveau racine, et non sous [profiles.xxx]), puis lancez Codex avec codex --profile <name>.
Vous pouvez remplacer 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

  1. Lancez CC-Switch et ajoutez le fournisseur.
Écran d'ajout de fournisseur dans CC-Switch
  1. Sélectionnez « AiHubMix » dans la liste prédéfinie.
Sélection d'AiHubMix dans la liste de préréglages CC-Switch
  1. Saisissez votre clé dans le champ « API Key » et cliquez sur « Add » pour enregistrer les paramètres.
Saisie de la clé API et enregistrement dans CC-Switch
  1. Revenez à la page d’accueil, sélectionnez « AiHubMix » dans la liste des fournisseurs et cliquez sur « Enable » pour commencer à l’utiliser.
Activation du fournisseur AiHubMix dans CC-Switch

Utilisation de Codex

Utilisation dans le terminal

  1. Ouvrez le terminal, accédez au répertoire de votre projet et exécutez la commande codex.
  1. Définissez les autorisations selon vos besoins ; vous pouvez les modifier à tout moment avec /permissions.
  2. Sélectionnez le modèle dont vous avez besoin. La barre d’état en bas affiche le modèle courant ; saisissez /model pour en changer.
Écran de démarrage de Codex avec le modèle courant dans la barre d'état
  1. Saisissez du langage naturel ; si vous recevez une réponse normale, la configuration est réussie.
Saisie en langage naturel dans le terminal Codex avec réponse normale

Utilisation dans l’application de bureau Codex

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

Références de commandes utiles

Consultez codex --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èle glm-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.
Description des champs (ceux que vous modifierez généralement) :
Les autres champs sont obligatoires et leurs valeurs sont fixes : 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. Les versions récentes de Codex (codex-cli 0.130.0 et ultérieures, revérifié sur 0.162.1) appliquent une analyse stricte : s’il manque ne serait-ce qu’un seul champ, l’intégralité du catalogue est ignorée et Codex revient au catalogue intégré, avec une erreur du type missing field base_instructions, qui se traduit par « aucun modèle personnalisé visible dans /model ». Vous ne pouvez donc plus supprimer de champ de l’exemple ci-dessus.
À 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 les base_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 :
Le script ne remplace que les champs propres à chaque modèle (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 les base_instructions complètes, soit environ 1 à 2 Mo), ce qui est normal. Après l’exécution, vérifiez avec codex debug models qu’il est correctement analysé (voir l’étape 5).
La ligne de filtrage image_generation du script est intentionnellement conservée : parmi les résultats de type=llm, quelques rares modèles portent aussi le label image_generation (par exemple gemini-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.
Si vous souhaitez par la même occasion définir un modèle par défaut et un niveau de raisonnement par défaut (utilisés directement au démarrage, sans sélection manuelle à chaque fois), vous pouvez utiliser cette configuration plus complète :
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]) : Config model_catalog_json et fournisseur aihubmix dans config.toml

Étape 3 : définir la variable d’environnement

Configurez la variable d’environnement spécifiée par env_key ci-dessus (attention à ne pas mettre d’espaces de part et d’autre du =) :
Il est recommandé de l’ajouter à ~/.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 :
Après avoir saisi /model, tous les modèles déclarés dans le catalogue s’affichent ; sélectionnez avec les flèches et confirmez avec Entrée : Sélecteur /model de Codex affichant la liste des modèles personnalisés AIHubMix Une fois le modèle sélectionné, /model vous permet aussi de choisir le niveau de raisonnement (effort) ; choisissez low / medium / high selon vos besoins. Choix du niveau de raisonnement pour claude-opus-5-5

Étape 5 : vérifier la prise en compte

  1. 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 exemple claude-opus-5-5).
  2. 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_instructions indique « 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 le model_id de cette requête : c’est cela qui fait foi.
Une fois le changement réussi, un message 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) : Session Codex et barre d'état après passage à claude-opus-5-5

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 :
    1. Exécutez d’abord codex debug models. S’il signale missing field ... (le plus fréquent, champ obligatoire manquant) ou unknown 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.
    2. Vérifiez que model_catalog_json est bien au niveau racine de config.toml, et non dans une section [model_providers.*] ;
    3. Vérifiez que le JSON utilise les champs officiels en snake_case et que visibility vaut list ;
    4. Si codex debug models affiche 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 au model = "..." de config.toml (les journaux AIHubMix le confirment) ; seul son nom ne s’affiche pas. Pour un affichage correct, utilisez la CLI codex / le TUI dans le terminal ; sur l’application de bureau, vous ne pouvez que coder en dur model = "le modèle souhaité" dans config.toml, en attendant un correctif officiel.
  • Le catalogue « remplace », il ne « fusionne » pas. model_catalog_json remplace 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 models n’en montre plus que 2, tous les gpt-5.x inté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_url ou le wire_api du fournisseur n’est pas correctement apparié. Pour AIHubMix, il faut impérativement wire_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 Unauthorized signifie que la requête est partie sans clé : vérifiez que la section du fournisseur définit bien env_key et que la variable est définie dans le terminal depuis lequel vous lancez Codex (ouvrez un nouveau terminal ou exécutez source ~/.zshrc). Une clé présente uniquement dans auth.json n’est pas utilisée par les fournisseurs personnalisés.
  • L’analyse signale missing field ... (par exemple missing 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 comme displayName / hidden). Passez au jeu de champs snake_case présenté dans cet article.

Articles de référence


Dernière mise à jour : 2026-10-15