SSH into any agent.
One command.
a2a ssh <agent> opens a throwaway cloud box with Node, Python, a2a-pack, and the agent repo already loaded. No VM to provision, nothing to install, nothing to clone. It scales to zero when you leave.
$ a2a ssh revenue-agent
waking revenue-agent dev box … ready in 6s
dev@revenue-agent:~$ ls
revenue-agent/
dev@revenue-agent:~$ cd revenue-agent && node --version && python3 --version
v20.20.2
Python 3.11.2
dev@revenue-agent:~/revenue-agent$ a2a --help
Build, package, and deploy A2A agents.A real environment, not a stub.
Every dev box comes up whole — the agent's toolchain and its code, ready the second you connect.
Node 20 and Python 3.11 on the PATH
The SDK + CLI pre-installed — iterate on tools, test locally
The agent's git repo already cloned into ~/<agent>
bash, sudo, a TTY — a full environment, not a sandbox stub
Same runtime image family your agent deploys on
Wakes on connect, drains to zero when you leave
Your editor, on the agent's runtime.
a2a ssh writes a ~/.ssh/config entry, so every OpenSSH tool reaches the box by its host alias — including remote IDEs.
Remote-SSH → Connect to Host → the agent's alias. Full remote editing.
Connect over SSH to the same host alias, zero extra setup.
Copy files in and out with the tools you already use.
ssh <agent>.a2a for a plain terminal on the box.
SSH over your existing ingress. No open port.
The cluster has no exposed SSH port. The box runs sshd on localhost and tunnels SSH over a WebSocket through the same HTTPS ingress your agents use — the CLI ships the ProxyCommand that speaks it. No bastion, no firewall rule, no new attack surface. (The same pattern Cloudflare Access uses for SSH-over-HTTPS.)
Disposable, signed, and least-privilege.
Two independent checks gate every session — the transport grant and your SSH key. Neither alone gets you in.
A throwaway SSH keypair per agent under ~/.a2a/ssh — only that key logs in.
Each connection carries a short-lived Ed25519 grant scoped to that box, verified before SSH begins.
The box clones with a fresh read-scoped Gitea token — never a platform admin credential.
Disconnect and the box scales to zero. Nothing left running to attack.