Vercel Composition Patterns
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
A skill your agent uses when users report access denied errors, see wrong data, RLS policies are not working, or when troubleshooting Row-Level Security issues in Butterbase
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install butterbase-ai/butterbase-skills debug-rls --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/debug-rls .claude/skills/debug-rls && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .claude/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rlsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install butterbase-ai/butterbase-skills debug-rls --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/debug-rls .agents/skills/debug-rls && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .agents/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install butterbase-ai/butterbase-skills debug-rls --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/debug-rls .cursor/skills/debug-rls && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .cursor/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/butterbase-ai/butterbase-skills.git --path skills/debug-rls--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install butterbase-ai/butterbase-skills debug-rls --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/debug-rls .gemini/skills/debug-rls && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .gemini/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install butterbase-ai/butterbase-skills debug-rlsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/debug-rls .github/skills/debug-rls && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .github/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install butterbase-ai/butterbase-skills debug-rls --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/debug-rls .opencode/skills/debug-rls && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "debug-rls" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/debug-rls into .opencode/skills/debug-rls/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-rls", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
debug-rlsA skill your agent uses when users report access denied errors, see wrong data, RLS policies are not working, or when troubleshooting Row-Level Security issues in Butterbase
Debug Rls is an agent skill from butterbase-ai/butterbase-skills. Use when users report access denied errors, see wrong data, RLS policies are not working, or when troubleshooting Row-Level Security issues in Butterbase
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. The repository describes itself as: Plugin for Butterbase.ai. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aa8ae69. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Debug Rls loads about 3.5k tokens when it runs. Until then it costs about 41 tokens; SKILL.md has 1,638 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from butterbase-ai/butterbase-skills at commit aa8ae69, republished under its MIT licence (© butterbase-ai). 1,638 words, ~3,522 tokens.
.claude/skills/debug-rls/SKILL.md (or your agent's skills folder).Systematic methodology for debugging Row-Level Security issues in Butterbase. Uses role simulation (as_role/as_user parameters) to verify policy behavior without needing real user sessions.
Row-Level Security (RLS) in Butterbase controls which rows each database role can see or modify. When RLS is misconfigured, users may see no data, too much data, or get unexpected errors on insert. This skill walks through a repeatable four-step process to identify and fix the root cause.
Key principle: MCP tools default to the service key (bb_sk_...), which bypasses all RLS. Always use as_role/as_user to simulate the role your frontend actually uses.
Match the symptom your user reports to the most likely cause before diving into the full protocol.
| Symptom | Likely cause |
|---|---|
| User sees no rows | RLS enabled but no policy for butterbase_user role |
| User sees ALL rows | RLS not enabled on the table, or request uses service key (bb_sk_) |
Insert fails with AUTH_RLS_POLICY_VIOLATION | No INSERT policy, or user_column not auto-populated |
| User sees other users' data | Policy USING expression is wrong, or user isolation not set up |
| Anonymous user gets 403 | No policy for butterbase_anon role |
| Works in MCP tools but not from frontend | MCP uses service key (bypasses RLS); frontend uses end-user JWT |
Butterbase automatically assigns a database role based on the auth header of each request. You never create these roles — they are built in.
| Auth header | Database role | Behavior |
|---|---|---|
| None | butterbase_anon | Default deny. Only sees rows allowed by explicit anon policies. |
| Valid end-user JWT | butterbase_user | current_user_id() returns their UUID. Sees rows matching their policies. |
API key (bb_sk_...) | butterbase_service | Bypasses ALL RLS. Sees everything. Used by MCP tools and admin operations. |
Important: When you call select_rows or insert_row without as_role, you are always running as butterbase_service. This means the result tells you nothing about what a real user would see. Use as_role to simulate the correct role.
Work through these steps in order. Each step narrows down the cause.
Call manage_rls with action: "list" for the app_id:
manage_rls(app_id: "app_abc123", action: "list")Returns { policies: [...], tables_with_rls: [...] }. The tables_with_rls array shows which tables have RLS turned on but no policies yet (effective default deny).
A table with RLS enabled but zero policies is inaccessible to
butterbase_anonandbutterbase_user. Thebutterbase_servicerole is unaffected.
Read each policy's fields carefully:
| Field | What it means |
|---|---|
policyname | Human-readable name for the policy |
cmd | Which SQL command it applies to: SELECT, INSERT, UPDATE, DELETE, or ALL |
qual | The USING expression — filters which rows are visible or affected |
with_check | The WITH CHECK expression — validates new/updated row data on write |
roles | Which database role(s) this policy applies to |
Common issues to look for:
butterbase_user but not butterbase_anon (anonymous users blocked)SELECT but not INSERT (reads work, writes fail)USING expression references the wrong column (e.g., owner_id instead of user_id)ALL commands but the WITH CHECK expression is missing (inserts may fail silently)Use the as_role and as_user parameters on select_rows and insert_row to simulate each role. This is the most direct way to reproduce what a real user experiences.
# Test SELECT as an authenticated user
select_rows(
app_id: "app_abc123",
table: "posts",
as_role: "user",
as_user: "user-uuid-here"
)
# Test SELECT as anonymous
select_rows(
app_id: "app_abc123",
table: "posts",
as_role: "anon"
)
# Test INSERT as an authenticated user
insert_row(
app_id: "app_abc123",
table: "posts",
data: { title: "Hello" },
as_role: "user",
as_user: "user-uuid-here"
)Compare results between roles:
| Scenario | Expected result |
|---|---|
No as_role (service) | All rows returned, inserts succeed — RLS bypassed |
as_role: "user" | Only the user's own rows (if isolation policy exists) |
as_role: "anon" | Only publicly readable rows (if anon policy exists), or empty |
If results differ from expectations, you have confirmed which role/command combination is misconfigured.
Without
as_role, MCP tools always use the service key and bypass RLS. Never use this to validate that RLS is working.
This step specifically diagnoses AUTH_RLS_POLICY_VIOLATION on INSERT.
as_role: "user"):insert_row(
app_id: "app_abc123",
table: "posts",
data: { title: "Test post" },
as_role: "user",
as_user: "user-uuid-here"
)Check if the user_id / author_id column was auto-populated in the returned row.
If the column is NULL or missing from the response, the auto-populate trigger is missing. The RLS policy requires user_id = current_user_id(), but the column was never filled in, so the WITH CHECK fails.
Root cause: enable_rls + create_policy (without user_column) does not install an auto-populate trigger. Clients would need to manually include the user column in every POST body — which most frontends don't do.
Fix: See Fix 1 or Fix 3 in the next section.
Four ready-to-use recipes. Copy the MCP tool call that matches your situation.
Use this when a table has no RLS at all and you want users to only see their own rows.
manage_rls(
app_id: "app_abc123",
action: "create_user_isolation",
table_name: "posts",
user_column: "author_id"
)What this creates automatically:
author_id = current_user_id()::uuid for ALL commandsauthor_id from the JWT on INSERT (clients don't need to send it)butterbase_service always passes through (built into the platform)This is the recommended starting point for any user-owned data table.
Use this when you want anonymous users (or all authenticated users) to be able to read certain rows — for example, published blog posts or public profiles.
manage_rls(
app_id: "app_abc123",
action: "create_policy",
table_name: "posts",
policy_name: "public_read_published",
command: "SELECT",
role: "anon",
using_expression: "published = true"
)This lets anonymous users read posts where published = true. They still cannot read unpublished posts or write anything.
To also allow authenticated (non-anonymous) users to read public rows, add a second policy with
role: "user"and the sameusing_expression.
Alternatively, if you haven't set up user isolation yet, use the public_read_column shorthand:
manage_rls(
app_id: "app_abc123",
action: "create_user_isolation",
table_name: "posts",
user_column: "author_id",
public_read_column: "published"
)This sets up user isolation and adds permissive SELECT policies for both butterbase_user and butterbase_anon to read rows where published = true — in a single call.
Use this when inserts fail with AUTH_RLS_POLICY_VIOLATION and the user column is NULL after insert (diagnosed in Step 4).
Option A — Recommended: replace with create_user_isolation
The cleanest fix if you're starting fresh or can replace the existing policy:
manage_rls(
app_id: "app_abc123",
action: "create_user_isolation",
table_name: "posts",
user_column: "author_id"
)Always includes the auto-populate trigger. No manual step needed.
Option B — additive: pass user_column on create_policy
Use this when you want to keep existing policies but just install the trigger:
manage_rls(
app_id: "app_abc123",
action: "create_policy",
table_name: "posts",
policy_name: "posts_user_insert",
command: "INSERT",
role: "user",
with_check_expression: "author_id = current_user_id()::uuid",
user_column: "author_id"
)Passing user_column to create_policy installs the auto-populate trigger alongside the policy.
Without the trigger: clients must include the user column (
author_id,user_id, etc.) in every POST body. Most frontends don't do this, causing all inserts to fail with RLS violations.
Use this when you need to enforce a condition that involves another table — for example, only allowing comments on published posts.
manage_rls(
app_id: "app_abc123",
action: "create_policy",
table_name: "comments",
policy_name: "comments_on_public_posts_only",
command: "INSERT",
role: "user",
with_check_expression: "EXISTS (SELECT 1 FROM posts WHERE posts.id = post_id AND posts.published = true)",
restrictive: true
)Why restrictive: true?
A RESTRICTIVE policy is AND'd with all permissive policies. Without it, if the user isolation policy already passes (because user_id = current_user_id()), the cross-table check would never be evaluated — users could comment on private posts.
Setting restrictive: true ensures this check runs in addition to any permissive policies, so both conditions must be satisfied.
Use RESTRICTIVE policies sparingly — only when a condition must never be bypassed by another policy.
| Expression | Returns | Used in |
|---|---|---|
current_user_id() | Authenticated user's UUID as text | USING, WITH CHECK |
current_user_id()::uuid | Same, cast to UUID type | When user_column is UUID type |
Use current_user_id() (text) when your user column is TEXT. Use current_user_id()::uuid when your user column is UUID. Mismatched types cause silent policy failures.
| Clause | Purpose | Used for commands |
|---|---|---|
USING | Filter which rows are visible or affected by the operation | SELECT, UPDATE, DELETE, ALL |
WITH CHECK | Validate that new or updated row data satisfies the expression | INSERT, UPDATE, ALL |
For ALL command policies, both USING and WITH CHECK may apply:
USING is evaluatedWITH CHECK is evaluated| Policy type | Behavior |
|---|---|
| PERMISSIVE (default) | Multiple permissive policies are OR'd — any one passing grants access |
| RESTRICTIVE | AND'd with permissive policies — must pass in addition to at least one permissive |
Example: If a table has two permissive policies (user isolation + public read), a row is visible if either passes. If you add a restrictive policy, the row is only visible if the restrictive condition also passes.
After applying any fix, run through this checklist to confirm correct behavior:
manage_rls (action: "list") shows the expected policies for the tableselect_rows with as_role: "user" returns only the user's own rowsselect_rows with as_role: "anon" returns only publicly visible rows (or empty if no anon policy)select_rows without as_role (service) returns all rows (confirms RLS is only blocking end-users, not admin)insert_row with as_role: "user" succeeds and the user column is auto-populatedinsert_row with as_role: "anon" fails (unless you explicitly added an anon INSERT policy)select_rows with as_role: "user" for a different user's UUID does not return the first user's rows| Anti-pattern | Problem | Fix |
|---|---|---|
Using select_rows without as_role to verify RLS | Service key bypasses RLS — result is meaningless for verification | Always use as_role: "user" or as_role: "anon" |
manage_rls action create_policy without user_column | No auto-populate trigger; clients must send user column manually | Use action: "create_user_isolation" or pass user_column to create_policy |
Single policy with cmd: "ALL" but no WITH CHECK | INSERT/UPDATE may silently pass or fail depending on expression | Explicitly provide with_check_expression for write commands |
Relying on butterbase_service policies for end-user access | Service bypass is always on; end-users use butterbase_user or butterbase_anon | Write separate policies for each end-user role |
| Missing policy for one role while having it for another | Authenticated users may see data that anonymous users cannot, or vice versa — may be intentional but often a bug | Audit all roles with manage_rls (action: "list") |
If a docs/butterbase/00-state.md exists in the working directory, prefer invoking via /butterbase-skills:journey-rls so the journey orchestrator stays in sync.
© butterbase-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/debug-rls of butterbase-ai/butterbase-skills.
Open the folder on GitHubat commit aa8ae69
Debug Rls next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Debug Rls this skillbutterbase-ai/butterbase-skills | 534 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 59 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Typescript Advanced Typesrolling-scopes/rsschool-app | 10k | 25 repos | ~4.2k | Automated safety check: Pass | MPL-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT |
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
rolling-scopes/rsschool-app
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
butterbase-ai/butterbase-skills
A skill your agent uses when calling the app's AI gateway from agent tools — chat completions, embeddings, listing models, configuring defaults or BYOK, reading token/cost usage
butterbase-ai/butterbase-skills
A skill your agent uses when configuring OAuth providers (Google/GitHub/Apple/X/etc.), setting up post-login auth hooks, tuning JWT lifetimes, or generating service API keys
butterbase-ai/butterbase-skills
A skill your agent uses when building a new Butterbase app from scratch, creating a full-stack application, or when the user asks to set up a complete backend with database, auth, and deployment
butterbase-ai/butterbase-skills
A skill your agent uses when contributing to the Butterbase codebase, adding new MCP tools, creating API routes, writing migrations, or understanding the monorepo architecture
butterbase-ai/butterbase-skills
A skill your agent uses when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages
butterbase-ai/butterbase-skills
A skill your agent uses when building stateful per-key actors — chat rooms, multiplayer rooms, rate limiters, long-running agents, leaderboards — that need persistent in-memory + storage state…
Categories
A skill your agent uses when users report access denied errors, see wrong data, RLS policies are not working, or when troubleshooting Row-Level Security issues in Butterbase. Debug Rls is an agent skill from butterbase-ai/butterbase-skills.
Debug Rls fits situations like: users report access denied errors; RLS policies are not working; troubleshooting Row-Level Security issues in Butterbase.
Run `npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a claude-code`. Or copy the skill folder (skills/debug-rls in butterbase-ai/butterbase-skills) into .claude/skills/debug-rls in your project. Claude Code loads it when a task matches its description.
Run `npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a codex`. Or copy the skill folder (skills/debug-rls in butterbase-ai/butterbase-skills) into .agents/skills/debug-rls in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add butterbase-ai/butterbase-skills --skill debug-rls -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-rls, .gemini/skills/debug-rls, .github/skills/debug-rls and .opencode/skills/debug-rls in your project.
SKILL.md names no scripts, command-line tools or credentials: Debug Rls is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Debug Rls is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Debug Rls: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 296k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
butterbase-ai (a GitHub organization) maintains it in butterbase-ai/butterbase-skills, which has 534 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 5, 2026.
Source: butterbase-ai/butterbase-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.