Aller au contenu
OmniRoute source

Codex CLI — Configuration with OmniRoute (Français)

TOML est le seul format effectif. Les versions modernes de Codex lisent exclusivement ~/.codex/config.toml (vérifié avec codex-cli 0.147.0 : codex --help indique que les substitutions -c/--config sont « chargées depuis ~/.codex/config.toml »). L’ancien fichier ~/.codex/config.yaml appartenait à l’ancienne CLI npm et est ignoré silencieusement. Le générateur du tableau de bord (/api/cli-tools/apply, outil codex) écrit du TOML en effectuant une fusion prudente : les clés existantes et les blocs des autres fournisseurs sont préservés, la clé d’API reste dans OMNIROUTE_API_KEY (jamais dans le fichier), et tout ancien fichier config.yaml restant est signalé dans une note de migration sans être modifié.

Remplacez <YOUR_HOST> et <YOUR_KEY> par vos valeurs :

~/.codex/config.toml
model = "cx/gpt-5.5"
model_provider = "omniroute"
model_reasoning_effort = "xhigh"
model_context_window = 400000
model_auto_compact_token_limit = 350000
tool_output_token_limit = 32768 # limite de stockage de l’historique par appel d’outil
[model_providers.omniroute]
name = "OmniRoute"
base_url = "http://<YOUR_HOST>:20128/v1"
env_key = "OMNIROUTE_API_KEY"
requires_openai_auth = false
wire_api = "responses"
Fenêtre de terminal
# ~/.bashrc ou ~/.zshrc — valeur réelle de la clé, jamais dans config.toml
export OMNIROUTE_API_KEY="<YOUR_KEY>"

macOS : Codex intégré à l’application ChatGPT

Section intitulée « macOS : Codex intégré à l’application ChatGPT »

Si vous avez installé Codex via l’application de bureau ChatGPT, le binaire codex peut n’exister que dans le paquet de l’application et ne pas encore se trouver dans le PATH de votre shell. Ajoutez le répertoire des ressources au fichier de démarrage de votre shell :

Fenêtre de terminal
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"

Ouvrez un nouveau shell, puis vérifiez :

Fenêtre de terminal
command -v codex
codex --version

OmniRoute local sans authentification : une clé factice suffit

Section intitulée « OmniRoute local sans authentification : une clé factice suffit »

Codex vérifie que la variable d’environnement désignée par env_key existe avant que la première requête ne quitte la CLI. Si votre instance OmniRoute locale ne nécessite pas d’authentification, n’importe quelle valeur factice non vide convient :

Fenêtre de terminal
export OMNIROUTE_API_KEY="${OMNIROUTE_API_KEY:-local}"

Utilisez plutôt une véritable clé lorsque votre serveur OmniRoute est protégé ou distant.

Options d’hôte courantes

Accès URL
Réseau local http://192.168.0.1:20128/v1
Tailscale http://100.x.x.x:20128/v1
Boucle locale http://localhost:20128/v1

wire_api = "responses" — pourquoi cela fonctionne avec tous les modèles

Section intitulée « wire_api = "responses" — pourquoi cela fonctionne avec tous les modèles »

Codex CLI a rendu obsolète wire_api = "chat" (Chat Completions) en février 2026 et exige désormais wire_api = "responses" (API Responses d’OpenAI). Définir wire_api = "chat" provoque un plantage immédiat au démarrage depuis la v0.138.

De nombreux fournisseurs, notamment GLM et Kimi, n’exposent encore qu’un point de terminaison Chat Completions. DeepSeek V4 expose désormais une API Responses native ainsi qu’un point de terminaison compatible avec Anthropic ; OmniRoute utilise Responses par défaut et permet à chaque connexion DeepSeek de sélectionner la compatibilité Anthropic.

OmniRoute résout cela de manière transparente :

Codex CLI
→ wire_api = "responses"
→ POST /v1/responses (OmniRoute)
→ OmniRoute sélectionne le protocole natif du fournisseur et effectue la traduction si nécessaire
→ POST /responses (DeepSeek V4) ou /chat/completions (Mistral / GLM / Kimi / autres)

Vous n’avez jamais besoin d’un proxy de traduction distinct lorsque vous utilisez OmniRoute. Tous les modèles utilisent wire_api = "responses" — OmniRoute s’occupe du reste.

wire_api est la valeur par défaut — ce champ utilise "responses" par défaut et peut être entièrement omis de config.toml. Ne le définissez explicitement que pour documenter l’intention.


Champ Description
model_context_window Budget total de jetons pour le modèle actif. Définissez-le sur la limite annoncée du modèle.
model_auto_compact_token_limit Seuil déclenchant le compactage automatique de l’historique. Maximum : 90 % de model_context_window — les valeurs supérieures à 90 % sont ignorées silencieusement.
tool_output_token_limit Plafond du nombre de jetons stockés dans l’historique pour chaque sortie d’appel d’outil. Empêche une seule réponse volumineuse d’un outil de remplir la fenêtre. Il ne s’agit pas de la sortie maximale — c’est un plafond de stockage dans l’historique.
compact_prompt Remplacement en ligne du prompt système utilisé pendant le compactage (v0.138+).

Remarque concernant model_max_output_tokens : ce champ ne fait pas partie du schéma de configuration de Codex CLI (il est absent de la base de code Rust de Codex). Il est ignoré silencieusement s’il est défini. Ne vous y fiez pas — utilisez tool_output_token_limit pour contrôler la quantité de sorties d’outils stockée dans l’historique.

Modèle ID OmniRoute Fenêtre de contexte auto_compact tool_output_limit
GPT-5.5 cx/gpt-5.5 400k fiables (1M au maximum) 350,000 32,768
Kimi K2.7 (raisonnement) kmc/kimi-k2.7 131,072 112,000 32,768
Kimi K2.6 kmc/kimi-k2.6 131,072 112,000 32,768
GLM-5.2 / 5.2-max (raisonnement) glm/glm-5.2 131,072 112,000 32,768
MiMo V2.5 Pro (raisonnement) opencode-go/mimo-v2.5-pro 131,072 112,000 32,768
Qwen 3.7 Plus (raisonnement) opencode-go/qwen3.7-plus 32,768 28,000 16,384
DeepSeek V4 Pro (OllamaCloud) ollamacloud/deepseek-v4-pro 131,072 112,000 32,768
DeepSeek V4 Pro ds/deepseek-v4-pro 1,000,000 900,000 65,536
MiMo V2.5 opencode-go/mimo-v2.5 131,072 112,000 32,768
Gemma 4 31B (OllamaCloud) ollamacloud/gemma4:31b 32,768 28,000 16,384
Nemotron 3 Super (OllamaCloud) ollamacloud/nemotron-3-super 32,768 28,000 16,384
GPT-OSS 20B (OllamaCloud) ollamacloud/gpt-oss:20b 32,768 28,000 16,384
DeepSeek V4 Flash (OllamaCloud) ollamacloud/deepseek-v4-flash 65,536 56,000 16,384
Gemini 3 Flash Preview (OllamaCloud) ollamacloud/gemini-3-flash-preview 1,000,000 850,000 32,768
GLM-5 Turbo glm/glm-5-turbo 131,072 112,000 16,384
GLM-4.7 Flash glm/glm-4.7-flash 131,072 112,000 16,384
Mistral Large Latest mistral/mistral-large-latest 262,144 220,000 16,384

Formule de compactage : effective_window = model_context_window - min(tool_output_token_limit, 20000). Les valeurs supérieures à 20k ne modifient pas le seuil de déclenchement du compactage.

Règle générale : définissez model_auto_compact_token_limit sur 85 à 88 % de model_context_window. Ne dépassez jamais 90 % — les valeurs supérieures sont ignorées silencieusement.


Tous les modèles Codex dans OmniRoute utilisent le préfixe cx/ :

Nom dans Codex CLI Modèle OmniRoute
cx/gpt-5.5 GPT-5.5 standard
cx/gpt-5.4 GPT-5.4 standard
cx/gpt-5.4-mini GPT-5.4 mini
cx/gpt-5.1-codex-mini GPT-5.1 Codex mini

Les autres fournisseurs utilisent leur propre préfixe (kmc/, glm/, ds/, ollamacloud/, opencode-go/, mistral/) — le préfixe correspond à l’alias du fournisseur OmniRoute.


Contrôle dans quelle mesure le modèle « réfléchit » avant de répondre.

Valeur Utilisation
none Aucun raisonnement — réponse directe
low Tâches triviales (renommage, mise en forme)
medium Valeur par défaut du serveur si non spécifiée
high Tâches intermédiaires (refactorisation, débogage)
xhigh Architecture, analyse approfondie, problèmes complexes
Fenêtre de terminal
# Remplacement pour chaque invocation
codex -c model_reasoning_effort=low "rename variable x to count"
codex -c model_reasoning_effort=xhigh "design the auth module"

Définissez également un résumé du raisonnement afin que Desktop puisse afficher le texte de réflexion (et pas uniquement des blobs chiffrés) :

~/.codex/config.toml
model_reasoning_effort = "xhigh" # ou ultra lorsque pris en charge
model_reasoning_summary = "detailed" # auto | concise | detailed | none

Budget de réflexion d’OmniRoute (paramètre du serveur)

Section intitulée « Budget de réflexion d’OmniRoute (paramètre du serveur) »

Sur l’hôte OmniRoute, Settings → AI → Thinking Budget doit être défini sur passthrough afin que l’effort/le résumé de Codex parvienne au fournisseur en amont. Le mode auto supprime tous les champs reasoning / reasoning_effort du client et laisse les panneaux de réflexion vides, même lorsque Codex est correctement configuré.

Guide complet : THINKING_BUDGET.md.

La compression et le cache des prompts sont indépendants et continuent de fonctionner avec passthrough.


Profils — configurations nommées par modèle/flux de travail

Section intitulée « Profils — configurations nommées par modèle/flux de travail »

Les profils permettent de changer de modèle et de fenêtre de contexte avec un seul indicateur. Chaque profil est un fichier plat ~/.codex/&lt;name&gt;.config.toml qui se superpose au fichier config.toml de base.

Règle de nommage (Codex CLI v0.137+) : le fichier doit être ~/.codex/&lt;name&gt;.config.toml — sans préfixe profile-. La CLI résout -p kimi-k27 en ~/.codex/kimi-k27.config.toml. Si le fichier est introuvable, la configuration par défaut s’applique silencieusement.

Fenêtre de terminal
codex --profile kimi-k27 "analyze 10k lines of this codebase"
codex -p glm52 "architecture review"
codex --profile deepseek-flash "rename variable" # rapide, économique

Profils d’effort (même modèle, effort différent)

Section intitulée « Profils d’effort (même modèle, effort différent) »
Fenêtre de terminal
codex -p low # cx/gpt-5.5, effort=low
codex -p medium # cx/gpt-5.5, effort=medium
codex -p high # cx/gpt-5.5, effort=high
codex -p xhigh # cx/gpt-5.5, effort=xhigh (par défaut)
codex -p chat # cx/gpt-5.5, aucun effort défini (valeur par défaut du serveur)

Modèles de réflexion (réflexion approfondie) — xhigh + résumé détaillé

Section intitulée « Modèles de réflexion (réflexion approfondie) — xhigh + résumé détaillé »
Profil Modèle Contexte Utilisation
kimi-k27 kmc/kimi-k2.7 128k Meilleure qualité de réflexion (Kimi)
glm52 glm/glm-5.2 128k Réflexion GLM
glm52max glm/glm-5.2-max 128k Réflexion GLM maximale
mimo-pro opencode-go/mimo-v2.5-pro 128k Réflexion MiMo
qwen37plus opencode-go/qwen3.7-plus 32k Réflexion Qwen
Profil Modèle Contexte Utilisation
kimi-k26 kmc/kimi-k2.6 128k Usage général (Kimi)
deepseek-pro ollamacloud/deepseek-v4-pro 128k DeepSeek Pro via OllamaCloud
deepseek ds/deepseek-v4-pro 1M DeepSeek Pro direct, contexte immense
mimo opencode-go/mimo-v2.5 128k MiMo général
Profil Modèle Contexte Utilisation
gemma4 ollamacloud/gemma4:31b 32k Économique et performant
nemotron ollamacloud/nemotron-3-super 32k NVIDIA Nemotron
gptoss ollamacloud/gpt-oss:20b 32k GPT open source
Profil Modèle Contexte Utilisation
deepseek-flash ollamacloud/deepseek-v4-flash 64k Tâches rapides
gemini-flash ollamacloud/gemini-3-flash-preview 1M Très rapide, contexte immense
glm5turbo glm/glm-5-turbo 128k GLM Turbo
glm47flash glm/glm-4.7-flash 128k GLM Flash
mistral mistral/mistral-large-latest 256k Mistral Large
Tâche Profil recommandé
Renommage, formatage, code standard --profile deepseek-flash ou -p low
Explication, revue légère -p chat ou -p gemini-flash
Débogage, refactorisation modérée -p medium ou -p kimi-k26
Nouvelle fonctionnalité, tests complexes -p high ou -p mimo
Architecture, analyse approfondie -p kimi-k27 ou -p glm52 ou -p xhigh
Analyse du code source (contexte de 1 M) --profile deepseek ou --profile gemini-flash
Qualité de raisonnement maximale -p glm52max ou -p mimo-pro
Économique -p gemma4 ou -p gptoss

Génération automatique de profils avec omniroute setup-codex

Section intitulée « Génération automatique de profils avec omniroute setup-codex »

Si vous exécutez OmniRoute sur un VPS, vous pouvez générer automatiquement des fichiers de profil à partir du catalogue de modèles actif :

Fenêtre de terminal
# Depuis un VPS (utilise OmniRoute local sur le port 20128)
omniroute setup-codex
# Depuis n’importe quelle machine — ciblez votre VPS
omniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Prévisualiser sans écrire de fichiers
omniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Générer uniquement les profils GLM et Kimi
omniroute setup-codex --only glm,kimi
# Écrire dans un répertoire personnalisé
omniroute setup-codex --codex-home /path/to/.codex

La commande récupère /v1/models, utilise des profils optimisés pour les modèles connus, se rabat sur les métadonnées du catalogue pour les autres modèles de texte compatibles et écrit ~/.codex/&lt;name&gt;.config.toml pour chacun d’eux. Elle est idempotente — vous pouvez la réexécuter sans risque.

OmniRoute peut également synchroniser automatiquement ces mêmes fichiers de profil après qu’une découverte ou un import réussi des modèles d’un fournisseur a modifié le catalogue actif. Cette fonctionnalité est facultative et désactivée par défaut : activez-la depuis le tableau de bord CLI Code (« CLI profile auto-sync » → Codex), ou définissez OMNIROUTE_AUTO_SYNC_CODEX_PROFILES=true (elle respecte également CLI_ALLOW_CONFIG_WRITES, activé par défaut). Lorsqu’elle est activée, elle écrit uniquement des fichiers de profil ~/.codex/*.config.toml distincts ; elle ne modifie jamais le fichier actif/par défaut ~/.codex/config.toml, les paramètres de Codex-lb, l’authentification ou la sélection du fournisseur.


Vérifie l’état de votre instance OmniRoute avant de lancer Codex :

Fenêtre de terminal
# Lancer avec OmniRoute local (port 20128 par défaut)
omniroute launch-codex
# Lancer avec un profil spécifique
omniroute launch-codex --profile kimi-k27
# Lancer avec un VPS distant
omniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Transmettre des arguments supplémentaires à codex
omniroute launch-codex --profile glm52 -- --yolo "fix this bug"

Codex est également une cible des deux points d’entrée génériques pilotés par manifeste (bin/cli/cli-manifest.mjs) :

Fenêtre de terminal
# Sélecteur interactif de modèle → écrit ~/.codex/&lt;name&gt;.config.toml (TOML, env_key)
omniroute configure codex
# Lancer codex avec le fournisseur omniroute injecté via des indicateurs -c (aucune configuration écrite)
omniroute run codex

Nouvelles fonctionnalités de la CLI Codex (v0.138–v0.141)

Section intitulée « Nouvelles fonctionnalités de la CLI Codex (v0.138–v0.141) »
Version Fonctionnalité
v0.138 Transfert vers l’application de bureau (/app), jetons d’accès personnels v2, --profile comme sélecteur de profil exclusif (les anciennes tables [profiles] intégrées aux fichiers provoquent un plantage au démarrage)
v0.139 web_search = "live" — recherche web native depuis le mode code ; oneOf/allOf dans les schémas d’outils MCP ; diagnostics d’environnement avec codex doctor
v0.140 Vue des jetons en cours de session avec /usage ; /import depuis les sessions Claude Code ; sous-commande codex delete <SESSION_ID> ; authentification Amazon Bedrock via l’objet aws dans la configuration du fournisseur
v0.141 Relais Noise chiffré de bout en bout pour les exécuteurs distants ; correctif du mode WAL de SQLite ; prise en charge de TLS P-521
# Recherche web native (v0.139)
web_search = "live" # "disabled" | "cached" | "live"
# Invite système distincte pour le développeur (v0.138)
developer_instructions = "Always prefer functional style."
# Invite de compactage personnalisée
compact_prompt = "Summarise the above as bullet points."
# Acheminer /review vers un modèle moins coûteux
review_model = "glm/glm-5-turbo"
# Niveau de service OpenAI
service_tier = "fast" # "fast" | "flex"
[model_providers.omniroute]
base_url = "http://100.x.x.x:20128/v1"
env_key = "OMNIROUTE_API_KEY"
requires_openai_auth = false
# En-têtes supplémentaires statiques sur chaque requête
[model_providers.omniroute.http_headers]
"X-Custom-Header" = "value"
# En-têtes lus depuis les variables d’environnement
[model_providers.omniroute.env_http_headers]
"X-Trace-Id" = "TRACE_ID"
# Paramètres de requête URL supplémentaires (utiles pour api-version d’Azure)
[model_providers.omniroute.query_params]
"api-version" = "2024-12-01-preview"
[model_providers.bedrock]
base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"
[model_providers.bedrock.aws]
profile = "default" # Profil ~/.aws/credentials
region = "us-east-1"

[model_providers.omniroute-main]
base_url = "http://192.168.0.1:20128/v1"
env_key = "OMNIROUTE_API_KEY"
[model_providers.omniroute-tailscale]
base_url = "http://100.x.x.x:20128/v1"
env_key = "OMNIROUTE_API_KEY"

Codex CLI (config.toml) Claude Code (variable d’environnement) Effet
tool_output_token_limit = 32768 (non directement exposé) Limite d’historique par outil
model_context_window = 400000 (déterminée par le modèle) Fenêtre de contexte
— CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536 Nombre maximal de tokens par réponse
Fenêtre de terminal
# ~/.bashrc — limite de tokens de Claude Code
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536

Option Abrégée Effet
--model &lt;id&gt; -m Remplace model pour cette exécution
--profile &lt;name&gt; -p Charge ~/.codex/&lt;name&gt;.config.toml
--config key=value -c Remplace n’importe quel champ de config.toml (répétable)
--enable &lt;feature&gt; — Active de force une fonctionnalité
--disable &lt;feature&gt; — Désactive de force une fonctionnalité
--search — Active la recherche web en direct pour cette exécution

Nouveautés de la v0.140 :

Fenêtre de terminal
codex delete <SESSION_ID> # supprimer une session
codex delete <SESSION_ID> --force # ignorer la confirmation
codex debug models --bundled # répertorier le catalogue de modèles intégrés au format JSON

Dans une session interactive :

Commande Effet
/model Ouvre le sélecteur de modèle
/usage Affiche l’utilisation des tokens pour cette session (v0.140)
/app Transfère le contrôle à l’application de bureau (v0.138)
/import Importe une session Claude Code (v0.140)
/help Répertorie toutes les commandes slash

Deux paramètres par défaut d’OmniRoute peuvent compromettre silencieusement les sessions Codex CLI de plusieurs heures. Aucun des deux n’est un paramètre de Codex CLI — ils se trouvent tous deux côté OmniRoute. Les utilisateurs qui migrent une configuration depuis des proxys en amont qui épinglent les comptes et désactivent les délais d’inactivité rencontrent souvent ces deux problèmes et concluent qu’OmniRoute « ne peut pas maintenir une longue session ».

Symptôme Cause probable Paramètre
La session change constamment de compte / la continuité du cache des prompts est perdue entre les tours Le TTL d’affinité de session est 0 (désactivé) sessionAffinityTtlMs
La connexion s’interrompt en plein raisonnement sans message visible côté client Le mécanisme de surveillance de l’inactivité du flux s’est déclenché après 10 minutes sans fragment reçu en amont STREAM_IDLE_TIMEOUT_MS

Discussions connexes : #7126 (interruptions des tâches longues), #5718 (pourquoi l’affinité est désactivée par défaut). Suivi : #7287.

1. Affinité de session — épingler une conversation à un seul compte

Section intitulée « 1. Affinité de session — épingler une conversation à un seul compte »

Valeur par défaut : sessionAffinityTtlMs = 0 (désactivé).

Où la définir

  • Tableau de bord → Paramètres → Routage → Affinité de session → TTL d’affinité (secondes) (ComboDefaultsTab)
  • Ou appliquez un PATCH aux paramètres avec sessionAffinityTtlMs en millisecondes (plage Zod de 0 à 86_400_000, soit jusqu’à 24 heures)

Renommé dans la #7274 depuis codexSessionAffinityTtlMs, qui était propre à Codex. L’ancienne clé est toujours acceptée comme alias en lecture seule ; les nouvelles configurations doivent utiliser sessionAffinityTtlMs. L’affinité s’applique désormais à n’importe quel fournisseur dès que le TTL est supérieur à 0, et non plus uniquement à Codex — consultez docs/architecture/RESILIENCE_GUIDE.md → Affinité de session.

Ce qui ne fonctionne plus lorsqu’il reste à 0

Chaque tour d’une conversation Codex à plusieurs tours est routé indépendamment selon la stratégie de combinaison active et peut aboutir sur un compte différent à chaque tour. Cela rompt la continuité de la session en amont et du cache des prompts. OmniRoute ne consulte les en-têtes de session Codex (x-codex-session-id / x-session-id / x-omniroute-session) et les champs du corps tels que prompt_cache_key / session_id que lorsque le TTL est supérieur à 0 (extractSessionAffinityKey dans src/sse/services/auth.ts).

Recommandation pour une tâche unique de plusieurs heures

Définissez le TTL au-dessus de la durée réelle attendue de la tâche (le maximum de l’interface utilisateur est de 86400 secondes = 24 heures) :

Durée attendue de la tâche TTL d’affinité (interface, secondes) sessionAffinityTtlMs
Quelques heures 14400 (4 h) 14400000
Une nuit / environ 12 h 43200 (12 h) 43200000
Journée complète 86400 (24 h, maximum) 86400000

L’activation explicite est intentionnelle : la désactivation de l’affinité favorise l’équilibrage de charge entre les comptes ; son activation favorise la continuité d’une longue session d’agent. Ce guide ne modifie pas la valeur par défaut — les opérateurs exécutant de longues tâches Codex doivent l’activer explicitement.

2. Délai d’inactivité du flux — ne pas interrompre les tours de raisonnement silencieux

Section intitulée « 2. Délai d’inactivité du flux — ne pas interrompre les tours de raisonnement silencieux »

Valeur par défaut : STREAM_IDLE_TIMEOUT_MS = 600000 (10 minutes). Lorsqu’il n’est pas défini, il hérite de REQUEST_TIMEOUT_MS ; la valeur de référence partagée est également 600000. Consultez docs/guides/SETUP_GUIDE.md → Délais d’expiration.

Ce qui ne fonctionne pas avec la valeur par défaut

Un tour de raisonnement / d’outil Codex qui reste silencieux pendant plus de 10 minutes sans aucun véritable fragment en amont est interrompu de force par le mécanisme de surveillance d’inactivité SSE (open-sse/utils/stream.ts). Le client constate souvent une simple coupure de connexion — ce qui correspond à « arrêté automatiquement sans aucune notification ».

Détail essentiel : le signal de maintien de connexion SSE synthétique d’OmniRoute ne réinitialise pas le délai d’inactivité. Seul un véritable fragment du corps reçu en amont met à jour lastChunkTime. Du point de vue du mécanisme de surveillance, un modèle silencieux qui est toujours en train de « réfléchir » est indiscernable d’un service en amont bloqué.

Inactivité associée du corps Undici : FETCH_BODY_TIMEOUT_MS (utilise également par défaut la même valeur de référence de 10 minutes ; 0 le désactive). Pour le streaming, FETCH_TIMEOUT_MS couvre uniquement l’établissement de la connexion / les premiers en-têtes — une fois le flux actif, les blocages sont régis par STREAM_IDLE_TIMEOUT_MS et FETCH_BODY_TIMEOUT_MS.

Recommandation pour une tâche unique de plusieurs heures

Dans l’environnement du processus OmniRoute (.env / compose / systemd) :

Fenêtre de terminal
# Désactiver les délais d’inactivité du flux et du corps pour les longs tours de raisonnement
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0

Ou augmentez-les au-delà de la plus longue période de silence prévue (les valeurs sont exprimées en millisecondes) :

Fenêtre de terminal
# Exemple : autoriser jusqu’à 2 heures de silence entre les fragments reçus en amont
STREAM_IDLE_TIMEOUT_MS=7200000
FETCH_BODY_TIMEOUT_MS=7200000

Redémarrez OmniRoute après avoir modifié ces variables d’environnement.

Procédure concrète — tâche Codex de plusieurs heures

Section intitulée « Procédure concrète — tâche Codex de plusieurs heures »
  1. Épinglez le compte : Tableau de bord → Paramètres → Routage → Affinité de session → TTL d’affinité = 43200 (12 h) ou 86400 (24 h maximum).
  2. Augmentez / désactivez les délais d’inactivité dans l’environnement d’OmniRoute :
Fenêtre de terminal
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0
  1. Conservez le fichier config.toml Codex habituel (wire_api = "responses", base_url correct, OMNIROUTE_API_KEY) — aucun réglage d’affinité ou d’inactivité côté Codex n’existe pour ces deux comportements.
  2. Redémarrez OmniRoute, puis lancez la tâche Codex de longue durée.

Décision concernant les valeurs par défaut (#7287)

Section intitulée « Décision concernant les valeurs par défaut (#7287) »
Paramètre Valeur par défaut livrée Modification dans ce guide ?
sessionAffinityTtlMs 0 (désactivé) Non — reste facultatif (équilibrage de charge ou continuité ; voir la discussion #5718)
STREAM_IDLE_TIMEOUT_MS 600000 (10 min) Non — reste fixé à 10 minutes pour le trafic général ; les opérateurs de longues tâches Codex l’augmentent ou le désactivent

Modifier globalement l’une ou l’autre de ces valeurs par défaut changerait le comportement pour chaque client d’une instance, et pas seulement pour Codex. Documentez les paramètres ; conservez les valeurs par défaut jusqu’à ce qu’une décision explicite de l’opérateur indique le contraire.

Lorsque le mécanisme de surveillance d’inactivité se déclenche, OmniRoute journalise une ligne de la forme suivante :

[STREAM] Idle timeout: no data from codex for 600000ms (model: cx/gpt-5.5)

Recherchez Idle timeout: no data from avec grep (ou le code stream_idle_timeout / le nom d’erreur StreamIdleTimeoutError). Le segment du fournisseur correspond à celui qu’OmniRoute a utilisé pour cette requête (codex, l’identifiant d’un autre fournisseur ou provider s’il est inconnu) — il ne s’agit pas toujours de la chaîne littérale codex.


Error: wire_api = "chat" is no longer supported Supprimez wire_api = "chat" de votre configuration. Définissez wire_api = "responses" ou omettez ce champ (la valeur par défaut est "responses" depuis la v0.138).

Error: model not found Vérifiez que le modèle existe dans OmniRoute avec le préfixe approprié. Utilisez omniroute models list ou ouvrez /dashboard/providers/&lt;provider&gt;.

Authentication error Vérifiez que OMNIROUTE_API_KEY est exportée : echo $OMNIROUTE_API_KEY.

ERROR: Missing environment variable: OMNIROUTE_API_KEY Codex vérifie que la variable d’environnement existe avant d’effectuer la première requête. Exportez une vraie clé pour les serveurs protégés, ou une valeur fictive non vide telle que OMNIROUTE_API_KEY=local lorsque votre instance OmniRoute locale ne nécessite pas d’authentification. Redémarrez le shell si vous l’avez ajoutée à ~/.bashrc ou ~/.zshrc.

Connection refused Vérifiez qu’OmniRoute est en cours d’exécution et que l’hôte/le port de base_url est correct pour votre réseau (local, Tailscale ou VPS).

La session plante à l’approche de la limite de contexte Définissez explicitement model_context_window et model_auto_compact_token_limit. Consultez le tableau de la fenêtre de contexte ci-dessus.

La compaction se déclenche trop tard Réduisez model_auto_compact_token_limit à 80–85 % de la fenêtre. Ne la définissez jamais au-dessus de 90 %.

Le profil ne se charge pas (-p &lt;name&gt; est ignoré silencieusement) Vérifiez que le fichier existe à l’emplacement ~/.codex/&lt;name&gt;.config.toml (sans préfixe profile-). Exécutez ls ~/.codex/*.config.toml.

Une tâche Codex de longue durée s’interrompt en cours d’exécution / change de compte entre les échanges Consultez Tâches de longue durée. Activez l’affinité de session (avec un TTL supérieur à la durée de la tâche) et augmentez ou désactivez STREAM_IDLE_TIMEOUT_MS / FETCH_BODY_TIMEOUT_MS. Recherchez Idle timeout: no data from dans les journaux d’OmniRoute avec grep.


Code source d’OmniRoute (a58000c7685f)

HagiCode

HagiCode est un espace de développement agentique qui associe workflows structurés, exécution multi-agent et vues Hero Dungeon.

Transformez vos idées en logiciels utiles grâce à un workflow agentique plus intelligent, rapide et agréable.

Interface principale de HagiCode en thème clair
  • SmartDes workflows structurés transforment une intention en parcours exécutable, de l’idée à la livraison.
  • EfficientLes workflows multi-agents font avancer recherche, réalisation et revue en parallèle.
  • FunHero Dungeon rend les longues sessions de code plus visuelles et collaboratives.
Visiter HagiCode