Terminal
Tabs, GPU-accelerated rendering, TOFU host-key verification, keyboard-interactive 2FA and flow control.
SSH client for teams
ssh-terminal is a desktop SSH client with team workspaces, a client-side encrypted vault and MCP access for Claude. The server only ever sees ciphertext; every agent action is confirmed and audited.
A scripted run through the platform, drawn pixel-for-pixel from the real app: connect to a host, move files, approve an agent command, read the team audit.
per-host allow-level · every action is confirmed and audited
Хост prod-web-01
run_command: $ systemctl restart nginx
One window for the shell, the files, the keys and the secrets — synced across your team without the server ever reading them.
Tabs, GPU-accelerated rendering, TOFU host-key verification, keyboard-interactive 2FA and flow control.
Hosts, SSH key generation and import, snippets, local and remote port forwards.
Browse remote filesystems, upload and download with live transfer progress.
Secrets are encrypted on-device; the vault key is guarded by the macOS Keychain. The server stores ciphertext only.
Share hosts, keys and snippets. The workspace key is sealed to each member's public key — end to end.
Removing a member reissues the workspace key and re-encrypts every secret. The old key becomes useless.
The built-in MCP server lets Claude run commands over SSH on hosts you allow. Nothing happens silently.
Every host carries its own permission level for agent access — from read-only to full shell.
Actions are confirmed before they touch the wire. You see the exact command Claude wants to run.
Every command is logged locally and on the server. The team audit view decrypts command bodies client-side with the workspace key.
Argon2id, XChaCha20-Poly1305 and X25519 sealed boxes. libsodium underneath, nothing exotic on top.
master password ──argon2id──▸ MK
├─ authKey ──▸ server (hashed again server-side)
└─ MUK ──▸ wraps the account private key
VaultKey (random) ──safeStorage / Keychain──▸ vault.key
account X25519 keypair; workspace keys (random) are wrapped:
• onto VaultKey — local offline cache
• onto each member's accPub (sealed box) — for sharing
item secrets encrypted with their workspace key (AAD = itemId|kind)
Verified end-to-end: a second device recovers workspace keys from the master password alone and decrypts shared secrets; Postgres holds only ciphertext; every MCP action leaves an audit record.
Grab the DMG from GitHub Releases, or build from source and plug the agent into Claude Code.
$ pnpm install
$ pnpm dev$ claude mcp add v-term -- npx -y @v-term/mcp$ pnpm --filter @v-term/desktop package # → release/*.dmg