{
  "name": "ssh",
  "kind": "registry",
  "title": "SSH Hosts",
  "description": "The hosts in your ssh config, one Enter from a terminal running ssh. Run a command on a host, copy the ssh command, or ping it.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "glyph": "󰒋",
      "bg": "teal"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/ssh@v0.17.4",
  "source": "https://github.com/zcag/pal-extensions/tree/HEAD/ssh",
  "commit": "4d2559cf9c04d0133c97d7c897f19a14acb9eace",
  "manifest": {
    "name": "ssh",
    "title": "SSH Hosts",
    "description": "The hosts in your ssh config, one Enter from a terminal running ssh. Run a command on a host, copy the ssh command, or ping it.",
    "version": "0.1.0",
    "icon": {
      "tile": {
        "glyph": "󰒋",
        "bg": "teal"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "settings": [
      {
        "kind": "path",
        "id": "config",
        "label": "Config file",
        "description": "The ssh config to read; Include lines in it are followed one level.",
        "pick": "file",
        "default": "~/.ssh/config"
      },
      {
        "kind": "boolean",
        "id": "include_known_hosts",
        "label": "Known hosts",
        "text": "List the names in ~/.ssh/known_hosts too, in a second section",
        "description": "Only hosts you have connected to by name; hashed and numeric entries are skipped.",
        "default": false
      },
      {
        "kind": "select",
        "id": "terminal",
        "label": "Terminal (macOS)",
        "description": "Which terminal Connect opens. Auto picks the first installed of kitty, Ghostty, Alacritty, iTerm2, Terminal. On Linux $TERMINAL, else kitty, foot, alacritty, xterm.",
        "options": [
          {
            "id": "auto",
            "title": "Auto"
          },
          {
            "id": "kitty",
            "title": "kitty"
          },
          {
            "id": "Terminal",
            "title": "Terminal"
          },
          {
            "id": "iTerm2",
            "title": "iTerm2"
          },
          {
            "id": "Ghostty",
            "title": "Ghostty"
          },
          {
            "id": "Alacritty",
            "title": "Alacritty"
          }
        ],
        "default": "auto"
      }
    ],
    "store": {
      "tagline": "Your ssh config's hosts, one Enter from a terminal",
      "category": "developer",
      "features": [
        "Every host in `~/.ssh/config` and its included files, one section per file",
        "Each row says user@address, with the port and the jump host as tags; its detail (`cmd+i`) the same as a page",
        "`enter` opens a terminal running ssh, or runs a command you typed in the bar",
        "`cmd+shift+c` copies the ssh command, `cmd+shift+j` the jump-host form for a machine without your config",
        "`cmd+p` pings the host and shows the round trip",
        "Optionally the hosts from `known_hosts` too"
      ],
      "permissions": [
        "automation"
      ],
      "platforms": [
        "macos",
        "linux"
      ],
      "screenshots": [
        {
          "file": "1-hosts.png",
          "caption": "Hosts sectioned by the file they came from, user@host under each name, the port and a jump host as tags"
        },
        {
          "file": "2-search.png",
          "caption": "From the root, a host's real name finds its alias: example finds the four hosts under example.com"
        },
        {
          "file": "3-actions.png",
          "caption": "Connect on Enter; copy the host, the ssh command or its -J form through the jump host; ping"
        },
        {
          "file": "4-ping.png",
          "caption": "Ping sends one echo and shows the round trip as a toast"
        },
        {
          "file": "5-detail.png",
          "caption": "A host's detail (cmd+I): its name and file on top, the jump host as a chip, the ssh command, then HostName, User and Port"
        }
      ],
      "actions": [
        {
          "title": "Connect",
          "description": "A terminal window running ssh \u003chost\u003e; the bar takes an optional command first (blank: a shell), run over ssh -t and kept open until Enter.",
          "keys": "enter"
        },
        {
          "title": "Copy host",
          "keys": "cmd+c"
        },
        {
          "title": "Copy ssh command",
          "description": "ssh \u003chost\u003e.",
          "keys": "cmd+shift+c"
        },
        {
          "title": "Copy ssh -J command",
          "description": "ssh -J \u003cjump\u003e \u003chost\u003e, on a host with a ProxyJump.",
          "keys": "cmd+shift+j"
        },
        {
          "title": "Ping",
          "description": "One echo to the HostName; the round trip as a toast.",
          "keys": "cmd+p"
        }
      ]
    },
    "palettes": {
      "ssh": {
        "title": "SSH Hosts",
        "tier": "primary",
        "kind": "list",
        "description": "Every Host in your ssh config, and what it connects to.",
        "keys": [
          {
            "keys": "enter",
            "title": "Connect in a terminal (a command typed in the bar runs there; blank is a shell)"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the host name"
          },
          {
            "keys": "cmd+shift+c",
            "title": "Copy the ssh command"
          },
          {
            "keys": "cmd+shift+j",
            "title": "Copy the ssh -J command (a ProxyJump host)"
          },
          {
            "keys": "cmd+p",
            "title": "Ping"
          }
        ]
      }
    }
  },
  "playable": false,
  "updated_at": "2026-11-02T04:38:11Z",
  "url": "https://pal.cagdas.io/extensions/ssh",
  "tagline": "Your ssh config's hosts, one Enter from a terminal",
  "category": "developer",
  "screenshots": [
    "https://pal.cagdas.io/extensions/ssh/screenshots/1-hosts-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/1-hosts.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/2-search-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/2-search.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/3-actions-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/3-actions.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/4-ping-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/4-ping.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/5-detail-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/5-detail.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/ssh/screenshots/1-hosts.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/2-search.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/3-actions.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/4-ping.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/5-detail.png"
  ],
  "bar_screenshots": [],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/ssh/screenshots/1-hosts-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/2-search-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/3-actions-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/4-ping-dark.png",
    "https://pal.cagdas.io/extensions/ssh/screenshots/5-detail-dark.png"
  ],
  "bar_screenshots_dark": [],
  "has_bar": false,
  "bar_items": [],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": true
}
