ssh-cli 0.5.1

Native Rust CLI that gives LLMs (Claude Code, Cursor, Windsurf) the ability to operate remote servers via SSH over stdin/stdout
Documentation
{
  "skill_name": "ssh-cli",
  "queries": [
    {
      "query": "add my production vps to the multi-host registry and run uname over ssh with json",
      "should_trigger": true
    },
    {
      "query": "exec a remote command on edge.example.com with private key auth and parse stdout",
      "should_trigger": true
    },
    {
      "query": "need sudo-exec with safe packing to install packages on the staging host",
      "should_trigger": true
    },
    {
      "query": "open a short-lived ssh tunnel with timeout-ms and --json wait for event tunnel_listening before using local 18080",
      "should_trigger": true
    },
    {
      "query": "upload a single file with scp --json and parse ok event scp-transfer direction vps local remote bytes duration_ms",
      "should_trigger": true
    },
    {
      "query": "scp download with --json expect .ssh-cli.partial then atomic rename and preserve mtime mode",
      "should_trigger": true
    },
    {
      "query": "refuse scp of a directory regular files only no -r no SFTP",
      "should_trigger": true
    },
    {
      "query": "scp transfer failed under --json parse stderr error envelope exit_code message",
      "should_trigger": true
    },
    {
      "query": "scp --timeout for long file copy do not use --timeout-ms on scp",
      "should_trigger": true
    },
    {
      "query": "upload large artifact with scp streaming 32KiB chunks not full file in RAM",
      "should_trigger": true
    },
    {
      "query": "tunnel bind failure with --json read stderr error envelope not stdout success",
      "should_trigger": true
    },
    {
      "query": "secrets status failed after rotating master-key, how do i reencrypt config.toml",
      "should_trigger": true
    },
    {
      "query": "host key mismatch TOFU what flag replaces known_hosts after human approval",
      "should_trigger": true
    },
    {
      "query": "vps doctor shows wrong path, i need XDG config path and export redacted hosts",
      "should_trigger": true
    },
    {
      "query": "su-exec one-shot to become root because sudo is disabled on this box",
      "should_trigger": true
    },
    {
      "query": "password-stdin for vps add, dual max_command_chars max_output_chars for agent commands",
      "should_trigger": true
    },
    {
      "query": "health-check with optional timeout override and parse only stdout json",
      "should_trigger": true
    },
    {
      "query": "vps list json password is null for key-only host and masked for password hosts",
      "should_trigger": true
    },
    {
      "query": "ssh-cli stderr is noisy with INFO by default how do agents keep logs clean",
      "should_trigger": true
    },
    {
      "query": "use quiet mode and key-passphrase-stdin so argv never holds secrets",
      "should_trigger": true
    },
    {
      "query": "parse stderr error envelope exit_code message remote_exit_code after failed exec",
      "should_trigger": true
    },
    {
      "query": "vps add nonstandard ssh port 2222 with --check then connect active host",
      "should_trigger": true
    },
    {
      "query": "scp download with password-stdin or key-passphrase-stdin without argv secrets",
      "should_trigger": true
    },
    {
      "query": "vps export redacted empty password must stay empty string never sshcli-enc blob",
      "should_trigger": true
    },
    {
      "query": "tunnel post-bind deadline after tunnel_listening must exit 0 not 74",
      "should_trigger": true
    },
    {
      "query": "tunnel with password-stdin and key-passphrase-stdin auth overrides",
      "should_trigger": true
    },
    {
      "query": "health-check with password-stdin key and key-passphrase-stdin overrides",
      "should_trigger": true
    },
    {
      "query": "health-check replace-host-key after human approval of host key mismatch",
      "should_trigger": true
    },
    {
      "query": "scp json success must include event scp-transfer discriminator",
      "should_trigger": true
    },
    {
      "query": "tunnel pre-bind timeout still exit 74 before listening",
      "should_trigger": true
    },
    {
      "query": "vps export default body is TOML even on pipe non-TTY use --json only for event vps-export",
      "should_trigger": true
    },
    {
      "query": "import hosts from TOML EN keys PT aliases or JSON vps-export schema v3 with allow-incomplete",
      "should_trigger": true
    },
    {
      "query": "include-secrets must use --output or --i-understand-secrets-on-stdout never raw pipe",
      "should_trigger": true
    },
    {
      "query": "secrets init --json secrets-reencrypt and flags --allow-plaintext-secrets --secrets-key-file --use-keyring",
      "should_trigger": true
    },
    {
      "query": "tunnel --bind default 127.0.0.1 never expose 0.0.0.0 without security decision",
      "should_trigger": true
    },
    {
      "query": "scp remote missing exit 66 file not found path invalid import TOML exit 65 auth exit 77",
      "should_trigger": true
    },
    {
      "query": "CRUD json events vps-added vps-edited vps-removed vps-connected vps-import emit_success",
      "should_trigger": true
    },
    {
      "query": "empty remote command fails with message empty command and exit 64",
      "should_trigger": true
    },
    {
      "query": "timeout under 1000 ms emits stderr warning unit is milliseconds not seconds",
      "should_trigger": true
    },
    {
      "query": "password-like values on argv emit stderr warning prefer --*-stdin",
      "should_trigger": true
    },
    {
      "query": "secrets use primary-key term not master-key; keyring still reads legacy secrets-master-key alias only",
      "should_trigger": true
    },
    {
      "query": "vps doctor --json secrets_plaintext_opt_out is boolean not string",
      "should_trigger": true
    },
    {
      "query": "import hosts without added_at still works serde default now",
      "should_trigger": true
    },
    {
      "query": "write a react component that fetches weather from a public api",
      "should_trigger": false
    },
    {
      "query": "refactor this rust crate to use async postgres with sqlx",
      "should_trigger": false
    },
    {
      "query": "how do i center a div with css grid",
      "should_trigger": false
    },
    {
      "query": "generate a powerpoint pitch deck for our fundraising round",
      "should_trigger": false
    },
    {
      "query": "summarize this pdf invoice into a table",
      "should_trigger": false
    },
    {
      "query": "tune postgres vacuum settings for a 200gb table",
      "should_trigger": false
    },
    {
      "query": "create a github actions matrix for linux macos windows rust builds",
      "should_trigger": false
    },
    {
      "query": "translate this marketing landing page into spanish",
      "should_trigger": false
    },
    {
      "query": "plot sales csv columns with a line chart in a spreadsheet",
      "should_trigger": false
    },
    {
      "query": "debug why my local next.js hot reload is broken",
      "should_trigger": false
    }
  ]
}