Back to skills
SKILL.md
Supabase Cli
ASecurityCLI automation for Supabase development workflows. Provides scripts for migrations, Edge Functions, secrets management, type generation, and SQL execution with safety checks.
- 28 stars
- 0 votes
- 0 copies
- 0 views
- Added February 7, 2026
Works with
Security analysis
96/100- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 17 files and shows the line behind each finding
npx -y skills add georgekhananaev/claude-skills-vault --skill supabase-cli --agent claude-codeAre you the author of Supabase Cli?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/georgekhananaev-supabase-cli)---
name: supabase-cli
description: CLI automation for Supabase development workflows. Provides scripts for migrations, Edge Functions, secrets management, type generation, and SQL execution with safety checks.
---
# Supabase CLI
CLI automation and operational tooling for Supabase development workflows. This skill provides scripts and utilities for common Supabase operations with built-in safety checks.
## When to Use
Invoke when:
- Creating or applying database migrations
- Deploying Edge Functions
- Managing Supabase secrets
- Generating TypeScript types from schema
- Executing SQL with safety checks
- Checking for schema drift
- Validating environment configuration
## Prerequisites
### Required Tools
```bash
# Supabase CLI
brew install supabase/tap/supabase
# or: npm install -g supabase
# Verify installation
supabase --version
```
### Environment Variables
Before running scripts, validate credentials with:
```bash
python3 .claude/skills/supabase-cli/scripts/validate_env.py
```
Required variables:
| Variable | Description | Required For |
|----------|-------------|--------------|
| `SUPABASE_URL` | Project URL | All operations |
| `SUPABASE_ANON_KEY` | Public/anon key | Client operations |
| `SUPABASE_SERVICE_ROLE_KEY` | Service role key | Admin operations |
| `POSTGRES_DB` | Direct PostgreSQL URL | Migrations, SQL |
| `SUPABASE_ACCESS_TOKEN` | CLI access token | `supabase link`, `db push`, `gen types` |
### Getting the Supabase Access Token
The access token is required for CLI operations like linking projects, pushing migrations, and generating types.
**How to get your token:**
1. Go to https://supabase.com/dashboard/account/tokens
2. Click **"Generate new token"**
3. Give it a name (e.g., "CLI Development")
4. Copy the token (starts with `sbp_`)
**How to use it:**
Option 1: Store in `.env.local` (recommended for projects):
```bash
# .env.local (add to .gitignore!)
SUPABASE_ACCESS_TOKEN=sbp_your_token_here
```
Option 2: Export in terminal session:
```bash
export SUPABASE_ACCESS_TOKEN="sbp_your_token_here"
```
Option 3: Interactive login (opens browser):
```bash
supabase login
```
**Link your project** (required before pushing migrations):
```bash
# Extract project ref from your SUPABASE_URL (the subdomain)
# Example: https://abcdefghijkl.supabase.co → project ref is "abcdefghijkl"
supabase link --project-ref <your-project-ref>
```
## Quick Reference
| Task | Script | Example |
|------|--------|---------|
| Validate env | `validate_env.py` | `python3 scripts/validate_env.py` |
| New migration | `migration_new.ts` | `bun scripts/migration_new.ts add-users` |
| Apply migrations | `migration_apply.ts` | `bun scripts/migration_apply.ts --local` |
| Generate types | `update_types.ts` | `bun scripts/update_types.ts` |
| Run SQL safely | `safe_sql_runner.ts` | `bun scripts/safe_sql_runner.ts --query "SELECT 1"` |
| Check drift | `check_drift.sh` | `bash scripts/check_drift.sh` |
| New Edge Function | `func_new.ts` | `bun scripts/func_new.ts my-function` |
| Deploy function | `func_deploy.ts` | `bun scripts/func_deploy.ts my-function` |
| Sync secrets | `secret_sync.py` | `python3 scripts/secret_sync.py --dry-run` |
| Manage secrets | `manage_secrets.py` | `python3 scripts/manage_secrets.py list` |
| Reset local DB | `reset_local.ts` | `bun scripts/reset_local.ts` |
| Run DB tests | `test_db.ts` | `bun scripts/test_db.ts` |
| Scaffold RLS | `scaffold_rls.ts` | `bun scripts/scaffold_rls.ts users --tenant` |
## Workflow Patterns
### Migration Workflow
1. **Create migration:**
```bash
bun .claude/skills/supabase-cli/scripts/migration_new.ts add_user_roles
```
2. **Edit the generated file** in `supabase/migrations/`
3. **Apply locally first:**
```bash
bun .claude/skills/supabase-cli/scripts/migration_apply.ts --local
```
4. **Check for drift:**
```bash
bash .claude/skills/supabase-cli/scripts/check_drift.sh
```
5. **Apply to remote (with confirmation):**
```bash
bun .claude/skills/supabase-cli/scripts/migration_apply.ts --remote --confirm
```
6. **Update TypeScript types:**
```bash
bun .claude/skills/supabase-cli/scripts/update_types.ts
```
### Edge Function Development
1. **Scaffold new function:**
```bash
bun .claude/skills/supabase-cli/scripts/func_new.ts webhook-handler --template webhook
```
2. **Test locally:**
```bash
supabase functions serve webhook-handler
```
3. **Deploy:**
```bash
bun .claude/skills/supabase-cli/scripts/func_deploy.ts webhook-handler
```
### Secret Management
1. **Sync .env to remote:**
```bash
python3 .claude/skills/supabase-cli/scripts/secret_sync.py --prefix APP_ --dry-run
python3 .claude/skills/supabase-cli/scripts/secret_sync.py --prefix APP_
```
2. **List remote secrets:**
```bash
python3 .claude/skills/supabase-cli/scripts/manage_secrets.py list
```
### Local Development Cycle
1. **Reset and reseed local database:**
```bash
bun .claude/skills/supabase-cli/scripts/reset_local.ts
```
2. **Run database tests:**
```bash
bun .claude/skills/supabase-cli/scripts/test_db.ts
```
### RLS Policy Scaffolding
Generate RLS policies for new tables:
```bash
# Standard user-based policies
bun .claude/skills/supabase-cli/scripts/scaffold_rls.ts products
# Multi-tenant policies (for restaurant_id based isolation)
bun .claude/skills/supabase-cli/scripts/scaffold_rls.ts orders --tenant
# Output to migration file
bun .claude/skills/supabase-cli/scripts/scaffold_rls.ts menu_items --tenant --output supabase/migrations/015_rls.sql
```
## Safety Guidelines
### SQL Classification
Scripts classify SQL statements by risk level:
| Level | Statements | Behavior |
|-------|------------|----------|
| **Safe** | SELECT, EXPLAIN, SHOW | Execute immediately |
| **Write** | INSERT, UPDATE, DELETE, ALTER, CREATE | Require transaction wrap |
| **Dangerous** | DROP, TRUNCATE, DELETE (no WHERE) | Require `--confirm` flag |
### Remote Operation Rules
The following require explicit `--confirm` flag:
- Migrations to remote database
- Dangerous SQL on remote
- Secret deletion
### Pre-Deployment Checks
Before deploying Edge Functions:
- TypeScript compilation check
- Function file existence validation
- Size limits verification
## References
For detailed information:
| Topic | Reference File |
|-------|---------------|
| CLI commands | `references/cli-commands.md` |
| Migration patterns | `references/migration-patterns.md` |
| Troubleshooting | `references/troubleshooting.md` |
## Error Handling
When scripts detect missing credentials, they output in this format:
```
MISSING: SUPABASE_SERVICE_ROLE_KEY
ASK_USER: Please provide your Supabase Service Role Key.
LOCATION: Dashboard > Project Settings > API > service_role key
```
Claude should parse this and use AskUserQuestion to prompt for the missing credential.
## Integration
**Pairs with:**
- `/plan-feature` - Database schema design during feature planning
- `brainstorm` - Architecture decisions before migrations
- `beautiful-code` - TypeScript type generation quality
Files in this skill
- SKILL.md
- references/cli-commands.md
- references/migration-patterns.md
- references/troubleshooting.md
- scripts/check_drift.sh
- scripts/func_deploy.ts
- scripts/func_new.ts
- scripts/manage_secrets.py
- scripts/migration_apply.ts
- scripts/migration_new.ts
- scripts/reset_local.ts
- scripts/safe_sql_runner.ts
- scripts/scaffold_rls.ts
- scripts/secret_sync.py
- scripts/test_db.ts
- scripts/update_types.ts
- scripts/validate_env.py
Attribution
Comments
Loading comments…