Por qué usar tu propio modelo
Resume Matcher no incluye ningún modelo de IA. Lo conectas tú: un proveedor en la nube del que ya tienes una clave, un modelo gratuito que corre en tu propio hardware o un plan de ChatGPT o de Claude que ya pagas. Tú eliges el proveedor y el modelo, y con ellos el costo y adónde va el texto de tu currículum.
Proveedores compatibles
| Proveedor | Tipo | Modelo por defecto en Configuración |
|---|---|---|
| OpenAI | Nube | gpt-5-nano-2025-08-07 |
| Anthropic (Claude) | Nube | claude-haiku-4-5-20251001 |
| Google Gemini | Nube | gemini-3-flash-preview |
| DeepSeek | Nube | deepseek-chat |
| OpenRouter | Nube | deepseek/deepseek-chat |
| Groq | Nube | llama-3.3-70b-versatile |
| Azure AI Foundry | Nube | mistral-large-latest |
| Ollama | Local | gemma3:4b |
| Servidor compatible con OpenAI (llama.cpp, vLLM, LM Studio) | Local | Marcador custom-model en http://localhost:8080/v1; sustituye ambos por los valores de tu servidor |
| Plan de ChatGPT (Sign in with ChatGPT) | Tu plan de ChatGPT | Se elige entre los modelos de tu cuenta después de iniciar sesión |
| Plan de Claude (vía Claude Code) | Tu plan de Claude | El modelo predeterminado de Claude Code |
El valor por defecto es un punto de partida. El campo del modelo es texto libre, así que puedes escribir cualquier nombre de modelo que ofrezca tu proveedor. Las dos opciones de plan no necesitan clave de API y tienen sus advertencias; consulta la Opción C.
Opción A: la página de Configuración
- Abre
http://localhost:3000/settings. - Elige tu proveedor.
- Pega tu clave de API. Para Ollama o un servidor compatible con OpenAI, escribe en su lugar la URL del servidor. Para un plan de ChatGPT o de Claude, consulta la Opción C.
- Cambia el nombre del modelo si quieres otro.
- Para pasar por un proxy o un endpoint agregador, completa URL base. Déjalo en blanco para usar el valor por defecto del proveedor.
- Haz clic en Guardar y después en Probar conexión.

Probar conexión envía la palabra “Hi” a tu proveedor e informa de si respondió. El panel Estado del sistema, en la parte superior de la página, muestra si el LLM funciona bien y si la base de datos está conectada. La configuración que guardas aquí tiene prioridad sobre las variables de entorno.
Cada proveedor conserva su propia clave guardada, así que cambiar de proveedor no borra la del otro.
Esfuerzo de razonamiento. Este ajuste solo afecta a los modelos con capacidad de razonamiento (la familia gpt-5, Claude 3.7+, DeepSeek R1, OpenAI o1/o3). Auto no envía nada y es la opción más compatible.
Opción B: variables de entorno
Cuatro variables configuran el backend:
| Variable | Qué define |
|---|---|
LLM_PROVIDER |
Uno de openai, anthropic, gemini, deepseek, openrouter, groq, azure_foundry, ollama, openai_compatible, chatgpt, claude_cli |
LLM_MODEL |
El nombre del modelo |
LLM_API_KEY |
La clave de tu proveedor |
LLM_API_BASE |
La URL del servidor, para Ollama y servidores compatibles con OpenAI |
En una instalación local, ponlas en apps/backend/.env. En Docker, pásalas como entorno del contenedor. La imagen de Docker también lee secretos de Docker: añade _FILE a cualquiera de las cuatro variables para cargar su valor desde un archivo, por ejemplo LLM_API_KEY_FILE=/run/secrets/llm_api_key.
Anthropic, instalación local (apps/backend/.env):
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key
OpenAI, instalación local (apps/backend/.env):
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key
Ollama en el host, Resume Matcher en Docker:
docker run --name resume-matcher -p 3000:3000 \
-v resume-data:/app/backend/data \
-e LLM_PROVIDER=ollama \
-e LLM_MODEL=gemma3:4b \
-e LLM_API_BASE=http://host.docker.internal:11434 \
ghcr.io/srbhr/resume-matcher:latest
Opción C: tu plan de ChatGPT o de Claude
Si ya pagas ChatGPT o Claude, Resume Matcher puede usar ese plan en lugar de una clave de API. Ambas opciones las creó la comunidad, y ninguna es una vía de acceso garantizada: para un acceso garantizado, usa una clave de API de OpenAI o de Anthropic.
Plan de ChatGPT

Usa Sign in with ChatGPT, el inicio de sesión oficial de OpenAI para apps de código abierto. Funciona con ChatGPT Plus y Pro.
- Arranca Resume Matcher y abre Configuración en un navegador del mismo equipo, en
http://localhost:3000. - Elige Plan ChatGPT y haz clic en Continuar con ChatGPT.
- Inicia sesión en OpenAI y permite que Resume Matcher use tu plan.
- De vuelta en Configuración, elige uno de los modelos de tu cuenta y haz clic en Guardar.
Antes de depender de esta opción:
- Es una versión preliminar. Sign in with ChatGPT para apps de código abierto es una versión preliminar de OpenAI, así que puede cambiar.
- Las peticiones van directo a OpenAI. Salen de tu equipo directamente hacia la API de OpenAI, y los tokens de inicio de sesión se guardan cifrados en tu equipo.
- Cuenta para los límites de tu plan de ChatGPT. En Plus, el límite de cinco horas se comparte con tus otras apps que usan tu plan. Pro no tiene límite de cinco horas.
- Inicia sesión en el mismo equipo. OpenAI solo devuelve el navegador a
127.0.0.1, así que el inicio de sesión tiene que hacerse en un navegador del equipo donde se ejecuta Resume Matcher. Funciona con la configuración predeterminada de Docker, abierta enhttp://localhost:3000, pero no desde otro equipo ni a través de un dominio con proxy inverso.
Desconectar cierra la sesión y borra los tokens; Gestionar uso abre la configuración de uso de ChatGPT. Con variables de entorno, define LLM_PROVIDER=chatgpt y pon en LLM_MODEL un modelo de tu cuenta; el inicio de sesión se sigue haciendo desde Configuración.
Plan de Claude (vía Claude Code)

Ejecuta tu propia CLI de Claude Code, instalada en el mismo equipo, en la que inicias sesión tú mismo:
claude auth login
Después elige Plan Claude en Configuración y haz clic en Guardar. Con variables de entorno, define LLM_PROVIDER=claude_cli; LLM_MODEL no se usa.
Antes de depender de esta opción:
- No tiene soporte oficial. Anthropic no admite oficialmente que aplicaciones de terceros usen las suscripciones Claude Pro o Max, así que esto puede dejar de funcionar si cambia la política de Anthropic.
- Resume Matcher nunca ve tus credenciales de Claude. Ejecuta la CLI en la que iniciaste sesión y no guarda nada de tu cuenta de Claude.
- Tus prompts siguen yendo a Anthropic. Claude Code los envía a través de tu cuenta, con su propio modelo predeterminado.
- Cuenta para los límites de uso de tu plan de Claude, y Anthropic puede descontarlo de tus créditos de uso en su lugar.
- Necesita una instalación local. La CLI de Claude Code no está en la imagen de Docker, así que esta opción no funciona en Docker.
Resume Matcher se sostiene con donaciones.
Más de 200.000 personas que buscan empleo lo han usado, gratis, sin anuncios ni muro de pago. Si te ahorró tiempo o te ayudó a conseguir una entrevista, patrocinar o invitarme un café lo mantiene así.
Modelos locales
Ollama. Instálalo desde ollama.com, descarga un modelo y después elige Ollama en Configuración:
ollama pull gemma3:4b
La URL por defecto es http://localhost:11434. Desde dentro de Docker, usa http://host.docker.internal:11434. En Linux, usa la dirección IP del host o arranca el contenedor con --network=host.
Servidores compatibles con OpenAI. llama.cpp, vLLM, LM Studio y cualquier otro servidor que hable la API Chat Completions de OpenAI funcionan a través del proveedor openai_compatible. Pon en LLM_API_BASE la URL del servidor y en LLM_MODEL el modelo que el servidor está sirviendo.
Modelos lentos. Cada petición de IA corre bajo un único plazo, REQUEST_TIMEOUT_SECONDS (por defecto 240, rango de 30 a 1800). Un modelo grande en hardware modesto puede excederlo. Sube REQUEST_TIMEOUT_SECONDS en el entorno del backend y NEXT_PUBLIC_REQUEST_TIMEOUT_MS en el entorno del frontend (consulta apps/frontend/.env.sample). El frontend lee su valor al compilarse, así que la imagen de Docker precompilada se queda en 240 segundos. Para subirlo ahí, compila tú mismo la imagen con NEXT_PUBLIC_REQUEST_TIMEOUT_MS definido.
Claves y servidores locales. El backend nunca envía LLM_API_KEY a Ollama ni a un servidor compatible con OpenAI, así que una clave de pago de la nube en tu .env no puede filtrarse a uno local.
Modelos pequeños. Las notas de diseño del proyecto advierten de que los modelos más pequeños tienen problemas con el formato estructurado de edición que usa el paso de adaptación.
Para la guía completa con Docker, consulta Docker + Ollama.
Dónde se guarda tu clave
Las claves que guardas en Configuración van a la base de datos SQLite local, cifradas con Fernet. La clave de cifrado vive en .secret_key dentro de la carpeta de datos (apps/backend/data/ en una instalación local, el volumen de Docker en el otro caso), creada con permisos 0600 para que solo tu cuenta de usuario pueda leerla. El backend elimina las claves antes de escribir config.json en esa misma carpeta, así que el archivo de configuración nunca contiene ninguna.
Para borrar todas las claves guardadas, usa Borrar claves de API en la zona de peligro de la página de Configuración. No se puede deshacer.
Los tokens de inicio de sesión del plan de ChatGPT se cifran con la misma clave, en chatgpt_credentials.enc dentro de la carpeta de datos. El plan de Claude no guarda nada: tus credenciales de Claude se quedan en Claude Code.
LOG_LLM=DEBUG escribe las claves en el log en texto plano. No lo actives en un equipo compartido.
Qué se envía a tu proveedor
La aplicación no envía nada a los autores de Resume Matcher y no contiene telemetría. El texto de tu currículum, incluidos tu nombre y datos de contacto, y la descripción del puesto van al proveedor que elegiste y a nadie más: a OpenAI con el plan de ChatGPT, y a Anthropic, a través de Claude Code, con el plan de Claude. No hay ningún paso de anonimización antes del envío. Con un modelo local, nada sale de tu máquina.
| Función | Se envía al proveedor |
|---|---|
| Subida del currículum (análisis) | El texto completo del currículum, incluidos nombre, correo, teléfono y enlaces |
| Análisis de la descripción del puesto, título del currículum | La descripción del puesto |
| Adaptación (plan de habilidades, cambios del diff) | La descripción del puesto más el JSON completo del currículum |
| Pasada de palabras clave tras la adaptación | El JSON del currículum adaptado y del maestro más los primeros 2.000 caracteres de la descripción del puesto |
| Carta de presentación, mensaje de contacto | El JSON completo del currículum más la descripción del puesto |
| Preparación para la entrevista | El JSON del currículum (hasta 30.000 caracteres) más la descripción del puesto (hasta 12.000 caracteres) |
| Puntuación de viñetas | El texto de la viñeta, la descripción del puesto y las palabras clave extraídas |
| Enriquecimiento, regeneración, Asistente de currículum | El currículum o el elemento más tus respuestas e instrucciones |
| Probar conexión | La palabra “Hi” |
Tus otras claves de API, el archivo de base de datos, el tablero de seguimiento, la configuración y los PDF se quedan en local. La única otra llamada de red es la librería de IA (LiteLLM) descargando una lista pública de precios de modelos al arrancar; no lleva ninguno de tus datos y, sin conexión, usa una copia incluida.
Costo
Resume Matcher es gratuito y de código abierto. Un proveedor en la nube factura a tu propia cuenta, a sus precios, cada petición que hace la aplicación. La aplicación no registra ese gasto, así que revisa el panel de tu proveedor. Con el plan de ChatGPT o de Claude, en cambio, las peticiones cuentan para los límites de tu plan. Un modelo local no cuesta nada por petición.
Solución de problemas
Probar conexión falla
Revisa la clave de API, o la URL del servidor en el caso de Ollama y los servidores compatibles con OpenAI. Guarda y vuelve a probar.
“No se encontró la CLI de Claude Code”
Instala Claude Code en el equipo donde se ejecuta el backend y ejecuta claude auth login. No está disponible dentro de la imagen de Docker.
“No has iniciado sesión con ChatGPT” o “no está disponible para esta cuenta”
Elige Plan ChatGPT en Configuración y haz clic en Continuar con ChatGPT en un navegador del mismo equipo. La opción de plan requiere ChatGPT Plus o Pro; si no tienes ninguno, usa una clave de API de OpenAI.
Docker no llega a Ollama
Usa http://host.docker.internal:11434 como URL de Ollama, no localhost. En Linux, usa la dirección IP del host o ejecuta el contenedor con --network=host.
Tiempos de espera agotados con un modelo local
Sube REQUEST_TIMEOUT_SECONDS (hasta 1800) en el backend y NEXT_PUBLIC_REQUEST_TIMEOUT_MS en el frontend. Con la imagen de Docker precompilada, el valor del frontend queda fijado al compilarla; consulta Modelos lentos más arriba.
Un cambio en .env no tiene efecto
La configuración guardada en la interfaz tiene prioridad sobre las variables de entorno. Abre Configuración y cambia el valor ahí.
Siguientes pasos
- ¿Qué es Resume Matcher? para una visión general
- Funcionalidades para todo lo que la IA puede generar una vez conectada