Ctrl K
ComunidadGuías…

README.de.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/wordmark-dark.svg"><img src="docs/wordmark-light.svg" alt="career-ops" width="250" height="56"></picture></p>

<p align="center">Der Open-Source-KI-Agent für die Jobsuche.</p>

<p align="center">
  <a href="README.md">English</a> |
  <a href="README.es.md">Español</a> |
  <a href="README.de.md">Deutsch</a> |
  <a href="README.fr.md">Français</a> |
  <a href="README.pt-BR.md">Português (Brasil)</a> |
  <a href="README.ko-KR.md">한국어</a> |
  <a href="README.ja.md">日本語</a> |
  <a href="README.cn.md">简体中文</a> |
  <a href="README.zh-TW.md">繁體中文</a> |
  <a href="README.ua.md">Українська</a> |
  <a href="README.ru.md">Русский</a> |
  <a href="README.pl.md">Polski</a> |
  <a href="README.da.md">Dansk</a> |
  <a href="README.ta.md">தமிழ்</a> |
  <a href="README.ar.md">العربية</a> |
  <a href="README.hi.md">हिन्दी</a> |
  <a href="README.tr.md">Türkçe</a> |
  <a href="README.vi.md">Tiếng Việt</a> |
  <a href="README.id.md">Bahasa Indonesia</a>
</p>

<p align="center"><a href="https://career-ops.org/de/docs?utm_source=readme&utm_content=de">Vollständige Dokumentation auf Deutsch: career-ops.org/de/docs</a></p>

<!-- The non-breaking spaces (&nbsp;) and word joiners (&#8288;) below decide where each line wraps on a phone. Keep them when editing. -->

<p align="center"><a href="https://github.com/santifer"><img src="docs/avatar-santifer.png" width="48" height="48" align="middle" alt="Santiago Fernández de Valderrama Aparicio"></a>&nbsp;&nbsp;Erstellt von <a href="https://github.com/santifer"><strong>@santifer</strong></a>, mit&nbsp;&nbsp;<a href="https://github.com/career-ops-hq/career-ops/blob/main/README.de.md#builders"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/builders-stack-dark.svg"><img src="docs/builders-stack-light.svg" alt="" height="32" align="middle"></picture></a>&nbsp;&nbsp;<a href="https://github.com/career-ops-hq/career-ops/blob/main/README.de.md#builders">700+ Mitwirkenden</a></p>

<p align="center">
<strong>Monatelang Lebensläufe ins Leere&nbsp;geschickt.</strong><br>
Also habe ich den Filter gebaut, den ich&nbsp;brauchte.
</p>

<p align="center">
<strong>740&nbsp;bewertete&nbsp;Stellen. 68&nbsp;Bewerbungen. 12&nbsp;Interviews.&nbsp;1&nbsp;Angebot.</strong><br>
Ich war der erste Nutzer. Ich habe den&nbsp;Job&nbsp;bekommen. Dann&nbsp;habe&nbsp;ich&nbsp;es als&nbsp;Open&nbsp;Source&nbsp;freigegeben.
</p>

<p align="center">
Füge eine Stelle ein. Auf deinem Rechner sagt es dir, ob sie noch&nbsp;offen&nbsp;ist und ob sie zu&nbsp;dir&nbsp;passt.<br>
Es schneidet deinen Lebenslauf zu und entwirft deine&nbsp;Antworten. <strong>Du&nbsp;klickst&nbsp;auf&nbsp;Absenden.</strong>
</p>

<p align="center">
  <img src="docs/demo.gif" alt="Die eigene Suche des Autors im career-ops-Dashboard: bewertete Stellen, in Rot die Zahl der als „nicht bewerben“ markierten, dann ein vollständiger Bewertungsbericht" width="800">
</p>

<p align="center"><sub>Meine eigene Suche, mittendrin, mit&nbsp;der&nbsp;Oberfläche&nbsp;auf&nbsp;Spanisch.</sub></p>

<p align="center">
  Unternehmen nutzen KI, um Bewerber:innen zu filtern.<br>
  <strong>Ich habe Bewerber:innen einfach KI&nbsp;gegeben, damit&nbsp;sie sich&nbsp;Unternehmen&nbsp;<em>aussuchen</em>.</strong>
</p>

<p align="center">
  Sechs Monate später <strong>habe ich diesen Job gekündigt.</strong><br>
  Jetzt bauen wir career-ops, damit&nbsp;du&nbsp;deinen&nbsp;bekommst.
</p>

<p align="center"><a href="#du-bist-dran">Probier es mit einer Stelle&nbsp;aus&nbsp;↓</a> · <a href="https://santifer.io/career-ops-system">Die ganze Geschichte&nbsp;lesen&nbsp;→</a></p>
<p align="center"><sub>Lieber ohne Terminal arbeiten? <a href="https://career-ops.org/de/waitlist?ref=readme-de">Trag dich in die Warteliste für eine Web-Version ein&nbsp;→</a></sub></p>

<br>

<p align="center"><a href="HIRED.md"><img src="docs/hired-badge.svg" alt="Hired with career-ops: public stories on the record"></a></p>

<p align="center">Die Leute, die nach mir kamen, haben aufgeschrieben, wie sie eingestellt wurden.</p>

<p align="center">
  <a href="HIRED.md"><img src="docs/hired-wall.svg" alt="Einstellungsgeschichten, die du öffnen und lesen kannst" width="800"></a>
</p>

<p align="center"><sub>Jede Karte ist ein öffentliches Issue, das du öffnen kannst. Deinen Job bekommen? <a href="https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml">Hinterlass deine Karte →</a></sub></p>

<p align="center">⭐ <strong>Wenn dir career-ops geholfen hat, hilft ein Stern der nächsten Person, es zu&nbsp;finden.</strong></p>

<br>

<p align="center">
  <a href="https://wired.com.gr/article/to-ai-ergaleio-pou-fernei-epanastasi-ston-tropo-pou-psachnoume-douleia/" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/wired-dark.svg"><img src="docs/press/wired.svg" alt="WIRED" height="32"></picture></a>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <a href="https://www.businessinsider.com/how-i-built-tool-filter-job-listings-landed-head-ai-2026-4" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/business-insider-dark.svg"><img src="docs/press/business-insider.svg" alt="Business Insider" height="32"></picture></a>
</p>

<p align="center">
  <a href="https://vercel.com/open-source-program"><img alt="Vercel OSS Program" src="https://vercel.com/oss/program-badge-2026.svg" height="32"></a>
</p>

<p align="center">
  <a href="https://trendshift.io/repositories/25195" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/25195" alt="GitHub Trending: #1 repository of the day (Trendshift)" width="250" height="55"></a>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <a href="https://www.producthunt.com/products/santifer-io?utm_source=badge-featured&utm_medium=badge" rel="noopener noreferrer"><img src="docs/press/producthunt.svg" alt="Featured on Product Hunt" width="206" height="54"></a>
</p>

## Du bist dran

Füge eine Stelle ein, auf die du dich heute Abend bewerben wolltest. Kommt <em>nicht bewerben</em> zurück, hast du gerade den Abend zurückgewonnen. Kommt ein Plan zurück, weißt du, was als Nächstes zu tun ist.

```bash
npx @santifer/career-ops init
```

<p align="center"><sub>Open Source. Lokal. In der KI-CLI, die du schon nutzt. <a href="docs/RUNNING_ON_A_BUDGET.md">Kostenlose und lokale Modelle inklusive.</a></sub></p>


## Du musst nicht allein suchen

Die Stille nach dem Absenden hat nichts mit dir zu tun. Genug Leute haben dasselbe gesehen, um die Praxis aufzuschreiben, in sechs Zeilen:

> Besser bewerben, bei weniger. Signal statt Masse. Belege statt Schlagwörter. Ein Mensch entscheidet. Local-first. Würde auf beiden Seiten des Tisches.

<p align="center"><a href="https://career-ops.org/manifesto?utm_source=readme"><img src="https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcareer-ops-hq%2Fcareer-ops%2Fmain%2FSIGNATURES.md&search=n%3A(%5Cd%2B)%5Cs*%24&replace=%241%20signatories&label=THE%20CAREEROPS%20MANIFESTO&color=DD7627&style=for-the-badge&labelColor=2b3137" alt="Das CareerOps-Manifest: Zahl der Unterzeichner, live"></a></p>

<p align="center">Ein paar von ihnen, in ihren eigenen Worten.</p>

<p align="center">
  <a href="https://career-ops.org/manifesto?utm_source=readme"><img src="docs/manifesto-wall.svg" alt="Drei Unterschriften unter dem CareerOps-Manifest, in eigenen Worten" width="800"></a>
</p>

<p align="center"><sub>Jede Unterschrift ist ein Commit, den du prüfen kannst. <a href="https://career-ops.org/manifesto?utm_source=readme">Alle lesen, oder deine hinzufügen →</a></sub></p>

<br>

Das Recruiting repariert sich nicht von selbst. Die Leute, die es durchmachen, können das, und sie sind schon im Raum, tauschen Notizen aus und reparieren sich gegenseitig die Setups.

<a id="builders"></a>

<p align="center"><a href="CONTRIBUTING.md"><img src="https://warpchart.dev/api/builders?lang=de" alt="Animierte Wand mit den GitHub-Avataren der Mitwirkenden, die sich seit April 2026 in der Reihenfolge ihrer Ankunft füllt; das nächste Feld bleibt frei." width="100%"></a></p>

[Hier wird die Lösung geschrieben](CONTRIBUTING.md). Ein Raum, kein Club. **Lasst uns gemeinsam bauen.**

<p align="center"><a href="https://discord.gg/8pRpHETxa4"><img src="docs/discord-badge.svg" alt="Discord: Mitgliederzahl des career-ops-Servers, live"></a></p>

## Sponsoren

career-ops ist für Kandidaten kostenlos, für immer. Diese Unternehmen sponsern das Projekt:

<p align="center">
  <a href="https://serpapi.com/career-ops-org" title="SerpApi"><img src="docs/sponsors/serpapi.svg" alt="SerpApi" height="48"></a>
</p>

<p align="center"><strong>SerpApi</strong> · Build a portfolio project with live search data. SerpApi gives developers structured JSON/Markdown from Google Search, Maps, Shopping, and other engines through a simple API call.</p>

> Sponsoring kauft klar gekennzeichnete Sichtbarkeit, nie Einfluss: kein Geldbetrag ändert die Roadmap oder platziert etwas im Produkt. Sponsoren erscheinen nie in Bewertungen, Rankings oder Empfehlungen.

## Was career-ops für dich tut

Füge eine Stelle ein. Es sagt dir, ob sich der Abend lohnt.

- **Noch offen?** Es prüft, ob die Anzeige noch online ist, bevor du ein Wort schreibst.
- **Nichts für dich?** Es bewertet die Stelle gegen deinen echten Lebenslauf und rät dir bei schwacher Passung ab. Du kannst es überstimmen.
- **Lohnt es sich?** Es entwirft Lebenslauf, Anschreiben und Antworten. Du liest sie. Du schickst sie ab.
- **Mit wem rede ich?** Es findet die Person und entwirft die Nachricht. Abschicken tut es sie nie.
- **Wo landet das alles?** Jede Bewerbung bleibt auf deinem Rechner. Zu uns wird nichts hochgeladen.
- **Was sollte ich lernen?** Nach einer Serie von Absagen benennt es die Lücke.

Die ersten Durchläufe sind holprig. Es kennt dich noch nicht. Sprich mit ihm: dein Lebenslauf, was du willst, was du ablehnst. Stell es dir wie die erste Woche eines Recruiters vor.

Beim ersten Start fragt es das alles im Chat ab. Nichts von Hand zu konfigurieren.

## Was career-ops nicht tut

- **Eine Bewerbung automatisch absenden.** Es entwirft die Antwort für jedes Feld; du prüfst und klickst auf Absenden. Das Skript sendet nie einen POST (`prepare-application.mjs`).
- **Eine E-Mail senden.** Nur Entwürfe. Nirgendwo in diesem Code gibt es einen Mailversand.
- **Nach Hause funken.** Keine Telemetrie, kein Backend von uns. Dein Lebenslauf geht von deinem Rechner zum KI-Anbieter deiner Wahl, und nirgendwo sonst. Das einzige öffentliche Register ist dieses Repository: `HIRED.md` und seine Issues.
- **Dich zu Bewerbungen unter 4,0/5 drängen.** Es rät dir davon ab. Du kannst dich darüber hinwegsetzen, und es sagt es dir.

Es formuliert deinen Lebenslauf um; es darf ihn nie erfinden. Eine Prüfung im Code stoppt ein PDF, dessen Zahlen oder Fakten weder in deinem Lebenslauf noch in deinem `article-digest.md` stehen, kann aber noch nicht jede Umformulierung beurteilen. Lies jeden Lebenslauf, bevor du ihn abschickst. Details in den [FAQ](#faq).

## Features

| Feature                  | Beschreibung                                                                                                                             |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **A-H-Bewertung**        | Rollen-Zusammenfassung, Lebenslauf-Match (mit der Wichtigkeit jeder Anforderung für diese Anzeige und der Angabe, ob das Gewicht aus dem Wortlaut der Stellenbeschreibung, ihrer Struktur oder einer Schätzung stammt, pro Anforderung gekennzeichnet; eine Schätzung kann nie in der obersten Stufe landen), Level-Strategie, Vergütungsrecherche, Personalisierung, Interview-Vorbereitung (STAR+R), dazu eine Legitimitätsprüfung der Anzeige in Block G (ist sie noch offen, ist sie ein Repost: Beobachtungen, keine Urteile) und ein Work-Auth-Signal, das eine Stellenbeschreibung mit ausdrücklich ausgeschlossenem Visa-Sponsoring als harten Blocker kennzeichnet |
| **Human-in-the-Loop**    | KI bewertet und empfiehlt, du entscheidest und handelst. Das System reicht niemals eine Bewerbung ein: die finale Entscheidung liegt immer bei dir <!-- hitl: absolute guarantee. Do not add "automatically", "by itself", "without your permission" or any other hedge when translating this row. -->               |
| **ATS-PDF-Generierung**  | ATS-lesbare Lebensläufe, aus deiner eigenen Erfahrung auf jede Stellenbeschreibung zugeschnitten, im Space-Grotesk- und DM-Sans-Design  |
| **Anschreiben-Generator** | Recherchegestützte Anschreiben mit Keyword-Mirroring, vier interaktiven Angle-Prompts (warum/Probleme/Ansatz/Ton), Freigabe des Entwurfs im Chat und A4-PDF über dieselbe HTML- und Playwright-Pipeline wie Lebensläufe. Entwirft bei jeder Bewertung automatisch; vervollständigen und erzeugen bei Bedarf mit `/career-ops cover` |
| **Über den Lebenslauf hinaus** | Die Unternehmensrecherche ([`deep`](modes/deep.md)) legt KI-Strategie, jüngste Schritte, Engineering-Kultur und den Winkel offen, den dein Profil einnehmen sollte. Die Kontaktsuche ([`contacto`](modes/contacto.md)) identifiziert Hiring Manager, Recruiter:in oder Teammitglied, bei denen sich eine Nachricht lohnt, und entwirft eine LinkedIn-Nachricht mit ≤300 Zeichen, abgestimmt auf den Kontakttyp. Formelle Bewerbungs-E-Mail-Entwürfe ([`email`](modes/email.md)) machen aus einem bewerteten Report oder einer eingefügten Stellenbeschreibung Betreff, Text und Anhang-Checkliste, ohne etwas zu senden, einzureichen oder anzuklicken. Bewerbungen bringen dich in die Warteschlange; Recherche bringt dich ins Gespräch. |
| **Musteranalyse**        | Ablehnungsmuster und Weiterkommensquoten je ATS-Kanal (`analyze-patterns.mjs`), Funnel-Statistiken über die gesamte Suche (`stats.mjs`), Erkennung von Reposts, die auf einen Ghost Job hindeuten können (`detect-reposts.mjs`) |

<details>
<summary><b>Alles andere, was es tut</b></summary>

| Feature                  | Beschreibung                                                                                                                             |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Auto-Pipeline**        | URL einfügen, vollständige Bewertung + PDF + Tracker-Eintrag erhalten                                                                   |
| **Interview Story Bank** | Sammelt STAR+Reflection-Geschichten über Bewertungen hinweg: 5-10 Master-Stories, die du an die Behavioral Questions anpassen kannst, die dir gestellt werden |
| **Verhandlungsskripte**  | Frameworks für Gehaltsverhandlungen, Pushback gegen geografische Abschläge, Hebel durch konkurrierende Angebote                          |
| **Bewerbungs-E-Mail-Entwürfe** | Formelle E-Mails an Recruiter:innen, für Empfehlungen oder Initiativbewerbungen aus einem Report oder einer eingefügten Stellenbeschreibung, mit Betreff, Anhang-Checkliste, belegten Fit-Punkten und einem Kontaktblock aus deinem Profil. Nur Entwürfe: career-ops sendet, reicht ein oder klickt nie etwas. |
| **Portal-Scanner**       | 100+ vorkonfigurierte Unternehmen (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) plus eigene Websuche-Queries über Ashby, Greenhouse, Lever, Wellfound |
| **Finanzierte Unternehmen entdecken** | Der Befehl `company:funded` (erst prüfen, dann handeln) zeigt kürzlich finanzierte Unternehmen und Quellendiagnosen aus strukturierten öffentlichen Feeds, ohne deine Daten anzufassen |
| **Batch-Verarbeitung**   | Parallele Bewertung mit headless CLI-Workern (`claude -p` / `opencode run`)                                                             |
| **Dashboard TUI**        | Terminal-UI zum Durchsuchen, Filtern und Sortieren deiner Pipeline                                                                       |
| **Pipeline-Integrität**  | Automatisches Mergen, Deduplizieren, Status-Normalisierung, Health Checks                                                                |
| **Interview-Suite**      | Zeitgeblockte Vorbereitungspläne, Übungssessions mit Feedback, Debriefs nach dem Interview ([`interview/`](modes/interview/README.md)) und ein Red-Flag-Detektor für Unternehmen ([`interview-redflag`](modes/interview-redflag.md)) |
| **Angebotsphase**        | Begleiter beim Lesen des Vertrags: Klausel für Klausel plus eine Fragenliste für den Anwalt ([`offer-prep`](modes/offer-prep.md)), und ein Analysator für die Lücke zwischen gewünschtem, ausgeschriebenem und tatsächlichem Gehalt (`salary-gap.mjs`) |
| **Follow-ups & Antworten** | Rechner für die Follow-up-Kadenz und vorbereitete Erinnerungen (`followup-cadence.mjs`, `followup-seed.mjs`); Klassifizierung von Arbeitgeber-Antworten in Tracker-Updates ([`reply-watch`](modes/reply-watch.md)) |
| **Plugin-System**        | Optionale Integrationen (Gmail, Notion, Apify + ein Community-Registry), standardmäßig deaktiviert; siehe [docs/PLUGINS.md](docs/PLUGINS.md) |

</details>

## Wie es funktioniert

<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/how-it-works-dark.svg"><img src="docs/how-it-works-light.svg" alt="How it works: you paste a job URL or description. Archetype Detection classifies it as LLMOps, Agentic, PM, SA, FDE or Transformation. The A-H Evaluation reads cv.md and covers match, gaps, comp research, STAR stories and legitimacy. It produces a report (reports/*.md), the tailored CV in the format set by cv.output_format — a PDF by default — and a tracker entry (data/applications.md)." width="760"></picture></p>

## Schnellstart

**Am schnellsten geht es mit einem einzigen Befehl:**

```bash
npx @santifer/career-ops init
```

> 💡 `npx` kommt mit [Node.js](https://nodejs.org): Es führt den Installer einmal aus,
> ohne etwas global zu installieren. Noch kein Node? Installiere es zuerst.
> (Nutzt du schon eine Claude Code / Codex CLI? Dann hast du es bereits.)

Das klont das neueste Release nach `./career-ops` und installiert die Abhängigkeiten. Dann:

```bash
cd career-ops
claude   # or codex / qwen / opencode / agy / grok — open your AI CLI here
```

**Beim ersten Start führt dich career-ops durch die Einrichtung (dein Lebenslauf, dein Profil und deine Zielrollen), einfach im Gespräch. Nichts muss von Hand bearbeitet werden.**

<details>
<summary><b>Lieber manuell einrichten? (git clone)</b></summary>

```bash
git clone https://github.com/career-ops-hq/career-ops.git
cd career-ops && npm install
npx playwright install chromium   # only needed for PDF generation
# On a non-Debian/Ubuntu Linux distro (Fedora, Arch, ...), Chromium's system
# libraries aren't installed by the line above — install them yourself with
# your distro's package manager if PDF generation fails to launch the browser
# (Playwright's own docs list the required libraries per platform).

# 2. Open your AI CLI in this directory. On first launch it walks you
#    through setup (your CV, profile and target roles) by chatting
claude   # or codex / opencode / qwen / agy / grok

# Then ask your CLI to adapt the system to you:
# "Change the archetypes to backend engineering roles"
# "Translate the modes to English"
# "Add these 5 companies to portals.yml"
# "Update my profile with this CV I'm pasting"

# 3. Start using
# Füge eine Stellen-URL oder den Text einer Stellenbeschreibung ein, um die Auto-Pipeline auszulösen.
# Alle anderen Modi und wie du sie in deiner CLI anforderst: siehe unten unter „Nutzung“.
```

</details>

### Globale Installation

```bash
npm i -g @santifer/career-ops
```

Das installiert die `career-ops`-Binary global, sodass du `career-ops init [folder]` ohne `npx` ausführen kannst. `init` ist ihr einziger Befehl: Er richtet einen Arbeitsbereich ein, und alles Weitere passiert in deiner KI-Coding-CLI (siehe Nutzung unten), nicht über diese Binary.

**Welche Variante solltest du nutzen?**
- `npx @santifer/career-ops init`: am besten für den ersten Einsatz; legt einen eigenen Projektordner an.
- `npm i -g @santifer/career-ops`: wenn du lieber `career-ops init` tippst als die `npx`-Form. Weitere Befehle kommen dadurch nicht hinzu.

### Weitere Möglichkeiten, career-ops zu nutzen

- **Aus jedem Ordner, als Claude-Code-Plugin:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md).
- **Ohne KI-CLI:** eigenständige Gemini-, Ollama- und OpenAI-kompatible Skripte bewerten eine Stellenbeschreibung für sich allein. Siehe [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).

> **Das System ist dafür gebaut, von deiner KI-Coding-CLI selbst angepasst zu werden.** Modi, Archetypen, Bewertungsgewichte, Verhandlungsskripte: Bitte sie einfach, das zu ändern. Sie liest dieselben Dateien, die sie benutzt, und weiß daher genau, was zu bearbeiten ist.

Siehe [docs/SETUP.md](docs/SETUP.md) für die vollständige Einrichtungsanleitung, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) für den günstigen Betrieb von career-ops mit eigenen oder lokalen Modellen (und [docs/FREE_TIER.md](docs/FREE_TIER.md) für den kostenlosen Betrieb im Free Tier der Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) für wiederkehrende Scans und ein Rezept vom Triage zur Shortlist ohne Token-Verbrauch, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) für Details zum ATS-Autofill-Ablauf, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) für den Abgleich eines LinkedIn-Kontaktexports mit den Unternehmen in deinem Funnel und [docs/FAQ.md](docs/FAQ.md) für Antworten auf häufige Einrichtungsfragen, darunter [wie die Herkunft von Geschichten erfundene Zahlen verhindert](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Designprinzipien stehen in [ARCHITECTURE.md](ARCHITECTURE.md); Laufzeitabläufe in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).

## Nutzung

Füge eine Stellen-URL oder Stellenbeschreibung in deine KI-CLI ein. career-ops prüft, ob eine verlinkte Stelle noch offen ist (bei eingefügtem Text gibt es keinen Link zum Prüfen), bewertet sie gegen deinen Lebenslauf, schreibt einen Report, passt deinen Lebenslauf an (standardmäßig als PDF) und ergänzt eine Zeile in deinem Tracker. Das deckt die meisten Tage ab. Alles andere ist ein Modus, den du beim Namen anforderst. Lässt sich eine Stelle nicht lesen, hält die Pipeline an und bittet dich, den Text einzufügen.

### Einen Modus anfordern

| CLI | So forderst du `scan` an |
| --- | --- |
| Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` |
| Pi | `/skill:career-ops scan` |
| Codex, Qwen, Cursor oder jede andere unterstützte CLI | Normale Sprache: „Run the career-ops scan mode“ |

`/career-ops` ohne weiteren Zusatz zeigt das Befehlsmenü in den CLIs, die ihn verwenden. Normale Sprache funktioniert in jeder unterstützten CLI. Als Claude-Code-Plugin lautet der Befehl `/career-ops:career-ops`.

Alle teilen sich einen Router, `.agents/skills/career-ops/SKILL.md`, und dieselben `modes/*.md`-Dateien, jede CLI leitet eine Anfrage also gleich weiter (browserlastige Modi brauchen zusätzlich Playwright-Werkzeuge). Slash Commands sind in Codex nicht garantiert: Frag in normaler Sprache oder führe einen Prompt headless aus mit `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Wie du career-ops in jeder unterstützten CLI startest, die Headless-Befehle, wo eine CLI einen hat, und CLI-spezifische Hinweise stehen in [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).

### Die täglichen Befehle

| Befehl | Was er tut |
| --- | --- |
| *URL oder Stellenbeschreibung einfügen* | Komplette Pipeline: Aktualitätsprüfung (nur bei URLs), A-G-Bewertung plus H bei hoher Punktzahl, Report, angepasster Lebenslauf (standardmäßig PDF), Tracker-Zeile |
| `scan` | Deine Portale nach neuen Stellen scannen und sie in die Inbox legen (`data/pipeline.md`) |
| `pipeline` | Die wartenden URLs in der Inbox abarbeiten (die Stufen standard und premium können offensichtliche Fehlgriffe überspringen) |
| `apply` | Ein Bewerbungsformular gemeinsam mit dir ausfüllen, Feld für Feld. Vor dem Absenden hält er an |
| `tracker` | Wo jede Bewerbung steht |
| `followup` | Welche Bewerbungen ein Follow-up brauchen, mit Entwürfen |

<details>
<summary><b>Alle Befehle, nach Phase der Suche</b></summary>

`oferta`, `ofertas` und `contacto` behalten ihre ursprünglichen spanischen Namen: Angebot, Angebote, Kontakt.

**Stellen finden**

| Befehl | Was er tut |
| --- | --- |
| [`scan`](modes/scan.md) | Portale scannen und neue Angebote entdecken |
| [`discover`](modes/discover.md) | Eine Liste von Firmennamen in scannbare ATS-Boards auflösen. Zeigt standardmäßig nur eine Vorschau und ergänzt `portals.yml` nur mit `--write` (ohne Tokens) |
| [`pipeline`](modes/pipeline.md) | Ausstehende URLs aus der Inbox verarbeiten (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Schnelle erste Go/No-go-Einschätzung anhand von `modes/_brief.md`, vor einer vollständigen Bewertung (schreibt keine Dateien) |
| [`batch`](modes/batch.md) | Viele Stellen mit Headless-Workern bewerten (parallel mit Claude, nacheinander mit anderen CLIs) |
| [`titles`](modes/titles.md) | Verwandte Jobtitel aus deinem Lebenslauf vorschlagen, um die Suche zu erweitern |

**Eine Stelle bewerten**

| Befehl | Was er tut |
| --- | --- |
| *URL oder Stellenbeschreibung einfügen* | [Auto-Pipeline](modes/auto-pipeline.md): Bewertung + Report + angepasster Lebenslauf (standardmäßig PDF) + Tracker-Eintrag |
| [`oferta`](modes/oferta.md) | Nur Bewertung, Blöcke A bis G plus H bei hoher Punktzahl (kein PDF) |
| [`ofertas`](modes/ofertas.md) | Mehrere Angebote vergleichen und ranken |
| [`deep`](modes/deep.md) | Tiefen-Recherche-Prompt zum Unternehmen |
| [`eu-swe`](modes/regional/eu-swe.md) | Eine europäische Softwareentwicklungs-Bewerbung vor Lebenslauf, Bewerbung oder Interview kalibrieren |

**Bewerben**

| Befehl | Was er tut |
| --- | --- |
| [`pdf`](modes/pdf.md) | ATS-optimierter Lebenslauf als PDF |
| [`ats`](modes/ats.md) | ATS-Tauglichkeitsprüfung eines erzeugten Lebenslaufs: Score und behebbare Probleme |
| [`text`](modes/text.md) | Angepasster Lebenslauf als Markdown (spiegelt `cv.md`, kein PDF) |
| [`latex`](modes/latex.md) | Lebenslauf als LaTeX/Overleaf-`.tex` exportieren |
| [`latex-tex`](modes/latex-tex.md) | Deine eigene `resume.tex` direkt anpassen (opt-in; `cv.md` bleibt Standard) |
| [`cover`](modes/cover.md) | Anschreiben, aus einer eingefügten Stellenbeschreibung oder einem bewerteten Report (`cover {slug}`) |
| [`email`](modes/email.md) | Entwurf einer formellen Bewerbungs-E-Mail. Nur Entwurf: sendet, reicht nie ein und klickt nie |
| [`contacto`](modes/contacto.md) | Hiring Manager, Recruiter oder eine Peer-Person finden und eine LinkedIn-Nachricht entwerfen |
| [`apply`](modes/apply.md) | Live-Bewerbungsassistent (Playwright aus diesem Checkout). Sendet nicht ab |

**Interview**

| Befehl | Was er tut |
| --- | --- |
| [`interview-prep`](modes/interview-prep.md) | Unternehmensspezifisches Interview-Vorbereitungsdokument |
| [`interview/plan`](modes/interview/plan.md) | Zeitgeblockter Vorbereitungsplan für ein anstehendes Interview |
| [`interview/practice`](modes/interview/practice.md) | Übungsinterview, eine Frage nach der anderen, mit Feedback |
| [`interview/debrief`](modes/interview/debrief.md) | Debrief nach dem Interview: Lücken schließen, nächste Runde vorhersagen |
| [`interview-redflag`](modes/interview-redflag.md) | Warnsignale eines Arbeitgebers analysieren, bevor du einsteigst |

**Nach der Bewerbung**

| Befehl | Was er tut |
| --- | --- |
| [`tracker`](modes/tracker.md) | Übersicht über den Bewerbungsstatus |
| [`followup`](modes/followup.md) | Follow-up-Kadenz: überfällige Bewerbungen markieren, Entwürfe erzeugen |
| [`reply-watch`](modes/reply-watch.md) | Antworten von Arbeitgebern klassifizieren und Tracker-Updates vorschlagen |
| [`outcome`](modes/outcome.md) | Das Ergebnis einer Bewerbung erfassen und ihre Artefakte archivieren |
| [`offer-prep`](modes/offer-prep.md) | Ein erhaltenes Angebot oder einen Vertrag gemeinsam mit dir lesen: Klauseln durchgehen und Fragen für den Anwalt (keine Rechtsberatung) |

**Dein Profil und Lebenslauf**

| Befehl | Was er tut |
| --- | --- |
| [`interview`](modes/interview.md) | Profil-Einrichtung: ein interaktives Interview über deine Erfahrung, das deinen Lebenslauf und dein Profil aufbaut (kein Interview-Training) |
| [`intake`](modes/intake.md) | Dein Profil aus Dateien in `documents/` aufbauen oder anreichern (Master-Lebenslauf, LinkedIn-Export). Ohne deine Bestätigung wird nichts geschrieben |
| [`master-profile`](modes/master-profile.md) | Dein Master Career Profile importieren, prüfen und validieren und ausgewählte Fakten als Lebenslauf-Bullets vorbereiten |
| [`add`](modes/add.md) | Ein Projekt, Paper oder eine Rolle zum Lebenslauf hinzufügen (laden, Vorschau, bestätigen) |
| [`expand`](modes/expand.md) | Im Lebenslauf fehlende Kompetenzen anhand deiner Profil-Links entdecken |
| [`retro`](modes/retro.md) | Diese Session auswerten und das, was du ihr beigebracht hast, als Regeln behalten (schreibt nur die, die du annimmst) |

**Deine Zielrichtung verbessern**

| Befehl | Was er tut |
| --- | --- |
| [`patterns`](modes/patterns.md) | Ablehnungsmuster analysieren und die Zielrichtung verbessern |
| [`calibrate`](modes/calibrate.md) | Prüfen, ob deine Bewertungen deine echten Ergebnisse vorhersagen. Beratend: ändert nie die Bewertung |
| [`upskill`](modes/upskill.md) | Skill-Gap-Analyse über deine bewerteten Reports hinweg |
| [`training`](modes/training.md) | Einen Kurs oder ein Zertifikat gegen deinen North Star bewerten |
| [`project`](modes/project.md) | Eine Portfolio-Projektidee bewerten |

**System**

| Befehl | Was er tut |
| --- | --- |
| [`agent-inbox`](modes/agent-inbox.md) | Anfragen für die nächste Session einreihen und dort abarbeiten (`data/agent-inbox.md`). `inbox` funktioniert auch |
| [`update`](modes/update.md) | career-ops-Systemdateien aktualisieren, mit Diff-Vorschau und Kompatibilitätsprüfung |

</details>

## Vorkonfigurierte Portale

Der Scanner kommt mit **100+ Unternehmen**, die sofort gescannt werden können, und **35+ Suchanfragen** über die großen Jobbörsen. Kopiere `templates/portals.example.yml` nach `portals.yml` und füge deine eigenen hinzu:

**AI Labs:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone
**Voice AI:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI
**AI-Plattformen:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI
**Contact Center:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys
**Enterprise:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Automatisierung:** n8n, Zapier, Make.com
**Europa:** Factorial, Attio, Tinybird, Clarity AI, Travelperk

**Durchsuchte Jobbörsen:** 55+ Provider-Module decken ATS-APIs, Feeds ganzer Jobbörsen, XML/RSS-Feeds, Markdown-Feeds und lokale Parser ab. Die vollständige Tabelle steht unter [Unterstützte Jobbörsen](docs/SUPPORTED_JOB_BOARDS.md).

Standardmäßig vertraut `node scan.mjs` (alias `npm run scan`) dem, was jeder ATS-Feed zurückgibt. Manche Unternehmen lassen veraltete Anzeigen in ihrer öffentlichen API stehen, auch wenn die Stelle längst geschlossen ist, sodass diese abgelaufenen Einträge in `pipeline.md` durchsickern können. Übergib `--verify`, um nach dem API-Durchlauf Playwright zu starten und abgelaufene Anzeigen zu verwerfen, bevor sie die Pipeline erreichen:

```bash
node scan.mjs --verify          # zero-token discovery + Playwright liveness check
```

Die Prüfung läuft sequenziell und nur über neue Angebote (nach dem Deduplizieren), sodass die Kosten begrenzt bleiben.

## Dashboard TUI

Das eingebaute Terminal-Dashboard lässt dich deine Pipeline visuell durchsuchen:

```bash
npm run serve:dashboard   # launch the TUI
npm run build:dashboard   # optional: build the standalone binary
```

Features: 10 Filter-Tabs, 8 Sortiermodi, gruppierte/flache Ansicht, Vorschauen mit Lazy Loading, Statusänderungen inline.

Es gibt außerdem eine **experimentelle Web-UI** (Alpha und opt-in: Nichts läuft, solange du sie nicht startest): siehe [`web/README.md`](web/README.md).

## Projektstruktur

```
career-ops/
├── AGENTS.md                    # Canonical agent instructions (all CLIs)
├── CLAUDE.md                    # Claude Code wrapper (imports AGENTS.md)
├── CODEX.md                     # Codex wrapper (imports AGENTS.md)
├── OPENCODE.md                  # OpenCode wrapper (imports AGENTS.md)
├── GEMINI.md                    # Legacy no-op guard to avoid Antigravity duplicate context
├── cv.md                        # Your CV (create this)
├── article-digest.md            # Your proof points (optional)
├── config/
│   └── profile.example.yml      # Template for your profile
├── modes/                       # Skill modes
│   ├── _shared.md               # Shared context (customize this)
│   ├── oferta.md                # Single evaluation
│   ├── pdf.md                   # PDF generation
│   ├── cover.md                 # Cover letter generation
│   ├── email.md                 # Formal application email drafts
│   ├── scan.md                  # Portal scanner
│   ├── batch.md                 # Batch processing
│   └── ...
├── templates/
│   ├── cv-template.html         # ATS-optimized CV template
│   ├── portals.example.yml      # Scanner config template
│   └── states.yml               # Canonical statuses
├── batch/
│   ├── batch-prompt.md          # Self-contained worker prompt
│   └── batch-runner.sh          # Orchestrator script
├── dashboard/                   # Go TUI pipeline viewer
├── data/                        # Your tracking data (gitignored)
├── reports/                     # Evaluation reports (gitignored)
├── output/                      # Generated PDFs (gitignored)
├── fonts/                       # Space Grotesk + DM Sans
├── docs/                        # Setup, customization, budget guide, architecture
└── examples/                    # Sample CV, report, proof points
```

## Externes Datenverzeichnis (optional)

Standardmäßig liegen die Daten der Nutzerebene (etwa `cv.md`, `portals.yml` und die Ordner `data/`, `reports/`, `output/`) im Wurzelordner des Projekts.

Um deine persönlichen Daten vom Code zu trennen (damit du leichter Branches wechseln, Updates ziehen oder mehrere Profile testen kannst), kannst du ein externes Datenverzeichnis mit folgender Rangfolge konfigurieren:

1. **Umgebungsvariablen:** Setze die Variable `CAREER_OPS_ROOT` oder `CAREER_OPS_DATA_DIR`:
   ```bash
   export CAREER_OPS_ROOT=~/my-career-data
   ```
2. **Marker-Datei:** Lege im Repository-Wurzelverzeichnis eine Datei `.career-ops-data` an, die den Pfad zu deinem Datenverzeichnis enthält.
3. **Standard:** Fällt auf das Repository-Wurzelverzeichnis zurück.

Sobald das aufgelöst ist, werden alle Nutzerdateien relativ zu diesem Ordner aufgelöst und geschrieben, während Prompt-Dateien und Skripte weiterhin relativ zum Repository aufgelöst werden.

- **Tracker überschreiben:** Du kannst auch `CAREER_OPS_TRACKER` setzen, um den Pfad der Bewerbungs-Tracker-Datei direkt zu überschreiben.
- **Schreibvorgänge:** Alle Schreibvorgänge (etwa Merges) zielen kanonisch auf `{DATA_ROOT}/data/applications.md`.
- **Scanner-Konfiguration:** `portals.yml` wird unter `{DATA_ROOT}/portals.yml` gelesen und validiert, sodass `node validate-portals.mjs` genau die Datei prüft, die `scan.mjs` liest.
- **Erzeugte Dokumente:** Angepasste Lebensläufe und Anschreiben werden unter `{DATA_ROOT}/output/` geschrieben, und das PDF-Manifest, das sie mit einem Report verknüpft, liegt in `{DATA_ROOT}/data/pdf-index.tsv`. Solange `CAREER_OPS_TRACKER` nicht gesetzt ist, ist der Tracker-Workspace, der diese Schreibvorgänge begrenzt, das Datenverzeichnis, nicht der Checkout.
- **PDFs bei überschriebenem Tracker:** `generate-pdf.mjs` löst `CAREER_OPS_TRACKER` auf, bevor es den Workspace ableitet; mit gesetztem Override ist der Workspace also der Ordner, der diesen Tracker enthält (oder der Ordner darüber, wenn der Tracker in einem `data/`-Ordner liegt). Das HTML des Lebenslaufs und jedes PDF müssen dann in diesem Workspace liegen, und das Manifest wandert in dessen `data/pdf-index.tsv`. Anschreiben zielen weiterhin auf `{DATA_ROOT}/output/` und werden deshalb abgelehnt, wenn dieser Ordner außerhalb des Tracker-Workspaces liegt.
- **Die Code-Ebene bleibt, wo sie ist:** `node_modules/`, `providers/`, `modes/` und die Skripte selbst werden immer relativ zum Repository aufgelöst, nie relativ zum Datenverzeichnis.

Das Go-Dashboard-TUI, die Node.js-Skripte und die KI-Agentenmodi respektieren diese Auflösungshierarchie automatisch.


## Tech Stack

![Claude Code](https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white)
![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white)
![Playwright](https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white)
![Go](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white)
![Bubble Tea](https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white)

- **Agent**: KI-Coding-CLI mit gemeinsamen Skills und Modi (`AGENTS.md` + CLI-Wrapper)
- **PDF**: Playwright + HTML-Template
- **Anschreiben**: HTML-Template + Playwright (A4-PDF, dieselbe Pipeline wie Lebensläufe)
- **Scanner**: Playwright + Greenhouse-API + WebSearch
- **Dashboard**: Go + Bubble Tea + Lipgloss (Catppuccin-Mocha-Theme)
- **Daten**: Markdown-Tabellen + YAML-Konfiguration + TSV-Batch-Dateien

<p align="center">
  <a href="https://github.com/career-ops-hq/career-ops/releases/latest"><img src="docs/npm-badge.svg" alt="Latest release"></a>
</p>

<p align="center">
  <a href="https://claude.com/claude-code"><img src="https://img.shields.io/badge/Built_with-Claude_Code-000?style=for-the-badge&logo=anthropic&logoColor=white" alt="Built with Claude Code"></a>
</p>

<p align="center">
  <sub>Läuft auch in jeder CLI mit dem Agent-Skill-Standard. Siehe <a href="docs/SUPPORTED_CLIS.md">Unterstützte CLIs</a>.</sub><br>
  <img src="https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white" alt="Claude Code">
  <img src="https://img.shields.io/badge/OpenCode-111827?style=flat&logo=terminal&logoColor=white" alt="OpenCode">
  <img src="https://img.shields.io/badge/Antigravity_CLI-4285F4?style=flat&logo=google&logoColor=white" alt="Antigravity CLI">
  <img src="https://img.shields.io/badge/Codex-412991?style=flat&logo=openai&logoColor=white" alt="Codex">
  <img src="https://img.shields.io/badge/Qwen-615CED?style=flat" alt="Qwen">
  <img src="https://img.shields.io/badge/Kimi-FF4B4B?style=flat" alt="Kimi">
  <img src="https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
  <img src="https://img.shields.io/badge/Grok_Build_CLI-000?style=flat&logo=x&logoColor=white" alt="Grok Build CLI">
  <img src="https://img.shields.io/badge/Pi-4B3F72?style=flat" alt="Pi">
  <br>
  <img src="https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white" alt="Node.js">
  <img src="https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white" alt="Go">
  <img src="https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white" alt="Playwright">
  <img src="https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white" alt="Bubble Tea">
  <img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT">
  <a href="TRADEMARK.md"><img src="https://img.shields.io/badge/Trademark-Policy-blue.svg" alt="Trademark Policy"></a>
</p>

## Ebenfalls Open Source

- **[cv-santiago](https://github.com/santifer/cv-santiago)**: Die Portfolio-Website (santifer.io) mit KI-Chatbot, LLMOps-Dashboard und Case Studies. Wenn du ein Portfolio brauchst, das deine Jobsuche begleitet, fork es und mach es zu deinem eigenen.

## FAQ

**Was ist career-ops?**
career-ops ([career-ops.org](https://career-ops.org), auch bekannt als **careerops**) ist eine quelloffene KI-Jobsuche, die lokal in deiner KI-Coding-CLI läuft (Claude Code, Codex, OpenCode und andere) und jede Entscheidung dir überlässt. Es bewertet Stellenangebote gegen deinen Lebenslauf, erzeugt ATS-optimierte PDFs, findet die richtige Kontaktperson und verfolgt alles an einem Ort: Die finale Entscheidung liegt immer bei dir. Es ist die erste Referenzimplementierung des [CareerOps-Manifests](https://career-ops.org/manifesto).

**Kann der zugeschnittene Lebenslauf etwas erfinden?**
Er darf es nicht, und die Prompts sagen das: umformulieren, nie erfinden. `generate-pdf` blockiert einen Lebenslauf, dessen Zahlen oder Fakten in deinen Quellen fehlen, außer du übergibst `--skip-fact-check`. Der `pdf`-Modus führt zusätzlich `cv-title-check.mjs` aus: Es vergleicht jeden Jobtitel im angepassten Lebenslauf mit dem Titel, den cv.md für dieselbe Stelle nennt (zugeordnet über Firma und Zeitraum), und fragt bei jeder Abweichung, ob du sie behalten oder zurücksetzen willst. Es warnt nur und blockiert nicht, weil ein umformulierter Titel manchmal deine Entscheidung ist. Umformulierungen beurteilt noch nichts: [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (Treueprüfung, die bei Verstoß blockiert) verfolgt das. Bis dahin: Lies jeden Lebenslauf, bevor du ihn abschickst. Der [Haftungsausschluss](LEGAL_DISCLAIMER.md) sagt dasselbe mit mehr Worten.

**Kann ich career-ops kostenlos oder mit einem günstigeren / lokalen Modell nutzen?**
Ja. career-ops ist CLI-unabhängig und läuft mit kostenlosen und lokalen Modellen (über kostenlose OpenRouter-Modelle, Ollama oder jeden OpenAI-kompatiblen Endpoint), sodass du nicht an ein kostenpflichtiges Abo gebunden bist. Die vollständige Einrichtung findest du in [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md).

**Ich zahle für Claude Pro/Max, aber career-ops verbraucht API-Guthaben. Warum?**
Weil ein `ANTHROPIC_API_KEY` in deiner Umgebung Vorrang vor deinem eingeloggten Abo hat: Die CLI nutzt den Schlüssel und rechnet pro Token ab. Führe `echo $ANTHROPIC_API_KEY` aus, und falls etwas ausgegeben wird, entferne den Schlüssel aus deinem Shell-Profil, starte das Terminal neu und führe `/login` aus. Der Batch-Modus ist die Ausnahme, weil `claude -p`-Worker den interaktiven Login nicht nutzen: Führe einmal `claude setup-token` aus und exportiere das Ergebnis als `CLAUDE_CODE_OAUTH_TOKEN`. Die vollständige Anleitung steht in [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it).

**Mit welchen KI-CLIs funktioniert career-ops?**
career-ops läuft mit jeder gängigen KI-Coding-CLI (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen und mehr) über den offenen Agent Skill Standard, ist also nie an einen einzelnen Anbieter gebunden. Nutze die CLI, die du bereits hast.

**Wie installiere ich career-ops unter Windows?**
career-ops läuft unter Windows. Die plattformspezifische Einrichtung und die bekannten Stolpersteine (Git-Bash-Erkennung, Zeilenenden, Aufgabenplanung) stehen in [docs/WINDOWS.md](docs/WINDOWS.md). Falls Skills während der Installation mit einem Symlink-Fehler nicht laden, steht die Lösung in [docs/FAQ.md](docs/FAQ.md). Die vollständigen Schritte findest du in [docs/SETUP.md](docs/SETUP.md).

**Bewirbt sich career-ops automatisch für mich?**
Nein. career-ops ist ein Filter, kein Spray-and-Pray-Auto-Bewerber. Die KI bewertet, sortiert und entwirft; du prüfst und entscheidest. career-ops entwirft und füllt aus, reicht aber nie etwas ein. Du klickst auf Absenden. Genau dieses Human-in-the-Loop-Design ist der Kern der Sache.

**Ist career-ops kostenlos und Open Source?**
Ja. career-ops ist kostenlos und Open Source, und für Bewerber:innen wird es das immer bleiben. Es ist die erste Referenzimplementierung des [CareerOps-Manifests](https://career-ops.org/manifesto). Lies es, und wenn es sagt, woran du glaubst, unterschreib es.

## Über den Autor

Ich bin [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), ehemaliger Gründer: Ich habe ein Unternehmen aufgebaut und verkauft, das bis heute mit meinem Namen läuft. Ich habe career-ops gebaut, um meine eigene Jobsuche zu steuern, und es hat funktioniert: Es hat mir eine Stelle als Head of Applied AI eingebracht. Sechs Monate später habe ich diese Stelle aufgegeben, um mich in Vollzeit dem Aufbau von career-ops zu widmen.

Neugierig, wie ein Repository dieser Größe von einer Flotte von KI-Agenten gepflegt wird, während ein Mensch über jeden Merge entscheidet? Lies [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet).

Mein Portfolio und weitere Open-Source-Projekte → [santifer.io](https://santifer.io)

Wikidata: [Santiago Fernández de Valderrama Aparicio](https://www.wikidata.org/wiki/Q138710224) · [career-ops](https://www.wikidata.org/wiki/Q139007988).

## Haftungsausschluss

**career-ops ist ein lokales Open-Source-Tool, KEIN gehosteter Service.** Mit der Nutzung dieser Software erkennst du an:

1. **Du kontrollierst deine Daten.** Dein Lebenslauf, deine Kontaktdaten und persönlichen Daten bleiben auf deinem Rechner und werden direkt an den KI-Anbieter gesendet, den du auswählst (Anthropic, OpenAI usw.). Wir sammeln, speichern oder sehen keine deiner Daten.
2. **Du kontrollierst die KI.** Die Standard-Prompts weisen die KI an, Bewerbungen nicht automatisch abzusenden, aber KI-Modelle können sich unvorhersehbar verhalten. Wenn du die Prompts änderst oder andere Modelle nutzt, tust du das auf eigenes Risiko. **Prüfe KI-generierte Inhalte immer auf Richtigkeit, bevor du sie absendest.**
3. **Du hältst dich an die AGB Dritter.** Du musst dieses Tool im Einklang mit den Nutzungsbedingungen der Karriereportale verwenden, mit denen du interagierst (Greenhouse, Lever, Workday, LinkedIn usw.). Nutze dieses Tool nicht, um Arbeitgeber zu spammen oder ATS-Systeme zu überlasten.
4. **Keine Garantien.** Bewertungen sind Empfehlungen, keine Wahrheit. KI-Modelle können Kenntnisse oder Erfahrungen halluzinieren. Die Autor:innen haften nicht für Beschäftigungsergebnisse, abgelehnte Bewerbungen, Kontosperren oder andere Folgen.

Siehe [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) für alle Details. Diese Software wird unter der [MIT-Lizenz](LICENSE) „wie besehen“ bereitgestellt, ohne Gewährleistung jeglicher Art.

## Mitwirkende

<a href="https://github.com/career-ops-hq/career-ops/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=career-ops-hq/career-ops&v=2" />
</a>

Alle, die Code, Dokumentation, Übersetzungen oder Tests beigesteuert haben, stehen in
[CONTRIBUTORS.md](CONTRIBUTORS.md), einschließlich der Beiträge ohne Code, die
die Grafik oben nicht zeigen kann.

Mit career-ops eingestellt worden? [Teile deine Geschichte!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml)

## Lizenz & Trademark

Der Code steht unter der [MIT](LICENSE)-Lizenz. Der Name und die Marke
„career-ops“ unterliegen der [Trademark Policy](TRADEMARK.md): offen
für die Community-Nutzung, reserviert für kommerzielle Produktnamen und
Endorsements.

## Sternenverlauf

<p align="center">
  <a href="https://warpchart.dev/hq">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://warpchart.dev/api/chart?theme=dark&v=3">
      <img alt="Live star telemetry of career-ops-hq/career-ops" src="https://warpchart.dev/api/chart?theme=light&v=3" loading="lazy">
    </picture>
  </a>
</p>

<p align="center"><sub>Erstellt und gepflegt von <a href="https://santifer.io">Santiago Fernández de Valderrama Aparicio</a> (<a href="https://github.com/santifer">@santifer</a>)</sub></p>

## Kontakt

[![Website](https://img.shields.io/badge/santifer.io-000?style=for-the-badge&logo=safari&logoColor=white)](https://santifer.io)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/in/santifer)
[![X](https://img.shields.io/badge/X-000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/santifer)
[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/8pRpHETxa4)
[![Email](https://img.shields.io/badge/Email-EA4335?style=for-the-badge&logo=gmail&logoColor=white)](mailto:hi@santifer.io)