WireHop hands a person or an AI agent real access to real machines. That is worth being precise about. This page is the honest version: the boundaries, how they are enforced, and where they stop.
There is no WireHop server. WireHop is a tool you run, not a service you buy, so there is no account and no coordination service, and no company that could be breached to reach your machines. That includes us: we are not in the middle either.
The fair question to ask about any tool that lets software run commands on your machines. Here is the actual answer.
An agent using WireHop holds exactly one thing: an invite that was issued to it. An invite is a single-use, time-limited token, and it carries the limits you set when you made it. It is not a master key, and it cannot grant itself more than it was given.
The practical advice: give an agent the least invite that works. A monitoring agent wants --tier client --read-only with two or three allowed commands, not a full member of your network.
Reach and confinement are separate questions, enforced separately. Both must allow an action.
Every member has a role (member, developer, ops, …) and every machine has tags. A packet is forwarded only if the sender's role covers the destination's tags. This is default-deny: a role with no tags reaches nothing, so a new member starts with no reach and gains it by being granted a role, not by editing a policy file.
A session runs inside an OS-enforced sandbox: Seatbelt on macOS, Landlock on Linux. It governs which commands may run, which paths are visible, and whether outbound network is allowed. A client can ask for more restriction than the host set, never less: the two policies merge to the stricter of each.
The daemon may listen as root, but shells, commands, and file transfers all run as the ordinary user bound into the invite. That user is fixed when the invite is made and cannot be changed by whoever redeems it.
Every machine writes its own audit log of connections, sessions, commands, transfers, and denials. There is no central collector to tamper with or subpoena, and no telemetry leaves your machines. Read it with hop audit.
Set these when you mint the token. They travel with it and cannot be widened by the recipient.
What protects the connection, and what protects the thing you downloaded.
Each machine has an Ed25519 key generated on first run and stored with owner-only permissions. There is no account to phish and no password to reuse. Losing the key is losing the identity, which is the point.
Connections are QUIC with TLS 1.3 between your machines. When a direct path can't be punched through NAT, a relay forwards encrypted packets it cannot read. A relay sees that two machines are talking, never what they say.
Every published binary carries a SHA-256 checksum and an RSA signature. The installer verifies both against a key embedded in it and refuses to install on a mismatch. macOS packages are signed and notarized with Apple.
Invite tokens are hashed with Argon2 before storage, so the host keeps a verifier rather than the secret. Stored secrets are encrypted with ChaCha20-Poly1305. None of this has to be taken on faith. The implementation is public and permissively licensed, so you can verify it yourself, or hand it to a model and have it verify it for you.
A security page that only lists strengths isn't a security page.
hop fleet prune or an admin revoke.Found something? Report it privately through GitHub's security advisories on the repository. We aim to acknowledge within 72 hours and will credit you in the release notes unless you'd rather we didn't.