MeshWorld India LogoMeshWorld.
AISkillsRepositoriesOpen SourceIntegration202612 min read

Open Source Agent Skill Repositories 2026: Complete Guide

Vishnu
By Vishnu
|Updated: Mar 21, 2026
Open Source Agent Skill Repositories 2026: Complete Guide

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: "skills"
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

  1. Fork the repository
  2. Create a feature branch
  3. Follow the skill template
  4. Add comprehensive tests
  5. Update documentation
  6. 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.

Share_This Twitter / X
Vishnu
Written By

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Enjoyed this article?

Support MeshWorld and help us create more technical content