Introducing muxd Hub: Manage Your AI Agents Across Every Machine

Your coding agents are running on three servers, your laptop, and a Raspberry Pi. Here's how to see them all in one place.

The problem

muxd-daemon already runs as a background service. You start it, it handles sessions, it survives reboots. It works great on one machine.

But most of us don't have one machine. You have a dev server, a build server, maybe a GPU box for the heavy models. You want to start a refactoring on your laptop, check on it from your phone, and review the results on your desktop.

You could SSH into each box. You could keep a terminal open for each daemon. Or you could use the hub.

What is muxd-hub?

muxd-hub is a coordinator. One binary, no dependencies. It runs on one machine and manages daemons on all the others.

# Start the hub — prints a token and QR code
muxd-hub

# On each server, start a daemon that registers with the hub
MUXD_HUB_URL=http://hub:4097 MUXD_HUB_NODE_TOKEN=<token> muxd-daemon

# Connect your TUI from anywhere
muxd --remote hub:4097 --token <token>

That's it. The hub knows about every daemon, every session, every node. It proxies requests, coordinates workers, and serves a web dashboard.

The architecture

muxd architecture showing TUI, hub, daemon, and web UI

The web dashboard

Open http://hub:4097 in any browser. No Node.js, no npm, no build step. The dashboard is built into the hub binary using Go templates and HTMX. Single static binary, zero frontend dependencies.

Dashboard

See your nodes, active sessions, total cost, and token usage at a glance.

Web dashboard with stats cards for nodes, workers, sessions, cost, and recent session list

Nodes

Every connected machine in one list. Platform, model count, tool count, online status. Click a node to see its sessions and health details.

Nodes page with status dots showing online machines

Logs

Centralized log viewer. Every daemon forwards its logs to the hub in real time. Filter by level (error, warn, info, debug) or by node. Click "Live Stream" to watch logs scroll in real-time via server-sent events.

Logs page with live stream active, colored log levels, and filter dropdowns

Memory

Shared project facts synced across all nodes. When an agent saves a convention or a config path, every daemon sees it. Scope facts as local (this machine only) or shared (all nodes).

Memory page showing key-value fact list

Security

  • Auth token on startup: the hub generates a 32-byte hex token. You need it for the TUI, the web dashboard, and daemon registration. No token, no access.
  • Cookie-based web auth: login once, stay logged in. Cookies are HttpOnly. Secure flag is set automatically for HTTPS.
  • No cloud dependency: everything runs on your machines. The hub never phones home.
  • Open source: Apache 2.0. Audit the code, fork it, self-host it.

Getting started

# 1. Install
curl -fsSL https://raw.githubusercontent.com/batalabs/muxd/main/install.sh | sh

# 2. Start the hub
muxd-hub
# Saves token, prints QR code

# 3. On each machine, start a daemon
MUXD_HUB_URL=http://hub:4097 MUXD_HUB_NODE_TOKEN=<token> muxd-daemon

# 4. Open the dashboard
open http://hub:4097

Or use Docker:

git clone https://github.com/batalabs/muxd.git
cd muxd
docker compose up -d

What's next

The hub is new. We shipped the web dashboard, centralized logging, memory sync, and worker management. Here's what's coming:

  • Multi-user auth: team accounts with role-based access
  • Worker scheduling: cron-like recurring tasks through the hub
  • Android app: same QR-code pairing, same hub connection
  • Agent marketplace: share custom tools and configurations across nodes

Try it and let us know what breaks. We're building in the open.

github.com/batalabs/muxd