Your machines, one room.
A self-hosted control room for every project on every machine you own. Ports, terminals, live previews and your AI sessions — one URL, from any browser or your phone.
The agent dials out, so nothing has to dial in.
MIT licensed. Self-hosted. No hosted tier, no account with us.
Four machines, and no single place that knows what is running.
So you go and ask each one. Every answer is somewhere else: a port is in lsof, a process is in pm2 list, a credential is in a .env you have to ssh to read. None of it is wrong. It is just spread across four terminals and your memory.
Four things that are hard to get in one place.
Several tools do one of these well. The claim here is that the combination is the product, and that the outbound-only agent is what makes the combination cheap to run.
The agent dials out
No inbound ports, no VPN, no port forwarding.
The agent connects out to your server and holds the socket open. There is no inbound port to open on the developer machine, no VPN to join, and no firewall rule to write. A laptop on hotel Wi-Fi is as reachable as a rack server. If the machine can reach the internet, you can reach the machine.
Terminals are real tmux
Close the browser and the build keeps running.
Not a web shell. Sessions survive browser reloads, network drops and app switches, and you can reattach from your phone. Open a terminal natively and you join the same session — the agent writes a guarded block into your shell rc so it just happens. A dropped socket detaches rather than kills: the PTY is held for 10 minutes so a reconnect resumes where you were.
AI sessions read as chat
It reads the transcript, it never scrapes the TUI.
Claude Code, Codex and Grok each already write a structured JSONL transcript. The agent tails that file and normalises all three into one event type. Scraping the alternate-screen terminal UI would break on every upstream release; reading the transcript does not. Three vendors, one chat surface, across every machine you own.
The tunnel rewrites the app
Real apps work through it, not half-loaded ones.
Absolute /_next/ and /api/ paths are rewritten in HTML, JS and CSS, and an injected script patches fetch, XMLHttpRequest, history.pushState, anchor clicks and the Navigation API. That is why a Next.js or PHP app served through a path prefix actually works instead of loading its shell and stalling.
Three moving parts.
The agent starts on your machine
It connects outbound to your server and holds the socket open. Nothing listens for an inbound connection, so there is nothing to expose.
Your server holds every socket
One WebSocket process — 1753 lines, one file — is the only thing that talks to agents. The web app never does.
You open one URL
Ports, terminals, files, processes, tunnels and AI sessions, from any browser or the phone app.
What it does.
Projects
Every project on every machine, with what is actually running right now.
- Live port checks
- Multi-machine projects
- Process control
- Notes and todos
Terminals
tmux-backed, shared with your native terminal, resumable by name.
- tmux-backed
- Cowork
- Resumable by name
- Recording and playback
AI sessions
Claude Code, Codex and Grok across your whole fleet, as chat.
- Three vendors, one surface
- Every machine, one list
- Launch mode
- Push when it needs you
Infrastructure
Tunnels, files, services and machine enrolment.
- HTTP tunnel
- File browser
- System services
- Machines and API keys
Account and platform
Two-factor that is actually enforced, on web and on native.
- PIN and mandatory TOTP
- Browser and native sessions
- Web push
- PWA and mobile app
What people actually do with it.
Show a client the branch, right now
Open a tunnel on the port the feature branch is running on and send the URL. No deploy, no staging environment to keep in sync, and no explaining why staging is three commits behind.
Keep a build running while you leave
The terminal is tmux. Close the laptop, open the phone app, and reattach to the same session. The build never knew you left.
Find out what is on port 3000
Scan a port range and see what answers. Scan a folder tree and register the projects you forgot you had. The dashboard then checks those ports on every load.
All of it, MIT licensed.
Server, agent, shared library and mobile app, in one repository. Nothing is held back for a paid tier. Read the authorization code before you trust it with a machine — that is the point of shipping it this way.
API routes, every one authenticated and every client-supplied id authorized
database tables, in your own Postgres
agent CLI commands, macOS and Linux
AI vendors, added without changing the chat surface
Four commands on each machine.
This is the agent. The server is a separate one-time setup — installation guide, or have us do it.
$ npm install -g @dialout/agent$ dialout-agent init$ dialout-agent install-service$ dialout-agent statusThe software is free. These are not.
Professional installation
We install and configure Dialout on your AWS, Azure, GCP, DigitalOcean or VPS: SSL, database, email, storage, backups, Docker and domain.
Enterprise
Enterprise deployment, custom integrations and development, priority support, migration assistance, security review, architecture consulting and an SLA.
Support
Community support is free, in GitHub issues and discussions. Paid support is available if you need a response time in writing.
Before you install it.
Put every machine you own in one room.
Self-hosted, MIT licensed, and running in about fifteen minutes.