A multi-machine AI agent swarm for macOS. Three helper Macs run Ollama as a committee, with a Hermes-powered synthesis hub as the overseer. Control everything from your phone via Telegram or from terminal via CLI. Zero API cost.
M4 Air (your laptop — on the go)
│
│ Tailscale encrypted mesh
│
├── M1 Air — "The Pragmatist" qwen2.5:3b Fast, practical worker
│
├── M1 Pro — "Synthesis Hub" qwen2.5:14b Hermes Agent overseer
│ Always-on dashboard. + coder:14b Resolves, learns, delegates.
│ LiteLLM gateway. + coder:32b
│
└── M2 Air — "The Devil's Advocate" qwen2.5:7b Sharp critic, risk finder
- You send a task (Telegram or CLI)
- Pragmatist and Devil's Advocate fire in parallel
- Both responses flow to Hermes Synthesis Hub on M1 Pro
- Hermes synthesizes — resolves tensions, references past decisions, builds skills
- Verdict delivered to Telegram or terminal
Hermes is not a peer. It's the overseer. Workers execute; Hermes thinks and improves.
On each Mac:
git clone https://github.com/xernst/device-link.git
cd device-link
./setup.sh pragmatist # M1 Air
./setup.sh strategist # M1 Pro (+ Hermes Agent)
./setup.sh devils-advocate # M2 AirOn every machine (including your main laptop):
tailscale up # Sign in with the same account on all machines
tailscale ip -4 # Note each machine's IPcd device-link
bash main-mac/setup.shAdd to ~/.zshrc:
export TELEGRAM_BOT_TOKEN=your-token
export TELEGRAM_CHAT_ID=your-chat-id
export M1AIR_URL=http://100.x.x.x:11434
export M1PRO_URL=http://100.x.x.x:11434
export M2AIR_URL=http://100.x.x.x:11434From terminal:
device-link p "run tests on my-app" # Pragmatist (fast)
device-link s "design the auth system" # Strategist / Hermes (deep)
device-link da "find the flaws in this plan" # Devil's Advocate (critical)
device-link committee "review PR #42" # All 3 + synthesis
device-link status # Health checkFrom Telegram — just message the bot:
/fast quick question → Pragmatist
/think complex problem → Hermes
/committee big decision → All 3 + synthesis
/status → Node health
/search topic → Web search + summary
./deploy.sh pragmatist # Push + run setup on M1 Air
./deploy.sh strategist # Push + run setup on M1 Pro
./deploy.sh devils-advocate # Push + run setup on M2 Air
./deploy.sh all # All 3| Component | Purpose | Where |
|---|---|---|
| Tailscale | Encrypted mesh VPN | All machines |
| Ollama | Local LLM inference | All helpers |
| Hermes Agent | Synthesis hub + memory + skills | M1 Pro only |
| LiteLLM | Unified OpenAI-compatible API | M1 Pro only |
| OpenClaw | Always-on API gateway | All helpers |
| Pinchtab | Browser control via HTTP | All helpers |
| mosh + tmux | Resilient remote sessions | All helpers |
| Claude Code | AI coding agent | All helpers |
| claw_bot.py | Telegram bot (pure Ollama) | Main Mac |
- All traffic encrypted via Tailscale (WireGuard)
- Ollama bound to Tailscale IP only — not exposed publicly
- SSH key auth for deployment
- No ports on the public internet
- Zero cloud dependencies for inference
Change models: Edit nodes/<node>/ollama-models.txt, then bash config/ollama.sh <node>
Change personalities: Edit nodes/<node>/profile.md
Change Hermes behavior: Edit ~/.hermes/config.yaml on the M1 Pro
| What | Cost |
|---|---|
| Inference (Ollama) | $0 |
| Synthesis (Hermes) | $0 |
| API gateway | $0 |
| Networking | $0 |
| Telegram bot | $0 |
| Monthly total | ~$0 |
- macOS on all machines
- Same Tailscale account across all machines
- Homebrew (installed automatically)
- No API keys required for daily use (Claude is fallback only)