{"id":45643060,"url":"https://github.com/batalabs/muxd","last_synced_at":"2026-05-03T23:07:55.002Z","repository":{"id":340262470,"uuid":"1165242534","full_name":"batalabs/muxd","owner":"batalabs","description":"An open-source AI coding agent that lives in your terminal. Multi-provider, multi-channel, persistent sessions with git-like branching.","archived":false,"fork":false,"pushed_at":"2026-05-03T22:04:34.000Z","size":16702,"stargazers_count":8,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-03T22:07:37.243Z","etag":null,"topics":["ai-assistant","anthropic","cli","code-generation","coding-agent","developer-tools","fireworks-ai","golang","grok","llm","ollama","openai","terminal","tui"],"latest_commit_sha":null,"homepage":"https://muxd.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/batalabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"batalabs"}},"created_at":"2026-02-24T00:58:37.000Z","updated_at":"2026-05-03T22:03:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/batalabs/muxd","commit_stats":null,"previous_names":["batalabs/muxd"],"tags_count":169,"template":false,"template_full_name":null,"purl":"pkg:github/batalabs/muxd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batalabs%2Fmuxd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batalabs%2Fmuxd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batalabs%2Fmuxd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batalabs%2Fmuxd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/batalabs","download_url":"https://codeload.github.com/batalabs/muxd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batalabs%2Fmuxd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587829,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assistant","anthropic","cli","code-generation","coding-agent","developer-tools","fireworks-ai","golang","grok","llm","ollama","openai","terminal","tui"],"created_at":"2026-02-24T03:08:51.132Z","updated_at":"2026-05-03T23:07:54.997Z","avatar_url":"https://github.com/batalabs.png","language":"Go","funding_links":["https://github.com/sponsors/batalabs"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"assets/muxd_logo_512.png\" alt=\"muxd\" width=\"220\"\u003e\n  \u003cbr\u003e\n  muxd\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eAn open source AI coding agent that lives in your terminal.\u003c/b\u003e\u003cbr\u003e\n  \u003csub\u003e37 tools. Any model. Sessions that survive reboots. An agent that builds its own tools.\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003e\n  \u003cb\u003emux\u003c/b\u003e = multiplex your sessions \u0026nbsp;·\u0026nbsp; \u003cb\u003ed\u003c/b\u003e = daemon \u003cimg src=\"assets/muxd_logo_420.png\" alt=\"daemon\" width=\"28\" style=\"vertical-align: bottom;\"\u003e (Unix tradition)\n\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-early%20release-orange\" alt=\"Early Release\"\u003e\n  \u003ca href=\"https://github.com/batalabs/muxd/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/batalabs/muxd?include_prereleases\u0026label=version\" alt=\"Version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/batalabs/muxd/commits/main\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/batalabs/muxd\" alt=\"Last Commit\"\u003e\u003c/a\u003e\n  \u003ca href=\"#install\"\u003e\u003cimg src=\"https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go\u0026logoColor=white\" alt=\"Go 1.25+\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-windows%20%7C%20linux%20%7C%20macos-8A2BE2\" alt=\"Windows | Linux | macOS\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue\" alt=\"Apache 2.0\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e **Full docs at [muxd.sh](https://muxd.sh/docs)** · [Client setup](https://muxd.sh/docs/client) · [Hub setup](https://muxd.sh/docs/hub) · [Commands](https://muxd.sh/docs/commands) · [Tools](https://muxd.sh/docs/tools) · [Config](https://muxd.sh/docs/configuration)\n\n---\n\n## Architecture\n\nmuxd has four components. Run them all on one machine for local dev, or distribute them across servers for a team setup.\n\n| Component | Binary | Role |\n|---|---|---|\n| **muxd** | `muxd` | Terminal TUI client |\n| **muxd-daemon** | `muxd-daemon` | Agent server (sessions, tools, model calls) |\n| **muxd-hub** | `muxd-hub` | Hub coordinator (nodes, workers, webhooks) |\n| **Web UI** | served by hub | Browser dashboard for workers and nodes |\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/diagrams/architecture.png\" alt=\"muxd architecture\" width=\"600\"\u003e\n\u003c/p\u003e\n\n### muxd Terminal Client\n\nThe TUI you interact with. Connects to a local daemon or a remote hub. Pure client, no agent logic.\n\n```bash\nmuxd                                          # connect to local daemon\nmuxd --remote hub.example.com:4097 --token x  # connect to remote hub\n```\n\nFlags: `--version`, `--remote \u003chost:port\u003e`, `--token \u003cstring\u003e`\n\n### muxd-daemon Agent Server\n\nHeadless server that runs sessions, executes tools, talks to model APIs. One per machine.\n\n```bash\nmuxd-daemon                  # start on localhost:4096\nMUXD_BIND=0.0.0.0 muxd-daemon  # listen on all interfaces\n```\n\nConfiguration is via `config.json` or environment variables:\n\n| Env Var | What |\n|---|---|\n| `MUXD_MODEL` | Model name or alias (e.g. `claude-sonnet`) |\n| `MUXD_PROVIDER` | Provider name (e.g. `anthropic`, `openai`) |\n| `MUXD_BIND` | Network interface to bind (default: `localhost`) |\n| `MUXD_HUB_URL` | Hub URL to register with |\n| `MUXD_NODE_NAME` | Node name (defaults to hostname) |\n\n### muxd-hub Hub Coordinator\n\nCentral coordinator for multiple daemons. Manages node registration, worker lifecycle, webhooks, and serves the web UI.\n\n```bash\nmuxd-hub                # start on localhost:4097\nMUXD_HUB_BIND=0.0.0.0 muxd-hub  # listen on all interfaces\n```\n\n| Env Var | What |\n|---|---|\n| `MUXD_HUB_BIND` | Network interface to bind |\n| `MUXD_HUB_TOKEN` | Auth token (auto-generated if not set) |\n| `MUXD_WEB_DIR` | Path to web UI static files (enables web dashboard) |\n\n### Web UI Browser Dashboard\n\nReact + Vite + Tailwind dashboard for managing workers and monitoring nodes. Served by the hub when `MUXD_WEB_DIR` is set (automatic in Docker).\n\nPages:\n- **Dashboard** — nodes, workers, sessions, cost overview\n- **Workers** — create and manage autonomous agents triggered by webhooks or schedules\n- **Worker Detail** — activity feed with approve/reject for human-in-the-loop\n- **Nodes** — registered daemon nodes with status\n\n```bash\n# Local dev\ncd web \u0026\u0026 npm run dev     # starts on :5173, proxies /api to hub on :4097\n\n# Production (built into hub)\nMUXD_WEB_DIR=/var/lib/muxd/web muxd-hub\n```\n\n---\n\n## Configuration\n\nAll three binaries share one config file at `~/.config/muxd/config.json`. Each binary only reads the fields it needs.\n\n| File | Location | Purpose |\n|---|---|---|\n| `config.json` | `~/.config/muxd/` | Shared config for all binaries |\n| `muxd.db` | `~/.local/share/muxd/` | Sessions, messages, branches (daemon) |\n| `hub.db` | `~/.local/share/muxd/` | Nodes, workers, memory, logs (hub) |\n| `server.lock` | `~/.local/share/muxd/` | Daemon PID, port, token (auto-managed) |\n\n### Config fields by binary\n\n**muxd** (TUI client): `model`, `provider`, `hub_url`, `hub_auth_token`\n\n**muxd-daemon** (agent server): `model`, `provider`, API keys, `daemon_bind_address`, `hub_url`, `hub_node_token`, `hub_node_name`\n\n**muxd-hub** (coordinator): `hub_bind_address`, `hub_auth_token`\n\n### Setting values\n\nThree ways to configure, in priority order:\n\n1. **Environment variables** — override everything (e.g. `MUXD_MODEL=claude-sonnet`)\n2. **`config.json`** — persisted settings, edited via `/config set \u003ckey\u003e \u003cvalue\u003e` in the TUI\n3. **Defaults** — sensible defaults when nothing is set\n\nAPI keys follow the same pattern: set in `config.json` via `/config set anthropic.api_key \u003ckey\u003e`, or use the standard env var (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc).\n\n### Key config values\n\n| Key | Env var | What |\n|---|---|---|\n| `model` | `MUXD_MODEL` | Default model (e.g. `claude-sonnet`) |\n| `provider` | `MUXD_PROVIDER` | Default provider (e.g. `anthropic`) |\n| `daemon_bind_address` | `MUXD_BIND` | Daemon bind interface |\n| `hub_url` | `MUXD_HUB_URL` | Hub URL for daemon registration |\n| `hub_node_token` | `MUXD_HUB_NODE_TOKEN` | Token for daemon to register with hub |\n| `hub_node_name` | `MUXD_NODE_NAME` | Node name (defaults to hostname) |\n| `hub_bind_address` | `MUXD_HUB_BIND` | Hub bind interface |\n| `hub_auth_token` | `MUXD_HUB_TOKEN` | Hub auth token |\n\n---\n\n## What makes muxd different\n\nMost AI coding tools treat conversations as disposable. muxd saves everything to local SQLite. Close your terminal, reboot, come back next week, and pick up exactly where you left off.\n\n### Agent capabilities\n\n| | |\n|---|---|\n| **37 built-in tools** | File I/O, bash, grep, glob, web search, HTTP, SMS, git, scheduling, document reading, parallel pipeline, LSP, and more |\n| **Any model** | Claude, GPT, Gemini, Mistral, Grok, GLM, Fireworks, DeepInfra, Ollama, or any OpenAI compatible API |\n| **Inline diffs** | Every file edit shows a red and green diff in the chat. See exactly what changed |\n| **Read any document** | PDFs, Word, Excel, PowerPoint, HTML, CSV, JSON, XML. No plugins required |\n| **Self extending tools** | The agent creates its own tools at runtime. Command templates or scripts, ephemeral or persistent |\n| **Second opinion** | Ask a different model for a review. Response shown separately with a crystal ball emoji |\n| **Chat modes** | Code (read/edit/run), Ask (read-only), Architect (plan only). Switch with `/mode` |\n| **Repo map** | Auto-generated codebase overview injected into context for better navigation |\n| **Parallel pipeline** | Run sub-agents concurrently with a live DAG showing animated spinners and per-task activity |\n| **Code intelligence** | LSP integration with go-to-definition, references, hover, diagnostics, and symbol search across Go, TypeScript, Python, Rust, and C/C++ |\n\n### Session management\n\n| | |\n|---|---|\n| **Persistent sessions** | Conversations survive restarts. Resume any session by project or ID |\n| **Branch and fork** | Explore alternatives without losing your thread. Like git branches for conversations |\n| **Project memory** | The agent remembers your conventions and decisions across sessions |\n| **Smart compression** | Tiered compaction at 60k/75k/90k tokens. Preserves key decisions while cutting costs |\n\n### Infrastructure\n\n| | |\n|---|---|\n| **Hub architecture** | Coordinate multiple daemons across machines. Connect from any TUI or mobile client |\n| **Copy mode** | Press Ctrl+S to toggle mouse tracking for native text selection. Arrow keys scroll the viewport |\n| **Always on daemon** | Background service that survives reboots. Auto titles, schedules tasks, runs headless |\n| **Mobile app** | [iOS app](https://apps.apple.com/us/app/muxd/id6759869997) connects via QR code. Chat with your agent from anywhere |\n| **Hub dispatch** | Send tasks to remote nodes. The agent can delegate work across your machines |\n| **Web dashboard** | Browser-based UI for workers, nodes, and activity monitoring |\n\n---\n\n## Demo\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/muxd_intro.gif\" alt=\"muxd demo\" width=\"700\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/mobile-clients.png\" alt=\"muxd mobile - node picker\" height=\"550\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"assets/mobile-chat.png\" alt=\"muxd mobile - chat\" height=\"550\"\u003e\n\u003c/p\u003e\n\n---\n\n## Install\n\n**Windows (PowerShell)**\n```powershell\nirm https://raw.githubusercontent.com/batalabs/muxd/main/install.ps1 | iex\n```\n\n**macOS / Linux**\n```bash\ncurl -fsSL https://raw.githubusercontent.com/batalabs/muxd/main/install.sh | bash\n```\n\n**From source** (requires [Go 1.25+](https://go.dev/dl/))\n```bash\ngo install github.com/batalabs/muxd@latest\n```\n\n**Prerequisites**: git (for undo/redo) and an API key for at least one [supported provider](https://muxd.sh/docs/configuration).\n\n---\n\n## Quick Start Binaries\n\n### 1 machine: daemon + TUI\n\nEverything local. Two terminals, no hub.\n\n```bash\n# Terminal 1: start the daemon\nmuxd-daemon\n\n# Terminal 2: start the TUI (auto-discovers the daemon)\nmuxd\n```\n\n### 1+1: hub + daemon on the same server\n\nOne server runs the hub and daemon. You connect from your laptop.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/diagrams/setup-1-plus-1.png\" alt=\"1+1 setup\" width=\"500\"\u003e\n\u003c/p\u003e\n\n```bash\n# 1. Install (as root)\ncurl -fsSL https://raw.githubusercontent.com/batalabs/muxd/main/install.sh | sh\n\n# 2. Set up env vars (as your user, on minimal servers without a desktop)\nexport XDG_RUNTIME_DIR=/run/user/$(id -u)\nexport DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus\n\n# 3. Install and start the hub service\nMUXD_HUB_BIND=0.0.0.0 muxd-hub -service install\nmuxd-hub -service start\n\n# 4. Keep services running after SSH logout (as root)\nsu - -c \"loginctl enable-linger $USER\"\n\n# 5. Get the QR code and token\nmuxd-hub -service qr\n\n# 6. Install and start the daemon (on the same server)\nmuxd-daemon -service install\nMUXD_HUB_URL=http://localhost:4097 MUXD_HUB_NODE_TOKEN=\u003ctoken\u003e muxd-daemon -service start\n```\n\n```bash\n# On your laptop: connect to the hub\nmuxd --remote \u003cserver-ip\u003e:4097 --token \u003ctoken-from-hub\u003e\n```\n\nOpen `http://\u003cserver-ip\u003e:4097` in your browser to see the web dashboard.\n\n### 1+2: hub and daemon on separate servers\n\nDedicate one server to the hub, another to the daemon. More secure: your API keys only live on the daemon server.\n\n```bash\n# Server A (hub): coordinate nodes\nmuxd-hub                      # prints token + QR code\n\n# Server B (daemon): runs the agent\nMUXD_HUB_URL=http://server-a:4097 \\\nMUXD_HUB_NODE_TOKEN=\u003ctoken\u003e \\\nMUXD_NODE_NAME=worker-1 \\\nmuxd-daemon\n\n# Your laptop: connect to hub\nmuxd --remote server-a:4097 --token \u003ctoken\u003e\n```\n\n### Adding more servers (1+n)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/diagrams/setup-1-plus-n.png\" alt=\"1+n setup\" width=\"500\"\u003e\n\u003c/p\u003e\n\nEach additional machine just runs `muxd-daemon` pointing at the hub:\n\n```bash\n# Server C, D, E... each run:\nMUXD_HUB_URL=http://server-a:4097 \\\nMUXD_HUB_NODE_TOKEN=\u003ctoken\u003e \\\nMUXD_NODE_NAME=worker-3 \\\nmuxd-daemon\n```\n\nThe hub shows all nodes in the web dashboard. Use `/nodes` in the TUI to pick which node to run sessions on.\n\n---\n\n## Quick Start Docker\n\nFirst build the images:\n\n```bash\ngit clone https://github.com/batalabs/muxd.git\ncd muxd\ndocker compose build\n```\n\nAPI keys can be passed as env vars or set inside the TUI with `/config set \u003cprovider\u003e.api_key \u003ckey\u003e`:\n\n| Provider | Env var |\n|---|---|\n| Anthropic | `ANTHROPIC_API_KEY` |\n| OpenAI | `OPENAI_API_KEY` |\n| Google | `GOOGLE_API_KEY` |\n| Mistral | `MISTRAL_API_KEY` |\n| Grok | `XAI_API_KEY` |\n| ZAI (GLM) | `ZAI_API_KEY` |\n| Fireworks | `FIREWORKS_API_KEY` |\n| DeepInfra | `DEEPINFRA_API_KEY` |\n| Ollama | `OLLAMA_API_BASE` (default: `http://localhost:11434`) |\n\n### 1+1: hub + daemon on one machine\n\n```bash\n# Create .env\necho \"MUXD_MODEL=claude-sonnet\" \u003e .env\necho \"ANTHROPIC_API_KEY=sk-ant-...\" \u003e\u003e .env\n\n# Start hub + daemon\ndocker compose up -d\n\n# Connect from your laptop\nmuxd --remote localhost:4097 --token \u003ctoken\u003e\n```\n\nOpen `http://localhost:4097` in your browser to see the web dashboard.\n\n`docker-compose.yml`:\n```yaml\nservices:\n  hub:\n    build:\n      context: .\n      target: hub\n    ports: [\"4097:4097\"]\n    environment:\n      MUXD_HUB_BIND: \"0.0.0.0\"\n\n  daemon:\n    build:\n      context: .\n      target: daemon\n    environment:\n      MUXD_MODEL: ${MUXD_MODEL:-claude-sonnet}\n      MUXD_BIND: \"0.0.0.0\"\n      MUXD_HUB_URL: \"http://hub:4097\"\n      MUXD_HUB_NODE_TOKEN: ${HUB_TOKEN:-}\n    env_file: .env\n```\n\n### 1+2: hub and daemon on separate servers\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/diagrams/setup-docker.png\" alt=\"docker setup\" width=\"500\"\u003e\n\u003c/p\u003e\n\n```bash\n# Server A (hub)\ndocker run -d -p 4097:4097 -e MUXD_HUB_BIND=0.0.0.0 muxd-hub\n\n# Server B (daemon)\ndocker run -d -p 4096:4096 \\\n  -e MUXD_MODEL=claude-sonnet \\\n  -e MUXD_BIND=0.0.0.0 \\\n  -e MUXD_HUB_URL=http://server-a:4097 \\\n  -e MUXD_HUB_NODE_TOKEN=\u003ctoken\u003e \\\n  -e MUXD_NODE_NAME=worker-1 \\\n  -e ANTHROPIC_API_KEY=sk-ant-... \\\n  muxd-daemon\n\n# Your laptop\nmuxd --remote server-a:4097 --token \u003ctoken\u003e\n```\n\n### Adding more servers (1+n)\n\nEach additional daemon server is one `docker run`:\n\n```bash\n# Server C, D, E...\ndocker run -d -p 4096:4096 \\\n  -e MUXD_BIND=0.0.0.0 \\\n  -e MUXD_HUB_URL=http://server-a:4097 \\\n  -e MUXD_HUB_NODE_TOKEN=\u003ctoken\u003e \\\n  -e MUXD_NODE_NAME=worker-3 \\\n  -e MUXD_MODEL=claude-sonnet \\\n  -e ANTHROPIC_API_KEY=sk-ant-... \\\n  muxd-daemon\n```\n\nOr add more `daemon` services to your `docker-compose.yml` on each server.\n\n---\n\n## Running as a Service\n\nInstall muxd-hub or muxd-daemon as a system service so it starts on boot and survives SSH disconnects.\n\n### Linux (systemd)\n\n```bash\n# Install the hub as a user service\nmuxd-hub -service install\nmuxd-hub -service start\n\n# Install the daemon as a user service\nmuxd-daemon -service install\nmuxd-daemon -service start\n```\n\n**Important**: On minimal servers (no desktop environment), set these env vars first:\n\n```bash\nexport XDG_RUNTIME_DIR=/run/user/$(id -u)\nexport DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus\n```\n\nThen keep services running after logout:\n\n```bash\nloginctl enable-linger $USER\n```\n\nWithout `enable-linger`, systemd kills user services when you close your SSH session.\n\n### Service management\n\n```bash\nmuxd-hub -service status    # check if running\nmuxd-hub -service stop      # stop the service\nmuxd-hub -service uninstall # remove the service\nmuxd-hub -service qr        # re-show the QR code and token\n```\n\nSame commands work for `muxd-daemon -service \u003caction\u003e`.\n\n### macOS (launchd)\n\n```bash\nmuxd-hub -service install   # creates ~/Library/LaunchAgents/com.muxd.hub.plist\nmuxd-hub -service start\nmuxd-hub -service status\n```\n\n### Windows (registry)\n\n```bash\nmuxd-daemon -service install   # adds startup registry entry\nmuxd-daemon -service start     # launches in background\nmuxd-daemon -service stop      # kills process via lockfile\n```\n\n---\n\n## Contributing\n\n```bash\ngit clone https://github.com/batalabs/muxd.git\ncd muxd\n\n# Build all binaries\ngo build -o muxd .\ngo build -o muxd-hub ./cmd/muxd-hub\ngo build -o muxd-daemon ./cmd/muxd-daemon\n\n# Run tests\ngo test ./...\n\n# Web UI\ncd web \u0026\u0026 npm install \u0026\u0026 npm run dev\n```\n\nSee [muxd.sh/docs/contributing](https://muxd.sh/docs/contributing) for code style and development guide.\n\n---\n\n## License\n\n[Apache License 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbatalabs%2Fmuxd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbatalabs%2Fmuxd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbatalabs%2Fmuxd/lists"}