diff --git a/README.md b/README.md
index 27d4d4d..ef226dd 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ Anfrage → n8n → Router-Service ──▶ Stufe 3 Embedding-Classifier (CPU)
| [docs/spec/](docs/spec/) | Spezifikationen der Komponenten |
| [docs/superpowers/plans/2026-10-12-aufbau-cluster-knaster.md](docs/superpowers/plans/2026-10-12-aufbau-cluster-knaster.md) | **Aufbauplan auf echter Hardware**: Phasen, Entscheidungen D1–D5, Zuordnung zu Planner Epic 7 |
| [docs/IMPLEMENTATION.md](docs/IMPLEMENTATION.md) | Arbeitspakete, Teststrategie, Stand der Verifikation |
+| [docs/reference/KNOW-schema.md](docs/reference/KNOW-schema.md) | Bestehende n8n-Wissensdatenbank KNOW/KGW: Tabellen, wer schreibt und liest, Auffälligkeiten |
| [docs/BETRIEB.md](docs/BETRIEB.md) | Skill-Lebenszyklus, Rolle von Hermes, Pflege per Prompt, Dry-Run aufheben, Rollback |
| [n8n/README.md](n8n/README.md) | Workflows und Import |
| [platform/proxmox/README.md](platform/proxmox/README.md) | Proxmox-Ablauf (OpenTofu + Ansible) |
diff --git a/docs/reference/KNOW-schema.md b/docs/reference/KNOW-schema.md
new file mode 100644
index 0000000..d125b4f
--- /dev/null
+++ b/docs/reference/KNOW-schema.md
@@ -0,0 +1,565 @@
+# KNOW: Tabellen und Zugriffe (n8n, Schema `knowledge`)
+
+Stand: 13.10.2026. Abgeleitet aus den Workflow-Definitionen auf n8n.mindboost.app, gelesen über die n8n-API. Inhalte der Datenbank wurden nicht gelesen.
+Interaktiver Graph: https://claude.ai/artifact/GP8FfU8M6Wk9hPRmJuk96h (privat, Freigabe über das Share-Menü)
+
+## Aufbau
+
+- **KNOW - Knowledge Base Gateway** ist ein Sub-Workflow mit 80 fest benannten Operationen. Jede Operation ist auf eine SQL-Vorlage abgebildet, freies SQL gibt es nicht. Unbekannte Operationen lehnt KNOW mit `Nicht erlaubte KNOW operation` ab. Die Tabellen legt `setup_schema` an (Postgres, Erweiterung `pg_trgm`).
+- **KGW - KNOW Query Gateway**: Eingang für externe Aufrufer (Hermes, Skripte) über `POST /webhook/know-query`.
+ - Authentifizierung: HMAC-SHA256 mit `X-KGW-Timestamp` und `X-KGW-Signature` (Schlüssel in `KGW_HMAC_KEY`), Zeitfenster 5 Min.
+ - Erlaubt sind 26 Operationen: alle Lese-Operationen plus Lern-Schreibzugriffe.
+ - Gesperrt sind `setup_schema` sowie die Operationen für BSB, KAF-Bestätigung, Kanzlei, Belege, Mailbox-Grants und LLM-Jobs.
+- **Direktes SQL an KNOW vorbei**:
+ - `CAT - Postfach Pipeline` aktualisiert `workflow_hints` (`notified_at`, `pending_notification`).
+ - `ASP - Absender-Report` liest `contacts`.
+
+## Auffälligkeiten
+
+1. **`CANCEL - Unsubscribe Link`** (aktiv) ruft in 4 Knoten `log_workflow_decision` auf. KNOW kennt diese Operation nicht und lehnt ab. Weil „Continue on Fail“ gesetzt ist, läuft der Workflow weiter, aber es wird nichts protokolliert.
+2. **`KAN-Learn - Kanbau Pattern Learning`** (aktiv) ruft `upsert_kanbau_project_patterns` auf. Auch diese Operation kennt KNOW nicht. Der Knoten hat keine Fehlerbehandlung, die Ausführung bricht dort ab.
+3. **`IN - Sicherheitsregeln Source Sync`** (inaktiv) ruft `upsert_input_validation_rule` und `upsert_input_validation_source_snapshot` auf. Beide gibt es in KNOW nicht.
+4. **Kein aktiver Workflow schreibt über KNOW** in: `contact_aliases`, `contact_project_relations`, `projects`, `project_folders`, `property_development_cases`, `property_development_documents`, `place_enrichments`, `workflow_decisions`, `workflow_hint_config`, `agent_capabilities`, `agent_context_documents`, `agent_execution_log`. Möglich sind Schreibzugriffe von außerhalb von n8n.
+5. **`document_extractions`** wird nur von außen über KGW beschrieben.
+6. **Löschfristen:** Für Klartext-Felder (`llm_jobs.prompt` und `.result`, `document_extractions.extracted_text`, `property_development_cases.meeting_transcripts`, `agent_context_documents.content`) ist keine Bereinigung erkennbar. Es gibt nur `purge_*`-Operationen für Absender-Beobachtungen und Aliase. Bei `browser_sessions.session_data` ist am Schema nicht erkennbar, ob es verschlüsselt ist.
+
+## Bezug zu knaster
+
+- **Task 6.4:** `find_active_llm_workers` ist über KGW von außen erlaubt. Die Operation liefert `mac, host, model, tier, tier_rank, status, endpoint, last_seen_at, age_seconds` und die Zahl wartender Jobs. Der Router kann aktive Worker damit ohne neuen Webhook lesen, braucht dafür aber den HMAC-Schlüssel.
+- **Gleiche Idee wie die Skill-Graduierung:** `workflow_hint_config.min_observations_for_skip_ai` lässt die KI weg, sobald ein Muster oft genug beobachtet wurde. Aus `workflow_decisions` (Vorschlag vs. tatsächliche Entscheidung) ließen sich Präferenzpaare gewinnen.
+
+## Tabellen
+
+### Mail und Absender
+
+#### `mail_events`
+
+Eine Zeile pro verarbeiteter Mail: Kategorie, zugeordnetes Projekt, Status.
+
+**Sensibel:** Absender und Betreff jeder verarbeiteten Mail.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | BCAT - Historische Mail-Analyse (inaktiv): `store_mail_event`
CAT - Postfach Pipeline: `store_mail_event`
MPA - Projekt-Ablage: `store_mail_event` |
+| liest | KGW - KNOW Query Gateway: `find_mail_events, get_mail_events_summary, get_sender_profile`
MPA - Projekt-Ablage: `find_mail_events` |
+
+11 Spalten
+
+`id` BIGSERIAL, `message_id` TEXT, `mailbox` TEXT, `sender` TEXT, `subject` TEXT, `received_at` TIMESTAMPTZ, `category` TEXT, `assigned_project_key` TEXT, `workflow_status` TEXT, `raw_signals` JSONB, `last_processed_at` TIMESTAMPTZ
+
+
+
+#### `sender_observations`
+
+Absender-Profil je Postfach und Zeitfenster.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | ASP - Absender-Profil Backfill: `upsert_sender_observation` |
+| liest | KGW - KNOW Query Gateway: `get_sender_profile, list_sender_domains` |
+
+25 Spalten
+
+`id` BIGSERIAL, `observation_key` TEXT, `mailbox` TEXT, `email` TEXT, `registered_domain` TEXT, `display_name` TEXT, `window_from` TIMESTAMPTZ, `window_to` TIMESTAMPTZ, `mail_count` INTEGER, `junk_count` INTEGER, `category_histogram` JSONB, `dominant_category` TEXT, `dominant_share` NUMERIC, `avg_confidence` NUMERIC, `absender_typ` TEXT, `mail_art` TEXT, `unsubscribe_url` TEXT, `unsubscribe_mailto` TEXT, `unsubscribe_one_click` BOOLEAN, `first_mail_at` TIMESTAMPTZ, `last_mail_at` TIMESTAMPTZ, `subjects_sample` JSONB, `source` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `platform_domains`
+
+Bekannte Plattform-Domains.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | ASP - Absender-Profil Backfill: `upsert_platform_domain` |
+| liest | ASP - Absender-Profil Backfill: `find_platform_domain`
HMB - Postfach Backfill (inaktiv): `find_platform_domain`
KGW - KNOW Query Gateway: `get_sender_profile, list_sender_domains` |
+
+9 Spalten
+
+`id` BIGSERIAL, `registered_domain` TEXT, `display_name` TEXT, `status` TEXT, `source` TEXT, `evidence_json` JSONB, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `mailbox_grants`
+
+Zugriffsrechte auf Postfächer (delegierter Consent).
+
+**Sensibel:** OAuth-Tokens, verschlüsselt (AES-256-GCM).
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | MPA - Delegated Consent: `upsert_mailbox_grant`
MPA - Get Mailbox Access: `upsert_mailbox_grant` |
+| liest | MPA - Get Mailbox Access: `get_mailbox_grant`
MPA - Projekt-Ablage: `list_active_mailbox_grants` |
+
+13 Spalten
+
+`id` BIGSERIAL, `grant_key` TEXT, `provider` TEXT, `scope` TEXT, `token_ciphertext` TEXT, `token_iv` TEXT, `token_tag` TEXT, `token_alg` TEXT, `expires_hint` TIMESTAMPTZ, `status` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+### Kontakte und Projekte (KanBau)
+
+#### `contacts`
+
+Kontakte (Firmen, Personen).
+
+**Sensibel:** Personenbezogen: E-Mail, Telefon, Steuer-Nr., USt-IdNr. (IBAN nur als Hash).
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | ASP - Absender-Profil Backfill: `upsert_contact`
BCAT - Historische Mail-Analyse (inaktiv): `update_sender_relevance`
KGW - KNOW Query Gateway: `update_sender_relevance, upsert_contact` |
+| liest | ASP - Absender-Report: `SELECT (Report)`
CAT - Postfach Pipeline: `find_workflow_hints`
KGW - KNOW Query Gateway: `find_contact_candidates, find_workflow_hints, get_sender_profile`
OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints` |
+
+24 Spalten
+
+`id` BIGSERIAL, `contact_key` TEXT, `contact_type` TEXT, `display_name` TEXT, `legal_name` TEXT, `normalized_name` TEXT, `email` TEXT, `phone` TEXT, `website` TEXT, `tax_id` TEXT, `vat_id` TEXT, `iban_hash` TEXT, `address_json` JSONB, `source` TEXT, `source_confidence` NUMERIC, `kanbau_address_id` TEXT, `raw_evidence_json` JSONB, `quality_status` TEXT, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `verified_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `business_relevance_score` NUMERIC
+
+
+
+#### `contact_aliases`
+
+Schreibweisen von Kontakten.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | KGW - KNOW Query Gateway: `find_contact_candidates` |
+
+11 Spalten
+
+`id` BIGSERIAL, `alias_key` TEXT, `contact_key` TEXT, `alias_type` TEXT, `alias_value` TEXT, `normalized_value` TEXT, `source_workflow` TEXT, `confidence` NUMERIC, `evidence_json` JSONB, `quality_status` TEXT, `created_at` TIMESTAMPTZ
+
+
+
+#### `contact_project_relations`
+
+Kontakt ↔ Projekt.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+12 Spalten
+
+`id` BIGSERIAL, `relation_key` TEXT, `contact_key` TEXT, `project_key` TEXT, `relation_type` TEXT, `confidence` NUMERIC, `source_workflow` TEXT, `evidence_json` JSONB, `valid_from` DATE, `valid_to` DATE, `quality_status` TEXT, `created_at` TIMESTAMPTZ
+
+
+
+#### `projects`
+
+KanBau-Projekte mit Adresse.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | KGW - KNOW Query Gateway: `find_project_candidates, get_sender_profile`
NEX - Teams Chat Agent: `find_project_candidates` |
+
+17 Spalten
+
+`id` BIGSERIAL, `project_key` TEXT, `kanbau_project_id` TEXT, `project_number` TEXT, `project_name` TEXT, `short_code` TEXT, `company_context` TEXT, `street` TEXT, `zip` TEXT, `city` TEXT, `full_address` TEXT, `normalized_address` TEXT, `status` TEXT, `raw_kanbau_json` JSONB, `last_synced_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `project_aliases`
+
+Aliase und gelernte Tokens zu Projekten.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KGW - KNOW Query Gateway: `purge_spf_aliases, upsert_project_alias`
MPA - Projekt-Ablage: `reject_project_alias, upsert_project_alias, upsert_project_alias_tokens` |
+| liest | KGW - KNOW Query Gateway: `find_project_candidates, get_sender_profile, list_sender_domains`
NEX - Teams Chat Agent: `find_project_candidates`
PRO - Project Assignment: `find_project_by_alias` |
+
+13 Spalten
+
+`id` BIGSERIAL, `alias_key` TEXT, `project_key` TEXT, `kanbau_project_id` TEXT, `alias_type` TEXT, `alias_value` TEXT, `normalized_value` TEXT, `source_workflow` TEXT, `confidence` NUMERIC, `evidence_json` JSONB, `quality_status` TEXT, `verified_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ
+
+
+
+#### `project_events`
+
+Ereignisse aus Mails (Verzögerung, Mangel, Termin, Kosten).
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | MPA - Projekt-Ablage: `upsert_project_event` |
+| liest | – |
+
+15 Spalten
+
+`id` BIGSERIAL, `message_id` TEXT, `project_key` TEXT, `mailbox` TEXT, `sender` TEXT, `event_date` TIMESTAMPTZ, `category` TEXT, `affected_unit` TEXT, `urgency` TEXT, `summary` TEXT, `sharepoint_path` TEXT, `quality_status` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `project_folders`
+
+SharePoint-Ordner je Projekt.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+10 Spalten
+
+`id` BIGSERIAL, `project_key` TEXT, `drive_id` TEXT, `folder_item_id` TEXT, `folder_path` TEXT, `folder_name` TEXT, `verified_at` TIMESTAMPTZ, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `project_companies`
+
+Kürzel → Gesellschaft.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | RAR - Rechnungsanschrift pruefen: `record_invoice_company` |
+| liest | RAR - Rechnungsanschrift pruefen: `get_project_company` |
+
+8 Spalten
+
+`kuerzel` TEXT, `gesellschaft` TEXT, `quelle` TEXT, `bestaetigt` BOOLEAN, `baustelle` TEXT, `evidence_json` JSONB, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `invoice_company_observations`
+
+Gesellschaft aus Rechnungen beobachtet.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | RAR - Rechnungsanschrift pruefen: `record_invoice_company` |
+| liest | RAR - Rechnungsanschrift pruefen: `get_project_company` |
+
+8 Spalten
+
+`message_id` TEXT, `file_name` TEXT, `kuerzel` TEXT, `gesellschaft` TEXT, `mailbox` TEXT, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+### Dokumente
+
+#### `document_extractions`
+
+Extraktionen aus Anhängen.
+
+**Sensibel:** Extrahierter Volltext von Anhängen.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KGW - KNOW Query Gateway: `store_document_extraction` |
+| liest | – |
+
+17 Spalten
+
+`id` BIGSERIAL, `request_id` TEXT, `message_id` TEXT, `mailbox` TEXT, `attachment_id` TEXT, `file_name` TEXT, `content_type` TEXT, `extraction_source` TEXT, `document_type` TEXT, `sender_contact_key` TEXT, `project_key` TEXT, `extracted_text` TEXT, `structured_json` JSONB, `detected_addresses_json` JSONB, `detected_contacts_json` JSONB, `confidence` NUMERIC, `created_at` TIMESTAMPTZ
+
+
+
+### Ankauf und Projektentwicklung (KAF)
+
+#### `property_development_cases`
+
+Ankaufsfälle (~70 Felder).
+
+**Sensibel:** Kaufpreise, Provisionen und Besprechungsmitschriften.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | KGW - KNOW Query Gateway: `find_cases_by_deadline, find_cases_missing_documents, find_cases_needing_next_action, find_cases_with_offer_status, find_property_development_candidates, summarize_property_development_case` |
+
+73 Spalten
+
+`id` BIGSERIAL, `case_key` TEXT, `name` TEXT, `normalized_name` TEXT, `status` TEXT, `pipeline_status` TEXT, `outcome_status` TEXT, `case_code` TEXT, `case_opened_at` DATE, `folder_name` TEXT, `folder_path` TEXT, `folder_status_source` TEXT, `source_channel` TEXT, `location_city` TEXT, `location_district` TEXT, `street_address` TEXT, `assigned_to` TEXT, `asset_type` TEXT, `process_type` TEXT, `notes` TEXT, `property_size_sqm` NUMERIC, `original_purchase_price_eur` NUMERIC, `average_price_per_sqm_eur` NUMERIC, `commission_including_vat` TEXT, `apartment_count` INTEGER, `development_plan_available` BOOLEAN, `godel_internal` BOOLEAN, `contact_broker` TEXT, `start_date` DATE, `offer_deadline` DATE, `offer_submitted_at` DATE, `last_offer_at` DATE, `offer_count` INTEGER, `review_status` TEXT, `review_result` TEXT, `meeting_transcripts` TEXT, `just_one_week_more` BOOLEAN, `deadline_is_overdue` BOOLEAN, `godel_offer` TEXT, `project_lead` TEXT, `planning` TEXT, `nda_present` BOOLEAN, `loi_present` BOOLEAN, `bplan_document_present` BOOLEAN, `wirtschaftlichkeit_present` BOOLEAN, `purchase_offer_present` BOOLEAN, `building_permit_present` BOOLEAN, `risk_summary` TEXT, `missing_documents` JSONB, `next_action` TEXT, `next_action_due_at` DATE, `last_document_at` DATE, `document_count` INTEGER, `case_readiness` TEXT, `detected_documents` JSONB, `risk_level` TEXT, `readiness_json` JSONB, `source_system` TEXT, `sharepoint_json` JSONB, `raw_evidence_json` JSONB, `quality_status` TEXT, `confidence` NUMERIC, `first_seen_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `confirmation_token_hash` TEXT, `confirmation_status` TEXT, `confirmation_expires_at` TIMESTAMPTZ, `selected_project_id` TEXT, `created_saleagr_id` TEXT, `created_saleagr_url` TEXT, `confirmation_request_id` TEXT
+
+
+
+#### `property_development_documents`
+
+Dokumente je Ankaufsfall.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | KGW - KNOW Query Gateway: `summarize_property_development_case` |
+
+20 Spalten
+
+`id` BIGSERIAL, `case_key` TEXT, `document_key` TEXT, `sharepoint_item_id` TEXT, `file_name` TEXT, `file_path` TEXT, `folder_segment` TEXT, `document_type` TEXT, `document_date` DATE, `received_at` DATE, `author_or_sender` TEXT, `source_party` TEXT, `extracted_summary` TEXT, `extracted_fields_json` JSONB, `confidence` NUMERIC, `is_current_version` BOOLEAN, `supersedes_document_key` TEXT, `processing_status` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `kaf_review_snapshots`
+
+Prüfstände von Kaufverträgen.
+
+**Sensibel:** Kaufvertragsfelder und Prüfer.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KAF - Bestätigung Webhook: `complete_kaf_review`
KAF - Kaufvertrag Erkennung und Extraktion: `store_kaf_review_snapshot` |
+| liest | KAF - Bestätigung Webhook: `get_kaf_review_snapshot` |
+
+22 Spalten
+
+`id` BIGSERIAL, `case_key` TEXT, `review_schema_version` TEXT, `confirmation_token_hash` TEXT, `confirmation_expires_at` TIMESTAMPTZ, `review_status` TEXT, `request_id` TEXT, `review_to` TEXT, `delivery_mode` TEXT, `original_json` JSONB, `distribution_json` JSONB, `fields_json` JSONB, `units_json` JSONB, `artifacts_json` JSONB, `reviewed_values_json` JSONB, `review_comment` TEXT, `reviewed_by` TEXT, `review_identity_source` TEXT, `review_submission_hash` TEXT, `reviewed_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `kanzlei_field_patterns`
+
+Feldmuster je Notarkanzlei.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KAF - Kaufvertrag Erkennung und Extraktion: `upsert_kanzlei_field_patterns` |
+| liest | KAF - Kaufvertrag Erkennung und Extraktion: `get_kanzlei_field_patterns` |
+
+4 Spalten
+
+`kanzlei_key` TEXT, `kanzlei_display` TEXT, `patterns` JSONB, `updated_at` TIMESTAMPTZ
+
+
+
+#### `kanzlei_project_relations`
+
+Kanzlei ↔ Projekt.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KAF - Kaufvertrag Erkennung und Extraktion: `upsert_kanzlei_project_relation` |
+| liest | – |
+
+6 Spalten
+
+`relation_key` TEXT, `kanzlei_key` TEXT, `project_key` TEXT, `project_name` TEXT, `notar_name` TEXT, `updated_at` TIMESTAMPTZ
+
+
+
+#### `place_enrichments`
+
+Adresse → Flurstück, Koordinaten.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+15 Spalten
+
+`id` BIGSERIAL, `place_key` TEXT, `input_address` TEXT, `match_address` TEXT, `flurstueck` TEXT, `lat` DOUBLE, `lon` DOUBLE, `bundesland` TEXT, `enrichment_json` JSONB, `provenance_json` JSONB, `quality_status` TEXT, `confidence` DOUBLE, `source_workflow` TEXT, `created_at` TIMESTAMPTZ, `refreshed_at` TIMESTAMPTZ
+
+
+
+### Buchhaltung
+
+#### `bel_processed_belege`
+
+Verarbeitete SEPA-Belege.
+
+**Sensibel:** Bank, Konto-Referenz und Beträge.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | BEL - SEPA-Beleg-Verteilung: `confirm_beleg_uploaded, reserve_beleg` |
+| liest | – |
+
+15 Spalten
+
+`id` BIGSERIAL, `beleg_hash` TEXT, `status` TEXT, `bank` TEXT, `account_ref` TEXT, `amount_cents` BIGINT, `sharepoint_path` TEXT, `export_ref` TEXT, `request_id` TEXT, `raw_evidence_json` JSONB, `reserved_at` TIMESTAMPTZ, `uploaded_at` TIMESTAMPTZ, `last_seen_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+### Lernen und Workflow-Gedächtnis
+
+#### `workflow_decisions`
+
+Vorschlag vs. tatsächliche Entscheidung.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+13 Spalten
+
+`id` BIGSERIAL, `request_id` TEXT, `workflow` TEXT, `reference_type` TEXT, `reference_id` TEXT, `proposed_decision` JSONB, `final_decision` JSONB, `confidence` NUMERIC, `correction_reason` TEXT, `quality_status` TEXT, `created_at` TIMESTAMPTZ, `verified_at` TIMESTAMPTZ, `decision_type` TEXT
+
+
+
+#### `workflow_hints`
+
+Gelernte Muster mit Bestätigung.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | ASP - Absender-Profil Backfill: `backfill_workflow_hint`
CAT - Postfach Pipeline: `UPDATE … SET notified_at, pending_notification, upsert_workflow_hint`
KAN - Kanbau API Gateway: `upsert_workflow_hint`
KGW - KNOW Query Gateway: `promote_workflow_hint, reject_workflow_hint, upsert_workflow_hint`
KNOW - Hint Confirmation Webhook: `promote_workflow_hint, reject_workflow_hint`
OR - PDF and E-Rechnung Extraction (inaktiv): `upsert_workflow_hint` |
+| liest | CAT - Postfach Pipeline: `find_workflow_hints, get_pending_hint_proposals`
KGW - KNOW Query Gateway: `find_workflow_hints, get_pending_hint_proposals, get_sender_profile, summarize_workflow_lessons`
OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints` |
+
+15 Spalten
+
+`hint_key` TEXT, `workflow` TEXT, `hint_type` TEXT, `pattern_key` TEXT, `pattern_value` TEXT, `suggested_action` JSONB, `observation_count` INTEGER, `confidence` NUMERIC, `quality_status` TEXT, `pending_notification` BOOLEAN, `notified_at` TIMESTAMPTZ, `confirmed_at` TIMESTAMPTZ, `confirmed_by` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `workflow_hint_config`
+
+Ab wann die KI übersprungen wird.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | BCAT - Historische Mail-Analyse (inaktiv): `update_sender_relevance`
CAT - Postfach Pipeline: `find_workflow_hints, get_pending_hint_proposals, upsert_workflow_hint`
KAN - Kanbau API Gateway: `upsert_workflow_hint`
KGW - KNOW Query Gateway: `find_workflow_hints, get_hint_config, get_pending_hint_proposals, summarize_workflow_lessons, update_sender_relevance, upsert_workflow_hint`
OR - PDF and E-Rechnung Extraction (inaktiv): `find_workflow_hints, upsert_workflow_hint` |
+
+10 Spalten
+
+`config_key` TEXT, `min_observations_for_skip_ai` INTEGER, `priority_level` TEXT, `preferred_model` TEXT, `safety_floor` BOOLEAN, `relevance_weight` NUMERIC, `outlook_category` TEXT, `requires_action` BOOLEAN, `description` TEXT, `updated_at` TIMESTAMPTZ
+
+
+
+#### `kanbau_method_examples`
+
+Beispiele je KanBau-API-Methode.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | KAN - Kanbau API Gateway: `upsert_kanbau_method_example` |
+| liest | KGW - KNOW Query Gateway: `get_kanbau_method_example` |
+
+7 Spalten
+
+`method_key` TEXT, `swagger_ref` TEXT, `example_request` JSONB, `example_response` JSONB, `validated_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+### Agent
+
+#### `agent_capabilities`
+
+Fähigkeiten eines Agenten.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+14 Spalten
+
+`id` BIGSERIAL, `scope_key` TEXT, `capability_key` TEXT, `title` TEXT, `description` TEXT, `intent_examples` JSONB, `workflow_name` TEXT, `workflow_operation` TEXT, `read_or_write` TEXT, `risk_level` TEXT, `requires_approval` BOOLEAN, `enabled` BOOLEAN, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `agent_context_documents`
+
+Kontextdokumente für Agenten.
+
+**Sensibel:** Volltext eingelesener Dokumente.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+8 Spalten
+
+`id` BIGSERIAL, `scope_key` TEXT, `source_path` TEXT, `document_type` TEXT, `title` TEXT, `content` TEXT, `content_hash` TEXT, `last_ingested_at` TIMESTAMPTZ
+
+
+
+#### `agent_execution_log`
+
+Protokoll der Agent-Aufrufe.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | – |
+| liest | – |
+
+10 Spalten
+
+`id` BIGSERIAL, `request_id` TEXT, `agent_scope` TEXT, `user_request` TEXT, `selected_capability` TEXT, `workflow_called` TEXT, `inputs_json` JSONB, `status` TEXT, `errors_json` JSONB, `created_at` TIMESTAMPTZ
+
+
+
+### Browser-Automation (BSB)
+
+#### `session_providers`
+
+Login-Abläufe für Browser-Automation.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | BSB - Discover Session: `upsert_session_provider` |
+| liest | BSB - Get Session: `get_session_provider` |
+
+10 Spalten
+
+`provider_id` TEXT, `display_name` TEXT, `login_url` TEXT, `auth_type` TEXT, `steps_json` JSONB, `credential_key` TEXT, `max_session_age_minutes` INTEGER, `notes` TEXT, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+#### `browser_sessions`
+
+Gespeicherte Browser-Sessions.
+
+**Sensibel:** Session-Daten als JSON; am Schema nicht erkennbar, ob verschlüsselt.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | BSB - Execute Login: `upsert_browser_session` |
+| liest | BSB - Get Session: `get_browser_session` |
+
+5 Spalten
+
+`provider_id` TEXT, `session_data` JSONB, `expires_at` TIMESTAMPTZ, `created_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+
+### LLM-Worker
+
+#### `llm_workers`
+
+Registrierte lokale LLM-Worker.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | LLM - Job Poll: `claim_llm_job`
LLM - Worker Registry: `update_llm_worker_status, upsert_llm_worker` |
+| liest | KGW - KNOW Query Gateway: `find_active_llm_workers`
LLM - Router: `find_active_llm_workers` |
+
+12 Spalten
+
+`id` BIGSERIAL, `mac` TEXT, `host` TEXT, `model` TEXT, `tier` TEXT, `tier_rank` SMALLINT, `status` TEXT, `hardware_json` JSONB, `last_seen_at` TIMESTAMPTZ, `registered_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ, `endpoint` JSONB
+
+
+
+#### `llm_worker_blocklist`
+
+Gesperrte Worker.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | LLM - Worker Registry: `blocklist_llm_worker` |
+| liest | – |
+
+6 Spalten
+
+`id` BIGSERIAL, `mac` TEXT, `host` TEXT, `reason` TEXT, `hardware_json` JSONB, `blocked_at` TIMESTAMPTZ
+
+
+
+#### `llm_jobs`
+
+Job-Board für lokale LLMs.
+
+**Sensibel:** Prompt und Ergebnis im Klartext.
+
+| Zugriff | Workflows und Operationen |
+|---|---|
+| schreibt | LLM - Job Poll: `claim_llm_job`
LLM - Job Submit: `enqueue_llm_job`
LLM - Result Handler: `complete_llm_job`
LLM - Router: `cancel_llm_job, enqueue_llm_job` |
+| liest | KGW - KNOW Query Gateway: `find_active_llm_workers`
LLM - Router: `find_active_llm_workers, get_llm_job` |
+
+16 Spalten
+
+`id` BIGSERIAL, `job_id` TEXT, `prompt` TEXT, `min_tier` TEXT, `min_tier_rank` SMALLINT, `status` TEXT, `assigned_to` TEXT, `model` TEXT, `tier` TEXT, `result` TEXT, `duration_ms` INTEGER, `error_message` TEXT, `created_at` TIMESTAMPTZ, `assigned_at` TIMESTAMPTZ, `completed_at` TIMESTAMPTZ, `updated_at` TIMESTAMPTZ
+
+
+