3.5 KiB
3.5 KiB
Tailscale Network Guide
All machines in Jacob Mathison's environment are connected via Tailscale. This is the backbone of cross-machine access — SSH, kittens WebSocket bridges, Gitea, and local services all route over it.
Tailscale Account
- Account:
silmaai2000@(silmaai Tailscale account) - Network name: silmaai2000's tailnet
Machine Inventory
| Hostname | Tailscale IP | OS | Role | Status |
|---|---|---|---|---|
macbook-pro-3 (Tabitha) |
100.76.192.116 |
macOS arm64 | Silma AI primary — OCPlatform, k8s | ✅ Online |
orson |
100.79.253.19 |
macOS arm64 | Gitea host, CI runner (act_runner), Hagia attached | ✅ Online |
orson-macbook-pro |
100.108.57.113 |
macOS arm64 | Orson second interface | ✅ Online |
tabitha-macbook-pro |
100.120.22.37 |
macOS arm64 | Tabitha second interface | — |
ozymandiass-macbook-pro (Ozymandias) |
100.115.222.5 |
macOS x86_64 | Travel laptop / coding box | — Offline |
hunter-wsl2 |
100.118.15.20 |
Linux (WSL2) | Hunter Albert's dev machine | — Offline |
joseph-bro-windows |
100.123.22.58 |
Windows | Aaron Pressey's machine (GoatLord) | — Offline |
mimir-mme3l (Mimir) |
100.100.117.5 |
Linux | Mimir server (Hunter's AI bridge box) | — Offline |
Verify Connectivity
# Check your own Tailscale IP and status
tailscale ip
tailscale status
# Ping a machine
ping 100.79.253.19 # Orson/Hagia/Gitea host
ping 100.76.192.116 # Tabitha (Silma primary)
Connecting to Machines
Via kittens WebSocket bridge (preferred for remote exec)
All machines run silma-kittens — a WebSocket server that allows remote command execution without needing SSH keys.
import asyncio, json, websockets
async def remote(ip, cmd, token='silma-kittens-2026', timeout=20):
url = f'ws://{ip}:8765/?token={token}'
async with websockets.connect(url, open_timeout=5) as ws:
await ws.recv()
await ws.send(json.dumps({'type': 'exec', 'id': '1', 'cmd': cmd}))
r = json.loads(await asyncio.wait_for(ws.recv(), timeout=timeout))
return r.get('stdout', ''), r.get('stderr', '')
# Orson
out, err = asyncio.run(remote('192.168.12.138', 'hostname'))
# Or via Tailscale IP
out, err = asyncio.run(remote('100.79.253.19', 'whoami'))
Kittens token: silma-kittens-2026 (same on all machines)
Port: 8765
Creon (Hunter's static ngrok tunnel)
Hunter's machine uses a permanent ngrok domain:
- URL:
wss://creon.ngrok.app/?token=3ClCIkJOCu1Gd5RO2PA4JHRD1ji_soHXcU4c3vMCbvEBFsKi - Requires
ngrok-skip-browser-warning: trueheader
Key Service Endpoints (via Tailscale)
| Service | Address | Notes |
|---|---|---|
| Gitea | http://100.79.253.19:3000 |
Self-hosted git on Orson/Hagia |
| Tabitha k8s services | localhost:* when port-forwarded |
See tools/k8s.llm.md |
/etc/hosts Entries (Tabitha)
100.79.253.19 Theodora Orson Hagia
These aliases are set on Tabitha — Orson, Hagia, Theodora all resolve to 100.79.253.19.
Notes for AI Agents
- If Tailscale is not connected, cross-machine operations will fail silently — verify with
tailscale statusfirst - Gitea and kittens are both reachable via LAN IP (
192.168.12.x) or Tailscale IP (100.x.x.x) when on the same network - Offline machines have kittens installed but the tunnel won't be up — check
tailscale statusbefore trying - GoatLord (
joseph-bro-windows) also has a static ngrok URL:exsufflicate-ineradicable-cortez.ngrok-free.app(port 8765)