Skills Example¶
This example demonstrates the skills system for modular capability extension.
Source Code¶
:material-file-code: examples/skills_usage.py
Overview¶
Skills are modular packages that:
- Extend agent capabilities
- Use progressive disclosure (frontmatter → full instructions)
- Include optional resource files
Example Skills¶
The example includes two skills in examples/skills/:
Code Review Skill¶
SKILL.md:
---
name: code-review
description: Review Python code for quality, security, and best practices
version: 1.0.0
tags:
- code
- review
- python
- quality
author: pydantic-deep
---
# Code Review Skill
When reviewing code, follow these guidelines:
## Review Process
1. Read the entire file before making comments
2. Check for security issues first
3. Review code structure and patterns
...
Test Generator Skill¶
SKILL.md:
---
name: test-generator
description: Generate pytest test cases for Python functions and classes
version: 1.0.0
tags:
- testing
- pytest
- python
---
# Test Generator Skill
Generate comprehensive pytest tests...
Full Example¶
"""Skills usage example."""
import asyncio
from pathlib import Path
from pydantic_deep import create_deep_agent, DeepAgentDeps, StateBackend
SKILLS_DIR = Path(__file__).parent / "skills"
async def main():
# Create agent with skills
agent = create_deep_agent(
model="openai:gpt-4.1",
instructions="""
You are a coding assistant with specialized skills.
When asked to review code or generate tests:
1. First check available skills with list_skills
2. Load the relevant skill with load_skill
3. Follow the skill's guidelines
Always use skill instructions for specialized tasks.
""",
skill_directories=[
{"path": str(SKILLS_DIR), "recursive": True},
],
)
deps = DeepAgentDeps(backend=StateBackend())
# Create some code to review
deps.backend.write(
"/code/example.py",
'''def calculate_total(items):
total = 0
for item in items:
total = total + item["price"] * item["quantity"]
return total
def get_user_data(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
return db.execute(query)
''',
)
# Ask agent to use skills
result = await agent.run(
"""
1. List your available skills
2. Load the code-review skill
3. Review /code/example.py following the skill's guidelines
""",
deps=deps,
)
print(result.output)
asyncio.run(main())
Running Without API Key¶
The example supports running without an API key for demonstration:
# List discovered skills
uv run python examples/skills_usage.py --discover
# Load skill instructions
uv run python examples/skills_usage.py --load
Discovery Output¶
Discovering skills from: /path/to/examples/skills
Skill: test-generator
Description: Generate pytest test cases for Python functions and classes
Version: 1.0.0
Tags: testing, pytest, python
Path: /path/to/examples/skills/test-generator
Skill: code-review
Description: Review Python code for quality, security, and best practices
Version: 1.0.0
Tags: code, review, python, quality
Path: /path/to/examples/skills/code-review
Resources: example_review.md
Skill Tools¶
list_skills¶
Returns all available skills with metadata:
# Agent output:
Available Skills:
**code-review** (v1.0.0)
Description: Review Python code for quality, security, and best practices
Tags: code, review, python, quality
Path: /path/to/skill (resources: example_review.md)
**test-generator** (v1.0.0)
Description: Generate pytest test cases for Python functions and classes
Tags: testing, pytest, python
Path: /path/to/skill
load_skill¶
Loads full instructions for a specific skill:
# Agent calls: load_skill(skill_name="code-review")
# Returns complete SKILL.md content with detailed instructions
read_skill_resource¶
Reads additional files from a skill:
# Agent calls: read_skill_resource(
# skill_name="code-review",
# resource_name="example_review.md"
# )
# Returns the resource file content
Creating Your Own Skills¶
1. Create Directory¶
2. Write SKILL.md¶
---
name: my-skill
description: What this skill does
version: 1.0.0
tags:
- tag1
- tag2
author: your-name
---
# My Skill
Detailed instructions for the agent...
## When to Use
Use this skill when...
## Process
1. Step one
2. Step two
3. Step three
## Output Format
Provide output in this format:
...
3. Add Resources (Optional)¶
# Templates, examples, checklists, etc.
echo "# Template" > ~/.pydantic-deep/skills/my-skill/template.md
4. Configure Agent¶
agent = create_deep_agent(
skill_directories=[
{"path": "~/.pydantic-deep/skills", "recursive": True},
],
)
Best Practices¶
- Clear descriptions - Help the agent choose the right skill
- Focused skills - One skill, one purpose
- Actionable instructions - Tell the agent exactly what to do
- Include examples - Show expected output format
- Version your skills - Track changes over time
Next Steps¶
- Concepts: Skills - Deep dive
- Docker Sandbox - Isolated execution
- API Reference - SkillsToolset API