Security

Security shown, not claimed

Elia runs autonomous LLM processes that touch your accounts. That is a real threat surface, so the gate sits in front of every request that needs it — and the design is written down, not just asserted on a landing page.

Identity

Per-user accounts with Argon2id password hashing. Short-lived JWT access tokens plus rotating refresh tokens, and a server-side session registry so any session can be revoked.

Authorization

Every route validates ownership of the resource it touches. The tenant id is derived from the session token — never from the request body or query string.

Secret isolation

Secrets are scoped per account and encrypted at rest (AES-256-GCM). System credentials never reach subprocesses; tool credentials are injected per worker.

Request hardening

CSRF protection on cookie flows, a strict CORS allow-list of first-party origins, per-user and per-IP rate limits, and brute-force lockout on login.

Agent containment

Shell execution runs inside a kernel-level sandbox. Worker output is scrubbed of secrets, and the browser tool blocks SSRF against metadata endpoints and private IPs.

Auditability

An append-only audit log records auth events, permission changes, every agent run, every tool call and every approval — keyed per user.

Per-user isolation, in practice

Each account gets its own workspace: its own agents, channels, tasks, skills, memory graph, cron jobs, secrets and run history. Isolation is physical — a separate workspace directory — rather than a column that every query must remember to filter.

One workspace per user

Own SQLite, vector store and key-value store per account. The strongest and simplest-to-audit model.

No cross-tenant reads

The data layer enforces the boundary. A direct request for another user's resource returns 403, not a filtered list.

Verifiable

Isolation is asserted by automated tests with two accounts, not by a marketing sentence.

Audit log

Every account has an activity record — signups and logins, agent creation and runs, task creation, session revocations. It is queryable from the dashboard and scoped to your tenant.