Look at the header: Reattached. That session was opened in a
different browser and the tab was closed — this is the same process on the
same host, picked back up where it was.
## Features
- **Persistent sessions.** Your SSH session lives on the server, not in the
browser tab. Close the tab, lose your wifi, switch devices — reopen the host
and you're reattached exactly where you left off, with recent scrollback
replayed. Idle sessions are cleaned up automatically. No tmux required on the
target host.
- **Session recording & playback.** Optionally record every terminal session to
disk in the open [asciicast](https://docs.asciinema.org/manual/asciicast/v2/)
format and replay it later from the Recordings page. On by default in team
mode (admins can review any member's sessions), off by default for personal
use. Toggle it in Settings.
- **Memory.** Skiff remembers what happened on your servers, with nothing
installed on them. Captured commands from a Skiff session are saved
(encrypted) with its output, searchable per host from the terminal's History
drawer and across all hosts from the Memory page. When a command edits a
file (an editor, `sed -i`, `tee`, a redirect, `cp`/`mv`), Skiff reads the file
over SFTP before and after and keeps the diff plus both versions. Optional
extras, each switched on per host: **Precise mode** (exact commands and exit
codes for bash, zsh and fish), and **Server snapshots** (a short read-only
check at connect that flags changes nobody made through Skiff). Each host
also gets a living **note** (Pin any entry to it) and there is a **snippet**
library (Run types a command into the terminal; you press Enter). You can
pause Memory in a session, turn it off per host or for the whole vault, and
Forget any entry. See [SECURITY.md](SECURITY.md#memory) for exactly what is
stored and how.
- **Encrypted credential vault.** AES-256-GCM at rest, key derived from your
master password with argon2id (OWASP params). The key lives in memory while
you're unlocked and gets zeroed on lock or idle timeout. The password itself
is never stored — only an HMAC verifier so we can tell you "wrong password"
without having to decrypt anything.
- **In-browser terminal.** xterm.js over a WebSocket. Real SSH session, no fake
shell.
- **Team mode (optional).** Run the vault for a group instead of one person.
Multiple user accounts, each with their own login, sharing one encrypted
vault. Admins add members, reset passwords, and disable accounts; every
privileged action — logins, connections, host changes — is recorded in an
audit log. A personal vault can be upgraded to a team vault in place without
touching your existing hosts. Fully self-hosted; no cloud, no external
identity provider.
- Folders, favorites, search. Search hits labels, hostnames, and usernames.
- Imports your `~/.ssh/config`. Parses `Host`, `HostName`, `Port`, `User`,
`IdentityFile`. Doesn't handle `Include` directives yet (see Known issues).
- SSH host fingerprint pinning. First connect saves it; mismatches block the
connection.
- Auto-lock on idle. Configurable, defaults to 15 minutes.
- Dark / light themes.
- Single `docker compose` command to deploy. SQLite, so no separate database to
run.
## Team mode
By default Skiff is a personal vault: one master password, one user. If you're running it for a group, you can use **team mode** instead.
In team mode there's still exactly one encrypted vault, but multiple people have their own accounts to unlock it:
- **Per-user logins.** Each member signs in with a username and their own password. Behind the scenes the vault has a single shared encryption key; each user keeps their own copy of it, sealed with a key derived from their password. Any member can decrypt the shared hosts, but every session is tied to a specific user.
- **Admins.** Admins can add members, reset a member's password, and disable accounts. The first admin is created at setup (or during the personal → team upgrade). Skiff won't let you disable the last remaining admin.
- **Audit log.** Logins, failed logins, host connections (who connected to which host, as which SSH user), and host/user changes are all recorded. Admins review it from the Admin panel.
- **Forgot-password recovery.** Because there's no cloud, a forgotten password can't be auto-recovered — but an admin can issue a new temporary password. No data is lost, because credentials are encrypted with the shared vault key, not any individual's password.
Choose the mode at first-run setup, or upgrade an existing personal vault from **Settings → Team**. The upgrade keeps all your hosts and credentials exactly as they are — your existing vault key simply becomes the shared key, so nothing is re-encrypted. The upgrade is one-way.
What team mode is **not**: it's not full role-based access control. Every member can see and connect to every host in the shared vault — there are no per-host or per-folder permissions, and no read-only role. If you need granular RBAC for a larger organization, that's out of scope for the open-source project.