echo "SUPABASE_URL=$SUPABASE_URL" && echo "SUPABASE_PROJECT_REF=$SUPABASE_PROJECT_REF" && echo "SUPABASE_ANON_KEY=$SUPABASE_ANON_KEY" && echo "SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY:0:20}..." && echo "SUPABASE_DB_URL=${SUPABASE_DB_URL:0:40}..."SUPABASE_URL=https://<ref>.supabase.co SUPABASE_PROJECT_REF=<ref> SUPABASE_ANON_KEY=<redacted:SUPABASE_ANON_KEY> SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIs... SUPABASE_DB_URL=postgresql://postgres.dvdgdbfkifwrtgqxfh...
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema='public' ORDER BY table_name;"
table_schema | table_name --------------+------------------ public | signups public | webhook_receipts (2 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "\d public.signups" && echo "---" && psql "$SUPABASE_DB_URL" -c "\d public.webhook_receipts"
Table "public.signups"
Column | Type | Collation | Nullable | Default
------------+--------------------------+-----------+----------+----------------------------------
id | bigint | | not null | generated by default as identity
email | text | | not null |
plan | text | | not null | 'free'::text
created_at | timestamp with time zone | | not null | now()
Indexes:
"signups_pkey" PRIMARY KEY, btree (id)
---
Table "public.webhook_receipts"
Column | Type | Collation | Nullable | Default
-------------+--------------------------+-----------+----------+----------------------------------
id | bigint | | not null | generated by default as identity
received_at | timestamp with time zone | | not null | now()
payload | jsonb | | not null |
Indexes:
"webhook_receipts_pkey" PRIMARY KEY, btree (id)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT * FROM pg_extension WHERE extname='pg_net';"
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition -----+---------+----------+--------------+----------------+------------+-----------+-------------- (0 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT name, default_version, installed_version FROM pg_available_extensions WHERE name IN ('pg_net', 'http', 'pg_cron', 'pgsodium', 'supabase_functions') ORDER BY name;"name | default_version | installed_version ----------+-----------------+------------------- http | 1.6 | pg_cron | 1.6.4 | pg_net | 0.20.4 | pgsodium | 3.1.8 | (4 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "CREATE EXTENSION IF NOT EXISTS pg_net;"
CREATE EXTENSION
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c " SELECT proname, pronargs, prosrc FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname = 'net' AND proname LIKE '%http%' ORDER BY proname; "
proname | pronargs | prosrc
------------------------+----------+---------------------------------------------------------------------------------------------------------
_http_collect_response | 2 | +
| | declare +
| | rec net._http_response; +
| | req_exists boolean; +
| | begin +
| | +
| | if not async then +
| | perform net._await_response(request_id); +
| | end if; +
| | +
| | select * +
| | into rec +
| | from net._http_response +
| | where id = request_id; +
| | +
| | if rec is null or rec.error_msg is not null then +
| | -- The request is either still processing or the request_id provided does not exist +
| | +
| | -- TODO: request in progress is indistinguishable from request that doesn't exist +
| | +
| | -- No request matching request_id found +
| | return ( +
| | 'ERROR', +
| | coalesce(rec.error_msg, 'request matching request_id not found'), +
| | null +
| | )::net.http_response_result; +
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT proname, pronargs FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname = 'net' ORDER BY proname;"
proname | pronargs -------------------------------+---------- _await_response | 1 _encode_url_with_params_array | 2 _http_collect_response | 2 _urlencode_string | 1 check_worker_is_up | 0 http_collect_response | 2 http_delete | 5 http_get | 4 http_post | 5 wait_until_running | 0 wake | 0 worker_restart | 0 (12 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c " SELECT pg_get_function_arguments(p.oid) as args FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname = 'net' AND proname = 'http_post'; "
args
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
url text, body jsonb DEFAULT '{}'::jsonb, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{"Content-Type": "application/json"}'::jsonb, timeout_milliseconds integer DEFAULT 5000
(1 row)
curl -s -X POST "$SUPABASE_URL/functions/v1/hook-recorder" \
-H "Authorization: Bearer $SUPABASE_SERVICE_ROLE_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","plan":"pro"}'{"ok":true}export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT * FROM public.webhook_receipts ORDER BY id;"
id | received_at | payload
----+-------------------------------+----------------------------------------------
2 | 2026-07-24 06:40:56.243352+00 | {"plan": "pro", "email": "test@example.com"}
(1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" <<'EOF'
CREATE OR REPLACE FUNCTION public.hook_signup_insert()
RETURNS trigger
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = ''
AS $$
DECLARE
webhook_url text := current_setting('app.settings.webhook_url');
webhook_jwt text := current_setting('app.settings.webhook_jwt');
req_id bigint;
BEGIN
req_id := net.http_post(
url := webhook_url,
body := jsonb_build_object('email', NEW.email, 'plan', NEW.plan),
headers := jsonb_build_object(
'Content-Type', 'application/json',
'Authorization', 'Bearer ' || webhook_jwt
)
);
RAISE LOG 'webhook sent for signup id=%, net.http_post request_id=%', NEW.id, req_id;
RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS trg_signup_webhook ON public.signups;
CREATE TRIGGER trg_signup_webhook
AFTER INSERT ON public.signups
FOR EACH ROW
EXECUTE FUNCTION public.hook_signup_insert();
EOFCREATE FUNCTION DROP TRIGGER CREATE TRIGGER
NOTICE: trigger "trg_signup_webhook" for relation "public.signups" does not exist, skipping
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT * FROM pg_available_extensions WHERE name='supabase_vault';"
name | default_version | installed_version | comment ----------------+-----------------+-------------------+-------------------------- supabase_vault | 0.3.1 | 0.3.1 | Supabase Vault Extension (1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT * FROM vault.secrets LIMIT 0;" 2>&1 || echo "vault not yet created"
id | name | description | secret | key_id | nonce | created_at | updated_at ----+------+-------------+--------+--------+-------+------------+------------ (0 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT current_database();"
current_database ------------------ postgres (1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "ALTER DATABASE postgres SET app.settings.webhook_url = '$SUPABASE_URL/functions/v1/hook-recorder';"
ERROR: permission denied to set parameter "app.settings.webhook_url"
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT current_user, session_user;"
current_user | session_user --------------+-------------- postgres | postgres (1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c " SELECT extname, extversion FROM pg_extension WHERE extname = 'supabase_vault'; "
extname | extversion ----------------+------------ supabase_vault | 0.3.1 (1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c " SELECT * FROM vault.secrets; "
id | name | description | secret | key_id | nonce | created_at | updated_at ----+------+-------------+--------+--------+-------+------------+------------ (0 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c " SELECT proname, pronargs FROM pg_proc p JOIN pg_namespace n ON p.pronamespace=n.oid WHERE n.nspname='vault' ORDER BY proname; "
proname | pronargs ---------------------------+---------- _crypto_aead_det_decrypt | 5 _crypto_aead_det_encrypt | 5 _crypto_aead_det_noncegen | 0 create_secret | 4 update_secret | 5 (5 rows)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" <<'EOF'
-- Store the webhook URL and JWT in Supabase Vault
SELECT vault.create_secret(
'hook-recorder-url',
'supabase.co/functions/v1/hook-recorder',
'Webhook URL for signup webhook delivery'
);
SELECT vault.create_secret(
'hook-recorder-jwt',
current_setting('app.settings.webhook_jwt'),
'JWT for hook-recorder edge function'
);
EOFcreate_secret -------------------------------------- 5a8c85fb-5a6f-4807-aba4-730e1b176024 (1 row)
ERROR: unrecognized configuration parameter "app.settings.webhook_jwt"
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" <<EOF
CREATE OR REPLACE FUNCTION public.hook_signup_insert()
RETURNS trigger
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = ''
AS \$\$
DECLARE
req_id bigint;
BEGIN
req_id := net.http_post(
url := '${SUPABASE_URL}/functions/v1/hook-recorder',
body := jsonb_build_object('email', NEW.email, 'plan', NEW.plan),
headers := jsonb_build_object(
'Content-Type', 'application/json',
'Authorization', 'Bearer ${SUPABASE_SERVICE_ROLE_KEY}'
)
);
RAISE LOG 'webhook sent for signup id=%, net.http_post request_id=%', NEW.id, req_id;
RETURN NEW;
END;
\$\$;
DROP TRIGGER IF EXISTS trg_signup_webhook ON public.signups;
CREATE TRIGGER trg_signup_webhook
AFTER INSERT ON public.signups
FOR EACH ROW
EXECUTE FUNCTION public.hook_signup_insert();
EOFCREATE FUNCTION DROP TRIGGER CREATE TRIGGER
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT net.check_worker_is_up();"
check_worker_is_up -------------------- (1 row)
export PGPASSWORD="$SUPABASE_DB_PASSWORD" && psql "$SUPABASE_DB_URL" -c "SELECT net.wake();" 2>&1
wake ------ (1 row)
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