Por que trazer seu próprio modelo
O Resume Matcher não vem com nenhum modelo de IA. Você conecta um por conta própria: um provedor na nuvem do qual já tem uma chave, um modelo gratuito rodando no seu próprio hardware ou um plano do ChatGPT ou do Claude que você já paga. Você escolhe o provedor e o modelo, e com eles o custo e o destino do texto do seu currículo.
Provedores suportados
| Provedor | Tipo | Modelo padrão em Configurações |
|---|---|---|
| OpenAI | Nuvem | gpt-5-nano-2025-08-07 |
| Anthropic (Claude) | Nuvem | claude-haiku-4-5-20251001 |
| Google Gemini | Nuvem | gemini-3-flash-preview |
| DeepSeek | Nuvem | deepseek-chat |
| OpenRouter | Nuvem | deepseek/deepseek-chat |
| Groq | Nuvem | llama-3.3-70b-versatile |
| Azure AI Foundry | Nuvem | mistral-large-latest |
| Ollama | Local | gemma3:4b |
| Servidor compatível com a API da OpenAI (llama.cpp, vLLM, LM Studio) | Local | Placeholder custom-model em http://localhost:8080/v1; troque os dois pelos valores do seu servidor |
| Plano do ChatGPT (Sign in with ChatGPT) | Seu plano do ChatGPT | Escolhido entre os modelos da sua conta depois que você entra |
| Plano do Claude (via Claude Code) | Seu plano do Claude | O modelo padrão do próprio Claude Code |
O padrão é um ponto de partida. O campo de modelo é texto livre, então você pode digitar qualquer nome de modelo que o seu provedor ofereça. As duas opções de plano não precisam de chave de API e têm ressalvas; veja a Opção C.
Opção A: a página Configurações
- Abra
http://localhost:3000/settings. - Escolha seu provedor.
- Cole sua chave de API. Para Ollama ou um servidor compatível com a API da OpenAI, informe a URL do servidor no lugar da chave. Para um plano do ChatGPT ou do Claude, veja a Opção C.
- Mude o nome do modelo se quiser outro.
- Para passar por um proxy ou endpoint agregador, preencha URL base. Deixe em branco para usar o padrão do provedor.
- Clique em Salvar e depois em Testar Conexão.

Testar Conexão envia a única palavra “Hi” ao seu provedor e informa se ele respondeu. O painel Status do sistema, no topo da página, mostra se o LLM está funcionando e se o banco de dados está conectado. As configurações que você salva aqui têm precedência sobre as variáveis de ambiente.
Cada provedor guarda a própria chave salva, então trocar de provedor não apaga a do outro.
Esforço de raciocínio. Essa configuração só afeta modelos com capacidade de raciocínio (a família gpt-5, Claude 3.7+, DeepSeek R1, OpenAI o1/o3). Auto não envia nada e é a opção mais compatível.
Opção B: variáveis de ambiente
Quatro variáveis configuram o backend:
| Variável | O que define |
|---|---|
LLM_PROVIDER |
Um entre openai, anthropic, gemini, deepseek, openrouter, groq, azure_foundry, ollama, openai_compatible, chatgpt, claude_cli |
LLM_MODEL |
O nome do modelo |
LLM_API_KEY |
A chave do seu provedor |
LLM_API_BASE |
URL do servidor, para Ollama e servidores compatíveis com a API da OpenAI |
Para uma instalação local, coloque-as em apps/backend/.env. Para Docker, passe-as como variáveis de ambiente do contêiner. A imagem Docker também lê Docker secrets: acrescente _FILE a qualquer uma das quatro variáveis para carregar o valor de um arquivo, por exemplo LLM_API_KEY_FILE=/run/secrets/llm_api_key.
Anthropic, instalação local (apps/backend/.env):
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key
OpenAI, instalação local (apps/backend/.env):
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key
Ollama no host, Resume Matcher no 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
Opção C: seu plano do ChatGPT ou do Claude
Se você já paga pelo ChatGPT ou pelo Claude, o Resume Matcher pode usar esse plano em vez de uma chave de API. As duas opções foram criadas pela comunidade, e nenhuma delas é um acesso garantido: para ter acesso garantido, use uma chave de API da OpenAI ou da Anthropic.
Plano do ChatGPT

Esta opção usa o Sign in with ChatGPT oficial da OpenAI para apps de código aberto. Funciona com ChatGPT Plus e Pro.
- Inicie o Resume Matcher e abra Configurações em um navegador na mesma máquina, em
http://localhost:3000. - Escolha Plano ChatGPT e clique em Continuar com o ChatGPT.
- Entre na OpenAI e permita que o Resume Matcher use o seu plano.
- De volta a Configurações, escolha um dos modelos da sua conta e clique em Salvar.
Antes de depender dele:
- É uma prévia. O Sign in with ChatGPT para apps de código aberto é uma prévia da OpenAI, então pode mudar.
- As requisições vão direto para a OpenAI. Elas saem da sua máquina diretamente para a API da OpenAI, e os tokens de login ficam guardados criptografados na sua máquina.
- O uso conta para os limites do seu plano do ChatGPT. No Plus, o limite de cinco horas é compartilhado com seus outros apps que usam o seu plano. O Pro não tem limite de cinco horas.
- Entre na mesma máquina. A OpenAI só devolve o navegador para
127.0.0.1, então o login precisa acontecer em um navegador na máquina que roda o Resume Matcher. Isso funciona com a configuração padrão do Docker, aberta emhttp://localhost:3000, mas não a partir de outro computador nem por um domínio de proxy reverso.
Desconectar encerra a sessão e apaga os tokens; Gerenciar uso abre as configurações de uso do seu ChatGPT. Com variáveis de ambiente, defina LLM_PROVIDER=chatgpt e LLM_MODEL com um modelo da sua conta; o login continua sendo feito em Configurações.
Plano do Claude (via Claude Code)

Esta opção executa a sua própria CLI do Claude Code, instalada na mesma máquina, na qual você mesmo faz login:
claude auth login
Depois, escolha Plano Claude em Configurações e clique em Salvar. Com variáveis de ambiente, defina LLM_PROVIDER=claude_cli; LLM_MODEL não é usado.
Antes de depender dele:
- Não tem suporte oficial. A Anthropic não oferece suporte oficial a apps de terceiros que usam as assinaturas Claude Pro ou Max, então isso pode deixar de funcionar se a política da Anthropic mudar.
- O Resume Matcher nunca vê suas credenciais do Claude. Ele executa a CLI na qual você fez login e não guarda nada da sua conta do Claude.
- Seus prompts continuam indo para a Anthropic. O Claude Code os envia pela sua conta, usando o próprio modelo padrão.
- O uso conta para os limites do seu plano do Claude, e a Anthropic pode descontá-lo dos seus créditos de uso em vez disso.
- Precisa de uma instalação local. A CLI do Claude Code não está na imagem Docker, então esta opção não funciona no Docker.
O Resume Matcher se mantém com doações.
Mais de 200 mil pessoas em busca de emprego já usaram, de graça, sem anúncios nem paywall. Se ele te poupou tempo ou ajudou você a conseguir uma entrevista, patrocinar ou me pagar um café mantém tudo assim.
Modelos locais
Ollama. Instale a partir de ollama.com, baixe um modelo e depois escolha Ollama em Configurações:
ollama pull gemma3:4b
A URL padrão é http://localhost:11434. De dentro do Docker, use http://host.docker.internal:11434. No Linux, use o endereço IP do host ou inicie o contêiner com --network=host.
Servidores compatíveis com a API da OpenAI. llama.cpp, vLLM, LM Studio e qualquer outro servidor que fale a API Chat Completions da OpenAI funcionam pelo provedor openai_compatible. Defina LLM_API_BASE com a URL do servidor e LLM_MODEL com o modelo que o servidor está servindo.
Modelos lentos. Cada requisição de IA roda com um prazo único, REQUEST_TIMEOUT_SECONDS (padrão 240, intervalo de 30 a 1800). Um modelo grande em hardware modesto pode estourar esse limite. Aumente REQUEST_TIMEOUT_SECONDS no ambiente do backend e NEXT_PUBLIC_REQUEST_TIMEOUT_MS no ambiente do frontend (veja apps/frontend/.env.sample). O frontend lê esse valor no build, então a imagem Docker pré-compilada fica em 240 segundos. Para aumentar o valor nela, gere a imagem você mesmo com NEXT_PUBLIC_REQUEST_TIMEOUT_MS definido.
Chaves e servidores locais. O backend nunca envia LLM_API_KEY para o Ollama ou para um servidor compatível com a API da OpenAI, então uma chave paga de nuvem no seu .env não vaza para um servidor local.
Modelos pequenos. As notas de design do projeto avisam que modelos menores têm dificuldade com o formato estruturado de edição que a etapa de personalização usa.
Para o passo a passo completo com Docker, veja Docker + Ollama.
Onde sua chave fica guardada
As chaves que você salva em Configurações vão para o banco SQLite local, criptografadas com Fernet. A chave de criptografia fica em .secret_key na pasta de dados (apps/backend/data/ em uma instalação local, o volume do Docker nos demais casos), criada com permissões 0600, de modo que só a sua conta de usuário consegue lê-la. O backend remove as chaves antes de gravar o config.json na mesma pasta, então o arquivo de configurações nunca contém uma.
Para remover todas as chaves salvas, use Limpar chaves de API na zona de perigo da página Configurações. Não dá para desfazer.
Os tokens de login do plano do ChatGPT são criptografados com a mesma chave, em chatgpt_credentials.enc na pasta de dados. O plano do Claude não guarda nada: suas credenciais do Claude ficam com o Claude Code.
LOG_LLM=DEBUG grava as chaves no log em texto puro. Não ative em uma máquina compartilhada.
O que é enviado ao seu provedor
O app não envia nada aos autores do Resume Matcher e não contém telemetria. O texto do seu currículo, incluindo nome e dados de contato, e a descrição da vaga vão para o provedor que você escolheu e para mais ninguém: a OpenAI, no plano do ChatGPT, e a Anthropic, pelo Claude Code, no plano do Claude. Nenhum dado é mascarado ou removido antes do envio. Com um modelo local, nada sai da sua máquina.
| Recurso | Enviado ao provedor |
|---|---|
| Envio do currículo (parsing) | Texto completo do currículo, incluindo nome, e-mail, telefone e links |
| Análise da descrição da vaga, título do currículo | A descrição da vaga |
| Personalização (plano de habilidades, edições em diff) | Descrição da vaga mais o JSON completo do currículo |
| Passagem de palavras-chave após a personalização | JSON do currículo personalizado e do principal mais os primeiros 2.000 caracteres da descrição da vaga |
| Carta de apresentação, mensagem de contato | JSON completo do currículo mais a descrição da vaga |
| Preparação para entrevista | JSON do currículo (até 30.000 caracteres) mais a descrição da vaga (até 12.000 caracteres) |
| Pontuação de bullets | Texto do bullet, descrição da vaga e palavras-chave extraídas |
| Aprimoramento, regenerar, Assistente de currículo | O currículo ou item mais suas respostas e instruções |
| Testar Conexão | A palavra “Hi” |
Suas outras chaves de API, o arquivo do banco, o quadro de acompanhamento, as configurações e os PDFs ficam locais. A única outra chamada de rede é a biblioteca de IA (LiteLLM) baixando uma lista pública de preços de modelos na inicialização; ela não carrega nenhum dado seu e, offline, usa uma cópia embutida.
Custo
O Resume Matcher é gratuito e open source. Um provedor na nuvem cobra da sua própria conta, nos preços dele, por cada requisição que o app faz. O app não acompanha esse gasto, então confira o painel do seu provedor. Com o plano do ChatGPT ou do Claude, as requisições contam para os limites do seu plano. Um modelo local não custa nada por requisição.
Solução de problemas
Testar Conexão falha
Confira a chave de API, ou a URL do servidor no caso do Ollama e de servidores compatíveis com a API da OpenAI. Salve e teste de novo.
“CLI do Claude Code não encontrada”
Instale o Claude Code na máquina que roda o backend e execute claude auth login. Ele não está disponível dentro da imagem Docker.
“Você não entrou com o ChatGPT” ou “não está disponível para esta conta”
Escolha Plano ChatGPT em Configurações e clique em Continuar com o ChatGPT em um navegador na mesma máquina. A opção de plano precisa do ChatGPT Plus ou Pro; caso contrário, use uma chave de API da OpenAI.
O Docker não alcança o Ollama
Use http://host.docker.internal:11434 como URL do Ollama, não localhost. No Linux, use o endereço IP do host ou rode o contêiner com --network=host.
Timeouts com um modelo local
Aumente REQUEST_TIMEOUT_SECONDS (até 1800) no backend e NEXT_PUBLIC_REQUEST_TIMEOUT_MS no frontend. Com a imagem Docker pré-compilada, o valor do frontend fica fixo no build; veja Modelos lentos acima.
Uma mudança no .env não tem efeito
As configurações salvas na interface têm precedência sobre as variáveis de ambiente. Abra Configurações e mude o valor lá.
Próximos passos
- O que é o Resume Matcher? para a visão geral
- Recursos para tudo que a IA consegue gerar depois de conectada