CRA-Integration: CLAUDE.md Sektion + delegate-remote Skill
- CLAUDE.md: CRA-Sektion mit Architektur, Kommando-Referenz, Wann-vorschlagen-Tabelle - Skills-Referenz um /delegate-remote erweitert - Neuer Skill delegate-remote.md für geführte Remote-Delegation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
64
CLAUDE.md
64
CLAUDE.md
@@ -655,3 +655,67 @@ Nutze parallele Agenten für umfangreiche Scans und rekursive Entdeckung.
|
|||||||
| `/troubleshoot-host` | Strukturierter Troubleshooting-Workflow |
|
| `/troubleshoot-host` | Strukturierter Troubleshooting-Workflow |
|
||||||
| `/session-end` | Session beenden, Commits erstellen |
|
| `/session-end` | Session beenden, Commits erstellen |
|
||||||
| `/new-project` | Neues Projekt anlegen |
|
| `/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 <name> <host> [--user USER] [--port PORT] [--key PATH] [--tag TAG]
|
||||||
|
cra servers list [--all]
|
||||||
|
cra servers remove <name> [--yes]
|
||||||
|
cra servers status [name]
|
||||||
|
|
||||||
|
# Tasks
|
||||||
|
cra submit <server> "<prompt>" [--priority N] [--model MODEL] [--max-turns N]
|
||||||
|
cra status <server> [task_id]
|
||||||
|
cra cancel <server> <task_id>
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|||||||
167
plans/swirling-crafting-dusk.md
Normal file
167
plans/swirling-crafting-dusk.md
Normal file
@@ -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 |
|
||||||
80
skills/delegate-remote.md
Normal file
80
skills/delegate-remote.md
Normal file
@@ -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 <name> <host> --user <user> --tag <tag>
|
||||||
|
cra sync-config <name>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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 <server> "<prompt>" [--priority N] [--model MODEL]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Ergebnisse abholen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cra status <server> # Fortschritt prüfen
|
||||||
|
cra collect <server> # 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
|
||||||
Reference in New Issue
Block a user