Skip to content

skills

Class info

Classes

Name Children Inherits
SkillsManager
llmling_agent.skills.manager
Manages skills discovery and distributes skills provider to agents.

    🛈 DocStrings

    Skills package for Claude Code Skills support.

    SkillsManager

    Manages skills discovery and distributes skills provider to agents.

    Source code in src/llmling_agent/skills/manager.py
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    class SkillsManager:
        """Manages skills discovery and distributes skills provider to agents."""
    
        def __init__(
            self,
            name: str = "skills",
            owner: str | None = None,
            skills_dirs: list[JoinablePathLike] | None = None,
        ) -> None:
            """Initialize the skills manager.
    
            Args:
                name: Name for this manager
                owner: Owner of this manager
                skills_dirs: Directories to search for skills
            """
            self.name = name
            self.owner = owner
            self.registry = SkillsRegistry(skills_dirs)
            self.provider = SkillsResourceProvider(self.registry, name=name, owner=owner)
            self.exit_stack = AsyncExitStack()
            self._initialized = False
    
        def __repr__(self) -> str:
            skill_count = len(self.registry.list_items()) if self._initialized else "?"
            return f"SkillsManager(name={self.name!r}, skills={skill_count})"
    
        async def __aenter__(self) -> Self:
            """Initialize the skills manager."""
            try:
                # Initialize the provider through its async context manager
                await self.exit_stack.enter_async_context(self.provider)
                self._initialized = True
                count = len(self.registry.list_items())
                logger.info("Skills manager initialized", name=self.name, skill_count=count)
            except Exception as e:
                msg = "Failed to initialize skills manager"
                logger.exception(msg, name=self.name, error=e)
                raise
            return self
    
        async def __aexit__(self, *args: object) -> None:
            """Clean up the skills manager."""
            await self.exit_stack.aclose()
    
        def get_skills_provider(self) -> SkillsResourceProvider:
            """Get the skills resource provider for agents."""
            return self.provider
    
        async def refresh_skills(self) -> None:
            """Refresh skills discovery."""
            await self.provider.refresh()
            skill_count = len(self.registry.list_items())
            logger.info("Skills refreshed", name=self.name, skill_count=skill_count)
    
        def add_skills_directory(self, path: JoinablePathLike) -> None:
            """Add a new skills directory to search."""
            if path not in self.registry.skills_dirs:
                self.registry.skills_dirs.append(UPath(path))
                logger.info("Added skills directory", path=str(path))
    

    __aenter__ async

    __aenter__() -> Self
    

    Initialize the skills manager.

    Source code in src/llmling_agent/skills/manager.py
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    async def __aenter__(self) -> Self:
        """Initialize the skills manager."""
        try:
            # Initialize the provider through its async context manager
            await self.exit_stack.enter_async_context(self.provider)
            self._initialized = True
            count = len(self.registry.list_items())
            logger.info("Skills manager initialized", name=self.name, skill_count=count)
        except Exception as e:
            msg = "Failed to initialize skills manager"
            logger.exception(msg, name=self.name, error=e)
            raise
        return self
    

    __aexit__ async

    __aexit__(*args: object) -> None
    

    Clean up the skills manager.

    Source code in src/llmling_agent/skills/manager.py
    63
    64
    65
    async def __aexit__(self, *args: object) -> None:
        """Clean up the skills manager."""
        await self.exit_stack.aclose()
    

    __init__

    __init__(
        name: str = "skills",
        owner: str | None = None,
        skills_dirs: list[JoinablePathLike] | None = None,
    ) -> None
    

    Initialize the skills manager.

    Parameters:

    Name Type Description Default
    name str

    Name for this manager

    'skills'
    owner str | None

    Owner of this manager

    None
    skills_dirs list[JoinablePathLike] | None

    Directories to search for skills

    None
    Source code in src/llmling_agent/skills/manager.py
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    def __init__(
        self,
        name: str = "skills",
        owner: str | None = None,
        skills_dirs: list[JoinablePathLike] | None = None,
    ) -> None:
        """Initialize the skills manager.
    
        Args:
            name: Name for this manager
            owner: Owner of this manager
            skills_dirs: Directories to search for skills
        """
        self.name = name
        self.owner = owner
        self.registry = SkillsRegistry(skills_dirs)
        self.provider = SkillsResourceProvider(self.registry, name=name, owner=owner)
        self.exit_stack = AsyncExitStack()
        self._initialized = False
    

    add_skills_directory

    add_skills_directory(path: JoinablePathLike) -> None
    

    Add a new skills directory to search.

    Source code in src/llmling_agent/skills/manager.py
    77
    78
    79
    80
    81
    def add_skills_directory(self, path: JoinablePathLike) -> None:
        """Add a new skills directory to search."""
        if path not in self.registry.skills_dirs:
            self.registry.skills_dirs.append(UPath(path))
            logger.info("Added skills directory", path=str(path))
    

    get_skills_provider

    get_skills_provider() -> SkillsResourceProvider
    

    Get the skills resource provider for agents.

    Source code in src/llmling_agent/skills/manager.py
    67
    68
    69
    def get_skills_provider(self) -> SkillsResourceProvider:
        """Get the skills resource provider for agents."""
        return self.provider
    

    refresh_skills async

    refresh_skills() -> None
    

    Refresh skills discovery.

    Source code in src/llmling_agent/skills/manager.py
    71
    72
    73
    74
    75
    async def refresh_skills(self) -> None:
        """Refresh skills discovery."""
        await self.provider.refresh()
        skill_count = len(self.registry.list_items())
        logger.info("Skills refreshed", name=self.name, skill_count=skill_count)