Touchless normally connects your phone and your AI through the Touchless cloud relay. You can run that relay on your own computer instead, so your phone's commands never leave your home network, and you can use a local AI (LM Studio) with no cloud account. About 10 minutes, no code and no build.
Only want ChatGPT or Claude on the web? Keep the Touchless cloud relay (the default): it already works. A self-hosted relay is for keeping traffic at home, a local AI, or full control.
wsl --update..dmg and drag Docker to Applications.Install Docker Engine and the Compose plugin, then let your user run Docker (log out and back in afterwards):
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER
Check it works: open a terminal (PowerShell on Windows) and run docker compose version. It should print a version number.
Download touchless-docker.zip and unzip it anywhere, for example Documents\touchless-docker. The relay image itself (~80 MB) is downloaded and checksum-checked by the wizard in the next step; you don't download it by hand.
Windows: double-click start.cmd in the folder.
macOS / Linux: open a terminal in the folder and run:
chmod +x start.sh stop.sh && ./start.sh
192.168.1.50.Windows may ask whether Docker may use the network: allow it for Private networks only.
Your browser opens http://127.0.0.1:8789: your exact relay address with Copy buttons, a live phone connected light, and the relay settings. The same steps are printed in the window under WHAT TO DO NOW. You can open this page again any time.
On the phone, open the browser and go to your relay address followed by /healthz, for example:
http://192.168.1.50:8787/healthz
It must show ok. If it doesn't load, go to Troubleshooting before going on.
Touchless › Settings › Advanced › Relay server, then tap Custom / self-hosted.
Relay address: http://192.168.1.50:8787, your own address from the setup page, without /mcp at the end.
Turn on Allow LAN-only cleartext (http/ws). It's needed for an http:// address on your own Wi-Fi. Leave it off for an https:// address.
Touchless reconnects to your computer, and the setup page's phone connected light turns on. Keep the AI agent switch on the Touchless home screen On.
This screen is protected: an AI can't change it for you. You do this step yourself, once.
{
"mcpServers": {
"touchless": { "url": "http://127.0.0.1:8788/mcp" }
}
}
http://192.168.1.50:8787/mcp/abc123…tlk.…). It's shown once; treat it like a password.{
"mcpServers": {
"touchless": {
"url": "http://192.168.1.50:8787/mcp/PASTE-YOUR-DEVICE-ID",
"headers": { "Authorization": "Bearer tlk.PASTE-YOUR-API-KEY" }
}
}
}
You can revoke the key any time on the same screen.
Test it: ask your AI "Call the Touchless get_device_info tool and tell me what it returns." You should see your phone's model and battery level.
A cloud AI runs on the internet and can't reach a 192.168.x.x address. Choose one:
start.cmd public (Windows) or ./start.sh public. Caddy gets a free HTTPS certificate automatically. In Touchless use https://your-domain with the cleartext switch off, and give the AI the address from Settings › AI connection.| To… | Windows | macOS / Linux |
|---|---|---|
| Start (after a reboot it starts by itself) | start.cmd | ./start.sh |
| Stop | stop.cmd | ./stop.sh |
| Update to the newest relay | start.cmd update | ./start.sh update |
| Change settings | open http://127.0.0.1:8789 on the computer | |
| See the log | docker compose logs -f relay | |
| Go back to the Touchless cloud | Settings › Advanced › Relay server › Touchless cloud (Default) | |
Your settings and the relay's small state live in the Docker volume relay-data, so stopping, restarting and updating keep them. docker compose down -v deletes that volume.
ipconfig and use the Wi-Fi adapter's IPv4 address. Not 127.0.0.1, not 172.x (that's Docker/WSL). If it changed, run start.cmd lan again and update the phone.Get-NetConnectionProfile. If your home Wi-Fi says Public, open PowerShell as Administrator and run:
Set-NetConnectionProfile -InterfaceIndex <number> -NetworkCategory Private
New-NetFirewallRule -DisplayName "Touchless relay 8787" -Direction Inbound -Protocol TCP -LocalPort 8787 -RemoteAddress LocalSubnet -Profile Private -Action AllowmacOS: System Settings › Network › Firewall › allow Docker. Linux (ufw):
sudo ufw allow from 192.168.0.0/16 to any port 8787 proto tcp
docker ps must list <your-IP>:8787->8787/tcp. If you see only 127.0.0.1:8787, run start.cmd lan.| Message | What it means |
|---|---|
No phone connected | The relay runs but the phone isn't on it yet: finish step 5 and keep AI agent On. |
401 | Wrong, revoked or missing API key, or the address isn't the one from Copy address. |
403 | Touchless's IP access list blocks that computer: tap the IP chip on the Touchless home screen. |
| Container name already in use | Another copy of the relay is running: docker stop touchless-relay, then start again. |
| Port already in use | Something else uses 8787: change RELAY_PORT in .env, then start again. |
| Image download fails (company proxy) | Download touchless-relay-image.tar.gz and its .sha256 from the releases page into the folder and run the wizard again. |
http:// address isn't encrypted. Use it only on your own trusted Wi-Fi; for anything else use HTTPS.127.0.0.1:8789) and LM Studio without a token (127.0.0.1:8788) answer only on this computer.Never post your API key or relay address publicly, and never put the key in the URL.