Your agent can write code and call tools. What it can't do is reach the machines you actually run: every tool that would fix that asks it to open a browser and make an account. WireHop doesn't.
Two machines, four commands, no human in the loop.
Nothing to sign up for, nothing to click, nobody to wait on. Identity is a keypair written to disk on first run; membership is a document your machines share among themselves. There is no console because there is nothing to click through to.
Every command takes --json, so an agent never scrapes output. A failure is one envelope with a code, a retryable flag and a hint, so it can decide whether waiting will help.
An agent holds exactly one thing: the invite you issued it. Which machines, which commands, which paths, read-only or not, all travel with the token and cannot be widened. The boundaries.
Every build runs a cold-start eval: two bare containers, a real model, one shell tool, and the harness inspects the machines itself afterwards. How it is scored.
Two pieces: one that teaches an agent when to reach for WireHop, one that lets it operate your machines once it has.
Plain markdown: when to use WireHop, the bootstrap above, and how to scope an invite. Works in any framework that reads a skill file.
A local tool server, running under your own identity. Nothing is hosted and nothing takes custody of your credentials.
It selects machines by role or tag, runs across all of them, and stops at whatever your rules don't allow.
The most useful tool it exposes is hop_exec: a sandbox that runs JavaScript with bindings for exec, fleet, transfer and admin, so a multi-step job is one small program instead of twenty tool calls. The tool and API reference.