Two machines, one private tailnet. The lab serves every family device over Tailscale: laptops, phones, desktops and the servers themselves. Access is governed by Tailscale ACLs, and no services are port-forwarded to the internet.
Fleet
| Shadowfax | Zebra | |
|---|---|---|
| Role | GPU serving and orchestration | Always-on serving and RPC |
| Machine | Custom desktop | Mac mini (Mac16,11) |
| CPU | AMD Ryzen 9 9950X3D, 16C/32T, up to 5.76 GHz, 128 MB L3 | Apple M4 Pro, 14 cores (10 performance + 4 efficiency) |
| GPU | 2 x NVIDIA GeForce RTX 3090, 24 GB each, NVLink-bridged | Apple M4 Pro, 20-core GPU, Metal 4 |
| Memory | 64 GB DDR5 | 64 GB unified |
| Storage | WD_BLACK SN850X 4 TB NVMe | 1 TB Apple SSD (AP1024Z) |
| Networking | 10 GbE, 2.5 GbE, 5 GbE, Wi-Fi 7, Thunderbolt 3 | 10 GbE, Wi-Fi 6E, 3 x Thunderbolt 5 |
| Operating system | Ubuntu 24.04.5 LTS (kernel 7.0.0-38) | macOS 27.0.1 |
Shadowfax
Shadowfax is a custom AMD desktop with two RTX 3090s joined by NVLink. It runs the large-model serving stack and the Hermes Agent gateway.
Hardware
- Motherboard: ASUS ROG Crosshair X870E Hero, BIOS 1003 (January 2025)
- CPU: AMD Ryzen 9 9950X3D — 16 cores, 32 threads, 5.76 GHz boost, 128 MB L3 cache
- Memory: 64 GB DDR5 (about 62 GiB usable)
- GPUs: two NVIDIA GeForce RTX 3090s (GA102, 24 GB GDDR6X each), driver 595.99.02, CUDA 13.2; board power limits 500 W and 450 W
- GPU interconnect: NVLink bridge, four links at 14.062 GB/s each (
NV4, roughly 56 GB/s per direction) - Storage: WD_BLACK SN850X 4 TB NVMe, about 1.7 TB in use
- Networking: Aquantia AQC107 10 GbE (connected at 10 Gb/s), Intel I226-V 2.5 GbE, Realtek RTL8126 5 GbE, MediaTek MT7927 Wi-Fi 7 and a Thunderbolt 3 add-in card
- Operating system: Ubuntu 24.04.5 LTS, kernel 7.0.0-38-generic
Serving stack
- Tabby with ExLlamaV3 1.6.3 serves Qwen3.8-27B at EXL3 5 bpw (19 GB) across both GPUs, with tensor parallelism and a 22/22 GB split.
- Speculative decoding uses MTP with 5 draft tokens; the maximum batch size is 4.
- Context is 131,072 tokens per request with a 262,144-token FP16 KV cache.
- The model backend binds to
127.0.0.1:18083; an inference-only proxy exposes port18080on the tailnet. - DeepSeek-V4-Flash-REAP — a 132-expert FP8 mixture-of-experts (6 active experts, 43 layers, 1M-token maximum context) with 79 GB of local weights — runs through the Colibri runtime.
Zebra
Zebra is a Mac mini with an M4 Pro, 64 GB of unified memory and 10 Gigabit Ethernet. It runs the always-on model server and can act as an RPC worker.
Hardware
- Machine: Mac mini (Mac16,11), Apple M4 Pro
- CPU: 14 cores — 10 performance and 4 efficiency
- GPU: 20-core Apple GPU, Metal 4
- Memory: 64 GB unified
- Storage: 1 TB Apple SSD (AP1024Z, 994.7 GB), about 548 GB in use
- Networking: 10 Gigabit Ethernet (10Gbase-T), Wi-Fi 6E (802.11ax), three Thunderbolt 5 ports (up to 120 Gb/s)
- Operating system: macOS 27.0.1 (build 26A434)
Serving stack
- llama.cpp 0.6.0-dev (build 132, commit
42c787e, Metal) serves Gemma-4-31B-it Q4_K_M (17 GB) around the clock. - The server runs 999 GPU layers with flash attention, batch 1024 / ubatch 512, a 131,072-token context and the alias
gemma-4-31bon port18080, managed by thecom.zebra.llama-gemmaLaunchAgent. - The local model cache also carries Qwen3.8-27B and Qwen3-30B-A3B Q4_K_M.
- Zebra can join Shadowfax as an RPC worker when a model needs more memory than either machine has alone.
On the tailnet
- Tailscale provides the private mesh, MagicDNS names and ACL-based SSH access.
- OpenAI-compatible endpoints:
http://shadowfax:18080/v1— Qwen3.8-27B, through the inference-only proxyhttp://zebra:18080/v1— Gemma-4-31B
- Access is per-device through Tailscale ACLs; no ports are forwarded.
Hermes Agent
Hermes Agent is the control plane for the lab: one gateway process connects the chat interfaces, model endpoints, tools, skills, memory and scheduled jobs. It runs on Shadowfax as hermes-gateway.service, starts at boot, restarts on failure and keeps its state under ~/.hermes.
Custom skills
Most of the useful behavior here comes from custom skills the agent wrote for this lab. They cover running and benchmarking the serving stack, publishing services on the tailnet and diagnosing peer or ACL problems, keeping long-running autonomous work anchored to GitHub issues and live state, and handling recurring personal finance and task workflows. Others wire in local browser automation, coding harnesses, email and file services.
Last verified 2026-10-29. Hardware and software versions are point-in-time observations.