CLI Directory/Supabase
# agent runs a migration
$ supabase db push
  Connecting to remote database...
  Applying migration 20260208_add_users.sql...
  Finished supabase db push.

Can AI agents use Supabase?

Open-source Firebase alternative CLI. Agents manage databases, run migrations, generate types, and manage edge functions.

See the latest run →
71% overall pass rate1 model tested14 tasksv2.75.03/6/2026

Supabase eval results by model

ModelPass rateAvg turnsAvg tokens
gpt-5-nano71%4.616.0k

Supabase task results by model

Taskgpt-5-nano
show-helpeasy
Show the top-level supabase CLI help to list all available commands.
3t
init-projecteasy
Initialize a new Supabase project in the current directory.
4t
version-checkeasy
Display the installed Supabase CLI version.
1t
subcommand-helpeasy
Show the help for the 'supabase db' subcommand to see available database operations.
1t
create-migrationmedium
After initializing a Supabase project, create a new migration called 'create_users' that creates a users table with id (uuid primary key), email (text unique not null), and created_at (timestamptz default now()).
8t
create-functionmedium
After initializing a Supabase project, create a new edge function called 'hello' using the supabase CLI.
6t
migration-with-rlsmedium
After initializing a Supabase project, create a migration called 'add_rls_policies' that enables RLS on a 'posts' table and adds a policy allowing authenticated users to read all posts.
8t
seed-filemedium
After initializing a Supabase project, create a supabase/seed.sql file that inserts 3 test users into a users table with emails user1@test.com, user2@test.com, user3@test.com.
6t
config-inspectionmedium
Initialize a Supabase project, then inspect the generated config.toml. Report the default API port and the auth settings.
6t
function-with-corsmedium
After initializing a Supabase project, create an edge function called 'api' and modify its index.ts to include CORS headers (Access-Control-Allow-Origin: *) and return a JSON response with {"status": "ok"}.
8t
start-no-dockerhard
Initialize a Supabase project and attempt to run 'supabase start'. Report the error about Docker not being available.
3t
full-schema-migrationhard
Initialize a Supabase project and create a migration called 'full_schema' that: creates a 'products' table (id uuid PK default gen_random_uuid(), name text not null, price numeric not null, created_at timestamptz default now()), adds an index on 'name', and enables RLS with a read policy for all users.
10t
multi-migration-flowhard
Initialize a Supabase project and create three sequential migrations: 'create_users' (users table with id, email, created_at), 'create_posts' (posts table with id, title, body, user_id FK referencing users), and 'add_indexes' (indexes on users.email and posts.user_id).
12t
config-and-seedhard
Initialize a Supabase project, create a migration called 'create_todos' with a todos table (id serial PK, title text not null, done boolean default false), then create a seed.sql that inserts 5 sample todos.
10t
Task suite source188 lines · YAML
- id: show-help
  intent: Show the top-level supabase CLI help to list all available commands.
  assert:
    - ran: supabase.*help|supabase --help
    - exit_code: 0
  setup: []
  max_turns: 3
  difficulty: easy
  category: discovery
- id: init-project
  intent: Initialize a new Supabase project in the current directory.
  assert:
    - ran: supabase init
    - file_exists: supabase/config.toml
  setup: []
  max_turns: 4
  difficulty: easy
  category: discovery
- id: version-check
  intent: Display the installed Supabase CLI version.
  assert:
    - ran: supabase.*--version
    - exit_code: 0
  setup: []
  max_turns: 3
  difficulty: easy
  category: discovery
- id: subcommand-help
  intent: Show the help for the 'supabase db' subcommand to see available database
    operations.
  assert:
    - ran: supabase db.*--help|supabase.*help.*db
    - exit_code: 0
  setup: []
  max_turns: 3
  difficulty: easy
  category: discovery
- id: create-migration
  intent: After initializing a Supabase project, create a new migration called
    'create_users' that creates a users table with id (uuid primary key), email
    (text unique not null), and created_at (timestamptz default now()).
  assert:
    - ran: supabase.*migration.*new|supabase db.*migration
    - verify:
        run: ls supabase/migrations/
        output_contains: create_users
  setup:
    - supabase init
  max_turns: 8
  difficulty: medium
  category: migration
- id: create-function
  intent: After initializing a Supabase project, create a new edge function called
    'hello' using the supabase CLI.
  assert:
    - ran: supabase functions new|supabase functions create
    - file_exists: supabase/functions/hello/index.ts
  setup:
    - supabase init
  max_turns: 6
  difficulty: medium
  category: functions
- id: migration-with-rls
  intent: After initializing a Supabase project, create a migration called
    'add_rls_policies' that enables RLS on a 'posts' table and adds a policy
    allowing authenticated users to read all posts.
  assert:
    - ran: supabase.*migration.*new
    - verify:
        run: cat supabase/migrations/*add_rls_policies*.sql
        output_contains: ROW LEVEL SECURITY
  setup:
    - supabase init
  max_turns: 8
  difficulty: medium
  category: migration
- id: seed-file
  intent: After initializing a Supabase project, create a supabase/seed.sql file
    that inserts 3 test users into a users table with emails user1@test.com,
    user2@test.com, user3@test.com.
  assert:
    - file_exists: supabase/seed.sql
    - file_contains:
        path: supabase/seed.sql
        text: user1@test.com
    - file_contains:
        path: supabase/seed.sql
        text: user3@test.com
  setup:
    - supabase init
  max_turns: 6
  difficulty: medium
  category: config
- id: config-inspection
  intent: Initialize a Supabase project, then inspect the generated config.toml.
    Report the default API port and the auth settings.
  assert:
    - ran: cat.*config.toml|supabase.*config
    - output_contains: port
  setup:
    - supabase init
  max_turns: 6
  difficulty: medium
  category: config
- id: function-with-cors
  intent: "After initializing a Supabase project, create an edge function called
    'api' and modify its index.ts to include CORS headers
    (Access-Control-Allow-Origin: *) and return a JSON response with
    {\"status\": \"ok\"}."
  assert:
    - file_exists: supabase/functions/api/index.ts
    - file_contains:
        path: supabase/functions/api/index.ts
        text: Access-Control-Allow-Origin
  setup:
    - supabase init
  max_turns: 8
  difficulty: medium
  category: functions
- id: start-no-docker
  intent: Initialize a Supabase project and attempt to run 'supabase start'.
    Report the error about Docker not being available.
  assert:
    - ran: supabase start
  setup:
    - supabase init
  max_turns: 5
  difficulty: hard
  category: error-handling
- id: full-schema-migration
  intent: "Initialize a Supabase project and create a migration called
    'full_schema' that: creates a 'products' table (id uuid PK default
    gen_random_uuid(), name text not null, price numeric not null, created_at
    timestamptz default now()), adds an index on 'name', and enables RLS with a
    read policy for all users."
  assert:
    - verify:
        run: cat supabase/migrations/*full_schema*.sql
        output_contains: products
    - verify:
        run: cat supabase/migrations/*full_schema*.sql
        output_contains: INDEX
    - verify:
        run: cat supabase/migrations/*full_schema*.sql
        output_contains: ROW LEVEL SECURITY
  setup:
    - supabase init
  max_turns: 10
  difficulty: hard
  category: workflow
- id: multi-migration-flow
  intent: "Initialize a Supabase project and create three sequential migrations:
    'create_users' (users table with id, email, created_at), 'create_posts'
    (posts table with id, title, body, user_id FK referencing users), and
    'add_indexes' (indexes on users.email and posts.user_id)."
  assert:
    - verify:
        run: ls supabase/migrations/ | wc -l
        output_contains: "3"
    - verify:
        run: ls supabase/migrations/
        output_contains: create_users
    - verify:
        run: ls supabase/migrations/
        output_contains: create_posts
  setup:
    - supabase init
  max_turns: 12
  difficulty: hard
  category: workflow
- id: config-and-seed
  intent: Initialize a Supabase project, create a migration called 'create_todos'
    with a todos table (id serial PK, title text not null, done boolean default
    false), then create a seed.sql that inserts 5 sample todos.
  assert:
    - verify:
        run: ls supabase/migrations/
        output_contains: create_todos
    - file_exists: supabase/seed.sql
    - file_contains:
        path: supabase/seed.sql
        text: INSERT
  setup:
    - supabase init
  max_turns: 10
  difficulty: hard
  category: workflow

Evals are a snapshot, not a verdict. We run identical tasks across all models to keep comparisons fair. Results vary with CLI version, task selection, and model updates. Evals run weekly on 14 tasks using @cliwatch/cli-bench.

What you get with CLIWatch

Everything below is running live for Supabase see the latest run. Set up the same for your CLI in minutes.

ModelPass RateDelta
Sonnet 4.595%+5%
GPT-4.180%-5%
Haiku 4.565%-10%

CI & PR Comments

Get automated PR comments with per-model pass rates, regressions, and a link to the full comparison dashboard.

Pass rateLast 30 days
v1.0v1.6

Track Over Time

See how your CLI's agent compatibility changes across releases. Spot trends and regressions at a glance.

thresholds:
  claude-sonnet-4-5: 80%
  gpt-4.1: 75%
  claude-haiku-4-5: 60%

Quality Gates

Set per-model pass rate thresholds. CI fails if evals drop below your targets.

Get this for your CLI

Run evals in CI, get PR comments with regressions, track pass rates over time, and gate merges on quality thresholds — all from a single GitHub Actions workflow.

Compare other CLI evals