env | grep -i supabase | sort
SUPABASE_ANON_KEY=<redacted:SUPABASE_ANON_KEY> SUPABASE_DB_PASSWORD=<redacted:SUPABASE_DB_PASSWORD> SUPABASE_DB_URL=<redacted:SUPABASE_DB_URL> SUPABASE_PROJECT_REF=<ref> SUPABASE_SERVICE_ROLE_KEY=<redacted:SUPABASE_SERVICE_ROLE_KEY> SUPABASE_URL=https://<ref>.supabase.co
which psql && psql --version
/usr/bin/psql psql (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1)
PGPASSWORD="$SUPABASE_DB_PASSWORD" psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c "select current_database(), current_user, inet_server_addr();"
current_database | current_user | inet_server_addr ------------------+--------------+---------------------------------------- postgres | postgres | 2600:1f18:4850:7c02:60b7:43cb:4e9b:c8e (1 row)
PGPASSWORD="$SUPABASE_DB_PASSWORD" psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
-- Create table (drop in case of stale state)
drop table if exists public.products;
create table public.products (
sku text primary key,
name text not null,
price_cents integer not null,
stock integer not null default 0
);
-- Public read access via PostgREST anon key
alter table public.products enable row level security;
-- Drop any prior policy to keep this idempotent
drop policy if exists "anon_read_products" on public.products;
create policy "anon_read_products"
on public.products
for select
to anon
using (true);
-- Also let the authenticator/anonymous PostgREST roles see rows
grant usage on schema public to anon, authenticated, service_role;
grant select on public.products to anon, authenticated, service_role;
-- Load the exact five rows
insert into public.products (sku, name, price_cents, stock) values
('CARI-001', 'Anvil S', 1999, 12),
('CARI-002', 'Anvil M', 2999, 7),
('CARI-003', 'Anvil L', 4999, 3),
('CARI-004', 'Rope 30m', 1250, 40),
('CARI-005', 'Pulley', 780, 0);
-- Verify
table public.products;
SQLDROP TABLE CREATE TABLE ALTER TABLE DROP POLICY CREATE POLICY GRANT GRANT INSERT 0 5 sku | name | price_cents | stock ----------+----------+-------------+------- CARI-001 | Anvil S | 1999 | 12 CARI-002 | Anvil M | 2999 | 7 CARI-003 | Anvil L | 4999 | 3 CARI-004 | Rope 30m | 1250 | 40 CARI-005 | Pulley | 780 | 0 (5 rows)
NOTICE: table "products" does not exist, skipping NOTICE: policy "anon_read_products" for relation "public.products" does not exist, skipping
curl -sS -w "\nHTTP %{http_code}\n" \
"$SUPABASE_URL/rest/v1/products?select=sku,name,price_cents,stock&order=sku" \
-H "apikey: $SUPABASE_ANON_KEY" \
-H "Authorization: Bearer $SUPABASE_ANON_KEY"[{"sku":"CARI-001","name":"Anvil S","price_cents":1999,"stock":12},
{"sku":"CARI-002","name":"Anvil M","price_cents":2999,"stock":7},
{"sku":"CARI-003","name":"Anvil L","price_cents":4999,"stock":3},
{"sku":"CARI-004","name":"Rope 30m","price_cents":1250,"stock":40},
{"sku":"CARI-005","name":"Pulley","price_cents":780,"stock":0}]
HTTP 200
A shell script executed against the live project and asserted on the state the agent left behind. No model judged another model.
Raw transcript · Task definition and verifier · Every attempt