DocHub
How skills, projects.yaml, and baseline rules are distributed from GitHub to all LXC containers via propagate-from-host.sh

Propagation System

The propagation system ensures all 5 LXC containers on Contabo Singapore have identical skills, project maps, and baseline rules. A single script pulls the latest from GitHub and pushes it to every container.

How It Works

GitHub (OmelasAI/claude-skills)
    |
    | git clone / git pull
    v
Contabo Singapore host (62.72.47.64)
    /tmp/claude-propagate/
    |
    | scp to each container
    v
+-- chasclaude (10.0.3.11)
+-- infoclaude (10.0.3.12)
+-- seanclaude (10.0.3.13)
+-- jazclaude  (10.0.3.14)
+-- managerclaude (10.0.3.15)
    |
    +-- ~/.claude/commands/        (18 skills)
    +-- ~/code/ClaudeSkills/       (CLAUDE-BASE.md, projects.yaml)
    +-- ~/code/ClaudeSkills/infrastructure/  (network-config.md)

The Script: propagate-from-host.sh

Item Details
Location OmelasAI/claude-skills repo, infrastructure/propagate-from-host.sh
Runs on Contabo Singapore host (62.72.47.64), NOT inside a container
User root (or ubuntu with sudo)
Runtime ~10-15 seconds for all 5 containers

Execution

From the laptop:

ssh ovh5 "bash -s" < propagate-from-host.sh

Or directly on the host:

bash /path/to/propagate-from-host.sh

What the Script Does

For each of the 5 containers (10.0.3.11 through 10.0.3.15):

Step Action
1 Clone or update repo – Clones OmelasAI/claude-skills to /tmp/claude-propagate on the host. If the clone already exists, pulls latest changes.
2 Test SSH connectivity – Verifies the container is reachable via SSH before attempting any file transfers. Skips the container if unreachable.
3 Remove old skills – Deletes all existing .md files from ~/.claude/commands/ on the container to ensure no stale skills remain.
4 Copy new skills – Copies all .md files from the repo’s commands/ directory to ~/.claude/commands/ on the container.
5 Copy CLAUDE-BASE.md – Copies the baseline rules file to ~/code/ClaudeSkills/ on the container.
6 Copy projects.yaml – Copies the project map to ~/code/ClaudeSkills/ on the container.
7 Copy network-config.md – Copies the infrastructure reference to ~/code/ClaudeSkills/infrastructure/ on the container.

After all containers are updated:

Step Action
8 Send Claude Net notification – Sends a message to all containers via Claude Net announcing that propagation is complete. This alerts any active Claude Code sessions that their skills have been updated.

What Gets Propagated

18 Skills (.md files)

The slash-command skill definitions. These are the files that Claude Code reads when a user invokes /commit, /start-session, etc. See the Skills page for the full list.

Destination: ~/.claude/commands/ on each container.

CLAUDE-BASE.md

The foundation rules document that all Claude Code instances must follow, regardless of which project they are working on. Contains the absolute rules that override everything else:

Rule Category Examples
Email Always draft, never send directly. Always use HTML format.
Claude Net How to use inter-instance messaging. When to notify others.
Session persistence Always use tmux. Never detach other clients.
Server access Always confirm before SSHing to a server. State where you are going.
Secrets Never commit .env files. Never inline credentials.
Project separation Never cross-reference code between projects.

CLAUDE-BASE.md is not a project-specific file. It sits in ~/code/ClaudeSkills/ and is referenced by the global ~/.claude/CLAUDE.md on each machine. Every project’s own CLAUDE.md adds rules on top of this baseline.

Destination: ~/code/ClaudeSkills/CLAUDE-BASE.md on each container.

projects.yaml

The single source of truth for all projects, servers, team members, and credentials references. See the projects.yaml page for full details.

Destination: ~/code/ClaudeSkills/projects.yaml on each container.

network-config.md

Infrastructure reference document containing the full network topology: server IPs, SSH aliases, port assignments, DNS records, firewall rules, and container networking details.

Destination: ~/code/ClaudeSkills/infrastructure/network-config.md on each container.

When to Propagate

Trigger Action
A skill is added, modified, or removed Propagate
projects.yaml is updated (new project, server change, URL change) Propagate
CLAUDE-BASE.md rules are updated Propagate
network-config.md is updated (new server, IP change) Propagate
A new container is created Propagate (to initialize it)

There is no automatic propagation. The script must be run manually after changes are committed to the GitHub repo.

Verifying Propagation

After running the script, verify that the update landed correctly:

  1. Check Claude Net – The notification message confirms the script completed.
  2. Run /sync on a container – The skill compares local files against the repo and reports any drift.
  3. Spot-check a file – SSH into a container and check the timestamp or content of a specific skill.
# From the host, check a file on chasclaude
ssh dev@10.0.3.11 "ls -la ~/.claude/commands/ | head -5"

# Check projects.yaml timestamp
ssh dev@10.0.3.11 "stat ~/code/ClaudeSkills/projects.yaml | grep Modify"

Failure Handling

The script is resilient to individual container failures:

  • If a container is unreachable (powered off, network issue), the script logs a warning and continues to the next container.
  • If a file copy fails, the error is logged but propagation continues for remaining files and containers.
  • The Claude Net notification at the end only goes to containers that were successfully updated.

After a failed propagation, fix the issue (restart the container, fix SSH) and re-run the script. It is idempotent – running it multiple times produces the same result.

Laptop and ser8

The laptop (laptopclaude) and ser8 (serclaude) are not LXC containers and are not updated by propagate-from-host.sh. These machines pull updates directly from the GitHub repo:

cd ~/code/ClaudeSkills && git pull

Or the /sync skill can be used to detect drift and prompt manual updates.