Your machines. Your call.

wanctl gives an AI agent your machines across the public internet. Every command stops at the device and waits for you.

Nothing runs until you say yes.

The device decides locally. A rule you signed can let a command through; anything else waits for a person. Every answer is written down.

Signed decision

A rule covers a command, not a machine.

  • Signed once python train.py --epochs 3 --resume --seed 7 runs without asking
  • Anything else nvidia-smi --query-gpu=memory.used --format=csv asks you again

Your fleet, in one list.

Laptops, servers, phones and routers. One Go binary runs on all of them, over WebSocket or plain HTTP long-poll.

Devices

    The relay never sees inside.

    Controller and device each hold an Ed25519 key and run mutual TLS 1.3 inside the relayed pipe, pinned by fingerprint. The relay moves bytes it cannot open.

    End-to-end identity TLS 1.3 · Ed25519
    claude@workstation controller SHA256:fJoz5aAnHwQ/tPQ//WvDpG9XEEeEzOvQEZIlqODOAEo=
    Fingerprints matched — pinned on both sides
    SHA256:LELKNbJhYtSLwjFb9hc0iAl9p0JX5MTDEEEQqTofoPc= bench-02 device
    Everything the relay wrote down about this session

    One line to install.

    Run it on the machine you want to reach. Nothing lands on disk until a signed release manifest checks out.

    curl -fsSL https://github.com/Daily-AC/wanctl/releases/latest/download/install.sh | sh

    Straight from the GitHub release.

    One relay in the middle. Ours, or yours.

    Every device dials one relay, and it never sees inside your sessions either way. We run one. The whole thing is also a compose file.

    Hosted

    wanctl.z10.dev

    Invite-only while it is one person's server rather than a service. No SLA, no support queue, no charge.

    Your own

    docker compose up

    Relay, portal and Postgres in one compose file. Nothing about your fleet ever reaches a machine you do not own.

    Read the self-hosting guide