7 Sub-Phasen, ~14-16 h Gesamt-Aufwand: - 16.1 Bridge-Telemetrie (SQLite session_timeline) - 16.2 3-Spalten-Layout im Praesentations-Fenster - 16.3 Datei-Baum mit Live-Markierung - 16.4 Workspace mit Edit-Replay - 16.5 Timeline mit chronologischer Navigation - 16.6 Optional: MCP-Tools fuer gezielte Erklaerung - 16.7 Polish + Session-Export Architektur-Entscheidung: Bridge-passiv vor MCP-Tools — Bridge sieht ohnehin alle Tool-Calls, Claude muss nichts wissen. MCP nur als optionale Erweiterung wenn passive Erfassung stabil laeuft. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
18 KiB
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 <MessageList /> 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 <StatusDot> 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
# 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