config.json
config. es el archivo de configuración propio del relay: su puerto, quién
puede llegar a él, el token de acceso, los temporizadores que deciden cuándo un
turn se considera atascado, y los túneles y la preview lane opcionales. oar setup lo crea. Lo
editas a mano para todo lo que la configuración inicial no pregunta.
La mayor parte de lo que ajustas en la interfaz web no está en este archivo. Consulta Ajustes en la interfaz web y en el entorno.
Dónde está el archivo #
| Instalación | Ruta |
|---|---|
| Instalación global en macOS, Linux y WSL | ~/. |
| Instalación global en Windows | %APPDATA%\ |
Instalación global con OAR_ definida |
config. en esa carpeta |
| Checkout de git | server/ en el checkout |
OAR_ traslada toda la carpeta de estado de una instalación global
(configuración, datos y registros); consulta Dónde guarda OAR sus archivos.
COPILOT_ apunta el relay a un archivo concreto, esté donde
esté, pero solo cuando el relay se inicia sin el lanzador propio de oar: node server/, u oar copilot (cuando el archivo existe). oar setup,
oar start, oar restart y el servicio usan siempre el config. propio de
la instalación, diga lo que diga la variable. En un checkout sin
server/, oar copilot crea su archivo en
~/. en su lugar (%LOCALAPPDATA%\ en
Windows). Consulta Variables de entorno.
El relay mantiene el archivo legible solo para su propietario (modo 0600 en
macOS y Linux), porque contiene el token de acceso en texto plano. Trata una
copia del archivo como una contraseña.
Quién lo escribe #
oar setupescribe el token,localhostyOnly port, y deja cada una de las demás claves tal como la encuentra. Un archivo que crea, o uno al que le faltan, recibe ademáspoll,Interval Ms processing(Timeout Ms 600000) yconversation. ConsultaSession Mode oar setupy el primer arranque.- El relay escribe
clicuando instalas o actualizas la CLI de un proveedor desde Settings (Ajustes). Solo cambia esa clave. Si no puede leer el archivo como JSON, se niega a escribir y conserva la asociación solo para el proceso en marcha.Binaries - El relay crea el archivo cuando no existe ninguno al arrancar, con un
authvacío, el puertoToken 3333,localhost,Only: true pollyInterval Ms conversation. También elimina una claveSession Mode featuresque haya quedado de versiones anteriores (consulta Claves obsoletas, ignoradas e internas). - Tú, en cualquier editor de texto.
Editarlo a mano #
El archivo es un único objeto JSON. Las claves que omites toman su valor
predeterminado, y un bloque anidado como previews se lee entero. Edítalo y
luego reinicia el relay: el relay lee el archivo una sola vez, al arrancar.
Nada de lo que tiene un relay en marcha cambia cuando guardas el archivo.
Reinicia con oar restart (instalaciones globales), o con
🌄 Restart web relay (Reiniciar el relay web) en el menú ⋯ de una conversación.
- Una clave desconocida se ignora y se conserva. La configuración inicial y las escrituras propias del relay la dejan en su sitio.
- Un JSON no válido no detiene el relay. Registra
Failed to read config.y funciona con los valores predeterminados: puerto 3333, solo esta máquina y un token aleatorio que es nuevo en cada arranque y se imprime en el registro. Tu token guardado deja de funcionar hasta que arreglas el archivo. Un segundo lector, el que elige la carpeta de datos, recurre a la carpeta predeterminada. El relay no toca el archivo roto.json, using defaults. - Un valor incorrecto se trata clave por clave. Los valores predeterminados de abajo son los que usa el relay cuando falta un temporizador o un límite o no se puede usar. Los túneles y la preview lane se quedan desactivados y registran el motivo; el relay en sí sigue funcionando.
- La línea de comandos gana al archivo durante una ejecución:
--token <value>y--port <number>ennode server/(server. js oar copilottambién los pasa;oar startno) anulanauthyToken porty nunca se guardan en el archivo. Un--portque no sea un número del 1 al 65535 se ignora con una advertencia.
No ejecutes oar setup sobre un archivo que no sea JSON válido
oar setup trata un archivo que no puede analizar como si no existiera.
Entonces escribe encima un config. nuevo con un token nuevo, y se pierden
todas las demás claves del archivo antiguo. Arregla primero el JSON. Guarda una
copia de cualquier archivo que edites a mano.
Red y acceso #
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
auth |
cadena | ninguno: un token aleatorio en cada arranque | El token con el que inician sesión todos los navegadores, workers y clientes de la API. Si está vacío, el relay crea uno aleatorio en cada arranque, lo imprime en su registro y no lo guarda. oar setup escribe uno estable. |
port |
número | 3333 |
El puerto HTTP y WebSocket, un número entero del 1 al 65535. |
localhost |
booleano | true |
true vincula el relay a 127., de modo que solo esta máquina llega a él. Cualquier otro valor, incluidos false, null, 1 y "yes", lo vincula a todas las interfaces (0.), de modo que tu LAN puede llegar a él. Solo true y el texto "true" (en mayúsculas o minúsculas) cuentan como activado; el valor predeterminado solo se aplica cuando falta la clave. No afecta a los túneles de abajo. |
remote |
cadena | "" |
Un prefijo de ruta, cuando un proxy inverso sirve el relay bajo una subruta, por ejemplo /. Se añade una barra inicial y se quitan las barras finales. El relay quita el prefijo de las peticiones entrantes y lo pone en la ruta de la cookie de inicio de sesión, en la ruta del socket y en las direcciones de los archivos y de los enlaces compartidos. |
trust |
valor de trust proxy de Express |
"loopback" |
Qué proxies pueden fijar las cabeceras X- a las que el relay hace caso. La dirección del cliente (límites de frecuencia, el bloqueo de inicio de sesión, el registro de accesos de los enlaces compartidos) y el host y el esquema de los enlaces compartidos nuevos se leen a través de él, de modo que un cliente directo no puede falsificarlos. El valor predeterminado sirve para un proxy o un túnel en la misma máquina. Usa un número de saltos (1), una dirección o subred ("10.), o una lista de ellos cuando un proxy de otro host reenvía al relay (Proxy inverso). |
allowed |
array de cadenas | [] |
Nuevo en 0.9.11 Orígenes de navegador adicionales (esquema, host y un puerto distinto del predeterminado, como "https://) que la conexión Socket.IO en vivo acepta además del propio del relay. Hace falta para un proxy que reescribe la cabecera Host. Consulta Proxy inverso. |
public |
array de cadenas | [] |
Nombres de host que llegan al propio relay. La preview lane rechaza un previews. en uno de ellos (y también localhost y 127.), para que una app en vista previa nunca comparta una cookie de inicio de sesión con el relay. |
tunnel |
array de cadenas | [] |
Nombres de cabecera adicionales que el borde de un túnel añade al tráfico. Una petición que lleva cf- o una de estas cabeceras no puede llegar a las rutas de los workers de sesión (los sockets que usan los workers de tus propios agentes, que solo se ejecutan en esta máquina). cf- está siempre en la lista. También sirve una cadena separada por comas. Los nombres de la variable de entorno COPILOT_ (separados por comas) se suman a estos; una lista vacía aquí no los desactiva. |
push |
cadena | mailto: |
La dirección de contacto que el relay envía a los servicios push con las peticiones de Web Push (notificaciones). Ponle una dirección mailto: tuya. |
shared |
número | 200 |
Máximo de espectadores en vivo que se cuentan para el enlace de una conversación compartida. Como mínimo 1. Cuando se alcanza, se descarta al espectador que lleva más tiempo inactivo para hacer sitio. |
shared |
número | 5000 |
Máximo de espectadores en vivo de enlaces compartidos que se cuentan en total, con la misma regla. Nunca menor que el límite por conversación. |
Para la primera conexión, el token y el acceso por LAN, consulta el primer arranque.
Turns y temporizadores #
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
processing |
número, ms | 600000 |
Cuánto tiempo puede pasar un turn sin señales de vida de su worker antes de que el relay lo devuelva a la queue. No es un límite de la duración de un turn. Un valor de 0 o menor usa el predeterminado. Consulta Cuando un turn se atasca. |
max |
número | 5 |
Cuántas veces se puede intentar un mensaje antes de que falle definitivamente. Como mínimo 1. Consulta Volver a poner en cola. |
context |
"default" o "bar" |
"default" |
Cómo muestra el área de redacción lo lleno que está el contexto, con una línea a lo largo de su borde superior. default es una línea de ancho completo cuyo color pasa de verde a rojo a medida que se llena el contexto. bar es la misma línea creciendo desde la izquierda hasta la proporción de contexto usada. Cualquier otro valor, en mayúsculas o minúsculas, equivale a default. |
La duración máxima del turn, el tiempo límite de las tareas en segundo plano y las vigilancias de inactividad no están aquí: consulta Cuando un turn se atasca.
Reinicios y apagado #
Estas claves determinan el reinicio planificado del relay (🌄 Restart web relay). Consulta Reinicios y reanudación. Cada temporizador se expresa en milisegundos; un valor de 0 o menor, o uno que no sea un número, usa el predeterminado.
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
restart |
número, ms | 45000 |
Cuánto espera un reinicio a que termine el turn en curso antes de rendirse con un fallo shutdown-. |
restart |
número, ms | 8000 |
Cuánto espera el relay a una parada ordenada antes de forzar el reinicio. |
restart |
número, ms | 18000 |
Cuánto espera un intento a la fase de reinicio o reanudación antes de contar como fallido (spawn-). |
restart |
número, ms | 20000 |
Cuánto espera un intento a que las sesiones se vuelvan a vincular tras el reinicio (rebind-). |
restart |
número, ms | 1000 |
Cuánto tiempo sigue en pausa la queue justo después de que un reinicio informe de que está listo. |
restart |
número | 3 |
Cuántos intentos tiene un reinicio antes de que el resultado sea definitivo. Como mínimo 1. |
restart |
array de números, ms | [1000, 3000, 7000] |
La espera antes del intento 2, 3, etc. Cuando hay más intentos que entradas, se repite la última entrada. Las entradas que no son números positivos se descartan; un resultado vacío usa el predeterminado. |
Memoria Nuevo en 0.9.19 #
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
heap |
número, MB | 60 % de la RAM, de 2.048 a 8.192 | El límite de heap del relay, un número entero de al menos 512. Lo leen todas las formas de iniciar el relay: oar start, el servicio de systemd, el inicio automático de Windows y la extensión de la CLI. Se aplica desde el siguiente inicio. Un valor que no sea un número entero de al menos 512 se ignora con una línea en el registro; uno por encima de la RAM de la máquina, o del límite de memoria de un contenedor, se reduce a ese valor. Gana un --max- en NODE_, o en la línea de comandos de node que inicia server.. Consulta El relay se quedó sin memoria. |
Workspace y datos #
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
workspace |
array de cadenas | sin definir | Carpetas absolutas en las que pueden iniciarse las conversaciones, junto con todo lo que contienen. Sin definir o vacía permite cualquier carpeta existente. Una entrada que no es una carpeta existente se registra y se omite. La variable de entorno COPILOT_ gana cuando está definida. Consulta Limitar dónde pueden iniciarse los chats. |
data |
cadena | data/ junto al servidor |
Dónde están la base de datos y el archivo de bloqueo del relay, y Nuevo en 0.9.17 deepseek-, el estado de Claude Code de los chats de DeepSeek. Una ruta relativa cuenta desde la carpeta que contiene config.. Los archivos subidos la siguen y van a uploads/ dentro de ella; solo un relay con el data/ predeterminado junto al servidor, sin COPILOT_, los guarda en uploads/ junto al servidor. COPILOT_ gana cuando está definida. oar start, oar restart y el servicio systemd de Linux la definen siempre (como ~/., %APPDATA%\ o tu propio valor), así que para un relay iniciado así esta clave no tiene efecto. Es para un checkout iniciado directamente. El lanzador de inicio de Windows fija solo el archivo de configuración, no esta variable. |
CLI de los proveedores #
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
cli |
objeto | lo escribe el relay | Rutas a las CLI de los proveedores, por proveedor: claude y grok. El relay lo escribe cuando una instalación desde Settings resuelve una ruta, y lo usa en el siguiente arranque para volver a encontrar el mismo programa. Puedes fijar una ruta a mano. Una entrada que no es un archivo ejecutable se registra y se ignora. Otros nombres, incluido copilot, no se usan. |
sdk |
cadena | detectado | Ruta al index. del SDK de Copilot. La búsqueda de una CLI de Copilot instalada solo se omite cuando sdk y cli están definidos los dos. Por sí solo, también le indica al relay dónde buscar, a su lado, el archivo de arranque del motor de extensión. |
cli |
cadena | detectado | Ruta a la entrada de la runtime de la CLI de Copilot (app.). Se usa con sdk. El relay también se la pasa como programa de CLI a los workers de Copilot que inicia, salvo que el entorno ya indique uno. |
sdk |
cadena | la más reciente encontrada | Una versión exacta como 1.. La búsqueda de una CLI de Copilot instalada acepta entonces solo esa versión. Se ignora cuando sdk y cli están definidos los dos. |
Esto importa allí donde el relay habla él mismo con la CLI de Copilot instalada,
por ejemplo para importar sesiones de Copilot existentes y para listar modelos. La
búsqueda mira en la caché de paquetes de la CLI de Copilot (COPILOT_
añade una carpeta en la que buscar primero). Consulta GitHub Copilot.
Vistas previas #
El bloque previews activa la preview lane: un segundo listener con su propio
puerto y nombre de host que publica servidores de desarrollo y carpetas locales.
La configuración, los nombres de host y el proxy frontal están en la
página de la herramienta preview.
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
previews. |
booleano | false |
Activa la lane. Solo cuenta true. |
previews. |
número | port del relay + 1 |
El puerto del listener de vistas previas. Como mínimo 1024, y no el puerto del relay; 0 elige un puerto libre en cada arranque. |
previews. |
cadena | 127. |
La dirección a la que se vincula el listener. Una dirección que no sea de loopback necesita previews.. |
previews. |
booleano | false |
Permite un previews. que no sea de loopback. Entonces cada vista previa es accesible desde la red sin el proxy frontal. |
previews. |
cadena | ninguno | La dirección pública http(s) de la lane. Obligatoria cuando las vistas previas están activadas. Su nombre de host debe ser distinto del del relay (consulta public). Se quita la barra final. |
previews. |
array de cadenas | [] |
Hosts, además de esta máquina, a los que puede apuntar una vista previa de puerto, como la dirección de un contenedor o de una VM. |
previews. |
número | 8 |
Máximo de vistas previas a la vez para todo el relay. Un valor que no sea un número entero positivo usa 8. |
Si una de estas reglas no se cumple con las vistas previas activadas, el relay
registra PREVIEW LANE disabled con el motivo, deja la lane desactivada y sigue
funcionando.
Estas variables de entorno anulan las claves correspondientes:
COPILOT_ (1, true, 0, false), COPILOT_,
COPILOT_, COPILOT_ y
COPILOT_ (separados por comas).
Túneles #
Dos túneles pueden llegar al relay desde fuera de tu red. Son independientes y pueden funcionar a la vez. Los dos están desactivados de forma predeterminada, y un túnel gestionado al que le falta un valor obligatorio se queda desactivado y registra por qué.
sshTunnel #
Un túnel SSH inverso hacia un servidor tuyo. Consulta Túnel SSH.
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
ssh |
"disabled" o "managed" |
"disabled" |
managed hace que el relay ejecute y reinicie el túnel. |
ssh |
booleano | false |
Mientras el túnel gestionado no está conectado, incluso antes de su primera conexión y cuando falta un valor obligatorio, el relay deja de tomar mensajes de la queue. |
ssh |
cadena | ninguno | El usuario SSH en el servidor. Obligatorio en modo gestionado. |
ssh |
cadena | ninguno | El nombre de host o la dirección del servidor. Obligatorio en modo gestionado. |
ssh |
número | ninguno | El puerto que se abre en el servidor (del 1 al 65535). Obligatorio en modo gestionado. |
ssh |
"loopback" o "public" |
"loopback" |
Si el puerto remoto se abre solo en el propio servidor o en todas sus interfaces. Independiente de localhost. |
ssh |
cadena | ssh |
El programa SSH. Usa un nombre que esté en el PATH o una ruta absoluta: una ruta relativa cuenta desde la carpeta del programa del relay. |
ssh |
cadena | ninguno | La clave privada que se usa; ~ se expande. Sin ella, SSH usa su agente o sus claves predeterminadas. |
ssh |
booleano | true |
Cuando el puerto remoto ya está ocupado, ejecuta una limpieza en el servidor y lo vuelve a intentar. Solo false lo desactiva. |
ssh |
booleano | false |
Como parte de esa limpieza, termina también tus propias sesiones SSH en el servidor que no ejecutan nada. |
ssh |
cadena | integrado | Tu propio comando de limpieza para ejecutar en el servidor en lugar del integrado. |
cloudflaredTunnel #
Ejecuta cloudflared de Cloudflare, que instalas tú; OAR no incluye ninguno. Consulta Cloudflare Tunnel.
| Clave | Tipo | Predeterminado | Qué hace |
|---|---|---|---|
cloudflared |
"disabled" o "managed" |
"disabled" |
managed hace que el relay ejecute cloudflared. COPILOT_ lo anula. |
cloudflared |
booleano | false |
Mientras el túnel gestionado no está conectado, incluso cuando falta un valor obligatorio, el relay deja de tomar mensajes de la queue. |
cloudflared |
cadena | ninguno | El token de tu propio túnel de Cloudflare. Obligatorio en modo gestionado. COPILOT_ lo anula. |
cloudflared |
cadena | cloudflared |
El programa, como ruta absoluta o como nombre que se busca en el PATH. COPILOT_ lo anula. |
cloudflared |
array de cadenas | [] |
Argumentos que se añaden después de cloudflared tunnel run --token <token>. |
Ajustes en la interfaz web y en el entorno #
Los ajustes de la interfaz web no están en este archivo. Los interruptores y
las claves de los proveedores, las listas de modelos, la duración máxima del turn, el tiempo límite de las tareas en segundo plano y los flags
de funciones se guardan en la base de datos
del relay, en la carpeta de datos. El archivo contiene lo que el relay necesita
antes de abrir la base de datos (la carpeta de datos, el puerto, el token) y
datos sobre la máquina (rutas de CLI, túneles). Lo único que la interfaz escribe
en el archivo es cli. Nuevo en 0.9.17 DeepSeek tampoco tiene ninguna
clave aquí: su clave de API, su URL base y su presupuesto se guardan desde
Settings → Providers → DeepSeek (Ajustes → Proveedores → DeepSeek) en la
base de datos.
Variables de entorno. La lista completa está en
Variables de entorno. Cuando existe una
variable para una clave, la variable gana al archivo: COPILOT_
(data), COPILOT_, COPILOT_ y
COPILOT_ (enumeradas en sus secciones). COPILOT_
es la excepción: sus nombres se suman a tunnel. Las opciones
--token y --port ganan a ambos durante una ejecución.
COPILOT_ se explica en Dónde está el archivo.
Un ejemplo #
Todos los valores son inventados. Borra los bloques que no uses.
{
"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": []
}
}
Claves obsoletas, ignoradas e internas #
Si encuentras una de estas en un archivo, puedes dejarla o borrarla:
| Clave | Qué es |
|---|---|
features |
Retirada. Los flags de funciones se guardan ahora en la base de datos del relay, en Settings → Features (Ajustes → Funciones). Al arrancar, el relay copia los valores que encuentra aquí en la base de datos, salvo que ya haya un valor guardado allí, y elimina la clave del archivo. |
ssh, cloudflared |
Forma antigua de mode. true significa managed, y solo se lee cuando mode no es disabled ni managed. |
poll |
Se escribe en los archivos nuevos, pero el relay no la lee. No tiene efecto. |
conversation |
isolated o shared. Se escribe en los archivos nuevos. El relay guarda el valor en el registro de cada sesión y lo indica en su estado, pero nada en OAR se comporta de forma distinta con uno u otro valor. Para ti no tiene efecto. |
cli, model |
Solo los usa un modo independiente que inicias a mano (una vía de escape para desarrolladores; ningún comando oar lo inicia). El relay que inicias con oar start ignora model. Lee cli para una sola cosa: la preview lane nunca elige ese puerto. |
host |
Solo lo leen los programas que se conectan al relay (los workers de sesión y la extensión de Copilot), para construir la dirección que usan; el listener del propio relay lo ignora (consulta localhost). Omítela. |