SkillsToolset lets an agent discover and load skill instructions at runtime instead of embedding every capability in the system prompt up-front. It is a TypeScript port of pydantic-ai-skills.
What it’s for
As you build more capable agents, the system prompt grows. Eventually you hit a wall: you can’t fit every skill’s instructions into context, the model gets confused by too many capabilities at once, and updating one skill means re-deploying the whole agent.
SkillsToolset solves this with progressive disclosure:
- At startup the agent is told only that skills exist — not what they contain.
- The agent calls
skills_list to see what’s available (names + one-line descriptions).
- It calls
skills_load to read the full instructions for the skill it needs right now.
- It follows those instructions, then loads a different skill if the task changes.
This keeps the active context small, makes it trivial to add or update skills without touching the agent, and lets the agent choose the right capability for each sub-task dynamically.
Typical use cases:
- Coding agents that can switch between “write tests”, “write docs”, “refactor” skill modes
- Research agents with separate skills for web search, citation formatting, and summarisation
- Customer support bots with different skills per product line
- Any agent where capabilities should be modular and updateable independently
Installation
No extra package needed — SkillsToolset is bundled inside @vibesjs/sdk.
Quick start
Point the toolset at a directory of skill files:
skills_list
Takes no parameters. Returns a JSON array of { name, description } objects:
skills_load
Returns the full markdown content of the skill file so the agent can follow its instructions. If the skill is not found, returns a JSON error object with a suggestion to call skills_list.
Skills are plain markdown files with optional YAML frontmatter. Organize them in any directory structure you like.
Flat file (my-skill.md)
Packaged skill (data-analysis/SKILL.md)
For more complex skills that include reference files, use a subdirectory:
The subdirectory name (data-analysis) is used as the skill name when the frontmatter name field is absent.
Frontmatter fields
The @vibesjs/sdk agent skill (vibes-sdk.md) is itself a valid skill file — you can load it with SkillsToolset by pointing it at your .claude/agents/ directory.
Directory loader: DirectorySkillLoader
When you pass a string to SkillsToolset, it creates a DirectorySkillLoader internally. You can also construct one directly if you need to pass it to other code:
Custom loader
Pass any object implementing SkillLoader to load skills from any source — a remote registry, a database, or a generated list:
With dependency injection
SkillsToolset is generic over TDeps so its type signature aligns with any agent:
Types
Skill
SkillLoader
Want to build your own?
SkillsToolset was ported from the pydantic-ai ecosystem using the port-pydantic-ai-community-plugins agent skill. Install the skill to get step-by-step guidance for porting any pydantic-ai plugin into a community toolset:
See the Agent Skill docs for more detail.