Operon captures every prompt, response, and decision from your AI coding sessions. That data is sensitive. Here's exactly how we protect it.
By design, Operon keeps your development data local. Cloud sync is strictly opt-in and limited to metadata — never source code.
Everything above stays on your machine forever.
What syncs (metadata only):Events & traces, Tasks & decisions, Token usage stats, Session metadata.
Source code never syncs — ever.
These aren't aspirational policies — every item below is implemented and shipped in the current release.
Team sync is opt-in and strictly scoped. You decide what leaves your machine — and even when it does, source code never travels.
HTTPS/TLS to Supabase — all data encrypted in transit
PostgreSQL with Row Level Security (RLS) — per-user isolation enforced at DB layer on every cloud_* table
Supabase Auth — GitHub/Google OAuth and email/password with CSRF validation
Team membership verified on every query — project-scoped data access
Supabase Realtime via authenticated WebSocket — no polling, no shared channels
Sync uses outbox + conflict resolution — offline-safe with no data loss
SyncEngine only claims sessions from the last 60 seconds on initial sign-in — never claims all NULL-owned local data
Local proj_xxx identifiers translated to cloud UUIDs at sync time — no cross-user identifier collisions
Tool execution records (including inputs/outputs) sync by default. Disable per-project with the sync_code_content setting.
Row Level Security (RLS) is enforced at the Postgres layer on every cloud_*table. No application bug can leak data across users or teams — the DB itself refuses to serve rows that don't match the requesting identity.
auth.uid() against user_id / team_id on every rowOperon's error reporter is wired through a consent store and a Sentry adapter — but neither runs unless you've explicitly opted in. And even then, an env-disable flag overrides consent.
When consent is denied, Operon instantiates a no-op error reporter. No network calls, no Sentry initialization, no background hooks. The code path literally does nothing.
Telemetry requires both user consent AND the absence of OPERON_DISABLE_TELEMETRY=1. Either gate closed = no telemetry. Enterprise installs can hard-disable via env without touching user settings.
Consent grants and revocations are persisted to thetelemetry_consent table with timestamps. Revoke anytime from Settings; the no-op reporter takes over on next app start.
Operon is an Electron app — an attack surface we take seriously. Here's the full list of security controls in the current release.
AI agents are powerful — but unconstrained agents are a liability. Operon's harness enforces boundaries at the OS level, requires explicit approval at every step, and logs everything for audit.
We're explicit about what we keep, where, and for how long.
Stays on your machine forever. You own it — no expiry, no remote deletion. Export to JSON or CSV anytime from the Settings page.
Retained while your account is active. Full deletion on account removal — no ghost records. GDPR-compliant deletion within 30 days.
Scoped to team boundaries. Data removed from team namespace when a member leaves. Team admin can audit and export all team records.
Local SQLite is automatically backed up before schema migrations. Corruption recovery: integrity check, auto-backup, and fresh DB on failure.
Transparency means showing what's built and what's next. These features are scoped, designed, and in the queue.
Encrypt sync payloads with team passphrase before Supabase storage — zero-knowledge metadata sync
Encrypt SQLite at rest for shared-machine users — each profile fully isolated with its own key
Docker container with Postgres for enterprise deployments — no Supabase dependency, full data residency control
Persist JWT locally for trusted offline startup — no more unauthenticated state on network loss
Formal audit trail and compliance certification — required for regulated-industry and enterprise customers
We take responsible disclosure seriously. If you've found a security issue, please reach out directly — we keep all reports confidential.
We respond to all reports within 48 hours.
Local-first, transparent, and security-first from day one. Free during beta.