LOCAL-FIRST SECURITY ARCHITECTURE

Make it clear who can access credentials and execute operations.

Runory encodes security boundaries in its architecture: React is the interaction layer and Rust is the infrastructure engine. SSH, TCP, jump hosts and tunnels, credentials, key parsing, host verification, remote files and process execution never belong to the frontend.

01

CredentialsLocal Vault only

02

ConnectionsMandatory host checks

03

PermissionsBusiness-specific IPC

01

Secrets never enter host profiles

ServerProfile never stores a password, passphrase, private-key content or vault master secret.

02

Unknown and changed are different

You may temporarily or permanently trust an unknown host; a changed known-host key blocks the connection; both ends of a jump path are verified.

03

Remote content is untrusted

Remote files, terminal output, HTTP bodies and MCP output are all treated as untrusted data.

01

Credential lifecycles stay inside the Rust Core

CredentialService stores credentials through CredentialVault. The interface has no API for reading a remembered password in plaintext; transient secrets are submitted once for the current operation. Logs may include profile and session IDs, host, port and stable error codes, but never passwords, passphrases, keys or vault secrets.

Private keys support both File and Vault concepts. Desktop can reference a file, while mobile uses an opaque ID for an imported key instead of inheriting assumptions about desktop filesystem paths.

02

Server identity must be checked

Runory exposes no accept-all, skip-verification or StrictHostKeyChecking=no shortcut. Unknown hosts require Trust Once, Trust & Remember or Cancel; changed keys block the connection. Jump hosts and tunnels reuse the same authentication and verification boundaries instead of opening a bypass.

Verification lives in KnownHostService inside Rust rather than relying on whether the frontend happens to show a warning correctly.

03

Approval, verification and audit reinforce each other

AI approval binds an exact command and session. Structured high-risk operations bind a ChangeSet version and require Verification. ChangeSet, Incident and Audit persistence retains only necessary content-free metadata; restarts invalidate old approval and never resume writes automatically.

Tauri uses least privilege and business-specific Commands. Terminal output travels over a Channel to xterm, avoiding generic event broadcasts, React state and persistence.

Frequently asked questions

Security architecture

Can the web portal read my server inventory?+

No. Optional sync stores a locally encrypted inventory copy, and the web portal does not decrypt it.

Does Runory record terminal output?+

No. Terminal output is not persisted; the raw stream travels through a Tauri Channel to xterm.

Can a plugin or Skill raise its own permissions?+

No. Skills, MCP and models remain subject to the same Tool Registry, Policy and approval boundaries.