global-sync
Use for multi-machine HTTP delta sync with peer management.
SKILL.mdskills/system/global-sync/SKILL.md
GitHubGlobal State Sync
Multi-Machine State Synchronization für OpenAmer.
Überblick
Global State Sync synchronisiert OpenAmer-Zustände (Skills, Cron, Scripts, Config, Sessions)
zwischen mehreren Maschinen über HTTP. Nur geänderte Dateien seit dem letzten Sync werden
übertragen (Delta-Only). Bei Timestamp-Konflikten gewinnt die neuere Version; die verlierende
Version wird in .global-sync/conflicts/ gespeichert.
Architektur
+-------------------+ HTTP POST /sync +-------------------+
| Maschine A | ──────────────────────────────► | Maschine B |
| Port 8902 | JSON-Delta + SHA256-Signatur | Port 8902 |
| Sync-Thread 60m | ◄────────────────────────────── | Sync-Thread 60m |
+-------------------+ JSON-Delta + Signatur +-------------------+
Installation
Das Script liegt unter scripts/global-sync.py (OpenAmer Home) und wird via
Config in .global-sync/config.json gesteuert.
Verwendung
# Status anzeigen
python scripts/global-sync.py --status
# Peer hinzufügen
python scripts/global-sync.py --add-peer mein-server 192.168.1.100:8902
# Sofort syncen
python scripts/global-sync.py --sync-now
# Server starten (Daemon-Modus)
python scripts/global-sync.py --start
# Peer-Liste anzeigen
python scripts/global-sync.py --peers
# Neues Token setzen
python scripts/global-sync.py --token MEIN_NEUES_SICHERES_TOKEN
Konfiguration
.global-sync/config.json:
{
"peers": [
{"name": "server1", "host": "192.168.1.100", "port": 8902}
],
"sync_interval_minutes": 60,
"sync_items": ["skills", "cron", "scripts", "config", "sessions"],
"token": "DEIN_SICHERES_TOKEN",
"server_port": 8902
}
sync_items
skills— OpenAmer Skillscron— Cron-Job-Definitionenscripts— Python-Scripteconfig— config.yamlsessions— Session-Dumps
Sicherheit
- Jeder Request enthält einen SHA256-HMAC über den Body.
- Der Shared-Token wird in der Config gespeichert.
- Nur der SHA256-Hash des Tokens wird im Header übertragen.
- Port 8902 sollte hinter einer Firewall liegen.
Konfliktlösung
| Bedingung | Ergebnis |
|---|---|
| Remote neuer als lokal | Remote-Version überschreibt lokale |
| Lokal neuer als remote | Lokale Version bleibt; Remote in .global-sync/conflicts/ |
| Gleicher Timestamp | Remote gewinnt (idempotent) |
Dateien
| Pfad | Beschreibung |
|---|---|
~/.global-sync/config.json |
Sync-Konfiguration |
~/.global-sync/conflicts/ |
Konflikt-Dateien |
~/.global-sync/last_sync.txt |
Timestamp des letzten Syncs |
scripts/global-sync.py |
Hauptscript |
Cron-Job
Ein Cron-Job führt --sync-now alle 60 Minuten aus.