Configuration du serveur et de l'environnement d'exécution
Les paramètres du serveur contrôlent la manière dont le proxy local écoute, protège le trafic distant, gère les ressources et exécute des fonctionnalités d’assistance autour des demandes du fournisseur.
Champs du serveur
Section intitulée « Champs du serveur »| Champ | Type | Par défaut | Signification |
|---|---|---|---|
port |
number |
10100 |
Port d’écoute proxy. |
hostname? |
string |
"127.0.0.1" |
Adresse de liaison. Les liaisons hors bouclage nécessitent OPENCODEX_API_AUTH_TOKEN. |
proxy? |
string |
— | URL du proxy HTTP(S) sortant ou ${ENV_VAR}. Appliquée à HTTP_PROXY / HTTPS_PROXY uniquement lorsque ces variables ne sont pas définies ; le bouclage reste dans NO_PROXY. |
emptyCompletionRetry? |
boolean |
false |
Active une nouvelle tentative Responses identique lorsqu’une réponse ne contient ni texte ni appel d’outil. Cette tentative peut être facturée. OCX_EMPTY_COMPLETION_RETRY=0 la désactive sans modifier la configuration ; les combinaisons et les tours de compactage routés restent exclus. |
stallTimeoutSec? |
number |
300 |
Nombre de secondes sans données en amont avant response.incomplete. Minimum : 1. |
connectTimeoutMs? |
number |
200000 |
Délai maximal par tentative pour DNS/TCP/TLS et les en-têtes finaux ; il prend fin avant la génération du corps. |
shutdownTimeoutMs? |
number |
5000 |
Délai de vidange gracieux avant l’annulation des tours actifs. |
websockets? |
boolean |
false |
Annonce et autorise la route WebSocket Responses destinée aux clients. La valeur false maintient les clients sur HTTP/SSE ; elle ne désactive pas une optimisation WebSocket canonique admissible vers ChatGPT en amont. |
corsAllowOrigins? |
string[] |
[] |
Origines exactes supplémentaires autorisées par CORS. Les origines de bouclage sont toujours autorisées. Les origines d’extensions de navigateur basées sur l’autorité telles que chrome-extension://<extension-id> sont prises en charge ; * n’est pas un caractère générique. Firefox et Safari régénèrent l’extension UUID (par installation / par lancement de navigateur), mettez donc à jour l’entrée lorsque l’origine change. |
apiKeys? |
OcxApiKey[] |
[] |
Identifiants ocx_… générés, acceptés par l’API de gestion et l’authentification du plan de données sur les liaisons hors bouclage. Gérés depuis le tableau de bord. |
storageCleanupPolicy? |
StorageCleanupPolicy |
désactivé | Politique facultative de nettoyage des sessions archivées. Elle n’est jamais activée implicitement. |
appOwnedMemoryBudgetMb? |
number |
256 |
Plafond en Mio pour les journaux, caches, objets binaires et charges utiles de continuation évincables qui appartiennent à l’application. Plage : 64–4096 ; il ne s’agit pas d’un plafond RSS. |
codexAutoStart? |
boolean |
true |
Autorise le lanceur intermédiaire Codex à exécuter ocx ensure avant de démarrer Codex. Avec la valeur false, cette vérification ne fait rien. |
codexShimAutoRestore? |
boolean |
true |
Restaure le lanceur intermédiaire installé après son remplacement par une mise à jour externe de Codex terminée. Désactivation par variable d’environnement : OPENCODEX_CODEX_SHIM_AUTO_RESTORE=0. |
syncResumeHistory? |
boolean |
true |
Compatibilité historique Codex App réversible. Les métadonnées originales sont sauvegardées et restaurées par ocx stop / ocx restore. |
shadowCallIntercept? |
{ enabled?: boolean; model?: string; sourceModels?: string[] } |
désactivé | Redirigez les appels Codex helper/shadow reconnus vers un modèle choisi avec peu d’effort. Le préfixe source par défaut est gpt-5.6-luna ; les clients plus anciens via 0.144.x utilisaient gpt-5.4-mini, que sourceModels peut restaurer. |
webSearchSidecar? |
OcxWebSearchSidecarConfig |
activé lorsqu’il est utilisable | Options du service auxiliaire de recherche Web. |
visionSidecar? |
OcxVisionSidecarConfig |
activé lorsqu’il est utilisable | Options du service auxiliaire de description d’images. |
images? |
OcxImagesConfig |
sélection automatique OpenAI | Options de relais d’images autonomes pour Codex image_gen. |
Si une ancienne version de développement a modifié les métadonnées de l’historique de reprise avant que la prise en charge de la sauvegarde n’existe, exécutez
ocx recover-history --legacy-openai pour forcer la récupération du fournisseur natif.
Accès à distance
Section intitulée « Accès à distance »La liaison par défaut à 127.0.0.1 est limitée au bouclage. Une adresse hors bouclage telle que 0.0.0.0
exige un identifiant pour le plan de données : OPENCODEX_API_AUTH_TOKEN ou au moins une entrée apiKeys
configurée. Pour utiliser le jeton d’environnement, exportez-le avant le démarrage :
export OPENCODEX_API_AUTH_TOKEN="your-secret-token"ocx startLe proxy refuse une liaison distante sans identifiant du plan de données. L’installation d’un service exige
spécifiquement OPENCODEX_API_AUTH_TOKEN ; exportez-le avant ocx service install afin que launchd, systemd
ou le Planificateur de tâches le reçoive. Les clients du plan de données peuvent envoyer :
x-opencodex-api-key: your-secret-tokenCe jeton n’autorise pas les routes de gestion /api/*. Celles-ci exigent l’identifiant administrateur
indépendant décrit dans la documentation de l’API de gestion, lequel doit
être différent de tous les identifiants du plan de données.
| Point de terminaison | Authorization: Bearer |
x-opencodex-api-key |
x-api-key |
|---|---|---|---|
/v1/responses |
non accepté | obligatoire | non accepté |
/v1/chat/completions |
non accepté | obligatoire | non accepté |
/v1/messages |
accepté | accepté | accepté |
/v1/messages/count_tokens |
accepté | accepté | accepté |
/v1/models |
accepté | accepté | accepté |
Responses et Chat Completions réservent Authorization à un éventuel transfert direct vers Codex ; seul
l’en-tête d’admission dédié y est donc accepté. Les apiKeys générées depuis le tableau de bord peuvent remplacer le
jeton d’environnement après le démarrage ; les valeurs candidates sont comparées en temps constant.
Messages et count_tokens continuent d’accepter les trois formes d’admission pour assurer la compatibilité avec les clients routés. Le
transfert natif vers Anthropic est plus strict sur une liaison hors bouclage : l’admission du proxy doit utiliser
x-opencodex-api-key, tandis que Authorization et x-api-key sont réservés aux identifiants Anthropic.
Tout secret d’admission de proxy placé dans les en-têtes de ces fournisseurs est supprimé avant le transfert.
Clients locaux qui ne peuvent pas recevoir le jeton
Section intitulée « Clients locaux qui ne peuvent pas recevoir le jeton »Une liaison distante exige un identifiant de chaque appelant, y compris des appelants locaux. Cela pose problème dans un cas précis :
un codex app-server lancé par un processus hôte qui résout directement le point d’entrée Codex
(require.resolve('@openai/codex/bin/codex.js')) ne traverse jamais la cale codex générée,
donc il n’hérite jamais de OPENCODEX_API_AUTH_TOKEN et chaque appel de modèle échoue avec 401 avant un
le flux s’ouvre.
unauthenticatedLoopbackListener ouvre un second écouteur lié à 127.0.0.1, qui accepte les requêtes sans
identifiant. L’écouteur principal reste inchangé : les appelants distants ont toujours besoin du jeton.
{ "hostname": "0.0.0.0", "port": 10100, "unauthenticatedLoopbackListener": { "enabled": true, "port": 10200 }}ocx sync écrit ensuite base_url = "http://127.0.0.1:10200/v1" dans le bloc du fournisseur Codex géré
et omet l’en-tête d’authentification ; un serveur d’applications lancé directement fonctionne ainsi sans avoir à transmettre d’identifiants.
Le port est obligatoire et doit différer du port proxy. Il n’est jamais attribué par le système d’exploitation : un port éphémère
changerait au fil des redémarrages tandis que les serveurs d’applications déjà en cours d’exécution conservaient le base_url précédent.
L’écouteur ne sert que POST /v1/responses, sa mise à niveau WebSocket, POST /v1/responses/compact,
et GET /v1/models. Tout le reste, y compris /api/* et le tableau de bord, renvoie 404.
Redirection de port SSH
Section intitulée « Redirection de port SSH »L’utilisation à distance ne nécessite pas de liaison à distance. Gardez le bouclage et transférez-le :
ssh -L 20100:localhost:10100 you@remoteN’importe quel port local fonctionne. Les requêtes dont l’hôte se résout en localhost, 127.0.0.1 ou ::1 restent
bouclage quel que soit le port, donc http://localhost:20100/v1 fonctionne. Définissez cette base URL dans le client ;
ocx écrit uniquement l’adresse locale 127.0.0.1 par défaut dans la configuration du client géré.
Les rappels OAuth du fournisseur écoutent sur un port distant fixe. Connectez-vous depuis la machine distante ou redirigez également ce port :
ssh -L 20100:localhost:10100 -L 1455:localhost:1455 you@remoteSi un port de rappel enregistré est déjà utilisé et que la surface de connexion propose une saisie manuelle, OpenCodex conserve l’URI de redirection enregistrée et renvoie tout de même l’URL d’autorisation du fournisseur. Terminez la connexion au fournisseur, puis collez dans OpenCodex l’URL de redirection finale affichée dans la barre d’adresse du navigateur ou le code d’autorisation. Le flux en attente préserve l’état et la validation PKCE. Pour les appelants sans saisie manuelle, l’opération échoue toujours de manière sûre.
Nettoyage du stockage
Section intitulée « Nettoyage du stockage »storageCleanupPolicy est désactivé par défaut. Lorsqu’il est activé, il s’exécute selon startup, daily, weekly
ou manual après que les octets archivés dépassent trigger.archivedBytesOver. Il sélectionne les archives les plus anciennes vers
soit target.reduceToBytes soit target.removeOldestPercent. mode est par défaut quarantine ; utiliser
permanent uniquement comme un choix destructeur explicite. La politique persiste lastRun et nextRun.
Configurez-le sur la page Stockage ou avec GET/PUT /api/storage/cleanup-policy ; déclencher une exécution manuelle
avec POST /api/storage/cleanup-policy/run.
Claude Code (claudeCode)
Section intitulée « Claude Code (claudeCode) »Ces paramètres régissent /v1/messages, /v1/messages/count_tokens, le lanceur ocx claude et la page du tableau de bord Claude.
| Clé | Type | Par défaut | Description |
|---|---|---|---|
claudeCode.bodyStallSec? |
number |
90 |
Budget d’inactivité du corps de transfert natif en secondes pendant qu’une lecture est en attente, et non en durée totale. 1 minimum ; exactement 0 désactive. |
claudeCode.bodyMaxBytes? |
number |
67108864 |
Plafond cumulatif du corps lors d’un transfert natif, pour les réponses diffusées en continu comme pour celles mises en mémoire tampon. La valeur exacte 0 désactive ce plafond. |
claudeCode.authMode? |
"proxy" | "subscription" |
automatique | Manière dont le lancement gère ANTHROPIC_AUTH_TOKEN. Le mode automatique détecte l’authentification à chaque lancement ; une valeur explicite n’est jamais remplacée. |
claudeCode.authModeMigratedAt? |
string |
non défini | Marqueur de mise à niveau interne unique. Ne réglez pas manuellement. |
claudeCode.subagentEffort? |
"low" | "medium" | "high" | "xhigh" | "max" |
hériter | Effort écrit pour générer ~/.claude/agents/ocx-*.md ; distinct des plafonds d’orientation et de proxy Codex. Redémarrez par ocx claude pour régénérer. |
L’authentification automatique sélectionne l’abonnement lorsqu’une authentification Claude stockée est trouvée, le proxy lorsqu’aucune ne l’est et l’abonnement avec un avertissement lorsque la détection n’est pas concluante. Voir Mode d’authentification de Claude Code.
Appels fantômes
Section intitulée « Appels fantômes »Codex utilise de petits modèles auxiliaires pour des tâches telles que les titres et les messages de commit. Activez
shadowCallIntercept pour rediriger les préfixes de modèle source reconnus vers un autre modèle configuré. Le
modèle de remplacement s’exécute avec un faible effort. Définissez sourceModels uniquement lorsqu’un client utilise d’autres identifiants de modèles auxiliaires.
Codex 0.145.0+ indique l’objet de la requête dans x-codex-turn-metadata : les requêtes normales portant request_kind: "turn"
conservent le modèle sélectionné, tandis que les requêtes de maintenance reconnues peuvent être redirigées. Les clients
qui ne fournissent pas ces métadonnées conservent le comportement historique fondé sur le préfixe.
{ "shadowCallIntercept": { "enabled": true, "model": "gpt-5.5", "sourceModels": ["gpt-5.6-luna"] }}Services auxiliaires
Section intitulée « Services auxiliaires »images (OcxImagesConfig)
Section intitulée « images (OcxImagesConfig) »| Champ | Type | Par défaut | Signification |
|---|---|---|---|
provider? |
string |
sélection automatique OpenAI | Fournisseur personnalisé openai-responses à clé API, sélectionné explicitement pour /v1/images/generations et /v1/images/edits. Les identifiants gérés par le registre sont rejetés. |
timeoutMs? |
number |
300000 |
Délai d’expiration de l’ensemble de la demande pour une demande d’images autonome. |
La sélection explicite échoue de manière sûre lorsque le fournisseur est absent, désactivé, incompatible ou ne dispose pas d’une clé utilisable ; elle ne se rabat jamais sur un autre service en amont payant. Le point de terminaison doit implémenter les routes de l’API Images d’OpenAI et la forme de réponse attendue par Codex.
webSearchSidecar (OcxWebSearchSidecarConfig)
Section intitulée « webSearchSidecar (OcxWebSearchSidecarConfig) »| Champ | Type | Par défaut | Signification |
|---|---|---|---|
enabled? |
boolean |
activé lorsqu’il est utilisable | Interrupteur principal. |
backend? |
"openai" | "anthropic" |
automatique | Une valeur explicite est prioritaire ; sinon, la présence d’identifiants OAuth Anthropic stockés et utilisables sélectionne anthropic, puis openai. |
model? |
string |
dépendant du backend | gpt-5.6-luna pour OpenAI ou claude-sonnet-5 pour Anthropic. L’héritage explicite gpt-5.4-mini migre au démarrage. |
reasoning? |
string |
low |
Effort secondaire. minimal est rejeté lors de la recherche sur le Web. |
maxSearchesPerTurn? |
number |
3 |
Recherches réelles autorisées par tour de modèle principal. |
routedModelStallTimeoutMs? |
number |
200000 |
Date limite d’inactivité du corps brut du modèle routé uniquement pour les fichiers de configuration. Entier 1–2147483647 ; chaque morceau non vide le réinitialise. |
timeoutMs? |
number |
60000 |
Date limite pour une recherche hébergée. |
Le moteur OpenAI nécessite une connexion à ChatGPT et un fournisseur ChatGPT forward activé. Les relectures routées
entrantes depuis Claude injectent l’authentification ChatGPT principale dans la requête interne. Le moteur Anthropic utilise les
identifiants actifs stockés auprès d’un fournisseur Anthropic OAuth activé. Si le moteur Anthropic est sélectionné explicitement
mais qu’aucun compte n’est utilisable, l’opération échoue de manière sûre au lieu de se rabattre sur un autre moteur. L’exécuteur Anthropic utilise son
outil web_search_20250305 natif.
Quatre horloges régissent la recherche : base stallTimeoutSec, connectTimeoutMs, inactivité du modèle routé et
délai d’expiration de la recherche hébergée. Le chien de garde efficace du pont est le maximum plus 30 secondes. Le décrochage routé est
une garde d’inactivité, pas un délai de génération total.
visionSidecar (OcxVisionSidecarConfig)
Section intitulée « visionSidecar (OcxVisionSidecarConfig) »| Champ | Type | Par défaut | Signification |
|---|---|---|---|
enabled? |
boolean |
activé lorsqu’il est utilisable | Commutateur principal de description d’images. |
backend? |
"openai" | "anthropic" |
automatique | Même sélection, prioritaire lorsqu’elle est explicite et tenant compte des identifiants Anthropic, que pour la recherche Web. |
model? |
string |
dépendant du backend | gpt-5.4-mini pour OpenAI ou claude-sonnet-5 pour Anthropic. |
maxDescriptionsPerTurn? |
number |
8 |
Nouvelles descriptions des ratés du cache admises par tour principal. 0 désactive les appels ; les valeurs non valides utilisent la valeur par défaut. |
timeoutMs? |
number |
45000 |
Délai d’expiration de la récupération par le service auxiliaire. Entier 1–2147483647. |
La vision ne s’active que pour les images envoyées à un modèle répertorié dans le champ noVisionModels de son fournisseur. OpenAI impose les
mêmes exigences de connexion et de transfert que pour la recherche ; lorsqu’Anthropic est sélectionné explicitement, l’opération échoue de manière sûre sans
identifiant utilisable. Les descriptions data: réussies utilisent un cache limité indexé par moteur, modèle, niveau de détail,
octets de l’image et contexte de message normalisé. Les accès au cache et les doublons d’un même tour ne consomment pas la limite.
Les images https: distantes et les descriptions échouées ou vides ne sont pas mises en cache.
Les services auxiliaires Anthropic OAuth réutilisent l’empreinte OAuth Claude Code existante d’opencodex. Effectuez un test d’endurance avec le compte et la charge de travail prévus.

