README.md: Architektur-Diagramm, alle 18 Rust-Module + 27 Svelte-Komponenten dokumentiert, Features nach Phasen, MCP-Server, CI/CD, Tastenkürzel, KB-Referenzen. CLAUDE.md: Tech-Stack, Kommunikationskette, Bridge-Daemon Details, Agent-Modi, häufige Probleme & Lösungen Tabelle, Build-Befehle. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
242 lines
10 KiB
Markdown
242 lines
10 KiB
Markdown
# Claude Desktop
|
|
|
|
Nativer AI-Desktop-Assistent fuer Linux. Schneller und maechtiger als Codium + Claude Code Extension.
|
|
|
|
**Tech-Stack:** Tauri 2.0 (Rust) + SvelteKit 5 + Claude Agent SDK (Node.js)
|
|
**Codebase:** ~24.000 Zeilen, 154 Commits, 27 Svelte-Komponenten, 18 Rust-Module
|
|
|
|
---
|
|
|
|
## Schnellstart
|
|
|
|
```bash
|
|
# Development (Hot-Reload)
|
|
cd "/mnt/17 - Entwicklungen/20 - Projekte/ClaudeDesktop"
|
|
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri dev"
|
|
|
|
# Produktion (AppImage)
|
|
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri build -- --bundles appimage"
|
|
|
|
# CI: Commit mit [appimage] im Message → Forgejo Runner baut + uploaded automatisch
|
|
```
|
|
|
|
---
|
|
|
|
## Architektur
|
|
|
|
```
|
|
┌──────────────────────────────────────────────────────────┐
|
|
│ SvelteKit Frontend │
|
|
│ 27 Svelte-Komponenten (Chat, Voice, Guard-Rails, ...) │
|
|
├──────────────────────────────────────────────────────────┤
|
|
│ Tauri IPC │
|
|
├──────────────────────────────────────────────────────────┤
|
|
│ Rust Backend │
|
|
│ 18 Module (claude.rs, db.rs, guard.rs, voice.rs, ...) │
|
|
├──────────────────────┬───────────────────────────────────┤
|
|
│ SQLite (lokal) │ Unix Domain Socket / stdio │
|
|
│ Sessions, Settings │ ↕ │
|
|
│ Memory, Audit │ Claude Bridge (Node.js) │
|
|
│ Offline-Queue │ @anthropic-ai/claude-agent-sdk │
|
|
├──────────────────────┤ ↕ │
|
|
│ MySQL (claude-db) │ Claude API (Anthropic) │
|
|
│ Wissensbasis │ + MCP-Server (6 Stueck) │
|
|
└──────────────────────┴───────────────────────────────────┘
|
|
```
|
|
|
|
### Datenfluss
|
|
|
|
1. **User** → Eingabe im ChatPanel (Text/Sprache/File-Drop)
|
|
2. **Frontend** → `invoke('send_message')` via Tauri IPC
|
|
3. **Rust** → Sticky Context + KB-Hints laden, an Bridge senden
|
|
4. **Bridge** → `query()` mit Claude Agent SDK, Events streamen
|
|
5. **Claude API** → Antwort + Tool-Calls (Bash, Read, Edit, MCP, ...)
|
|
6. **Bridge** → Events via JSON-Lines an Rust zurueck
|
|
7. **Rust** → `emit()` Events ans Frontend
|
|
8. **Frontend** → Live-Rendering (Text, Tools, Subagents)
|
|
|
|
### Bridge-Modi
|
|
|
|
| Modus | Beschreibung | Wann |
|
|
|-------|-------------|------|
|
|
| **UDS-Daemon** | Bridge als eigenstaendiger Prozess, ueberlebt App-Neustart | Standard (bevorzugt) |
|
|
| **stdio** | Bridge als Child-Process mit stdin/stdout | Fallback wenn UDS fehlschlaegt |
|
|
|
|
Socket-Pfad: `/tmp/claude-bridge.sock`, PID-File: `/tmp/claude-bridge.pid`
|
|
|
|
---
|
|
|
|
## Dateistruktur
|
|
|
|
### Rust Backend (`src-tauri/src/`)
|
|
|
|
| Datei | Zeilen | Funktion |
|
|
|-------|--------|----------|
|
|
| `lib.rs` | ~340 | App-Setup, Tray-Icon, Global Hotkey (Super+C), Plugin-Init |
|
|
| `claude.rs` | ~1000 | **Kernmodul**: Bridge-Kommunikation (UDS/stdio), MCP-Hub, Ollama, send_message |
|
|
| `db.rs` | ~800 | SQLite: Sessions, Messages, Settings, Projekte, Monitor-Events, Fehler-Tracking |
|
|
| `knowledge.rs` | ~1000 | MySQL-Wissensbasis: Suche, Cache (60s TTL), KB-Hints, Smart Hints v2 |
|
|
| `session.rs` | ~300 | Session-CRUD, Offline-Queue (queue/flush/clear) |
|
|
| `guard.rs` | ~250 | Guard-Rails: Safe/Moderate/Critical/Blocked, Permissions |
|
|
| `memory.rs` | ~200 | Persistentes Gedaechtnis: Auto-Load, Patterns, Cross-Session |
|
|
| `context.rs` | ~300 | 3-Schichten Context: Sticky/Projekt/Hints, Render fuer Prompt |
|
|
| `voice.rs` | ~355 | Whisper STT + Piper TTS (5 deutsche Stimmen), offline |
|
|
| `hooks.rs` | ~200 | Hook-System: SessionStart, PreToolUse, PostToolUse |
|
|
| `audit.rs` | ~150 | Audit-Log: Alle Aktionen mit Timestamp + Risk-Level |
|
|
| `programs.rs` | ~300 | D-Bus Aktionen, Screenshot-Capture, Xvfb |
|
|
| `ide.rs` | ~200 | VSCodium-Extension Bridge (WebSocket Port 7890) |
|
|
| `clipboard.rs` | ~150 | Clipboard-Watch: Code/URL/Fehler erkennen |
|
|
| `teaching.rs` | ~150 | Praesentations-/Schulungsmodus (separates Fenster) |
|
|
| `chat_window.rs` | ~100 | Chat-Detach: Separates Fenster herausloesen/zurueckholen |
|
|
| `update.rs` | ~250 | Auto-Updater: Forgejo Package Registry, Lock-Datei |
|
|
| `commands.rs` | ~100 | Slash-Command Registry (scannt ~/.claude/commands/) |
|
|
|
|
### Frontend (`src/lib/components/`)
|
|
|
|
| Komponente | Funktion |
|
|
|-----------|----------|
|
|
| `ChatPanel.svelte` | **Hauptkomponente**: Nachrichtenliste, Eingabe, File-Drop, Modus-Indikator |
|
|
| `SessionList.svelte` | Sidebar: Sessions, Projekt-Wechsel, Suche |
|
|
| `ActivityPanel.svelte` | Live-Aktivitaet: Tool-Calls, Agent-Status |
|
|
| `AgentView.svelte` | Subagent-Hierarchie als Baumansicht |
|
|
| `MonitorPanel.svelte` | System-Monitor: API/Tool/Error Events |
|
|
| `PerformancePanel.svelte` | Token-/Kosten-Statistiken |
|
|
| `GuardRailsPanel.svelte` | 3-Tab: Live-Feed / Regeln / Blockiert |
|
|
| `VoicePanel.svelte` | Push-to-Talk, Gespraechsmodus, TTS-Wiedergabe |
|
|
| `ContextPanel.svelte` | Sticky Context anzeigen/editieren |
|
|
| `MemoryPanel.svelte` | Persistentes Gedaechtnis CRUD |
|
|
| `KnowledgePanel.svelte` | Wissensbasis durchsuchen |
|
|
| `HooksPanel.svelte` | Hook-Verwaltung |
|
|
| `SettingsPanel.svelte` | VS-Code-artiges Settings mit Suche/Kategorien |
|
|
| `ProgramsPanel.svelte` | D-Bus Aktionen, Screenshot, Xvfb |
|
|
| `IdePanel.svelte` | VSCodium-Verbindung Status |
|
|
| `AuditLog.svelte` | Audit-Eintraege durchsuchen |
|
|
| `QuickActions.svelte` | Ctrl+K Kommandopalette |
|
|
| `CommandPalette.svelte` | Slash-Command Autocomplete (/-Eingabe) |
|
|
| `CodeBlock.svelte` | Syntax-Highlighting + Copy-Button |
|
|
| `DiffView.svelte` | Diff-Anzeige fuer Code-Aenderungen |
|
|
| `MermaidDiagram.svelte` | Mermaid-Diagramme rendern |
|
|
| `StopButton.svelte` | Abbruch-Button waehrend Agent laeuft |
|
|
| `UpdateDialog.svelte` | Auto-Update Bestaetigungsdialog |
|
|
| `FilePreview.svelte` | Datei-Vorschau (Text/Bild) |
|
|
| `AnimatedCode.svelte` | Code-Tipp-Animation fuer Praesentation |
|
|
| `AutoCorrectionModal.svelte` | Fehler-Pattern Vorschlag |
|
|
|
|
### Bridge (`scripts/claude-bridge.js`)
|
|
|
|
~1100 Zeilen Node.js. Zentrale Datei fuer die Claude-Kommunikation:
|
|
|
|
- **query()** via `@anthropic-ai/claude-agent-sdk` — streamt Events
|
|
- **Multi-Agent-Modi**: Solo / Handlanger (Haiku-Worker) / Experten (4 spezialisierte Agents) / Auto
|
|
- **Subagent-Tracking**: Map mit toolUseId → agentId/type/depth
|
|
- **MCP-Server Injection**: Configs von Rust empfangen, in queryOptions injizieren
|
|
- **Ollama-Integration**: Auto-Detect beim Start, local-query fuer einfache Tasks
|
|
- **Auto-Retry**: 3x Backoff bei Rate-Limit/5xx/Netzwerkfehler
|
|
- **Session-Resume**: Stale Session-ID → automatisch neue Session starten
|
|
- **UDS-Server-Modus**: `--socket /tmp/claude-bridge.sock` fuer Daemon-Betrieb
|
|
|
|
### Stores (`src/lib/stores/`)
|
|
|
|
| Store | Inhalt |
|
|
|-------|--------|
|
|
| `app.ts` | activeSession, activeProject, agentMode, chatDetached, processingPhase |
|
|
| `events.ts` | Event-Handler fuer alle Bridge-Events (text, result, tool-start/end, ...) |
|
|
| `updateTrigger.ts` | Reactive Trigger fuer Panel-Updates |
|
|
|
|
---
|
|
|
|
## Features komplett
|
|
|
|
### Phase 1-2 (v0.1.0 — 14.04.2026)
|
|
- Tauri 2.0 + SvelteKit 5 Grundgeruest
|
|
- 4-Panel Layout, Claude Bridge (stdio), Guard-Rails
|
|
- SQLite + Session-Management, Claude-DB Integration
|
|
- 3-Schichten Context, Multi-Agent-Modi, Hook-System
|
|
- VSCodium-Extension, Programm-Steuerung (D-Bus, Xvfb)
|
|
- Praesentationsmodus, System-Monitor, Subagent-Hierarchie
|
|
- Auto-Updater, Slash-Commands, KB-Hints, Error-Patterns
|
|
|
|
### Phase 3: Performance (22.04.2026)
|
|
- KB-Cache (RAM, 60s TTL), Bridge Warm-Start, Lazy Panel-Load
|
|
- Session-Resume Fix, Auto-Retry (3x Backoff), Heartbeat
|
|
- FIFO Message Queue, **Bridge-Daemon** (UDS), **Unix Socket IPC**
|
|
|
|
### Phase 4: Codium-Killer Features
|
|
- Projekt-Wechsel (Ein-Klick), **MCP-Hub nativ** (6 Server)
|
|
- Guard-Rails UI (3 Tabs), Persistent Memory, Quick-Actions (Ctrl+K)
|
|
- Voice (Whisper + Piper, offline), Settings-Panel, Chat-Detach
|
|
- Aktivitaets-Phasen (Denkt/Streamt/Tool/Subagent)
|
|
|
|
### Phase 5: Lokale KI + Offline
|
|
- Whisper.cpp + Piper-TTS (komplett offline, 5 deutsche Stimmen)
|
|
- **Ollama-Integration** (Auto-Detect, local-query)
|
|
- **Offline-Queue** (SQLite, flush bei Reconnect)
|
|
|
|
### Phase 6: Desktop-Integration
|
|
- D-Bus Actions (10 Aktionen), Clipboard-Watch, File-Drop
|
|
- Screenshot-Analyse, Global Hotkey (Super+C)
|
|
|
|
---
|
|
|
|
## MCP-Server (6 Stueck, automatisch geladen)
|
|
|
|
| Name | Funktion | Transport |
|
|
|------|----------|-----------|
|
|
| `forgejo` | Git: Repos, Issues, PRs, Releases | stdio |
|
|
| `claude-db` | MySQL Wissensbasis: Suche, CRUD | SSE (MCP-Hub) |
|
|
| `playwright` | Browser-Automatisierung | stdio |
|
|
| `context7` | Library-Dokumentation | stdio |
|
|
| `portainer` | Docker-Container-Management | stdio |
|
|
| `homeassistant` | Smart-Home Steuerung | stdio |
|
|
|
|
Configs in `~/.claude.json` → werden beim Bridge-Start automatisch injiziert.
|
|
|
|
---
|
|
|
|
## CI/CD
|
|
|
|
**Workflow:** `.forgejo/workflows/build-appimage.yml`
|
|
**Runner:** `16-Forgejo-Runner-AppImage` (Debian Bookworm)
|
|
**Trigger:** `[appimage]` in Commit-Message auf `main`
|
|
|
|
1. Commit mit `[appimage]` → Push
|
|
2. Forgejo Runner baut AppImage (~8-10 Min)
|
|
3. Upload in Forgejo Package Registry
|
|
4. Ntfy-Notification (Topic: `vk-builds`)
|
|
5. App zieht Update beim naechsten Start (Auto-Updater)
|
|
|
|
**NixOS:** AppImage hat WebKit2GTK/Mesa ABI-Konflikt → lokaler Build mit `shell.nix` noetig. Nix-Wrapper in `~/.local/bin/claude-desktop`.
|
|
|
|
---
|
|
|
|
## Tastenkuerzel
|
|
|
|
| Kuerzel | Aktion |
|
|
|---------|--------|
|
|
| `Super+C` | Claude-Eingabe von ueberall oeffnen |
|
|
| `Ctrl+K` | Quick-Actions Palette |
|
|
| `Ctrl+Enter` | Nachricht senden |
|
|
| `Escape` | Quick-Actions/Autocomplete schliessen |
|
|
| `/` | Slash-Command Autocomplete |
|
|
|
|
---
|
|
|
|
## Wissensbasis-Referenzen
|
|
|
|
| KB-ID | Thema |
|
|
|-------|-------|
|
|
| #248 | Tauri 2.0 + SvelteKit auf NixOS shell.nix |
|
|
| #311 | CI/CD Pipeline (Workflow-Tricks) |
|
|
| #371 | Debian Forgejo-Runner Setup |
|
|
| #381 | NixOS WebKit2GTK EGL-Crash |
|
|
| #382 | Cargo auf SMB → CARGO_TARGET_DIR |
|
|
| #384 | Custom-AppRun + linuxdeploy-Hook |
|
|
|
|
---
|
|
|
|
## Nicht geplant
|
|
|
|
- Multi-User / Team-Features
|
|
- Cloud-Sync
|
|
- Plugin-System (overkill fuer 1-User-App)
|
|
- Electron-Port (Tauri bleibt)
|