# DEPLOYMENT_CLAUDE.md – Claude-Remote-Server auf dem VPS Auf dem VPS laufen für Pascal und Lara je ein Claude-Code-Container im Remote-Control-Server-Modus. Sitzungen startet ihr über [claude.ai/code](https://claude.ai/code) oder die Claude-App (auch vom Tablet). Die Sitzungen von Pascal und Lara reden über ein gemeinsames MCP-Postfach miteinander. Quellcode: Ordner `claude-remote/` in diesem Repo. Auf dem Server liegt eine Kopie unter `~/claude-stack` (Compose-Projekt `claude`). ## Aufbau | Container | Aufgabe | | --- | --- | | `claude-pascal` | Claude Code mit Pascals Login, je ein Remote-Control-Server für `larpaso` und `youtube` | | `claude-lara` | dasselbe mit Laras Login | | `claude-postfach-1` | MCP-Postfach (Nachrichten zwischen den beiden) | - Eigenes Docker-Netz `claude_claude`. **Kein** Zugang zum Netz `web`, keine Host-Ports, kein Caddy-Eintrag, **kein Docker-Socket**. Remote Control baut nur ausgehende Verbindungen zu Anthropic auf. - Projekte im Container: `~/projekte/larpaso`, `~/projekte/youtube`. Neue Sitzungen bekommen je einen eigenen Git-Worktree (`--spawn worktree`). - `/shared` ist ein gemeinsamer Ordner beider Container für große Dateien (Videos, Audio). - Limits: je Claude-Container 1,5 CPU / 2,5 GB RAM, Postfach 128 MB. - Deployment der Website bleibt bei Pascal per SSH. Die Claude-Container können nichts deployen. ## Einmalige Einrichtung (noch offen) ### 1. Repo `youtube` in Forgejo anlegen (Pascal) Forgejo → Neues Repository → Besitzer `pascal`, Name `youtube`, **leer** (keine README, keine .gitignore). Lara bei Bedarf als Mitarbeiterin eintragen. Danach die vorbereitete Grundstruktur pushen (Claude erledigt das auf Zuruf). ### 2. SSH-Keys der Container in Forgejo eintragen Die Keys stehen im Log der Container: ``` docker logs claude-pascal 2>&1 | grep -A1 "Forgejo-SSH-Key" docker logs claude-lara 2>&1 | grep -A1 "Forgejo-SSH-Key" ``` - Pascals Key → in Pascals Forgejo-Profil (Einstellungen → SSH-Schlüssel). - Laras Key → in Laras Forgejo-Profil. Der Container klont die Repos danach von selbst (Versuch jede Minute). ### 3. Claude-Login und Freigaben (jede Person für ihren Container) Per SSH auf den Server, dann: ``` docker exec -it claude-pascal claude ``` (Lara: `claude-lara`.) Dort `/login` ausführen, den angezeigten Link im Browser öffnen, **mit dem eigenen Claude-Account** anmelden, Code zurückkopieren. Mit `/exit` beenden. Danach einmalig die Rückfragen von Remote Control beantworten: ``` docker exec -it claude-pascal tmux attach -t larpaso ``` - `Trust …? [y/N]` → `y` - `Enable Remote Control? (y/n)` → `y` - ggf. Spawn-Modus → `2` (worktree) Mit **Strg+b, dann d** lösen (nicht Strg+C, das beendet den Server). Dasselbe für `-t youtube`. Lara hat keinen SSH-Zugang – den Login-Schritt für sie macht Pascal per `docker exec` und schickt Lara den Login-Link. Sie meldet sich an und gibt ihm den Code zurück. ### 4. Testen claude.ai/code bzw. Claude-App öffnen → die Umgebungen `larpaso` und `youtube` auf `claude-pascal` erscheinen → neue Sitzung starten. ## Postfach MCP-Server `postfach` mit den Tools `send_message`, `read_messages` und `list_messages`. Ungelesene Nachrichten meldet ein Hook automatisch beim Start einer Sitzung und bei jedem Prompt. Die Nachrichten liegen im Volume `claude_postfach-data` (`messages.json`). Ihr könnt Claude auch direkt bitten, z. B.: „Schreib Lara ins Postfach, dass die Startseite überarbeitet ist." ## Betrieb ``` cd ~/claude-stack docker compose -p claude ps # Status docker compose -p claude logs -f claude-pascal # Logs docker compose -p claude restart claude-lara # Neustart docker compose -p claude build --pull && docker compose -p claude up -d # Claude Code aktualisieren ``` Nach Änderungen an `claude-remote/` im Repo den Ordner nach `~/claude-stack` kopieren und neu bauen. Logins, SSH-Keys und Projekte bleiben erhalten (sie liegen in den Volumes `claude_home-pascal` / `claude_home-lara`). **Nicht** `docker compose -p claude down -v` – das löscht die Volumes mit Logins, Keys, nicht gepushter Arbeit und dem Postfach.