Skip to content
kaiport

Security in the desktop app

How kaiport encrypts credentials with the system keychain, locks with a password or Touch ID, checks host keys, logs AI actions and where it keeps your data.

kaiport holds the keys to your servers, so it protects them on several levels: credentials are encrypted with the keychain of your system, the app can lock itself, SSH host keys are checked, and AI Pilot asks before it acts. This page describes these safeguards, where kaiport keeps its data and which connections the app makes.

Credentials in the system keychain

kaiport encrypts every secret before it writes it to disk, with the keychain of your operating system (through Electron's safeStorage):

SystemEncryption
macOSKeychain, entry “kaiport Safe Storage”
WindowsDPAPI, tied to your Windows user account
LinuxSecret Service (libsecret), for example with GNOME Keyring or KWallet

These secrets are encrypted this way:

  • passwords and key passphrases of your connections
  • private keys you imported into a connection
  • the secret access keys and access keys of storage connections
  • the API token of your AI provider
  • the token of the MCP server

The secrets stay in the main process of the app. The windows only learn whether a password is stored, never the password itself. When kaiport asks for a password while connecting, you can store it with Store encrypted for this connection.

Check the encryption

Settings → About → Encryption shows the state:

  • “System keychain (safeStorage)”: everything is encrypted as described.
  • “Not available – secrets are only encoded”: kaiport found no usable keychain. The app keeps working, but stores secrets only encoded, not encrypted, so anyone who can read your data folder can read them. This can happen on Linux when no Secret Service provider such as GNOME Keyring or KWallet is running. Set one up and restart kaiport, then enter your stored passwords again so they are saved encrypted.

SSH keys in the encrypted vault

When you pick a private key with Choose in the connection dialog, kaiport reads the key file and stores its content encrypted in its vault. The path is kept for display only, so the connection keeps working when you move the file. OpenSSH, PEM and PuTTY (.ppk) keys are supported. A connection that only refers to a key file, for example after an import, reads the file from disk each time it connects. The Mac App Store version always imports the key into the app. See SSH connections.

App lock

The app lock hides kaiport behind a lock screen until you unlock it with your password or, on a Mac, with Touch ID.

Turn on the app lock

  1. Open Settings → Security.
  2. Enter a password in Unlock password and click Save.
  3. Turn on App lock.
  4. In Lock after (minutes), set after how many idle minutes kaiport locks.
Settings: Security and Known hosts
Settings with the Security section – app lock, lock time and unlock password – and the list of known hosts below itSettings with the Security section – app lock, lock time and unlock password – and the list of known hosts below it

Settings: Security and Known hosts

The unlock password belongs to this computer only. kaiport stores just a hash of it (scrypt with a random salt), and it is not sent anywhere.

When kaiport locks

With the app lock on, kaiport locks:

  • when it starts
  • when the computer goes to sleep
  • when the screen of the computer locks
  • when the computer has been idle, with no keyboard or mouse input, for the minutes set in Lock after (minutes); 0 turns this off
  • when you press ⌘LCtrlL (File → Lock kaiport)

⌘LCtrlL only works while the app lock is on. On Windows and Linux, a terminal passes CtrlL to the shell, so press it in the start window instead.

The lock screen

The lock screen shows “kaiport is locked” and covers the start window and all terminal windows. Your sessions keep running behind it.

  • On a Mac with Touch ID, kaiport asks for your fingerprint right away. Unlock with Touch ID asks again.
  • Otherwise, enter your password and click Unlock. A wrong password shows “Wrong password.”
The lock screen
The kaiport lock screen with the password field and the Unlock buttonThe kaiport lock screen with the password field and the Unlock button

The lock screen

Host key verification

When kaiport connects to an SSH server, it checks the host key of the server, much like ssh does with known_hosts:

  • First connection: the dialog Unknown host shows the key type and the SHA256 fingerprint. Compare it with the fingerprint of the server, for example from ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub on the server, then click Trust. kaiport stores the key.
  • Later connections: if the key matches, kaiport connects without asking.
  • Changed key: the warning Host key has changed shows the new and the stored fingerprint. A changed key may mean a man-in-the-middle attack, or that the server was reinstalled. Cancel stops the connection; click Accept new key only if you know why the key changed.

Known hosts

Settings → Known hosts lists every trusted key with its host, key type and fingerprint. Forget removes an entry, and the next connection asks again. kaiport keeps these keys in its own file, separate from ~/.ssh/known_hosts, so you confirm each server once per computer.

AI Pilot safeguards

AI Pilot works inside your sessions, so it is built to ask first:

  • You approve every command with Run or Deny, unless you turn on Autopilot.
  • With Autopilot on, potentially dangerous commands still ask.
  • Per connection, you can deny commands by pattern or allow only certain ones; this applies in Autopilot too.
  • On FTP, S3, WebDAV and Azure connections, deleting, renaming and overwriting always ask.
  • AI Pilot never asks for passwords in the chat; for sudo, you type the password in the terminal.
  • File contents go only to the provider you set up, and you can stop sending them in Settings → AI Pilot.

Details are in Approvals and safety and Context, tokens and privacy.

Audit log

kaiport writes everything AI Pilot runs or tries to run to a local audit log: the command, the decision, the host, the time, the exit code and the files it touched. Open it with Settings → AI Pilot → AI audit log → View log; it shows the latest 300 entries. Each entry is marked Approved, Autopilot, Denied, Blocked or Error. Show file opens the log file ai-audit.jsonl, which has one JSON object per line. The log stays on your computer.

No telemetry

kaiport sends no usage data and no crash reports. The app only connects to:

  • your servers and storage services
  • the AI provider you set up, when you use AI Pilot
  • get.kaiport.dev, to check for updates and load the changelog – only the download from kaiport.dev; the store versions are updated by their store and don't make this request

kaiport has no account and no kaiport service it talks to. In the Mac App Store version, kaiport asks the App Store on your Mac whether kaiport Pro is active; Apple processes the purchase, and nothing about it is sent to us.

Isolated windows

The app windows run sandboxed with context isolation, without access to Node.js and under a strict Content Security Policy, and links open in your browser instead of the app.

Where your data is stored

kaiport keeps its data in a folder of your user account:

SystemData folder
macOS~/Library/Application Support/kaiport
Windows%APPDATA%\kaiport
Linux~/.config/kaiport

Settings → About → Data shows the exact path. On macOS, Help → Open Data Folder (settings, logs) in the menu bar opens the folder.

FileContents
connections.jsonYour connections; passwords, passphrases and keys encrypted with the system keychain
settings.jsonYour settings; the AI API token encrypted, the unlock password only as a hash
known_hosts.jsonTrusted SSH host keys
chats.jsonAI Pilot chats
command-history.jsonThe commands you typed, per connection, for the command palette
ai-audit.jsonlThe AI audit log
session.jsonOpen windows and tabs, for Restore session
kaiport.logError log

Report a vulnerability

If you find a security problem, please tell us privately by email; the address is on the contact page. We answer quickly and credit responsible reports.