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 --helpindique que les substitutions-c/--configsont « chargées depuis~/.codex/config.toml»). L’ancien fichier~/.codex/config.yamlappartenait à l’ancienne CLI npm et est ignoré silencieusement. Le générateur du tableau de bord (/api/cli-tools/apply, outilcodex) é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 dansOMNIROUTE_API_KEY(jamais dans le fichier), et tout ancien fichierconfig.yamlrestant est signalé dans une note de migration sans être modifié.
config.toml prêt à coller
Section intitulée « config.toml prêt à coller »Remplacez <YOUR_HOST> et <YOUR_KEY> par vos valeurs :
model = "cx/gpt-5.5"model_provider = "omniroute"model_reasoning_effort = "xhigh"model_context_window = 400000model_auto_compact_token_limit = 350000tool_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 = falsewire_api = "responses"# ~/.bashrc ou ~/.zshrc — valeur réelle de la clé, jamais dans config.tomlexport 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 :
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"Ouvrez un nouveau shell, puis vérifiez :
command -v codexcodex --versionOmniRoute 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 :
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/v1Tailscale http://100.x.x.x:20128/v1Boucle 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_apiest la valeur par défaut — ce champ utilise"responses"par défaut et peut être entièrement omis deconfig.toml. Ne le définissez explicitement que pour documenter l’intention.
Fenêtre de contexte et compactage
Section intitulée « Fenêtre de contexte et compactage »Champs de configuration des jetons
Section intitulée « Champs de configuration des jetons »| 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 — utiliseztool_output_token_limitpour contrôler la quantité de sorties d’outils stockée dans l’historique.
Fenêtres de contexte par modèle
Section intitulée « Fenêtres de contexte par modèle »| 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_limitsur 85 à 88 % demodel_context_window. Ne dépassez jamais 90 % — les valeurs supérieures sont ignorées silencieusement.
Préfixe de modèle : cx/
Section intitulée « Préfixe de modèle : cx/ »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.
Effort de raisonnement
Section intitulée « Effort de raisonnement »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 |
# Remplacement pour chaque invocationcodex -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) :
model_reasoning_effort = "xhigh" # ou ultra lorsque pris en chargemodel_reasoning_summary = "detailed" # auto | concise | detailed | noneBudget 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/<name>.config.toml qui se superpose au fichier config.toml de base.
Règle de nommage (Codex CLI v0.137+) : le fichier doit être
~/.codex/<name>.config.toml— sans préfixeprofile-. La CLI résout-p kimi-k27en~/.codex/kimi-k27.config.toml. Si le fichier est introuvable, la configuration par défaut s’applique silencieusement.
codex --profile kimi-k27 "analyze 10k lines of this codebase"codex -p glm52 "architecture review"codex --profile deepseek-flash "rename variable" # rapide, économiqueProfils d’effort (même modèle, effort différent)
Section intitulée « Profils d’effort (même modèle, effort différent) »codex -p low # cx/gpt-5.5, effort=lowcodex -p medium # cx/gpt-5.5, effort=mediumcodex -p high # cx/gpt-5.5, effort=highcodex -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 |
Bons modèles — effort élevé
Section intitulée « Bons modèles — effort élevé »| 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 |
Modèles simples — aucun effort de raisonnement
Section intitulée « Modèles simples — aucun effort de raisonnement »| 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 |
Modèles rapides — faible effort
Section intitulée « Modèles rapides — faible effort »| 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 |
Tableau de décision rapide
Section intitulée « Tableau de décision rapide »| 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 :
# Depuis un VPS (utilise OmniRoute local sur le port 20128)omniroute setup-codex
# Depuis n’importe quelle machine — ciblez votre VPSomniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Prévisualiser sans écrire de fichiersomniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Générer uniquement les profils GLM et Kimiomniroute setup-codex --only glm,kimi
# Écrire dans un répertoire personnaliséomniroute setup-codex --codex-home /path/to/.codexLa 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/<name>.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.
Lancement de Codex avec omniroute launch-codex
Section intitulée « Lancement de Codex avec omniroute launch-codex »Vérifie l’état de votre instance OmniRoute avant de lancer Codex :
# Lancer avec OmniRoute local (port 20128 par défaut)omniroute launch-codex
# Lancer avec un profil spécifiqueomniroute launch-codex --profile kimi-k27
# Lancer avec un VPS distantomniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Transmettre des arguments supplémentaires à codexomniroute 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) :
# Sélecteur interactif de modèle → écrit ~/.codex/<name>.config.toml (TOML, env_key)omniroute configure codex
# Lancer codex avec le fournisseur omniroute injecté via des indicateurs -c (aucune configuration écrite)omniroute run codexNouvelles 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 |
Nouveaux champs de config.toml (après la v0.137)
Section intitulée « Nouveaux champs de config.toml (après la v0.137) »# 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éecompact_prompt = "Summarise the above as bullet points."
# Acheminer /review vers un modèle moins coûteuxreview_model = "glm/glm-5-turbo"
# Niveau de service OpenAIservice_tier = "fast" # "fast" | "flex"Nouveaux champs de [model_providers.<id>]
Section intitulée « Nouveaux champs de [model_providers.<id>] »[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"Authentification Amazon Bedrock (v0.140)
Section intitulée « Authentification Amazon Bedrock (v0.140) »[model_providers.bedrock]base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"
[model_providers.bedrock.aws]profile = "default" # Profil ~/.aws/credentialsregion = "us-east-1"Serveurs multiples
Section intitulée « Serveurs multiples »[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"Claude Code — configuration équivalente
Section intitulée « Claude Code — configuration équivalente »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 |
# ~/.bashrc — limite de tokens de Claude Codeexport CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536Référence rapide — options de la CLI
Section intitulée « Référence rapide — options de la CLI »| Option | Abrégée | Effet |
|---|---|---|
--model <id> |
-m |
Remplace model pour cette exécution |
--profile <name> |
-p |
Charge ~/.codex/<name>.config.toml |
--config key=value |
-c |
Remplace n’importe quel champ de config.toml (répétable) |
--enable <feature> |
— | Active de force une fonctionnalité |
--disable <feature> |
— | Désactive de force une fonctionnalité |
--search |
— | Active la recherche web en direct pour cette exécution |
Nouveautés de la v0.140 :
codex delete <SESSION_ID> # supprimer une sessioncodex delete <SESSION_ID> --force # ignorer la confirmationcodex debug models --bundled # répertorier le catalogue de modèles intégrés au format JSONDans 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 |
Tâches de longue durée
Section intitulée « Tâches de longue durée »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
sessionAffinityTtlMsen millisecondes (plage Zod de0à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 utilisersessionAffinityTtlMs. L’affinité s’applique désormais à n’importe quel fournisseur dès que le TTL est supérieur à0, et non plus uniquement à Codex — consultezdocs/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) :
# Désactiver les délais d’inactivité du flux et du corps pour les longs tours de raisonnementSTREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0Ou augmentez-les au-delà de la plus longue période de silence prévue (les valeurs sont exprimées en millisecondes) :
# Exemple : autoriser jusqu’à 2 heures de silence entre les fragments reçus en amontSTREAM_IDLE_TIMEOUT_MS=7200000FETCH_BODY_TIMEOUT_MS=7200000Redé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 »- Épinglez le compte : Tableau de bord → Paramètres → Routage → Affinité de session → TTL d’affinité =
43200(12 h) ou86400(24 h maximum). - Augmentez / désactivez les délais d’inactivité dans l’environnement d’OmniRoute :
STREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0- Conservez le fichier
config.tomlCodex habituel (wire_api = "responses",base_urlcorrect,OMNIROUTE_API_KEY) — aucun réglage d’affinité ou d’inactivité côté Codex n’existe pour ces deux comportements. - 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.
Diagnostic des interruptions pour inactivité
Section intitulée « Diagnostic des interruptions pour inactivité »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.
Dépannage
Section intitulée « Dépannage »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/<provider>.
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 <name> est ignoré silencieusement)
Vérifiez que le fichier existe à l’emplacement ~/.codex/<name>.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.
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.

- 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.