# Claude Desktop — Roadmap Stand: 28.04.2026 --- ## Ziel Claude Desktop soll **schneller und maechtiger** sein als Codium + Claude Code Extension. Kein Feature-Bloat — nur das was echten Geschwindigkeits- und Produktivitaetsvorteil bringt. --- ## Abgeschlossen (v0.1.0 — 14.04.2026) Alles aus Phase 1-16 ist implementiert und funktionsfaehig: - Tauri 2.0 + SvelteKit 5 + Claude Agent SDK - 4-Panel Layout mit 24 UI-Komponenten - Claude Bridge (Node.js, stdio JSON-Lines) - Guard-Rails System (Safe/Moderate/Critical/Blocked) - SQLite Persistierung + Session-Management - Claude-DB Integration (Wissensbasis durchsuchen/speichern) - 3-Schichten Context-Management (Sticky/Projekt/Hints) - Sprach-Interface (Whisper STT + OpenAI TTS) - Multi-Agent-Modi (Solo/Handlanger/Experten/Auto) - Hook-System (SessionStart, PreToolUse, PostToolUse) - VSCodium-Extension (WebSocket Port 7890) - Programm-Steuerung (D-Bus, Xvfb, Playwright-MCP) - Praesentations-/Schulungsmodus - System-Monitor + Performance-Metriken - Subagent-Hierarchie mit Baumansicht - Auto-Updater (Forgejo Package Registry) - Slash-Command Autocomplete - KB-Hints Injection + Proaktive Intelligenz - Error-Pattern Auto-Detection (3x → KB-Eintrag) --- ## Phase 3: Performance (naechster Schritt) **Ziel:** Erste Antwort in < 1s, Bridge immer warm, kein Warten. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ KB-Cache (RAM) | `knowledge.rs` | 60s TTL, LRU, max 100 Entries | | ✅ Bridge Warm-Start | `lib.rs`, `claude.rs` | Start bei App-Launch, kein Cold-Start | | ✅ Lazy Panel-Load | `+page.svelte` | Dynamic Import mit Cache | | ✅ Session-Resume Fix | `claude-bridge.js` | Stale ID → auto-Retry neue Session | | ✅ Auto-Retry (Netzwerk) | `claude-bridge.js` | 3x Backoff bei Rate-Limit/5xx | | ✅ Bridge Heartbeat | `claude-bridge.js` | 30s Pulse an Rust | | ✅ FIFO Message Queue | `ChatPanel.svelte` | Mehrere Nachrichten queuen | | ✅ Bridge-Daemon | `claude.rs`, `claude-bridge.js` | Bridge ueberlebt App-Neustart (--socket Flag) | | ✅ Unix Socket IPC | `claude.rs`, `claude-bridge.js` | stdio → UDS (async, Reconnect, PID-Tracking) | --- ## Phase 4: Codium-Killer Features **Ziel:** Dinge die Codium + Extension prinzipbedingt NICHT koennen. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ Projekt-Wechsel | `db.rs`, `SessionList.svelte` | Ein Klick wechselt Projekt (CWD, Context, KB-Filter) | | ✅ MCP-Hub nativ | `claude.rs`, `claude-bridge.js` | MCP-Server aus .claude.json, UI-Verwaltung, Runtime-Injection | | ✅ Guard-Rails UI | `guard.rs`, `GuardRailsPanel.svelte` | Live-Feed, Risiko-Statistik, Ein-Klick-Freigabe, 3 Tabs | | ✅ Persistent Memory | `memory.rs`, `claude.rs` | Auto-Load Eintraege in Context, Cross-Session Gedaechtnis | | ✅ Quick-Actions | `QuickActions.svelte`, `ChatPanel.svelte` | Ctrl+K Palette: Deploy, Build, Test, Commit, Git, Navigation | | ✅ Voice-Conversation | `voice.rs`, `VoicePanel.svelte` | Lokales Whisper STT + Piper TTS, VAD, Gespraechsmodus | | ✅ Settings-Panel | `SettingsPanel.svelte` | VS-Code-artiges Layout mit Suche, Kategorien, Commands, Hooks | | ✅ Chat-Detach | `chat_window.rs`, `+page.svelte` | Chat in separates Fenster herausloesen/zurueckholen | | ✅ Aktivitaets-Phasen | `events.ts`, `ChatPanel.svelte` | 4 Phasen: Denkt/Streamt/Tool/Subagent statt nur "Denkt nach" | --- ## Phase 5: Lokale KI + Offline **Ziel:** Unabhaengig von Cloud fuer Routine-Tasks. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ Whisper.cpp lokal | `voice.rs` | whisper-cli STT, Thorsten-DE Modell, kein OpenAI noetig | | ✅ Piper-TTS lokal | `voice.rs` | piper-tts mit thorsten_emotional (high), offline | | ✅ Lokales Haiku-Equivalent | `claude-bridge.js`, `claude.rs` | Ollama-Integration, Auto-Detect, local-query Command | | ✅ Offline-Queue | `session.rs` | SQLite-Queue, queue/flush/clear Commands, Auto-Retry | --- ## Phase 6: Desktop-Integration (Linux-Native) **Ziel:** Claude steuert den Desktop wie ein zweiter User. | Feature | Datei(en) | Beschreibung | |---------|-----------|--------------| | ✅ D-Bus Actions | `programs.rs`, `ProgramsPanel.svelte` | 10 Aktionen: Dolphin, Kate, Konsole, Firefox, Notify, Lock | | ✅ Clipboard-Watch | `clipboard.rs` | Claude reagiert auf Clipboard-Inhalt (Code/URL/Fehler erkennen) | | ✅ File-Drop | `ChatPanel.svelte` | Dateien auf Chat droppen → Claude analysiert/bearbeitet | | ✅ Screenshot-Analyse | `programs.rs`, `ProgramsPanel.svelte` | Spectacle/Scrot Region-Capture, Vorschau, an Chat senden | | ✅ Global Hotkey | `lib.rs` | Super+C oeffnet Claude-Eingabe von ueberall | --- ## Phase 7: VS Code Extension Features **Ziel:** Die besten Features der Claude Code VS Code Extension uebernehmen — Accept/Reject, @-Mentions, Checkpoints. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ Accept/Reject DiffView | `DiffView.svelte`, `checkpoint.rs`, `db.rs` | Post-Execution Approval mit Revert, Kompakt-Ansicht, interaktive Buttons | | ✅ Checkpoint/Rewind | `checkpoint.rs`, `db.rs`, `claude.rs`, `claude-bridge.js` | Automatische Snapshots bei Edit/Write, SQLite-basiert, Rewind auf beliebigen Punkt | | ✅ @-Mentions | `FileMention.svelte`, `context.rs`, `ChatPanel.svelte` | Fuzzy-Autocomplete, Dateiinhalt-Injection, Zeilenbereiche (#5-10) | | ✅ Bridge Pending-Queue | `claude-bridge.js` | Nachrichten waehrend laufender Verarbeitung puffern, Auto-Dispatch nach Turn | | ✅ Tool-ID Sync | `events.ts`, `app.ts` | Backend-IDs korrekt durchreichen, Aktivitaets-Punkte Bug behoben | | ✅ Session-Projekt-Sync | `SessionList.svelte` | Session-Klick aktiviert zugehoeriges Projekt automatisch | --- ## Phase 8: VS-Code-Look — Chatbereich-Redesign **Ziel:** Chatbereich strukturell und visuell wie die offizielle Claude Code Extension fuer VS Code/Codium gestalten — linksbuendige Messages, Inline-Tool-Karten, VS-Code-Dark-Theme. ChatPanel.svelte (~2000 Z.) wird in fokussierte Teilkomponenten zerlegt. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ VS-Code-Theme-Variablen | `theme/vscode.css`, `+layout.svelte` | `--vscode-*` Custom Properties + Aliase fuer Altcode | | ✅ Inline-Render via MessageList | `ChatPanel.svelte` | Messages-Bereich in `` ausgelagert; Logik bleibt im Container | | ✅ Message.svelte | `Message.svelte` (NEU) | Avatar links, linksbuendig, Hover-Actions (Edit/Regenerate/Copy/Merken/Rewind) | | ✅ MessageList.svelte | `MessageList.svelte` (NEU) | Smart-Sticky-Scroll, Back-to-Bottom-Button | | ✅ Inline Tool-Cards | `ToolCallCard.svelte`, `ToolCardRead/Edit/Bash/Generic.svelte` (NEU) | Klappbare Karten in Assistant-Message; Edit zeigt Diff + Accept/Reject | | ✅ Tool-Calls an Message binden | `events.ts`, `app.ts` | `Message.toolCalls?[]` ergaenzt, Tool-Events an letzte Assistant-Msg gebunden | | ✅ ChatStatusBar | `ChatStatusBar.svelte` (NEU) | Token/Mode/Modell + Modus-Picker; Header bekommt Spark-Icon | | ✅ Eigen-Features-Mapping | — | Mic, Modus-Indikator, Detach, „Das merken" funktionieren weiter | | ✅ Activity-Panel parallel | `ActivityPanel.svelte` | unveraendert, dient als History-View neben den Inline-Karten | --- ## Phase 9: Komplettes UI-Redesign — Cursor/Zed-Niveau (aktuell) **Ziel:** Schluss mit Emoji-Inflation, 4-Pane-Zerstueckelung und Schriftgroessen-Chaos. Verbindliches Design-System (Farben/Typo/Spacing/Radius), 2-spaltiges Layout (Sidebar + Hauptbereich mit Tabs), Werkzeug-Panels als Drawer von rechts statt zwei nebeneinander liegender Tab-Reihen. | Feature | Datei(en) | Status | |---------|-----------|--------| | ✅ Design-System (Variablen) | `app.css` | 4 Graustufen, 1 Akzent (#007acc), 4 Status-Farben, 5 Schriftgroessen, 4-Punkt-Spacing, 2 Radius-Werte | | ✅ vscode.css Aliase | `theme/vscode.css` | `--vscode-*` Variablen mappen auf Phase-9-Variablen | | ✅ UI-Library | `src/lib/ui/` | Button, Card, Icon, Badge, StatusDot, Tooltip, Drawer, Tabs | | ✅ Lucide Icons | — | `lucide-svelte` installiert, ersetzt Emojis im Chrome | | ✅ StatusBar (22px) | `StatusBar.svelte` (NEU) | Token · Modell+Modus · Kosten · Phase, klickbarer Modus-Picker | | ✅ Titlebar entruempelt | `+layout.svelte` | Logo + Stop + Schulungsmodus (Lucide) + Version, kein Status-Dot mehr | | ✅ Sidebar (240px) | `Sidebar.svelte` (NEU) | Suche (Cmd+K), Sessions, Nav-Rail mit 4 Lucide-Icons (Activity/Database/Wrench/Settings) | | ✅ ToolDrawer | `ToolDrawer.svelte` (NEU) | Rechts-Drawer (420px) mit internen Tabs fuer Activity/Memory/Tools/Settings, Esc-schliessbar | | ✅ +page.svelte 2-spaltig | `+page.svelte` | 4-Pane-PaneForge-Layout aufgeloest, jetzt: Sidebar + ChatPanel (flex) + Drawer-Overlay | | ✅ Hardgecodete Farben raus | 9 Komponenten | `#ef4444 #22c55e #eab308 #f59e0b #a855f7 #06b6d4 ...` durch `var(--status-*)` ersetzt | | ✅ Status-Emojis durch StatusDot | `AgentView.svelte` | `🟢 🟡 ⚪ 🔴` durch `` mit Pulse-Animation bei aktivem Agent | | ✅ ChatPanel entkoppelt | `ChatPanel.svelte` | Header + ChatStatusBar entfernt (jetzt global) — kompakte Toolbar nur noch fuer Detach | | ✅ Cmd+K global | `+page.svelte`, `QuickActions.svelte` | Globaler Listener oeffnet QuickActions; navigate-tab oeffnet Drawer-Sektion | | ⏳ Komponenten-Pass (Emojis raus) | 13 Panels | Emojis in Tab-Labels und Action-Buttons noch sukzessive durch Lucide ersetzen | --- ## Phase 16: Schulungsmodus-Ausbau — Session-Replay **Ziel:** Das Praesentations-Fenster wird vom Slide-Stream zum vollwertigen Session-Replay. Drei Spalten: Datei-Baum links (waechst mit den beruehrten Pfaden), Workspace in der Mitte (animierter Edit oder Diff-Viewer), Timeline rechts (klickbare Liste aller Tool-Aktionen). Live waehrend Claude arbeitet, retroaktiv fuer gespeicherte Sessions. **Architektur-Entscheidung:** Bridge-passiv vor MCP-Tools. Die Bridge sieht ohnehin jeden Tool-Call — sie schreibt einfach mit. Claude muss nichts wissen oder steuern. MCP-Tools fuer gezielte Erklaerung sind optional und kommen erst wenn die passive Erfassung sauber laeuft. **Tradeoff:** Reine Bridge-Loesung ist robust und funktioniert auch retroaktiv, aber „stumm" — sie zeigt was passiert, nicht warum. Reine MCP-Steuerung waere erklaerend, aber fragil (Claude muss konsistent zugreifen). Hybrid in dieser Reihenfolge gibt sofort 90 % des Werts und laesst sich spaeter erweitern. ### Phase 16.1: Bridge-Telemetrie (Datenerfassung) **Aufwand:** ~3-4 h. Ohne UI-Aenderungen — am Ende der Phase liegen Daten in SQLite. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ SQLite-Schema `session_timeline` | `db.rs`, `migrations` | id, session_id, tool_id, tool, file_path, timestamp, action (read/edit/write/glob/grep/bash), before_hash, after_hash, line_start, line_end, payload_json | | ⏳ Telemetry-Modul | `telemetry.rs` (NEU) | `record_tool_event(session_id, ev)`, dedupliziert nach tool_id, schreibt in `session_timeline` | | ⏳ Hook in claude.rs | `claude.rs` | In `handle_bridge_message` bei `tool-start`/`tool-end`/`checkpoint-after` jeweils `telemetry::record_*` aufrufen | | ⏳ Before/After-Snapshots | `db.rs` | Zusaetzlich zu Checkpoint-Tabelle: dauerhafter Diff pro Edit gespeichert (komprimiert), nicht nur fuer Rewind | | ⏳ Tauri-Command `presentation_get_timeline` | `teaching.rs` | Liefert Timeline einer Session (live oder historisch) | | ⏳ Tauri-Event `timeline-append` | `claude.rs` | Pro neuem Eintrag — Frontend kann live mitschreiben | **Risiko:** Datenmenge bei langen Sessions. Mitigation: Before/After als komprimiertes Diff (zstd), nicht als Volltext doppelt. ### Phase 16.2: 3-Spalten-Layout im Praesentations-Fenster **Aufwand:** ~2-3 h. Reines Layout — die Spalten zeigen erstmal Platzhalter, Logik kommt in 16.3-16.5. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ PaneForge-Layout | `presentation/+page.svelte` | 3 PaneGroups: 22 % / 56 % / 22 %, resizable, persistente Breiten | | ⏳ Mode-Toggle | `presentation/+page.svelte` | Knopf in Footer: „Slides" (alter Modus) ↔ „Replay" (neues Layout). Slide-Modus bleibt fuer Mermaid/Code/Text erhalten | | ⏳ Container-Komponenten | `FileTree.svelte`, `Workspace.svelte`, `Timeline.svelte` (NEU) | Skelette, in den naechsten Phasen befuellt | | ⏳ Default-View | `presentation/+page.svelte` | Bei offenem Fenster und neuer Tool-Aktion automatisch in Replay-Modus wechseln | ### Phase 16.3: Datei-Baum mit Live-Markierung **Aufwand:** ~3 h. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ Tree-Aufbau aus Timeline | `FileTree.svelte` | Pfade aus Timeline-Eintraegen → hierarchischer Baum, Ordner-Knoten implizit | | ⏳ Status-Farbcodierung | `FileTree.svelte` | grau=unbekannt, blau=gelesen, gruen=geaendert, gelb=erstellt, rot=geloescht, pulsierend=aktuell aktiv | | ⏳ Auto-Expand bei Aktivitaet | `FileTree.svelte` | Wenn Datei in der Timeline auftaucht, Pfad bis zur Wurzel auffalten | | ⏳ Klick auf Datei | `FileTree.svelte` → `Workspace.svelte` | Mitte zeigt letzten bekannten Stand + alle Edits dieser Datei untereinander | | ⏳ Mini-Counter pro Knoten | `FileTree.svelte` | „edited.ts (3 ✏️)" — Anzahl Aenderungen direkt am Knoten | **Risiko:** Bei sehr breiten Repos wird der Tree unuebersichtlich. Mitigation: Nur Pfade die in der Timeline auftauchen — kein vollstaendiger Filesystem-Scan. Maximal 200 Knoten sichtbar, Rest collapsed. ### Phase 16.4: Workspace (Mitte) — Edit-Replay **Aufwand:** ~2 h. Bauteile (`AnimatedFileEdit`) sind da, fehlen nur Verkettung und Auswahl-Logik. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ Aktive Datei-Anzeige | `Workspace.svelte` | Eine Datei zur Zeit, Header mit Pfad + „aktiv"/„abgeschlossen" Status | | ⏳ Edit-Liste pro Datei | `Workspace.svelte` | Wenn mehrere Edits an gleicher Datei: chronologische Liste, jeder Edit als Karte mit Before/After-Diff | | ⏳ Replay-Knopf pro Edit | `Workspace.svelte`, `AnimatedFileEdit.svelte` | Klick spielt die Animation erneut ab — `{#key}` fuer Reset | | ⏳ Lese-Operationen anzeigen | `Workspace.svelte` | Read/Glob/Grep nicht animiert sondern als kompakte Eintraege („Gelesen: Zeilen 5-50") | | ⏳ Bash-Snippets | `Workspace.svelte` | `Bash`-Calls als Terminal-Card mit Befehl + Output-Snippet | ### Phase 16.5: Timeline (Rechts) — Chronologische Navigation **Aufwand:** ~2 h. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ Vertikale Timeline | `Timeline.svelte` | Chronologisch, neueste oben, Zeitstempel + Tool-Icon + Pfad-Snippet | | ⏳ Filter-Chips | `Timeline.svelte` | Nur Edits / Nur Reads / Nur Bash / Alle — schmale Toggle-Reihe | | ⏳ Klick → Workspace + Tree | `Timeline.svelte` | Klick aktiviert Datei in Tree und zeigt diesen Edit in Mitte | | ⏳ Live-Indikator | `Timeline.svelte` | Pulsierender Punkt am neuesten Eintrag waehrend Session laeuft | | ⏳ Session-Wechsler | `Timeline.svelte` | Dropdown oben: aktuelle Session / historische Sessions, laedt jeweilige Timeline | ### Phase 16.6: Optional — MCP-Tools fuer gezielte Erklaerung **Aufwand:** ~3 h, optional. Erst nach 16.1-16.5 sinnvoll, vorher kein Mehrwert. **Konzept:** Wenn das Praesentations-Fenster offen ist, bekommt Claude per System-Prompt-Hint einen MCP-Server `presentation` mit drei Tools. Sie kann sie nutzen — muss aber nicht. Bridge-Telemetrie laeuft unabhaengig weiter. | Tool | Wirkung | |------|---------| | `present_focus(file, line_start?, line_end?)` | Markiert Datei + Zeilenbereich im Workspace, scrollt dorthin | | `present_explain(text, anchor?)` | Sprechblase rechts neben Workspace, optional an Datei/Zeile gepinnt | | `present_diagram(mermaid)` | Modal mit Mermaid-Diagramm — fuer Architektur/Flow-Erklaerungen | **Tradeoff:** Claude muss daran denken, das ist anfangs flackernd. System-Prompt sollte „nutze diese Tools sparsam, nur fuer Schluesselstellen" sagen, sonst wird's Spam. ### Phase 16.7: Polish + Export **Aufwand:** ~2 h. | Feature | Datei(en) | Status | |---------|-----------|--------| | ⏳ Geschwindigkeitssteuerung global | `presentation/+page.svelte` | Speed-Steps wirken jetzt fuer alle Edits — auch beim Replay alter Eintraege | | ⏳ Pause/Resume bei Live | `presentation/+page.svelte` | „Pause" friert Tree+Timeline ein, neue Eintraege werden gepuffert, „Resume" arbeitet sie ab | | ⏳ Session-Export | `teaching.rs` | „Schulungsvideo" als JSON-Bundle exportieren — laed't in einer anderen Instanz wieder | | ⏳ Hotkeys | `presentation/+page.svelte` | j/k = Timeline rauf/runter, Enter = Replay, t = Tree-Fokus | --- **Gesamt-Aufwand Phase 16 (ohne 16.6):** ~14-16 h, in 6 zusammenhaengenden Sub-Phasen. Jede Sub-Phase ist fuer sich nuetzlich — auch wenn nur 16.1-16.3 fertig werden, ist das schon ein lebender Datei-Baum mit Telemetrie-Backend. **Reihenfolge-Begruendung:** Telemetrie zuerst (16.1) — ohne Daten kein UI. Layout-Skelett (16.2) gibt einen Rahmen zum Befuellen. Dann von links nach rechts (16.3 Tree → 16.4 Workspace → 16.5 Timeline) weil das die natuerliche Lesereihenfolge des Users ist. Polish (16.7) am Ende. MCP (16.6) nur wenn Phase 16.1-16.5 stabil sind. --- ## Technische Schulden | Was | Prioritaet | |-----|-----------| | TypeScript strict mode | Niedrig | | E2E Tests (Playwright) | Mittel | | ✅ Cargo warnings eliminieren | Erledigt — 0 Warnings | | Dead Code in alten Panels | Niedrig | | ✅ Bridge Error-Handling verbessern | Erledigt — Global Handler, Parse-Logging, .catch() | --- ## Nicht geplant - Multi-User / Team-Features - Cloud-Sync - Plugin-System (overkill fuer 1-User-App) - Electron-Port (Tauri bleibt) --- ## Build & Entwicklung ```bash # Dev (Hot-Reload) cd "/mnt/17 - Entwicklungen/20 - Projekte/ClaudeDesktop" CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri dev" # Produktion CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri build -- --bundles appimage" # CI: Commit mit [appimage] → Forgejo Runner baut + uploaded ```