Corv: An SSH client for AI agents (and humans) Corv, a new SSH client designed for AI agents, launched to enable secure, structured, and reusable remote connections. The tool allows agents to execute commands without exposing credentials, receive JSON output, and manage long-running tasks, while also supporting human use via an interactive terminal UI. The SSH client for AI agents and humans. Connect by name. Reuse authenticated SSH connections. Keep secrets local. AI agents don't use SSH the way humans do. Plain SSH exposes credentials to the caller, returns terminal text that agents must parse, re-authenticates every command, and relies on tmux, nohup, or custom scripts for long-running tasks. Corv is built for agent-driven infrastructure. It lets agents connect by name, execute commands without exposing passwords or private keys, receive structured JSON output, reuse a warm authenticated connection, and detach and resume long-running jobs. Humans use the exact same connections through an interactive terminal UI. Linux / macOS curl -fsSL https://raw.githubusercontent.com/khalid-src/corv-client/main/install.sh | sh Windows PowerShell irm https://raw.githubusercontent.com/khalid-src/corv-client/main/install.ps1 | iex With Go go install github.com/khalid-src/corv-client/cmd/corv@latest Update or remove corv update download and install the latest release checksum-verified corv uninstall remove corv; add --purge to also delete saved connections corv update only runs when you run it - Corv never updates itself in the background. Manage connections interactively: corv The terminal interface supports keyboard and mouse navigation to add, edit, import from ~/.ssh/config , and connect. Connections can also be managed from the command line: corv add srv-01 ubuntu@10.0.0.4 prompts for a password if needed corv add srv-01 ubuntu@10.0.0.4 --key ~/.ssh/id ed25519 corv add db-01 ubuntu@10.0.0.9 --jump ubuntu@bastion reach through a bastion corv import import hosts from ~/.ssh/config corv list corv rm srv-01 Hosts behind one or more bastions are reached with --jump OpenSSH -J syntax: user@host1,user@host2 . Jump hosts authenticate with ssh-agent or your keys; the target uses the connection's own credentials. corv add reads any password without echo and stores it in the local encrypted vault; it is never passed as an argument. Connect interactively: corv srv-01 Run a command non-interactively the agent path : corv srv-01 -- systemctl restart api corv srv-01 --json -- df -h structured output for tools corv srv-01 -- ./deploy.sh echo 'cd /app && run "$X" | grep foo' | corv srv-01 --json --stdin corv srv-01 --json --stdin < script.sh A typical agent instruction such as "restart the API service on srv-01" requires only corv srv-01 -- systemctl restart api . Command handling after -- is designed to do what you mean: - a single argument is treated as a remote shell command line and run as-is, like ssh host "cmd" - e.g. corv srv -- "cd /app && make" ; multiple arguments are passed as a preserved argument vector, each shell-quoted so the remote cannot re-split them - e.g. corv srv -- sh -lc "cd /app && make" . This avoids the raw- ssh pitfall where quoted arguments lose their boundaries, which matters for agents that build argument vectors. For complex shell text, nested quotes, or multi-line scripts, use an stdin mode. --stdin-base64 is the cross-shell-safe option because only ASCII base64 passes through the local pipe. PowerShell can mangle quoting and pipe encoding, so encode a non-trivial remote command as UTF-8 base64 and send it with --stdin-base64 : php $b64= Convert ::ToBase64String Text.Encoding ::UTF8.GetBytes @' set -eu cd /srv/app && ./deploy.sh '@ ; $b64 | corv srv-01 --json --stdin-base64 Only ASCII base64 crosses the pipe, so the command arrives unchanged - quoting and any non-ASCII text survive intact. A simple exact argument vector can still use --