火山引擎 Supabase . 管理 AIDAP Supabase 项目、工作区、数据库、分支、Auth、Realtime、Edge Functions、Storage、API Keys、SQL、Schema 变更、TypeScript 类型生成和 MCP 集成。
日本語の概要は準備中です。原文の説明を表示しています。
火山引擎 Supabase 实例的直连开发与运维 Skill。
使用 byted-supabase-cli 管理 Auth、数据库、Storage、Edge Functions、Secrets、Pages、种子数据、类型生成和 MCP;当用户提供 Supabase URL、anon key、service-role key、database URL,或要求直接操作某个 Supabase 实例时使用。
日本語の概要は準備中です。原文の説明を表示しています。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
使用 byted-supabase-cli 直接开发和管理用户指定的 Supabase 实例。用户只说“做一个 Todo List”或“接入 Supabase”时,不要立即执行数据库写入;先判断用户目标、检查当前绑定,再按“本地项目 → 数据模型 → 权限 → 前端调用 → 验证”的顺序引导。
默认原则:
--help 为准,不要仅凭文档猜测参数。先把用户请求归类:
如果用户只说“我要做一个 Todo List”,默认按“从零创建应用”处理,并先询问或确认:
先检查 CLI:
byted-supabase-cli --version
如果 CLI 未安装,再安装开发版 Skill 和 CLI:
npx @byted-supabase/cli@latest install --dev
然后查看命令和当前实例状态:
byted-supabase-cli --help
byted-supabase-cli link status -o json
向用户解释:link status 检查的不只是当前目录文件。CLI 可能从以下来源解析配置:
supabase/.temp/link.json;SUPABASE_URL、SUPABASE_ANON_KEY、SUPABASE_SERVICE_ROLE_KEY 环境变量。因此,“新建一个空目录”不一定等于干净环境。byted-supabase-cli init 只初始化本地项目文件,不会自动绑定远程实例。
根据状态结果继续:
mode=solo 且 linked=true:已经绑定实例。先展示脱敏后的 URL 和配置来源,并让用户确认是否为目标实例。linked=false 但检测到环境变量:提示后续命令可能使用环境变量,不要输出变量值。已绑定时可执行只读验证:
byted-supabase-cli db query \
"select current_database(), current_user" \
-o table
直接绑定远程实例需要:
--supabase-url:实例 URL;--service-role-key:必需,用于 CLI 管理和受控操作;--anon-key:可选,但前端应用通常需要。命令:
byted-supabase-cli link \
--supabase-url <url> \
--service-role-key <service-role-key> \
[--anon-key <anon-key>]
绑定前要说明:CLI 会访问 <url>/rest/v1/ 分别验证传入的 key;每个已传入的 key 都必须验证成功,未传入的 key 不执行探测。不要自行解析 JWT、猜测 key 类型或把 key 写入日志。
绑定后必须在新的 CLI invocation 中验证:
byted-supabase-cli link status -o json
至少确认:
{
"linked": true,
"type": "solo",
"solo_config_valid": true
}
如果用户还没有项目文件,先确认技术栈。用户未指定时,可推荐 React + Vite:
npm create vite@latest . -- --template react-ts
npm install
npm install @supabase/supabase-js
创建本地环境变量文件,例如 .env.local:
VITE_SUPABASE_URL=<supabase-url>
VITE_SUPABASE_ANON_KEY=<anon-key>
前端只允许使用 anon key,绝不写入 service-role key。.env.local 必须加入 .gitignore,并检查是否会被打包或提交。
创建客户端:
import { createClient } from '@supabase/supabase-js'
export const supabase = createClient(
import.meta.env.VITE_SUPABASE_URL,
import.meta.env.VITE_SUPABASE_ANON_KEY,
)
在执行数据库写操作前,明确告知用户:
以正式的用户 Todo 为例,推荐先设计为:
create table public.todos (
id bigint generated by default as identity primary key,
user_id uuid not null references auth.users(id) on delete cascade,
title text not null,
is_completed boolean not null default false,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
如果用户明确只做临时 Demo,可以说明匿名共享 Todo 与正式用户隔离方案的安全差异;不要默认创建允许所有匿名用户修改和删除数据的 policy。
正式应用启用 RLS,并按用户隔离:
alter table public.todos enable row level security;
create policy "users can view own todos"
on public.todos
for select
to authenticated
using (auth.uid() = user_id);
create policy "users can create own todos"
on public.todos
for insert
to authenticated
with check (auth.uid() = user_id);
create policy "users can update own todos"
on public.todos
for update
to authenticated
using (auth.uid() = user_id)
with check (auth.uid() = user_id);
create policy "users can delete own todos"
on public.todos
for delete
to authenticated
using (auth.uid() = user_id);
不要为了让前端请求成功而关闭 RLS,也不要用 service-role key 代替正确的 RLS 设计。
获得用户确认后,优先把 SQL 保存为项目文件,再执行:
byted-supabase-cli db query --file <sql-file>
执行后用只读查询验证表结构、RLS 和 policy:
byted-supabase-cli db query \
"select column_name, data_type
from information_schema.columns
where table_schema = 'public'
and table_name = 'todos'
order by ordinal_position" \
-o table
数据库变更验证成功后生成类型:
byted-supabase-cli gen types --lang typescript > src/types/database.ts
Todo 前端至少实现:
浏览器端使用 anon key,并通过当前登录用户触发 RLS。service-role key 只允许出现在后端或受控 CLI 中。
npm run dev
验证:
退出当前项目的实例绑定:
byted-supabase-cli unlink
必须区分两种操作:
unlink:清理当前项目的 link 状态,使下一次 CLI invocation 回到管理命令树;清理全局配置前,先列出范围并确认,不要误删 Volcengine 管理账号配置或其他项目的凭据。若用户明确要求彻底清理,先检查 CLI 实际使用的配置路径,再删除对应的 Supabase Solo profile,最后用以下命令验证:
byted-supabase-cli link status -o json
期望结果:
{
"mode": "management",
"linked": false
}
anon key 可用于公开数据面请求;不要把它当作管理权限。service-role key 具有高权限,只能用于后端或受控 CLI 操作,绝不写入前端代码、提交到仓库或发送到聊天输出。-o json 时检查 stdout 是否包含敏感字段;需要展示时只输出脱敏后的字段。按需读取对应参考:
references/command-reference.mdreferences/database-guide.mdreferences/auth-guide.mdreferences/storage-guide.mdreferences/functions-guide.mdreferences/secrets-guide.mdreferences/pages-guide.mdreferences/ai-gateway-guide.mdreferences/mcp-guide.mdreferences/security-guide.md当用户询问当前 Supabase 实例的模型查询、模型调用、Token/图片限额或 AI 用量时,先读取 references/ai-gateway-guide.md。Solo Tree 下这些操作全部走数据面:
GET /v1/modelsPOST /v1/chat/completionsGET/PUT /v1/aigateway/quota/defaultPOST /v1/aigateway/quota/users/summariesPUT /v1/aigateway/quota/users限额管理必须使用当前实例的 service-role key,不使用 Workspace/Branch 控制面参数,也不调用控制面 internal/user/* 接口。
命令参数以本地二进制为准,执行前查看:
byted-supabase-cli <command> --help
不要使用 Workspace 资源管理命令(例如 projects、branches、computes)处理实例内部资源;这些命令需要另一套账号和资源上下文。
link status -o json,确认 URL 和所需凭据状态。--help,确认参数和输出格式。-o json;需要脚本解析时保持 stdout 纯净。<PUBLIC_ENDPOINT>、<REDACTED>、<DB_HOST>。/rest/v1/、只读 API、link status 或只读 SQL。まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
火山引擎 Supabase . 管理 AIDAP Supabase 项目、工作区、数据库、分支、Auth、Realtime、Edge Functions、Storage、API Keys、SQL、Schema 变更、TypeScript 类型生成和 MCP 集成。
日本語の概要は準備中です。原文の説明を表示しています。