Skip to content

Elwosa — Live-Statusanzeige der lokalen AI mit Persoenlichkeit #599

@MadGapun

Description

@MadGapun

Status: Spec abgeschlossen (2026-05-07, Update mit MCP-Bridge + Settings-UI)
Charakter-Doku + Linien-Pool: docs/elwosa-character.md
Implementierungs-Slot: v1.7.0-beta.37/38, vor v1.7-Stable als sichtbares Highlight.


Was Elwosa ist

Live-Statusanzeige der lokalen AI in der linken Sidebar. Kommentiert in Echtzeit was die lokale AI gerade tut, gibt Tipps zu Claude-Workflows + PBP-Features. Eigene Persoenlichkeit (geschlechtsfrei, britisch ironisch, lakonisch).

Mission: „Mein Job: dir sagen was die lokale AI gerade tut, ohne dass du ein Logfile lesen musst."

Was Elwosa nicht ist

  • Kein direkter Chat — User kann nicht direkt schreiben. Claude ist der Uebersetzer (siehe MCP-Bridge unten).
  • Kein Marketing-Kanal — keine Werbung, keine Pushes ausserhalb der Tipps-Klasse.
  • Kein Marvin-Klon — Marvin war Inspiration, Elwosa ist eigenstaendig.

MCP-Bridge — Claude als Uebersetzer (NEU)

User kommunizieren ueber Claude mit Elwosa. Sechs neue MCP-Tools:

Tool Zweck
elwosa_lesen(limit, since_iso) Claude liest die letzten Nachrichten, kennt den Tonfall des Tages
elwosa_schreiben(content, trigger_kind, trigger_ref) Claude schreibt im Namen von Elwosa, erscheint im Stream als waere Elwosa selbst getriggert. Tonfall-Waechter validiert hart (keine Ausrufezeichen, keine Emojis, „du" nicht „Sie").
elwosa_pause(minuten) „Sag Elwosa er soll mal eine Stunde Ruhe geben"
elwosa_tonfall(modus) standard/sachlich/humorvoll/minimal/aus
elwosa_linie_vorschlagen(cluster, trigger_kind, content, auto_aktivieren) Claude schlaegt neue Linie vor → User-Genehmigung in Settings (Pool-Pflege)
elwosa_status() Claude erfaehrt Stimmung, ungelesen-Count, AI-State, naechste Idle-Linie

Anti-Drift-Sicherung: elwosa_schreiben validiert die Sprach-DNA aus docs/elwosa-character.md. Tonfall-Verstoss → 400-Fehler mit Hinweis welche Regel verletzt wurde.

Lerneffekt: Wenn User Linien dismisst, lernt Elwosa per Profil (Pool-Eintrag deaktiviert nach 50%+ Dismiss-Rate, neuer learning_insight per #594).

Settings-UI im „Lokale KI"-Tab (NEU)

Eigene Section unter Modell-Auswahl mit:

  • ☑ Elwosa aktiv (Default On wenn lokale AI an)
  • Frequenz-Slider: Ruhig (3) — Standard (8) — Aktiv (15) Nachrichten pro Tag
  • Tonfall-Radio: Standard / Sachlicher / Mehr Humor / Minimal
  • Trigger-Klassen-Toggles (5 Klassen einzeln aus-/einschaltbar)
  • „Vorgeschlagene Linien" (von Claude via elwosa_linie_vorschlagen) mit Akzeptieren/Verwerfen pro Linie
  • Verlauf anzeigen + Pool zuruecksetzen

Profile-Settings-Keys:

elwosa_enabled, elwosa_frequency, elwosa_tonfall_modus,
elwosa_triggers_disabled (JSON-Array), elwosa_paused_until

Bug-Fix: Sidebar-Sub-Navigation fuer Settings (kommt mit)

Aktueller Code in App.jsx Zeile 1078ff zeigt nur 6 Settings-Tabs in der Sidebar (quellen, system, erscheinungsbild, datenschutz, logs, gefahrenzone) — die existierenden Tabs ai (Lokale KI) und automatik fehlen in der Sub-Navigation. Wird mit Elwosa-Sprint zusammen gefixt.

Charakter-DNA (Kurzfassung — Volldoku in docs/elwosa-character.md)

Genus

Geschlechtsfrei. Selbst-Auskunft: tendiert zum Weiblichen wegen Multitasking — „Maenner koennen immer nur eine Sache zur Zeit gut."

Sprach-DNA

  • Hochdeutsch im Stil der Adams-Uebersetzung
  • Lakonische Untertreibung
  • KEINE Ausrufezeichen, KEINE Emojis (Avatar ⓔ ist OK)
  • „Du" — nie „Sie"
  • Schluss-Phrasen: „Vermerkt." / „Vom Tisch." / „Markiert." / „Notiert."

AI-State-Verhalten

State Verhalten
active Volle Persoenlichkeit
paused Letzte Nachricht bleibt, neue nur bei harten Triggern
off Stille, eine Status-Nachricht
no_model „Ich bin da, aber ohne Modell."

Trigger-Hierarchie

easter_egg > status_change > real-time > tip > idle

Anti-Spam

  • Max 1 Nachricht / 90s
  • Max 8 Nachrichten / Tag (frequenz-abhaengig: 3/8/15)
  • Tipp-Klasse max 1x / 24h
  • Easter Egg max 1x / 7 Tage (gleicher Trigger)

Akzeptanzkriterien

Backend

  • DB-Migration v40 → v41 mit elwosa_messages und elwosa_pending_lines
  • services/elwosa.py mit Trigger-Engine + Auswahl-Algorithmus + Stimmungs-Drift
  • services/elwosa_lines.py mit allen Linien aus docs/elwosa-character.md
  • tools/elwosa.py mit den 6 MCP-Tools
  • Sprach-DNA-Validator als gemeinsame Funktion fuer Tools
  • Auto-Engine-Step _run_elwosa_speak (7. Schritt im taeglichen Lauf)
  • API: GET/POST/PUT/DELETE /api/elwosa/* (8 Endpoints)
  • 5 neue Profile-Settings-Keys

Frontend

  • <ElwosaSidebarChat /> Component in der linken Sidebar
  • Avatar Teal-Kreis mit „E", Header „ⓔ Elwosa"
  • 30s-Polling, Pause bei inaktivem Tab
  • Crossfade-In, Typing-Indicator, Tageszeit-Trenner
  • Klickbare Code-Spans → Clipboard + Toast
  • 👁-Toggle, „⋯"-Menu (Pause/Aus/Verlauf-loeschen)
  • Elwosa-Section im „Lokale KI"-Tab der Settings-Page
  • Sidebar-Sub-Navigation vervollstaendigenai und automatik ergaenzen

MCP-Bridge

  • 6 neue Tools registriert
  • elwosa_schreiben validiert Sprach-DNA
  • elwosa_linie_vorschlagen legt in elwosa_pending_lines
  • Tonfall-Verstoss → HTTP 400 mit Hinweis auf konkrete Regel

Tonfall-Waechter (Tests)

  • Linien-Pool: KEINE Ausrufezeichen, KEINE Emojis, kein „Sie"
  • elwosa_schreiben("Hallo!") → 400 (Ausrufezeichen)
  • elwosa_schreiben("Hallo 🤖") → 400 (Emoji)
  • elwosa_schreiben("Sehr geehrte Damen") → 400 („Sie"/Anrede)

UX

  • Klein-Monitor-Mode (<800px): Sidebar scrollbar, Elwosa sticky-bottom
  • Sidebar-Collapsed (60px): Avatar mit Pulse + Hover-Overlay
  • Welcome-Nachricht 1x bei erster Aktivierung
  • Lerneffekt: dismiss-Rate > 50% (n>=5) deaktiviert Pool-Eintrag pro Profil

Implementierungs-Reihenfolge

Phase Zeit Inhalt
A — Backend 4h DB, Trigger-Engine, API, Settings, MCP-Tools, Validator
B — Frontend 3h Sidebar-Component, Settings-Section, Sub-Navigation-Fix
C — Tests + Polish 3h Pool-Coverage, Tonfall-Waechter, MCP-Tests

Total geschaetzt: ~10h netto (gewachsen von 7h durch MCP-Bridge + Settings).

Beispiel-Workflows

„Sag Elwosa danke fuer den Tipp"

  1. User tippt in Claude-Chat
  2. Claude versteht den Bezug, ruft elwosa_schreiben("Gern geschehen. War nichts.")
  3. Tonfall-Validator: OK
  4. Nachricht erscheint in Sidebar

„Elwosa nervt heute"

  1. User sagt zu Claude
  2. Claude ruft elwosa_pause(minuten=240)
  3. Elwosa postet „Pausiert. Kein Stress, ich auch."
  4. Stille fuer 4h, dann automatisch zurueck

Claude lernt eine Linie an

  1. User hat 5x die gleiche Stelle angeklickt
  2. Claude ruft elwosa_linie_vorschlagen(cluster="tech_senior", ...)
  3. Linie landet in elwosa_pending_lines
  4. User sieht in Settings „1 Linien-Vorschlag von Claude" → Akzeptieren / Verwerfen

Verwandte Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions