# Agentic Second Brain — <USER_NAME>'s Vault

<USER_INTRO>

## Profil-Fokus: Business

Dieser Vault unterstützt die kaufmännische Selbstorganisation eines kleinen Unternehmens oder Selbstständigen. Priorisiere Belegablage, Finanzübersicht und wiederkehrende kaufmännische Pflichten. Wenn etwas gespeichert werden soll, prüfe zuerst, ob es eine laufende kaufmännische Daueraufgabe ist (Buchhaltung, Steuer, Lieferanten unter `03 Bereiche/`) oder ein abgegrenztes Vorhaben mit Ende (z.B. der Jahresabschluss unter `02 Projekte/`).

## Eiserne Regel: Token-Effizienz

Direkte Wege statt Umwege. Keine Wiederholungen, keine Zusammenfassungen am Ende, die nur wiederholen, was eben gemacht wurde. Bei Recherche gezielt suchen statt breit alles abzugrasen. Antworten kurz halten, Code kompakt schreiben. Beim Lesen einer Datei zuerst das `description`-Feld im Frontmatter prüfen — oft reicht das schon, um zu entscheiden, ob die Datei für die Aufgabe relevant ist. Token-Effizienz schlägt Vollständigkeit, solange die Aufgabe gelöst wird.

## Vault-Struktur

Dieser Vault folgt dem PARA-Prinzip nach Tiago Forte. Das Ordnungsprinzip ist nicht *Thema*, sondern **Actionability** — wie schnell und konkret etwas gebraucht wird.

- `00 Kontext/` — Identität des Users (Profil, Schreibstil, Branding, Zielgruppen, Glossar). Wissen über den User selbst, nicht über die Welt.
- `01 Inbox/` — Wartebereich für noch nicht einsortierte Inhalte. Wird beim Session-Start geprüft.
- `TaskNotes/` — Strukturierte Aufgaben mit Frontmatter (status, priority, due, scheduled, projects). Liegt am Vault-Root neben den PARA-Ordnern, nicht mit `01`-Präfix. Aktionsorientierte Wartezone, Tasks unter `TaskNotes/Tasks/<Titel>.md`.
- `02 Projekte/<Name>/` — Aktive Vorhaben mit klarem Ziel und absehbarem Ende. Jedes Projekt hat einen Steckbrief gleichen Namens als Hauptdatei.
- `03 Bereiche/<Name>/` — Dauerhafte Verantwortungs- und Interessensgebiete ohne Enddatum.
- `04 Ressourcen/<Thema>/` — Nachschlagewerk und Wissensspeicher. Fakten, Methoden, Referenzmaterial.
- `05 Logbuch/` — Chronologische Berichte (Daily Notes, Weekly Reviews, Session Logs, Briefings).
- `06 Archiv/` — Kaltlager. Abgeschlossenes wandert hierher, wird nie gelöscht.
- `07 Anhänge/` — Dateien und technische Artefakte ohne Markdown-Inhalt.
- `08 Systemsteuerung/` — Vault-Mechanik (Prinzipien, Routinen, Methoden, System-Module). Kein Wissen über die Welt, sondern Regeln, nach denen das Vault funktioniert.

Vault-Wurzel sauber halten: auf der obersten Ebene leben nur PARA-Ordner (00–08), `TaskNotes/`, versteckte Tool-Ordner (`.skills/`, `.claude/`, `.codex/`, `.docs/`) und Steuerdateien (`AGENTS.md`, `CLAUDE.md`, `INDEX.md`).

### Bundle-Asset-Layer (`_lib/`)

Neben den Skills bringt das Bundle einen Asset-Layer unter `_lib/` mit, der von Skills als Subprocess-Target oder Modul-Import genutzt wird. Inhalte sind keine eigenständigen Workflows, sondern Bibliotheken:

- `_lib/config_loader.py` — Bundle-Root-Aufwärtssuche, Skill-Config-Loader (über `cfg.layout`, `cfg.features`, `cfg.paths`).
- `_lib/test_utils.py` — Gemeinsame Test-Helfer (BUENDEL-Pattern-Listen, Stefan-Lock-Drift-Checks).
- `_lib/designsystem/` — Warm-Navigator-Renderer (Playwright) mit 27 Templates für 16:9 und 27 für 4:5, Tokens, Logo-Placeholder. Aufruf via Subprocess: `python -m _lib.designsystem.render --aspect <16x9|4x5> --template <ID> --photo <path> --headline <text> --output <path>`. Zusätzlich `python -m _lib.designsystem.preview_all` als HTML-Übersicht aller Templates. Konsumiert durch künftige visuelle Skills (linkedin-finalize, authentic-portrait, linkedin-carousel).

`_lib/` ist nicht im Manifest registriert (Discovery-by-Convention via Unterstrich-Prefix). Skills, die `_lib/designsystem/` brauchen, rufen `from _lib.designsystem.resolve import resolve_designsystem` und bekommen den absoluten Pfad.

**Namespace-Package-Regel (seit v0.17.6):** Beide `_lib/`-Wurzeln im Repo (Repo-Root für `designsystem/`, `.skills/` für `api_keys`/`test_utils`/`cross_skill`/`env_loader`/`config_loader`/`eval_runner`) sind Namespace Packages (PEP 420, kein `__init__.py`). Python mergt `__path__` automatisch, sobald `.skills/` in sys.path liegt. Konsumenten setzen den 3-Zeilen-Header `_SKILLS_ROOT = Path(__file__).resolve().parents[2]; if str(_SKILLS_ROOT) not in sys.path: sys.path.insert(0, str(_SKILLS_ROOT))` vor dem ersten `from _lib...`-Import. Verbots-Regel für Tests: Nie naive `from _lib.designsystem ...` in pytest-Funktionen, die nach einem Test laufen, der `.skills/` in sys.path inserted hat — der Namespace-Merge erfasst dann beide Wurzeln und der erste Match gewinnt. Stattdessen `importlib.util.spec_from_file_location` mit absolutem Pfad nutzen (`test_designsystem_lib_resolves.py` und `run_image_wave_g_evals.py::_ensure_bundle_root_on_sys_path` als Schutz-Muster).

## Pflicht-Checks

Diese zehn Pflichten gelten in jeder Session. Sie werden teils durch Hooks und Skills mechanisch erzwungen, teils durch deine Disziplin als Agent.

- **Glossar-Pflicht:** Vor jedem Schreibvorgang das Glossar des Users (typischerweise `00 Kontext/Glossar.md`) gegen alle Eigennamen, Firmennamen und Fachbegriffe abgleichen. Keine Schreibweise aus dem Gedächtnis. Neue Begriffe proaktiv eintragen.
- **Schreibstil-Pflicht:** Externe Texte (Mails, Posts, Bewerbungen, Angebote, Antworten an Dritte) zwingend durch den `natur-sprech-check`-Skill filtern, bevor sie an den User gehen.
- **Designsystem-Pflicht:** Bei jedem visuellen Output (HTML, Slides, Bilder, Diagramme, KI-Bild-/Video-Prompts) zuerst Branding und Designsystem unter `00 Kontext/` bzw. `08 Systemsteuerung/Designsystem/` laden. Tokens verbatim verwenden, keine Hex-Werte raten.
- **Branding-Pflicht:** Markenelemente nach `00 Kontext/Branding.md` einsetzen. Keine fremden Paletten, keine Tool-Defaults.
- **Frontmatter-Pflicht:** Jede Markdown-Datei bekommt YAML-Frontmatter mit den Pflichtfeldern `type`, `description`, `agent_ready`, `schema_version`, `tags`, `created`. Bei jeder inhaltlichen Änderung wird `updated` auf das aktuelle Datum gesetzt. Wird durch den `frontmatter_validator`-Hook erzwungen.
- **PARA-Pflicht:** Jede neue Datei wird nach der PARA-Entscheidungskette einsortiert. Bei Unsicherheit wird der User gefragt, niemals geraten.
- **Token-Effizienz-Pflicht:** Keine Wiederholungen, keine Trailing-Summaries, keine aufgeblähten Dokumente. Nur das Nötige schreiben.
- **Graph-Pflicht:** Jede funktionale Datei bekommt am Ende eine `## Verknüpfungen`-Sektion mit mindestens einem sinnvollen Wikilink (übergeordnetes Projekt, zugehöriger Bereich, Geschwister-Notizen). Wird durch den `wikilink_validator`-Hook erzwungen.
- **Atomare Notizen:** Eine Idee pro Notiz. Ausnahme: Chronologie-Dateien (Daily Notes, Session Logs, Briefings, Reviews), die explizit kumulativ wachsen dürfen.
- **Token-Effizienz-beim-Lesen:** Beim Öffnen einer fremden Datei zuerst das `description`-Feld im Frontmatter lesen. Nur bei Relevanz tiefer in den Inhalt steigen. Spart Kontextfenster, gerade in großen Vaults.

## Skill-Index für Codex

> Diese Sektion ist primär für Codex. Claude Code findet Skills über Auto-Discovery aus `.claude/skills/`.

**Pfad-Konvention:** Skill-Pfade sind als relative Code-Strings mit Backticks und Dateiendung `/SKILL.md` angegeben. Codex liest sie als Datei-Pfade und kann sie mechanisch öffnen. Wikilinks (`[[...]]`) werden in dieser Tabelle nicht verwendet, weil sie tool-spezifisches Obsidian-Markup sind.

| Trigger (Wort/Kontext) | Skill-Pfad | Was tut der Skill |
|---|---|---|
| "authentic-portrait", "authentisches portrait", "stefan portrait", "modern emotions duo", "portrait generieren", "speaker-foto", "artwork mit personen" | `.skills/authentic-portrait/SKILL.md` | Authentische KI-Portraits (content+image-Profil, depends_on nano-banana-image + openai-image-gen): Identitäts-Konsistenz über Multi-Reference-Bilder, Dossier-getrieben, Engine-Wahl Nano-Banana oder OpenAI gpt-image-2 |
| "cross-check", "zweitmeinung", "drittmeinung", "gegenprüfung", "querchecken", "faktencheck", "verifizieren", "frag mal openai/perplexity/gemini" | `.skills/cross-check/SKILL.md` | Externe Zweitmeinung via OpenAI/Perplexity/Gemini einholen |
| "curator", "staging bewerten", "diffs zeigen", "reflector-vorschläge verarbeiten", "vorschläge prüfen" | `.skills/curator/SKILL.md` | Lerner-Loop-Vorschläge prüfen und ins Vault übernehmen |
| "vereinfachen", "verständlich machen", "auf den punkt bringen", "runterbrechen", "kernbotschaft", "elevator pitch", "eli5", "entjargonen", "decomplex" | `.skills/decomplex/SKILL.md` | Text vereinfachen für Laien-Publikum |
| "elevenlabs", "elevenlabs-api", "text-to-speech", "tts", "voiceover", "scribe", "wort-timestamps", "transkription", "sprachsynthese" | `.skills/elevenlabs-api/SKILL.md` | Wrapper für die ElevenLabs API (content+automation-Profil): Batch-TTS via `/v1/text-to-speech`, Scribe-Sprach-zu-Text via `/v1/speech-to-text`, Music-Endpoint als Stub für v0.19.0. Liest `ELEVENLABS_API_KEY` aus der Umgebung (Skill-Config-Override möglich), Voice-ID-Default `JBFqnCBsd6RMkjVDRZzb` (George, Premade) |
| "index neu bauen", "index aktualisieren", "index regenerieren", "vault-index rebuild", "index-rebuild" | `.skills/index-rebuild/SKILL.md` | INDEX.md aus aktuellem Vault-Stand neu bauen |
| "kreuzverhör", "challenge mich", "auseinandernehmen", "hinterfrage das", "devils advocate", "stress-teste das", "prüf das kritisch", "löcher reinbohren", "zerpflücke das" | `.skills/kreuzverhoer/SKILL.md` | Idee oder Plan kritisch hinterfragen aus mehreren Perspektiven |
| "linkedin-carousel", "carousel bauen", "carousel-post", "document-post", "10-slide-carousel", "linkedin slides" | `.skills/linkedin-carousel/SKILL.md` | 10-Slide-LinkedIn-Carousel (content-Profil, depends_on natur-sprech-check): Document-Post-Pipeline mit Designsystem-Templates, Cover + 9 Folien, PDF-Export für LinkedIn |
| "linkedin-entwurf", "post schreiben", "post entwerfen", "entwurf machen", "format wählen", "hook entwickeln" | `.skills/linkedin-entwurf/SKILL.md` | Substanzielle LinkedIn-Post-Entwürfe mit Format-Wahl, 14 Qualitäts-Gates, PVL-Skelett |
| "linkedin-finalize", "post finalisieren", "post fertigmachen", "post bereit machen", "thumbnail generieren", "hashtags vorschlagen", "post abschließen" | `.skills/linkedin-finalize/SKILL.md` | Finalisierung von LinkedIn-Post-Entwürfen (content-Profil, depends_on natur-sprech-check + authentic-portrait + linkedin-carousel + nano-banana-image + openai-image-gen): Feinschliff, Thumbnail via _lib/designsystem/, optionales Carousel, Hashtag-Vorschläge, Status „bereit" |
| "linkedin-ideen", "post-ideen", "worüber soll ich posten", "content-vorschläge", "posting-inspiration" | `.skills/linkedin-ideen/SKILL.md` | Drei LinkedIn-Post-Ideen aus Vault-Wissen mit Performance-/Trend-Match |
| "linkedin-kommentar", "kommentier mir das", "kommentar schreiben", "linkedin kommentieren" | `.skills/linkedin-kommentar/SKILL.md` | LinkedIn-Kommentar-Entwürfe via WebFetch + Schreibstil-Filter (MVP-Scope, Phase-2 folgt) |
| "linkedin-research", "auto-research", "research-loop", "karpathy-loop" | `.skills/linkedin-research/SKILL.md` | Auto-Research-Loop für LinkedIn-Post-Entwürfe nach Karpathys Methode: iterativ Varianten erzeugen, gegen 7 harte + 6 weiche Assertions bewerten, beste Variante neben dem Original zeigen |
| "merk dir das", "merk dir bitte", "speicher das", "speichere das", "halt das fest", "halte das fest", "notier das", "notiere das" | `.skills/memory-router/SKILL.md` | Inhalt als atomare Notiz in `01 Inbox/` ablegen |
| "schreib eine mail/nachricht/einen post/brief", "verfasse", "formuliere", "entwirf", "antworte auf", "beantworte", "natur-sprech-check", "klingt das natürlich", "ist das ki-sprech", externer Empfänger | `.skills/natur-sprech-check/SKILL.md` | Externen Text gegen Schreibstil und KI-Sprech-Fallen prüfen |
| "neue präsentation", "präsentation anlegen", "slides für", "pitch deck", "folien zum termin", "präsentation anpassen", "echo-lauf", "audit-präsentation", "druckfähige präsentation", "a4-variante", "in a4 quer drucken", "pdf in a4" | `.skills/neue-praesentation/SKILL.md` | Vier-Modus-Präsentations-Skill (content/business/beratung-Profil, depends_on natur-sprech-check): Modus Neu/Update/Echo/Audit auf Wave-G-Foundation `_lib/designsystem/templates/praesentation/`, Bundle-Fingerprint-Vertrag bei Modus Audit |
| "recherchiere in meinen notebooks", "frag mein notebooklm", "was sagen meine notebooks", "schau in den notebooks", "durchsuche meine notebooks", "notebook-recherche" | `.skills/notebook-research/SKILL.md` | Recherche in NotebookLM-Notebooks delegieren |
| "projekt-session beenden", "handover schreiben", "handover aktualisieren", "projekt für heute beenden", "projekt feierabend" | `.skills/project-session-end/SKILL.md` | Projekt-Handover schreiben und Session-Log anstoßen |
| "reflector", "destilliere", "destillation", "aus session-logs lernen", "session-logs auswerten" | `.skills/reflector/SKILL.md` | Daily-Note-Reflexion zu Vault-Vorschlägen verdichten (Staging) |
| "session-log", "session schließen", "session beenden", "feierabend", "log die session", "schreib den session-log" | `.skills/session-log/SKILL.md` | Session-Log nach `05 Logbuch/Z Session Logs/` schreiben |
| "gmi-accountant", "buchhaltung machen", "belege abarbeiten", "batch buchhaltung", "rechnungen prüfen", "pflichtfelder ergänzen", "rechnungs-batch starten" | `.skills/gmi-accountant/SKILL.md` | Vorbereitender Finanzbuchhalter (business-Profil, depends_on getmyinvoices): Pflichtfelder aus PDF extrahieren, Critic-Pass gegen eingefrorene Evals, Tag-Ampel-Schreibung |
| "notebooklm-kurator", "inbox bearbeiten", "kuratiere mein notebooklm", "sortiere die inbox", "dubletten prüfen", "resync notebooklm", "notebooklm-index abgleichen" | `.skills/notebooklm-kurator/SKILL.md` | Kurator für NotebookLM-Notebooks (automation-Profil): Inbox-Quellen klassifizieren und einsortieren, URL-Hash-Idempotenz-Index, Verify nach Upload, Backup vor Delete, Audit-Log, Resync gegen NotebookLM-Wahrheit |
| "nano-banana", "nano-banana-image", "gemini-image", "bildgenerierung", "image-generation", "bild-erzeugen" | `.skills/nano-banana-image/SKILL.md` | Wrapper für die Google Gemini Image Generation API (Nano Banana, content+image-Profil): Bild-Erzeugung aus Text-Prompts, Multi-Reference-Editing für Identitäts-Konsistenz, transparente PNGs, Aspect-Ratio-Steuerung. Liest `GEMINI_API_KEY` aus der Umgebung (Skill-Config-Override möglich) |
| "openai-image", "gpt-image", "gpt-image-2", "dall-e", "openai-bild", "image-generation" | `.skills/openai-image-gen/SKILL.md` | Wrapper für die OpenAI gpt-image-2 API (content+image-Profil): Generate, Edit, Inpainting via Maske, Multi-Reference-Komposition, Output-Format-Steuerung (PNG/WebP/JPEG transparent). Liest `OPENAI_API_KEY` aus der Umgebung (Skill-Config-Override möglich) |
| "video bauen", "video-studio", "short produzieren", "linkedin-short", "motion graphics", "clip rendern", "voiceover erzeugen", "video-creator" | `.skills/video-creator/SKILL.md` | Video-Studio-Orchestrator (content-Profil, depends_on elevenlabs-api + nano-banana-image + natur-sprech-check): Zwei-Pfad-Triage Quick vs. Produktion, 10-Sub-Skill-Werkzeugkasten (Claude Design, HyperFrames, FFmpeg, Remotion etc.), Plattform-Best-Practices laden, LinkedIn-Shorts + Motion-Graphics + Selfcam-Workflows. Phase 1: Plan und Scribe-Integration, kein echter Render |

Weitere Skills werden hier ergänzt, sobald sie aktiviert sind. Manuell nachpflegen oder über `/skill-new`/`/skill-edit` automatisch aktualisieren lassen.

### Inaktive Bundle-Skills (bei Bedarf aktivieren)

Diese Skills sind im Bundle enthalten, aber `default_active: false`. Sie werden nicht automatisch durch den `trigger_enforcer`-Hook angeboten. Aktivierung über `/skill-activate <name>` oder Profil-Edit in `.skills/manifest.json`.

| Skill-Pfad | Warum inaktiv | Was tut der Skill |
|---|---|---|
| `.skills/getmyinvoices/SKILL.md` | Braucht GetMyInvoices-API-Key in 1Password-Setup | GetMyInvoices-API v3: Rechnungen, Companies, Bank-Transaktionen, Workflows |
| `.skills/migration/SKILL.md` | Welle-2-Logik vollständig (scan_old_vault.py + candidate_filter.py); Aktivierung opt-in über `/skill-activate migration` (kommt mit v0.6.x) | Strukturierte Übernahme von Inhalten aus einem bestehenden Vault |
| `.skills/master-prompt/SKILL.md` | Standardmäßig inaktiv (`default_active.content: false`); Aktivierung opt-in im content-Profil; Pfad A/B nutzt Subagent-Dispatch (general-purpose, vier parallel) — `features.codex_subagent_fallback: true` setzen, wenn kein Subagent-Dispatch verfügbar | Master Prompt für externe KI-Systeme (Claude.ai, ChatGPT, Gemini): drei Pfade — neuer Prompt (A), Delta-Update (B), gezieltes Lücken-Füllen (C); systematischer Vault-Scan zur Konsolidierung |
| `.skills/projekt-mentor/SKILL.md` | Persona-Modus, nur bei expliziter Mentor-Anfrage sinnvoll | Externer Berater-Blick auf laufende Projekte, sokratischer Dialog |
| `.skills/vault-gap-analysis/SKILL.md` | Standardmäßig inaktiv; aktiv im karpathy-Profil (Karpathy-Compiler-Kette) | Vault-Wissensgraph analysieren: Cluster erkennen, Lücken und Waisen-Dateien identifizieren |
| `.skills/auditor/SKILL.md` | Standardmäßig inaktiv; aktiv im karpathy-Profil (Karpathy-Compiler-Kette), depends_on: vault-gap-analysis | Wöchentlicher Vault-Audit: tote Zahnräder, Pflicht-Lücken, Duplikate, rostige Dateien und tote Links erkennen |
| `.skills/gmi-accountant/SKILL.md` | Standardmäßig inaktiv; aktiv im business-Profil; depends_on: getmyinvoices (braucht GMI-API-Key) | Vorbereitender Finanzbuchhalter über getmyinvoices: Pflichtfelder extrahieren, Critic-Pass gegen eingefrorene Evals, Tag-Ampel-Schreibung |

### Externe Plugin-Skill-Abhängigkeiten

| Bundle-Skill | Erwartet externen Skill | Verhalten bei Fehlen |
|---|---|---|
| `notebook-research` | `notebooklm` (z.B. anthropic-skills-Plugin) | Klare User-Information + Fallback auf Websuche / Vault-Recherche |
| `cross-check` | API-Wrapper-Skript (z.B. `setup-1password-key`) | Skill fragt nach Setup |

**Memory-Router-Sonderregel (B.1):** Der `memory-router`-Skill führt **keinen** Glossar-Abgleich der Eigennamen vor dem Speichern aus — er routet roh in die Inbox. Wenn die Glossar-Pflicht greift (siehe Pflicht-Checks oben), muss der User oder ein nachgelagerter Skill die Eigennamen beim Übernehmen aus `01 Inbox/` in PARA korrigieren. Volle Glossar-Integration im memory-router selbst kommt mit Welle 2.

### Profile

Das Bundle kennt sechs Theme-Profile (`bundle.json.profiles`): `allgemein`, `automation`, `beratung`, `business`, `content`, `image`. Jedes Profil aktiviert eine andere Skill-Kombination über `default_active.<profil>` in `manifest.json` und SKILL.md-Frontmattern.

- `allgemein` — Breit aufgestellt für gemischte Themen.
- `automation` — Wissensautomatisierung (notebooklm-kurator etc.).
- `business` — Buchhaltung und Finanzen (gmi-accountant, getmyinvoices).
- `beratung` — (reserviert für künftige Beratungs-Skills).
- `content` — LinkedIn-Workflow (Ideen, Entwurf, Kommentar, Research) und Inhalts-Skills.
- `image` — Bild-API-Wrapper (nano-banana-image, openai-image-gen) und künftige visuelle Skills, die `_lib/designsystem/` konsumieren.

## Hook-Index für Codex

Aktive Hooks im Bundle. Jeder Hook ist eine `.skills/<name>/hook.yaml` plus Skript, gespiegelt nach `.claude/settings.json` (Claude Code) und `.codex/config.toml` (Codex, sobald `tool_support.codex: true`).

| Hook | Event | Was tut der Hook |
|---|---|---|
| `frontmatter_validator` | PreToolUse (Edit, Write) | Blockt Edits/Writes ohne vollständige Pflicht-Frontmatter (type, description, agent_ready, schema_version, tags, created) |
| `wikilink_validator` | PreToolUse (Edit, Write) | Blockt Edits/Writes von Markdown-Dateien ohne mindestens einen Wikilink im Body (Graph-Pflicht). Mensch-Ergebnis-Types via `exempt_types` ausgenommen |
| `trigger_enforcer` | UserPromptSubmit | Scannt User-Prompts auf Trigger-Wörter aktiver Skills (aktive Skills aus `.docs/sync-state.json.active_skills`; Fallback auf `default_active`-Approximation, wenn Datei fehlt, defekt ist oder unbekannte schema_version trägt). Injiziert Aktivierungs-Hinweise via `additionalContext` |
| `output_filter` | Stop | Scannt letzte Assistant-Nachricht auf Umlaut-Ersatz (`ae/oe/ue/ss` als ganze Wortform → Treffer) und KI-Sprech-Phrasen, meldet Befunde auf stderr (Warn-Hook, kein Auto-Fix möglich) |
| `sync_drift_check` | SessionStart | Klassifiziert Drift zwischen `.skills/` und `.claude/skills/`: first-install (silent allow), in-sync (silent allow), source-newer (Auto-Fix via sync.py), mirror-newer (Block mit Repair-Hinweis auf `/sync-repair`) |
| `bundle_version_drift_check` | SessionStart | Vergleicht `bundle_version`-Frontmatter der Vault-Skills mit der installierten Bundle-Version aus `.docs/bundle.json`; knapps stderr-Hinweis bei Drift, keine Auto-Aktion |
| `guard_notebooklm_delete` | PreToolUse (Bash) | Blockt `notebooklm source delete`-Befehle des Kurators, wenn vorher kein Backup im Tagesordner unter `KURATOR_STATE_ROOT` existiert (Path-Containment via `_lib/env_loader.require_path_env_var`-Pattern, User-aktiviert) |

Codex liest diese Tabelle als Discovery-Quelle für Hook-Konsistenz und Trigger-Erwartung. Bei Hinzufügen eines Hooks zwingend Eintrag in `.skills/manifest.json` `hooks_index` UND in dieser Tabelle nachziehen — der Konsistenz-Test (`tests/unit/test_agents_md_consistency.py`) prüft beide Richtungen.

## Logik-Schichten

Das Vault verteilt seine Logik auf sechs Schichten — von hart-mechanisch bis weich-prosaisch. Jede Anforderung gehört auf die Schicht, die ihrer Natur entspricht.

1. **AGENTS.md** — Cross-Tool-Verfassung, Pflicht-Checks, harte Regeln. Diese Datei.
2. **Skills** (`.skills/<name>/SKILL.md`) — wiederverwendbare Workflows mit Trigger-Wörtern und Eval-Tests.
3. **Hooks** (`.skills/<name>/hook.yaml` plus Skript) — automatisch ausgelöste Mechanik bei Tool-Events (PreToolUse, SessionStart, Stop, UserPromptSubmit). Vier Typen: Trigger-Erzwingung, Edit-Schutz, Drift-Check, Output-Schutz.
4. **Slash-Commands** (`.commands/<name>.md`) — User-getriggerte Kurzbefehle.
5. **Routinen-Doku** (`08 Systemsteuerung/Routinen/`) — prosaische Workflows, die der Mensch oder Agent abarbeitet.
6. **Frontmatter** in jeder Datei — strukturierte Meta-Daten, die Skills und Hooks lesen.

Faustregel: Wenn eine Anforderung mechanisch erzwungen werden muss, gehört sie auf Schicht 1 oder 3. Wenn sie kontextabhängig ist und Urteilskraft braucht, gehört sie auf Schicht 2 oder 5. Frontmatter ist die Brücke zwischen beiden Welten.

## Tool-Hinweise

### Claude Code (primary)

- Skills werden automatisch geladen via `.claude/skills/`. Du musst keine Skill-Datei manuell öffnen — die Skill-Tool-Liste zeigt verfügbare Skills.
- Hooks aktiv: PreToolUse (Edit-Schutz), SessionStart (Drift-Check, Security), Stop (Output-Schutz), UserPromptSubmit (Trigger-Erzwingung).
- Output-Schutz greift mechanisch — Umlaute-Korrektur und KI-Sprech-Markierung passieren automatisch beim Beenden einer Antwort.
- Subagents über das Agent-Tool spawnen, wenn unabhängige Recherche- oder Schreib-Aufgaben parallelisiert werden können.

### Codex (secondary, asymmetrisch nur bei Skill-Discovery)

- Skill-Discovery ist **nicht automatisch**. Du musst den Skill-Index oben lesen und passende Skills selbst per `apply_patch` oder Datei-Open laden, sobald ein Trigger im User-Prompt auftaucht.
- **Hook-Status (Stand v0.6.1):** Alle sechs Bundle-Hooks (`frontmatter_validator`, `wikilink_validator`, `trigger_enforcer`, `output_filter`, `sync_drift_check`, `bundle_version_drift_check`) sind in der Codex-Schicht aktuell **NICHT** aktiviert (`tool_support.codex: false` in jeder `hook.yaml`). Das bedeutet: Frontmatter-Pflicht, Wikilink-Schutz, Drift-Check und Output-Filter greifen in Codex-Sessions nicht mechanisch. Du musst die Schreibstil- und Frontmatter-Regeln manuell einhalten und vor jedem `apply_patch` auf `.md`-Dateien selbst prüfen.
- Codex-Hook-Aktivierung ist v0.7-Backlog. Bis dahin: Skill-Bodies sind die einzige Verhaltensquelle.
- Tool-Vokabular: Codex nutzt `apply_patch` und `shell`. Skill-Bodies sind tool-neutral geschrieben — bei Anweisungen wie „bearbeite die Datei" wählst du das passende Tool selbst.

## Verknüpfungen

- [[CLAUDE.md|CLAUDE.md (Stub mit Claude-Spezifika)]]
- [[INDEX.md|INDEX.md (Runtime-Index)]]
- [[.skills/manifest.json|Skill- und Hook-Manifest]]
