Documentação

Traga sua própria chave de IA

Conecte Claude, ChatGPT, Gemini, DeepSeek, Groq ou Ollama local ao Resume Matcher com sua chave de API, ou use seu plano do ChatGPT ou do Claude.

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

  1. Abra http://localhost:3000/settings.
  2. Escolha seu provedor.
  3. 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.
  4. Mude o nome do modelo se quiser outro.
  5. Para passar por um proxy ou endpoint agregador, preencha URL base. Deixe em branco para usar o padrão do provedor.
  6. Clique em Salvar e depois em Testar Conexão.

Página Configurações do Resume Matcher, com a interface em inglês: um banner de patrocínio e do Discord, indicadores de status do sistema, os onze botões de provedor com OpenAI selecionado (Claude Plan e ChatGPT Plan entre eles) e os campos de modelo, chave de API, URL base e esforço de raciocínio acima dos botões Save e Test Connection

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

Plano ChatGPT selecionado em Configurações, com a interface em inglês: Not connected, um botão Continue with ChatGPT, o campo de modelo e um aviso Preview sobre o Sign in with ChatGPT, os limites do plano e o fato de ser um recurso criado pela comunidade, acima de um botão Save desativado

Esta opção usa o Sign in with ChatGPT oficial da OpenAI para apps de código aberto. Funciona com ChatGPT Plus e Pro.

  1. Inicie o Resume Matcher e abra Configurações em um navegador na mesma máquina, em http://localhost:3000.
  2. Escolha Plano ChatGPT e clique em Continuar com o ChatGPT.
  3. Entre na OpenAI e permita que o Resume Matcher use o seu plano.
  4. 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 em http://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)

Plano Claude selecionado em Configurações, com a interface em inglês: uma nota de que ele executa a CLI do Claude Code conectada nesta máquina e um aviso Not officially supported sobre a política da Anthropic, as credenciais e os limites de uso

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