Shared config, skills, plans, and scripts for 3-node Hermes Agent fleet
- Shell 79.3%
- Python 20.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| bd790i | ||
| configs | ||
| hermes-agent@0f1f4c09a7 | ||
| lab7-docs@80b5491786 | ||
| m1-mac-mini | ||
| plans | ||
| scripts | ||
| skills | ||
| strix-halo | ||
| systemd | ||
| .gitignore | ||
| .gitmodules | ||
| docker-compose.bd790i.yml | ||
| docker-compose.m1-mac-mini.yml | ||
| docker-compose.strix-halo.yml | ||
| docker-compose.yml | ||
| README.md | ||
Hermes Shared Config
Central repository for shared data across the 3-node Hermes Agent fleet.
Architecture
┌─────────────────────────────────┐
│ Gitea (m1-mac-mini) │
│ git.lab7.fun:3000 │
│ │
│ ┌───────────────────────────┐ │
│ │ hermes-shared-config │ │
│ │ (git repo, source of │ │
│ │ truth for shared data) │ │
│ └───────────────────────────┘ │
└────────┬──────────┬──────────┬──┘
│ │ │
pull/sync │ pull/sync │ pull/sync │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│strix-halo│ │ bd790i │ │m1-mac- │
│192.168.50│ │192.168.50│ │ mini │
│.16 (x86) │ │.254 AMD) │ │.54 (ARM) │
└──────────┘ └──────────┘ └──────────┘
Data Classification
A. Shared Data (synced to all 3 nodes)
- Custom skills →
skills/ - Config templates →
configs/templates/ - Node-specific overrides →
configs/overrides/ - Plans →
plans/ - Scripts →
scripts/
B. Node-Local Data (NOT synced)
kanban.db- Cron jobs
- SSH keys / tokens
- Model cache
- Audio cache
Setup Per Node
1. Clone the repo
# Linux nodes
mkdir -p /opt/data
git clone http://git.lab7.fun/nwpie/hermes-shared-config /opt/data/hermes-shared
# macOS (m1-mac-mini)
mkdir -p ~/hermes-data
git clone http://git.lab7.fun/nwpie/hermes-shared-config ~/hermes-data/hermes-shared
2. Deploy the sync script
# Linux nodes
cp /opt/data/hermes-shared/scripts/hermes-sync.sh /opt/data/scripts/
chmod +x /opt/data/scripts/hermes-sync.sh
# macOS
cp ~/hermes-data/hermes-shared/scripts/hermes-sync.sh ~/hermes-data/scripts/
chmod +x ~/hermes-data/scripts/hermes-sync.sh
3. Set up periodic sync
Option A: Cron (Linux/macOS)
# Add to crontab (run every 15 minutes)
*/15 * * * * /opt/data/scripts/hermes-sync.sh >> /opt/data/hermes-sync.log 2>&1
Option B: systemd timer (Linux)
# Copy unit files
sudo cp /opt/data/hermes-shared/systemd/hermes-sync.service /etc/systemd/system/
sudo cp /opt/data/hermes-shared/systemd/hermes-sync.timer /etc/systemd/system/
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable --now hermes-sync.timer
4. Configure Docker Compose
Each node has its own docker-compose.yml in the repo:
docker-compose.strix-halo.yml→ deploy to strix-halodocker-compose.bd790i.yml→ deploy to bd790idocker-compose.m1-mac-mini.yml→ deploy to m1-mac-mini
Update the volume paths to match each node's data directory.
5. Set environment variables
# Add to /etc/environment or docker-compose.yml
export HOMELAB_NODE=<node-name> # strix-halo, bd790i, or m1-mac-mini
export HERMES_TENANT=<node-name>
Sync Script
Each node runs hermes-sync.sh every 15 minutes via cron/systemd. It:
- Pulls latest from
main - Syncs skills, scripts, and plans to local directories
- Detects config template changes (manual restart needed)
- Uses file-based locking to prevent concurrent runs
Node Overrides
Each node has a YAML override in configs/overrides/:
strix-halo.yaml— x86_64, 192.168.50.16, port 8080bd790i.yaml— amd64, 192.168.50.254, port 8081m1-mac-mini.yaml— arm64, 192.168.50.54, port 8082
Conflict Resolution
| Scenario | Resolution |
|---|---|
| Two nodes push same skill | Last-pull-wins (idempotent SKILL.md) |
| Config template changed | Manual review required |
| Node-specific config drift | Override files take precedence |
| Kanban.db conflict | Each node keeps its own; no sync |
Backup Strategy
Daily backup (per node)
tar czf /backup/hermes-$(hostname)-$(date +%Y%m%d).tar.gz \
/opt/data/kanban.db \
/opt/data/cron/ \
/opt/data/secrets/ \
/opt/data/audio_cache/
Central backup (shared data)
git clone --mirror http://git.lab7.fun/hermes-shared-config /backup/hermes-shared-mirror.git