Skip to content

manager

Class info

Classes

Name Children Inherits
SkillsManager
llmling_agent.skills.manager
Manages skills discovery and distributes skills provider to agents.
    SkillsRegistry
    llmling_agent.skills.registry
    Registry for Claude Code Skills with auto-discovery.
      SkillsResourceProvider
      llmling_agent.resource_providers.skills
      Resource provider for Claude Code Skills.

        🛈 DocStrings

        Skills manager for pool-wide management.

        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)