This guide is based on the Vercel Community Session featuring John Lindquist and updated to match the current Agent Skills standard, the skills CLI, and how skills.sh actually works.
AI skills turn “one-off prompts” into a reusable, versionable library of agent behavior. The goal is simple: stop re-explaining your project’s tribal knowledge every time you open a new chat.
Models know general programming languages and frameworks, but they don’t know:
- Your folder structure
- Your design system
- Your deployment rules
- What “good” means in your org
Skills are the “npm moment” for context: instead of copy/pasting long instructions into every session, you install a skill once and let the agent load it when relevant.
- A skill is a single folder containing a
SKILL.md(plus optional supporting files). - A skill package is a repo (or directory) that contains one or more skills.
You should split context into two buckets:
- Passive context (always available): Use an
AGENTS.md(or your agent’s equivalent) for rules that apply all the time.- Examples: security guardrails, formatting rules, “always use strict TS,” “never bypass auth,” etc.
- Active context (on-demand): Use skills for specialized workflows the agent should load only when needed.
- Examples: “deploy to Vercel,” “analyze CSV,” “write a PRD,” “review React code for performance.”
Skills are designed so agents don’t load everything up-front:
- Metadata (
name+description) is available early so the agent can decide whether it’s relevant. - Full instructions (the body of
SKILL.md) load only when the agent activates the skill. - Resources (scripts/references/assets) load only if the skill tells the agent to use them.
A skill is a directory containing at minimum a SKILL.md file:
SKILL.md must start with YAML frontmatter and include:
name(required)description(required)
Minimal example:
namemust match the parent directory name.nameis lowercase letters/numbers/hyphens only (no uppercase).descriptionshould say what the skill does and when to use it.
These are part of the spec and safe to use across ecosystems:
licensecompatibility(only when environment requirements exist)metadata(arbitrary key/value data; a good place for your semver)allowed-tools(experimental; support varies by agent)
The Markdown body has no required format, but if you want reliability, use a predictable structure:
- What this skill does
- When to use it (and when not to)
- Inputs needed
- Step-by-step procedure
- Validation / “how to know we’re done”
- Common failure modes and fixes
Use these to keep SKILL.md concise and load details only when needed:
scripts/— executable helpersreferences/— longer docs, checklists, templatesassets/— static templates, sample configs, diagrams
Most systems decide whether to activate a skill primarily from its description. So don’t treat description like a title—treat it like a routing rule.
Bad:
- “Helps with PDFs.”
Good:
- “Extract text and tables from PDFs, fill forms, merge documents. Use when the user mentions PDFs, forms, scanning, or document extraction.”
Be blunt about it:
Put it in AGENTS.md when:
- It applies to almost every task
- You want maximum reliability (no activation decision)
- The agent should never ignore it
Put it in a skill when:
- It’s a specialized workflow
- It’s used occasionally
- You want it discoverable/reusable across repos/teams
Start simple and only add complexity when you hit a real wall:
- Markdown-only skill (most skills)
- Add scripts/ when you need deterministic automation
- Use a tool/MCP integration only when you need strict typed payloads or strong control over external calls
Install a package (repo) like this:
The CLI supports multiple sources, including direct skill paths and local folders:
The CLI can install:
- Project scope (committed with your repo, shared with your team)
- Global scope (available across projects for your user)
It can also install by symlink (recommended) or copy, depending on your environment.
To “publish” a skill:
- Put it in a git repo.
- Share the repo.
- When people install it via
npx skills add, it can show up on skills.sh automatically via install telemetry.
That’s it. No registry submission flow.
At minimum:
- Your skill folder(s) with
SKILL.md
Strongly recommended:
- A
README.mdexplaining what the skills do and how to install them - Clear license and ownership info
- Safety notes if scripts exist
Treat skills like code:
- Read them before installing
- Be especially careful with
scripts/(they can run commands) - Pin to known repos and review diffs on updates
Core ecosystem + docs
- https://skills.sh/
- https://skills.sh/docs/cli
- https://skills.sh/docs/faq
- https://github.com/vercel-labs/skills
- https://vercel.com/changelog/introducing-skills-the-open-agent-skills-ecosystem
- https://vercel.com/changelog/skills-v1-1-1-interactive-discovery-open-source-release-and-agent-support
- https://vercel.com/blog/agent-skills-explained-an-faq
- https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals
Agent Skills standard
Workshop reference
Example skills