Shared config, skills, plans, and scripts for 3-node Hermes Agent fleet
  • Shell 79.3%
  • Python 20.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-05-21 11:41:30 +00:00
bd790i Update via sync strategy implementation 2026-05-19 19:15:21 +03:00
configs feat: unify bd790i config to shared path, add SSH mounts, update llama-server config 2026-05-21 11:41:30 +00:00
hermes-agent@0f1f4c09a7 feat: add lab7-docs and hermes-agent as submodules 2026-05-21 11:34:57 +00:00
lab7-docs@80b5491786 feat: add lab7-docs and hermes-agent as submodules 2026-05-21 11:34:57 +00:00
m1-mac-mini Update via sync strategy implementation 2026-05-19 19:15:21 +03:00
plans Phase 1: Complete shared repo structure with README, templates, and empty skill/plan directories 2026-05-19 16:01:31 +00:00
scripts fix: remove bash-specific pipefail (POSIX-compatible) 2026-05-20 11:50:43 +00:00
skills Phase 1: Complete shared repo structure with README, templates, and empty skill/plan directories 2026-05-19 16:01:31 +00:00
strix-halo Update via sync strategy implementation 2026-05-19 19:15:21 +03:00
systemd Add systemd timer unit for Hermes sync 2026-05-19 18:34:34 +00:00
.gitignore Initial commit: 3-node Hermes sync config structure 2026-05-19 16:42:35 +00:00
.gitmodules feat: add lab7-docs and hermes-agent as submodules 2026-05-21 11:34:57 +00:00
docker-compose.bd790i.yml feat: unify bd790i config to shared path, add SSH mounts, update llama-server config 2026-05-21 11:41:30 +00:00
docker-compose.m1-mac-mini.yml Add node-specific Docker Compose files with shared volume mounts 2026-05-19 16:54:24 +00:00
docker-compose.strix-halo.yml Add node-specific Docker Compose files with shared volume mounts 2026-05-19 16:54:24 +00:00
docker-compose.yml Phase 3: Update docker-compose template with network config, add example docker-compose.yml 2026-05-19 16:04:39 +00:00
README.md Update README with complete deployment instructions 2026-05-19 18:35:18 +00:00

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-halo
  • docker-compose.bd790i.yml → deploy to bd790i
  • docker-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:

  1. Pulls latest from main
  2. Syncs skills, scripts, and plans to local directories
  3. Detects config template changes (manual restart needed)
  4. 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 8080
  • bd790i.yaml — amd64, 192.168.50.254, port 8081
  • m1-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