{"id":"25aad5c2-61e8-464c-bcfd-305bca7c420f","shortId":"5qEzTs","kind":"skill","title":"supabase","tagline":"Run Supabase Management API SQL for persistent data tasks such as querying records, applying schema changes, managing policies, and handling storage metadata. Use when requests involve Supabase database CRUD, migrations, or production-like data inspection.","description":"# Supabase CLI\n\nInteract with Supabase projects: queries and schema management.\n\nWhen the user names a project and env, invoke with `--project <project> --env <env>`.\nThe script loads `skills/supabase/env/<project>-<env>.env` automatically.\nIf only one `.env` file exists in `skills/supabase/env`, `--project` and `--env` are optional.\n\nIf the script reports `SUPABASE_URL not set` or `SUPABASE_ACCESS_TOKEN not set`, the user has not completed setup. Ask them to follow `skills/supabase/README.md`.\n\n## Quick Commands\n```bash\n# SQL query (management API, returns results)\n# Works without --project/--env only when skills/supabase/env has exactly one .env file\nscripts/supabase.sh sql \"SELECT * FROM users LIMIT 5\"\nscripts/supabase.sh sql --project my-project --env dev \"SELECT * FROM users LIMIT 5\"\nscripts/supabase.sh sql --project my-project --env prod \"SELECT * FROM users LIMIT 5\"\n\n# SQL file (management API)\nscripts/supabase.sh sql-file ./migrations/001_init.sql\nscripts/supabase.sh sql-file --project my-project --env dev ./migrations/001_init.sql\n```\n\n## Commands Reference\n\n### sql - Run raw SQL via management API (returns results)\n```bash\nscripts/supabase.sh sql \"<SQL>\"\nscripts/supabase.sh sql --project <project> --env <name> \"<SQL>\"\nscripts/supabase.sh sql --env-file skills/supabase/env/<project>-<env>.env \"<SQL>\"\n\n# Examples\nscripts/supabase.sh sql \"SELECT COUNT(*) FROM users\"\nscripts/supabase.sh sql \"CREATE TABLE items (id serial primary key, name text)\"\nscripts/supabase.sh sql \"SELECT * FROM users WHERE created_at > '2024-01-01'\"\nscripts/supabase.sh sql \"INSERT INTO users (name, email) VALUES ('Alice', 'alice@test.com')\"\nscripts/supabase.sh sql \"UPDATE users SET status = 'inactive' WHERE id = '123'\"\nscripts/supabase.sh sql \"DELETE FROM sessions WHERE expires_at < now()\"\n```\n\n### sql-file - Run raw SQL from a file via management API\n```bash\nscripts/supabase.sh sql-file <path>\nscripts/supabase.sh sql-file --project <project> --env <name> <path>\nscripts/supabase.sh sql-file --env-file skills/supabase/env/<project>-<env>.env <path>\n\n# Example\nscripts/supabase.sh sql-file ./migrations/001_init.sql\n```\n\n### Shared options\n```bash\n--project <name>   # Project name in skills/supabase/env/<project>-<env>.env\n--env <name>       # Env name in skills/supabase/env/<project>-<env>.env\n--env-file <path>  # Loads env file by path (absolute or repo-relative)\n```\n\n### Env selection behavior\n```bash\n1) If --env-file is set -> load that file\n2) Else if --project and --env are set -> load skills/supabase/env/<project>-<env>.env\n3) Else if skills/supabase/env has exactly one .env file -> load it (project/env not required)\n4) Else if skills/supabase/env has multiple .env files -> require --project + --env, or --env-file\n5) Else fallback to existing .env.supabase* behavior\n```\n\n## Common Operations via sql/sql-file\n\n### DDL (schema changes)\n```bash\n# Create table\nscripts/supabase.sh sql \"CREATE TABLE public.items (id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name text NOT NULL);\"\n\n# Alter table\nscripts/supabase.sh sql \"ALTER TABLE public.items ADD COLUMN created_at timestamptz NOT NULL DEFAULT now();\"\n\n# Drop table\nscripts/supabase.sh sql \"DROP TABLE public.items;\"\n\n# Enable extension\nscripts/supabase.sh sql \"CREATE EXTENSION IF NOT EXISTS vector;\"\n```\n\n### Views\n```bash\nscripts/supabase.sh sql \"CREATE OR REPLACE VIEW public.active_items AS SELECT * FROM public.items WHERE deleted_at IS NULL;\"\n```\n\n### Functions / RPC\n```bash\nscripts/supabase.sh sql \"CREATE OR REPLACE FUNCTION public.ping() RETURNS text LANGUAGE sql AS $$ SELECT 'ok'::text; $$;\"\nscripts/supabase.sh sql \"GRANT EXECUTE ON FUNCTION public.ping() TO authenticated;\"\n```\n\n### Triggers\n```bash\nscripts/supabase.sh sql \"CREATE OR REPLACE FUNCTION public.set_updated_at() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.updated_at = now(); RETURN NEW; END; $$;\"\nscripts/supabase.sh sql \"CREATE TRIGGER items_set_updated_at BEFORE UPDATE ON public.items FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();\"\n```\n\n### RLS (Row Level Security)\n```bash\n# Enable RLS\nscripts/supabase.sh sql \"ALTER TABLE public.items ENABLE ROW LEVEL SECURITY;\"\n\n# Example policy (owners can read)\nscripts/supabase.sh sql \"CREATE POLICY \\\"items_read_own\\\" ON public.items FOR SELECT TO authenticated USING (owner_id = auth.uid());\"\n\n# Example policy (owners can write)\nscripts/supabase.sh sql \"CREATE POLICY \\\"items_write_own\\\" ON public.items FOR INSERT TO authenticated WITH CHECK (owner_id = auth.uid());\"\n```\n\n### Storage Buckets (metadata only; file upload uses Storage API)\n```bash\n# Create bucket\nscripts/supabase.sh sql \"INSERT INTO storage.buckets (id, name, public) VALUES ('payment-proofs', 'payment-proofs', false);\"\n\n# Toggle public\nscripts/supabase.sh sql \"UPDATE storage.buckets SET public = true WHERE id = 'payment-proofs';\"\n\n# Delete bucket metadata (does not delete files)\nscripts/supabase.sh sql \"DELETE FROM storage.buckets WHERE id = 'payment-proofs';\"\n```\n\n### Storage RLS Policies\n```bash\n# Enable RLS (if not already enabled)\nscripts/supabase.sh sql \"ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY;\"\n\n# Allow authenticated users to read from a specific bucket\nscripts/supabase.sh sql \"CREATE POLICY \\\"read_payment_proofs\\\" ON storage.objects FOR SELECT TO authenticated USING (bucket_id = 'payment-proofs');\"\n\n# Allow authenticated users to upload to a specific bucket\nscripts/supabase.sh sql \"CREATE POLICY \\\"write_payment_proofs\\\" ON storage.objects FOR INSERT TO authenticated WITH CHECK (bucket_id = 'payment-proofs');\"\n```\n\n### Introspection / Debugging\n```bash\n# List public tables\nscripts/supabase.sh sql \"SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name;\"\n\n# List columns for a table\nscripts/supabase.sh sql \"SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'items' ORDER BY ordinal_position;\"\n\n# Show policies\nscripts/supabase.sh sql \"SELECT schemaname, tablename, policyname, roles, cmd, qual, with_check FROM pg_policies ORDER BY schemaname, tablename, policyname;\"\n```\n\n## Notes\n\n- `sql` / `sql-file` run with management API privileges; treat like admin access","tags":["supabase","agent","skills","jawwadfirdousi","agent-skills","ai-agents","ai-tools","automation","developer-tools","prompt-engineering","prompt-template","workflow-automation"],"capabilities":["skill","source-jawwadfirdousi","skill-supabase","topic-agent","topic-agent-skills","topic-ai-agents","topic-ai-tools","topic-automation","topic-developer-tools","topic-prompt-engineering","topic-prompt-template","topic-skills","topic-workflow-automation"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/jawwadfirdousi/agent-skills/supabase","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add jawwadfirdousi/agent-skills","source_repo":"https://github.com/jawwadfirdousi/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (6,226 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:12.891Z","embedding":null,"createdAt":"2026-05-18T13:13:40.806Z","updatedAt":"2026-05-18T19:08:12.891Z","lastSeenAt":"2026-05-18T19:08:12.891Z","tsv":"'-01':230,231 '/migrations/001_init.sql':166,177,298 '1':331 '123':251 '2':341 '2024':229 '3':352 '4':366 '5':131,144,157,381 'absolut':322 'access':89,818 'add':422 'admin':817 'alic':240 'alice@test.com':241 'allow':676,704 'alreadi':665 'alter':415,419,546,669 'api':5,110,161,186,272,606,813 'appli':15 'ask':99 'auth.uid':574,597 'authent':493,570,592,677,697,705,725 'automat':65 'bash':106,189,273,301,330,395,449,469,495,541,607,660,735 'begin':510 'behavior':329,387 'bucket':599,609,641,684,699,712,728 'chang':17,394 'check':594,727,796 'cli':39 'cmd':793 'column':423,755,762,768 'command':105,178 'common':388 'complet':97 'count':207 'creat':212,227,396,400,424,442,452,472,498,519,560,582,608,687,715 'crud':30 'data':9,36,764 'databas':29 'ddl':392 'debug':734 'default':407,429,769 'delet':254,463,640,645,649 'dev':139,176 'drop':431,435 'els':342,353,367,382 'email':238 'enabl':438,542,549,661,666,672 'end':516 'env':55,59,64,69,76,116,123,138,151,175,195,199,202,283,289,292,307,308,309,313,315,318,327,334,346,351,359,372,376,379 'env-fil':198,288,314,333,378 'env.supabase':386 'exact':121,357 'exampl':203,293,553,575 'execut':488,532 'exist':71,385,446 'expir':258 'extens':439,443 'fallback':383 'fals':625 'file':70,124,159,165,170,200,263,269,277,281,287,290,297,316,319,335,340,360,373,380,602,646,809 'follow':102 'function':467,475,490,501,533 'gen':408 'grant':487 'handl':21 'id':215,250,403,573,596,615,636,653,700,729 'inact':248 'information_schema.columns':771 'information_schema.tables':745 'insert':234,590,612,723 'inspect':37 'interact':40 'introspect':733 'invok':56 'involv':27 'item':214,457,521,562,584,779 'key':218,406 'languag':479,507 'level':539,551,674 'like':35,816 'limit':130,143,156 'list':736,754 'load':62,317,338,349,361 'manag':4,18,47,109,160,185,271,812 'metadata':23,600,642 'migrat':31 'multipl':371 'my-project':135,148,172 'name':51,219,237,304,310,411,616,743,753,763,778 'new':515 'new.updated':511 'note':805 'null':414,428,466 'nullabl':767 'ok':483 'one':68,122,358 'oper':389 'option':78,300 'order':750,780,800 'ordin':782 'owner':555,572,577,595 'path':321 'payment':620,623,638,655,690,702,718,731 'payment-proof':619,622,637,654,701,730 'persist':8 'pg':798 'plpgsql':508 'polici':19,554,561,576,583,659,688,716,785,799 'policynam':791,804 'posit':783 'primari':217,405 'privileg':814 'prod':152 'product':34 'production-lik':33 'project':43,53,58,74,115,134,137,147,150,171,174,194,282,302,303,344,375 'project/env':363 'proof':621,624,639,656,691,703,719,732 'public':617,627,633,737,749,775 'public.active':456 'public.items':402,421,437,461,528,548,566,588 'public.ping':476,491 'public.set':502,534 'qual':794 'queri':13,44,108 'quick':104 'random':409 'raw':182,265 'read':557,563,680,689 'record':14 'refer':179 'relat':326 'replac':454,474,500 'repo':325 'repo-rel':324 'report':82 'request':26 'requir':365,374 'result':112,188 'return':111,187,477,505,514 'rls':537,543,658,662 'role':792 'row':531,538,550,673 'rpc':468 'run':2,181,264,810 'schema':16,46,393,748,774 'schemanam':789,802 'script':61,81 'scripts/supabase.sh':125,132,145,162,167,190,192,196,204,210,221,232,242,252,274,278,284,294,398,417,433,440,450,470,485,496,517,544,558,580,610,628,647,667,685,713,739,759,786 'secur':540,552,675 'select':127,140,153,206,223,328,459,482,568,695,741,761,788 'serial':216 'session':256 'set':86,92,246,337,348,522,632 'setup':98 'share':299 'show':784 'skill' 'skill-supabase' 'skills/supabase/env':63,73,119,201,291,306,312,350,355,369 'skills/supabase/readme.md':103 'source-jawwadfirdousi' 'specif':683,711 'sql':6,107,126,133,146,158,164,169,180,183,191,193,197,205,211,222,233,243,253,262,266,276,280,286,296,399,418,434,441,451,471,480,486,497,518,545,559,581,611,629,648,668,686,714,740,760,787,806,808 'sql-file':163,168,261,275,279,285,295,807 'sql/sql-file':391 'status':247 'storag':22,598,605,657 'storage.buckets':614,631,651 'storage.objects':671,693,721 'supabas':1,3,28,38,42,83,88 'tabl':213,397,401,416,420,432,436,547,670,738,742,747,752,758,773,777 'tablenam':790,803 'task':10 'text':220,412,478,484 'timestamptz':426 'toggl':626 'token':90 'topic-agent' 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-tools' 'topic-automation' 'topic-developer-tools' 'topic-prompt-engineering' 'topic-prompt-template' 'topic-skills' 'topic-workflow-automation' 'treat':815 'trigger':494,506,520 'true':634 'type':765 'updat':244,503,523,526,535,630 'upload':603,708 'url':84 'use':24,571,604,698 'user':50,94,129,142,155,209,225,236,245,678,706 'uuid':404,410 'valu':239,618 'vector':447 'via':184,270,390 'view':448,455 'without':114 'work':113 'write':579,585,717","prices":[{"id":"84c20ef5-535d-4bac-9c85-4d8b892c475e","listingId":"25aad5c2-61e8-464c-bcfd-305bca7c420f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"jawwadfirdousi","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:13:40.806Z"}],"sources":[{"listingId":"25aad5c2-61e8-464c-bcfd-305bca7c420f","source":"github","sourceId":"jawwadfirdousi/agent-skills/supabase","sourceUrl":"https://github.com/jawwadfirdousi/agent-skills/tree/main/skills/supabase","isPrimary":false,"firstSeenAt":"2026-05-18T13:13:40.806Z","lastSeenAt":"2026-05-18T19:08:12.891Z"}],"details":{"listingId":"25aad5c2-61e8-464c-bcfd-305bca7c420f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"jawwadfirdousi","slug":"supabase","github":{"repo":"jawwadfirdousi/agent-skills","stars":10,"topics":["agent","agent-skills","ai-agents","ai-tools","automation","developer-tools","prompt-engineering","prompt-template","skills","workflow-automation"],"license":null,"html_url":"https://github.com/jawwadfirdousi/agent-skills","pushed_at":"2026-05-05T20:09:54Z","description":"Reusable AI agent skill definitions","skill_md_sha":"2dbc929432abe75ac793fea797026863639104b7","skill_md_path":"skills/supabase/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/jawwadfirdousi/agent-skills/tree/main/skills/supabase"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"supabase","description":"Run Supabase Management API SQL for persistent data tasks such as querying records, applying schema changes, managing policies, and handling storage metadata. Use when requests involve Supabase database CRUD, migrations, or production-like data inspection.","compatibility":"Requires network access to Supabase API."},"skills_sh_url":"https://skills.sh/jawwadfirdousi/agent-skills/supabase"},"updatedAt":"2026-05-18T19:08:12.891Z"}}