Self-hosted · single binary · your metal

Every server.
One desktop.

helvi.sh is a web desktop for your SSH fleet. Open a browser and get real windows: live terminals you can share, dual-pane file transfers between hosts, system monitors, container and service managers — with access control, two-factor auth and a full audit trail underneath. It ships as one Go binary with an embedded UI and a single SQLite file. No agents on your servers, no SaaS in the middle.

curl -fsSL https://get.helvi.sh | sudo bash
  • Single Go binary
  • SQLite — no external database
  • ~30 MB container image
  • Local accounts + OIDC SSO
The helvi.sh desktop: a live SSH terminal with linked file panel, and a system monitor window
Open an endpoint, work in a live terminal, drag a backup between hosts — a helvi.sh desktop in motion.

A real desktop, not tabs

Windows you drag, resize, minimize and restore — with a taskbar, a ⌘K launcher, folders and wallpapers. Your layout is saved per user and restored on sign-in.

Nothing to install on servers

helvi.sh talks plain SSH and SFTP to your endpoints. If you can ssh to it, you can manage it — no agents, no daemons, no firewall gymnastics.

Ops-grade underneath

Every credential is sealed in an encrypted vault, every session can be recorded, and every action lands in the audit log. Admins bypass nothing they can't see.

Everything your fleet needs,
in one place

Every tool opens as a window on the same desktop, against the same endpoints, under the same permissions.

Live terminals

Full xterm sessions over WebSocket with scrollback replay. Reconnect from anywhere — the PTY keeps running on the server.

Dual-pane file manager

Browse two endpoints side by side and drag files across — host-to-host transfers stream server-side through a queued SFTP pipeline.

System monitor

Live CPU, memory, network and storage sparklines per host, streamed over the same SSH connection. No exporters to deploy.

Containers & services

Manage Docker containers and systemd units from purpose-built windows — status, logs, restart — without leaving the desktop.

Run everywhere

One-shot commands and saved playbooks fanned out across many hosts at once, with per-host output collected as it lands.

Port forwards

Point-and-click SSH tunnels: expose a database or an internal dashboard through any endpoint, and tear it down just as fast.

Session recording

Terminal sessions record to asciicast — searchable, replayable in the built-in player, stored in your database and nowhere else.

Encrypted key vault

SSH keys and agent credentials are sealed with age (X25519) under a key that never leaves your box. Write-only from the API.

Groups & grants

Members see only the endpoint folders they're granted — connect, read files, write files — enforced in the API, not just hidden in the UI.

2FA & lock screen

TOTP apps, email or SMS codes, backup codes — optional or enforced org-wide. Plus a PIN lock screen with auto-lock on idle.

Audit log

Sign-ins, connections, transfers, admin changes, every agent command — timestamped, attributed, queryable from the Audit window.

Pinned web apps

Pin Grafana, your NAS, an internal wiki — any http(s) panel — as sandboxed desktop windows next to your terminals.

Debug together,
hand off the keyboard

Share a live session with a teammate and both of you see the same terminal, byte for byte. One person types at a time — control passes with an explicit hand-off, so there's never two cursors fighting over one shell.

Need eyes from outside? Mint a public view-only link: watchers see output in real time but can't type, can't browse, and the link dies the moment you revoke it or the session ends.

  • Multi-participant shared sessions with single-controller input
  • Meet-style control hand-off between participants
  • Public view-only streams by revocable token
  • Everything lands in the recording, including who did what

Put an AI agent
in the session with you

Attach a Claude-powered agent to any live session from its chat panel. It works through the same PTY you're watching: every command it runs is echoed in the terminal with a visible agent banner, captured in the recording, and written to the audit log.

The agent runs in a container on your helvi server, reaches the endpoint only through the session it's attached to, and its credentials are sealed in the vault. No side channels — if it isn't on your screen, it didn't happen.

  • Claude Code or a lightweight Messages-API tool loop
  • Commands visibly injected into the shared terminal
  • Every exec audited; chat history kept per session
  • One agent can assist across many sessions at once

Built like the bastion
it replaces

helvi.sh sits between your team and production — so its own posture is the whole product.

Identity

Local accounts with argon2id hashing, or single sign-on against any OIDC provider — Okta, Entra, Keycloak, Google. Sessions are opaque and server-side, never JWTs in localStorage.

Second factor

Authenticator apps (TOTP), email and SMS codes, single-use backup codes. Make 2FA optional, required for admins, or required for everyone — enforcement happens before the desktop loads.

Least privilege

Grants are (user or group) × endpoint folder × capability: connect, read files, write files. What isn't granted isn't just hidden — the API refuses it.

Secrets

Private keys and agent credentials are envelope-encrypted with age (X25519) under a boot-sealed master key. The first-run wizard makes you back it up, then never shows it again.

Accountability

Session recordings plus an append-style audit log: who signed in, who connected where, who moved which file, what every agent executed. Attribution survives shared sessions.

Small surface

One static binary, one SQLite file, no runtime dependencies to patch. Ship it behind Caddy or Traefik, health-check /healthz, done.

Install today.
Desktop in two minutes.

One Linux box is all it takes. Your data never leaves it.

curl -fsSL https://get.helvi.sh | sudo bash

Installs Docker if missing (it asks first), generates the vault passphrase into root-only /etc/helvi/helvi.env, and starts the container. Idempotent — rerun the same command any time to upgrade; your data and settings survive.

docker run -d --name helvi --restart unless-stopped \
  -p 8080:8080 -v helvi-data:/var/lib/helvi \
  snaju/helvi

A ~30 MB Alpine image running as non-root. Everything — database, vault, recordings — lives in the /var/lib/helvi volume. Front it with Caddy or Traefik for TLS.

make all                          # embedded UI + static binary → bin/helvi
sudo cp bin/helvi /usr/local/bin/
sudo systemctl enable --now helvi # unit file ships in deploy/

Go ≥ 1.23 and Node ≥ 18 build the whole thing. The result is a single static binary — CGO-free, SQLite embedded — that runs anywhere Linux does.

  1. Run the installer on any Linux box with Docker — a VM, a NUC in the closet, that spare Pi-sized server.
  2. Open the wizard. First visit walks you through system checks, backing up your encryption key, and creating your org and admin account — with optional 2FA on the spot.
  3. Add your endpoints. Import SSH keys, point helvi at your hosts, grant your team access — and hand everyone a desktop.

Your fleet is one command away
from having a desktop.

curl -fsSL https://get.helvi.sh | sudo bash