---
name: notebooklm-kurator
description: "Kuratiert NotebookLM-Notebooks aus der Vault-Inbox. Klassifiziert Inbox-Quellen, sortiert sie ins thematisch passende Notebook, hält einen URL-Hash-Index, verifiziert jeden Upload, schreibt Audit-Log und ein Backup vor jedem (manuell genehmigten) Delete. Einsetzen wenn 'notebooklm-kurator', 'inbox bearbeiten', 'kuratiere mein notebooklm', 'sortiere die inbox', 'dubletten prüfen', 'resync notebooklm' oder 'notebooklm-index abgleichen' erwähnt wird."
type: skill
schema_version: 1
bundle_version: "0.28.0"
agent_ready: true
scope: vault
bundle_skill: true
default_active:
  allgemein: false
  automation: true
depends_on: []
conflicts_with: []
tags:
  - notebooklm
  - kurator
  - second-brain
  - automation
created: 2026-05-16
updated: 2026-05-16
---

# notebooklm-kurator

Klassifikation läuft per Heuristik aus der Inbox-Klassifizierungs-Datei, nicht aus dem LLM-Gedächtnis. Idempotenz wird über einen URL-Hash-Index sichergestellt, Register-Gate verhindert Uploads in nicht registrierte Notebooks. Jede Inbox-Datei bleibt unberührt, bis der Nutzer nach einem erfolgreichen Verify ausdrücklich entscheidet: löschen, behalten oder verschieben.

Der Skill konsumiert das externe `notebooklm`-CLI als Quasi-API. Der CLI-Wrapper liegt **nicht** im Bundle — er ist ein separater User- oder Plugin-Skill (zum Beispiel aus `anthropic-skills` oder unter `~/.claude/skills/notebooklm/`). Ohne installierten und authentifizierten Wrapper ist `notebooklm-kurator` nicht funktionsfähig. Die CLI-Quirks sind in `templates/.skills/notebooklm-kurator/notebooklm-cli-cheatsheet.md` versammelt und gelten verbatim — abweichende Annahmen brechen den Vertrag (siehe `.maintainer/docs/MOCK-API-CONTRACT.md`).

## Trigger

Der Skill aktiviert sich auf folgende Anstöße:

- Slash-Command `/notebooklm-kurator` (mit oder ohne Argumente)
- Natürlichsprachliche Anweisung "Inbox bearbeiten", "kuratiere mein NotebookLM", "sortiere die Inbox in mein Notebook ein" oder semantisch Ähnliches
- "Dubletten prüfen" in einem Notebook (Phase 1 nur über die Dubletten-Variante)
- "Resync NotebookLM" / "notebooklm-index abgleichen" (Drift-Heilung)

Kein SessionStart-Hook, kein Auto-Trigger. Der Nutzer stößt an, der Kurator handelt.

## Harte Sicherheitsregeln (niemals verletzen)

Diese Regeln sind nicht verhandelbar. Der Skill weigert sich, eine Aktion auszuführen, die gegen sie verstößt.

1. **Kein `notebooklm source delete` ohne Approval des Nutzers.** Jeder einzelne Delete wird als konkretes Diff-Statement vorgelegt, der Skill wartet auf "ja" oder "nein". Keine Sammel-Freigaben.
2. **Kein Delete ohne Backup.** Vor jedem Delete schreibt der Skill den vollständigen Fulltext plus Metadaten via `helpers/backup.py:write_backup()` nach `{paths.kurator_state_root}/backups/<notebook-slug>/<YYYY-MM-DD>/<source-id>__<titel-slug>.md`. Kein Backup, kein Delete. Der `enable_backup_before_delete`-Flag steht in der Config aus Symmetriegründen — auf `false` setzen führt zur klaren Fehlermeldung beim Start. **Backup-Retention** (DSGVO-Echo, Wave-D Brille-H H.4): Backups akkumulieren ohne Auto-Cleanup. Empfehlung an den Nutzer: Backup-Verzeichnisse älter als 12 Monate manuell prüfen und gegebenenfalls archivieren oder löschen. Eine Bundle-seitige Auto-Retention-Logik kommt in einer Folge-Welle (v0.12.0+).
3. **Inbox-Dateien werden niemals ohne expliziten Befehl gelöscht oder verschoben.** Der Skill setzt ausschließlich Frontmatter-Marker (`notebooklm-status`) und fragt am Ende eines Laufs pro erfolgreich verarbeiteter Datei, ob sie **gelöscht**, **behalten** oder **verschoben** werden soll. Der Kurator führt die Aktion nur nach der ausdrücklichen Antwort des Nutzers aus. Eine autonome Löschung oder Verschiebung findet nie statt, auch nicht bei voller Pipeline mit grünem Verify.
4. **Daily Notes werden niemals angefasst.**
5. **Uploads nur gegen aktive Notebooks im Register.** Vor jedem Upload prüft der Kurator per `register_match.is_allowed_notebook(notebook_id, notebooks)`, ob das Ziel-Notebook im Register mit Status `aktiv` steht. Der `enable_register_gate`-Flag steht für genau diese Prüfung — Default `true`, abschalten nur für Migrationsläufe in einem leeren Register, niemals produktiv.
6. **Glossar-Pflicht:** Vor jedem Schreibvorgang im Vault wird ein vorhandenes Vault-Glossar geladen und gegen Eigennamen, Firmennamen und Fachbegriffe abgeglichen.
7. **Umlaut-Pflicht:** Deutsche Umlaute (`ä ö ü Ä Ö Ü ß`) als echte Unicode-Zeichen in allen Markdown-Bodies, Kommentaren, Audit-Log-Zeilen, Frontmatter-Werten. Einzige dokumentierte Ausnahme: ASCII-Slugs in Backup-Dateinamen wegen Windows-CLI-Quirks (Begründung im Backup-Frontmatter als `ascii-transliteration-warning`).
8. **`PYTHONIOENCODING=utf-8`** als Umgebungsvariable bei jedem `notebooklm`-CLI-Aufruf. Ohne diese Variable crasht `source wait` auf Windows mit `UnicodeEncodeError` (`cp1252`-Fallback, MOCK-API-CONTRACT.md §1, §8 globale Pflicht). Die Helper setzen die Variable selbst — wer den Default-Runner durch eigene Subprocess-Calls ersetzt, muss sie ebenfalls setzen.
9. **`source fulltext --json` Output vor `json.loads` trimmen** bis zur ersten `{`, weil das CLI eine `Matched: <uuid> (<titel>)`-Vorzeile schreibt (MOCK-API-CONTRACT.md §5 verbatim). Der Helper macht das, manuelle Parser müssen es ebenfalls.
10. **`source add` für lokale Dateien zwingend mit absolutem Pfad.** Sonst stummer Pasted-Text-Fallback (HTTP 200, Quelle `ready`, Content Schrott — MOCK-API-CONTRACT.md §3 verbatim).

## Varianten

Drei Phase-1-Varianten in Wave-D-MVP-Scope (Scoring / Quintessenz / Delete-Dossier folgen in v0.11.x):

- **Standard** (`run_kurator.py --variant standard`): Inbox iterieren, klassifizieren, kurator-relevante Einträge ins jeweils passende Notebook einsortieren. Führt den Ablauf "Inbox bearbeiten" unten aus.
- **Resync** (`run_kurator.py --variant resync --notebook <UUID>`): Ruft `helpers/resync.py:resync_notebook(notebook_id, state_root=..., audit_log_path=...)` auf, um den Index gegen die NotebookLM-Wahrheit abzugleichen. Der Resync schreibt nichts nach NotebookLM, sondern heilt nur lokal den Index.
- **Dubletten-Prüfung** (`run_kurator.py --variant dedup-check --notebook <UUID>`): Liest `source list` und `source fulltext` für alle Quellen im Notebook, markiert Paare mit identischem oder sehr ähnlichem URL-Hash, legt sie dem Nutzer **einzeln** zur Entscheidung vor. Kein Auto-Delete. Vor jedem genehmigten Delete zwingend Backup via `helpers/backup.py`.

## Trigger-Aufruf-Beispiele

```bash
# Standard
python .skills/notebooklm-kurator/run_kurator.py --variant standard \
    --inbox "/path/to/inbox-root/"

# Resync
python .skills/notebooklm-kurator/run_kurator.py --variant resync \
    --notebook <demo-uuid> --state-root /path/to/kurator-state

# Dubletten-Prüfung (Source-Liste auf stdin)
notebooklm source list --notebook <demo-uuid> --json \
  | python .skills/notebooklm-kurator/run_kurator.py \
      --variant dedup-check --notebook <demo-uuid>
```

## Ablauf: Inbox bearbeiten

Dieser Ablauf wird vom aufrufenden LLM-Agenten Schritt für Schritt abgearbeitet. Alle Python-Helfer liegen in `.skills/notebooklm-kurator/helpers/` und werden mit `PYTHONIOENCODING=utf-8` aufgerufen.

1. **Vorprüfung.** `notebooklm status` aufrufen (Authentifizierung). `{paths.kurator_state_root}/state/url-hashes.json` via `helpers/index_io.load_index()` laden (Idempotenz-Index). `{paths.register_path}` via `helpers/register_match.load_register(register_path)` laden (aktive Notebooks). Wenn einer dieser Schritte fehlschlägt: Audit-Log `precheck-failed` und Abbruch mit klarer Meldung.

2. **Inbox scannen.** `helpers/inbox_scan.py:scan_inbox(Path("{paths.inbox_root}"))` aufrufen. Ergebnis: Liste aller unterstützten Text-Dateien in der Inbox mit `{path, frontmatter, body, char_count, urls, existing_status}`. Unterstützte Extensions: `.md`, `.markdown`, `.txt`, `.html`, `.htm`. Word-Formate (`.doc`, `.docx`) werden bewusst übersprungen.

3. **Klassifizieren.** Pro Eintrag die Heuristik aus `templates/.skills/notebooklm-kurator/inbox-klassifizierung.md` anwenden (Regel-Reihenfolge von oben nach unten, erste passende gewinnt):
   - `existing_status == "imported"` oder `existing_status` beginnt mit `"skipped-"`: überspringen, weiter mit nächstem Eintrag.
   - Kategorie **kurator-relevant**: weiter mit Schritt 4.
   - Kategorie **vault-relevant**: `helpers/inbox_scan.update_marker(path, {"notebooklm-status": "skipped-not-relevant"})` setzen, Audit-Log `classify-skipped`, weiter.
   - Kategorie **mehrdeutig**: in Rückfragen-Liste aufnehmen, **nicht** automatisch hochladen, weiter.
   - Kategorie **leer/kaputt**: Marker `skipped-empty` setzen, Audit-Log `classify-empty`, weiter.

4. **URL extrahieren und hashen.** `helpers/url_extract.extract_urls(body)` liefert die Kandidaten. `helpers/url_hash.url_hash(normalized_url)` erzeugt den SHA-256-Hexdigest. Mehrere URLs im selben Eintrag: die erste wird als primär behandelt, weitere landen im Kommentar der Audit-Log-Zeile.

5. **Idempotenz-Prüfung.** `helpers/index_io.lookup(entries, url_hash)`. Wenn der Hash bereits existiert: Marker `notebooklm-status: imported` mit bestehender Source-ID setzen, Audit-Log `dedupe-skip`, **kein neuer Upload**. Das `enable_url_dedup`-Flag (Default `true`) steuert diese Prüfung — abschalten nur für Stress-Tests.

6. **Notebook wählen.** Der aufrufende LLM-Agent entscheidet semantisch, welches Notebook aus dem Register zum Inhalt passt. Grundlage: Titel, erste 500 Zeichen Body, URL-Kontext, Themen-Liste je Notebook aus `register_match.load_register()`. Bei einem klaren Treffer: weiter. Bei mehreren plausiblen Treffern: in Rückfragen-Liste, **kein** automatischer Upload.

7. **Register-Gate.** `helpers/register_match.is_allowed_notebook(notebook_id, notebooks)` aufrufen. Wenn das gewählte Notebook nicht im Register mit Status `aktiv` steht: Eintrag in Rückfragen-Liste mit Hinweis "Notebook nicht im Register oder nicht aktiv". Kein Upload.

8. **Erwartungswerte bauen.** Für YouTube-Quellen: `helpers/content_verify.expected_marker_youtube(url)` (ruft yt-dlp mit 30s Timeout auf, extrahiert Titel, Uploader, Dauer, Video-ID, Topic-Keywords und berechnet `min_char_count` heuristisch — Default `verify_min_char_count` aus der Config, mindestens 500). Für lokale `.md`-Quellen: `helpers/content_verify.expected_marker_md(file_path)`. Wenn `error` gesetzt ist (z.B. yt-dlp fehlgeschlagen): Eintrag als `failed` markieren, Rückfrage, weiter. Das `enable_yt_dlp_verification`-Flag (Default `true`) erlaubt den schnelleren Pfad ohne yt-dlp.

9. **Upload.** `notebooklm source add <url|absoluter_pfad> --notebook <id> --json` mit `PYTHONIOENCODING=utf-8`. **Für lokale `.md`-Dateien**: absoluter Pfad zwingend (Sicherheitsregel 10). `source_id` aus der JSON-Antwort parsen. Bei non-zero exit: Audit-Log `upload-failed`, Inbox-Marker `failed`, weiter.

10. **Auf Ready warten.** `notebooklm source wait <source_id> --notebook <id> --timeout 300` mit `PYTHONIOENCODING=utf-8`. Exit-Codes 0/1/2 verbatim aus MOCK-API-CONTRACT.md §4. Bei Timeout: Audit-Log `wait-timeout`, Inbox-Marker `failed`, Rückfrage, weiter — **Quelle nicht löschen**.

11. **Verifizieren.** `helpers/content_verify.verify_after_add(notebook_id, source_id, expected)`. Prüft per `source fulltext --json` (mit Matched-Trim) primär gegen `char_count` aus der API-Antwort. Marker-Strings und Topic-Keywords werden zusätzlich diagnostisch gezählt, sind aber **kein Gate**. Bei `(True, "ok: ...")`: weiter. Bei `(False, "char-count-zu-niedrig: ...")` oder anderem Fehler: Audit-Log `verify-failed`, Inbox-Marker `failed` mit `notebooklm-verify-status: "failed: <grund>"`, Rückfrage, **Quelle nicht löschen**, weiter.

12. **Index aktualisieren.** `helpers/index_io.record(entries, url_hash, payload)` mit Payload `{source_id, notebook_id, normalized_url, added_by: "kurator-capture", verify_status: "ok", added_at: <ISO-8601 Europe/Berlin>}`. Danach `helpers/index_io.save_index(path, entries)` atomar.

13. **Inbox-Marker setzen.** `helpers/inbox_scan.update_marker(path, {...})` mit `notebooklm-status: imported`, `notebooklm-notebook: <id>`, `notebooklm-source-id: <id>`, `notebooklm-url-hash: <hash>`, `notebooklm-imported-at: <jetzt>`, `notebooklm-verify-status: ok`.

14. **Audit-Log.** `helpers/audit_log.append(action="capture-add", notebook_id, source_id, url_hash, status="ok", message="<Titel> via Inbox <Dateiname>", audit_log_path=...)`.

15. **Pause.** `cli_pause_seconds` Sekunden warten (Default 2), dann nächster Eintrag (Rate-Limit-Hygiene gegen NotebookLM-Backend).

16. **Am Ende des Laufs.** Rückfragen-Liste ausgeben — gruppiert nach Fehlerklasse (mehrdeutig, mehrere Notebook-Treffer, verify-failed, wait-timeout, upload-failed, yt-dlp-fehler). Pro Gruppe die betroffenen Inbox-Dateien mit Pfad und Grund nennen. Der Nutzer entscheidet pro Eintrag manuell, der Kurator handelt nicht autonom.

17. **Post-Processing-Gate pro erfolgreich verarbeiteter Datei.** Für jede Datei, die in Schritt 12 erfolgreich in den Index gekommen ist, fragt der Kurator einzeln, was mit der Inbox-Datei passieren soll — **löschen**, **behalten** oder **verschieben**. Pro Datei eine ausdrückliche Antwort. Sammelfreigaben sind verboten. Ohne Antwort bleibt die Datei unangetastet.

## Ablauf: Resync

`run_kurator.py --variant resync --notebook <UUID>` ruft `helpers/resync.py:resync_notebook(notebook_id, state_root=..., audit_log_path=...)` auf. Die Funktion ruft `source list` und (bei `url: null`-Fällen, MOCK-API-CONTRACT.md §2) `source fulltext` mit Backoff bei 429/504, gleicht URL-Hashes gegen den lokalen Index, schreibt `state/url-hashes.json`, `state/notebook-cache.json` und einen Markdown-Resync-Report unter `state/resync-reports/YYYY-MM-DD.md`. Keine Schreibaktionen gegen NotebookLM.

## Ablauf: Dubletten-Prüfung

`run_kurator.py --variant dedup-check --notebook <UUID>` erwartet ein `source list --json`-Payload auf stdin. `helpers/dedup_check.find_duplicates()` liefert Paare in der Reihenfolge `exact_title → same_video_id → high_similarity`. `helpers/dedup_check.suggest_keeper(pair, scores)` schlägt den Behalter vor. Tatsächliches Löschen läuft ausschließlich über das Approval-Gate im LLM-Agenten — siehe Sicherheitsregel 1 und 2.

## CLI-Quirks-Verweis

Die elf Quirks der notebooklm-CLI sind in `templates/.skills/notebooklm-kurator/notebooklm-cli-cheatsheet.md` versammelt (im Bundle als Template-Asset unter `templates/.skills/notebooklm-kurator/notebooklm-cli-cheatsheet.md`). Pflicht-Lektüre vor jedem direkten CLI-Call:

1. **PYTHONIOENCODING=utf-8** als Subprocess-Env-Pflicht (sonst Windows-Crash).
2. **Matched-Vorzeile** vor `source fulltext --json` (Parser muss bis zur ersten `{` trimmen).
3. **`content`-Feld** (nicht `fulltext`) als primärer Fulltext-Schlüssel.
4. **`sources`-Wrapping** bei `source list --json` (Dict mit `sources` plus `count`, nicht bare Array).
5. **`url`-Feld OPTIONAL** bei `source list` — Fallback via `source fulltext`.
6. **Absoluter Pfad** bei `source add <lokale.md>` (sonst stummer Schrott-Fallback).
7. **Titel = Dateiname** bei lokalen `.md`-Uploads (Frontmatter-`title:` wird ignoriert).
8. **`source delete` ist irreversibel** — kein Papierkorb.
9. **Kein Auto-Dedup** — `url_hashes.json`-Index ist die einzige Wahrheit.
10. **Partial-IDs ≥ 6** Zeichen nur manuell, Automation nutzt volle UUIDs.
11. **`--notebook <UUID>` explizit** bei jedem `source`-Call, nie auf `notebooklm use` verlassen.

Die kanonische Quelle ist `MOCK-API-CONTRACT.md` (im `.maintainer/docs/`-Pfad des Bundle-Repos) — sie spiegelt die CLI-Signaturen verbatim und bindet Mock- und Behavior-Tests an genau diese Form.

## PreToolUse-Hook-Setup

Der Skill bringt einen optionalen PreToolUse-Hook mit: `.skills/guard_notebooklm_delete/scripts/guard_notebooklm_delete.py` plus `.skills/guard_notebooklm_delete/hook.yaml` (Python-Hook analog Bundle-Standard `output_filter`). Der Hook fängt jeden `notebooklm source delete`-Befehl in einer Bash-Tool-Action ab und blockiert ihn, wenn unter `<KURATOR_STATE_ROOT>/backups/<notebook-slug>/<heute>/` keine Backup-Datei zur Source-ID vorliegt.

**Aktivierung (manuell durch den Nutzer):**

```jsonc
// ~/.claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python /path/to/.skills/guard_notebooklm_delete/scripts/guard_notebooklm_delete.py"
          }
        ]
      }
    ]
  }
}
```

Plus drei Env-Variablen (Wave-1-Lesson 10, Path-Containment via `_lib/env_loader.require_path_env_var` mit `allowed_roots`):

- `KURATOR_STATE_ROOT` — Pfad zu `{paths.kurator_state_root}` (enthält `backups/`).
- `KURATOR_VAULT_ROOT` — Vault-Wurzel als erlaubter Container (optional).
- `KURATOR_TEMP_ROOT` — Temp-Wurzel als erlaubter Container (optional). Wenn weder Vault noch Temp gesetzt ist, fällt der Hook auf `tempfile.gettempdir()` als einzigen erlaubten Wurzel zurück.

Der Hook ist defensive zweite Schicht — die erste Schicht ist das Approval-Gate im Skill-Ablauf (Sicherheitsregel 1). Ohne Hook bleibt der Skill funktional, mit Hook ist Path-Traversal über `KURATOR_STATE_ROOT` geblockt.

## Audit-Log-Format

Der Skill schreibt eine append-only Markdown-Datei `<state-root>/audit-log.md`. Format-Version v1 (eingefroren ab Bundle 0.11.0):

```
<timestamp> | <action> | notebook=<8-prefix> | source=<8-prefix> | url-hash=<12-prefix> | status=<status> | <message>
```

ID-Prefixe sind eingefroren: 8 Zeichen für Notebook-ID, 8 Zeichen für Source-ID, 12 Zeichen für URL-Hash. `-` für `None`. Änderungen am Format erfordern einen Major-Bump auf v2 mit dokumentierter Migration für bestehende Logs.

## `notebooklm-status`-Marker-Vertrag

Der Skill setzt im Inbox-Frontmatter den Schlüssel `notebooklm-status` mit Werten aus einer geschlossenen Menge (v1 eingefroren ab v0.11.0):

| Wert | Bedeutung |
|---|---|
| `imported` | Quelle erfolgreich hochgeladen, Index aktualisiert |
| `skipped-not-relevant` | Vault-relevanter Inhalt, gehört nicht ins NotebookLM |
| `skipped-empty` | Datei ohne verwertbaren Body |
| `failed` | Upload, Wait oder Verify fehlgeschlagen — manuell prüfen |
| `ambiguous` | Mehrere Notebook-Kandidaten, Nutzer entscheidet |

Skill-lokales Schema (keine Cross-Skill-Garantie). Major-Bump für Wert-Erweiterungen oder Wert-Änderungen.

## Feature-Flags

Konfigurierbar in `skill.config.yaml` (Vorlage in `skill.config.example.yaml`):

| Schlüssel | Typ | Default | Wirkung |
|---|---|---|---|
| `features.enable_backup_before_delete` | bool | `true` | Backup vor jedem Delete (Sicherheitsregel 2). Auf `false` setzen führt zur Fehlermeldung beim Start. |
| `features.enable_register_gate` | bool | `true` | Upload nur gegen aktive Register-Notebooks (Sicherheitsregel 5). |
| `features.enable_url_dedup` | bool | `true` | URL-Hash-Index-Check vor jedem Upload. |
| `features.enable_yt_dlp_verification` | bool | `true` | yt-dlp-Aufruf für YouTube-Metadaten als Verify-Erwartungswerte. |
| `verify_min_char_count` | int | `500` | Mindest-Zeichenzahl im `source fulltext` nach Upload (Top-Level neben `features:`). |
| `cli_pause_seconds` | int | `2` | Pause zwischen `notebooklm`-CLI-Aufrufen (Top-Level). |

Alle sechs Werte werden im Body dieser SKILL.md mindestens einmal namentlich erwähnt (Symmetrie-Vertrag für `skill_md_mentions_all_feature_flags`).

## Lauf-Log persistieren

Per Default schreibt der Skill seinen Zustand (Index, Cache, Backups, Audit-Log) unter `{paths.kurator_state_root}`. Wer den State-Root außerhalb des Vaults legen will, setzt die Env-Var `KURATOR_STATE_ROOT` — der Hook und ein zukünftiger Loader nutzen `_lib/env_loader.require_path_env_var` mit `allowed_roots=[<vault_root>, <temp_root>]` für Path-Containment (Wave-1-Lesson 10).

## Eval-Set

Eingefrorene Assertions unter `.skills/notebooklm-kurator/eval/notebooklm-kurator.eval.json`. Der Runner ist `run_evals.py` im Skill-Ordner. Pass-Rate muss 100 Prozent sein.

```bash
PYTHONUTF8=1 python .skills/notebooklm-kurator/run_evals.py --verbose
```

## Nicht im Bundle (Wave-D-MVP-Scope)

Folgende Funktionen sind im Vault-Skill vorhanden, aber bewusst NICHT im Bundle-Wave-D-MVP — sie folgen als eigene v0.11.x-Wellen mit jeweils eigener Spec:

- Scoring (Claude-CLI-basierte Quellen-Bewertung)
- Quintessenz (Opus-Verdichtung von Cluster zu Aggregat-Dateien)
- Aggregat-Graph (bidirektionaler URL-Hash ↔ Quintessenz-Index)
- Delete-Dossier (strukturierte Lösch-Vorschläge auf Score-Basis)

## Verknüpfungen

- [[INDEX|INDEX.md]]
- [[AGENTS|AGENTS.md]]
- `templates/.skills/notebooklm-kurator/notebooklm-cli-cheatsheet.md` — CLI-Quirks-Source-of-Truth
- `templates/.skills/notebooklm-kurator/inbox-klassifizierung.md` — Heuristik für Inbox-Klassifikation
