Problem Statement
Currently, the SkillsTool is tightly coupled to file-system–based skill loading. All skill resolution logic lives inside SkillsFunction, making it impossible to plug in alternative skill sources (e.g., remote registries, databases, classpath-based providers) without modifying the core class.
This limits extensibility for users who want to integrate skills from non-filesystem backends.
Proposed Solution
Introduce a SkillProvider SPI (Service Provider Interface) that decouples skill discovery and loading from the SkillsTool core:
SkillProvider interface — defines listSkills() and loadSkill(name) methods for pluggable skill backends
SkillDescriptor interface — describes a skill's metadata (name, description) without loading its full content
FileSystemSkillProvider — default implementation preserving existing file-system behavior
SkillsTool.Builder.addSkillProvider() — allows registering custom providers
- Full backward compatibility with
addSkillsDirectory() / addSkillsResource() API
This enables community contributors to implement custom SkillProvider implementations for their own backends while keeping the default behavior unchanged.
Problem Statement
Currently, the
SkillsToolis tightly coupled to file-system–based skill loading. All skill resolution logic lives insideSkillsFunction, making it impossible to plug in alternative skill sources (e.g., remote registries, databases, classpath-based providers) without modifying the core class.This limits extensibility for users who want to integrate skills from non-filesystem backends.
Proposed Solution
Introduce a SkillProvider SPI (Service Provider Interface) that decouples skill discovery and loading from the
SkillsToolcore:SkillProviderinterface — defineslistSkills()andloadSkill(name)methods for pluggable skill backendsSkillDescriptorinterface — describes a skill's metadata (name, description) without loading its full contentFileSystemSkillProvider— default implementation preserving existing file-system behaviorSkillsTool.Builder.addSkillProvider()— allows registering custom providersaddSkillsDirectory()/addSkillsResource()APIThis enables community contributors to implement custom
SkillProviderimplementations for their own backends while keeping the default behavior unchanged.