pub struct SkillsConfig {Show 30 fields
pub paths: Vec<String>,
pub max_active_skills: NonZero<usize>,
pub disambiguation_threshold: f32,
pub min_injection_score: f32,
pub cosine_weight: f32,
pub hybrid_search: bool,
pub bm25_alpha: f32,
pub learning: LearningConfig,
pub trust: TrustConfig,
pub prompt_mode: SkillPromptMode,
pub two_stage_matching: bool,
pub confusability_threshold: f32,
pub rl_routing_enabled: bool,
pub rl_learning_rate: f32,
pub rl_weight: f32,
pub rl_persist_interval: u32,
pub rl_warmup_updates: u32,
pub rl_embed_dim: Option<usize>,
pub query_rewrite_provider: ProviderName,
pub generation_provider: ProviderName,
pub generation_timeout_ms: u64,
pub generation_output_dir: Option<String>,
pub mining: SkillMiningConfig,
pub evaluation: SkillEvaluationConfig,
pub proactive_exploration: ProactiveExplorationConfig,
pub disambiguate_provider: ProviderName,
pub semantic_scan: bool,
pub semantic_scan_provider: ProviderName,
pub group_structured: bool,
pub support_similarity_threshold: f32,
}Expand description
Skill discovery and matching configuration, nested under [skills] in TOML.
Controls where skills are loaded from, how they are ranked during retrieval, the RL re-ranking head, NL skill generation, and automated skill mining.
§Example (TOML)
[skills]
paths = ["~/.config/zeph/skills"]
max_active_skills = 5
disambiguation_threshold = 0.20
hybrid_search = trueFields§
§paths: Vec<String>Directories to scan for *.skill.md / SKILL.md files.
max_active_skills: NonZero<usize>§disambiguation_threshold: f32§min_injection_score: f32§cosine_weight: f32§hybrid_search: bool§bm25_alpha: f32Blend weight for BM25 hybrid retrieval: score = bm25_alpha * cosine_clamped + (1 - bm25_alpha) * bm25_norm.
Only used when hybrid_search = true. Valid range: [0.0, 1.0]. Values outside this
range are clamped at load time with a warning. Default: 0.7 (cosine-dominant).
learning: LearningConfig§trust: TrustConfig§prompt_mode: SkillPromptMode§two_stage_matching: boolEnable two-stage category-first skill matching (requires category set in SKILL.md).
Falls back to flat matching when no multi-skill categories are available.
confusability_threshold: f32Warn when any two skills have cosine similarity ≥ this threshold. Set to 0.0 (default) to disable the confusability check entirely.
rl_routing_enabled: boolEnable RL routing head for skill re-ranking (disabled by default).
rl_learning_rate: f32Learning rate for REINFORCE weight updates.
rl_weight: f32Blend weight: final_score = (1-rl_weight)*cosine + rl_weight*rl_score.
rl_persist_interval: u32Persist weights every N updates (0 = persist every update).
rl_warmup_updates: u32Skip RL blending for the first N updates (cold-start warmup).
rl_embed_dim: Option<usize>Embedding dimension for the RL routing head.
Must match the output dimension of the configured embedding provider.
Defaults to None → 1536 (text-embedding-3-small output dimension).
query_rewrite_provider: ProviderNameProvider name for optional query rewriting before skill matching.
When set to a non-empty provider name, the query is rewritten via a fast LLM call (5 s timeout) before embedding. The rewritten query is used only for skill matching, not for the conversation. When empty (default), query rewriting is disabled and the raw user query is embedded directly — zero overhead.
generation_provider: ProviderNameProvider name for /skill create NL generation. Empty = primary provider.
generation_timeout_ms: u64Timeout in milliseconds for /skill create LLM generation (covers all internal retries).
Default: 60000 (60 s).
generation_output_dir: Option<String>Directory where generated skills are written. Defaults to first entry in paths.
mining: SkillMiningConfigSkill mining configuration.
evaluation: SkillEvaluationConfigExternal-feedback skill evaluator configuration (#3319).
proactive_exploration: ProactiveExplorationConfigProactive world-knowledge exploration configuration (#3320).
disambiguate_provider: ProviderNameProvider name for skill disambiguation LLM classification calls.
When set, the named provider is used instead of the primary provider for skill disambiguation. Useful to route disambiguation to a cheaper or faster model. When empty (the default), the primary provider is used.
semantic_scan: boolEnable LLM-backed semantic SKILL.md compliance scan on plugin add.
When true, the agent asks an LLM whether the skill’s declared purpose is
consistent with its actual content. Non-compliant skills are rejected with a
user-facing error message. PluginError::SemanticViolation is used only by the
Stage-1 ephemeral path. Stage-1 regex scan always runs and is advisory regardless
of this setting.
Default: false.
semantic_scan_provider: ProviderNameProvider name (from [[llm.providers]]) used for the semantic scan.
When empty (the default), the primary/main provider is used.
group_structured: boolEnable GoSkills group-structured skill injection.
When true, the top-N matched skills are presented to the LLM as an
entry-point + support structure, improving multi-skill task execution.
Falls back to flat injection when no pair exceeds support_similarity_threshold.
Default: false.
support_similarity_threshold: f32Inter-skill cosine similarity threshold for GoSkills grouping.
A candidate skill becomes a support skill when its cosine similarity to the
entry point exceeds this value (strict >). Valid range: [0.0, 1.0].
Default: 0.50.
Trait Implementations§
Source§impl Debug for SkillsConfig
impl Debug for SkillsConfig
Source§impl<'de> Deserialize<'de> for SkillsConfig
impl<'de> Deserialize<'de> for SkillsConfig
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<SkillsConfig, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<SkillsConfig, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for SkillsConfig
impl Serialize for SkillsConfig
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for SkillsConfig
impl RefUnwindSafe for SkillsConfig
impl Send for SkillsConfig
impl Sync for SkillsConfig
impl Unpin for SkillsConfig
impl UnsafeUnpin for SkillsConfig
impl UnwindSafe for SkillsConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request