ablehnungs_muster
Analysiert Ablehnungsmuster bei deinen Bewerbungen.
Zeigt Trends bei Ablehnungen: welche Firmen, welche Gründe, und leitet daraus Verbesserungsvorschläge ab.
A complete German-language job-application workspace behind Claude Desktop — profile, job search across configured portals, applications pipeline, documents, calendar and statistics, all in one local database.
LABSCO SUMMARY
A CV reviewer that has not seen the posting, and a tracker that cannot say who you spoke to two weeks ago, are the two halves this puts together — the fit analysis and the interview preparation run against your real profile and the real job text. Two things to be clear on before you start: 35 job sources are configured but only around 8 currently deliver reliably, with the rest visibly marked as broken rather than quietly failing; and the core — applications, documents, appointments, statistics — works with no AI at all if you only want a better place than a spreadsheet.
An MCP server and dashboard for running a job search in the German-speaking market. It holds your profile, the postings you found, every application with its timeline and follow-ups, your documents, contacts and interview dates — and exposes them to Claude so the coaching side (CV review, fit analysis, interview simulation) has the actual material to work from. Everything is stored in one local SQLite file.
ersterfassung_starten, profil_bearbeiten, profil_ueberpruefen, profil_zusammenfassung, profil_exportieren, profil_wechseln, profile_auflistensuchkriterien_setzen, scoring_konfigurieren, jobsuche_starten, jobsuche_status, stellen_anzeigenfit_analyse, skill_gap_analyse, gehalt_extrahieren, gehalt_marktanalyse, firmen_recherche, stelle_bewertenbewerbung_erstellen, bewerbung_status_aendern, bewerbungen_anzeigen, bewerbungs_uebersicht, nachfass_planen, nachfass_anzeigendokumente_zur_analyse, dokumente_batch_analysieren, bewerbungs_dokumente_erkennen, lebenslauf_exportieren, anschreiben_exportierenablehnungs_muster, statistiken_abrufen, bewerbungsbericht_exportieren, branchen_trendsworkflow_starten, jobsuche_workflow_startenAPP- for an application, JOB- for a posting, DOC- for a document, MTG- for a meeting and CON- for a contact, with the older bare hex ids still acceptedClaude Desktop, which is free (Claude Code also works on Linux, but the installer only sets up Claude Desktop). The application itself costs nothing and stores everything locally in pbp.db; no server, no account, no cloud, and deleting that file deletes everything. On Windows 10/11 download the release ZIP and double-click INSTALLIEREN.bat; on macOS 12+ install Python 3.11+ first and run INSTALLIEREN.command; on Linux clone and run installer/install.sh. Each installer also writes the entry into Claude Desktop's configuration, so there is no client block to copy. It is built for the German-speaking market only: tools, workflows, portals and interface are all in German. Data does leave the machine when you use Claude — the relevant profile and posting text is sent as part of the conversation, as with any Claude chat.
Follow the published steps
USE CASES
Run the guided intake, or upload your existing CV and let it extract the profile, then check what is still missing before you search anything.
Set must-have, plus and exclusion keywords, tune the scoring to what actually matters to you, and read the results already ranked.
Run the point-by-point fit analysis and the skill gap against the posting, and look up the company before spending an evening on a cover letter.
Export a CV with skills ordered by what this job asks for, and a cover letter written from the posting rather than from a template.
Keep each one's status current, schedule the follow-up when you send it, and read what is due rather than remembering it.
Read the pattern across your rejections alongside response rates and times, instead of guessing which part of the process is failing.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
ablehnungs_musterAnalysiert Ablehnungsmuster bei deinen Bewerbungen.
Zeigt Trends bei Ablehnungen: welche Firmen, welche Gründe, und leitet daraus Verbesserungsvorschläge ab.
ablehnungsgruende_anzeigenListet alle Ablehnungsgruende (Standard + Custom) mit Verwendungs-Haeufigkeit (#663 C20).
ablehnungsgrund_aktivieren_setzenAktiviert/Deaktiviert einen Ablehnungsgrund (#663 C20).
Deaktivierte Gruende werden nicht mehr in stelle_bewerten akzeptiert (Treffer fallen auf 'sonstiges' zurueck), bleiben aber in ablehnungsgruende_anzeigen() sichtbar mit is_active=False und in den Statistiken erhalten.
ablehnungsgrund_anlegenLegt einen neuen Custom-Ablehnungsgrund an (#663 C20).
Wenn der Grund schon existiert (gleicher Label im Profil-Scope), wird das gemeldet ohne Duplikat anzulegen.
ablehnungsgrund_loeschenLoescht einen Ablehnungsgrund (#663 C20, beta.92).
Wenn der Grund bereits Stellen zugeordnet ist (jobs.dismiss_reason), MUSS neu_zuordnen_zu einen anderen Grund nennen — diese Stellen werden dann darauf umgehaengt, damit keine Stelle ohne gueltigen Grund zurueckbleibt. Ohne Verwendung wird direkt geloescht.
ablehnungsgrund_umbenennenBenennt einen Ablehnungsgrund um — z.B. zur Tippfehler-Korrektur (#663 C20).
beta.92: bereits gespeicherte dismiss_reason-Werte in der jobs-Tabelle werden JETZT mit umgeschrieben — ein Tippfehler verschwindet damit komplett aus den Daten, statt als Karteileiche zurueckzubleiben. Kollidiert das neue Label mit einem bestehenden Grund, werden beide zusammengefuehrt (Merge).
aehnliche_stellen_findenFindet aehnliche Stellen zu einer gegebenen Stelle (#580).
Algorithmus: Token-Overlap zwischen Title+Description. Bewerbungen und Stellen mit gleichem Hash werden ausgeschlossen. Liefert zusaetzlich den Outcome-Status (erfolgreich/abgelehnt/aussortiert) wenn vorhanden — als Lern-Signal.
analyse_plan_erstellenErstellt einen Analyse-Plan BEVOR die eigentliche Extraktion startet.
Zeigt:
Rufe dieses Tool ZUERST auf, bevor du mit der Analyse beginnst.
v1.7.0-beta.59 (#635): Response-Payload reduziert (nur 3 Datei- Vorschauen pro Batch statt aller). Byte-Counter nutzt CAST AS BLOB damit UTF-8-Sonderzeichen korrekt gezaehlt werden.
v1.7.0-beta.79 (#657 E16): Default-Filter lifecycle='aktiv'. Archivierte/veraltete Dokumente tauchen nicht mehr im Plan auf — sie sind ausgeblendet, aber via archiv=True einsehbar.
anschreiben_exportierenExportiert ein Anschreiben als DOCX (Default), PDF, Markdown oder TXT-Datei.
Nimmt den fertigen Anschreiben-Text und erzeugt ein formatiertes Dokument mit Absender, Datum, Betreffzeile und Text.
Default ist DOCX, weil ein direkt generiertes PDF typischerweise an Schrift, Layout und Formulierung als KI-generiert erkennbar ist. DOCX erlaubt das manuelle Nachbearbeiten im eigenen Template vor dem Versand.
antwort_formulierenFormuliert eine kurze Antwortmail für Recruiter-Kontakte.
Nicht für vollständige Anschreiben, sondern für kurze Antworten auf:
aufgaben_uebersichtv1.7.12 (#815, D35): ALLE drei Aufgaben-Toepfe in einer Sicht.
Todos, Nachfassungen (follow_ups) und anstehende Termine sind fuer den Nutzer dasselbe — "was muss ich tun" — fuer das System aber drei Tabellen mit drei Tool-Familien. Diese Sicht vereint sie mit herkunft-Feld und gruppiert nach Faelligkeit (ueberfaellig / heute / diese_woche / spaeter / ohne_faelligkeit).
Belegt, warum das zaehlt: die beiden am laengsten festhaengenden Bewerbungen des Bestands waren exakt die mit den aeltesten ueberfaelligen, UNSICHTBAREN Nachfassungen.
aufwand_uebersichtAggregiert den Aufwand pro Bewerbung oder ueber alles (#568).
Liefert: Reisekosten brutto/erstattet/netto, Vorbereitungszeit-Summe in Minuten, Termin-Dauer in Minuten, Anzahl Termine, Summe sonstiger Kosten.
ausbildung_hinzufuegenFügt eine Ausbildung, Studium oder Weiterbildung hinzu.
automatik_setzenSetzt die Intervalle der Hintergrund-Automatik (#677/#678).
Erlaubte Werte: 0 (aus), 1, 3, 7, 14, 30 Tage. None = unveraendert.
automatik_statusStatus der Hintergrund-Automatik (#677/#678).
Zwei Tasks mit Intervall in Tagen (0 = aus):
lernen: Ollama analysiert Aktivitaet + Dokumente (Pattern-Lernen).jobsuche: die INTERNE Jobsuche (nur Scraper; Browser-/Login- Quellen bleiben manuell ueber Claude-in-Chrome).Liefert je Task Intervall, letzten und naechsten Lauf. Laeuft nur, solange Claude Desktop / der MCP-Server offen ist (kein Dienst).
beschreibungen_nachladen_bestandLaedt abgeschnittene Anzeigentexte im Bestand nach (#952).
Bis v1.7.22 kappte jeder Quellen-Adapter den Text bei exakt 2000 Zeichen, bevor er gespeichert wurde. Betroffen ist damit der gesamte Altbestand — und weil der Refetch selbst kappte, half auch wiederholtes Nachladen nicht.
Sinnvoll erst NACH v1.7.23: vorher holt der Lauf denselben halben Text zurueck.
bewerbung_bearbeitenBearbeitet eine bestehende Bewerbung (Felder nachträglich ändern/ergänzen).
Nur die angegebenen Felder werden geändert, leere Felder bleiben unverändert.
STRIKTE FELDTRENNUNG (v1.7.0-beta.32 / #588):
stellenbeschreibung_original = wortgetreuer Originalwortlaut der Stellenanzeige (read-mostly). Hier KEINE Notizen, keine Recherche, kein Vermittler-Kontext. Wird in description_snapshot gespeichert und ist Grundlage fuer Anschreiben/Fit-Analyse/CV.notes = eigene Recherche, Termin-Vorbereitung, Fragenlisten, Vermittler-Kontext, Endkunde-Mutmassungen. Mutable.Beim erstmaligen Setzen von stellenbeschreibung_original wird snapshot_date auf jetzt gesetzt.
bewerbung_detailsZeigt alle Details einer Bewerbung: Stellenbeschreibung, Timeline, Notizen, Dokumente.
Das vollständige Dossier — alles auf einen Blick für Interview-Vorbereitung.
bewerbung_erstellenErstellt eine neue Bewerbung (manuell oder aus einer gefundenen Stelle).
EINSTIEGSFRAGE (#170): Frage den User zuerst: "Hast du dich bereits beworben, oder möchtest du dich bewerben?"
bewerbung_event_datum_setzenv1.7.0-beta.60 (#631): Korrigiert das Datum eines Status-Wechsel-Events.
Use Case: User hat den Status erst spaeter eingetragen als die eigentliche Aenderung passiert ist (z.B. heute 'abgelehnt' geklickt, aber Absage kam am 2026-04-15). Mit diesem Tool laesst sich das Event-Datum nachtraeglich korrigieren — Statistik (Reaktionszeit etc) wird damit korrekt.
bewerbung_loeschenLöscht eine Bewerbung und alle zugehörigen Events/Timeline-Einträge.
ACHTUNG: Diese Aktion kann nicht rückgängig gemacht werden!
bewerbung_notizFügt eine Gesprächsnotiz mit Timestamp zur Bewerbungs-Timeline hinzu.
Ideal für: Interview-Notizen, Telefonate, E-Mail-Zusammenfassungen, Feedback nach Gesprächen, nächste Schritte.
bewerbung_status_aendernÄndert den Status einer Bewerbung (Bewerbungsstatus ändern/aktualisieren).
Auch findbar als: status ändern, bewerbung aktualisieren, application status update, interview eingetragen, absage melden, angebot erhalten, zurückgezogen.
Status-Journey (#170): in_vorbereitung -> beworben -> eingangsbestaetigung -> interview -> zweitgespraech -> interview_abgeschlossen -> angebot -> angenommen (von jedem Status auch: abgelehnt, zurueckgezogen)
bewerbung_stelle_entknuepfenEntfernt eine Stellen-Verknuepfung von einer Bewerbung.
bewerbung_stelle_verknuepfenVerknuepft eine Bewerbung mit einer (zusaetzlichen) Stelle (#472).
Use-Case: Eine Bewerbung kann sich auf MEHRERE Stellen-Versionen beziehen — z.B. wenn eine Firma die Stelle re-postet, oder wenn man sich gleichzeitig auf zwei verwandte Stellen bewirbt (Vermittler + Endkunde, oder Senior + Lead Variante).
bewerbung_stellen_anzeigenListet alle Stellen, die mit einer Bewerbung verknuepft sind (#472).
Wenn die Bewerbung ein klassisches applications.job_hash hat, ist es als is_primary=True hier mit drin (durch Migration).
bewerbung_stil_trackenSpeichert den Anschreiben-Stil einer Bewerbung für A/B-Tracking.
Damit kannst du später analysieren, welcher Stil bessere Rücklaufquoten hat.
bewerbung_zu_anfrage_konvertierenKonvertiert einen faelschlich angelegten Bewerbungseintrag zu einer abgelehnten Recruiter-Anfrage.
Wann nutzen: Beim Audit der Bewerbungsliste faellt auf, dass ein Eintrag mit Status 'zurueckgezogen' oder 'abgelehnt' eigentlich nie eine Bewerbung war — es war nur eine Anfrage die du sofort abgelehnt hast. Dieses Tool:
bewerbungen_anzeigenZeigt erfasste Bewerbungen mit Status und Timeline.
Standardmäßig werden zurückgezogene, abgelehnte und abgelaufene Bewerbungen ausgeblendet. Setze archiv=True um sie zu sehen.
bewerbungs_dokumente_erkennenAnalysiert Dateinamen und erkennt Bewerbungs-Zuordnungen.
Erkennt aus firmenspezifischen CVs und Anschreiben:
bewerbungs_stellen_abgleichenv1.7.9 (#764): Gleicht applications.job_hash und application_jobs ab.
Hintergrund: Die Junction-Tabelle aus #472 wurde bei der Migration v34 EINMALIG befuellt. Seitdem lief beides auseinander — die UI liest applications.job_hash, bewerbung_stellen_anzeigen liest die Junction. Folge: nach dem Umhaengen einer Bewerbung auf einen Repost zeigte die Oberflaeche weiter die alte Version mit totem Link.
Fuehrend ist application_jobs. Geheilt werden vier Faelle:
job_hash gesetzt, kein Junction-Eintrag -> Eintrag (is_primary=1) nachtragen.job_hash leer -> aus der primaeren Verknuepfung zurueckschreiben.job_hash wird darauf gezogen.is_primary pro Bewerbung -> auf genau einen normalisieren (juengste Verknuepfung gewinnt).Zusaetzlich werden verwaiste Junction-Zeilen gemeldet (Bewerbung oder Stelle existiert nicht mehr) — geloescht werden sie nur mit dry_run=False.
bewerbungsbericht_exportierenExportiert einen professionellen Bewerbungsbericht als PDF oder Excel (#173).
Enthält: Executive Summary, Status-Uebersicht, Quellenanalyse, detaillierte Bewerbungsliste, Fit-Score-Verteilung und Keyword-Analyse. Mit PBP-Branding und Inhaltsverzeichnis.
Ideal fuer: Arbeitsamt-Dokumentation, eigene Analyse, Berater.
blacklist_anwendenWendet die aktuelle Blacklist retroaktiv auf alle aktiven Stellen an (#559).
Wenn die Blacklist NACH einer Jobsuche erweitert wird, bleiben Stellen der neuen Blacklist-Firmen weiter aktiv. Dieses Tool sortiert sie nachtraeglich aus, ohne die Suche neu starten zu muessen.
blacklist_verwaltenVerwaltet die Blacklist (Firmen und Keywords die bei der Jobsuche automatisch aussortiert werden).
WICHTIG (#168): Die Blacklist ist NUR für harte Ausschlüsse gedacht:
Individuelle Ablehnungsgründe (zu_weit, zu_junior, etc.) gehoeren NICHT hierher! Diese werden automatisch bei stelle_bewerten() als dismiss_reason gespeichert.
branchen_trendsAnalysiert gefragte Skills und Technologien in den gesammelten Stellenangeboten.
Zählt Skill-Keywords in allen aktiven Job-Beschreibungen und vergleicht mit deinem Profil (Match/Gap-Analyse).
custom_quelle_hinzufuegenEigene Karriereseiten-URL als Handoff-Quelle anlegen (B16/#627).
BEWUSST kein Auto-Scraping: Karriereseiten sind zu verschieden fuer stabile automatische Extraktion (Master-Plan-Optimierung, B18- Begruendung). Stattdessen: PBP prueft die Erreichbarkeit im quellen_health_check mit und liefert jederzeit den Browser-Handoff (URL + Extraktions-JS) — Claude zieht die Stellen strukturiert und legt sie mit stelle_manuell_anlegen an.
custom_quelle_loeschenEntfernt eine Custom-Quelle (B16/#627).
custom_quellen_anzeigenZeigt eigene Karriereseiten-Quellen inkl. Browser-Handoff (B16/#627).
diagnose_befund_abweisenWeist einen Vollstaendigkeits-Befund DAUERHAFT ab (#825, D32).
Der Befund kommt bei keinem spaeteren pbp_diagnose-Lauf wieder — ein weggeklickter Hinweis, der wiederkehrt, wird nach dem dritten Mal ignoriert und entwertet auch die berechtigten. Die IDs stehen in pbp_diagnose() unter interview_vollstaendigkeit.
dokument_aktion_ausfuehrenFuehrt die fuer ein Dokument vorgeschlagene Aktion aus (#643 E11).
Wrapper um bestehende MCP-Tools — Claude muss nicht selber wissen welches Tool fuer welche Aktion zustaendig ist. Liefert das konkrete Ergebnis des delegierten Tools zurueck und setzt am Ende extraction_status='angewendet' fuer das Dokument.
Unterstuetzte Aktionen:
profil_extraktion — Hinweis: hierfuer den klassischen Pfad extraktion_starten/extraktion_anwenden nutzen. Dieses Tool liefert dafuer nur eine Anleitung zurueck (keine implizite Anwendung, weil Profil-Apply einen User-Bestaetigungsschritt braucht).termin_anlegen — args: {bewerbung_id, datum, uhrzeit?, plattform?, link?, ort?}. Delegiert an meeting_hinzufuegen().bewerbung_status_setzen — args: {bewerbung_id, neuer_status, ablehnungsgrund?, notizen?}. Delegiert an bewerbung_status_aendern().eingangsbestaetigung — args: {bewerbung_id, notizen?}. Setzt Status auf eingangsbestaetigung.bewerbung_erfassen — args: {firma, titel, url?, status?}. Delegiert an bewerbung_erstellen().noop_korrespondenz_abschliessen — keine externe Aktion, setzt nur extraction_status='angewendet'. Identisch zur Wirkung von dokumente_korrespondenz_abschliessen fuer dieses eine Doku.dokument_archivierenArchiviert ein Dokument — weiche Markierung, kein Loeschen (#657 E16).
Nutze dies, wenn ein Dokument aus den Standard-Analyse-Ansichten ausgeblendet werden soll, aber erhalten bleiben muss (z.B. reine Benachrichtigungs-Mails, erledigte Korrespondenz, Rauschen).
Sicherheits-Hinweis: DB-only. Die physische Datei auf der Platte wird NIE angefasst. Reversibel ueber dokument_reaktivieren.
dokument_entverknuepfenEntfernt die Verknuepfung eines Dokuments zu einer Bewerbung (#447).
Nutze dies, wenn eine automatische oder manuelle Zuordnung falsch ist und das Dokument wieder 'unverknuepft' erscheinen soll. Das Dokument selbst bleibt erhalten — nur die Verknuepfung wird geloest.
dokument_loeschenLoescht ein Dokument komplett — DB-Eintrag und physische Datei (#447).
ACHTUNG: Nicht rueckgaengig zu machen. Beim ersten Aufruf ohne Bestaetigung wird nur eine Rueckfrage zurueckgegeben.
dokument_ocr_ausfuehrenFuehrt OCR fuer ein gescanntes PDF aus (E19/#750, v1.8.0-beta.0).
Nutzt die Tesseract-Komponente (I10) — KI-frei, laeuft komplett lokal. Der erkannte Text wird mit Provenienz-Header gespeichert (wie dokument_text_setzen). Typischer Einsatz: ein frueher hochgeladenes Zeugnis ohne Text-Ebene nachziehen, nachdem die Komponente installiert wurde.
Ist die Komponente nicht installiert, kommt ein ANGEBOT zurueck — den User fragen, nie ungefragt installieren.
dokument_profil_extrahierenLiest den extrahierten Text eines hochgeladenen Dokuments und gibt ihn zur Analyse zurück. Claude soll daraus Profildaten ableiten.
WORKFLOW:
dokument_reaktivierenSetzt ein archiviertes/veraltetes Dokument wieder auf aktiv (#657 E16).
Gegenstueck zu dokument_archivieren und zum Auto-Veralten-Hook. Ist idempotent: wenn das Doku bereits aktiv ist, wird das gemeldet.
dokument_status_setzenSetzt den Extraktions-Status eines Dokuments manuell (#447).
Nutze dies z.B. nachdem du eine tiefere Analyse abgeschlossen hast und das Dokument als 'angewendet' markieren willst, ohne extraktion_anwenden noch einmal durchlaufen zu lassen.
dokument_text_setzenSetzt den extrahierten Text eines Dokuments nachtraeglich (#750, E18).
Fuer Faelle, in denen der Import keinen Text liefern konnte — typisch: gescannte PDFs ohne Text-Layer, deren Inhalt nachtraeglich per OCR gewonnen wurde. NIE mehr Direkt-SQL dafuer nutzen.
PROVENIENZ-PFLICHT: quelle beschreibt, woher der Text stammt (z.B. 'OCR via Tesseract 5.4.0, deu+eng, OSD-Rotationskorrektur'). Sie wird dem Text als Header vorangestellt, damit spaeter erkennbar bleibt, dass es kein Original-Textlayer ist.
dokument_typen_anzeigenListet alle bekannten Dokumenten-Typen + Aktion-Vorschlag (#655 E14).
Hilft Claude und User beim Discovery:
dokument_verknuepfenVerknuepft ein hochgeladenes Dokument mit einer Bewerbung.
Damit wird das Dokument (z.B. Lebenslauf, Anschreiben, Interview-Vorbereitung) direkt der Bewerbung zugeordnet und erscheint in bewerbung_details().
dokumente_batch_analysierenAnalysiert den nächsten Batch von Dokumenten — effizient und Token-sparend.
Erkennt PDF/DOCX-Duplikate automatisch und überspring sie. Sortiert Dokumente nach Größe (kleinste zuerst) für optimale Batch-Füllung.
WORKFLOW:
v1.7.0-beta.59 (#635): Defaults nach unten korrigiert (max_text_bytes 50k -> 30k, max_dokumente 10 -> 8). Neuer Parameter max_bytes_per_doc (default 8000) — wenn ein einzelnes Dokument groesser ist wird der Text getrunkated mit Marker. Vorher konnte ein einzelnes 200KB-PDF die ganze MCP-Response sprengen und in den 4-Minuten-Timeout laufen.
dokumente_bulk_archivierenArchiviert mehrere Dokumente in einem Rutsch mit Filter (#657 E16).
Sicherheits-Hinweise:
lifecycle. Keine Dateien werden angefasst.max_treffer: schuetzt vor versehentlich riesigen Operationen. Default 200 — wenn mehr in Frage kaemen, wird die Liste begrenzt und ein Hinweis ausgegeben.lifecycle='aktiv' werden archiviert. Bereits archivierte/veraltete bleiben unberuehrt.dokumente_bulk_markierenMarkiert mehrere Dokumente gleichzeitig als analysiert.
Ideal für Dokumente die offensichtlich keine neuen Profildaten enthalten (z.B. firmenspezifische CV-Varianten wenn das Basisprofil schon vollständig ist, oder Duplikate).
dokumente_korrespondenz_abschliessenSchliesst Korrespondenz-Dokumente ab — basis_analysiert/analysiert -> angewendet (#658, E15).
Hintergrund: Dokumente ohne Profildaten (Absagen, Einladungen, Recruiter-Anfragen, Benachrichtigungen) durchlaufen nie extraktion_anwenden(). Sie bleiben deshalb dauerhaft im basis_analysiert-Bucket haengen und tauchen bei jedem analyse_plan_erstellen()-Lauf erneut auf. Dieses Tool raeumt sie in einem Rutsch ab — Status wird auf angewendet gehoben, damit sie aus dem Plan verschwinden. Physische Dateien bleiben unberuehrt; Verknuepfungen zu Bewerbungen bleiben erhalten.
Sicherheits-Hinweise:
extraction_status + last_extraction_at. Es werden keine Dateien gelesen, geschrieben oder geloescht._KORRESPONDENZ_DOC_TYPES). Lebenslaeufe, Anschreiben, Projektlisten u.a. werden NIE durch dieses Tool angefasst — die brauchen extraktion_anwenden().dry_run=False wird umgesetzt.dokumente_ohne_bewerbungv1.7.12 (#797, E20): findet lose Dokumente samt Zuordnungs- Vorschlag — die Frage 'welche Dokumente haengen an keiner Bewerbung, obwohl es die passende gibt?' war vorher NUR per Direkt-SQL beantwortbar (#514-Verstoss; belegt: 48 von 223 lose, 9 davon gehoerten nachweislich zu einer Bewerbung).
Drei Verdachtssignale, staerkstes zuerst: das Geschwister- Dokument desselben Mail-Threads haengt bereits an einer Bewerbung (Betreff-Stamm-Abgleich); der Dateiname enthaelt eine Firma aus dem Bewerbungsbestand; der Dokumenttyp gehoert fast immer zu einem Vorgang (Absage, Angebot, Antwort, ...).
KEIN auto_fix — Zuordnung ist eine inhaltliche Entscheidung. Verknuepfen nach Bestaetigung: dokument_verknuepfen(dokument_id, bewerbung_id). Zusaetzlich werden kaputte Verknuepfungen gemeldet (zeigen auf keine existierende Bewerbung, #796-Anschluss).
dokumente_routing_plan_erstellenErstellt einen Routing-Plan: was sollte mit jedem Dokument passieren? (#643 E11)
Wertet pro noch-nicht-vollstaendig-verarbeitetes Doku den doc_type aus und liefert die passende PBP-Aktion (Profil- Extraktion, Termin-Anlage, Status-Wechsel, ...). Aufbauend auf services/document_handlers.handle_doc() aus E14 (beta.77).
Nutzung: Claude ruft das Tool VOR dokumente_batch_analysieren (im Routing-Modus) auf, um zu wissen welche Aktionen pro Typ anstehen. Pro Aktion gruppiert + Vorschlaege fuer den naechsten Tool-Aufruf.
dokumente_zur_analyseListet alle Dokumente mit extrahiertem Text auf — auch bereits analysierte.
Zeigt den Extraktions-Status jedes Dokuments an, damit auch wiederholte Extraktion möglich ist. Nutze extraktion_starten(document_ids=[...]) um bestimmte Dokumente erneut zu extrahieren.
v1.7.0-beta.79 (#657 E16): Default-Filter lifecycle='aktiv'. Mit archiv=True werden archivierte/veraltete Dokumente mit aufgelistet — analog zu bewerbungen_anzeigen(archiv=True).
elwosa_fragenStellt der lokalen Elwosa-KI eine Frage — Claude ist der Vermittler (#774).
Elwosa bekommt automatisch den relevanten PBP-Kontext mit (Profil-Kurzfassung, Kern-Statistiken, vom User BESTAETIGTE learned_insights). Ohne diesen Kontext waere die Antwort wertlos.
⛔ VERHALTENSREGELN FUER CLAUDE:
elwosa_lesenLiest die letzten Elwosa-Nachrichten aus dem Stream.
Use Cases:
elwosa_linie_vorschlagenSchlaegt eine neue Linie fuer den Elwosa-Pool vor.
Tonfall-Check + Validierung. Wenn auto_aktivieren=False (Default): Linie landet in 'pending'-Bucket, User muss in Settings genehmigen. Wenn auto_aktivieren=True: Linie kommt direkt in Pool des aktiven Profils.
elwosa_pausePausiert Elwosa fuer X Minuten.
Use Case: User: 'Sag Elwosa er soll mal eine Stunde Ruhe geben'
Wirkung: Trigger-Engine ueberspringt automatische Linien fuer die Pause-Dauer. Eine einzige Pause-Nachricht wird gepostet ('Pausiert. Kein Stress, ich auch.'), dann Stille bis Frist.
elwosa_prompt_kopierenZeigt den vollstaendigen Prompt, den Elwosa bekaeme — OHNE ihn auszufuehren (#774).
Zwei Anwendungsfaelle: Debugging (welcher Kontext kommt wirklich an?) und Prompt-Entwicklung (anpassen und Wirkung pruefen, bevor etwas fest eingebaut wird).
elwosa_schreibenSchreibt eine Nachricht IM NAMEN VON Elwosa in den Stream.
Erscheint im Sidebar-Chat als waere sie von Elwosa selbst getriggert. WICHTIG: Tonfall wird hart validiert.
Sprach-DNA-Regeln (siehe docs/elwosa-character.md):
Use Cases:
elwosa_statusLiefert Elwosa-Status + aktuelle Stimmung + Trigger-State.
Use Cases:
Rueckgabe: is_active, ai_state, is_paused, paused_until, mood, messages_today, tonfall_modus, frequency, pool_size_total, pool_size_pending, last_message_at
elwosa_tonfallStellt den Elwosa-Tonfall um.
email_loeschenLoescht eine E-Mail aus der Datenbank (#445).
email_verknuepfenVerknuepft eine eingegangene E-Mail mit einer Bewerbung (#445).
Nutze dies fuer E-Mails die die Pipeline nicht automatisch zuordnen konnte oder die falsch zugeordnet wurden. Setze bewerbung_id auf den leeren String um die Verknuepfung zu entfernen (E-Mail wird wieder 'unmatched').
emails_anzeigenZeigt E-Mails — entweder zu einer Bewerbung oder alle nicht zugeordneten (#445).
erfassung_fortschritt_lesenLiest den Fortschritt der Profil-Ersterfassung.
Gibt zurück welche Bereiche bereits ausgefüllt sind und welche noch fehlen. Nutze dies zu Beginn einer Ersterfassung um zu prüfen ob es eine angefangene Erfassung gibt die fortgesetzt werden soll.
erfassung_fortschritt_speichernSpeichert den Fortschritt eines Erfassungsbereichs.
Wird automatisch während der Ersterfassung aufgerufen um den Stand zu merken. So kann die Ersterfassung jederzeit unterbrochen und später fortgesetzt werden.
erkenntnis_bestaetigenKuratiert eine Erkenntnis: bestaetigen oder widersprechen (#799).
Widersprochene Erkenntnisse werden nicht geloescht, sondern markiert — dieselbe Fehlableitung wird dadurch nie erneut vorgeschlagen.
erkenntnisse_ableitenLeitet Erkenntnisse aus dem eigenen Bewerbungsverhalten ab (#799/F35).
Regelbasiert und OHNE lokale KI lauffaehig — alle Aussagen entstehen aus Zaehlwerten der eigenen Datenbank: dominante Aussortier-Gruende, Kanal-Unterschiede (welcher Weg fuehrt wirklich zum Interview), Score-Realitaetscheck (hoher Score trotzdem aussortiert), Reaktionszeiten (ab wann ist ein Vorgang praktisch tot) und zeitliche Muster. Jede Aussage traegt Evidenz und eine Konfidenz aus der Fallzahl; bei duenner Datenlage steht die Unsicherheit IN der Aussage.
⛔ GRUNDSATZ: Nichts wird ohne Nutzerbestaetigung wirksam. Dieses Tool leitet ab und legt UNBESTAETIGT ab. Kuratierung ueber erkenntnis_bestaetigen(); Widersprochenes wird nie erneut vorgeschlagen.
v1.7.11 (#799): laeuft mit Wall-Clock-Budget und liefert bei Ueberschreitung ein gekennzeichnetes TEILERGEBNIS, statt den MCP-Server zu blockieren. Speichert in learning_insights — dieselbe Tabelle, aus der sich die Lern-Karte im Dashboard speist (die separate learned_insights aus #784 war ein Fehlgriff und wurde migriert und entfernt).
erkenntnisse_anzeigenZeigt die abgeleiteten Erkenntnisse mit Evidenz und Status (#799).
ersterfassung_startenStartet die Ersterfassung — ein lockeres Interview zur Profilerfassung, wie ein Kaffeegespräch. Kann jederzeit unterbrochen und später fortgesetzt werden.
extraktion_anwendenWendet extrahierte Daten auf das aktive Profil an.
Standardmaessig werden alle Daten automatisch übernommen (auto_apply=True). Nur bei echten Konflikten (Feld hat bereits einen vom User eingegebenen Wert) wird der bestehende Wert beibehalten — es sei denn, konflikte_loesungen enthaelt eine explizite Entscheidung.
extraktion_ergebnis_speichernSpeichert das Ergebnis einer Dokument-Extraktion.
Claude ruft dieses Tool auf, nachdem er die Dokumente analysiert hat. Die extrahierten Daten werden zwischengespeichert, bis der User sie bestätigt oder ablehnt.
extraktion_startenStartet die intelligente Profil-Extraktion für ein oder mehrere Dokumente.
Laedt den extrahierten Text aller angegebenen (oder aller noch nicht analysierten) Dokumente und gibt ihn zusammen mit dem aktuellen Profil zurück, damit Claude die Daten vergleichen und extrahieren kann.
TIPP: Für viele Dokumente nutze stattdessen analyse_plan_erstellen() und dokumente_batch_analysieren() — das ist effizienter.
WORKFLOW:
extraktions_verlaufZeigt den Verlauf aller Dokument-Extraktionen für das aktive Profil.
Nützlich um zu sehen welche Dokumente bereits analysiert wurden und was daraus übernommen wurde.
fachprofil_exportierenv1.7.0-beta.53 (#617): Kombiniertes Dokument 'Fachprofil & Referenzprojekte'.
Anders als lebenslauf_angepasst_exportieren (Lebenslauf- Format mit inline-Projekten unter Stationen) zieht dieses Tool die Projekte als eigene prominente Sektion heraus — nach Stellen-Relevanz sortiert und ausfuehrlicher dargestellt.
Aufbau:
Sinnvoll fuer:
firma_kontextKompletter dokumentierter Stand zu einer Firma in EINEM Aufruf (#753, H18).
⛔ PFLICHT-LOOKUP: Sobald ein Firmenname mit einer WERTUNG faellt ("kenne ich", "war abgesagt", "laeuft noch", "da hatte ich ein Interview", auch beilaeufig in einem Fallback-Vorschlag), rufe ZUERST dieses Tool auf und antworte NUR auf Basis des Ergebnisses. Nie Firmen-Status, Interview-Verlauf oder Absagen aus dem Gedaechtnis behaupten — PBP haelt die dokumentierte Wahrheit.
Liefert: alle Bewerbungen (Titel, Status, Datum, Termine), aktive Stellen, Aussortier-Historie mit Gruenden — die Basis fuer jede Aussage ueber die Firma.
firmen_rechercheRecherchiert Informationen über eine Firma anhand der gesammelten Stellendaten.
Aggregiert alle bekannten Jobs, Standorte, Gehälter und Remote-Level für die angegebene Firma.
fit_analyseDetaillierte Passungsanalyse für eine bestimmte Stelle.
Zeigt welche Keywords matchen, was fehlt, und gibt eine Risikobewertung.
follow_up_bearbeitenv1.7.12 (#816, D34): setzt oder aendert den INHALT einer Nachfassung nachtraeglich.
Bisher gab es dafuer keinen Weg — follow_up_verschieben aendert nur das Datum, und ein leerer Reminder blieb leer. Der Text soll sagen, WAS zu tun ist: an wen, worauf bezogen, ueber welchen Kanal.
follow_up_erledigenMarkiert einen Follow-up (Nachfass-Erinnerung) als erledigt.
Auch findbar als: nachfass erledigt, nachfassen abhaken, follow up done.
follow_up_hinfaelligMarkiert einen Follow-up als hinfaellig (z.B. weil Absage kam, kein Nachfassen mehr noetig).
Auch findbar als: nachfass schliessen, nachfassen entfernen, follow up dismiss.
follow_up_verschiebenVerschiebt ein geplantes Follow-up auf ein neues Datum.
gehalt_extrahierenExtrahiert Gehaltsinformationen aus einer Stellenbeschreibung.
Durchsucht den Text nach Gehaltsangaben (Jahresgehalt, Tagessatz, Stundenlohn). Falls keine Angabe gefunden wird, erstellt eine Schätzung basierend auf Jobtitel und Standort. Speichert die Daten in der DB.
gehalt_marktanalyseAnalysiert Gehaltsdaten aller gesammelten Stellenangebote.
Zeigt Durchschnitt, Median, Spanne — getrennt nach Festanstellung und Freelance. Vergleicht mit deinen Gehaltsvorstellungen.
google_jobs_urlBaut eine Google-Jobs-URL fuer Chrome-in-Claude (#501, #573).
Google Jobs (udm=8) ist der groesste Aggregator in DE und indexiert u.a. StepStone-Stellen. Ein direkter HTTP-Abruf wird von Google zuverlaessig blockiert, ein eingeloggter Chrome-Tab mit Claude-in-Chrome funktioniert aber stabil.
Workflow (v1.7.0-beta.14, #573):
google_jobs_url(keyword="PLM", ort="Hamburg") aufrufenextraction_js strukturierte Job-Daten via javascript_tool() aus dem DOM ziehen (statt Rohtext-Parsing)stelle_manuell_anlegen() uebernehmeninterview_lehren_auswertenQuer-Auswertung ueber ALLE Interview-Reflexionen (#824, D31).
Regelbasiert, ohne Sprachmodell: Antwortarchiv (alle wiederverwendbaren Antworten mit Herkunft), wiederkehrende Selbstkritik und Ueberraschungen (mit Fallzahl — Beobachtung, kein Urteil), Bauchgefuehl gegen tatsaechlichen Ausgang, offene naechste Schritte aus laufenden Verfahren.
Muster werden erst ab 4 Reflexionen ausgewiesen (#798-Regel: zwei Vorkommen sind kein Muster). Nutze das VOR einer Gespraechsvorbereitung — die wiederkehrenden Ueberraschungen sind die Fragen, die in der Recherche bisher fehlten.
interview_reflexion_lesenLiest ALLE Reflexionen zu einer Bewerbung, neueste zuerst (#824).
Leer wenn keine vorhanden. Vor einem Folgegespraech lesen: was lief beim letzten Mal, wer war dabei (Kontakte am Termin), was waren die offenen Punkte.
interview_reflexion_loeschenEntfernt eine versehentlich angelegte Reflexion (#824).
Die IDs stehen in interview_reflexion_lesen bzw. interview_reflexionen_anzeigen.
interview_reflexion_speichernv1.7.0-beta.49 (#464): Strukturierte Reflexion nach einem Interview.
Statt Freitext in bewerbung_notiz wird hier ein strukturierter Fragebogen abgelegt — wiederverwendbar bei der naechsten Interview-Vorbereitung. Erste Stufe von #452 (Interview- Training-Arc).
v1.7.12 (#824, D31): Jeder Aufruf legt eine NEUE Reflexion an — bei zweistufigen Verfahren gehoert zu jedem Gespraech eine eigene. (Vorher ueberschrieb der zweite Aufruf die erste; die Nachbereitung des Erstgespraechs war damit weg.) Zum Nachbearbeiten einer bestehenden Reflexion reflexion_id uebergeben. Alle Felder optional — zwei ausgefuellte Felder sind besser als keine.
Teilnehmer des Gespraechs werden als Kontakte am TERMIN erfasst: kontakt_verknuepfen(kontakt_id, ziel_typ='meeting', ziel_id=<meeting_id>, rolle='fachlicher Gegenpart'). Unbekannte Namen als Kontakt "Rolle, Name unbekannt" anlegen — die ehrliche Luecke ist wertvoller als ein leeres Feld.
interview_reflexionen_anzeigenListe der letzten Interview-Reflexionen (fuer Lerneffekt vor naechstem Interview).
Sortiert nach updated_at desc. Zeigt firma + stelle + gefuehl + Kurz-Auszug pro Eintrag. Hilft beim Pre-Interview-Lesen: was lief gut bei aehnlichen Stellen, was war ueberraschend.
issue_text_pruefenPFLICHT vor jedem GitHub-Text: prueft gegen den eigenen Bestand.
Sucht Firmen- und Personennamen aus DEINER Datenbank (Bewerbungen, gesichtete Stellen, Kontakte) in einem Text, der nach draussen gehen soll — Issue, Kommentar, Release-Notiz, Fehlerbericht.
jobsuche_startenStartet eine Jobsuche im Hintergrund auf allen konfigurierten Portalen.
VORAUSSETZUNGEN:
Die Suche dauert 5-10 Minuten. Prüfe den Fortschritt mit jobsuche_status(). Ergebnisse danach mit stellen_anzeigen() ansehen.
HINWEIS #488: Wenn aktive Quellen dabei sind, die nur ueber Claude-in-Chrome laufen (LinkedIn, StepStone, XING, Indeed, Monster, Google Jobs), meldet dieses Tool sie im Feld manuelle_quellen zurueck UND ueberspringt sie im Hintergrund-Job — statt auf stumme Timeouts zu laufen. Claude soll den User vor dem Start ueber diese Quellen informieren und ihm empfehlen, sie via Chrome-Extension anzusteuern.
jobsuche_statusPrüft den Fortschritt einer laufenden Jobsuche.
jobsuche_workflow_startenStartet den geführten Jobsuche-Workflow: Suchkriterien prüfen, Quellen aktivieren, Suche starten, Ergebnisse sichten, Bewerbung vorbereiten. Dieser Workflow führt dich Schritt für Schritt durch den gesamten Prozess.
jobtitel_verwaltenVerwaltet einen vorgeschlagenen Jobtitel (ändern, löschen, deaktivieren).
jobtitel_vorschlagenSpeichert vorgeschlagene Jobtitel für das aktive Profil.
Rufe dieses Tool auf nachdem du das Profil analysiert hast, um passende Jobtitel/Stellenbezeichnungen vorzuschlagen. Die Titel werden im Dashboard angezeigt und können vom User bearbeitet werden.
v1.7.4 (#745, F24): Ohne titel generiert die lokale KI (Ollama) die Vorschläge selbst aus dem Profil — falls installiert und aktiv. Sonst kommt ein Hinweis, dass du (Claude) analysieren und mit titel=[...] aufrufen sollst.
WICHTIG: Berücksichtige bei der Analyse:
kalibrierung_backtestBacktest der Suchkriterien gegen die eigene Bewerbungshistorie (#778/C29).
Prueft, wie die AKTUELLEN Kriterien die Vergangenheit bewertet haetten: Score-Verteilung der Stellen, auf die tatsaechlich beworben wurde (positive Labels), gegen eine Zufallsstichprobe der Aussortierten (negative Labels). Liefert einen Schwellen-Vorschlag (niedrigster Bewerbungs-Score x 0,8) und warnt, wenn historische Bewerbungen unter der aktuellen min_score_schwelle laegen.
⛔ GARANTIE: Reine SCHATTENRECHNUNG. Dieses Tool ruft NIEMALS scores_neu_berechnen auf und schreibt keinen einzigen Score in die jobs-Tabelle — egal welche Parameter. Der dry_run-Parameter existiert nur der Konvention wegen; es gibt keinen Schreibmodus.
Nutzung nach jeder Kriterienaenderung: erst Backtest ansehen, dann entscheiden, dann (separat) scores_neu_berechnen().
kennlerngespraech_abschliessenMarkiert das Kennlerngespräch für das aktive Profil als abgeschlossen.
Dieses Signal wird vom Onboarding in der Web-UI ausgewertet, damit nach dem Review direkt zum Schritt "Quellen" weitergegangen werden kann.
keyword_vorschlaegeAnalysiert Bewerbungen vs. abgelehnte Stellen und schlägt Keyword-Anpassungen vor (#184 / #500 v1.6.0-beta.29).
v1.7.4 (#744/#745): Ohne Stellen-Bestand (frisches Profil) kommen die Vorschläge aus dem Profil — lokale KI bevorzugt, sonst Jobtitel-/Skill-Heuristik. Antwortfeld profil_vorschlaege.
Datenquelle (in dieser Reihenfolge):
TF-IDF-aehnliche Spezifitaets-Heuristik: Begriffe die in zu vielen Quellen vorkommen werden abgewertet (Stoppwoerter sind nicht alle Stoppwoerter, manche sind nur "in jeder Stellenbeschreibung haeufig"). Ohne tiefere LLM-Analyse, aber deutlich brauchbarer als die alte Implementierung — siehe v1.7.0 Local-LLM-Roadmap fuer den naechsten Schritt.
ki_features_lesenLiefert den aktuellen Stand der KI-Feature-Toggles.
Acht Schalter: master + 7 Feature-Bereiche (jobsuche, dokumentenanalyse, stellenanalyse, bewerbungserstellung, coaching, ersterfassung, guidance). Default: alles True.
Use Case: User fragt 'welche KI-Features sind bei mir an?' oder Claude will vor einer KI-Operation pruefen ob er darf.
ki_features_setzenAktualisiert KI-Feature-Toggles. Nur uebergebene Werte werden gesetzt.
Args (jeweils True/False, None = unveraendert): master: Master-Switch. False = alle KI-Features blockt. jobsuche: Jobsuche via Claude (Dashboard-Button bleibt immer). dokumentenanalyse: Profildaten aus Dokumenten extrahieren. stellenanalyse: Fit-Analyse, Skill-Gap, Score-Refinement. bewerbungserstellung: Anschreiben + angepasster CV via Claude. coaching: Interview-Sim, Gehaltsverhandlung. ersterfassung: Profil-Gespraech via Claude. guidance: Dashboard-Hinweise die auf Claude verweisen.
komponente_installierenInstalliert eine optionale Komponente — NUR mit User-Zustimmung.
⛔ PFLICHT-ABLAUF (I10-Grundregel, #751): Beim ersten Aufruf bestaetigt=False lassen — das liefert Groesse, Quelle und Lizenz als ANGEBOT. Dieses dem User zeigen und FRAGEN. Erst wenn der User ausdruecklich ja sagt: erneut mit bestaetigt=True aufrufen. Niemals ungefragt bestaetigen.
Die Installation laeuft im Hintergrund (Download ~1-3 Minuten). Fortschritt: komponenten_status().
komponente_pfad_setzenRegistriert eine extern installierte Komponente per Pfad.
Fuer den Offline-/Selbstinstallierer-Fall: Tesseract ist schon da (oder wurde manuell installiert), PBP soll es nutzen. Der Pfad darf aufs Binary oder den Installationsordner zeigen.
komponenten_statusZeigt alle optionalen Komponenten und ihren Zustand (I10, #751).
Komponenten schalten PBP-Kernfunktionen frei — aktuell:
Ollama (Lokale KI) wird mit angezeigt, aber eigenstaendig verwaltet (Einstellungen → Lokale KI).
Naechste Schritte je nach Zustand:
komponente_installieren(name, bestaetigt=True)komponenten_status()kontakt_anlegenLegt einen neuen Kontakt in der Kontaktdatenbank an (#563).
Rollen sind frei waehlbare Tags — Beispiele:
kontakt_anzeigenZeigt Details eines Kontakts inkl. Verknuepfungen.
kontakt_bearbeitenAktualisiert ausgewaehlte Felder eines Kontakts (#563).
kontakt_entknuepfenEntfernt eine Verknuepfung zwischen Kontakt und Ziel.
kontakt_historieHistorie zu einer Person: wer hat schon mal angefragt, wie lief es? (#780)
Sucht ueber Personennamen, E-Mail und Telefonnummer — sowohl in der Kontaktdatenbank als auch in den FREITEXTFELDERN der Bewerbungen (ansprechpartner, kontakt_email). Damit funktioniert die Suche auch fuer den Altbestand, in dem Ansprechpartner nie als Kontakt angelegt wurden. Teilnamen genuegen ("van Wijk" findet "Saskia van Wijk").
Typischer Ausloeser: ein Anruf — "Hier ist <Name>". Erst dieses Tool aufrufen, dann antworten (analog zur firma_kontext-Pflicht #753).
kontakt_kategorie_anlegenLegt eine neue Kontakt-Kategorie an (#608).
kontakt_kategorie_bearbeitenAendert Name oder Farbe einer Kategorie. Nur uebergebene Felder.
kontakt_kategorie_loeschenLoescht eine Kategorie (#608).
is_system=1-Kategorien sind geschuetzt und koennen nicht geloescht werden. Wenn noch zugewiesen: Fehler mit Anzahl betroffener Kontakte.
kontakt_kategorien_auflistenListet alle Kontakt-Kategorien des aktiven Profils mit Farben.
Liefert auch die Anzahl Kontakte pro Kategorie. Default-Kategorien (is_system=1) werden bei Bedarf automatisch angelegt: Recruiter, HR, Ansprechpartner, Endkunde, Vermittler, Referenz, Sonstiges.
kontakt_loeschenLoescht einen Kontakt. bestaetigung=True ist Pflicht.
kontakt_verknuepfenVerknuepft einen Kontakt mit Bewerbung/Meeting/Stelle/Firma.
kontakte_auflistenListet Kontakte, optional gefiltert.
kontakte_aus_bestand_importierenOne-Shot-Migration: scannt alle Bewerbungen + Mails nach Kontakten und legt sie als pending an (User-Genehmigung in UI).
Greift nur wenn lokale AI aktiv. Idempotent — Bewerbungen, die schon einen Contact mit extracted_from='application:<id>' haben, werden uebersprungen.
kontakte_aus_bewerbungen_extrahierenv1.7.0-beta.54 (#605): Reverse-Extraktion von Kontakten aus Bewerbungen.
Erweitert kontakte_aus_bestand_importieren um drei wichtige Quellen:
application_events.notes (Timeline-Notizen mit Gespraechs- partnern)kontakte_zu_bewerbungListe alle Kontakte zu einer Bewerbung (mit Rollen).
kosten_anzeigenListet Kostenpositionen, optional gefiltert (#568).
kosten_erfassenErfasst eine Kosten-Position (z.B. Tool-Abo, Pruefungs-Gebuehr) (#568).
kosten_loeschenLoescht eine Kosten-Position.
lebenslauf_angepasst_exportierenExportiert einen auf die Stelle angepassten Lebenslauf als DOCX.
Erstellt einen Lebenslauf der relevante Skills und Erfahrungen für die Zielstelle hervorhebt und priorisiert. Immer als DOCX, da die finale Formatierung manuell erfolgt.
lebenslauf_bewertenBewertet den Lebenslauf aus 3 Experten-Perspektiven für eine bestimmte Stelle.
Analysiert wie der CV auf einen Personalberater, ein ATS-System und einen HR-Recruiter wirkt. Gibt Score (0-100) pro Perspektive und konkrete Verbesserungsvorschläge zurück. Die Gewichtung der Perspektiven ist einstellbar.
Auch findbar als: CV bewerten, Lebenslauf analysieren, CV check, resume review, 3-Perspektiven-Analyse, Personalberater, ATS, Recruiter.
lebenslauf_exportierenExportiert den Lebenslauf als DOCX (Default), PDF, Markdown oder TXT-Datei.
Erzeugt ein professionell formatiertes Dokument aus dem gespeicherten Profil. Die Datei wird im Bewerbungs-Assistent Datenordner gespeichert.
Default ist DOCX, weil ein direkt generiertes PDF typischerweise an Schrift, Layout und Formulierung als KI-generiert erkennbar ist. DOCX erlaubt es dir, das Dokument im eigenen Template nachzubearbeiten und erst dann zu finalisieren.
linkedin_browser_searchVERALTET: LinkedIn Browser-Suche ist deaktiviert (#159).
LinkedIn blockiert automatisierte Zugriffe zuverlaessig. Nutze stattdessen Claude-in-Chrome Extension:
meeting_aufwand_setzenSetzt Aufwand-Daten an einem bestehenden Termin (#568).
meeting_bearbeitenAktualisiert einen bestehenden Termin (#444).
Nur die angegebenen Felder werden geaendert. Leere Strings bleiben unveraendert. Nutze dies z.B. um einen Termin zu bestaetigen, zu verschieben oder Notizen zu ergaenzen.
meeting_hinzufuegenFuegt einen Termin (Interview, Telefonat, Video-Call) zu einer Bewerbung hinzu (#444).
Nutze dies immer wenn der Anwender einen Gespraechstermin erwaehnt. Das Meeting erscheint anschliessend in bewerbung_details() und im Kalender.
v1.7.11 (#804/D30): Dubletten-Pruefung. Termine entstehen inzwischen aus mehreren Quellen gleichzeitig (Mail-/ICS-Import, Claude, manuelle Eingabe) — ohne Pruefung liegt derselbe Termin doppelt im Kalender und jede Auswertung zaehlt ihn zweimal.
meeting_loeschenLoescht einen Termin (#444).
ACHTUNG: Nicht rueckgaengig zu machen. Beim ersten Aufruf ohne Bestaetigung wird nur eine Rueckfrage zurueckgegeben.
meetings_anzeigenZeigt Termine — entweder fuer eine bestimmte Bewerbung oder kommende im Zeitraum (#444).
nachfass_anzeigenZeigt alle geplanten und fälligen Nachfass-Erinnerungen.
Gruppiert nach: überfällig, heute, diese Woche, später.
nachfass_planenPlant eine Nachfass-Erinnerung für eine Bewerbung.
Erstellt einen Follow-up Eintrag mit Datum und Template-Vorschlag.
v1.7.0-beta.83 (#665): Dubletten-Check. Wenn bereits ein offener Nachfass (typ='nachfass', status='geplant') fuer dieselbe Bewerbung existiert, wird je nach wenn_dublette reagiert:
melden (Default): KEIN neuer Eintrag wird angelegt. Stattdessen liefert das Tool status='dublette_offen' zurueck — mit Details zum bestehenden Nachfass und konkreten Handlungsoptionen. Claude soll dann den User fragen und mit dem expliziten wenn_dublette-Wert erneut aufrufen.vorhandenen_erledigen: bestehenden offenen Nachfass auf gesendet setzen + neuen anlegen. Default-Empfehlung wenn der User aktiv neu plant.vorhandenen_verschieben: bestehenden offenen Nachfass auf das neue Datum aktualisieren statt einen zweiten anzulegen.trotzdem_neu: bestehenden lassen + zusaetzlich neuen anlegen (das alte Verhalten — bewusst zweite Dublette wollen).neues_profil_erstellenErstellt ein komplett neues, leeres Profil und aktiviert es.
Das vorherige Profil bleibt gespeichert und kann später wieder aktiviert werden.
newsletter_quelle_markierenMarkiert eine Mail EINMAL als Job-Newsletter-Quelle (J5.1/#525).
PBP lernt Absender-Domain (+ Betreff-Anfang) — kuenftige Mails dieser Quelle werden beim Eingang automatisch erkannt und ihre Stellen in den Pool uebernommen. Die aktuelle Mail wird direkt mitverarbeitet.
Fuer die grossen Portale (StepStone, LinkedIn, XING, Indeed, Arbeitsagentur, freelance.de, JobLeads) ist das NICHT noetig — die erkennt PBP von selbst. Dieses Tool ist fuer alles andere (Firmen-Newsletter, Nischen-Boersen).
newsletter_verarbeitenExtrahiert Stellen aus einer Newsletter-Mail in den Pool (J5/#525).
KI-frei (Ebene 0): Job-Links bekannter Portale aus der Mail; optionaler Ollama-Fallback nur, wenn die Link-Extraktion leer bleibt. Die Stellen laufen durch die normale Pipeline (Duplikat-Erkennung, Score) mit Quelle newsletter:<label> und erscheinen zunaechst als 'unbewertet' — der Auto-Refetch laedt die Beschreibungen nach (#622/#756/C23 greifen ineinander).
Beim Upload passiert das fuer ERKANNTE Newsletter automatisch — dieses Tool ist fuer Altbestand oder nicht erkannte Formate (danach ggf. newsletter_quelle_markieren, damit PBP die Quelle lernt).
onboarding_hint_dismissMarkiert einen Onboarding-Hint als dauerhaft weggeklickt (#652).
Die Hint-ID wird in profile_settings.onboarding_hints_dismissed gespeichert (JSON-Liste). Beim naechsten onboarding_hints_anzeigen erscheint sie nicht mehr — selbst wenn die Condition weiterhin zutrifft.
onboarding_hints_anzeigenLiefert aktive Onboarding-Hints fuer ungenutzte Features (#652).
Pro Hint wird die Condition geprueft (z.B. "0 Suchprofile + 3+ Bewerbungen"), bereits weggeklickte Hints werden uebersprungen. Frontend zeigt die zurueckgegebenen Hints als kleine Tipp-Cards in den jeweiligen Tabs.
Use Case: User hat Features im Code, kennt sie aber nicht. Statt ihn mit Onboarding-Walkthrough zu nerven kommen die Tipps kontextuell wenn sie wirklich relevant sind (z.B. die Aufwand-Erfassung erst nach 5 Terminen).
Liefert: {hints: [...], anzahl: N}. Bei Fehler eine leere Liste — Hints duerfen nie blocken.
pbp_capabilitiesLiefert eine kuratierte Uebersicht aller PBP-MCP-Faehigkeiten (#514).
ZWECK: Wenn du als KI unklar bist was PBP fuer eine User-Anfrage anbieten kann — RUFE DIESES TOOL AUF, bevor du auf andere Tools (Filesystem, sqlite-MCP, Direct-DB-Write) ausweichst. Direkte Eingriffe in die SQLite-Datei umgehen die PBP-Lifecycle-Logik und korrumpieren die Datenkonsistenz.
pbp_diagnoseFührt einen umfassenden Gesundheitscheck des PBP-Systems durch.
Prüft die Datenbank auf bekannte Probleme, fehlende Daten, Inkonsistenzen und gibt konkrete Handlungsempfehlungen. Ideal wenn etwas nicht funktioniert oder du dir unsicher bist ob alles korrekt eingerichtet ist.
Bei auto_fix=True werden einfache Probleme automatisch behoben.
pbp_grenze_meldenMeldet eine PBP-Tool-Grenze, die ein neues Issue rechtfertigt (#514).
ZWECK: Wenn du als KI eine User-Anfrage hast, fuer die PBP keine passenden Tools bietet — STATT auf Filesystem-MCP, sqlite-MCP oder direkte DB-Writes auszuweichen, melde die Grenze hier.
pbp_mcp_diagnoseLiefert MCP-Tool-Call-Telemetrie fuer Diagnose von Hangern/Timeouts.
Use Case: Wenn ein Tool im Claude Desktop in einen 4-Minuten-Timeout laeuft, hilft dieses Tool zu sehen ob der Server den Tool-Call ueberhaupt empfangen und verarbeitet hat — und wie lange er dafuer brauchte.
Liefert:
phantom_termine_bereinigenFindet Termine, die aus zitierten Mail-Zeitstempeln entstanden (#922).
Belegter Fall: der Import EINER Mail mit Antwortverlauf legte VIER Termine an — die Sendezeiten der zitierten Vorgaengermails, alle mit dem Mail-Betreff als Titel. Sie sind keine Dubletten (die Zeitpunkte liegen weit auseinander), sondern schlicht keine Termine; die #804-Pruefung greift dort nicht.
Ohne Argumente: Report der verdaechtigen Gruppen mit Begruendung. Mit termin_ids + dry_run=False: loescht genau diese Termine.
Sicherheitsnetz: verdaechtig ist nur, was ALLE Merkmale traegt — Mail-Betreff-Praefix im Titel (AW:/Re:/WG:/Fwd:), kein Link, keine Notizen, kein Ort, UND mindestens zwei gleich betitelte Eintraege derselben Bewerbung. Ein einzelner Termin faellt nie darunter. Geloescht wird NUR auf ausdrueckliche Anweisung.
plugins_anzeigenZeigt gekoppelte Plugins und die Ingest-API v1 (J1/#504).
Plugins sind EXTERNE Programme (Thunderbird-Add-on, Watch-Folder- Skript, ...), die ueber die lokale REST-API /api/v1/ingest/* Stellen oder E-Mails an PBP liefern. Kopplung + Widerruf laufen BEWUSST nur ueber die UI: Einstellungen → Erweiterungen → Gekoppelte Plugins (der API-Key wird dort genau einmal angezeigt und gehoert nicht in den Chat).
Nutze dies fuer Diagnose: Welche Plugins sind gekoppelt, was duerfen sie, wann kam der letzte Ingest?
position_aus_bewerbung_uebernehmenUebernimmt Titel und Firma einer angenommenen Bewerbung als neue Profil-Position.
Gedacht fuer den Abschluss-Flow nach Status=angenommen: die frischen Daten (Stelle, Firma, Startdatum) werden als neue positions-Zeile im Profil angelegt, ohne Daten doppelt eingeben zu muessen.
position_hinzufuegenFügt eine Berufserfahrung (Position/Stelle/Job) zum Bewerberprofil hinzu.
Alternativ: profil_bearbeiten(bereich='position', aktion='hinzufuegen')
profil_bearbeitenBearbeitet Profildaten: Persönliches, Berufserfahrung, Skills, Ausbildung, Projekte.
Universaltool für alle Profil-Änderungen. Auch nutzbar für Bulk-Import mit aktion='hinzufuegen_bulk' und daten als Liste.
AKTIONEN PRO BEREICH:
Feldnamen-Aliase für bereich='persoenlich': adresse/anschrift->address, kurzprofil/zusammenfassung->summary, stadt/ort->city, telefon->phone
profil_erstellenErstellt oder aktualisiert das Bewerberprofil.
Bestehende Werte bleiben erhalten, wenn ein Argument leer bleibt. Zum gezielten Leeren/Bearbeiten einzelner Felder profil_bearbeiten nutzen.
profil_exportierenExportiert das komplette Profil als JSON-Backup.
Inkl. aller Positionen, Projekte, Ausbildung, Skills, Dokument-Metadaten und Präferenzen. Die JSON-Datei wird im Export-Verzeichnis gespeichert.
Nutze dies für:
profil_importierenImportiert ein Profil aus einer JSON-Backup-Datei.
Erstellt ein neues Profil aus dem Backup. Das vorherige aktive Profil wird gespeichert und kann später wieder aktiviert werden.
ACHTUNG: Erstellt immer ein NEUES Profil — überschreibt nichts.
profil_loeschenLöscht ein Profil und alle zugehörigen Daten (Positionen, Skills, Dokumente).
ACHTUNG: Diese Aktion kann nicht rückgängig gemacht werden! Erstelle vorher ein Backup mit profil_exportieren().
Wenn das aktive Profil gelöscht werden soll und es weitere Profile gibt, wird automatisch zum nächsten Profil gewechselt. Wenn es das einzige Profil ist, muss bestaetigung=True gesetzt werden.
profil_report_exportierenExportiert einen vollständigen Profil-Report als PDF.
Enthält alle Profildaten: persönliche Daten, Zusammenfassung, Berufserfahrung mit Projekten (STAR-Format), Skills als Tabelle, Ausbildung und Dokumente. Inklusive Erstellungsdatum im Footer.
profil_statusPrüft ob bereits ein Profil existiert und gibt eine Kurzübersicht.
IMMER als erstes aufrufen wenn der User den Assistent startet. Entscheidet ob Ersterfassung nötig ist oder ob es direkt losgehen kann.
profil_umlaute_reparierenRestauriert echte Umlaute im Profil-Altbestand (#742, A20).
Aeltere Profil-/Projekttexte enthalten ASCII-Umschreibungen (Mehrjaehrige, Oekosystem, fuer) — schlecht fuer generierte Anschreiben. Ersetzt werden AUSSCHLIESSLICH Woerter aus einer kuratierten Positivliste (wortweise, case-erhaltend). Legitime ue/ae/oe-Sequenzen (neue, Steuerung, Aussage, Queue, Eigennamen) und ss/ß bleiben grundsaetzlich unangetastet; technologies-Felder sind ausgenommen (Produktnamen).
Default ist die VORSCHAU (anwenden=False) — zeige sie dem User und rufe erst nach Bestaetigung mit anwenden=True auf. Vor dem Schreiben wird automatisch ein JSON-Backup des Profils erstellt.
profil_wechselnWechselt zum angegebenen Profil. Alle anderen Profile werden deaktiviert.
profil_zusammenfassungLiest das komplette Profil und gibt eine formatierte Zusammenfassung zurück.
Inkl. Vollständigkeits-Checkliste. Nutze dieses Tool um dem User sein Profil zur Kontrolle zu zeigen (Review-Phase).
profile_auflistenListet alle vorhandenen Profile auf. Zeigt welches aktiv ist.
Nutze dieses Tool wenn mehrere Personen den gleichen PC nutzen oder wenn der User zwischen Profilen wechseln möchte.
projekt_hinzufuegenFügt ein Projekt zu einer Berufsposition hinzu (STAR-Methode).
projekte_anzeigenAlle Projekte des Profils mit UNGEKUERZTEN STAR-Feldern (Volltext).
Fuer Anschreiben, Lebenslauf und Interview-Vorbereitung IMMER dieses Tool nutzen statt der Projektdarstellung aus profil_zusammenfassung — dort sind Beschreibung/Ergebnis auf 100 Zeichen gekuerzt und Situation/Task/Action fehlen ganz (#741). Liefert ausserdem die Projekt-IDs, die profil_bearbeiten(bereich='projekt', aktion='aendern') als element_id braucht.
quelle_handoffBrowser-Handoff fuer blockierte/SPA-tote Quellen (B25/#735).
Wenn eine Quelle per HTTP nicht scrapbar ist (Bot-Block, SPA-Shell, tot), liefert dieses Tool die Such-URL + ein generisches Extraktions-JS — Workflow wie bei google_jobs_url (#573): URL in Chrome mit Claude-in-Chrome oeffnen, Treffer per javascript_tool() ziehen, mit stelle_manuell_anlegen uebernehmen.
Fuer eigene Karriereseiten: erst custom_quelle_hinzufuegen, dann kommt der Handoff aus custom_quellen_anzeigen.
quellen_aus_urls_korrigierenv1.7.0-beta.47 (#613): Korrigiert source='manuell' anhand der job-URL.
Geht durch alle Stellen mit source='manuell' (egal ob aktiv oder aussortiert) und prueft die URL. Wenn die URL einer bekannten Quelle zugeordnet werden kann (LinkedIn, StepStone, Indeed, ...), wird source umgesetzt.
quellen_health_checkv1.7.0-beta.51 (#624 Phase 2): Aktiver Probe-Check fuer Job-Quellen.
Macht pro Quelle einen minimalen HTTP-Request (1 Stelle, keine Filter) um zu pruefen ob die API/Feed-Endpoint erreichbar ist. Ergaenzt scraper_diagnose (das auf Liefer-Statistiken basiert) — hier kommt die Info „API selbst erreichbar JA/NEIN" aus einem echten Request.
quellen_langzeit_auswertungLangzeit-Auswertung der Job-Quellen (B25/#735, v1.8.0-beta.5).
Wertet die Lauf-Historie (scraper_runs, seit beta.5 automatisch mitgeschrieben) pro Quelle aus: Laeufe, Treffer, NEUE Stellen, Fehlerklassen, Trend (zweite Haelfte vs. erste) und eine klare Empfehlung (behalten / beobachten / deaktivieren+Handoff).
Ergaenzt scraper_diagnose (aktueller Zustand) um die Zeitachse: „Welche Quelle bringt mir seit Wochen nichts mehr?"
recherche_speichernSpeichert eine Recherche-Analyse dauerhaft zu einer Stelle oder Bewerbung (#240).
Nutze dieses Tool, um Ergebnisse aus firmen_recherche(), branchen_trends(), skill_gap_analyse() oder eigene Notizen zu persistieren. Gespeicherte Recherchen bleiben über Chat-Sessions hinweg erhalten.
recruiter_anfrage_ablehnenLehnt eine Recruiter-Anfrage ab OHNE Bewerbung anzulegen.
Wann nutzen: Ein Recruiter (LinkedIn-DM, E-Mail, Anruf) bietet eine Stelle an. Du entscheidest sofort dagegen — Standort passt nicht, Branche stimmt nicht, Gehalt unrealistisch, Tonalitaet unprofessionell etc. Es kommt zu KEINER Bewerbung.
Was passiert:
jobs angelegt (source='recruiter_inbound')Vorteil ggue. bewerbung_erstellen(status='zurueckgezogen'):
scores_neu_berechnenRechnet die Fit-Scores aller (aktiven) Stellen neu (#554, v1.6.9).
Sinnvoll nach Aenderungen an:
suchkriterien_setzen/suchkriterien_bearbeiten)scoring_konfigurieren)Geht jede Stelle einmal durch calculate_score() und persistiert den neuen Wert via db.update_job(hash, {"score": ...}). Auto- Adjust-Hooks werden NICHT getriggert — das ist ein reiner Recompute.
scoring_konfigurierenKonfiguriert das Scoring-Regler-System (#169).
Jede Bewertungsdimension hat einen konfigurierbaren Regler der Punkte zum Basis-Fit-Score addiert oder subtrahiert.
Dimensionen:
⚠ BRACKET-SEMANTIK Entfernung (#917): die km-Stufen sind OBERGRENZEN — der Malus der Stufe X gilt fuer Stellen BIS X km (genauer: oberhalb der naechstkleineren Stufe). Beispiel entfernung_fest: Stufe '50' trifft Stellen zwischen 30 und 50 km, Stufe '999' alles jenseits von 80 km. Wer FERNE Stellen staerker abwerten will, verschaerft also '999' — NICHT '50'. Schluessel immer als reine Zahl ('50'), nie '50km'.
v1.7.17 (#917): 'setzen' aktualisiert jetzt wirklich (vorher entstanden Dubletten neben unerreichbaren Altzeilen), 'loeschen' laesst einen Regler auf den Default zurueckfallen — auch der Weg, ein automatisch gesetztes Ignorieren-Flag loszuwerden. Explizit gesetzte Regler werden vom Ablehnungs-Lerneffekt nicht mehr ueberschrieben.
scoring_vorschauZeigt die Scoring-Berechnung fuer eine Stelle im Detail (#169).
Zeigt den Basis-Score UND alle Scoring-Regler-Adjustments, sodass der User versteht warum eine Stelle hoch oder niedrig bewertet wird.
scraper_diagnoseZeigt den Gesundheitszustand aller Scraper oder reaktiviert einen deaktivierten Scraper (#432).
skill_gap_analyseVergleicht dein Profil mit einer Stelle oder allen aktiven Stellen.
Zeigt welche Skills dir fehlen, welche gut passen, und gibt konkrete Empfehlungen welche Kompetenzen du ergänzen solltest.
skill_hinzufuegenFügt einen Skill (Kompetenz/Fähigkeit/Expertise) zum Bewerberprofil hinzu.
Für Fachwissen, Tools, Soft Skills, Sprachen und Methoden-Kompetenzen. Alternativ: profil_bearbeiten(bereich='skill', aktion='hinzufuegen')
WICHTIG für Skill-Level-Bewertung:
skill_zeitraeume_anzeigenListet alle Zeitraeume eines Skills (#572).
skill_zeitraum_hinzufuegenFuegt einem Skill einen weiteren Zeitraum hinzu (#572).
Sinnvoll bei Skills mit diskontinuierlicher Erfahrung — z.B. eine Programmiersprache 2010-2015 genutzt, Pause, dann 2022-heute wieder. Pro Zeitraum kann ein eigenes Niveau (level 1-5) gesetzt werden.
skill_zeitraum_loeschenLoescht einen Skill-Zeitraum.
skills_bereinigenFindet und entfernt Junk-Skills aus der Extraktion (#681).
Die Skill-Extraktion erzeugt manchmal Satzfragmente statt echter Skills (z.B. 'in Systemen wie Creo', 'Programmierung in CATIA.', 'SAP oder vergleichbar)'). Dieses Tool findet sie ueber die Garbage-Heuristik und entfernt sie auf Wunsch.
statistiken_abrufenRuft Bewerbungsstatistiken ab: Conversion-Rate, Antwortzeiten, Status-Verteilung.
Gibt einen Ueberblick ueber:
quoten-Block mit Segmentierung am PBP-Startdatum (gesamt / seit_pbp / vor_pbp) — zeigt, ob seit der systematischen PBP-Nutzung anteilig weniger Bewerbungen versanden.stelle_bearbeitenAktualisiert Felder einer bestehenden Stelle (#446, #645).
Nutze dies, um eine gescrapte oder manuell angelegte Stelle nachtraeglich zu korrigieren oder zu verfeinern — z.B. wenn aus einer E-Mail eine ausfuehrlichere Beschreibung hervorgeht oder die Ortsangabe prezisiert werden muss.
Nur angegebene Felder werden geaendert. Leere Strings bleiben unveraendert.
v1.7.0-beta.71 (#645): url ist jetzt setzbar. Bei URL-Update wird is_search_url automatisch aus der URL bestimmt (Detail- vs. Such-URL), damit stellenbeschreibung_nachladen die Stelle wieder nachladen kann.
stelle_bewertenBewertet eine gefundene Stelle.
Bei 'passt_nicht' wird der Grund gespeichert und für künftige Suchen gelernt. Häufig genutzte Gründe führen automatisch zu Gewichtungsanpassungen.
STRENG VERBOTEN: Die KI darf KEINE eigenen Ablehnungsgruende erfinden, generieren oder formulieren! Auch keine "intelligenten" Gruende wie "Duplikat — bereits als Bewerbung xyz erfasst". AUSSCHLIESSLICH die vordefinierten Gruende aus der Liste unten verwenden. Bei Unsicherheit den Nutzer fragen oder 'sonstiges' waehlen. Jeder nicht-vordefinierte Grund wird automatisch auf 'sonstiges' normalisiert.
FUER MEHRERE STELLEN AUF EINMAL: Nutze 'stellen_bulk_bewerten' mit Filtern wie min_score, titel_enthaelt_nicht, beschreibung_enthaelt_nicht. Spart Tokens und respektiert die PBP-Lifecycle-Logik (#514).
stelle_manuell_anlegenLegt eine Stelle manuell an (z.B. von LinkedIn/XING via Claude-in-Chrome) (#160).
Nutze dieses Tool, um Stellen aus externen Quellen (LinkedIn, XING, Firmen-Webseiten) in PBP zu uebertragen. Die Stelle wird automatisch bewertet und erscheint in stellen_anzeigen().
⛔ ANKER-PFLICHT (#766) — VOR dem Aufruf beachten: Jede Stelle braucht mindestens EINEN dieser drei Anker, sonst ist sie fuer den Nutzer wertlos (er kann sich nicht bewerben und die Anzeige nicht nachladen):
url — die DETAIL-URL der Anzeige (nicht die Suchergebnis-Seite)kontakt_name/kontakt_email/kontakt_telefon — der Ansprechpartner. Bei Vermittler-Stellen mit unbekanntem Endkunden ist der Recruiter-Kontakt oft das Einzige, was es gibt.Eine zusammenfassende NOTIZ ist KEIN gueltiger Ersatz fuer die Beschreibung. Wenn beim Scrapen oder in der Browser-Recherche keine Detail-URL greifbar ist, dann stattdessen den ANZEIGENTEXT vollstaendig uebernehmen UND den Kontakt festhalten. Ohne Anker wird die Stelle zwar angelegt, aber im Result steht eine anker_warnung — die gehoert ungefiltert an den Nutzer weitergegeben.
WICHTIG: Vor dem Anlegen wird automatisch geprueft ob bereits eine Bewerbung mit aehnlicher Firma+Titel existiert (#317). Bei klarem Duplikat-Verdacht wird eine Warnung zurueckgegeben und die Stelle NICHT angelegt — es sei denn force=True.
v1.7.0-beta.87 (#670): Die Duplikat-Erkennung ist verschaerft. Ein einzelnes geteiltes Domain-Keyword (z.B. "PLM") oder bloße Zeitnaehe bei gleicher Firma blockt NICHT mehr — nur noch eine hinreichend hohe Titel-Aehnlichkeit. Unterschiedliche URLs gelten als starkes "verschiedene Stellen"-Signal. Mit force=True kann ein erkanntes Duplikat dennoch angelegt werden (die Warnung wird im Result als duplikat_uebersteuert mitgeliefert).
stelle_mergenFuehrt zwei doppelt angelegte Stellen zusammen (#470).
Typischer Flow:
dry_run=True` (Default) aufrufen -> Vorschau mit Feld- Entscheidungen, Konflikten und welche Bewerbungen umgehaengt werden.feld_strategie` mitgeben.dry_run=False` finalisieren.stelle_reaktivierenReaktiviert eine zuvor aussortierte Stelle (#664).
Setzt is_active=1 und loescht dismiss_reason. Gegenstueck zu stelle_bewerten('passt_nicht') — analog zu dokument_reaktivieren() fuer Dokumente. Notwendig wenn Claude oder der User eine Stelle irrtuemlich aussortiert hat und sie wieder in der aktiven Liste haben moechte, ohne ueber den DB-Bypass zu gehen (#514).
stelle_vergleichenVergleicht zwei Stellen strukturiert (#580).
Liefert eine Gegenueberstellung von Skills (gemeinsam / nur A / nur B), Gehalt, Standort, Stellenart, Score und Beschreibungs-Laenge. Sehr hilfreich um zu erkennen ob zwei Stellen wirklich verschieden sind oder nur Schreibvarianten.
stelle_wiedergaenger_pruefenPrueft ob eine Stelle ein "Wiedergaenger" ist (#671, Ebene 0, KI-frei).
Ein Wiedergaenger ist eine Stelle, die inhaltlich derselben Firma + Domaene entspricht, die bereits frueher mehrfach mit demselben Grund aussortiert wurde — taucht aber unter neuem Hash (anderer Scrape/Quelle) wieder als "frischer Fund" auf. Beispiel: Firma X + Domaene "PLM" wurde schon 2x als falsches_fachgebiet verworfen.
Rein deterministisch (Ebene 0) — keine lokale KI noetig. Das Feature funktioniert vollstaendig auch in Installationen ohne Ollama. Eine optionale Ollama-Verfeinerung (Ebene 1) und der Claude-Kontext in fit_analyse (Ebene 2) bauen darauf auf, sind aber nicht erforderlich.
stellen_anzeigenZeigt gefundene Stellenangebote an.
Gibt die Liste der Stellen zurück, sortiert nach Score — Stellen mit fachlichem k.o. (Wiedergaenger-Muster, #671) sinken dabei ans Ende, egal wie hoch ihr Score ist (v1.7.12, #827/C32): der Score misst Begriffe, das k.o.-Muster misst deine dokumentierten Entscheidungen. Nutze stelle_bewerten() um einzelne Stellen zu bewerten.
stellen_auto_aussortierenProfil-basiertes Auto-Aussortieren via lokaler AI (#586, #646).
Statt Filter-Listen zu pflegen entscheidet die lokale AI pro Stelle, ob sie zum Profil passt. Skaliert mit beliebigen Berufsfeldern — funktioniert fuer Senior-PLM genauso wie fuer Studenten oder Service-Berufe.
Pro Stelle (max_stellen, sortiert nach Score absteigend):
match_job_to_skills mit Profil-Kontext + StelleVoraussetzung: Lokale AI aktiv (Ollama laeuft, Modell installiert). Fallback: ohne Lokale AI gibt es eine ehrliche Meldung — keine Heuristik-Raterei.
v1.7.0-beta.74 (#646): Hard-Cap auf max_stellen=10 (vorher 50) + Wall-Clock-Budget max_dauer_sek=50s (#691, bewusst unter dem ~60s- MCP-Client-Timeout). Bei Erreichen des Budgets wird mit status='teilweise' und allen bis dahin verarbeiteten Stellen zurueckgegeben — kein stilles Timeout, kein Schema-Validierungsfehler. Idempotent fortsetzbar: ein erneuter Aufruf bearbeitet die nicht verarbeiteten Reste.
stellen_bulk_bewertenBewertet mehrere aktive Stellen auf einmal anhand von Filtern (#514).
ANTI-DB-BYPASS: Nutze dieses Tool fuer das Aussortieren grosser Mengen von Stellen. NIEMALS direkt in die SQLite-Datei schreiben — die PBP-Logik (Audit-Log, Lerneffekte, Auto-Adjust-Scoring, dismiss_reasons-Statistik) wird hier durchlaufen, bei direkten DB-Writes nicht.
SICHERHEITS-DEFAULT: dry_run=True. Erst Vorschau (Anzahl Treffer + erste 10 Beispiele), dann mit dry_run=False ausfuehren. Das ist bewusst nicht verhandelbar — der Filter trifft sonst zu viel.
REAL-CASE: Bei einer Suche kommen 500 Stellen, davon 200 falsches Fachgebiet. Anstatt 200 Einzelaufrufe von stelle_bewerten:
stellen_bulk_bewerten( bewertung='passt_nicht', gruende=['falsches_fachgebiet'], titel_enthaelt_nicht=['Pflege', 'Vertrieb'], dry_run=True # erst pruefen! )
stellen_qualitaet_pruefenPrueft URL-Health + Beschreibungs-Vollstaendigkeit aktiver Stellen (#645).
Geht pro aktiver Stelle durch:
stellen_urls_heilenv1.7.9 (#763): Heilt URL-Qualitaet im BESTAND (Datenmigration).
Hintergrund: Der Scraper-Fix aus #645 wirkte nur auf NEUE Laeufe — das damals angekuendigte Akzeptanzkriterium AK5 (Bestands-Heilung) wurde nie umgesetzt. Alle vor beta.71 angelegten Stellen tragen die Regression bis heute mit (leere URL bzw. Such-URL ohne Markierung).
Zwei Heilungen, beide ohne Netzzugriff:
is_search_url wird aus der gespeicherten URL neu bestimmt. Heilt BEIDE Richtungen — Alt-Stellen mit Such-URL und Flag=0 werden markiert, und Stellen, die der save_jobs-Guard defensiv auf 1 setzte, obwohl inzwischen eine echte Detail-URL nachgepflegt wurde, werden wieder freigegeben (das entsperrt stellenbeschreibung_nachladen).is_search_url=1 markiert — nie als Detail-URL ausgegeben.EHRLICHE GRENZE: Eine echte Detail-URL laesst sich NICHT rekonstruieren. Die Portal-IDs (xing_job_id/linkedin_job_id) werden von den Scrapern zwar ins Job-Dict gelegt, aber nie in die DB geschrieben, und der stelle_hash ist Einweg-MD5 ohne ID-Anteil. Was hier entsteht, ist eine gezielte SUCH-URL — klickbar und ehrlich markiert, damit der Nutzer die Anzeige selbst findet, statt vor einem leeren Feld zu stehen.
stellenbeschreibung_nachladenHolt die Beschreibung einer Stelle aus ihrer URL nach (v1.7.0-beta.44, #622).
Wenn der Score einer Stelle unzuverlaessig wirkt weil die Beschreibung leer oder zu kurz ist, ruft dieses Tool die URL auf, parsed sie und schreibt die Beschreibung zurueck in die DB.
Eine HTTP-GET pro Aufruf — bewusst nicht fuer Massen-Crawl gedacht. Fuer Bulk-Refetch nutzt PBP den Auto-Engine-Step _run_auto_refetch_descriptions (max 8 Stellen pro Lauf).
Liefert {status, chars, preview} bei Erfolg, sonst {status: "fehler", grund}.
stil_auswertungWertet getrackte Anschreiben-Stile aus: Welcher Stil oeffnet mehr Tueren (Interviews)? (#454, #736)
Liest alle stil_tracking-Events aus application_events. Die Interview-Quote misst, welcher Anteil der Bewerbungen eines Stils MINDESTENS EIN Interview erreicht hat — bestimmt ueber den Status-Verlauf (Timeline), nicht ueber den finalen Status (#736). Eine Bewerbung mit Verlauf interview -> abgelehnt zaehlt also als Interview-Treffer UND als (Nach-Interview-)Absage. Begruendung: das Anschreiben beeinflusst die Einladung, nicht was im Gespraech folgt.
Pro Stil: Anzahl, Interview-Quote, Angebots-Quote, Absage-Quote (zusaetzlich aufgeschluesselt in absage_nach_interview / absage_ohne_interview). Mindestens 3 Bewerbungen pro Stil noetig damit eine Quote ausgegeben wird (sonst zu rauschig).
stilarchiv_kontextLiefert die letzten N Versionen als Kontext fuer eine Neu-Generierung (#577).
Nutze das BEVOR du ein neues Anschreiben/Lebenslauf schreibst — damit der Stil konsistent bleibt und erfolgreiche Formulierungen nicht verloren gehen.
stilarchiv_outcome_setzenMarkiert eine Stilarchiv-Version mit Erfolgs-Status (#577).
stilarchiv_speichernSpeichert eine Anschreiben- oder Lebenslauf-Version im Stilarchiv (#577).
Beim naechsten Generieren werden die letzten Versionen als Kontext mitgegeben — Claude bleibt im User-Stil und nutzt erfolgreiche Formulierungen wieder.
suchkriterien_anzeigenZeigt die aktuellen Suchkriterien an.
Gibt alle MUSS-, PLUS-, MINUS- und AUSSCHLUSS-Keywords, Regionen und benutzerdefinierte Kriterien zurueck. (MINUS seit #667 / B19, beta.84.)
suchkriterien_bearbeitenEinzelne Keywords zu Suchkriterien hinzufügen, entfernen oder gewichten.
Statt die gesamte Liste zu ersetzen, können einzelne Keywords inkrementell hinzugefügt oder entfernt werden.
v1.7.10 (#778/C29):
kalibrierung_backtest() laufen lassen und erst dann scores_neu_berechnen().suchkriterien_setzenSetzt die Suchkriterien für die Jobsuche (ersetzt die gesamte Liste).
MUSS-Keywords: Stelle wird nur beruecksichtigt wenn mindestens eins vorkommt. PLUS-Keywords: Erhoehen den Score (= bessere Sortierung). MINUS-Keywords (#667, B19, beta.84): Senken den Score (weiche Abwertung). Stelle bleibt sichtbar, rutscht aber nach unten. Gegenstueck zu PLUS. AUSSCHLUSS-Keywords: Stelle wird komplett ignoriert wenn eins vorkommt.
Wann was nutzen:
Tipp: Leite die Keywords aus dem Profil ab! Was kann der User, was sucht er? Nutze profil_zusammenfassung() als Basis.
MALUS VERSCHAERFEN (#908): NIE ein Keyword doppelt eintragen — Listen werden dedupliziert. Der Weg zu einem staerkeren Einzel- Malus ist keyword_gewichte (#778): suchkriterien_bearbeiten(aktion='gewichten', ...).
suchperformance_auswertenWelche Quelle fuehrt tatsaechlich zu Bewerbungen? (#783/B28, v1.7.10)
Wertet die KOMPLETTE Kette rueckwirkend aus Bestandsdaten aus: gefunden -> aussortiert (mit Top-Gruenden) -> beworben -> Interview/ Angebot, je Quelle. Die eigentliche Kennzahl ist die BEWERBUNGSQUOTE pro Quelle, nicht die Trefferzahl — eine Quelle mit 7 Treffern und 2 Bewerbungen schlaegt eine mit 100 Treffern und 0.
Ehrliche Grenze (v1.7): Auswertung auf QUELLEN-Ebene. Die Ebene einzelner Such-Queries braucht eine Lauf-Protokollierung (search_runs) — das ist der v1.8-Teil von #783; die Beta-Linie fuehrt mit scraper_runs (B25/#735) bereits eine Lauf-Historie.
suchprofil_aktualisierenAktualisiert das Such-Profil eines Portals (#564).
Nur die uebergebenen Felder werden ueberschrieben — leer/None heisst „nicht aendern".
suchprofil_lesenLiefert das gespeicherte Such-Profil fuer ein Portal (#564).
Wird von der Chrome-Extension VOR jeder Suche aufgerufen, damit statt der naiven keywords_muss die portal-spezifisch erprobten Suchbegriffe + Filter eingesetzt werden.
suchprofile_auflistenListet alle gespeicherten Portal-Such-Profile (#564).
telemetrie_setzenSchaltet Telemetrie-Sharing an/aus oder setzt das Nachfrage-Intervall.
Recovery-Pfad: falls der Datenschutz-Tab im Dashboard mal nicht erreichbar ist, kann hierueber das Sharing wieder abgeschaltet werden.
telemetrie_statusLiefert den Stand des Telemetrie-Sharings (#594 Stufe 5).
Telemetrie-Sharing ist opt-in und teilt NUR anonymisierte, aggregierte Lern-Erkenntnisse (keine Profildaten, keine Job-Titel, keine Firmen) — und auch das nur, wenn der User die Vorschau-Mail selbst abschickt. Es geht NIE automatisch etwas raus.
Use Case: 'ist bei mir Telemetrie an?' oder Recovery, falls der Datenschutz-Tab im Dashboard gerade nicht erreichbar ist.
termin_dubletten_bereinigenFindet und bereinigt doppelte Termine im Bestand (#804/D30).
Ohne Argumente: Report aller Termin-Paare derselben Bewerbung im selben Zeitfenster (+/- 30 Minuten, abgesagte ausgenommen). Mit master_id + duplikat_id: fuehrt genau dieses Paar zusammen — leere Felder des Masters werden aus dem Duplikat gefuellt, gefuellte bleiben unangetastet, danach wird das Duplikat geloescht.
Idempotent: ein zweiter Lauf findet das bereinigte Paar nicht mehr.
termine_ics_exportierenExportiert alle geplanten Bewerbungstermine als .ics-Kalenderdatei (J4.1/#481, v1.8.0-beta.3).
Die Datei laesst sich in Thunderbird, Outlook, Apple- oder Google-Kalender importieren (Doppelklick reicht meist). Enthalten sind alle Termine mit Status 'geplant': Titel + Firma, Zeitraum, Ort, Meeting-Link und ein Ruecklink in die PBP-Bewerbung.
RFC-5545-fest (Escaping + Line-Folding) — identischer Kern wie der Download-Button im Kalender-Tab (/api/meetings/export.ics).
todo_anlegenLegt einen Todo/Task an (#666, D19).
v1.7.12 (#815, D35): bewerbung_id ist OPTIONAL — auch Aufgaben ohne Bewerbungsbezug ("Lebenslauf-Variante aktualisieren", "Suchkriterien nachschaerfen") sind regulaere Datensaetze. Vorher landeten sie in Notizen, Chats oder gar nicht: 5 Aufgaben auf 94 Bewerbungen war kein Nutzungsmuster, sondern ein Zugangsproblem.
todo_bearbeitenv1.7.12 (#814, D35): aendert einen bestehenden Todo.
Vorher gab es KEINEN Weg, ein Faelligkeitsdatum zu aendern — follow_up_verschieben existierte, das Todo-Pendant nicht. Nur uebergebene Felder werden geschrieben.
todo_detailsv1.7.12 (#814, D35): Todo samt aufgeloestem Kontext in EINEM Aufruf — Bewerbung, Termine, Kontakte, Dokumente.
Wer eine Aufgabe oeffnet, will handeln: Mailadresse, Termin und Sachstand gehoeren in dieselbe Ansicht, ohne vorher in die Bewerbung wechseln zu muessen.
todo_erledigenMarkiert einen Todo als erledigt (#666, D19).
todo_hinfaelligv1.7.12 (#814, D35): markiert einen Todo als hinfaellig.
Der Status existierte laengst (todo_reaktivieren nennt ihn) — es gab nur kein Tool, das ihn setzt. Hinfaellig heisst: die Aufgabe ist gegenstandslos geworden (Absage erhalten, Nachfass hat sich erledigt), nicht erledigt.
todo_reaktivierenSetzt einen erledigten/hinfaelligen Todo wieder auf offen.
todos_anzeigenListet Todos (#666, D19).
vermittler_historieAggregierte Historie eines Vermittlers/Personaldienstleisters (#780).
Beantwortet vor der Reaktion auf eine neue Anfrage: Wie oft kam dieser Vermittler schon? Wohin fuehrte es? Welche Endkunden, welche Ansprechpartner? "Die sechste Anfrage, keine fuehrte zum Abschluss" aendert die Antwort.
verwaiste_stellenrefs_bereinigenv1.7.0-beta.47 (#616): Findet/bereinigt verwaiste job_hash-Refs in Bewerbungen.
Bewerbungen koennen einen job_hash referenzieren, dessen Stelle nicht (mehr) in der jobs-Tabelle existiert. Folge: stelle_bearbeiten scheitert, fit_analyse hat keinen Kontext, kontakt_verknuepfen bricht ab (#615).
workflow_startenStartet einen geführten Workflow. Ohne Parameter: zeigt alle verfügbaren Workflows.
Verfügbare Workflows:
WICHTIG: Wenn du die Anweisungen erhältst, führe sie Schritt für Schritt aus. Die Anweisungen enthalten Tool-Aufrufe die du ausführen sollst.
BEFORE YOU INSTALL
218 tools when we connected.
CONTEXT COST
Rated by the size of the 218 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
Windows 10/11: download the latest release from https://github.com/MadGapun/PBP/releases/latest (Assets → Source code (zip)), unzip it, open the PBP-… folder inside and double-click INSTALLIEREN.bat.
Or on macOS 12+: install Python 3.11+ first (the python.org installer, or brew install python@3.12), download and unzip the same release ZIP, then double-click INSTALLIEREN.command — if macOS refuses to open it, right-click it → Open → Open.
Or on Linux, run:
git clone https://github.com/MadGapun/PBP.git && cd PBP && bash installer/install.shThe installer downloads Python, the packages and Chromium (about 3–5 minutes) and writes the bewerbungs-assistent entry into Claude Desktop's configuration itself. Then open Claude Desktop and say „Starte die Ersterfassung“.
The installers write this entry for you (Claude Desktop must already be installed).
If Claude Desktop was installed afterwards, or the installer reported that configuring it failed, run this from the PBP folder on macOS/Linux and restart Claude Desktop:
.venv/bin/python _setup_claude.py