The problem with "just use the terminal"
Managing one server from a terminal is fine. Managing fifteen is a different job.
You end up with a browser-tab problem, except it's terminal tabs. The commands you run monthly live in a notes file, and half of them have a hostname or path you have to remember to swap out. The cleanup job you set up last quarter is a cron entry on a box you no longer think about. When disk fills at 2am, nothing tells you.
None of that is hard. It's just scattered, and the scattering is what costs you.
SelfCmd puts it in one window: connections, reusable commands, schedules, multi-step workflows, and resource monitoring. It runs entirely on your own machine.
What it actually does
Connections. Save hosts with groups and tags. Import existing sessions from Xshell, MobaXterm, FinalShell, SecureCRT, PuTTY or ~/.ssh/config, so switching clients takes seconds rather than an evening. Reach private hosts through a bastion with jump-host (ProxyJump) support, password or key on each hop. Open an interactive terminal or browse files over SFTP straight from a connection. Passwords are encrypted at rest with Fernet (AES-128-CBC + HMAC-SHA256); the key stays local.
Command library. Turn the commands you actually repeat into one-click buttons,grouped and tagged, with a "most used" view ranked by how often you run them.
Parameterize with {{variables}} that expand in commands, tasks, workflows and SFTP paths alike. The editor highlights shell syntax and previews the fully expanded command before it runs. Destructive commands (rm -rf, mkfs, dd) ask a second
time.
Scheduled tasks. One-off at a set moment, or repeating from seconds to hours, on a remote host or locally. Attach result checks so a job that "ran" but failed gets flagged. Pause and resume individual tasks, and keep a per-task output log. No cron syntax, no forgetting which box owns the job.
Workflows. Chain commands and SFTP transfers into a run you can repeat: pull code, upload config, restart the service, health-check. Sequential or parallel,per-step timeout, retry and stop-on-failure, and you can pass one step's output into the next. Export a workflow as JSON to share or version it.
Resource monitor. Track CPU, memory, disk usage, disk I/O, network bandwidth and SSD/NVMe disk life (SMART wear) against your own thresholds, with a hold duration so a brief spike doesn't page you. One host is one row with as many metrics as you want on it. Alerts are non-blocking toasts plus optional throttled email, and you get a recovery notice too.
Toolbox. Ping, port probing, LAN MAC lookup, SFTP/FTP transfer, a serial(COM-port) console for switches and embedded boards, and the small utilities you otherwise open a browser tab for: timestamp/epoch conversion, cron expression helper, JSON/YAML formatting, base conversion, checksums, text compare.
The two things that make it different
It runs offline, and it means it. No account to create. No telemetry. Your credentials, logs and server list never leave your machine, and the app doesn't phone home. Pro licenses activate offline and bind to the device. If our website went down tomorrow, your install would keep working exactly as before.
Your AI agent can drive it, without holding your credentials. SelfCmd ships a Model Context Protocol server, so Claude Desktop, Cursor or Kiro can list and run your saved commands, tasks and workflows, read metrics, tail logs and inspect remote files. It runs locally over stdio and reuses connections you already saved, so the model never sees a password.
The safety model is the point. Read-only tools work out of the box. Anything that changes state is off by default and needs an explicit opt-in, then a two-step confirmation with a native desktop prompt. Connections carry per-connection access tiers, dangerous commands and sensitive paths get screened, and every call lands in an audit log. An agent gets a set of reviewed operations, not a blank shell.
There's also an in-app assistant if you'd rather not wire up an agent: describe what you want in plain language, review the command it proposes, then run it on a connection you pick. Nothing executes without you looking at it first. When something fails, one click asks it to explain why.
Recent work (2.3.x)
The last round was mostly about fleets rather than single hosts.
One command can now target many hosts at once — scheduled tasks and the command library both take multiple connections and report a single combined summary. If a one-off task partially fails, retrying only re-runs the hosts that failed, so a server that already rebooted doesn't get rebooted twice. SFTP tasks got the same treatment in a dedicated window: one row per server, adjustable concurrency, a live queue and cancel.
Host availability also comes from one shared source now, so every connection picker agrees on who's online. Selectors probe in the background the moment they open, which means the "online only" filter is accurate without running "Test all" first.
Getting it
Windows 10/11 (64-bit), macOS 12+ (separate Apple Silicon and Intel builds), and
Linux x86_64 as a portable tar.gz (glibc 2.35+, so Ubuntu 22.04 and newer).
Starter is free, with limits that suit one person: 5 connections, 10 scheduled tasks, 30 library commands, 10 workflows and 10 monitors.
Download: https://selfcmd.com
If you try it, I'd genuinely like to hear where it gets in your way — especially the MCP piece, which is the newest and least battle-tested part.
Top comments (0)