skills.sh All Time leaderboard
The Next New Thing · Preview

10 GitHub skills
agents actually install

Ranked by skills.sh All Time installs

find-skills

It finds the next skill when you ask how to do something.

Installs
3.4M
Stars
31,698
Rank
1 of 10
find-skills page on skills.sh
01 / 10find-skills / SKILL.md
namedescription
find-skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

Find Skills

This skill helps you discover and install skills from the open agent skills ecosystem.

When to Use This Skill

Use this skill when the user:

  • Asks "how do I do X" where X might be a common task with an existing skill
  • Says "find a skill for X" or "is there a skill for X"
  • Asks "can you do X" where X is a specialized capability
  • Expresses interest in extending agent capabilities
  • Wants to search for tools, templates, or workflows
  • Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)

What is the Skills CLI?

The Skills CLI (npx skills) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.

Key commands:

  • npx skills find [query] [--owner <owner>] - Search for skills interactively or by keyword, optionally scoped to a GitHub owner
  • npx skills add <package> - Install a skill from GitHub or other sources
  • npx skills update - Update all installed skills

Browse skills at: https://skills.sh/

How to Help Users Find Skills

Step 1: Understand What They Need

When a user asks for help with something, identify:

  1. The domain (e.g., React, testing, design, deployment)
  2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
  3. Whether this is a common enough task that a skill likely exists

Step 2: Check the Leaderboard First

Before running a CLI search, check the skills.sh leaderboard to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.

For example, top skills for web development include:

  • vercel-labs/agent-skills — React, Next.js, web design (100K+ installs each)
  • anthropics/skills — Frontend design, document processing (100K+ installs)

Step 3: Search for Skills

If the leaderboard doesn't cover the user's need, run the find command:

npx skills find [query] [--owner <owner>]

For example:

  • User asks "how do I make my React app faster?" → npx skills find react performance
  • User asks "can you help me with PR reviews?" → npx skills find pr review
  • User asks "I need to create a changelog" → npx skills find changelog

Step 4: Verify Quality Before Recommending

Do not recommend a skill based solely on search results. Always verify:

  1. Install count — Prefer skills with 1K+ installs. Be cautious with anything under 100.
  2. Source reputation — Official sources (vercel-labs, anthropics, microsoft) are more trustworthy than unknown authors.
  3. GitHub stars — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.

Step 5: Present Options to the User

When you find relevant skills, present them to the user with:

  1. The skill name and what it does
  2. The install count and source
  3. The install command they can run
  4. A link to learn more at skills.sh

Example response:

I found a skill that might help! The "react-best-practices" skill provides
React and Next.js performance optimization guidelines from Vercel Engineering.
(185K installs)

To install it:
npx skills add vercel-labs/agent-skills@react-best-practices

Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices

Step 6: Offer to Install

If the user wants to proceed, you can install the skill for them:

npx skills add <owner/repo@skill> -g -y

The -g flag installs globally (user-level) and -y skips confirmation prompts.

Common Skill Categories

When searching, consider these common categories:

Category Example Queries
Web Development react, nextjs, typescript, css, tailwind
Testing testing, jest, playwright, e2e
DevOps deploy, docker, kubernetes, ci-cd
Documentation docs, readme, changelog, api-docs
Code Quality review, lint, refactor, best-practices
Design ui, ux, design-system, accessibility
Productivity workflow, automation, git

Tips for Effective Searches

  1. Use specific keywords: "react testing" is better than just "testing"
  2. Try alternative terms: If "deploy" doesn't work, try "deployment" or "ci-cd"
  3. Check popular sources: Many skills come from vercel-labs/agent-skills or ComposioHQ/awesome-claude-skills

When No Skills Are Found

If no relevant skills exist:

  1. Acknowledge that no existing skill was found
  2. Offer to help with the task directly using your general capabilities
  3. Suggest the user could create their own skill with npx skills init

Example:

I searched for skills related to "xyz" but didn't find any matches.
I can still help you with this task directly! Would you like me to proceed?

If this is something you do often, you could create your own skill:
npx skills init my-xyz-skill
AudienceLast week’s vote
Last week

Last week we asked people if they wanted skills.

Yes 32 · No 9 · 41 clear votes

Keep covering skills on the show? Yes 32 (78%), No 9 (22%), 41 clear votes
  • @louisgleasonMake a top 10 skills & Top 10 Repos video! More content please
  • @RannSakanda-y3pYess skills, yes!!! Skilllllllls
  • @blacklogicKEEP SKILLS! It helps less capable models to become more capable when they have specific instructions
  • @Cyborg_videoeditorPlease keep posting about Skills. It is important and really add up value
  • @bigwillwiththebeats6845I love when you give me new skills that I haven't heard about I say keep skills in for sure!!
  • @trash_the_placeKeep Skills in the show. The skills show us what problems other people are having and help us think about solutions for problems we are facing. We can use the skill as is or modify them for our own needs.
  • @VonkelverhaleNo please keep skills because i actually use many and they made my work so much better and faster. Removing skill will be at a loss to us users
  • @dalgairnsLove skills
AudienceThis week’s ask
This week

This week I want to know if you want a Product Hunt for new GitHub repos.

You send in a brand-new repo. I look at it. If it is real, it goes on a board.

Then we watch it grow — stars, screenshots, the same way Product Hunt watches a launch.

Comment yes or no. If you want it, say what would make you actually use it.

01 / 10find-skills
Creator
Vercel Labs
Vercel Labs
github.com/vercel-labs

About the creator

Vercel Labs is the experiments arm of Vercel, the company behind Next.js, and Andrew Qu there wrote the first find-skills file in January 2026.

About the repo

vercel-labs/skills is the npx skills CLI itself, the installer behind every number on this list, and find-skills ships inside it as the starter skill.

Star history for vercel-labs/skills
01 / 10find-skills
When

You say it. The agent goes looking.

You say: “Find a skill for writing tests.”

The agent searches the open list and brings back the ones that fit.

claude
> Find a skill for writing tests
⏺Skill(find-skills)
⎿  Loaded find-skills
⏺Bash(npx skills find testing)
⎿  2 results
⏺Two fit, both well used:
test-driven-development from obra/superpowers, 227K installs. Red, green, refactor, enforced.
webapp-testing from anthropics/skills, 157K installs. Drives a browser to test the running app.
Want me to install either one?
>
? for shortcuts
01 / 10find-skills
Worth noticing

This is the finder. Not the craft.

It does not write the tests or design the page. It finds the skill that does.

01 / 10find-skills
How

One install. Then you ask.

npx skills add https://github.com/vercel-labs/skills --skill find-skills

Search. Then a short list of skills that fit.

claude
> How do I make my React app faster?
⏺Skill(find-skills)
⎿  Checked the skills.sh leaderboard
⏺I found a skill that might help.
vercel-react-best-practices gives React and Next.js performance rules from Vercel Engineering. 715K installs.
To install it:
npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices
>
? for shortcuts

grill-me

A relentless interview that stress-tests your plan before you build it.

Installs
1.1M
Stars
262,655
Rank
2 of 10
grill-me page on skills.sh
02 / 10grill-me / SKILL.md
namedescriptiondisable-model-invocation
grill-me
A relentless interview to sharpen a plan or design.
true

Call the Skill tool with "grilling".

02 / 10grill-me
Creator
Matt Pocock
Matt Pocock
github.com/mattpocock

About the creator

Matt Pocock is the TypeScript educator behind Total TypeScript, a former Vercel engineer who now publishes the skills he runs from his own .agents folder.

About the repo

mattpocock/skills is his personal set of engineering and productivity skills for coding agents, and at 262K stars it is the most-starred repo on this list.

Star history for mattpocock/skills
02 / 10grill-me
When

You have a plan. You want it torn apart first.

You type /grill-me and describe the plan.

It asks numbered questions, round after round, until nothing is left assumed.

claude
> /grill-me Move our billing off Stripe Checkout onto our own payment form
⏺Skill(grill-me)
⎿  Calls grilling
⏺❓ Q1 - Why leave Checkout? Is it the fees, the design control, or something Checkout can’t do?
➡️ My guess: design control. Say so if it’s fees, that changes the answer.
❓ Q2 - Card data: Does the card number ever touch your server?
➡️ No. Use Stripe Elements so you stay out of PCI scope.
Answer these and I’ll ask the next round.
>
? for shortcuts
02 / 10grill-me
Worth noticing

The whole file is one line.

grill-me just calls the grilling skill. Two names, one interview, and both sit in this top 10.

02 / 10grill-me
How

Install once. Type the slash command.

npx skills add https://github.com/mattpocock/skills --skill grill-me

It only runs when you call it. The agent won’t start grilling on its own.

claude
> /grill-me Rebuild onboarding as a single page instead of five steps
⏺Skill(grill-me)
⎿  Calls grilling
⏺❓ Q1 - What’s failing today? Do people drop off between steps, or inside one step?
➡️ Between steps. If so, one page fixes it. If it’s inside a step, one page hides it.
❓ Q2 - Saving progress: On one page, what happens if they close the tab halfway?
➡️ Autosave each field. Otherwise you trade five small losses for one big one.
>
? for shortcuts

frontend-design

Design direction so your pages don’t look like every other AI page.

Installs
888.9K
Stars
176,463
Rank
3 of 10
frontend-design page on skills.sh
03 / 10frontend-design / SKILL.md
namedescriptionlicense
frontend-design
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
Complete terms in LICENSE.txt

Frontend Design

Approach this as the design lead at a design studio known for giving every client a distinct visual identity that is not mistaken for anyone else's. This client has already rejected proposals that felt cliché or templated, and is paying for a distinctive point of view: make deliberate, opinionated choices about palette, typography, and layout that are specific to this brief, and take aesthetic risk if justified.

Ground your designs in the subject matter

If the brief does not identify what the product or subject matter is, identify it yourself before designing, and confirm with the client. You can come up with one concrete subject, the design's audience, and the design's primary job, as a proposal. If there's any information in your memory about the client's preferences or context about what they're building, use that as a hint. The subject's industry, subject matter, materials, and vernacular are where distinctive visual choices come from — a design for a toy for girls aged 8–11 will be very aesthetically different from a dashboard for financial analysts. Build with the brief's real content and subject matter throughout.

Design principles

For web designs, the hero is the first thing viewers will see. Open with the most characteristic thing in the subject's world, in the form that is most appropriate: a headline, an image, an animation, a live demo, an interactive moment, or other treatments. Be deliberate with your choice: a big number with a small label, supporting stats, and a gradient accent is the default treatment, so only use it if that's truly the best option.

Typography carries the personality of the page. You don't need a different typeface for display or headline text and body content: use one family or two, and if two, make them clearly distinct.

Choose your typefaces deliberately, not the default families you would reach for on any other project, and set a clear type scale following the default guidance of The Elements of Typographic Style with intentional weights, widths, and spacing. When type is used as a headline or visual element, use the type treatment itself as an active part of the design, not a neutral delivery vehicle for the content.

Default to line lengths of less than 80 characters. Serif typefaces can have slightly longer line lengths; give serif body text slightly more line-height than a sans-serif.

Avoid these default typographic treatments; they are the commonest tells of a generated page:

  • Accenting just a single word or phrase in a headline, like putting one word in italic/bold or a different color.
  • Using all caps for labels.
  • Adding unnecessary typographic labels above content.

Visual structure is information. Structural devices like outlines, borders, numbering, eyebrows, dividers, labels, etc., encode useful information about the content rather than decorate it. Many generic designs use numbered markers (01 / 02 / 03), but that's only appropriate if the content actually is a sequence — like a stepped process or a timeline. Before adding numbered markers, check the content really is a sequence.

Use non-user-triggered motion sparingly and deliberately, only to draw attention. A single orchestrated moment — one page-load sequence or one reveal — lands better than scattered effects; fade-and-slide-up entrances on each section and hover transitions on every card are the generic default and read as AI-generated. Motion that answers a person's action (opening, expanding, confirming) is welcome when it shows what changed.

Consider written content carefully. Often a design brief may not contain real content, and it's up to you to come up with copy and placeholder content. Copy can make a design feel as templated as the design itself. See the below section on writing for more guidance.

Process: plan, review against the brief, build, critique

For calibration, AI-generated design right now clusters around some traits:

  1. a warm cream background (near #F4F1EA) with a high-contrast serif display and a terracotta or warm-clay accent (often near #D97757 — Anthropic's own Claude-interaction accent, so on a user's brief it reads as a tell);
  2. a near-black background with a single bright acid-green or vermilion accent;
  3. a broadsheet-style layout with hairline rules, zero border-radius, and dense newspaper-like columns;
  4. the SaaS-card kit: content chopped into identical rounded cards, one border-radius on everything regardless of hierarchy, the same soft grey shadow (rgba(0,0,0,.1)) under each, and gradient washes as decoration;
  5. template chrome that appears whatever the subject: a tracked-out ALL-CAPS eyebrow label above every heading; meta strings joined with middle dots ('A · B · C'); labels built as 'WORD — fragment' with a spaced em dash; tinted near-black (#0B0B0B, #111) standing in for black; a monospace face for small data labels; a '→' appended to link and button text.

All traits are legitimate for some briefs, but they are defaults rather than choices, and they appear regardless of subject. Where the brief pins down a visual direction, follow it exactly — the brief's own words always win, including when it asks for one of these looks. Where it leaves an axis free, don't spend that freedom on one of these defaults. As with a hired human designer, there's often a careful balance between doing what you're good at and taking each project as a chance to experiment and learn.

Work in two passes. First, brainstorm a short design plan based on the client's design brief: create a compact token system with color, type, layout, and principles.

  • Color: describe the core base palette as 4–6 named hex values.
  • Type: the typefaces and their roles.
  • Layout: a layout concept, using one-sentence prose descriptions and ASCII wireframes to ideate and compare. Include alignment guidance; should the content be left aligned, center aligned, justified?
  • Principles: the high-level guidance for what makes this page unique.

Then review that plan against the brief before building: if any part of it reads like the generic default you would produce for any similar page (work through a similar prompt to see if you arrive somewhere similar) rather than a choice made for this specific brief — revise that part, say what you changed and why. Only after you've confirmed the relative uniqueness of your design plan should you start to write the code, following the revised plan.

When writing the code, be careful of structuring your CSS selector specificities. It's easy to generate CSS classes that cancel each other out (especially with a type-based selector like .section and an element-based selector like .cta). This can happen often with padding/margin between sections.

Restraint and self-critique

Spend your boldness in one place. Let one element be the memorable thing, keep everything around it quiet and disciplined, and cut any decoration that does not serve the brief. Build to a quality floor without announcing it: responsive down to mobile, visible keyboard focus, reduced motion respected, visually accessible, harmonious color palettes. Critique your own work as you build, taking screenshots to review if your environment supports it — a picture is worth 1000 tokens. Consider Chanel's advice: before leaving the house, take a look in the mirror and remove one accessory. Human creatives have memory and always try to do something new, so if you have a space to quickly jot down notes about what you've tried, it can help you in future passes.

More on writing in design

Words appear in a design for one reason: to make it easier to understand and use. They are design content, not decoration. Bring the same intentionality and minimalism to copywriting that you would bring to spacing and color. Before writing anything, ask what the design needs to say, and how it can best be said to help the person navigate the experience.

Write from the end user's perspective. Name things by what users will understand in simple language, not by how the system is built. A user manages notifications, not webhook config. Describe what something is or does in plain terms rather than selling it. Being specific and legible to new users is always better than being clever.

Use active voice as default. A CTA says exactly what happens when it is used: "Save changes," not "Submit." An action keeps the same name through the whole flow, so the button that says "Publish" produces a toast that says "Published." The vocabulary of an interface is the signposting for someone navigating the product. Cohesion and consistency are how people learn their way around.

Treat failure and emptiness as moments for direction, not mood. Explain what went wrong and how to fix it, in the interface's voice rather than a person's. Errors don't apologize, and they are never vague about what happened. An empty screen is an invitation to act.

Keep the tone conversational: plain verbs, sentence case, no filler, with tone matched to the brand and the audience. Let each written element do exactly one job.

03 / 10frontend-design
Creator
Anthropic
Anthropic
github.com/anthropics

About the creator

Anthropic is the company that makes Claude and Claude Code, and it wrote the Agent Skills format that every skill on this leaderboard follows.

About the repo

anthropics/skills is Anthropic’s public skills repository, with document skills for PDFs, spreadsheets and slides alongside this design skill.

Star history for anthropics/skills
03 / 10frontend-design
When

You’re building a page. You want it to look like yours.

You say: “Build a landing page for my newsletter.”

The agent plans palette, type and layout for that brief before it writes a line of code.

claude
> Build a landing page for my woodworking newsletter
⏺Skill(frontend-design)
⎿  Loaded frontend-design
⏺Design plan first.
Subject: hand-cut joinery, so the palette comes from the workshop: oak, linseed, iron.
Type: one family, a wide serif set large. No second face.
Hero: a single photo of a dovetail, copy left-aligned under it. No big number, no gradient.
Checked against the brief: dropped the cream-and-terracotta default. Building now.
>
? for shortcuts
03 / 10frontend-design
Worth noticing

It names the tells.

Cream backgrounds, one accented word, ALL-CAPS labels, cards everywhere. The file lists the defaults and tells the agent not to reach for them.

03 / 10frontend-design
How

Install it. Then ask for any new UI.

npx skills add https://github.com/anthropics/skills --skill frontend-design

It plans, checks the plan against the brief, then builds.

claude
> Redesign the pricing page. It looks generic.
⏺Skill(frontend-design)
⎿  Loaded frontend-design
⏺Read(app/pricing/page.tsx)
⎿  Read 212 lines
⏺It is generic: three identical cards, same shadow, a gradient wash, an eyebrow above every heading.
Plan: one comparison table instead of cards. Boldness goes into the headline type. Everything else quiet.
Writing the code now. I’ll screenshot it and take one thing away before I show you.
>
? for shortcuts
nomiddle.com

agent-browser

A browser your agent can drive from the command line.

Installs
857.8K
Stars
42,611
Rank
4 of 10
agent-browser page on skills.sh
04 / 10agent-browser / SKILL.md
namedescriptionallowed-toolshidden
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
Bash(agent-browser:*), Bash(npx agent-browser:*)
true

agent-browser

Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with accessibility-tree snapshots and compact @eN element refs.

Install: npm i -g agent-browser && agent-browser install

Start here

This file is a discovery stub, not the usage guide. Before running any agent-browser command, load the actual workflow content from the CLI:

agent-browser skills get core             # start here — workflows, common patterns, troubleshooting
agent-browser skills get core --full      # include full command reference and templates

The CLI serves skill content that always matches the installed version, so instructions never go stale. The content in this stub cannot change between releases, which is why it just points at skills get core.

Specialized skills

Load a specialized skill when the task falls outside browser web pages:

agent-browser skills get electron          # Electron desktop apps (VS Code, Slack, Discord, Figma, ...)
agent-browser skills get slack             # Slack workspace automation
agent-browser skills get dogfood           # Exploratory testing / QA / bug hunts
agent-browser skills get derive-client     # Record a HAR, derive a standalone API client for a site
agent-browser skills get vercel-sandbox    # agent-browser inside Vercel Sandbox microVMs
agent-browser skills get protected-vercel-deployments  # Access protected Vercel deployments
agent-browser skills get agentcore         # AWS Bedrock AgentCore cloud browsers

Run agent-browser skills list to see everything available on the installed version.

Why agent-browser

  • Fast native Rust CLI, not a Node.js wrapper
  • Works with any AI agent (Cursor, Claude Code, Codex, Continue, Windsurf, etc.)
  • Chrome/Chromium via CDP with no Playwright or Puppeteer dependency
  • Accessibility-tree snapshots with element refs for reliable interaction
  • Sessions, authentication vault, state persistence, video recording
  • Specialized skills for Electron apps, Slack, exploratory testing, cloud providers

Observability Dashboard

The dashboard runs independently of browser sessions on port 4848 and can also be opened through a proxied or forwarded URL such as https://dashboard.agent-browser.localhost. Agents should stay on the dashboard origin: session tabs, status, and stream traffic are proxied internally, so session ports do not need to be exposed.

04 / 10agent-browser
Creator
Vercel Labs
Vercel Labs
github.com/vercel-labs

About the creator

Vercel Labs is the experiments arm of Vercel, the company behind Next.js, and Chris Tate there started this skill in January 2026 alongside the CLI it describes.

About the repo

vercel-labs/agent-browser is a Rust browser-automation CLI built for AI agents, driving Chrome with accessibility-tree snapshots so an agent can click, fill and screenshot any site.

Star history for vercel-labs/agent-browser
04 / 10agent-browser
When

The task lives on a website.

You say: “Log in to the dashboard and screenshot the billing page.”

The agent opens a real browser, does it, and hands back the picture.

claude
> Open staging, sign up as a test user, and tell me if it works
⏺Skill(agent-browser)
⎿  Loaded agent-browser skills get core
⏺Bash(agent-browser open https://staging.acme.app/signup)
⏺Bash(agent-browser fill @e3 "test+0915@acme.app")
⏺Bash(agent-browser click @e7)
⏺Signup works. Landed on /welcome with the confirmation banner.
One problem: the password field accepted 3 characters with no error.
Screenshot saved to signup-done.png.
>
? for shortcuts
04 / 10agent-browser
Worth noticing

The file is a stub on purpose.

It points the agent at agent-browser skills get core, so the instructions come from the installed CLI and never go stale.

04 / 10agent-browser
How

Install the CLI. Then the skill.

npm i -g agent-browser && agent-browser install

npx skills add https://github.com/vercel-labs/agent-browser --skill agent-browser

Then say what you want done in a browser.

claude
> Screenshot skills.sh and tell me what’s number one
⏺Skill(agent-browser)
⎿  Loaded agent-browser skills get core
⏺Bash(agent-browser open https://skills.sh)
⏺Bash(agent-browser snapshot)
⏺Bash(agent-browser screenshot skills-sh.png)
⏺Number one is find-skills from vercel-labs/skills with 3.4M installs.
Screenshot saved to skills-sh.png.
>
? for shortcuts

setup-matt-pocock-skills

The one-time setup that wires Matt’s engineering skills into your repo.

Installs
836.9K
Stars
262,655
Rank
5 of 10
setup-matt-pocock-skills page on skills.sh
05 / 10setup-matt-pocock-skills / SKILL.md
namedescriptiondisable-model-invocation
setup-matt-pocock-skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
true

Setup Matt Pocock's Skills

Scaffold the per-repo configuration that the engineering skills assume:

  • Issue tracker: where issues live (GitHub by default; local markdown is also supported out of the box)
  • Triage labels: the strings used for the five canonical triage roles
  • Domain docs: where CONTEXT.md and ADRs live, and the consumer rules for reading them

This is a prompt-driven skill, not a deterministic script. Explore, present what you found, confirm with the user, then write.

Process

1. Explore

Look at the current repo to understand its starting state. Read whatever exists; don't assume:

  • git remote -v and .git/config: is this a GitHub repo? Which one?
  • AGENTS.md and CLAUDE.md at the repo root: does either exist? Is there already an ## Agent skills section in either?
  • CONTEXT.md and CONTEXT-MAP.md at the repo root
  • docs/adr/ and any src/*/docs/adr/ directories
  • docs/agents/: does this skill's prior output already exist?
  • .scratch/: a sign that a local-markdown issue tracker convention is already in use
  • Is the triage skill installed? (a triage skill folder alongside this one, or triage in your available skills.) This decides whether Section B runs at all.
  • Monorepo signals: a pnpm-workspace.yaml, a workspaces field in package.json, or a populated packages/* with its own src/. These are present only in a genuinely large multi-package repo; their absence means single-context, which is almost every repo.

2. Present findings and ask

Summarise what's present and what's missing. Then take the sections in order. One section, one answer, then the next.

Lead each section with the recommended answer so the user can accept it in a word. Give a one-line explainer only when the choice genuinely branches; skip the section entirely when exploration already settled it (Section B when triage isn't installed, Section C when there's no monorepo).

Section A: Issue tracker.

Explainer: The "issue tracker" is where issues live for this repo. Skills like to-tickets, triage, and to-spec read from and write to it. They need to know whether to call gh issue create, write a markdown file under .scratch/, or follow some other workflow you describe. Pick the place you actually track work for this repo.

Default posture: these skills were designed for GitHub. If a git remote points at GitHub, propose that. If a git remote points at GitLab (gitlab.com or a self-hosted host), propose GitLab. Otherwise (or if the user prefers), offer:

  • GitHub: issues live in the repo's GitHub Issues (uses the gh CLI)
  • GitLab: issues live in the repo's GitLab Issues (uses the glab CLI)
  • Local markdown: issues live as files under .scratch/<feature>/ in this repo (good for solo projects or repos without a remote)
  • Other (Jira, Linear, etc.): ask the user to describe the workflow in one paragraph; the skill will record it as freeform prose

Record the choice in docs/agents/issue-tracker.md. The GitHub and GitLab templates carry a "PRs as a request surface" flag, defaulted off. Leave it off and don't raise it: a user who wants external PRs in the triage queue can flip the flag in the file later.

Section B: Triage label vocabulary. Skip this section entirely if the triage skill isn't installed (exploration told you), since an uninstalled skill needs no labels.

If it is installed, ask exactly one question:

Do you want to keep the default triage labels? (recommended: yes)

The defaults are the five canonical roles, each label string equal to its name: needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix. On yes, write them as-is. Only if the user says no, usually because their tracker already uses other names (e.g. bug:triage for needs-triage), collect the overrides so triage applies existing labels instead of creating duplicates.

Section C: Domain docs. Default to single-context (one CONTEXT.md + docs/adr/ at the repo root). This fits almost every repo; write it without asking.

Offer multi-context (a root CONTEXT-MAP.md pointing to per-context CONTEXT.md files) only when exploration found monorepo signals. Then confirm which layout they want.

3. Confirm and edit

Show the user a draft of:

  • The ## Agent skills block to add to whichever of CLAUDE.md / AGENTS.md is being edited (see step 4 for selection rules)
  • The contents of docs/agents/issue-tracker.md, docs/agents/domain.md, and docs/agents/triage-labels.md (the last only when triage is installed)

Let them edit before writing.

4. Write

Pick the file to edit:

  • If CLAUDE.md exists, edit it.
  • Else if AGENTS.md exists, edit it.
  • If neither exists, ask the user which one to create; don't pick for them.

Never create AGENTS.md when CLAUDE.md already exists (or vice versa); always edit the one that's already there.

If an ## Agent skills block already exists in the chosen file, update its contents in-place rather than appending a duplicate. Don't overwrite user edits to the surrounding sections.

The block:

## Agent skills

### Issue tracker

[one-line summary of where issues are tracked]. See `docs/agents/issue-tracker.md`.

### Triage labels

[one-line summary of the label vocabulary]. See `docs/agents/triage-labels.md`.

### Domain docs

[one-line summary of layout: "single-context" or "multi-context"]. See `docs/agents/domain.md`.

Include the ### Triage labels sub-block, and write docs/agents/triage-labels.md, only when triage is installed and Section B ran. When it isn't, both are omitted.

Then write the docs files using the seed templates in this skill folder as a starting point:

For "other" issue trackers, write docs/agents/issue-tracker.md from scratch using the user's description.

5. Done

Tell the user the setup is complete and which engineering skills will now read from these files. Mention they can edit docs/agents/*.md directly later; re-running this skill is only necessary if they want to switch issue trackers or restart from scratch.

05 / 10setup-matt-pocock-skills
Creator
Matt Pocock
Matt Pocock
github.com/mattpocock

About the creator

Matt Pocock is the TypeScript educator behind Total TypeScript, a former Vercel engineer who now publishes the skills he runs from his own .agents folder.

About the repo

mattpocock/skills is his personal set of engineering and productivity skills for coding agents, and at 262K stars it is the most-starred repo on this list.

Star history for mattpocock/skills
05 / 10setup-matt-pocock-skills
When

Before the other skills. Once per repo.

You type /setup-matt-pocock-skills in a fresh repo.

It looks around, proposes an issue tracker and a docs layout, and writes the config files.

claude
> /setup-matt-pocock-skills
⏺Skill(setup-matt-pocock-skills)
⏺Bash(git remote -v)
⏺Read(CLAUDE.md)
⏺Found: a GitHub remote (acme/shop), a CLAUDE.md, no docs/agents yet, single package.
Issue tracker: GitHub Issues through gh. OK?
Domain docs: single-context. CONTEXT.md and docs/adr at the root. I’ll write that without asking.
Say yes and I’ll write both files and add an Agent skills block to CLAUDE.md.
>
? for shortcuts
05 / 10setup-matt-pocock-skills
Worth noticing

It’s a setup script written in prose.

No code runs. The agent explores, proposes, waits for a yes, then writes three small markdown files.

05 / 10setup-matt-pocock-skills
How

Install. Run it once. Forget it.

npx skills add https://github.com/mattpocock/skills --skill setup-matt-pocock-skills

Re-run only if you switch issue trackers.

claude
> yes
⏺Write(docs/agents/issue-tracker.md)
⏺Write(docs/agents/domain.md)
⏺Edit(CLAUDE.md)
⎿  Added ## Agent skills block
⏺Setup complete. to-tickets, triage and to-spec will now read docs/agents/.
Edit those files directly any time. Re-run this only to switch trackers.
>
? for shortcuts

vercel-react-best-practices

Vercel’s 70 React and Next.js performance rules, applied as the agent writes.

Installs
715.2K
Stars
31,221
Rank
6 of 10
vercel-react-best-practices page on skills.sh
06 / 10vercel-react-best-practices / SKILL.md
namedescriptionlicensemetadata
vercel-react-best-practices
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
MIT
authorversion
vercel
1.0.0

Vercel React Best Practices

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.

When to Apply

Reference these guidelines when:

  • Writing new React components or Next.js pages
  • Implementing data fetching (client or server-side)
  • Reviewing code for performance issues
  • Refactoring existing React/Next.js code
  • Optimizing bundle size or load times

Rule Categories by Priority

Priority Category Impact Prefix
1 Eliminating Waterfalls CRITICAL async-
2 Bundle Size Optimization CRITICAL bundle-
3 Server-Side Performance HIGH server-
4 Client-Side Data Fetching MEDIUM-HIGH client-
5 Re-render Optimization MEDIUM rerender-
6 Rendering Performance MEDIUM rendering-
7 JavaScript Performance LOW-MEDIUM js-
8 Advanced Patterns LOW advanced-

Quick Reference

1. Eliminating Waterfalls (CRITICAL)

  • async-cheap-condition-before-await - Check cheap sync conditions before awaiting flags or remote values
  • async-defer-await - Move await into branches where actually used
  • async-parallel - Use Promise.all() for independent operations
  • async-dependencies - Use better-all for partial dependencies
  • async-api-routes - Start promises early, await late in API routes
  • async-suspense-boundaries - Use Suspense to stream content

2. Bundle Size Optimization (CRITICAL)

  • bundle-barrel-imports - Import directly, avoid barrel files
  • bundle-analyzable-paths - Prefer statically analyzable import and file-system paths to avoid broad bundles and traces
  • bundle-dynamic-imports - Use next/dynamic for heavy components
  • bundle-defer-third-party - Load analytics/logging after hydration
  • bundle-conditional - Load modules only when feature is activated
  • bundle-preload - Preload on hover/focus for perceived speed

3. Server-Side Performance (HIGH)

  • server-auth-actions - Authenticate server actions like API routes
  • server-cache-react - Use React.cache() for per-request deduplication
  • server-cache-lru - Use LRU cache for cross-request caching
  • server-dedup-props - Avoid duplicate serialization in RSC props
  • server-hoist-static-io - Hoist static I/O (fonts, logos) to module level
  • server-no-shared-module-state - Avoid module-level mutable request state in RSC/SSR
  • server-serialization - Minimize data passed to client components
  • server-parallel-fetching - Restructure components to parallelize fetches
  • server-parallel-nested-fetching - Chain nested fetches per item in Promise.all
  • server-after-nonblocking - Use after() for non-blocking operations

4. Client-Side Data Fetching (MEDIUM-HIGH)

  • client-swr-dedup - Use SWR for automatic request deduplication
  • client-event-listeners - Deduplicate global event listeners
  • client-passive-event-listeners - Use passive listeners for scroll
  • client-localstorage-schema - Version and minimize localStorage data

5. Re-render Optimization (MEDIUM)

  • rerender-defer-reads - Don't subscribe to state only used in callbacks
  • rerender-memo - Extract expensive work into memoized components
  • rerender-memo-with-default-value - Hoist default non-primitive props
  • rerender-dependencies - Use primitive dependencies in effects
  • rerender-derived-state - Subscribe to derived booleans, not raw values
  • rerender-derived-state-no-effect - Derive state during render, not effects
  • rerender-functional-setstate - Use functional setState for stable callbacks
  • rerender-lazy-state-init - Pass function to useState for expensive values
  • rerender-simple-expression-in-memo - Avoid memo for simple primitives
  • rerender-split-combined-hooks - Split hooks with independent dependencies
  • rerender-move-effect-to-event - Put interaction logic in event handlers
  • rerender-transitions - Use startTransition for non-urgent updates
  • rerender-use-deferred-value - Defer expensive renders to keep input responsive
  • rerender-use-ref-transient-values - Use refs for transient frequent values
  • rerender-no-inline-components - Don't define components inside components

6. Rendering Performance (MEDIUM)

  • rendering-animate-svg-wrapper - Animate div wrapper, not SVG element
  • rendering-content-visibility - Use content-visibility for long lists
  • rendering-hoist-jsx - Extract static JSX outside components
  • rendering-svg-precision - Reduce SVG coordinate precision
  • rendering-hydration-no-flicker - Use inline script for client-only data
  • rendering-hydration-suppress-warning - Suppress expected mismatches
  • rendering-activity - Use Activity component for show/hide
  • rendering-conditional-render - Use ternary, not && for conditionals
  • rendering-usetransition-loading - Prefer useTransition for loading state
  • rendering-resource-hints - Use React DOM resource hints for preloading
  • rendering-script-defer-async - Use defer or async on script tags

7. JavaScript Performance (LOW-MEDIUM)

  • js-batch-dom-css - Group CSS changes via classes or cssText
  • js-index-maps - Build Map for repeated lookups
  • js-cache-property-access - Cache object properties in loops
  • js-cache-function-results - Cache function results in module-level Map
  • js-cache-storage - Cache localStorage/sessionStorage reads
  • js-combine-iterations - Combine multiple filter/map into one loop
  • js-length-check-first - Check array length before expensive comparison
  • js-early-exit - Return early from functions
  • js-hoist-regexp - Hoist RegExp creation outside loops
  • js-min-max-loop - Use loop for min/max instead of sort
  • js-set-map-lookups - Use Set/Map for O(1) lookups
  • js-tosorted-immutable - Use toSorted() for immutability
  • js-flatmap-filter - Use flatMap to map and filter in one pass
  • js-request-idle-callback - Defer non-critical work to browser idle time

8. Advanced Patterns (LOW)

  • advanced-effect-event-deps - Don't put useEffectEvent results in effect deps
  • advanced-event-handler-refs - Store event handlers in refs
  • advanced-init-once - Initialize app once per app load
  • advanced-use-latest - useLatest for stable callback refs

How to Use

Read individual rule files for detailed explanations and code examples:

rules/async-parallel.md
rules/bundle-barrel-imports.md

Each rule file contains:

  • Brief explanation of why it matters
  • Incorrect code example with explanation
  • Correct code example with explanation
  • Additional context and references

Full Compiled Document

For the complete guide with all rules expanded: AGENTS.md

06 / 10vercel-react-best-practices
Creator
Vercel Labs
Vercel Labs
github.com/vercel-labs

About the creator

Vercel Labs is the experiments arm of Vercel, the company behind Next.js, and Andrew Qu there committed the first version of these rules in January 2026.

About the repo

vercel-labs/agent-skills is Vercel's official skill pack, with rules for React, Next.js, deploys and web design in one place.

Star history for vercel-labs/agent-skills
06 / 10vercel-react-best-practices
When

The agent writes React. You want it fast.

You say: “Add a dashboard page that loads orders and customers.”

It fetches both in parallel and skips the barrel import, because the rules say so.

claude
> Add a dashboard page that loads orders and customers
⏺Skill(vercel-react-best-practices)
⎿  Loaded 70 rules
⏺Write(app/dashboard/page.tsx)
⏺Done. Two rules shaped it:
async-parallel: orders and customers load with Promise.all, not one after the other.
bundle-barrel-imports: icons import from their own paths so the whole icon set doesn’t ship.
The page renders in one round trip.
>
? for shortcuts
06 / 10vercel-react-best-practices
Worth noticing

Rules, ranked by impact.

Eliminating waterfalls and bundle size come first. Micro-optimizations sit at the bottom. The order is the opinion.

06 / 10vercel-react-best-practices
How

Install it. Then write React as usual.

npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-best-practices

It triggers on components, pages, data fetching and refactors.

claude
> Review src/components/ProductList.tsx for performance
⏺Skill(vercel-react-best-practices)
⏺Read(src/components/ProductList.tsx)
⏺Three findings.
rerender-no-inline-components: ProductRow is defined inside ProductList, so it remounts every render. Move it out.
client-swr-dedup: three components fetch /api/products separately. Use SWR.
rendering-conditional-render: count && <Badge/> renders a stray 0. Use a ternary.
Want me to apply all three?
>
? for shortcuts

grilling

The interview engine behind grill-me. It fires on its own when you say “grill me.”

Installs
704.5K
Stars
262,655
Rank
7 of 10
grilling page on skills.sh
07 / 10grilling / SKILL.md
namedescription
grilling
Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.

Interview the user relentlessly until you reach a shared understanding. Map this as a design tree: every decision branches into the decisions that hang off it.

Work the tree in rounds. The frontier is every decision whose prerequisites are already settled: the questions you can ask now without guessing at answers you haven't heard yet. Ask the whole frontier in one round: number each question and give your recommended answer. Then wait for the user's answers before the next round.

Format a round like so:

❓ **Q1** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>

➡️ <your recommended answer>

---

❓ **Q2** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>

➡️ <your recommended answer>

Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a later round, not this one.

Finding facts is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The decisions are the user's: put each to them and wait.

The session is done when the frontier is empty: every branch of the design tree visited, nothing left silently assumed. Do not act on it until the user confirms you have reached a shared understanding.

07 / 10grilling
Creator
Matt Pocock
Matt Pocock
github.com/mattpocock

About the creator

Matt Pocock is the TypeScript educator behind Total TypeScript, a former Vercel engineer who now publishes the skills he runs from his own .agents folder.

About the repo

mattpocock/skills is his personal set of engineering and productivity skills for coding agents, and at 262K stars it is the most-starred repo on this list.

Star history for mattpocock/skills
07 / 10grilling
When

You don’t have to call it. Just say the word.

You say: “Grill me on this architecture.”

The agent maps your decisions as a tree and asks the whole frontier at once.

claude
> Grill me on moving search from Elasticsearch to Postgres full-text
⏺Skill(grilling)
⎿  Triggered by “grill me”
⏺❓ Q1 - What breaks? Which queries need fuzzy or faceted search today?
➡️ If it’s fuzzy only, pg_trgm covers it. Facets are the hard part.
❓ Q2 - Data size: How many rows, and how fast do they grow?
➡️ Under 10M rows, Postgres is fine. I’ll check the table size myself.
⏺Agent(count rows in search_index)
⏺Answer Q1 and Q2 and I’ll ask the next round.
>
? for shortcuts
07 / 10grilling
Worth noticing

Facts are the agent’s job. Decisions are yours.

If a question needs something from the codebase, it sends a sub-agent to look instead of asking you.

07 / 10grilling
How

Install. Then say grill.

npx skills add https://github.com/mattpocock/skills --skill grilling

Unlike grill-me, there is no slash command. Trigger words start it.

claude
> grill me: I’m going to rewrite the mobile app in React Native
⏺Skill(grilling)
⎿  Triggered by “grill me”
⏺❓ Q1 - Why now? What does the current app fail at that a rewrite fixes?
➡️ If the answer is “it’s old,” stop. If it’s “two codebases,” keep going.
❓ Q2 - Team: Who on the team has shipped React Native before?
➡️ If nobody, budget the first month for learning, not features.
❓ Q3 - Cutover: Big bang, or screen by screen behind a flag?
➡️ Screen by screen. Always.
>
? for shortcuts

lark-doc

Lets an agent read, write and edit Lark and Feishu docs from the terminal.

Installs
695.5K
Stars
17,212
Rank
8 of 10
lark-doc page on skills.sh
08 / 10lark-doc / SKILL.md
namedescriptionmetadata
lark-doc
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
requirescliHelp
binsskills
  • lark-cli
  • lark-shared
lark-cli docs --help;lark-cli mindnotes --help

docs

场景与 Shortcut 路由

CRITICAL:先判断场景,再读取该场景的参考文件;不要在任务开始时一次性读取全部参考文件。每个文件只在首次进入对应阶段时读取一次。

身份:文档操作推荐显式指定 --as user。

本地文件引用统一遵循文件访问权限:CWD 内优先使用 @./相对路径,其他目录使用 @绝对路径。XML 内的相对资源路径先查 CWD;仅文件不存在时再查源 XML 文件所在目录,同名文件以 CWD 为准。内联内容、stdin、在线文档没有源文件目录,不执行回退。

文档内容

  • 读取 / 摘要 — +fetch:先读参考再获取文档。
  • 从零创作 — 创建工作流:先完整执行创建工作流,简单任务不是跳过的理由;
  • 导入 / 空文档 — +create:仅创建空文档或原样导入用户提供的完整内容时,跳过创建工作流。
  • 编辑 / block 直达链接 — +update:语义改写、润色、重组、补写或排版均按 update 参考完成。

辅助能力

资源、画板与思维笔记

认证与 Scope

执行 Shortcut 时,不预读 lark-shared 或预跑 auth status --verify;仅遇到未认证、token / 身份或 scope 错误时读取该 Skill,修复后重试。认证、身份或 scope 管理请求则直接使用该 Skill。

不在本 Skill 范围

  • Drive 文件级操作:找文档、导入导出、云空间文件上传 / 下载 / 权限管理 → lark-drive。复制文档、创建副本或另存为副本时,按其指引使用 lark-cli drive files copy;不要用 docs +fetch + docs +create 重建正文。
  • 独立评论操作:添加、分页查看、回复评论或增删 reaction → lark-drive;只需紧凑评论上下文时,直接使用默认 JSON 响应的 docs +fetch。
08 / 10lark-doc
Creator
Lark
Lark
github.com/larksuite

About the creator

Lark is ByteDance’s work suite, sold as Feishu in China and Lark everywhere else, and its larksuite team publishes this skill from open.feishu.cn.

About the repo

larksuite/cli is the official Lark command-line tool, written in Go, with 200+ commands and 20+ agent skills covering docs, messages, calendar, mail and more.

Star history for larksuite/cli
08 / 10lark-doc
When

Your docs live in Lark.

You paste a Feishu doc link and say: “Summarize this and add a next-steps section.”

The agent fetches the doc through lark-cli, edits it, and writes it back.

claude
> Read https://acme.feishu.cn/docx/Q3launch and add a Next steps section at the bottom
⏺Skill(lark-doc)
⎿  Read references/lark-doc-fetch.md
⏺Bash(lark-cli docs +fetch Q3launch --as user)
⏺Bash(lark-cli docs +update Q3launch --as user)
⏺Done. The doc is a Q3 launch plan with three open items.
I added a Next steps section listing them with owners, in the doc’s existing heading style.
>
? for shortcuts
08 / 10lark-doc
Worth noticing

The file is in Chinese. The installs are not only.

Two copies sit on the leaderboard: this one from open.feishu.cn at 695K, and the GitHub copy of the same file at 448K.

08 / 10lark-doc
How

Install from the publisher’s site, not GitHub.

npx skills add https://open.feishu.cn/ --skill lark-doc

It needs lark-cli installed and logged in first.

claude
> Create a Lark doc called “Weekly sync 9/15” from my notes.md
⏺Skill(lark-doc)
⎿  Read references/lark-doc-create-workflow.md
⏺Read(notes.md)
⏺Bash(lark-cli docs +create --title "Weekly sync 9/15" --as user)
⏺Created. Weekly sync 9/15 is in your Lark space with the five sections from notes.md.
Link: https://acme.feishu.cn/docx/WeeklySync0915
>
? for shortcuts

teach

Turns the agent into a tutor that builds you lessons, session after session.

Installs
657.1K
Stars
262,655
Rank
9 of 10
teach page on skills.sh
09 / 10teach / SKILL.md
namedescriptiondisable-model-invocationargument-hint
teach
Teach the user a new skill or concept, within this workspace.
true
What would you like to learn about?

The user has asked you to teach them something. This is a stateful request - they intend to learn the topic over multiple sessions.

Teaching Workspace

Treat the current directory as a teaching workspace. The state of their learning is captured in this directory in several files:

  • MISSION.md: A document capturing the reason the user is interested in the topic. This should be used to ground all teaching. Use the format in MISSION-FORMAT.md.
  • ./reference/*.html: A directory of reference materials. These are the compressed learnings from the lessons - cheat sheets, reference algorithms, syntax, yoga poses, glossaries. They are the raw units of learning. They should be beautiful documents which print out well, and are designed for quick reference.
  • RESOURCES.md: A list of resources which can be explored to ground your teaching in contextual knowledge, or to acquire knowledge and wisdom. Use the format in RESOURCES-FORMAT.md.
  • ./learning-records/*.md: A directory of learning records, which capture what the user has learned. These are loosely equivalent to architectural decision records in software development - they capture non-obvious lessons and key insights that may need to be revised later, or drive future sessions. These should be used to calculate the zone of proximal development. They are titled 0001-<dash-case-name>.md, where the number increments each time. Use the format in LEARNING-RECORD-FORMAT.md.
  • ./lessons/*.html: A directory of lessons. A lesson is a single, self-contained HTML output that teaches one tightly-scoped thing tied to the mission. This is the primary unit of teaching in this workspace.
  • ./assets/*: Reusable components shared across lessons. See Assets.
  • NOTES.md: A scratchpad for you to jot down user preferences, or working notes.

Philosophy

To learn at a deep level, the user needs three things:

  • Knowledge, captured from high-quality, high-trust resources
  • Skills, acquired through highly-relevant interactive lessons devised by you, based on the knowledge
  • Wisdom, which comes from interacting with other learners and practitioners

Before the RESOURCES.md is well-populated, your focus should be to find high-quality resources which will help the user acquire knowledge. Never trust your parametric knowledge.

Some topics may require more skills than knowledge. Learning more about theoretical physics might be more knowledge-based. For yoga, more skills-based.

Fluency vs Storage Strength

You should be careful to split between two types of learning:

  • Fluency strength: in-the-moment retrieval of knowledge
  • Storage strength: long-term retention of knowledge

Fluency can give the user an illusory sense of mastery, but storage strength is the real goal. Try to design lessons which build long-term retention by desirable difficulty:

  • Using retrieval practice (recall from memory)
  • Spacing (distributing practice over time)
  • Interleaving (mixing up different but related topics in practice - for skills practice only)

Lessons

A lesson is the main thing you produce: the unit in which knowledge and skills reach the user. Each lesson is one self-contained HTML file, saved to ./lessons/ and titled 0001-<dash-case-name>.html where the number increments each time.

A lesson should be beautiful, with clean, readable typography and layout, since the user will return to these later to review. Think Tufte.

The lesson should be short, and completable very quickly. Learners' working memory is very small, and we need to stay within it. But each lesson should give the user a single tangible win that they can build on. It should be directly tied to the mission, and should be in the user's zone of proximal development.

If possible, open the lesson file for the user by running a CLI command.

Each lesson should link via HTML anchors to other lessons and reference documents.

Each lesson should recommend a primary source for the user to read or watch. This should be the most high-quality, high-trust resource you found on the topic.

Each lesson should contain a reminder to ask followup questions to the agent. The agent is their teacher, and can assist with anything that's unclear.

Assets

Lessons are built from reusable components, stored in ./assets/: stylesheets, quiz widgets, simulators, diagram helpers, and anything else a second lesson could reuse.

Reuse is the default, not the exception. Before authoring a lesson, read ./assets/ and build from the components already there. When a lesson needs something new and reusable, write it as a component in ./assets/ and link to it; never inline code a future lesson would duplicate.

A shared stylesheet is the first component every workspace earns: every lesson links it, so the lessons look like one consistent course rather than a pile of one-offs. As the workspace grows, so should the component library.

The Mission

Every lesson should be tied into the mission - the reason that the user is interested in learning about the topic.

If the user is unclear about the mission, or the MISSION.md is not populated, your first job should be to question the user on why they want to learn this.

Failing to understand the mission will mean knowledge acquisition is not grounded in real-world goals. Lessons will feel too abstract. You will have no way of judging what the user should do next.

Missions may change as the user develops more skills and knowledge. This is normal - make sure to update the MISSION.md and add a learning record to capture the change. Confirm with the user before changing the mission.

Zone Of Proximal Development

Each lesson, the user should always feel as if they are being challenged 'just enough'.

The user may specify an exact thing they want to learn. If they don't, figure out their zone of proximal development by:

  • Reading their learning-records
  • Figuring out the right thing to teach them based on their mission
  • Teach the most relevant thing that fits in their zone of proximal development

Knowledge

Lessons should be designed around a skill the user is going to learn. The knowledge in the lesson should be only what's required to acquire that skill. You teach the knowledge first, then get the user to practice the skills via an interactive feedback loop.

Knowledge should first be gathered from trusted resources. Use RESOURCES.md to keep track of them. Lessons should be littered with citations - links to external resources to back up any claim made. This increases the trustworthiness of the lesson.

For acquiring knowledge, difficulty is the enemy. It eats working memory you need for understanding.

Skills

If knowledge is all about acquisition, skills are about durability and flexibility. Make the knowledge stick.

For skill acquisition, difficulty is the tool. Effortful retrieval is what builds storage strength. Skills should be taught through interactive lessons. There are several tools at your disposal:

  • Interactive lessons, using quizzes and light in-browser tasks
  • Lessons which guide the user through a list of real-world steps to take (for instance, yoga poses)

Each of these should be based on a feedback loop, where the user receives feedback on their performance. This feedback loop should be as tight as possible, giving feedback immediately - and ideally automatically.

For quizzes, each answer should be exactly the same number of words (and characters, if possible). Don't give the user any clues about the answer through formatting.

Acquiring Wisdom

Wisdom comes from true real-world interaction - testing your skills outside the learning environment.

When the user asks a question that appears to require wisdom, your default posture should be to attempt to answer - but to ultimately delegate to a community.

A community is a place (online or offline) where the user can test their skills in the real world. This might be a forum, a subreddit, a real-world class (budget permitting) or a local interest group.

You should attempt to find high-reputation communities the user can join. If the user expresses a preference that they don't want to join a community, respect it.

Reference Documents

While creating lessons, you should also create reference documents. Lessons can reference these documents - they are useful for tracking raw units of knowledge useful across lessons.

Lessons will rarely be revisited later - reference documents will be. They should be the compressed essence of the lesson, in a format designed for quick reference.

Some learning topics lend themselves to reference:

  • Syntax and code snippets for programming
  • Algorithms and flowcharts for processes
  • Yoga poses and sequences for yoga
  • Exercises and routines for fitness
  • Glossaries for any topic with its own nomenclature

Glossaries, in particular, are an essential reference. Once one is created, it should be adhered to in every lesson.

NOTES.md

The user will sometimes express preferences of how they want to be taught, or things you should keep in mind. This is the place to record those preferences, so you can refer back to them when designing lessons or working with the user.

09 / 10teach
Creator
Matt Pocock
Matt Pocock
github.com/mattpocock

About the creator

Matt Pocock is the TypeScript educator behind Total TypeScript, a former Vercel engineer who now publishes the skills he runs from his own .agents folder.

About the repo

mattpocock/skills is his personal set of engineering and productivity skills for coding agents, and at 262K stars it is the most-starred repo on this list.

Star history for mattpocock/skills
09 / 10teach
When

You want to learn something. Not just get an answer.

You type /teach SQL joins.

It asks why, writes a MISSION.md, then builds a short HTML lesson you can finish in minutes.

claude
> /teach SQL joins
⏺Skill(teach)
⏺Before the first lesson, the mission. Why joins, and why now? What are you trying to read or build?
> I need to read our analytics queries without asking an engineer
⏺Write(MISSION.md)
⏺Write(lessons/0001-inner-join.html)
⏺Lesson 1 is ready: inner joins, using two tables from your own analytics schema. About five minutes.
It ends with a three-question quiz. Open lessons/0001-inner-join.html.
>
? for shortcuts
09 / 10teach
Worth noticing

It teaches for storage, not fluency.

The file cites retrieval practice, spacing and desirable difficulty. Lessons are built to be remembered, not just understood.

09 / 10teach
How

Install. Then /teach whatever you want.

npx skills add https://github.com/mattpocock/skills --skill teach

Run it in a folder. That folder becomes the classroom.

claude
> /teach
⏺Skill(teach)
⏺Read(learning-records/)
⎿  2 records: inner joins, left joins
⏺You’ve done inner and left joins. Next in reach: aggregating joined tables with GROUP BY, which is what the weekly retention query uses.
⏺Write(lessons/0003-group-by-joins.html)
⏺Lesson 3 is ready. Open lessons/0003-group-by-joins.html. Ask me anything that’s unclear.
>
? for shortcuts

web-design-guidelines

Reviews your UI code against Vercel’s Web Interface Guidelines.

Installs
636.1K
Stars
31,221
Rank
10 of 10
web-design-guidelines page on skills.sh
10 / 10web-design-guidelines / SKILL.md
namedescriptionmetadata
web-design-guidelines
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
authorversionargument-hint
vercel
1.0.0
<file-or-pattern>

Web Interface Guidelines

Review files for compliance with Web Interface Guidelines.

How It Works

  1. Fetch the latest guidelines from the source URL below
  2. Read the specified files (or prompt user for files/pattern)
  3. Check against all rules in the fetched guidelines
  4. Output findings in the terse file:line format

Guidelines Source

Fetch fresh guidelines before each review:

https://raw.githubusercontent.com/vercel-labs/web-interface-guidelines/main/command.md

Use WebFetch to retrieve the latest rules. The fetched content contains all the rules and output format instructions.

Usage

When a user provides a file or pattern argument:

  1. Fetch guidelines from the source URL above
  2. Read the specified files
  3. Apply all rules from the fetched guidelines
  4. Output findings using the format specified in the guidelines

If no files specified, ask the user which files to review.

10 / 10web-design-guidelines
Creator
Vercel Labs
Vercel Labs
github.com/vercel-labs

About the creator

Vercel Labs is the experiments arm of Vercel, the company behind Next.js, and Lindsey Simon there wrote this skill in January 2026 as a front door to the company’s Web Interface Guidelines.

About the repo

vercel-labs/agent-skills is Vercel's official skill pack, with rules for React, Next.js, deploys and web design in one place.

Star history for vercel-labs/agent-skills
10 / 10web-design-guidelines
When

You built the UI. Now check it.

You say: “Review my UI” or “check accessibility on the checkout page.”

It fetches the latest guidelines and reports findings by file and line.

claude
> Review app/checkout/page.tsx against the web interface guidelines
⏺Skill(web-design-guidelines)
⏺WebFetch(raw.githubusercontent.com/vercel-labs/web-interface-guidelines/main/command.md)
⏺Read(app/checkout/page.tsx)
⏺app/checkout/page.tsx:42 icon button has no aria-label
app/checkout/page.tsx:88 inputs are missing autocomplete
app/checkout/page.tsx:131 outline:none removes focus with nothing in its place
app/checkout/page.tsx:164 loading state has no aria-busy
Four findings. All fixable in one pass.
>
? for shortcuts
10 / 10web-design-guidelines
Worth noticing

The rules aren’t in the file.

It fetches the guidelines fresh from GitHub on every review, so the checklist updates without reinstalling.

10 / 10web-design-guidelines
How

Install. Then point it at files.

npx skills add https://github.com/vercel-labs/agent-skills --skill web-design-guidelines

Give it a file or a pattern. No files, it asks which.

claude
> Check accessibility on src/components/Modal.tsx
⏺Skill(web-design-guidelines)
⏺WebFetch(raw.githubusercontent.com/vercel-labs/web-interface-guidelines/main/command.md)
⏺Read(src/components/Modal.tsx)
⏺src/components/Modal.tsx:12 no role=dialog or aria-modal
src/components/Modal.tsx:19 focus is not trapped inside the modal
src/components/Modal.tsx:44 close button relies on an icon alone
src/components/Modal.tsx:50 Escape does not close it
Want me to fix these?
>
? for shortcuts