Deterministic, private-by-default skill routing before the main LLM runs. Built by VEDAXI.
Overview
Skill Router is a deterministic, platform-agnostic routing layer between a user request and agent execution. It classifies the request before the main LLM, selects one primary skill plus only required supporting skills, and emits an auditable verdict without exposing the full local skill catalog. The eight action buckets describe what the request is doing. They map mechanically to the four purpose buckets used by each skill's bucket: frontmatter. Risk is resolved after classification. Routine, dependency-ready routes can proceed. Governance and material markers produce risk=human. Missing evidence or unavailable dependencies produce status=blocked; the router does not guess. Automatically select from downloaded skills without remembering their names: The discovery router reads local name, description, and bucket frontmatter. It never prints or serializes the complete catalog. Loading SKILL.md gives an agent the routing method.
README
Skill Router by @luxurylifestyleco / VEDAXI
Install skills. Forget their names. Ask naturally.
Skill Router is a deterministic, platform-agnostic routing layer between a user request and agent execution. It classifies the request before the main LLM, selects one primary skill plus only required supporting skills, and emits an auditable verdict without exposing the full local skill catalog.
user request -> 8 action buckets -> 4 purpose buckets -> risk/dependencies
-> primary + supporting skills -> agent -> LLM -> verification/ledger
Created by @luxurylifestyleco at VEDAXI.
The router model
The eight action buckets describe what the request is doing. They map mechanically to the four purpose buckets used by each skill’s bucket: frontmatter.
| Action bucket | Purpose bucket | Typical verbs |
|---|---|---|
sense |
data-enrichment |
capture, ingest, scrape, watch, monitor, crawl, record, subscribe, poll |
understand |
data-enrichment |
research, retrieve, analyze, summarize, interpret, investigate, enrich |
decide |
orchestration |
plan, prioritize, synthesize, weigh, recommend, strategize, choose, roadmap |
create |
utility |
write, draft, design, build, generate, compose, render, craft, create, produce |
operate |
orchestration |
execute, run, deploy, dispatch, trigger, schedule, automate, start, stop |
verify |
verification |
audit, verify, validate, review, test, scan, inspect, fact-check, QA, harden, check |
learn |
orchestration |
distill, memorize, reflect, improve, repair, archive, learn, reconcile, prune |
govern |
verification |
authorize, approve, gate, enforce, comply, policy, permission, human gate |
Risk is resolved after classification. Routine, dependency-ready routes can proceed. Governance and material markers produce risk=human. Missing evidence or unavailable dependencies produce status=blocked; the router does not guess.
What ships in v1.0.1
| Component | Working behavior |
|---|---|
taxonomy.mjs |
Deterministically classifies the eight action buckets and maps the four purpose buckets |
auto-route.mjs |
Finds locally installed skills under caller-supplied roots and emits selected matches only |
route.mjs |
Applies trusted purpose-bucket, agent, and skill policies |
| JSONL batch mode | Streams requests and routing plans without buffering a full batch |
| Privacy boundary | Does not bundle or emit a private catalog, call a service, or collect telemetry |
| Runtime | Node.js 18+, zero package dependencies, Windows/macOS/Linux |
60-second demo
node scripts/route.mjs \
--manifest examples/routes.json \
--request "Create a sales workbook for the Q3 forecast as .xlsx" \
--pretty
{
"action_verb": "create",
"action_bucket": "utility",
"risk": "routine",
"status": "routed",
"agent": "data-agent",
"skills": ["spreadsheets"],
"primary": "spreadsheets",
"supporting": [],
"matchedRoutes": [{"id": "spreadsheets", "score": 108}]
}
Automatically select from downloaded skills without remembering their names:
node scripts/auto-route.mjs \
--root /path/to/my/skills \
--request "Create a PowerPoint deck from these results" \
--top 2 \
--pretty
The discovery router reads local name, description, and bucket frontmatter. It never prints or serializes the complete catalog.
Install as an agent skill
npx skills add luxurylifestyleco/skill-router --skill skill-router
Loading SKILL.md gives an agent the routing method. True pre-LLM interception requires one separate, approved host-native installation.
One-time pre-LLM installation
one-time install -> detect host -> show exact adapter patch -> user verifies/approves
-> install + ordering test
future request -> pre-LLM adapter -> deterministic router -> selected skills -> main LLM
The installer must be idempotent and approval-first. It may not silently edit configuration merely because this skill was installed. After activation, normal requests route automatically. Human Gates remain separate for publishing, spending, credentials, authorization, external commitments, and other material actions.
The primary adapter targets are Claude Code, Codex, Hermes Agent, OpenRouter, Google Antigravity, Grok/xAI, OpenClaw, Qwen, DeepSeek, GLM, and Kimi. The core is host-independent; each adapter must use and verify the host’s real lifecycle surface. See references/host-adapters.md.
Batch routing
Each input line is a string or an object with message and optional id:
{"id":"1","message":"Create a quarterly deck"}
{"id":"2","message":"Build an Excel model for the Q3 forecast with no macros"}
node scripts/route.mjs --manifest examples/routes.json --input requests.jsonl
Output is JSONL, so a harness can stream plans to workers. Each verdict includes action_verb, action_bucket, risk, status, primary, supporting, selected skills, route evidence, and unavailable explicitly requested skills.
Route manifest
Every route declares one of the four purpose buckets and may restrict matches to one or more of the eight action buckets:
{
"id": "presentations",
"bucket": "utility",
"agent": "presentation-agent",
"skills": ["presentations"],
"match": {
"verbs": ["create"],
"any": ["slide deck", "presentation", "powerpoint"]
}
}
Safety and privacy
- One primary skill; only required supporting skills.
- Explicit
$skill-namerequests win only when the skill is available. - Invalid manifests, missing evidence, and missing dependencies fail closed.
- Material or authorization-bearing requests reach a Human Gate.
- Routing selects context; it does not execute skills or grant permission.
- The public package contains no private catalog, local skill counts, or private skill names.
- The router makes no network calls and includes no telemetry.
Verify
npm test
npm run check
The behavioral suite covers all eight action buckets, all four mappings, local discovery, explicit skill selection, privacy, batching, enrichment routing, Human Gates, fallback, and invalid manifests.
Platform status
The executable release is the provider-neutral routing core. Host adapters remain designed until adapter code, contract tests, and a real-host smoke test prove pre-model ordering. Consumer chat websites cannot be intercepted without a supported hook, extension, or application-controlled API request.
See references/pipeline.md for the contract and SECURITY.md for the trust boundary.
License
MIT. See LICENSE.
If Skill Router saves you from memorizing a growing skill stack, star the repository and share a routing case. More from VEDAXI.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add luxurylifestyleco/skill-router