config.json
config. est le fichier de configuration propre au relais : son port, qui
peut le joindre, le token d’accès, les minuteurs qui décident quand un turn
compte comme bloqué, et les tunnels et la preview lane,
facultatifs. oar setup le crée. Vous le modifiez à la main pour tout ce que
setup ne demande pas.
La plupart de ce que vous réglez dans l’interface web n’est pas dans ce fichier. Voir Réglages de l’interface web et environnement.
Où se trouve le fichier #
| Installation | Chemin |
|---|---|
| Installation globale sous macOS, Linux et WSL | ~/. |
| Installation globale sous Windows | %APPDATA%\ |
Installation globale avec OAR_ défini |
config. dans ce dossier |
| Checkout git | server/ dans le checkout |
OAR_ déplace tout le dossier d’état d’une installation globale
(config, données et journaux) ; voir Où OAR garde ses fichiers.
COPILOT_ pointe le relais vers un fichier précis, où qu’il
soit, mais seulement quand le relais est démarré sans le lanceur propre à
oar : node server/, ou oar copilot (quand le fichier existe).
oar setup, oar start, oar restart et le service utilisent toujours le
config. propre à l’installation, quoi que dise la variable. Dans un
checkout sans server/, oar copilot crée son fichier dans
~/. à la place (%LOCALAPPDATA%\ sous
Windows). Voir Variables d’environnement.
Le relais garde le fichier lisible par son seul propriétaire (mode 0600 sous
macOS et Linux), parce qu’il contient le token d’accès en clair. Traitez-en une
copie comme un mot de passe.
Qui l’écrit #
oar setupécrit le token,localhostetOnly port, et garde toutes les autres clés telles qu’il les trouve. Un fichier qu’il crée, ou auquel elles manquent, reçoit aussipoll,Interval Ms processing(Timeout Ms 600000) etconversation. VoirSession Mode oar setupet premier lancement.- Le relais écrit
cliquand vous installez ou mettez à jour une CLI de fournisseur depuis Settings (Réglages). Il ne modifie que cette clé. S’il ne peut pas lire le fichier comme du JSON, il refuse d’écrire et garde l’association pour le processus en cours seulement.Binaries - Le relais crée le fichier quand aucun n’existe au démarrage, avec un
authvide, le portToken 3333,localhost,Only: true polletInterval Ms conversation. Il retire aussi une cléSession Mode featuresrestée d’anciennes versions (voir Clés obsolètes, ignorées et internes). - Vous, dans n’importe quel éditeur de texte.
Le modifier à la main #
Le fichier est un seul objet JSON. Les clés que vous omettez prennent leur
valeur par défaut, et un bloc imbriqué comme previews est lu en entier.
Modifiez-le, puis redémarrez le relais : le relais lit le fichier une seule
fois, au démarrage. Rien de ce que tient un relais en cours ne change quand
vous enregistrez le fichier. Redémarrez avec oar restart (installations
globales), ou avec 🌄 Restart web relay (Redémarrer le relais web) dans le
menu ⋯ d’une conversation.
- Une clé inconnue est ignorée et conservée. Setup et les écritures propres au relais la laissent en place.
- Un JSON non valide n’arrête pas le relais. Il journalise
Failed to read config.et tourne avec les valeurs par défaut : port 3333, cette machine uniquement, et un token aléatoire, nouveau à chaque démarrage et affiché dans le journal. Votre token enregistré ne fonctionne plus tant que vous n’avez pas corrigé le fichier. Un second lecteur, celui qui choisit le dossier de données, se rabat sur le dossier par défaut. Le relais ne touche pas au fichier cassé.json, using defaults. - Une valeur erronée est traitée clé par clé. Les valeurs par défaut ci-dessous sont ce qu’utilise le relais quand un minuteur ou une limite manque ou est inutilisable. Les tunnels et la preview lane restent désactivés et journalisent la raison ; le relais lui-même continue de tourner.
- La ligne de commande l’emporte sur le fichier le temps d’une exécution :
--token <value>et--port <number>surnode server/(server. js oar copilotles transmet aussi ;oar startnon) remplacentauthetToken portet ne sont jamais enregistrés dans le fichier. Un--portqui n’est pas un nombre de 1 à 65535 est ignoré avec un avertissement.
N’exécutez pas oar setup sur un fichier qui n’est pas du JSON valide
oar setup traite un fichier qu’il ne peut pas analyser comme absent. Il écrit
alors un nouveau config. par-dessus, avec un nouveau token, et toutes les
autres clés de l’ancien fichier sont perdues. Corrigez d’abord le JSON. Gardez
une copie d’un fichier que vous modifiez à la main.
Réseau et accès #
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
auth |
chaîne | aucun : un token aléatoire à chaque démarrage | Le token avec lequel chaque navigateur, worker et client d’API se connecte. S’il est vide, le relais en crée un aléatoire à chaque démarrage, l’affiche dans son journal et ne l’enregistre pas. oar setup en écrit un stable. |
port |
nombre | 3333 |
Le port HTTP et WebSocket, un entier de 1 à 65535. |
localhost |
booléen | true |
true lie le relais à 127., si bien que seule cette machine le joint. Toute autre valeur, y compris false, null, 1 et "yes", le lie à toutes les interfaces (0.), si bien que votre LAN peut le joindre. Seuls true et le texte "true" (toute casse) comptent comme activé ; la valeur par défaut ne s’applique que si la clé manque. N’affecte pas les tunnels ci-dessous. |
remote |
chaîne | "" |
Un préfixe de chemin, quand un proxy inverse sert le relais sous un sous-chemin, par exemple /. Une barre oblique initiale est ajoutée et les barres obliques finales sont retirées. Le relais retire le préfixe des requêtes entrantes, et le met dans le chemin du cookie de connexion, dans le chemin du socket et dans les adresses des fichiers et des liens partagés. |
trust |
valeur trust proxy d’Express |
"loopback" |
Quels proxys peuvent définir les en-têtes X- auxquels le relais se fie. L’adresse du client (limites de débit, verrouillage de connexion, journal d’accès du partage) ainsi que l’hôte et le schéma des nouveaux liens de partage sont lus à travers elle ; un client direct ne peut donc pas les falsifier. La valeur par défaut convient à un proxy ou à un tunnel sur la même machine. Utilisez un nombre de sauts (1), une adresse ou un sous-réseau ("10.), ou une liste de ces valeurs quand un proxy sur un autre hôte transmet au relais (Proxy inverse). |
allowed |
tableau de chaînes | [] |
Ajouté en 0.9.11 Des origines de navigateur supplémentaires (schéma, hôte, et un port autre que celui par défaut, comme "https://) que la connexion Socket.IO en direct accepte en plus de celle du relais. Nécessaire pour un proxy qui réécrit l’en-tête Host. Voir Proxy inverse. |
public |
tableau de chaînes | [] |
Les noms d’hôte qui joignent le relais lui-même. La preview lane refuse un previews. sur l’un d’eux (ainsi que localhost et 127.), pour qu’une app en aperçu ne partage jamais un cookie de connexion avec le relais. |
tunnel |
tableau de chaînes | [] |
Des noms d’en-têtes supplémentaires que la périphérie d’un tunnel ajoute au trafic. Une requête qui porte cf- ou l’un de ces en-têtes ne peut pas atteindre les chemins des workers de session (les sockets qu’utilisent les workers de vos propres agents, qui ne tournent que sur cette machine). cf- est toujours dans la liste. Une chaîne séparée par des virgules fonctionne aussi. Les noms de la variable d’environnement COPILOT_ (séparés par des virgules) s’ajoutent à ceux-ci ; une liste vide ici ne les désactive pas. |
push |
chaîne | mailto: |
L’adresse de contact que le relais envoie aux services push avec les requêtes Web Push (notifications). Mettez-y une adresse mailto: à vous. |
shared |
nombre | 200 |
Nombre maximal de lecteurs en direct comptés pour un lien de conversation partagée. Au moins 1. Quand il est atteint, le lecteur inactif depuis le plus longtemps est retiré pour faire de la place. |
shared |
nombre | 5000 |
Nombre maximal de lecteurs de liens partagés en direct comptés au total, même règle. Jamais inférieur à la limite par conversation. |
Pour la première connexion, le token et l’accès LAN, voir premier lancement.
Turns et minuteurs #
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
processing |
nombre, ms | 600000 |
Combien de temps un turn peut rester sans signe de vie de son worker avant que le relais le remette dans la queue. Ce n’est pas une limite de durée d’un turn. Une valeur inférieure ou égale à 0 utilise la valeur par défaut. Voir Quand un turn est bloqué. |
max |
nombre | 5 |
Combien de fois un même message peut être tenté avant d’échouer définitivement. Au moins 1. Voir Remise en queue. |
context |
"default" ou "bar" |
"default" |
Comment la zone de saisie montre le remplissage du contexte, par une ligne le long de son bord supérieur. default est une ligne sur toute la largeur dont la couleur passe du vert au rouge à mesure que le contexte se remplit. bar est la même ligne, qui grandit depuis la gauche jusqu’à la part du contexte utilisée. Toute autre valeur, dans n’importe quelle casse, vaut default. |
La durée maximale d’un turn, le délai des tâches de fond et les surveillances de blocage ne sont pas ici : voir Quand un turn est bloqué.
Redémarrages et arrêt #
Ces clés règlent le redémarrage planifié du relais (🌄 Restart web relay). Voir Redémarrages et reprise. Chaque minuteur prend des millisecondes ; une valeur inférieure ou égale à 0, ou qui n’est pas un nombre, utilise la valeur par défaut.
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
restart |
nombre, ms | 45000 |
Combien de temps un redémarrage attend que le turn en cours se termine avant d’abandonner avec un échec shutdown-. |
restart |
nombre, ms | 8000 |
Combien de temps le relais attend un arrêt propre avant de forcer le redémarrage. |
restart |
nombre, ms | 18000 |
Combien de temps une tentative attend la phase de redémarrage ou de reprise avant de compter comme échouée (spawn-). |
restart |
nombre, ms | 20000 |
Combien de temps une tentative attend que les sessions se reconnectent après le redémarrage (rebind-). |
restart |
nombre, ms | 1000 |
Combien de temps la queue reste en pause juste après qu’un redémarrage a signalé qu’il était prêt. |
restart |
nombre | 3 |
Combien de tentatives un redémarrage a avant d’être définitif. Au moins 1. |
restart |
tableau de nombres, ms | [1000, 3000, 7000] |
L’attente avant les tentatives 2, 3 et ainsi de suite. Quand il y a plus de tentatives que d’entrées, la dernière entrée se répète. Les entrées qui ne sont pas des nombres positifs sont écartées ; un résultat vide utilise la valeur par défaut. |
Mémoire Ajouté en 0.9.19 #
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
heap |
nombre, Mo | 60 % de la RAM, de 2 048 à 8 192 | La limite de heap du relais, un nombre entier d’au moins 512. Toutes les façons de démarrer le relais la lisent : oar start, le service systemd, le démarrage automatique de Windows et l’extension de la CLI. Elle s’applique au démarrage suivant. Une valeur qui n’est pas un nombre entier d’au moins 512 est ignorée avec une ligne dans le journal ; une valeur au-dessus de la RAM de la machine, ou de la limite de mémoire d’un conteneur, est ramenée à cette valeur. Un --max- dans NODE_, ou sur la ligne de commande node qui démarre server., l’emporte. Voir Le relais a manqué de mémoire. |
Workspace et données #
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
workspace |
tableau de chaînes | non définie | Les dossiers absolus dans lesquels les conversations peuvent démarrer, avec tout ce qu’ils contiennent. Non définie ou vide, elle autorise tout dossier existant. Une entrée qui n’est pas un dossier existant est journalisée et écartée. La variable d’environnement COPILOT_ l’emporte quand elle est définie. Voir Limiter où les chats peuvent démarrer. |
data |
chaîne | data/ à côté du serveur |
L’emplacement de la base de données et du fichier de verrou du relais, et Ajouté en 0.9.17 de deepseek-, l’état Claude Code des chats DeepSeek. Un chemin relatif part du dossier qui contient config.. Les fichiers envoyés le suivent, dans uploads/ à l’intérieur ; seul un relais sur le data/ par défaut à côté du serveur, sans COPILOT_, les garde dans uploads/ à côté du serveur. COPILOT_ l’emporte quand elle est définie. oar start, oar restart et le service systemd Linux la définissent toujours (sur ~/., %APPDATA%\ ou votre propre valeur) ; pour un relais démarré ainsi, cette clé n’a donc aucun effet. Elle sert à un checkout démarré directement. Le lanceur de démarrage Windows ne fixe que le fichier de config, pas cette variable. |
CLI des fournisseurs #
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
cli |
objet | écrite par le relais | Les chemins des CLI de fournisseurs, par fournisseur : claude et grok. Le relais l’écrit quand une installation depuis Settings résout un chemin, et l’utilise au démarrage suivant pour retrouver le même programme. Vous pouvez définir un chemin à la main. Une entrée qui n’est pas un fichier exécutable est journalisée et ignorée. Les autres noms, copilot compris, ne sont pas utilisés. |
sdk |
chaîne | détecté | Chemin du index. du SDK Copilot. La recherche d’une CLI Copilot installée n’est sautée que si sdk et cli sont tous deux définis. Même définie seule, elle indique aussi au relais où chercher le fichier de démarrage du moteur d’extension : dans le même dossier que ce fichier du SDK. |
cli |
chaîne | détecté | Chemin du point d’entrée runtime de la CLI Copilot (app.). Utilisé avec sdk. Le relais le passe aussi aux workers Copilot qu’il démarre comme programme CLI, sauf si l’environnement en désigne déjà un. |
sdk |
chaîne | la plus récente trouvée | Une version exacte, comme 1.. La recherche d’une CLI Copilot installée n’accepte alors que cette version. Ignorée quand sdk et cli sont tous deux définis. |
Ces clés comptent là où le relais parle lui-même à la CLI Copilot installée, par
exemple pour importer des sessions Copilot existantes et pour lister les modèles. La
recherche explore le cache des paquets de la CLI Copilot (COPILOT_
ajoute un dossier à explorer en premier). Voir GitHub Copilot.
Aperçus #
Le bloc previews active la preview lane : un
second écouteur, sur son propre port et son propre nom d’hôte, qui publie des
serveurs de dev et des dossiers locaux. La mise en place, les noms d’hôte et le
proxy frontal sont décrits sur la
page de l’outil preview.
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
previews. |
booléen | false |
Active la lane. Seul true compte. |
previews. |
nombre | port du relais + 1 |
Le port de l’écouteur des aperçus. Au moins 1024, et pas le port du relais ; 0 choisit un port libre à chaque démarrage. |
previews. |
chaîne | 127. |
L’adresse sur laquelle l’écouteur se lie. Une adresse qui n’est pas une adresse de bouclage exige previews.. |
previews. |
booléen | false |
Autorise un previews. qui n’est pas une adresse de bouclage. Chaque aperçu est alors joignable depuis le réseau sans le proxy frontal. |
previews. |
chaîne | aucune | L’adresse publique http(s) de la lane. Obligatoire quand les aperçus sont activés. Son nom d’hôte doit différer de celui du relais (voir public). Une barre oblique finale est retirée. |
previews. |
tableau de chaînes | [] |
Les hôtes, en plus de cette machine, vers lesquels un aperçu de port peut pointer, comme l’adresse d’un conteneur ou d’une VM. |
previews. |
nombre | 8 |
Nombre maximal d’aperçus simultanés pour tout le relais. Une valeur qui n’est pas un entier positif utilise 8. |
Si l’une de ces règles échoue alors que les aperçus sont activés, le relais
journalise PREVIEW LANE disabled avec la raison, laisse la lane désactivée et
continue de tourner.
Ces variables d’environnement remplacent les clés correspondantes :
COPILOT_ (1, true, 0, false), COPILOT_,
COPILOT_, COPILOT_ et
COPILOT_ (séparés par des virgules).
Tunnels #
Deux tunnels peuvent joindre le relais depuis l’extérieur de votre réseau. Ils sont indépendants et peuvent tourner en même temps. Les deux sont désactivés par défaut, et un tunnel géré auquel il manque une valeur obligatoire reste désactivé et journalise pourquoi.
sshTunnel #
Un tunnel SSH inverse vers un serveur à vous. Voir Tunnel SSH.
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
ssh |
"disabled" ou "managed" |
"disabled" |
managed fait que le relais lance et relance le tunnel. |
ssh |
booléen | false |
Tant que le tunnel géré n’est pas connecté, y compris avant sa première connexion et quand une valeur obligatoire manque, le relais cesse de prendre des messages dans la queue. |
ssh |
chaîne | aucun | L’utilisateur SSH sur le serveur. Obligatoire en mode géré. |
ssh |
chaîne | aucun | Le nom d’hôte ou l’adresse du serveur. Obligatoire en mode géré. |
ssh |
nombre | aucun | Le port qui s’ouvre sur le serveur (1 à 65535). Obligatoire en mode géré. |
ssh |
"loopback" ou "public" |
"loopback" |
Si le port distant est ouvert seulement sur le serveur lui-même ou sur toutes ses interfaces. Indépendant de localhost. |
ssh |
chaîne | ssh |
Le programme SSH. Utilisez un nom présent dans le PATH ou un chemin absolu : un chemin relatif part du dossier du programme du relais. |
ssh |
chaîne | aucun | La clé privée à utiliser ; ~ est développé. Sans elle, SSH utilise son agent ou ses clés par défaut. |
ssh |
booléen | true |
Quand le port distant est déjà pris, lancer un nettoyage sur le serveur et réessayer. Seul false le désactive. |
ssh |
booléen | false |
Dans le cadre de ce nettoyage, terminer aussi vos propres sessions SSH sur le serveur qui n’exécutent rien. |
ssh |
chaîne | intégrée | Votre propre commande de nettoyage, à exécuter sur le serveur à la place de celle intégrée. |
cloudflaredTunnel #
Lance cloudflared de Cloudflare, que vous installez vous-même ; OAR n’en fournit pas. Voir Cloudflare Tunnel.
| Clé | Type | Par défaut | Ce qu’elle fait |
|---|---|---|---|
cloudflared |
"disabled" ou "managed" |
"disabled" |
managed fait que le relais lance cloudflared. COPILOT_ le remplace. |
cloudflared |
booléen | false |
Tant que le tunnel géré n’est pas connecté, y compris quand une valeur obligatoire manque, le relais cesse de prendre des messages dans la queue. |
cloudflared |
chaîne | aucun | Le token de votre propre tunnel Cloudflare. Obligatoire en mode géré. COPILOT_ le remplace. |
cloudflared |
chaîne | cloudflared |
Le programme, sous forme de chemin absolu ou de nom cherché dans le PATH. COPILOT_ le remplace. |
cloudflared |
tableau de chaînes | [] |
Des arguments ajoutés après cloudflared tunnel run --token <token>. |
Réglages de l’interface web et environnement #
Les réglages de l’interface web ne sont pas dans ce fichier. Les
interrupteurs et les clés des fournisseurs, les listes de modèles, la
durée maximale d’un turn, le délai des tâches de fond et les flags de
fonctionnalité sont stockés dans la base de
données du relais, dans le dossier de données. Le fichier contient ce dont le
relais a besoin avant que la base de données s’ouvre (le dossier de données, le
port, le token) et des faits sur la machine (chemins des CLI, tunnels). La
seule chose que l’interface écrit dans le fichier est cli.
Ajouté en 0.9.17 DeepSeek n’a pas de clé ici non plus : sa clé d’API, son URL de
base et son budget sont enregistrés depuis Settings → Providers → DeepSeek (Réglages → Fournisseurs → DeepSeek)
dans la base de données.
Variables d’environnement. La liste complète se trouve sur la page
Variables d’environnement. Là où une
variable existe pour une clé, la variable l’emporte sur le fichier : COPILOT_
(data), COPILOT_, COPILOT_ et
COPILOT_ (listées dans leurs sections). COPILOT_
est l’exception : ses noms s’ajoutent à tunnel. Les options
--token et --port l’emportent sur les deux le temps d’une exécution.
COPILOT_ elle-même est traitée sous Où se trouve le fichier.
Un exemple #
Toutes les valeurs sont inventées. Supprimez les blocs que vous n’utilisez pas.
{
"authToken": "0f3c1a9e-example-token-do-not-copy",
"port": 3333,
"localhostOnly": false,
"remotePath": "",
"trustProxy": "loopback",
"allowedOrigins": [],
"publicHostnames": ["relay.example.com"],
"tunnelMarkerHeaders": ["x-edge-request-id"],
"processingTimeoutMs": 600000,
"maxRequeueRetries": 5,
"contextIndicatorMode": "bar",
"workspaceRootAllowList": ["/home/dev/projects", "/srv/sites"],
"dataDir": "data",
"cliBinaries": {
"claude": "/home/dev/.local/bin/claude",
"grok": "/home/dev/.grok/bin/grok"
},
"restartShutdownTimeoutMs": 45000,
"restartGracefulTimeoutMs": 8000,
"restartSpawnTimeoutMs": 18000,
"restartRebindTimeoutMs": 20000,
"restartReadyCooldownMs": 1000,
"restartMaxAttempts": 3,
"restartRetryBackoffMs": [1000, 3000, 7000],
"previews": {
"enabled": true,
"port": 3334,
"bindHost": "127.0.0.1",
"allowPublicBind": false,
"publicBaseUrl": "https://preview.example.com",
"allowedTargetHosts": [],
"maxLive": 8
},
"sshTunnel": {
"mode": "managed",
"required": false,
"user": "ubuntu",
"host": "vps.example.com",
"remotePort": 4444,
"remoteBind": "loopback",
"identityFile": "~/.ssh/id_ed25519"
},
"cloudflaredTunnel": {
"mode": "disabled",
"token": "",
"binary": "cloudflared",
"extraArgs": []
}
}
Clés obsolètes, ignorées et internes #
Si vous trouvez l’une de ces clés dans un fichier, vous pouvez la laisser ou la supprimer :
| Clé | Ce que c’est |
|---|---|
features |
Retirée. Les flags de fonctionnalité sont désormais stockés dans la base de données du relais, sous Settings → Features (Réglages → Fonctionnalités). Au démarrage, le relais copie dans la base de données les valeurs qu’il trouve ici, sauf si une valeur y est déjà stockée, et retire la clé du fichier. |
ssh, cloudflared |
Ancienne forme de mode. true signifie managed, et n’est lu que si mode ne vaut ni disabled ni managed. |
poll |
Écrite dans les nouveaux fichiers, mais le relais ne la lit pas. Elle n’a aucun effet. |
conversation |
isolated ou shared. Écrite dans les nouveaux fichiers. Le relais stocke la valeur dans chaque enregistrement de session et l’indique dans son statut, mais rien dans OAR ne se comporte différemment selon la valeur. Elle n’a aucun effet pour vous. |
cli, model |
Utilisées seulement par un mode autonome que vous démarrez à la main (une issue de secours pour les développeurs ; aucune commande oar ne le démarre). Le relais que vous démarrez avec oar start ignore model. Il lit cli pour une seule chose : la preview lane ne choisit jamais ce port. |
host |
Lue uniquement par les programmes qui se connectent au relais (les workers de session et l’extension Copilot), pour construire l’adresse qu’ils utilisent ; l’écouteur du relais lui-même l’ignore (voir localhost). Laissez-la de côté. |