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.