sshboard

You and your AI agent, on one SSH session.

Alpha … macOS (Apple Silicon) Windows x64 / ARM64 11 languages MIT

Most agent tooling gives a model a run_command(cmd) hole and lets it work somewhere you aren't looking. sshboard does the opposite: the agent and you hold the same SSH connection, and everything it does lands on a screen you are sitting in front of. There is no second, invisible session.

Download

macOS

Apple Silicon

Download

Windows

x64 · installer (NSIS)

Download

Windows (ARM64)

arm64 · installer (NSIS)

Download

Windows (MSI)

If your organisation deploys by MSI

Download

Windows (MSI · ARM64)

If your organisation deploys by MSI

Download

Source

Tauri 2 · SvelteKit · Rust

GitHub pnpm install && pnpm --filter desktop tauri dev
It is not code-signed. Windows SmartScreen and macOS Gatekeeper will both stop you the first time. On Windows: More info → Run anyway. On macOS: right-click the app → Open. This is a tool that handles keys, and we know the first thing it teaches you is to dismiss a warning — signing goes in once someone is actually hurt by its absence, and saying so in an issue is what decides that.

Installing on macOS

Open the .dmg and drag sshboard into Applications. The .app.tar.gz sitting next to it in the release is what the auto-updater consumes — you don't need it.

Then open it from Finder with right-click → Open the first time.

Installing on Windows

Run the -setup.exe. Windows needs WebView2; Windows 11 and recent 10 already have it, and if not the installer fetches it — so the first install needs a network connection.

What you are looking at

One window, five tabs. These were taken against a made-up configuration — every screenshot of this product would otherwise carry somebody's hostname, username and paths. The three servers below do not exist; they point at a throwaway container on the machine that took the shots.

sshboard — Connections
Connections
sshboard — Files
Files
sshboard — Console
Console
sshboard — Activity
Activity
sshboard — Log
Log
Tab What it holds
Connections The servers you registered, and the button that opens one. Credentials live in the OS credential store and ssh-agent, never here.
Files Two panes: the server on one side, your machine on the other. Upload, download, make a directory. The agent is fenced to directories you listed; you are not.
Console A real terminal on the same SSH connection — shared with the agent. While the agent holds it your input is locked out and a Stop button is showing. It never opens a second session you can't see.
Activity Who did what. One line per operation, tagged [Human] or [AI], in the order it happened. This is the tab you read to answer "what has the agent been doing?"
Log Why something failed. Connection stages, errors, and what to do about them. This is the tab you read when something did not work — and the one to copy from when you file an issue.
Activity and Log are not the same thing, and the names do not make that obvious enough yet. Activity is a record of actions — it answers who did what. Log is a record of diagnosis — it answers why it failed. If you are trying to find out what the agent ran, you want Activity. If you are trying to find out why a connection would not open, you want Log.

How you use it

  1. Register a server. Connections tab → add one. You give it an id, a name, a host and a user. The passphrase or password is never stored by sshboard — it goes to the OS credential store, or you leave it to ssh-agent.
  2. Open it. It becomes a tab. Several can be open at once, and every one of them is visible. If a key needs a passphrase, the question appears on your screen — the agent cannot answer it.
  3. Work in Files or Console. Both run over that same connection. Nothing the agent does happens on a different one.
  4. Point your agent at it (below). Ask it to look at something. What it runs appears in Activity as it happens, and its output appears in the same Console you are watching.
  5. Approve what changes things. Reading is fenced by an allow-list you wrote. Anything that changes state is refused the first time and shown to you in full before it can run — and the approval is good for one run, for five minutes.
Out of the box the agent can do nothing at all. The read-only allow-list starts empty, the write directories start empty, and the list of state-changing operations starts empty. That is not a missing setup step — it is the design. You widen it as far as you actually need, one line at a time.

What the agent can do

tools over MCP. These are the exact descriptions the agent reads, so they are shown in English as it sees them. Note what is not here: there is no tool that takes an arbitrary command string, and no tool that downloads to your machine.

Where it actually is right now

The features are in. The interface is not finished. sshboard is being used against a real production server, and the whole visible issue list came out of that use — but it has not had a design pass yet, and it shows. If you are looking for something polished, this is not it yet. If you are looking for something whose safety model you can read end to end, it is ready for you to argue with.

Working Not yet
One shared SSH session (GUI + agent)
35 MCP tools
Read-only commands from an allow-list
Approved state-changing operations
sudo with a password nobody stores
Terminal shared with a stop button
Auto-update
A design pass on the UI
Code signing
ssh-agent on Windows (named pipe / Pageant) — unverified
Intel macOS / Linux builds
Tests that render the screen itself

The fence

These are constraints on the code, not advice in a prompt. They hold whether or not the model cooperates.

Connect your agent

Point your agent at the running app. This form starts sshboard as a relay with no window, so the token is never written to disk — not into ~/.claude.json, not into your shell history.

# macOS
claude mcp add sshboard -- /Applications/sshboard.app/Contents/MacOS/sshboard --mcp-stdio-proxy

# Windows
claude mcp add sshboard -- "%LOCALAPPDATA%\\sshboard\\sshboard.exe" --mcp-stdio-proxy

The relay holds no engine and opens no connection of its own — only the app does, which is the point. It is a one-time step: the port is fixed at 22022 and the token is reused, so restarting does not make you register again. If the port is taken it says so on screen rather than quietly moving. (There is a plain HTTP form too, but that one leaves the token in a file — the window has a button that copies it if you want it.)

Ask it about_sshboard first — the tool exists so an agent can find out what this is, what it may and may not do, and what changed in each version, without you pasting a briefing.

Pair it with dbboard and the deploy is yours

Plenty of systems are still released by hand: someone opens an SSH session, copies the files up, then opens a database client and runs the migration. There is no pipeline to hand an agent, and building one is its own project — a runner, a hosted service, credentials sitting in someone else's vault.

Two desktop apps cover both halves. sshboard puts the files where they go; dbboard runs what has to run against the database. The agent does the steps and you are in the room for all of them, on both sides — no CI service, no deploy platform, no secrets uploaded anywhere.

sshboard — the server half

Upload into directories you listed. Run commands from a list you wrote. Take the terminal back at any time. No run_command hole, and no tool that reaches back down to your own machine.

dbboard — the database half

Nine engines, from MySQL and PostgreSQL to Turso, D1 and Firestore. Read-only until you opt a connection in, and even then grants, role DDL, TRUNCATE and DROP are refused whatever you set.

Get dbboard
Neither is a way to leave an agent running unattended. What gets automated is the work, not the watching — that is the whole point of running it on your desk instead of in someone's cloud.

There is a third one, warifu, for a different question: several people and several agents in one conversation, peer to peer, with no central account. It is not part of the deploy story.

What it will not become