Security

How we handle your data.

Pre-launch + honest. Here's what's in place and what isn't. No SOC 2 theater.

In place

What we've built.

Per-tenant row-level security

Every table in our Supabase Postgres has RLS enabled. The tenant_id is enforced at the database, not in application code. A bug in our web app can't accidentally surface another tenant's row.

Service role is forbidden in the browser bundle

Our CI lint job (.github/workflows/lint.yml) fails the build if the Supabase service-role key, or any privileged service client, appears in the apps/web bundle. Privileged operations go through security-definer RPCs only.

OAuth tokens in Vault

Slack tokens, GitHub installation tokens, and any other operator-supplied OAuth credentials are stored in Supabase Vault. All writes go through a single security-definer RPC. Direct vault.* access is revoked from every role.

Worker trust boundary

Background workers re-derive tenant_id from the agent_runs row by run_id. The dispatch event payload's tenant_id is for tracing only — never trusted as the authorization key.

Telemetry whitelist

agent_run_events.meta only carries {tool_name, ms, code, iter}. No raw model inputs, no raw outputs, no user content. PII never lands in the metrics path.

Prod secrets in AWS Secrets Manager

All production secrets live in AWS Secrets Manager (us-west-1). The EC2 instance role has GetSecretValue only — no PutSecretValue. The container loads them at boot; nothing is read at request time.

Honest gaps

What we haven't built yet.

SOC 2: post-revenue

We're pre-launch and we tell you that out loud. SOC 2 Type I targets H2 2026, Type II H1 2027. If your security review requires SOC 2 today, we are not the right fit yet.

Single-region

AWS us-west-1 only. No data residency options. If you need EU-region storage, talk to the founder — we'll prioritize when a customer commits.

Penetration test

Internal scans + GitHub Dependabot. No third-party pentest yet. Scheduled post-launch.

Responsible disclosure

Found a vulnerability? Email security@thepraxis.ai. We aim to acknowledge within 24 hours and resolve P0 issues within 7 days. We don't have a bug bounty program yet — we'd rather pay you in founder time + a public credit.