Local governed skill router with explainable ranking, content-addressed exact fetches, and read-only consumer operation. Provides deterministic skill library search and retrieval via MCP.
Four tools with complete JSON schemas and descriptions. Naming follows verb_noun pattern (skill_search, skill_fetch, skill_stats, skill_graveyard). Descriptions are domain-specific and moderately detailed (100-200 chars), explaining the ranking policy and content-addressing model. However, parameter descriptions are sparse or missing for several inputs. skill_search has good enum constraints on 'mode'. skill_fetch requires three parameters with minimal guidance on their relationship. skill_stats and skill_graveyard have minimal parameter documentation. No output schemas are documented, LLMs cannot predict response structure. Error handling is not visible in the provided code. Overall: solid naming and basic schemas, but weak parameter guidance and no output documentation.
Load the exact SKILL.md revision selected by skill_search. The router fails closed if the catalog generation or body revision changed between search and fetch. Loaded revisions are pinned in the caller context; there is no implicit hot reload.
Return skills frequently suggested but rarely fetched.
Search indexed skill metadata using the deterministic tf.skillrouter.hybrid-lexical.v1 ranking policy. Results include the score decomposition, immutable skill revision and catalog generation required for an exact fetch.
Return aggregate telemetry, catalog generation, ranking policy and lifecycle counts.
No output schemas documented for any tool. LLMs cannot predict response structure, field names, or types. skill_search should document result array structure (score, revision, catalog_generation fields). skill_fetch should document loaded skill content format.
Parameter descriptions are minimal or absent. skill_fetch parameters 'expected_revision' and 'catalog_generation' lack guidance on their origin or format. skill_stats has empty properties object with no parameter docs. skill_graveyard 'min_searches' lacks context on what 'searches' means.
skill_fetch requires three interdependent parameters (skill_id, expected_revision, catalog_generation) but does not document their relationship or how to obtain them. Description mentions 'fails closed if catalog generation or body revision changed' but does not explain what the LLM should do if this occurs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
skill_stats and skill_graveyard have no visible error handling or recovery guidance in the provided code. If a query fails or returns empty results, the LLM has no guidance on next steps.
skill_search 'top' parameter has minimum=1 but no maximum. Unbounded result limits could cause context window exhaustion. Should cap at 20-50 and document pagination strategy.