Maintaining an old VPS with an AI agent goes like this, every time:
AI: I can't see the server. Could you show me the service status?
You: (opens a terminal, runs it, pastes)
AI: Thanks. Now the config file, please.
You: (opens an SFTP client, downloads it, pastes)
The obvious fix is to give the agent a shell. The obvious problem is that a shell does everything, out of sight, and you find out what it did afterwards.
sshboard is an open-source desktop app built for the space in between. You and the agent look at the same server, on the same screen, over one SSH connection — and everything the agent does scrolls past in your window as it happens.
The one idea: there is no run_command
sshboard speaks MCP, so Claude Code (or any MCP client) can use it. What it does not have is a tool that takes an arbitrary string and runs it in a shell. Instead the agent gets:
-
Tools for looking: list a directory, read a file,
stat, search, disk usage, processes, listening ports, service status, log tails, runtime versions - Commands you allow-listed — a file you write, by id. Empty by default, so nothing runs until you write it
-
Operations you listed that change state (
systemctl reload nginx,pm2 restart …) — by id only, with an hourly ceiling, and each run asks you first on screen. If the command starts withsudoand you set the connection to ask, a password box appears and the password is passed to that one run and never stored - A shared console — a real shell, but only one side types at a time. You can take it back at any moment, and Stop always works
Every one of those calls is shown in a band on your screen, before it runs. If the screen cannot confirm it showed the line, the call is refused.
The agent writes only where you said it could
Per connection, you list the directories the agent may write to. The default is empty: not one byte. Inside them it can upload files and create directories. Delete, rename, move, chmod, restart services, install packages — those simply do not exist for the agent. You, the person, are not restricted at all.
Things it deliberately keeps from the agent
-
Hostnames, users, keys. The agent sees connection ids like
web-01, never where they point. Credentials stay in your OS keychain and ssh-agent; sshboard has no key store of its own - A second, invisible connection. The app and the agent share the one SSH session you can see
- Your local disk. There is no tool to download from the server to your machine — the fence on the server would not protect it. The agent reads files; you download them
Set it up in Claude Code
Install the app from the releases page (Windows x64 / ARM64, macOS Apple Silicon — not code-signed yet, so SmartScreen and Gatekeeper will ask once). Start it, then:
# macOS
claude mcp add --scope user sshboard -- /Applications/sshboard.app/Contents/MacOS/sshboard --mcp-stdio-proxy
# Windows
claude mcp add --scope user sshboard -- "%LOCALAPPDATA%\sshboard\sshboard.exe" --mcp-stdio-proxy
The relay reads the app's token itself, so it never lands in your shell history or in Claude Code's config. Register connections in the app (or import them from ~/.ssh/config), connect, and ask the agent what is wrong with the mail server.
No server to point it at yet? The repository has a throwaway Docker SSH server: sh tools/test-server/up.sh.
What it is not
Not an autonomous agent that fixes servers while you sleep. Not a replacement for your SSH client or your SFTP client — those stay yours. Not a way to move off the old VPS: the point is that the old setup keeps working, with a second pair of eyes beside you.
Links
- GitHub: https://github.com/meta-taro/sshboard (MIT)
- Site: https://meta-taro.github.io/sshboard/
- Releases: https://github.com/meta-taro/sshboard/releases/latest


Top comments (0)