diff --git a/CLAUDE.md b/CLAUDE.md index 5aa2144..7f8fdaf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -655,3 +655,67 @@ Nutze parallele Agenten für umfangreiche Scans und rekursive Entdeckung. | `/troubleshoot-host` | Strukturierter Troubleshooting-Workflow | | `/session-end` | Session beenden, Commits erstellen | | `/new-project` | Neues Projekt anlegen | +| `/delegate-remote` | Tasks an Remote-Server delegieren (CRA) | + +--- + +## Claude Remote Agent (CRA) - Verteilte Task-Ausführung + +**Repository:** `~/Nextcloud/egonetix/claude-remote-agent` +**CLI-Tool:** `cra` +**Zweck:** Delegiert Aufgaben an Remote-Server, die Claude Code CLI autonom ausführen - auch wenn der Laptop offline ist. + +### Architektur + +``` +Laptop (Coordinator) ──SSH + JSON-RPC 2.0──> Server (claude-agent) +``` + +- **Coordinator:** Verwaltet Server, erstellt Tasks, sammelt Ergebnisse +- **Agent:** Empfängt Tasks, führt Claude Code CLI autonom aus, speichert Ergebnisse lokal +- **Persistenz:** SQLite auf beiden Seiten, Tasks überleben Verbindungsabbrüche + +### Wann CRA vorschlagen + +**Du SOLLST dem User CRA aktiv vorschlagen, wenn:** + +| Szenario | Beispiel | +|----------|---------| +| **Lang laufende Tasks** | Codebase-Analyse, Refactorings, Log-Analyse | +| **Server-Wartung** | Updates, Cleanup, Security-Audits | +| **Multi-Server-Operationen** | Gleiche Aufgabe auf mehreren Servern parallel | +| **Offline-Delegation** | User will Laptop zuklappen, Tasks sollen weiterlaufen | +| **Unabhängige Teilaufgaben** | Aufgabe lässt sich in parallele Sub-Tasks aufteilen | + +> "Diese Aufgabe eignet sich gut für CRA - soll ich sie an einen Remote-Server delegieren?" + +### Kommando-Referenz + +```bash +# Server verwalten +cra servers add [--user USER] [--port PORT] [--key PATH] [--tag TAG] +cra servers list [--all] +cra servers remove [--yes] +cra servers status [name] + +# Tasks +cra submit "" [--priority N] [--model MODEL] [--max-turns N] +cra status [task_id] +cra cancel + +# Ergebnisse +cra collect [server] [--task ID] [--since ISO-DATETIME] [--output FILE] + +# Config synchronisieren +cra sync-config [server] [--no-claude-md] [--no-settings] +``` + +### MCP-Server Integration + +Wenn der CRA MCP-Server konfiguriert ist, stehen CRA-Funktionen als native Tools zur Verfügung (`cra_submit`, `cra_status`, `cra_collect`, `cra_servers_list`, `cra_server_status`, `cra_sync_config`). Prüfe ob MCP-Tools verfügbar sind, bevor du auf CLI-Befehle zurückfällst. + +### Wichtige Hinweise + +- **Autonome Ausführung:** Server brauchen `~/.claude/settings.json` mit Tool-Permissions +- **Config-Sync:** Nach CLAUDE.md/settings.json Änderungen → `cra sync-config` +- **Retry:** Fehlgeschlagene Tasks werden automatisch wiederholt (max 3x) diff --git a/plans/swirling-crafting-dusk.md b/plans/swirling-crafting-dusk.md new file mode 100644 index 0000000..e9470f1 --- /dev/null +++ b/plans/swirling-crafting-dusk.md @@ -0,0 +1,167 @@ +# Deployment-Plan: Jotty auf srvdocker02 + +## Zusammenfassung + +**Dienst:** Jotty (Notiz-/Checklisten-App) +**Quelle:** https://github.com/fccview/jotty +**Domain:** coldstorage.egonetix.de +**Backend:** srvdocker02 (10.0.0.48:1122) +**Reverse Proxy:** srvrevproxy02 (10.0.0.29) + +--- + +## Phase 1: Repo-Setup (lokal) + +Verzeichnis: `/home/rwiegand/Nextcloud/egonetix/jotty` + +1. `git init && git branch -M main` +2. README.md aus Template erstellen +3. Repo auf Gitea erstellen (Organisation: Egonetix) +4. `git remote add origin ssh://git@gitea.egonetix.de:222/Egonetix/jotty.git` +5. Initial commit + push + +--- + +## Phase 2: Deployment-Dateien erstellen + +### docker-compose.yml (in `/home/icke/jotty/`) + +```yaml +services: + jotty: + image: ghcr.io/fccview/jotty:latest + container_name: jotty + user: "1000:1000" + ports: + - "1122:3000" + volumes: + - ./data:/app/data:rw + - ./config:/app/config:rw + - ./cache:/app/.next/cache:rw + restart: unless-stopped + environment: + - NODE_ENV=production + networks: + - jotty + +networks: + jotty: + name: jotty_network +``` + +**Port 1122 ist frei** (bestätigt via Port-Scan) + +--- + +## Phase 3: Deployment auf srvdocker02 + +```bash +# Verzeichnisse anlegen (alles unter /home/icke/jotty/) +mkdir -p /home/icke/jotty/{data,config,cache} +mkdir -p /home/icke/jotty/data/{users,checklists,notes,sharing,encryption} + +# Berechtigungen +sudo chown -R 1000:1000 /home/icke/jotty/ + +# docker-compose.yml anlegen (direkt im Dienst-Ordner) +nano /home/icke/jotty/docker-compose.yml + +# Starten +cd /home/icke/jotty && docker-compose up -d +``` + +--- + +## Phase 4: SSL-Zertifikat auf srvrevproxy02 + +**DNS:** User richtet `coldstorage.egonetix.de` bei INWX ein → 78.46.222.24 (oder aktuelle IP) + +**Certbot-Befehl:** +```bash +/usr/bin/certbot certonly --rsa-key-size 4096 -d coldstorage.egonetix.de --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" +``` + +--- + +## Phase 5: Nginx-Config auf srvrevproxy02 + +**Datei:** `/etc/nginx/sites-available/coldstorage.conf` + +```nginx +add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; + +server { + listen 80; + server_name coldstorage.egonetix.de; + return 301 https://$server_name$request_uri; +} + +server { + listen 10.0.0.29:443 ssl http2; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + + ssl on; + ssl_certificate /etc/letsencrypt/live/coldstorage.egonetix.de/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/coldstorage.egonetix.de/privkey.pem; + ssl_dhparam /etc/ssl/certs/dhparam.pem; + + server_name coldstorage.egonetix.de; + access_log /var/log/nginx/coldstorage-access_log; + error_log /var/log/nginx/coldstorage-error_log; + + set $upstream 10.0.0.48; + + location / { + proxy_pass http://$upstream:1122; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + proxy_set_header Connection ""; + } +} +``` + +**Aktivieren:** +```bash +ln -s /etc/nginx/sites-available/coldstorage.conf /etc/nginx/sites-enabled/ +nginx -t && systemctl reload nginx +``` + +--- + +## Phase 6: Dokumentation aktualisieren + +| Datei | Aktion | +|-------|--------| +| `infrastructure/hosts/srvdocker02.md` | Jotty zu Container-Liste | +| `infrastructure/hosts/srvrevproxy02.md` | coldstorage.conf erwähnen | +| `infrastructure/netzwerk/domains.md` | coldstorage.egonetix.de hinzufügen | + +--- + +## Verifikation + +```bash +# Container läuft? (srvdocker02) +docker ps | grep jotty +docker logs jotty + +# Lokal erreichbar? (srvdocker02) +curl http://localhost:1122 + +# Extern erreichbar? (nach DNS-Propagation) +curl -I https://coldstorage.egonetix.de +``` + +--- + +## Kritische Dateien + +| Datei | Aktion | +|-------|--------| +| `/home/rwiegand/Nextcloud/egonetix/jotty/docker-compose.yml` | Erstellen | +| `/home/rwiegand/Nextcloud/egonetix/jotty/README.md` | Erstellen | +| `srvdocker02:/home/icke/jotty/docker-compose.yml` | Deployen | +| `srvrevproxy02:/etc/nginx/sites-available/coldstorage.conf` | Erstellen | diff --git a/skills/delegate-remote.md b/skills/delegate-remote.md new file mode 100644 index 0000000..7ecc97e --- /dev/null +++ b/skills/delegate-remote.md @@ -0,0 +1,80 @@ +--- +name: delegate-remote +description: Use when a task could benefit from remote execution on a server, when the user wants to delegate work to run while offline, or when multiple independent tasks should run in parallel on remote infrastructure +invocation: /delegate-remote +--- + +# Remote Task Delegation via CRA + +Geführter Workflow zum Delegieren von Aufgaben an Remote-Server über das claude-remote-agent (CRA) System. + +## Wann verwenden + +- Task dauert lang (Analyse, Refactoring, Tests) +- User will Laptop zuklappen, Task soll weiterlaufen +- Gleiche Aufgabe auf mehreren Servern parallel +- Unabhängige Teilaufgaben parallelisieren +- Server-Wartung / Infrastruktur-Aufgaben + +## Workflow + +### 1. Server prüfen + +```bash +cra servers list +cra servers status +``` + +Falls kein passender Server konfiguriert: +```bash +cra servers add --user --tag +cra sync-config +``` + +### 2. Prompt formulieren + +Der Remote-Agent arbeitet autonom - der Prompt muss vollständig und selbsterklärend sein: + +- Klares Ziel definieren +- Working Directory angeben falls relevant +- Erwartetes Ergebnis beschreiben +- Kontext mitgeben den der Remote-Agent braucht + +### 3. Task einreichen + +```bash +cra submit "" [--priority N] [--model MODEL] +``` + +### 4. Ergebnisse abholen + +```bash +cra status # Fortschritt prüfen +cra collect # Ergebnisse abholen +cra collect # Von allen Servern +``` + +## Checkliste + +- [ ] Passenden Server identifiziert +- [ ] Server-Status geprüft (online, Agent läuft) +- [ ] Config synchronisiert (falls kürzlich geändert) +- [ ] Prompt vollständig und selbsterklärend formuliert +- [ ] Task eingereicht +- [ ] User über Task-ID informiert + +## Tipps + +- **Config-Sync nicht vergessen:** Nach Änderungen an CLAUDE.md → `cra sync-config` +- **Prioritäten nutzen:** `--priority 10` für dringende Tasks +- **Autonome Ausführung:** Server braucht `settings.json` mit Tool-Permissions +- **Batch-Delegation:** Mehrere Tasks nacheinander einreichen, alle parallel verarbeitet + +## MCP-Alternative + +Falls MCP-Tools verfügbar sind (prüfe mit `/mcp`), nutze die nativen Tools `cra_submit`, `cra_status`, `cra_collect` statt CLI-Befehle. + +## Verwandte Skills + +- `/troubleshoot-host` - Wenn der Remote-Server selbst Probleme hat +- `/session-end` - Am Ende der Session für Commit-Reminder