env | grep -i supabase | sed 's/\(KEY=.\{8\}\).*/\1.../;s/\(PASSWORD=.\{4\}\).*/\1.../;s/\(URL=.*@\).*/\1.../' SUPABASE_DB_PASSWORD=na3b... SUPABASE_DB_URL=postgresql://postgres.<ref>:<redacted:SUPABASE_DB_PASSWORD>@... SUPABASE_URL=https://<ref>.supabase.co SUPABASE_SERVICE_ROLE_KEY=eyJhbGci... SUPABASE_PROJECT_REF=<ref> SUPABASE_ANON_KEY=eyJhbGci...
which psql; which curl; which jq; psql --version 2>/dev/null
/usr/bin/psql /usr/bin/curl /usr/bin/jq psql (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1)
cat > /tmp/setup.sql <<'SQL'
create table if not exists public.products (
sku text primary key,
name text not null,
price_cents integer not null,
stock integer not null default 0
);
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)
on conflict (sku) do update set
name=excluded.name, price_cents=excluded.price_cents, stock=excluded.stock;
alter table public.products enable row level security;
drop policy if exists "public read products" on public.products;
create policy "public read products" on public.products
for select to anon, authenticated using (true);
grant usage on schema public to anon;
grant select on public.products to anon;
SQL
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f /tmp/setup.sqlCREATE TABLE INSERT 0 5 ALTER TABLE DROP POLICY CREATE POLICY GRANT GRANT
psql:/tmp/setup.sql:19: NOTICE: policy "public read products" for relation "public.products" does not exist, skipping
psql "$SUPABASE_DB_URL" -c "NOTIFY pgrst, 'reload schema';" >/dev/null 2>&1 sleep 3 curl -s "$SUPABASE_URL/rest/v1/products?select=sku,name,price_cents,stock&order=sku" \ -H "apikey: $SUPABASE_ANON_KEY" | jq .
[
{
"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
}
]
echo "Row count via anon key:"
curl -s "$SUPABASE_URL/rest/v1/products?select=sku" \
-H "apikey: $SUPABASE_ANON_KEY" | jq 'length'
echo "---"
echo "HTTP status with anon key only:"
curl -s -o /dev/null -w "%{http_code}\n" "$SUPABASE_URL/rest/v1/products?select=*" \
-H "apikey: $SUPABASE_ANON_KEY"Row count via anon key: 5 --- HTTP status with anon key only: 200
4 earlier narration turn(s) are in the raw transcript.
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