Supahound is in early access. Sign up now; features marked Coming soon switch on as they ship. See what's included

Supahound

Tempo security guide

How to secure a Supabase app you build with Tempo

Review every pull request a Tempo agent opens for SQL migrations, and reject any that create a table without enabling RLS. Tempo's desktop app has no Supabase integration, so the database rules live in your repo and your Supabase project. If you built the app with Tempo's legacy web editor, audit the generated schema's RLS now.

Last updated

Does Tempo connect to Supabase today?

No. The current Tempo product is a local desktop app that runs Claude or Codex agents on your repository, and its docs do not mention Supabase. The earlier web editor had a Supabase integration: you authorized your Supabase account, picked a project, and Tempo generated the schema, typed data handlers and real-time updates. Tempo's migration guide says the web editor was wound down.

What should I look for in a Tempo pull request?

  • A create table with no enable row level security in the same migration.
  • An update policy with using but no with check.
  • A new view without security_invoker.
  • A secret or service_role key in client code or a client-exposed variable.
  • verify_jwt = false on an Edge Function.
# Show the RLS-related lines a branch adds to Supabase migrations.
git diff origin/main...HEAD -- supabase/migrations/ \
  | grep -inE "create table|enable row level security|create policy|security_invoker"
Assumes migrations live in supabase/migrations/. Every create table needs a matching enable line.

How do I audit an app from Tempo's legacy web editor?

Run these in the Supabase SQL editor. The first lists tables without RLS. The second lists policies that let every row through.

-- Tables in public without RLS. This must return no rows.
select c.relname
from pg_class c
join pg_namespace n on n.oid = c.relnamespace
where n.nspname = 'public' and c.relkind = 'r' and not c.relrowsecurity;
-- Policies that pass for every row.
select tablename, policyname, cmd, roles
from pg_policies
where schemaname = 'public'
  and (qual = 'true' or with_check = 'true');
alter table public.events enable row level security;

create policy "events: owner reads" on public.events
  for select to authenticated
  using ((select auth.uid()) = user_id);

create policy "events: owner inserts" on public.events
  for insert to authenticated
  with check ((select auth.uid()) = user_id);

create policy "events: owner updates" on public.events
  for update to authenticated
  using ((select auth.uid()) = user_id)
  with check ((select auth.uid()) = user_id);

How do I keep secret keys out of the client?

Search the source and the build output for a secret key on every branch an agent touches. A publishable key in client code is expected. A secret key there is a leak to rotate.

# Look for a secret key before you deploy. This must print nothing.
grep -rnE "sb_secret_|service_role" --exclude-dir=node_modules --exclude-dir=.git . 2>/dev/null

What should I run after merging a Tempo pull request?

  1. Apply the migration to a development project first.
  2. Run the RLS query above. It must return no rows.
  3. Run the Supabase Security Advisor.
  4. Let Supahound's daily posture scan confirm no newly exposed tables reached production.

Frequently asked questions

Is Tempo's web editor still available?
No. Tempo's migration guide says the web editor was wound down, and the current product is a desktop agent app that works on your own repository.
Did Tempo's Supabase integration set up RLS?
No Tempo doc says it did. Supabase's partner page describes the integration generating the database structure, typed data handlers and real-time updates, with no mention of policies.
Which agents does Tempo run?
Claude or Codex, locally, against your repository. They turn issues and specs into pull requests, so your review of each pull request is where database security gets checked.

Find out if someone is abusing your app

Connect your Supabase org read-only. The free posture scan runs in minutes. No credit card.

Sources

Checked on . Products change; check each source for current details.