Archivos y carpetas
OAR guarda todo lo que le pertenece en una sola carpeta, la carpeta de estado: el archivo de configuración, la base de datos con tus conversaciones, los registros y los archivos subidos. Esta página dice dónde está esa carpeta, qué contiene, qué partes puedes eliminar, cuáles guardan secretos y qué elimina el relay por sí solo. Algunos datos no están en la carpeta de estado: cada proveedor guarda sus propios datos de sesión e inicios de sesión en sus propias carpetas.
La carpeta de estado #
| Instalación | Carpeta de estado |
|---|---|
Instalador o npm install -g, macOS, Linux y WSL |
~/. |
Instalador o npm install -g, Windows |
%APPDATA%\ |
Instalación global con OAR_ definida |
la carpeta que indica |
| Checkout de git | dentro del checkout: server/, server/, server/, server/ |
npm install -g y oar update reemplazan el paquete, pero nunca tocan la
carpeta de estado. OAR_ tiene que estar definida en cada shell en
la que ejecutes oar; si no, el comando busca en la carpeta predeterminada;
consulta Variables de entorno. oar doctor
muestra las rutas en uso: la carpeta de estado, el archivo de configuración, la
base de datos y su tamaño. Las mismas rutas aparecen para cada instalación en
Instalación.
Tres variables de entorno trasladan partes sueltas: COPILOT_
el archivo de configuración, COPILOT_ la carpeta de datos
(base de datos, bloqueo y archivos subidos) y COPILOT_ la
carpeta de registros. En config., la clave data también traslada la
carpeta de datos; la variable de entorno tiene prioridad. Un data
relativo se cuenta desde la carpeta de config..
Nuevo en 0.9.14 Los archivos subidos también siguen a la carpeta de datos:
<data. Los archivos subidos que versiones anteriores dejaron en
server/, o que una migración copió en uploads/ de la carpeta de
estado, se siguen leyendo allí, en su sitio.
Nuevo en 0.9.14 El relay de una instalación global usa la carpeta de datos de
la carpeta de estado, lo inicie quien lo inicie: oar start, el servicio de
Linux, los dos modos de inicio automático de Windows y un gh copilot normal
con la extensión de OAR. Un data en config. que usó un relay de
inicio automático anterior se copia una vez y se deja como está.
Antes de 0.9.14: inicio automático de Windows y gh copilot
Hasta la 0.9.13, las dos entradas de inicio automático de Windows, y el relay
que iniciaba un gh copilot normal, solo fijaban el archivo de configuración
(gh copilot ni siquiera eso). Un relay iniciado por ellos guardaba su base de
datos, archivo de bloqueo, archivos subidos y registros en server\,
server\ y server\ dentro de la carpeta del paquete instalado,
que npm install -g y oar update reemplazan. La actualización a 0.9.14
copia esos datos antes de que npm los elimine; consulta la
nota de actualización.
En macOS y Linux, el relay deja la carpeta de datos legible solo para ti (modo 700), y el archivo de configuración y los archivos de la base de datos solo para el propietario (modo 600).
Trasladar una instalación antigua #
Antes de que el proyecto cambiara de nombre, el estado estaba en la carpeta
server/ de un checkout de git, y el archivo de configuración y los registros
del lanzador de un checkout en ~/.
($XDG_ cuando está definida; Windows:
%LOCALAPPDATA%\). Una instalación global copia una vez el
archivo de configuración y los registros de esa carpeta en la carpeta de
estado, con su primer oar setup u oar copilot. oar start no migra. Para
importar el estado de un checkout, que incluye su base de datos:
oar setup --migrate-from /home/dev/projects/old-oar
La carpeta es el propio checkout, no su carpeta server/. Qué ocurre:
- Copia la base de datos (con sus archivos
-waly-shm), el archivo de configuración, los almacenes de agentes de Cursor que estaban endata/(solo si había base de datos), la carpetauploadsy la carpetalogssi ocupa 50 MB o menos. - Nunca cambia el origen. Elimina tú la carpeta antigua cuando estés conforme.
- Se niega mientras un relay siga ejecutándose desde el origen, y lo dice.
- Comprueba la copia antes de darla por buena: la base de datos debe pasar la comprobación de integridad de SQLite y contener el mismo número de conversaciones y mensajes. Si no, elimina lo que copió, Nuevo en 0.9.14 ya no toda la carpeta de estado, y deja un mensaje.
- Nuevo en 0.9.14 Nunca sobrescribe. Un
config.que ya esté en la carpeta de estado se conserva. La base de datos vacía que creó el relay de un instalador se mueve ajson backups/(detén antes el relay:oar stop); una base de datos con conversaciones hace que se niegue y diga qué hacer en su lugar. Mientras copia una base de datos mantiene el bloqueo del relay, así que entretanto ningún relay arranca sobre ella. - Escribe un comprobante en
backups/y un archivo marcadorMIGRATION. md .en la carpeta de estado.migrated
Después del instalador Nuevo en 0.9.14
El marcador solo se escribe tras una copia real, y una carpeta que indiques
con --migrate- siempre se migra, con una línea que dice qué se copió o
por qué no se copió nada. Así que la opción también funciona después de que un
instalador haya ejecutado oar setup. La misma carpeta una segunda vez solo
dice que ya está migrada. Antes de 0.9.14, el primer oar setup u
oar copilot escribía el marcador aunque no hubiera nada que importar, y un
--migrate- posterior no hacía nada sin decir una palabra.
Nuevo en 0.9.14 Los archivos subidos migrados van a data/, donde el
relay los lee, y los almacenes de agentes de Cursor a data/,
que el relay lee de forma predeterminada. Los archivos subidos que una
migración anterior dejó en uploads/ de la carpeta de estado se fusionan en
data/ en el siguiente arranque del relay; no se sobrescribe ni se
elimina nada. Las carpetas enlazadas simbólicamente en el checkout se copian
como carpetas reales.
Qué contiene #
Las rutas son relativas a la carpeta de estado. «Se puede eliminar» significa que el relay funciona después; no dice nada de lo que pierdes.
| Ruta | Qué contiene | ¿Se puede eliminar? |
|---|---|---|
config. |
Puerto, acceso, el token de acceso, temporizadores y túneles y vistas previas opcionales. Consulta config.json | Detén antes el relay. oar setup escribe uno nuevo con un token nuevo, lo que cierra la sesión en todos los dispositivos. Los ajustes de túnel que contiene se pierden |
data/ |
La base de datos: tus conversaciones y ajustes. Consulta La base de datos | No: es tu historial. Haz antes una copia de seguridad |
data/, data/ |
El registro de escritura anticipada de la base de datos y su índice, presentes mientras el relay se ejecuta | Nunca por separado. Elimínalos solo junto con copilot. |
data/ |
Un archivo por cada adjunto subido o pegado, con su hash SHA-256 como nombre, así que el mismo archivo se guarda una sola vez. Mientras se escribe un archivo subido existe un archivo <sha256>.<pid>.<number>. |
No a mano: la base de datos hace referencia a estos archivos, y una conversación que usó uno muestra un adjunto que falta. El relay elimina los que no se usan, consulta Retención |
data/ |
El bloqueo de un relay por carpeta, consulta Un relay por carpeta de datos | Solo cuando no hay ningún relay en ejecución |
data/ |
Nuevo en 0.9.14 Una carpeta por conversación de Cursor: el estado de su agente. Consulta Fuera de la carpeta de estado | No mientras uses Cursor: una conversación sin su almacén recibe un agente nuevo |
data/ |
Nuevo en 0.9.17 El estado de Claude Code de los chats de DeepSeek: transcripciones y carpetas de sesión en projects/, lo que deja cada proceso de Claude Code (sessions/, session-, shell-), los ajustes propios de Claude Code y oar-, el registro que lleva el relay de cada arranque de Claude Code, que una eliminación usa para encontrar las instantáneas de shell correctas. Ningún inicio de sesión de Claude. Legible solo para ti (modo 700 en macOS y Linux). Eliminar una conversación de DeepSeek elimina su parte, consulta Retención |
No mientras uses chats de DeepSeek: sus sesiones de Claude Code están aquí. El worker vuelve a crear la carpeta cuando arranca |
data/ |
Nuevo en 0.9.19 Instantáneas del heap (*.) que el relay escribe cuando su heap se acerca al límite; consulta El relay se quedó sin memoria. Legibles solo para ti (modo 700 en macOS y Linux). Una instantánea contiene el token de acceso y las claves de API |
Sí. El relay nunca borra instantáneas: borra cada una cuando ya la hayas leído |
data/ |
Nuevo en 0.9.14 Los datos que una versión anterior guardaba dentro del paquete, copiados aquí por la actualización antes de que npm los eliminara. El relay los asume en su siguiente arranque | Una vez que el relay los ha traído ([data] Brought over the database … en relay-) |
backups/<time>/ |
Nuevo en 0.9.14 Una base de datos que el relay reemplazó por otra más reciente que trajo; también la base de datos vacía que una migración apartó | Cuando estés seguro de que no la necesitas |
data/ |
El puerto y el token con los que arrancó el relay en ejecución, guardados entre un oar setup que los cambió y el reinicio que los aplica. Se elimina solo |
Sí |
logs/, logs/ |
Lo que oar start u oar copilot imprimió al iniciar él mismo el relay, salida estándar y errores. Solo se escriben cuando oar inicia él mismo el relay; el servicio y un relay ejecutado en una terminal no los escriben |
Sí. Nunca rotan y crecen |
logs/ |
Una copia de la consola del relay con una marca de tiempo por línea, escrita por cada relay | Sí |
logs/ |
La salida de un worker de sesión, consulta Registros | Sí |
logs/ |
La configuración de herramientas de una sesión. No contiene secretos | Sí. El relay escribe uno nuevo cuando arranca el worker de la sesión |
logs/, logs/ |
Los escribe la extensión del motor de extensión de Copilot | Sí |
npm/ |
El paquete de OAR, cuando el instalador lo puso aquí porque la carpeta global de npm requería root | No mientras uses esta instalación. Es el programa |
runtime/ |
El Node.js propio de OAR, cuando la máquina no tenía uno lo bastante reciente | No mientras oar se ejecute con él |
logs/ |
Nuevo en 0.9.15 El resultado de npm tras oar uninstall, y cualquier carpeta oculta . que npm haya dejado. Con --purge va en cambio a la carpeta temporal del sistema |
Sí |
oar-, oar- (Windows) |
El lanzador que ejecuta la tarea de arranque y la definición de tarea que registra OAR. Consulta Inicio automático | No mientras el relay arranque al encender. oar autostart off elimina ambos |
*., *., <task>. (Windows) |
Nuevo en 0.9.15 Copias de entradas de inicio automático hechas a mano que oar autostart --replace reemplazó, y de las tareas que un cambio fallido restauró: un lanzador, una entrada de Inicio, el XML exportado de una tarea (schtasks / lo recupera). Las copias de entradas que generó OAR desaparecen una vez que un cambio ha funcionado |
Sí, cuando ya no quieras recuperar la entrada |
backups/, . |
El comprobante y el marcador de una migración | El comprobante: sí. El marcador: déjalo; si no, la migración automática desde la carpeta de configuración anterior podría volver a ejecutarse |
Fuera de la carpeta de estado, el lanzador oar del instalador está en
~/. (solo en los casos en que instala en ~/.), y el
servicio de Linux es ~/.. Cómo quitarlos se
describe en Quitar OAR.
Nuevo en 0.9.15 oar uninstall quita el servicio y el paquete y
deja la carpeta de estado como está; oar uninstall --purge la elimina,
después de que escribas delete.
Un checkout de git guarda los mismos archivos en server/. Las imágenes
generadas no están en la carpeta de estado, consulta Fuera de la carpeta de
estado.
La base de datos #
La base de datos es un único archivo SQLite, copilot.. El relay la crea en
el primer arranque. Contiene lo que llamarías tus datos:
- las conversaciones y sus mensajes, con la transcripción, el índice de adjuntos y los mensajes fijados
- la queue de mensajes, los mensajes en cola y en espera, y las preguntas que hizo un agente
- los ajustes del relay que cambias en la interfaz web (los interruptores de toda la app, los ajustes de proveedores, la retención elegida, las preferencias de actualización, las listas de modelos)
- las claves de API de OpenAI, Cursor y Nuevo en 0.9.17 DeepSeek, si las introdujiste
- los relays emparejados y sus tokens, y las suscripciones que vigilan sesiones en este relay y en relays emparejados
- las suscripciones web push de tus dispositivos y las claves push del relay
- los enlaces de conversaciones compartidas
- los registros de subagents y de flujos de trabajo, la actividad y los pensamientos de cada conversación
- el índice de archivos subidos y qué mensajes los usan
- instantáneas de consumo para los medidores del plan de Check Usage (Ver consumo), y Nuevo en 0.9.17 lo que cuenta la tarjeta de DeepSeek: los tokens y búsquedas de los turns de DeepSeek por modelo y por día, los últimos totales que informó cada sesión de DeepSeek, y las lecturas de saldo con las que se mide su barra
- los chats de imágenes: sus operaciones y los vínculos entre imágenes generadas
- las tarjetas de vista previa
Las migraciones se ejecutan solas cada vez que arranca el relay. Crean lo que falta y añaden columnas, y volver a ejecutarlas no cambia nada. No las ejecutas tú y no puedes saltártelas.
Copia de seguridad #
OAR no tiene un comando de copia de seguridad. La base de datos funciona en el
modo de escritura anticipada de SQLite, así que los cambios recientes pueden
estar en el archivo -wal que hay a su lado. Para hacer una copia de
seguridad:
- Detén el relay con
oar stop. - Copia juntos
copilot.y, si existen,db copilot.ydb- wal copilot..db- shm - Vuelve a iniciar el relay.
Para restaurar, detén el relay y vuelve a poner los archivos copiados tal como
estaban. No copies copilot. solo mientras el relay se ejecuta, y no mezcles
un archivo de base de datos con el archivo -wal de otra copia. Una copia de
seguridad contiene tus claves de API y tokens, consulta Dónde están los
secretos; mantenla tan privada como la carpeta de estado.
Registros #
| Archivo | Lo escribe | Rotación |
|---|---|---|
relay- |
el relay, siempre | A los 5 MB el archivo pasa a ser relay-, los anteriores pasan a . y ., y el más antiguo se descarta. Las líneas muestran tu token de acceso como [token]. OAR_ desactiva el archivo |
server., server- |
la shell de oar start u oar copilot, cuando inicia el relay en segundo plano |
ninguna |
worker-<session>. |
cada worker de sesión de Node (Claude, Claude Cloud, Cursor, Grok, Nuevo en 0.9.17 DeepSeek y el motor SDK de Copilot), que añade al final a través de los reinicios del worker | En cada inicio, un archivo de más de 10 MB pasa a ser worker-<session>. y reemplaza al anterior. Los archivos de conversaciones eliminadas se quedan |
ext- |
la extensión del motor de extensión de Copilot | ninguna |
El motor de extensión de Copilot no tiene registro de worker: es la propia terminal de la CLI de Copilot. Un relay que se ejecuta como servicio de systemd también escribe en el journal, consulta Arrancar el relay automáticamente.
Un checkout de git iniciado con npm start guarda sus registros en
server/. Uno iniciado con oar start u oar copilot los guarda en
~/. (Windows: %LOCALAPPDATA%\),
salvo que COPILOT_ indique otra carpeta.
Dónde están los secretos #
| Secreto | Dónde se guarda |
|---|---|
| El token de acceso | config., en texto plano. Trata el archivo, sus copias y la dirección de inicio de sesión (?token=) como una contraseña. Un navegador lo guarda como cookie de inicio de sesión durante 30 días. El archivo de bloqueo del relay solo guarda un hash de él |
El token de acceso anterior, entre oar setup y el reinicio |
data/, en texto plano, legible solo para ti; se elimina solo |
| Un token de túnel de Cloudflare (túnel gestionado) | config., clave cloudflared, o la variable de entorno COPILOT_ |
| Clave de API de OpenAI | La base de datos. El panel nunca la vuelve a mostrar y no se envía a los navegadores |
| Clave de API de Cursor | La base de datos, de la misma forma |
| Clave de API de DeepSeek | Nuevo en 0.9.17 La base de datos, de la misma forma (ajuste deepseek_). El relay solo la envía a la URL base de DeepSeek, y solo se la pasa a los workers de los chats de DeepSeek. Consulta DeepSeek |
| El token de un relay emparejado | La base de datos. Nunca se envía a navegadores ni a agentes. Un emparejamiento que usa el propio token de este relay no guarda ninguno |
| Tokens de los enlaces de conversaciones compartidas | La base de datos |
| Claves de web push y suscripciones de dispositivos | La base de datos |
| Instantáneas del heap | Nuevo en 0.9.19 data/: todo lo que había en la memoria del relay, incluidos el token de acceso y las claves de API. Nunca compartas una tal cual. Consulta El relay se quedó sin memoria |
| Inicio de sesión de Claude | La carpeta propia de la CLI de Claude en la máquina del relay: ~/., o la carpeta de CLAUDE_. El relay no guarda ninguno. Claude Cloud lee el mismo inicio de sesión y lo mantiene en memoria. Los chats de DeepSeek no lo usan |
| Inicio de sesión de Grok | La carpeta propia de la CLI de Grok: ~/. |
| Inicio de sesión de GitHub Copilot | El inicio de sesión propio de la CLI de Copilot en la máquina del relay |
Mientras un worker arranca bajo tmux, el relay escribe la clave de su
proveedor (la clave de OpenAI, Cursor o Nuevo en 0.9.17 DeepSeek, o un
CLAUDE_ del entorno del relay para un worker de Claude Cloud
o, Nuevo en 0.9.17, de Claude) en un archivo temporal de la carpeta temporal
del sistema, legible solo para ti. La shell del worker lo lee una vez y lo
elimina. Cada worker recibe solo la clave de su propio proveedor.
Retención #
El relay elimina esto por sí solo. No se elimina nada más salvo que elimines una conversación.
| Qué | Regla |
|---|---|
| Archivos subidos sin usar | Un archivo al que no hace referencia ningún mensaje ni borrador se elimina cuando tiene más de 24 horas. La comprobación se ejecuta al arrancar el relay y cada 6 horas. No hay ningún ajuste. Eliminar una conversación también elimina los archivos que solo usaba ella |
| Registros de subagents | Las entradas y resultados de herramientas de los subagents terminados se eliminan tras los días de Keep sub-agent tool output (Conservar la salida de herramientas de los subagents), en Settings → General (Ajustes → General): 7, 14, 30 o 90 días, o Always (Siempre). El valor predeterminado es 90. Los pensamientos, respuestas, notas y el resumen de una línea de cada llamada se quedan. La comprobación se ejecuta 30 segundos después del arranque, una vez al día y 5 segundos después de que cambies el ajuste. El archivo de la base de datos no se reduce; SQLite reutiliza el espacio liberado |
| Eventos del relay para vigilar sesiones | Los eventos que ya se han entregado a la conversación que vigila se eliminan tras 2 horas. Una suscripción que terminó se elimina tras 7 días. Detalles en Sesiones vigiladas. La limpieza se ejecuta cada 10 minutos |
| Eventos que un relay emparejado no ha recogido | Por suscripción se conservan los 500 más recientes, ninguno de más de 7 días, y una suscripción que nadie recogió durante 7 días termina. Las preguntas y los errores se descartan los últimos. Consulta Relays remotos |
relay- |
Rota a los 5 MB y conserva tres archivos anteriores, consulta Registros |
worker-<session>. |
Pasa a . al iniciar si supera los 10 MB. Nada elimina los registros de conversaciones eliminadas |
| Imágenes generadas | Nunca por antigüedad. Eliminar la conversación elimina sus imágenes |
| El archivo de bloqueo | Se elimina cuando el relay se detiene. Tras un fallo, el siguiente arranque lo reemplaza, consulta Un relay por carpeta de datos |
Eliminar una conversación elimina de la base de datos sus mensajes, entradas
de la queue, preguntas y registros de subagents, y la transcripción de Claude
y las imágenes generadas que le pertenecen. Nuevo en 0.9.17 En una conversación
de DeepSeek también elimina, en data/, la transcripción, las
carpetas de la sesión, lo que dejó su Claude Code detenido (su registro, el
entorno de hooks y la instantánea de shell) y la carpeta del proyecto cuando
ya no la usa ninguna otra sesión, y de la base de datos los últimos totales
que informaron sus sesiones. Lo que añadió a los totales y días de la tarjeta
de DeepSeek se queda. Lo que guarda cada proveedor por su cuenta está en la
siguiente sección.
Fuera de la carpeta de estado #
| Qué | Dónde |
|---|---|
| Transcripciones y carpetas de sesión de Claude | En projects dentro de la carpeta de configuración de Claude (~/., o CLAUDE_). Eliminar una conversación elimina su transcripción. Consulta Claude. Nuevo en 0.9.17 Los chats de DeepSeek guardan las suyas en la carpeta de datos: data/, arriba |
| Estado de sesión de GitHub Copilot | ~/., o la carpeta de COPILOT_ |
| Imágenes de los chats de OpenAI Image | En la carpeta de estado de sesión de Copilot, en <session>/ dentro de la conversación. Consulta OpenAI |
| Almacenes de agentes de Cursor | Nuevo en 0.9.14 Una carpeta por conversación, en cursor- dentro de la carpeta de datos del relay (~/., %APPDATA%\), o en la carpeta que indique CURSOR_. En la carpeta de estado en una instalación global; aparece aquí porque versiones anteriores los guardaban en otro sitio. Consulta Cursor |
| La CLI de Grok y su inicio de sesión | ~/. |
| El envoltorio de la extensión de Copilot | ~/., escrito por oar copilot u oar copilot --install-. Nuevo en 0.9.15 oar uninstall lo quita cuando es el que OAR escribió para esta instalación |
| Claude Cloud | Nada en disco. Una sesión en la nube se ejecuta en Anthropic; sus resultados vuelven como ramas subidas |
| Archivos temporales | El archivo de corta duración con la clave del proveedor mencionado arriba, en la carpeta temporal del sistema |
Antes de 0.9.14, los almacenes de Cursor estaban de forma predeterminada en
server/ dentro de la carpeta del paquete, que una
actualización reemplaza, así que una conversación podía perder su agente
guardado y recibir uno nuevo (consulta
Cursor). Una conversación cuyo almacén
sigue en ese sitio antiguo lo sigue usando allí, y una con un almacén en ambos
sitios usa el que se modificó por última vez; no se mueve ni se elimina nada.
El trabajo de tus agentes, los archivos de tus carpetas de proyecto, está completamente fuera del almacenamiento de OAR.
Un relay por carpeta de datos #
El relay crea relay- en la carpeta de datos cuando arranca y lo
elimina cuando se detiene. El archivo contiene el número de proceso del relay,
un hash de su token y su hora de arranque.
Si un segundo relay arranca sobre la misma carpeta de datos mientras el primero se ejecuta, el segundo imprime una línea y termina, Nuevo en 0.9.14 con el código 78 (antes, código 1), que el servicio de Linux no reintenta:
Relay already running (pid=4242, startedAt=2026-01-05T09:12:40.000Z; lock /home/dev/.oar/data/relay-server.lock). It is held by relay process 4242: oar stop, or end process 4242.
Relay appears to be owned by another live process en lugar de Relay already running significa que el relay en ejecución tiene otro token. Cuando no se
puede determinar que el proceso que lo retiene sea un relay, la indicación dice
If no relay is running, end process 4242 or delete the lock. oar start imprime la misma indicación después de The relay did not come up. El primer relay no se toca. Los mensajes quedan pendientes cuando el
relay que esperabas no es el que se ejecuta; oar doctor muestra la
configuración y la base de datos en uso.
Tras un fallo o un corte de corriente, el archivo de bloqueo se queda.
Nuevo en 0.9.14 Un bloqueo de antes del último arranque del sistema, o cuyo
número de proceso pertenece ahora a un proceso iniciado después de él, está
obsoleto: el siguiente arranque lo aparta, registra
Recovered stale singleton lock y asume el bloqueo. Esto ya no depende del
reloj, así que un salto del reloj no hace que un relay en ejecución parezca
desaparecido, y dos arranques que recuperan el mismo bloqueo no se ejecutan
ambos. Un bloqueo que no se puede leer (uno vacío que dejó un corte de
corriente) se vuelve a leer y cuenta como retenido salvo que su hora difiera en
más de 10 segundos. oar start ya no elimina un bloqueo escrito por esta
versión; sigue eliminando uno de una versión anterior cuando nada responde en
el puerto del relay.
Dos relays pueden ejecutarse a la vez cuando tienen carpetas de datos y
puertos separados. Consulta El comando oar
para saber cómo encuentra oar el relay, y Reinicios y
reanudación para saber qué conserva un
reinicio.