Dokumentation

Eigenen KI-Schlüssel verwenden

Verbinde Claude, ChatGPT, Gemini, DeepSeek, Groq oder ein lokales Ollama mit deinem eigenen API-Schlüssel mit Resume Matcher, oder nutze dein ChatGPT- oder Claude-Abo.

Warum ein eigenes Modell

Resume Matcher bringt kein KI-Modell mit. Du verbindest selbst eines: einen Cloud-Anbieter, für den du schon einen Schlüssel hast, ein kostenloses Modell auf deiner eigenen Hardware oder ein ChatGPT- oder Claude-Abo, das du ohnehin bezahlst. Du wählst Anbieter und Modell und damit auch die Kosten und wohin dein Lebenslauftext geht.

Unterstützte Anbieter

Anbieter Art Standardmodell in den Einstellungen
OpenAI Cloud gpt-5-nano-2025-08-07
Anthropic (Claude) Cloud claude-haiku-4-5-20251001
Google Gemini Cloud gemini-3-flash-preview
DeepSeek Cloud deepseek-chat
OpenRouter Cloud deepseek/deepseek-chat
Groq Cloud llama-3.3-70b-versatile
Azure AI Foundry Cloud mistral-large-latest
Ollama Lokal gemma3:4b
OpenAI-kompatibler Server (llama.cpp, vLLM, LM Studio) Lokal Platzhalter custom-model unter http://localhost:8080/v1; ersetze beides durch die Werte deines Servers
ChatGPT-Abo (Sign in with ChatGPT) Dein ChatGPT-Abo Nach der Anmeldung aus den Modellen deines Kontos gewählt
Claude-Abo (über Claude Code) Dein Claude-Abo Das Standardmodell von Claude Code

Der Standard ist nur ein Ausgangspunkt. Das Modellfeld ist Freitext, du kannst also jeden Modellnamen eintragen, den dein Anbieter anbietet. Die beiden Abo-Optionen brauchen keinen API-Schlüssel und haben ein paar Einschränkungen; siehe Option C.

Die App-Oberfläche gibt es nicht auf Deutsch, deshalb stehen Schaltflächen und Felder hier mit ihrem englischen Namen, zum Beispiel Save und Test Connection.

Option A: Die Einstellungsseite

  1. Öffne http://localhost:3000/settings.
  2. Wähle deinen Anbieter.
  3. Füge deinen API-Schlüssel ein. Bei Ollama oder einem OpenAI-kompatiblen Server trägst du stattdessen die Server-URL ein. Für ein ChatGPT- oder Claude-Abo siehe Option C.
  4. Ändere den Modellnamen, wenn du ein anderes Modell willst.
  5. Wenn du über einen Proxy oder einen Aggregator-Endpunkt gehen willst, fülle Base URL aus. Lass das Feld leer, um den Standard des Anbieters zu nutzen.
  6. Klicke auf Save und dann auf Test Connection.

Einstellungsseite von Resume Matcher: ein Sponsoren- und Discord-Banner, Kacheln zum Systemstatus, die elf Anbieter-Schaltflächen mit ausgewähltem OpenAI (darunter Claude Plan und ChatGPT Plan) sowie die Felder für Modell, API-Schlüssel, Base URL und Reasoning Effort über den Schaltflächen Save und Test Connection

Test Connection schickt das einzelne Wort „Hi“ an deinen Anbieter und meldet, ob eine Antwort kam. Das Feld System Status oben auf der Seite zeigt, ob das LLM funktioniert und die Datenbank verbunden ist. Was du hier speicherst, hat Vorrang vor Umgebungsvariablen.

Jeder Anbieter behält seinen eigenen gespeicherten Schlüssel, ein Wechsel des Anbieters löscht den anderen also nicht.

Reasoning Effort. Diese Einstellung wirkt nur bei Modellen, die „nachdenken“ können (die gpt-5-Familie, Claude 3.7+, DeepSeek R1, OpenAI o1/o3). Auto schickt nichts mit und ist die verträglichste Wahl.

Option B: Umgebungsvariablen

Vier Variablen konfigurieren das Backend:

Variable Was sie festlegt
LLM_PROVIDER Einer von openai, anthropic, gemini, deepseek, openrouter, groq, azure_foundry, ollama, openai_compatible, chatgpt, claude_cli
LLM_MODEL Der Modellname
LLM_API_KEY Dein Anbieterschlüssel
LLM_API_BASE Server-URL, für Ollama und OpenAI-kompatible Server

Bei einer lokalen Installation gehören sie in apps/backend/.env. Bei Docker übergibst du sie als Umgebungsvariablen des Containers. Das Docker-Image liest auch Docker Secrets: Hänge _FILE an eine der vier Variablen an, um ihren Wert aus einer Datei zu laden, zum Beispiel LLM_API_KEY_FILE=/run/secrets/llm_api_key.

Anthropic, lokale Installation (apps/backend/.env):

LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key

OpenAI, lokale Installation (apps/backend/.env):

LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key

Ollama auf dem Host, Resume Matcher in 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

Option C: Dein ChatGPT- oder Claude-Abo

Wenn du schon für ChatGPT oder Claude bezahlst, kann Resume Matcher dieses Abo statt eines API-Schlüssels nutzen. Beide Optionen stammen aus der Community, und keine ist ein garantierter Zugang: Wenn du dich darauf verlassen musst, nimm einen API-Schlüssel von OpenAI oder Anthropic.

ChatGPT-Abo

ChatGPT Plan in den Einstellungen ausgewählt: Not connected, eine Schaltfläche Continue with ChatGPT, das Modellfeld und ein Preview-Hinweis zu Sign in with ChatGPT, Abo-Limits und Community-Status über einer deaktivierten Save-Schaltfläche

Das nutzt das offizielle Sign in with ChatGPT von OpenAI für Open-Source-Apps. Es funktioniert mit ChatGPT Plus und Pro.

  1. Starte Resume Matcher und öffne dann die Einstellungen in einem Browser auf demselben Rechner, unter http://localhost:3000.
  2. Wähle ChatGPT plan und klicke auf Continue with ChatGPT.
  3. Melde dich bei OpenAI an und erlaube Resume Matcher, dein Abo zu nutzen.
  4. Zurück in den Einstellungen wählst du eines der Modelle deines Kontos und klickst auf Save.

Bevor du dich darauf verlässt:

  • Es ist eine Vorschau. Sign in with ChatGPT für Open-Source-Apps ist eine Preview von OpenAI und kann sich ändern.
  • Anfragen gehen direkt an OpenAI. Sie gehen von deinem Rechner direkt an die API von OpenAI, und die Anmelde-Tokens werden verschlüsselt auf deinem Rechner gespeichert.
  • Es zählt gegen die Limits deines ChatGPT-Abos. Bei Plus teilst du dir das Fünf-Stunden-Limit mit deinen anderen Apps, die dein Abo nutzen. Pro hat kein Fünf-Stunden-Limit.
  • Melde dich auf demselben Rechner an. OpenAI leitet den Browser nur an 127.0.0.1 zurück, die Anmeldung muss also in einem Browser auf dem Rechner passieren, auf dem Resume Matcher läuft. Das klappt mit dem Standard-Docker-Setup, geöffnet unter http://localhost:3000, aber nicht von einem anderen Computer aus oder über die Domain eines Reverse Proxys.

Disconnect beendet die Sitzung und löscht die Tokens; Manage usage öffnet deine ChatGPT-Nutzungseinstellungen. Mit Umgebungsvariablen setzt du LLM_PROVIDER=chatgpt und LLM_MODEL auf ein Modell deines Kontos; anmelden musst du dich trotzdem in den Einstellungen.

Claude-Abo (über Claude Code)

Claude Plan in den Einstellungen ausgewählt: ein Hinweis, dass die auf diesem Rechner angemeldete Claude Code CLI ausgeführt wird, und eine Warnung „Not officially supported“ zu Anthropics Richtlinien, Zugangsdaten und Nutzungslimits

Das führt deine eigene Claude Code CLI aus, installiert auf demselben Rechner, bei der du dich selbst anmeldest:

claude auth login

Wähle dann Claude plan in den Einstellungen und klicke auf Save. Mit Umgebungsvariablen setzt du LLM_PROVIDER=claude_cli; LLM_MODEL wird nicht verwendet.

Bevor du dich darauf verlässt:

  • Es wird nicht offiziell unterstützt. Anthropic unterstützt Apps von Drittanbietern, die Abos wie Claude Pro oder Max nutzen, nicht offiziell. Wenn Anthropic seine Richtlinien ändert, kann das also aufhören zu funktionieren.
  • Resume Matcher sieht deine Claude-Zugangsdaten nie. Es führt die CLI aus, bei der du angemeldet bist, und speichert nichts von deinem Claude-Konto.
  • Deine Prompts gehen trotzdem an Anthropic. Claude Code schickt sie über dein Konto, mit seinem eigenen Standardmodell.
  • Es zählt gegen die Nutzungslimits deines Claude-Abos, und Anthropic kann es stattdessen auch von Nutzungsguthaben abziehen.
  • Es braucht eine lokale Installation. Die Claude Code CLI ist nicht im Docker-Image enthalten, diese Option funktioniert in Docker also nicht.

Resume Matcher finanziert sich über Spenden.

Mehr als 200.000 Jobsuchende haben es genutzt, kostenlos, ohne Werbung und ohne Bezahlschranke. Wenn es dir Zeit gespart oder zu einem Vorstellungsgespräch verholfen hat, sorgt ein Sponsoring oder ein spendierter Kaffee dafür, dass es so bleibt.

Lokale Modelle

Ollama. Installiere es von ollama.com, lade ein Modell herunter und wähle dann Ollama in den Einstellungen:

ollama pull gemma3:4b

Die Standard-URL ist http://localhost:11434. Aus Docker heraus verwendest du http://host.docker.internal:11434. Unter Linux nimmst du die IP-Adresse des Hosts oder startest den Container mit --network=host.

OpenAI-kompatible Server. llama.cpp, vLLM, LM Studio und jeder andere Server, der die Chat Completions API von OpenAI spricht, funktionieren über den Anbieter openai_compatible. Setze LLM_API_BASE auf die Server-URL und LLM_MODEL auf das Modell, das der Server bereitstellt.

Langsame Modelle. Jede KI-Anfrage läuft unter einer einzigen Frist, REQUEST_TIMEOUT_SECONDS (Standard 240, Bereich 30 bis 1800). Ein großes Modell auf bescheidener Hardware kann darüber hinauslaufen. Erhöhe REQUEST_TIMEOUT_SECONDS in der Backend-Umgebung und NEXT_PUBLIC_REQUEST_TIMEOUT_MS in der Frontend-Umgebung (siehe apps/frontend/.env.sample). Das Frontend liest seinen Wert beim Build, deshalb bleibt das vorgefertigte Docker-Image bei 240 Sekunden. Um den Wert dort zu erhöhen, baue das Image selbst mit gesetztem NEXT_PUBLIC_REQUEST_TIMEOUT_MS.

Schlüssel und lokale Server. Das Backend schickt LLM_API_KEY nie an Ollama oder an einen OpenAI-kompatiblen Server, ein bezahlter Cloud-Schlüssel in deiner .env kann also nicht an einen lokalen Server durchsickern.

Kleine Modelle. Die Designnotizen des Projekts warnen, dass kleinere Modelle mit dem strukturierten Bearbeitungsformat Mühe haben, das der Anpassungsschritt verwendet.

Die vollständige Docker-Anleitung findest du unter Docker + Ollama (auf Englisch).

Wo dein Schlüssel gespeichert wird

Schlüssel, die du in den Einstellungen speicherst, landen in der lokalen SQLite-Datenbank, verschlüsselt mit Fernet. Der Verschlüsselungsschlüssel liegt in .secret_key im Datenordner (apps/backend/data/ bei einer lokalen Installation, sonst das Docker-Volume) und wird mit den Rechten 0600 angelegt, sodass nur dein Benutzerkonto ihn lesen kann. Das Backend entfernt die Schlüssel, bevor es config.json im selben Ordner schreibt, die Einstellungsdatei enthält also nie einen.

Um alle gespeicherten Schlüssel zu entfernen, nutze Clear API keys im Gefahrenbereich (danger zone) der Einstellungsseite. Das lässt sich nicht rückgängig machen.

Die Anmelde-Tokens des ChatGPT-Abos werden mit demselben Schlüssel verschlüsselt, in chatgpt_credentials.enc im Datenordner. Das Claude-Abo speichert nichts: Deine Claude-Zugangsdaten bleiben bei Claude Code.

LOG_LLM=DEBUG schreibt Schlüssel im Klartext ins Log. Aktiviere das nicht auf einem gemeinsam genutzten Rechner.

Was an deinen Anbieter geht

Die App schickt nichts an die Autoren von Resume Matcher und enthält keine Telemetrie. Dein Lebenslauftext, einschließlich Name und Kontaktdaten, und die Stellenbeschreibung gehen an den Anbieter, den du gewählt hast, und an niemanden sonst: beim ChatGPT-Abo an OpenAI, beim Claude-Abo über Claude Code an Anthropic. Vor dem Senden wird nichts geschwärzt. Mit einem lokalen Modell verlässt nichts deinen Rechner.

Funktion An den Anbieter gesendet
Lebenslauf hochladen (Parsing) Der vollständige Lebenslauftext, einschließlich Name, E-Mail, Telefonnummer und Links
Analyse der Stellenbeschreibung, Titel des Lebenslaufs Die Stellenbeschreibung
Anpassung (Skill-Plan, Diff-Änderungen) Stellenbeschreibung plus vollständiges Lebenslauf-JSON
Keyword-Durchgang nach der Anpassung JSON des angepassten und des Master-Lebenslaufs plus die ersten 2.000 Zeichen der Stellenbeschreibung
Anschreiben, Kontaktnachricht Vollständiges Lebenslauf-JSON plus Stellenbeschreibung
Vorbereitung aufs Vorstellungsgespräch Lebenslauf-JSON (bis zu 30.000 Zeichen) plus Stellenbeschreibung (bis zu 12.000 Zeichen)
Bewertung der Stichpunkte Text der Stichpunkte, Stellenbeschreibung und extrahierte Keywords
Anreicherung, Neugenerierung, Resume Wizard Der Lebenslauf oder Eintrag plus deine Antworten und Anweisungen
Test Connection Das Wort „Hi“

Deine anderen API-Schlüssel, die Datenbankdatei, das Tracker-Board, die Einstellungen und die PDFs bleiben lokal. Die einzige andere Netzwerkanfrage stellt die KI-Bibliothek (LiteLLM), die beim Start eine öffentliche Preisliste der Modelle abruft; sie enthält keine deiner Daten und greift offline auf eine mitgelieferte Kopie zurück.

Kosten

Resume Matcher ist kostenlos und Open Source. Ein Cloud-Anbieter rechnet jede Anfrage der App zu seinen eigenen Preisen über dein eigenes Konto ab. Die App erfasst diese Ausgaben nicht, sieh also im Dashboard deines Anbieters nach. Mit dem ChatGPT- oder Claude-Abo zählen die Anfragen stattdessen gegen die Limits deines Abos. Ein lokales Modell kostet pro Anfrage nichts.

Fehlerbehebung

Test Connection schlägt fehl

Prüfe den API-Schlüssel, bei Ollama und OpenAI-kompatiblen Servern die Server-URL. Speichere und teste erneut.

„Claude Code CLI not found“

Installiere Claude Code auf dem Rechner, auf dem das Backend läuft, und führe claude auth login aus. Im Docker-Image ist es nicht verfügbar.

„Not signed in with ChatGPT“ oder „isn’t available for this account“

Wähle ChatGPT plan in den Einstellungen und klicke in einem Browser auf demselben Rechner auf Continue with ChatGPT. Die Abo-Option braucht ChatGPT Plus oder Pro; sonst nimm einen API-Schlüssel von OpenAI.

Docker erreicht Ollama nicht

Verwende http://host.docker.internal:11434 als Ollama-URL, nicht localhost. Unter Linux nimmst du die IP-Adresse des Hosts oder startest den Container mit --network=host.

Timeouts mit einem lokalen Modell

Erhöhe REQUEST_TIMEOUT_SECONDS (bis 1800) im Backend und NEXT_PUBLIC_REQUEST_TIMEOUT_MS im Frontend. Beim vorgefertigten Docker-Image ist der Frontend-Wert beim Build festgelegt; siehe Langsame Modelle oben.

Eine Änderung in .env wirkt nicht

In der Oberfläche gespeicherte Einstellungen haben Vorrang vor Umgebungsvariablen. Öffne die Einstellungen und ändere den Wert dort.

Nächste Schritte