Privacy & security

Memory is intimate data. innernet's defensive posture is documented in three places:

  • /privacy — the user-facing privacy policy.
  • /terms — terms of service.
  • SECURITY.md in the repo — the full threat model, audit findings, and migration plan.

The short version

  • Row-level security on every table. Cross-user reads are rejected at the database, not just the application.
  • Tokens hashed at rest. A DB dump does not produce usable credentials.
  • Service-role behind the auth gate. The MCP route validates your bearer token application-side, then uses a server-only key to call locked-down RPCs. The public anon key cannot read or write your data.
  • Optional encryption at rest for dimensions, per project, with a passphrase only you hold. The database operator cannot read encrypted content. If you lose the passphrase, the content is unrecoverable — we say so before you enable it.
  • Audit log of privileged events on your account. You can read your own log; we cannot edit it.
  • Export and delete are one-click from /account. Deletion is immediate and irreversible; backups purge within 30 days.

What we don't promise

  • End-to-end encryptionthrough the AI's context window. Once your AI client reads a dimension, the content is in the AI provider's process and possibly their logs. We document this, we don't prevent it.
  • Tamper-evident commits.The commit log is append-only by convention; we don't sign commits today.
  • Multi-region failover. Single region, single point of failure for now.

Reporting a vulnerability

Open a private security advisory at github.com/johntremendol/innernet/security/advisories/new. We triage within 72 hours.