Skills Architecture and Progressive Disclosure
Skills are folders containing a skill.md file, optional reference markdown files, and optional scripts. The front matter loads first: just the name and a one-line description. The body only loads once the agent decides it needs more. Rodrigues calls this progressive disclosure. The agent gets enough to know whether to read further, not the whole document upfront.
MCP and skills solve different problems. MCP handles integrations where the agent needs a remote service and cannot rely on local bash. Skills inject context and scripts that run locally. Use both.
What Happens Without a Skill: The RLS Bypass Bug
Rodrigues asked Claude to build a department_stats view (head count and average salary per department) via the Supabase MCP server. Claude listed the tables, ran the migration, and reported success. Watching the live view creation without skill (23:24) revealed the problem: Alice, a regular employee, could see every department’s salary data.
Postgres views inherit the credentials of the user who created them, not the RLS policies on the underlying tables. Without a security_invoker = true flag, row-level security is bypassed entirely. Claude’s training data did not include that PostgreSQL default, so it skipped the flag.
Building and Installing the Security Skill
The Supabase security skill encodes three PostgreSQL rules as a Markdown checklist: enable RLS on public schemas, apply security_invoker = true on views (since Postgres 15), and check exposed policies. Rodrigues installed it via Vercel’s npx skills package, which created a symlink to ~/.claude/skills/ so Claude Code could find it. From his experiments: writing “use [skill name]” as the description raised the load rate above noun-only labels.
After a database reset he ran the same prompt and triggered the skill-loaded run with security_invoker (48:36). The migration now included WITH (security_invoker = true). The behavior changed the moment the skill loaded.
Context Cost, Token Efficiency, and Tool Search
With the Supabase security skill loaded, the context meter showed 1,300 tokens for that skill. Without it, only the tiny front matter descriptions remain in context. The contrast makes the case for progressive disclosure: a large MCP server loads all tool descriptions at once, every session.
Claude Code’s tool search brings on-demand loading to MCP tools, but only for Claude Code. Rodrigues noted it is not yet an MCP protocol standard. The MCP co-founder was at the same conference, and the roadmap from the New York MCP Dev Summit the prior week included adding progressive disclosure to the protocol itself.
Eval-Driven Development for Skills
Rodrigues structured evals using the Agent Skills open standard: an eval.json with an array of scenarios (prompt, expected output, assertions). He ran two conditions, with and without the skill, using Claude Code headless in print mode. A Python script reset the database before each run. The headless eval run with and without skill (01:07:52) produced a grading.json per condition.
The results inverted: with-skill graded failed, without-skill passed. The assertion checked the wrong Postgres metadata column to verify security_invoker, so the LLM-as-judge scored against data that was not there. Wrong assertions produce wrong verdicts, regardless of whether the skill worked.
Q&A
How many skills should you install, and is there a limit before it becomes a problem? Locally, Rodrigues does not constrain himself; progressive disclosure keeps unused skills cheap (just front matter). In production and CI, keep only the skills actually used for that specific pipeline. ▶ 1:14:23
For a very large database schema, is it better to use a skill or an MCP server to progressively load it for the agent? Use an MCP tool to extract and chunk the schema (no local environment dependency, authentication baked in), and wrap it with a skill that instructs the agent to call the tool in chunks rather than loading the whole schema at once. ▶ 56:05
Notable Quotes
it’s actually quite human readable documents Pedro Rodrigues · ▶ 36:04
bypasses the role level security uh that Pedro Rodrigues · ▶ 34:20
the behavior changed uh once it loaded the Pedro Rodrigues · ▶ 52:10
Key Takeaways
- Skills use progressive disclosure to load only enough context for the agent to decide whether to read the rest.
- Postgres views bypass row-level security by default; a skill encoding that rule fixes the flaw reliably.
- Eval-driven development catches regressions in skill behavior, but wrong assertions can invert results even when the skill works.