Open Source Agent Skill Repositories 2026: Complete Guide
The agent skills ecosystem has exploded in 2026. Instead of building every skill from scratch, you can leverage comprehensive repositories with pre-built, tested skills. This guide covers the major repositories, how to use them, and best practices for integration.
Major Skill Repositories
1. Awesome Agent Skills (skillmatic-ai)
GitHub: skillmatic-ai/awesome-agent-skills
Stars: 13.1k+ | Last Updated: March 2026
License: MIT | Languages: Python, TypeScript, JavaScript
The most comprehensive collection of agent skills with proper categorization and documentation.
Key Features
- ✅ 500+ pre-built skills across 12 categories
- ✅ Progressive disclosure metadata support
- ✅ Multiple framework compatibility
- ✅ Active community contributions
- ✅ Skill testing and validation
Categories
categories:
data_retrieval:
- web_search
- database_query
- api_clients
- rss_feeds
communication:
- email_clients
- slack_bots
- telegram_bots
- sms_services
productivity:
- calendar_management
- task_tracking
- note_taking
- file_management
development:
- code_execution
- git_operations
- ci_cd_integration
- testing_tools
finance:
- stock_analysis
- crypto_tracking
- accounting_tools
- invoice_generation
content:
- text_generation
- image_processing
- video_analysis
- audio_transcription
Usage Example
# Install from awesome-agent-skills
pip install awesome-agent-skills
from awesome_skills import WebSearchSkill, EmailSkill, CalendarSkill
# Load skills with configuration
web_search = WebSearchSkill(
providers=["google", "bing"],
max_results=10,
safe_search=True
)
email = EmailSkill(
provider="gmail",
credentials_path="gmail_credentials.json"
)
calendar = CalendarSkill(
provider="google_calendar",
timezone="UTC"
)
# Use in your agent
agent = Agent(
skills=[web_search, email, calendar],
llm="gpt-4"
)
2. Agent Skills (Anthropic Official)
GitHub: agentskills/agentskills
Stars: 13.8k+ | Last Updated: March 2026
License: Apache 2.0 | Languages: Python
The official specification and implementation from Anthropic, focusing on Claude-compatible skills.
Key Features
- ✅ Official Anthropic specification
- ✅ Claude-optimized implementations
- ✅ Progressive disclosure support
- ✅ MCP integration
- ✅ Enterprise-ready security
Skill Structure
---
name: "web_search"
description: "Search the web for current information"
version: "1.2.0"
author: "Anthropic"
tags: ["web", "search", "retrieval"]
frameworks: ["claude", "crewai", "langgraph"]
---
## Metadata (loads first)
```json
{
"name": "web_search",
"description": "Search the web for current information",
"parameters": {
"query": {"type": "string", "required": true},
"max_results": {"type": "integer", "default": 10}
}
}
Full Implementation (loads on demand)
async def execute_web_search(query, max_results=10):
# Implementation here
pass
Usage Examples
# Basic usage
result = await skill.execute({"query": "AI agent frameworks"})
# With parameters
result = await skill.execute({
"query": "Python tutorials",
"max_results": 5
})
---
### 3. Agent Skills for Context Engineering
**GitHub**: [muratcankoylan/Agent-Skills-for-Context-Engineering](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering)
**Stars**: 2.3k+ | **Last Updated**: February 2026
**License**: MIT | **Languages**: Python, TypeScript
Academic-focused skills for advanced context management and meta-learning.
#### Key Features
- ✅ Meta context engineering patterns
- ✅ Academic paper implementations
- ✅ Advanced memory management
- ✅ Context optimization algorithms
- ✅ Research-backed methodologies
#### Specialized Skills
```python
from context_engineering import (
ContextCompressionSkill,
MemoryOptimizationSkill,
MetaLearningSkill,
ContextRetrievalSkill
)
# Context compression for long conversations
compressor = ContextCompressionSkill(
method="attention_based",
compression_ratio=0.3,
preserve_key_info=True
)
# Memory optimization for long-running agents
memory_opt = MemoryOptimizationSkill(
strategy="hierarchical",
max_context_tokens=4000,
importance_threshold=0.7
)
# Meta-learning for skill adaptation
meta_learner = MetaLearningSkill(
learning_rate=0.001,
adaptation_window=100,
base_skills=[base_skill1, base_skill2]
)
4. OpenAgents Skills Registry
GitHub: openagents/skills-registry
Stars: 1.8k+ | Last Updated: March 2026
License: MIT | Languages: Python, TypeScript, Go
Skills specifically designed for OpenAgents framework with A2A protocol support.
Key Features
- ✅ A2A protocol compatibility
- ✅ Agent-to-agent communication
- ✅ Network-based skill sharing
- ✅ Federation support
- ✅ Built-in governance
Network Skills
from openagents import NetworkSkill, A2ASkill
# Skill that can call other agents
collaborative_research = NetworkSkill(
name="collaborative_research",
network_capabilities=["a2a_call", "federated_search"],
security_level="enterprise"
)
# Agent-to-agent communication
a2a_skill = A2ASkill(
target_agents=["research_agent", "analysis_agent"],
protocol_version="2.0",
authentication="oauth2"
)
Skill Categories and Tagging
Standardized Tag System
Use this tagging system for consistency across repositories:
tags:
# Functional categories
functional:
- data_retrieval
- data_processing
- communication
- productivity
- development
- finance
- content
- security
# Technical categories
technical:
- api_client
- database
- file_system
- web_scraping
- machine_learning
- image_processing
- audio_processing
# Domain categories
domain:
- healthcare
- finance
- education
- legal
- marketing
- research
- customer_service
# Framework compatibility
frameworks:
- claude
- crewai
- langgraph
- autogen
- openagents
- vercel_sdk
# Complexity level
complexity:
- beginner
- intermediate
- advanced
- expert
# Security level
security:
- public
- internal
- sensitive
- restricted
Skill Metadata Schema
# skill.yaml - Standard metadata
name: "skill_name"
display_name: "Human Readable Name"
description: "Clear description of what the skill does"
version: "1.0.0"
author: "Author Name"
license: "MIT"
repository: "https://github.com/user/repo"
# Classification
tags: ["data_retrieval", "api_client", "intermediate"]
category: "data_retrieval"
frameworks: ["claude", "crewai", "langgraph"]
# Dependencies
dependencies:
python: ["requests>=2.28.0", "beautifulsoup4>=4.11.0"]
system: ["curl"]
apis: ["google_search_api", "openweather_api"]
# Security and compliance
security_level: "public"
authentication_required: false
data_access: ["public_web"]
compliance: ["gdpr", "ccpa"]
# Performance
performance:
response_time_ms: 500
rate_limit: "100/minute"
memory_usage_mb: 64
# Parameters
parameters:
query:
type: "string"
required: true
description: "Search query"
max_results:
type: "integer"
default: 10
min: 1
max: 50
description: "Maximum number of results"
Integration Patterns
Pattern 1: Direct Import
# Simple direct import
from awesome_skills import WebSearchSkill
skill = WebSearchSkill(api_key="your_key")
result = await skill.execute({"query": "AI agents"})
Pattern 2: Plugin Architecture
# Dynamic skill loading
class SkillManager:
def __init__(self):
self.skills = {}
def load_skill(self, skill_name, config):
skill_module = importlib.import_module(f"skills.{skill_name}")
skill_class = getattr(skill_module, f"{skill_name}Skill")
self.skills[skill_name] = skill_class(**config)
def get_skill(self, skill_name):
return self.skills.get(skill_name)
# Usage
manager = SkillManager()
manager.load_skill("web_search", {"api_key": "key"})
skill = manager.get_skill("web_search")
Pattern 3: Registry-Based
# Central skill registry
class SkillRegistry:
def __init__(self):
self.registry = {}
def register(self, skill_class):
self.registry[skill_class.name] = skill_class
def create(self, skill_name, **config):
skill_class = self.registry.get(skill_name)
if not skill_class:
raise ValueError(f"Skill {skill_name} not found")
return skill_class(**config)
# Register skills
@registry.register
class WebSearchSkill:
name = "web_search"
def __init__(self, api_key):
self.api_key = api_key
async def execute(self, params):
# Implementation
pass
# Usage
skill = registry.create("web_search", api_key="key")
Pattern 4: MCP Integration
# MCP server for skills
from mcp import MCPServer
class SkillMCPServer(MCPServer):
def __init__(self):
super().__init__()
self.skills = self.load_skills()
def load_skills(self):
skills = {}
for skill_file in glob.glob("skills/*.py"):
skill_module = importlib.import_module(f"skills.{skill_file}")
for attr in dir(skill_module):
if attr.endswith("Skill"):
skill_class = getattr(skill_module, attr)
skills[skill_class.name] = skill_class()
return skills
async def handle_call(self, tool_name, params):
skill = self.skills.get(tool_name)
if not skill:
raise ValueError(f"Skill {tool_name} not found")
return await skill.execute(params)
# Start MCP server
server = SkillMCPServer()
server.run()
Security and Compliance
Security Levels
class SecurityLevel(Enum):
PUBLIC = "public" # No sensitive data access
INTERNAL = "internal" # Internal systems only
SENSITIVE = "sensitive" # Sensitive data access
RESTRICTED = "restricted" # High security requirements
class SkillSecurity:
def __init__(self, level: SecurityLevel):
self.level = level
def validate_access(self, user_context, skill_params):
if self.level == SecurityLevel.PUBLIC:
return True
elif self.level == SecurityLevel.INTERNAL:
return self.check_internal_access(user_context)
elif self.level == SecurityLevel.SENSITIVE:
return self.check_sensitive_access(user_context, skill_params)
elif self.level == SecurityLevel.RESTRICTED:
return self.check_restricted_access(user_context, skill_params)
Compliance Frameworks
class ComplianceChecker:
def __init__(self, frameworks=["GDPR", "CCPA", "HIPAA"]):
self.frameworks = frameworks
def check_skill_compliance(self, skill, user_data):
violations = []
# GDPR checks
if "GDPR" in self.frameworks:
if skill.processes_personal_data and not user_data.consent_given:
violations.append("GDPR: No consent for personal data processing")
# CCPA checks
if "CCPA" in self.frameworks:
if skill.sells_data and not user_data.opt_out_allowed:
violations.append("CCPA: Data selling without opt-out option")
# HIPAA checks
if "HIPAA" in self.frameworks:
if skill.handles_phi and not user_data.phi_authorized:
violations.append("HIPAA: PHI access without authorization")
return violations
Performance Optimization
Skill Caching
from functools import lru_cache
import hashlib
class CachedSkill:
def __init__(self, skill, cache_size=100):
self.skill = skill
self.cache = {}
self.cache_size = cache_size
def _cache_key(self, params):
# Create deterministic cache key
param_str = json.dumps(params, sort_keys=True)
return hashlib.md5(param_str.encode()).hexdigest()
async def execute(self, params):
cache_key = self._cache_key(params)
if cache_key in self.cache:
return self.cache[cache_key]
result = await self.skill.execute(params)
# Simple LRU cache
if len(self.cache) >= self.cache_size:
oldest_key = next(iter(self.cache))
del self.cache[oldest_key]
self.cache[cache_key] = result
return result
Skill Pooling
import asyncio
class SkillPool:
def __init__(self, skill_class, pool_size=5):
self.pool = asyncio.Queue(maxsize=pool_size)
self.skill_class = skill_class
# Initialize pool
for _ in range(pool_size):
skill = skill_class()
self.pool.put_nowait(skill)
async def execute(self, params):
skill = await self.pool.get()
try:
return await skill.execute(params)
finally:
self.pool.put_nowait(skill)
Testing and Validation
Skill Testing Framework
import pytest
from typing import Dict, Any
class SkillTestSuite:
def __init__(self, skill_class):
self.skill_class = skill_class
self.skill = skill_class()
def test_basic_functionality(self):
"""Test basic skill execution"""
result = asyncio.run(self.skill.execute({
"query": "test query"
}))
assert result is not None
assert "success" in result or "data" in result
def test_parameter_validation(self):
"""Test parameter validation"""
with pytest.raises(ValueError):
asyncio.run(self.skill.execute({}))
def test_error_handling(self):
"""Test error handling"""
result = asyncio.run(self.skill.execute({
"query": "invalid_query_that_should_fail"
}))
assert "error" in result
def test_performance(self):
"""Test performance requirements"""
start_time = time.time()
asyncio.run(self.skill.execute({
"query": "performance test"
}))
duration = time.time() - start_time
assert duration < 2.0 # Should complete in under 2 seconds
# Usage
test_suite = SkillTestSuite(WebSearchSkill)
test_suite.test_basic_functionality()
test_suite.test_parameter_validation()
test_suite.test_error_handling()
test_suite.test_performance()
Skill Validation Service
class SkillValidator:
def __init__(self):
self.validators = [
self.validate_metadata,
self.validate_dependencies,
self.validate_security,
self.validate_performance,
self.validate_compliance
]
def validate_skill(self, skill_path):
results = {}
for validator in self.validators:
try:
result = validator(skill_path)
results[validator.__name__] = result
except Exception as e:
results[validator.__name__] = {"error": str(e)}
return results
def validate_metadata(self, skill_path):
"""Validate skill metadata"""
metadata_file = os.path.join(skill_path, "skill.yaml")
if not os.path.exists(metadata_file):
raise ValueError("Missing skill.yaml")
with open(metadata_file) as f:
metadata = yaml.safe_load(f)
required_fields = ["name", "description", "version", "author"]
for field in required_fields:
if field not in metadata:
raise ValueError(f"Missing required field: {field}")
return {"valid": True, "metadata": metadata}
Custom Skill Development
Skill Template
# skill_template.py
"""
Template for creating new agent skills
"""
from typing import Dict, Any, Optional
import asyncio
import logging
class TemplateSkill:
"""Template skill implementation"""
# Skill metadata
name = "template_skill"
display_name = "Template Skill"
description = "A template for creating new skills"
version = "1.0.0"
author = "Your Name"
# Configuration
def __init__(self, config: Optional[Dict[str, Any]] = None):
self.config = config or {}
self.logger = logging.getLogger(self.name)
# Initialize based on config
self.api_key = self.config.get("api_key")
self.timeout = self.config.get("timeout", 30)
async def execute(self, params: Dict[str, Any]) -> Dict[str, Any]:
"""
Execute the skill with given parameters
Args:
params: Dictionary of parameters
Returns:
Dictionary containing the result
"""
try:
# Validate parameters
validated_params = self._validate_params(params)
# Execute main logic
result = await self._execute_logic(validated_params)
# Format response
return self._format_response(result)
except Exception as e:
self.logger.error(f"Skill execution failed: {e}")
return {
"success": False,
"error": str(e),
"error_type": type(e).__name__
}
def _validate_params(self, params: Dict[str, Any]) -> Dict[str, Any]:
"""Validate input parameters"""
required_params = ["query"]
for param in required_params:
if param not in params:
raise ValueError(f"Missing required parameter: {param}")
return params
async def _execute_logic(self, params: Dict[str, Any]) -> Any:
"""
Main skill logic - override this method
Args:
params: Validated parameters
Returns:
Raw result from skill execution
"""
# Implement your skill logic here
await asyncio.sleep(0.1) # Simulate async operation
return {"processed": params["query"]}
def _format_response(self, result: Any) -> Dict[str, Any]:
"""Format the result for consistent response structure"""
return {
"success": True,
"data": result,
"skill": self.name,
"timestamp": time.time()
}
Skill Generator Tool
class SkillGenerator:
"""Tool to generate new skills from templates"""
def __init__(self):
self.template_dir = "skill_templates"
def generate_skill(self, skill_name: str, skill_type: str = "api_client"):
"""Generate a new skill from template"""
# Load template
template_path = os.path.join(self.template_dir, f"{skill_type}.py")
with open(template_path) as f:
template_content = f.read()
# Customize template
skill_content = template_content.replace(
"{{SKILL_NAME}}", skill_name
).replace(
"{{DISPLAY_NAME}}", skill_name.replace("_", " ").title()
)
# Create skill directory
skill_dir = f"skills/{skill_name}"
os.makedirs(skill_dir, exist_ok=True)
# Write skill file
skill_file = os.path.join(skill_dir, f"{skill_name}.py")
with open(skill_file, "w") as f:
f.write(skill_content)
# Generate metadata
metadata = self._generate_metadata(skill_name, skill_type)
metadata_file = os.path.join(skill_dir, "skill.yaml")
with open(metadata_file, "w") as f:
yaml.dump(metadata, f)
# Generate tests
test_content = self._generate_tests(skill_name)
test_file = os.path.join(skill_dir, f"test_{skill_name}.py")
with open(test_file, "w") as f:
f.write(test_content)
print(f"Skill {skill_name} generated in {skill_dir}")
return skill_dir
Best Practices
1. Version Management
# Use semantic versioning
version = "1.2.3"
# Breaking changes: increment major version
# New features: increment minor version
# Bug fixes: increment patch version
2. Error Handling
# Always handle errors gracefully
try:
result = await skill.execute(params)
except SkillTimeoutError:
return {"error": "Skill timed out"}
except SkillAuthError:
return {"error": "Authentication failed"}
except Exception as e:
return {"error": f"Unexpected error: {e}"}
3. Logging
# Use structured logging
logger.info("Skill execution started", extra={
"skill": skill_name,
"params": params,
"execution_id": execution_id
})
4. Configuration
# Support environment variables
config = {
"api_key": os.getenv("SKILL_API_KEY"),
"timeout": int(os.getenv("SKILL_TIMEOUT", "30"))
}
5. Documentation
def execute(self, params):
"""
Execute the skill
Args:
params (dict): Parameters for execution
- query (str): Search query (required)
- max_results (int): Maximum results (optional, default: 10)
Returns:
dict: Execution result
- success (bool): Whether execution succeeded
- data (list): Search results if successful
- error (str): Error message if failed
"""
Community and Contribution
Contributing to Repositories
- Fork the repository
- Create a feature branch
- Follow the skill template
- Add comprehensive tests
- Update documentation
- Submit a pull request
Skill Quality Checklist
- Clear, descriptive name
- Comprehensive metadata
- Proper error handling
- Full test coverage
- Security considerations
- Performance optimization
- Documentation
- Version compatibility
Community Resources
- Discord: Agent Skills Community
- Reddit: r/AgentSkills
- GitHub Discussions: Repository discussions
- Stack Overflow: Tag with
agent-skills
Key Takeaway: Leverage existing skill repositories to accelerate development, but always validate security, performance, and compatibility before production use.
Next: Learn about skill design patterns for building robust, reusable skills.