DEV Community

Skillselion
Skillselion

Posted on Originally published at skillselion.com

Supabase promoted its Postgres skill's security tier to CRITICAL in January. The shelf behind it has not gained a file since.

Agent knowledge skills ship a priority table. Eight tiers, CRITICAL down to LOW, one prefix per tier, and it reads as a map of what is inside the bundle. It is not. It is a map of what the authors think matters, and those two things drift apart in a way you can watch commit by commit.

Here is the case I read this morning, in supabase/agent-skills. On 2026-01-16 the Postgres skill's table ranked Security and RLS fifth, at MEDIUM-HIGH. Six days later two commits moved it to third, at CRITICAL:

0ffac72  2026-01-22T08:20:54Z  bump security and RLS to critical
a1fbd23  2026-01-22T08:32:12Z  turn rls basics critical
Enter fullscreen mode Exit fullscreen mode

Neither commit added a security rule file. There were three that day. There are three now, out of thirty-one, seven and a half months later, while the bundle grew by one rule in a different tier. The label moved two ranks and one impact level. The material behind it did not move at all.

That is not misconduct and the skill is a good one. It is a reason to stop reading tier labels as a proxy for depth, and I want to show you the three checks that replace them. Disclosure: I run Skillselion, a directory of agent skills ranked by install count, and I read this bundle while writing its Supabase Postgres Best Practices deep dive.

Check 1: count the reference directory, not the tiers

supabase-postgres-best-practices has 386,740 installs (skills.sh registry, September 5, 2026). Its table promises eight categories. Its references/ directory holds thirty-one rule files plus three meta files, and the split is this:

Prefix Files Table priority
schema- 6 4, HIGH
query- 5 1, CRITICAL
conn- 4 2, CRITICAL
data- 4 6, MEDIUM
lock- 4 5, MEDIUM-HIGH
monitor- 3 7, LOW-MEDIUM
security- 3 3, CRITICAL
advanced- 2 8, LOW

Source: GitHub listing of skills/supabase-postgres-best-practices/references, read 2026-09-06

Security is third by stated priority and seventh by volume. Only the LOW tier is thinner. Schema design, ranked below it, carries twice the material.

Now open the three files themselves, because each rule carries its own impact: line and inside the CRITICAL security tier they read:

File Own impact:
security-rls-basics.md CRITICAL
security-rls-performance.md HIGH
security-privileges.md MEDIUM

Source: frontmatter of the three references/security-*.md files, read 2026-09-06

Two thirds of the CRITICAL security tier does not describe itself as critical. The tier label is the loudest thing in the file and the least specific thing in the bundle.

The three that exist are good, and security-rls-basics.md is the one to read even if you never install anything:

-- Relying only on application to filter
select * from orders where user_id = $current_user_id;

-- Bug or bypass means all data is exposed!
select * from orders;  -- Returns ALL orders
Enter fullscreen mode Exit fullscreen mode

Source: references/security-rls-basics.md, "Incorrect (application-level filtering only)" block

security-privileges.md annotates grant all privileges on all tables in schema public to app_user with -- Any SQL injection becomes catastrophic. Fifteen good minutes. Three files.

Check 2: does the metadata agree with the changelog?

Supabase's frontmatter still says this today:

version: "1.1.1"
date: January 2026
Enter fullscreen mode Exit fullscreen mode

Source: SKILL.md frontmatter, read 2026-09-06

The CHANGELOG shipped in the same directory has its most recent entry at 1.6.0, dated 2026-07-30. Five minor versions and six months separate what the file says about itself from what the file is. The January date is a creation stamp, accurate when written and never touched since.

Harmless until your install tooling or a freshness check reads a version string to decide whether to re-pull. This one has been wrong for half a year, and it never errors, because a file reporting on itself cannot report that it is stale.

Check 3: do the rules teach the broken version first?

Every rule file in the bundle leads with the mistake before the fix, and that is documented policy rather than a habit I inferred. references/_contributing.md names it:

Always show the problematic pattern first, then the solution. This trains agents to recognize anti-patterns.

Source: references/_contributing.md, "Error-First Structure"

This is the single best thing in the bundle and it is worth demanding from any knowledge skill you install. An agent asked to review a schema somebody else wrote has to recognise the anti-pattern in the wild, which means it must have seen the anti-pattern labelled, next to its replacement. A rule file that shows only correct code teaches the agent to write, not to review.

Where did this table shape come from?

Worth knowing, because it explains why the tier labels are so uniform across vendors: the shape is not Supabase's. Vercel committed it first.

Supabase's opening sentence:

Comprehensive performance optimization guide for Postgres, maintained by Supabase. Contains rules across 8 categories, prioritized by impact to guide automated query optimization and schema design.

Source: supabase/agent-skills, skills/supabase-postgres-best-practices/SKILL.md, read 2026-09-06

Vercel's:

Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 70 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.

Source: vercel-labs/agent-skills, skills/react-best-practices/SKILL.md, read 2026-09-06

The longest identical run is nine words: across 8 categories, prioritized by impact to guide automated. Nine words is short enough to be coincidence on its own. Three byte-identical headings (## When to Apply, ## Rule Categories by Priority, ## How to Use), two byte-identical lead-ins (Reference these guidelines when: and Each rule file contains:) and a priority table with the same header row, exactly eight rows and the same advanced- bottom tier are not.

File First commit
vercel-labs/agent-skills react SKILL.md 2026-01-14 02:35Z
supabase/agent-skills postgres SKILL.md 2026-01-16 02:52Z

Two days, and read that second row carefully if you go checking. Supabase's file has been renamed twice, from postgresql-best-practices to postgres-best-practices to supabase-postgres-best-practices, so GitHub's per-path history reports a January 26 first commit and will tell you the gap was twelve days. Read the tree at the repository's first commit instead. The opening sentence, the three headings and the eight-row table are all there on January 16, at version 0.1.0.

I read the README, CONTRIBUTING, AGENTS and CLAUDE files in both repositories and found no mention in either direction. Both SKILL.md files carry license: MIT in their own frontmatter, which permits exactly this, though only Supabase ships an actual LICENSE file.

So the honest word is reuse, and what it tells you as a reader is more useful than any accusation. A house style for vendor knowledge skills exists: thin index, deep per-rule reference files, impact tiers as the organizing idea, error first inside each rule. It travels. You will meet it again, which is exactly why the shape has stopped being a signal and the three checks above have to do that work instead.

Vercel's version is the fuller build of the same idea. Its rules/ directory really does hold seventy rule files behind the seventy the header claims, plus a pipeline that compiles and tests them, and you can read what is in it on the Vercel React Best Practices listing.

Run the three checks on the rest of your database shelf

Counting a reference directory takes a minute and sorts a category faster than an install count will. The Prisma Postgres, Prisma Database Setup and Prisma Client API skills are the obvious next three. Outside Postgres, Azure Kusto and Lark Base sit on the same backend and data category page.

The checks generalise past databases, and the interesting cases are the ones that answer "where should the knowledge live" differently. Web Design Guidelines is a thin index with nothing behind it at all. Agent Browser ships a stub and fetches its real instructions from a CLI at runtime, version matched so they cannot go stale. The shadcn skill shells out for live project config rather than trusting the model's memory of the registry.

Should you install supabase-postgres-best-practices?

Yes, if an agent writes SQL that reaches production, on Supabase or anywhere else. The frontmatter scopes it to "Postgres running anywhere" and the rules are standard Postgres. The priority ordering is sound, the error-first format is the best teaching shape I have seen in a knowledge skill, and the three security files are worth the read on their own. Skip it if your database work is read-only analytics against a warehouse you do not own. Adjust your expectations on depth before you install rather than after: eight tiers sounds comprehensive and thirty-one files is what arrives.

npx skills add https://github.com/supabase/agent-skills --skill supabase-postgres-best-practices
Enter fullscreen mode Exit fullscreen mode

FAQ

Did Supabase copy Vercel's skill?
The two files share three byte-identical headings, two byte-identical lead-ins, a nine-word run in the opening sentence and a priority table of the same shape, and Vercel's was committed two days earlier. Neither repository credits the other, and both SKILL.md files declare license: MIT, so the reuse is permitted. Commit dates document the direction. Nothing documents the intent.

Does supabase-postgres-best-practices only work with Supabase?
No. The frontmatter scopes it to "Postgres best practices maintained by Supabase, for Postgres running anywhere". The rules are standard Postgres: indexes, pooling, RLS, locking, schema design. Individual rule files add Supabase-specific notes where the platform differs.

Eight categories sounds big. How many rules actually ship?
Thirty-one reference files plus three meta files, spread unevenly: schema six, query five, connections four, data four, locking four, monitoring three, security three, advanced two. The eight tiers describe priority, not volume.

Where can I read the full breakdown?
The line-by-line read is in the Supabase Postgres Best Practices deep dive, and the companion pieces are in the deep dive series index. For why vendors are shipping these at all, Are vendors replacing community Claude Code skills? has the wider argument.

Last updated: September 6, 2026. Install counts from the skills.sh registry as of September 5, 2026. File quotes, commit hashes and dates, and the reference directory listing were read from GitHub on September 6, 2026.

Top comments (0)