Documentación

Usa tu propia clave de IA

Conecta Claude, ChatGPT, Gemini, DeepSeek, Groq u Ollama en local a Resume Matcher con tu clave de API, o usa tu plan de ChatGPT o de Claude.

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

  1. Abre http://localhost:3000/settings.
  2. Elige tu proveedor.
  3. 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.
  4. Cambia el nombre del modelo si quieres otro.
  5. Para pasar por un proxy o un endpoint agregador, completa URL base. Déjalo en blanco para usar el valor por defecto del proveedor.
  6. Haz clic en Guardar y después en Probar conexión.

Página de Configuración de Resume Matcher, con la interfaz en inglés: un banner de patrocinio y Discord, indicadores de estado del sistema, los once botones de proveedor con OpenAI seleccionado (entre ellos Claude Plan y ChatGPT Plan) y los campos de modelo, clave de API, URL base y esfuerzo de razonamiento sobre los botones Save y Test Connection

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

ChatGPT Plan seleccionado en Configuración, con la interfaz en inglés: Not connected, un botón Continue with ChatGPT, el campo del modelo y un aviso Preview sobre Sign in with ChatGPT, los límites del plan y su origen comunitario, encima de un botón Save desactivado

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.

  1. Arranca Resume Matcher y abre Configuración en un navegador del mismo equipo, en http://localhost:3000.
  2. Elige Plan ChatGPT y haz clic en Continuar con ChatGPT.
  3. Inicia sesión en OpenAI y permite que Resume Matcher use tu plan.
  4. 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 en http://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)

Claude Plan seleccionado en Configuración, con la interfaz en inglés: una nota de que ejecuta la CLI de Claude Code con la sesión iniciada en este equipo, y un aviso Not officially supported sobre la política de Anthropic, las credenciales y los límites de uso

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