skill-router

A meta-skill designed to help AI agents intelligently decide which skill to use, evaluate the current skill environment, or vet unfamiliar skills before installation. It reduces redundant checks and clarifies skill choice when multiple options exist or none are obvious.

32 stars
Complexity: easy

About this skill

The skill-router acts as a decision-making utility for AI agents, specifically when the choice of which skill to employ is unclear or ambiguous. Its primary function is to prevent common pitfalls such as repeatedly rediscovering already-installed skills, wasting time comparing overlapping capabilities, or installing new skills unnecessarily when the existing environment is already sufficient. This skill is particularly useful in scenarios where an agent might be unsure if a required skill is present, if the user's request maps to multiple existing skills, or if a new, suggested skill should be evaluated for suitability and safety before being added to the agent's toolkit. By centralizing this routing logic, it aims to streamline an agent's workflow and make skill-selection more efficient and deliberate. It is designed to be invoked only when skill choice itself is blocking progress, ensuring that the overhead of routing does not exceed the benefit of the decision. If the routing process would not change the agent's next action, the skill explicitly advises against its own use.

Best use case

This skill is invaluable for AI agents operating in complex environments with a growing number of available skills, especially when users frequently ask for guidance on skill usage or when skill names and functionalities might overlap. It benefits agents by providing a structured approach to skill management and selection, reducing operational friction and improving decision accuracy for users who are unsure how to proceed.

A meta-skill designed to help AI agents intelligently decide which skill to use, evaluate the current skill environment, or vet unfamiliar skills before installation. It reduces redundant checks and clarifies skill choice when multiple options exist or none are obvious.

A clear, actionable decision on which skill to use, whether to install a new skill, or confirmation that the current environment is sufficient for the task.

Practical example

Example input

I need to process some tabular data. Do I have a skill for that? Which one should I use?

Example output

Yes, you have the `data-analyzer` skill installed, which is suitable for tabular data processing. Use that skill.

When to use this skill

  • The user asks which skill to use for a task.
  • The user asks if a skill already exists for a specific purpose.
  • Multiple installed skills plausibly fit the user's request, and the best choice is genuinely unclear.
  • The current installed environment may be insufficient for the user's needs, or a new skill needs vetting.

When not to use this skill

  • The task should be executed directly without needing a skill decision.
  • One installed skill is the obvious and unambiguous match for the task.
  • The correct skill is already active, or the user explicitly named the skill to use.
  • More routing detail would not change the next practical action of the agent.

How skill-router Compares

Feature / Agentskill-routerStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityeasyN/A

Frequently Asked Questions

What does this skill do?

A meta-skill designed to help AI agents intelligently decide which skill to use, evaluate the current skill environment, or vet unfamiliar skills before installation. It reduces redundant checks and clarifies skill choice when multiple options exist or none are obvious.

How difficult is it to install?

The installation complexity is rated as easy. You can find the installation instructions above.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Skill Router

Use this skill only when **skill choice itself** is blocking progress.

Its job is to reduce:
- repeated discovery of already-installed skills
- repeated comparison between overlapping skills
- unnecessary installation when the current environment is already enough
- routing commentary that costs more than the decision itself

If routing will not change the next real action, do not use this skill further.

## Trigger boundary

### Activate when
- the user asks which skill to use
- the user asks whether a skill already exists for the task
- multiple installed skills plausibly fit and the default is genuinely unclear
- the current installed environment may be insufficient
- the user wants to evaluate an unfamiliar skill before installation

### Do not activate when
- the task should just be executed directly
- one installed skill is the obvious match
- the correct skill is already active
- the user explicitly named the skill to use
- more routing detail would not change the next action

If unsure, prefer silence.

## Main path

Follow this path and stop as soon as a sufficient answer appears.

### Step 0 — Decide whether routing is needed
Ask:

**Will a routing decision materially change the next action?**

If no, stop. This task does not need skill-router.

### Step 1 — Prefer installed reality
Check the installed environment first.

If there is already:
- a clearly sufficient installed skill, or
- a stable local default for this overlap,

use it and stop.

### Step 2 — Test genuine insufficiency
Only escalate if the installed set is actually not enough.

Use the minimum test:
1. Can an installed skill accept the task input?
2. Can an installed skill produce the needed output?
3. Is the quality sufficient for the user’s real purpose?

If all three are yes, stay with the installed path.
If any answer is no, continue.

### Step 3 — Discover only for a real gap
If the installed environment is genuinely insufficient:
- state what capability is missing
- keep the candidate set small
- prefer concrete candidates over broad browsing
- if `find-skills` is installed, prefer delegating discovery to it

### Step 4 — Vet unfamiliar candidates before recommendation
If a candidate is unfamiliar, third-party, or broad in permissions:
- vet it before recommending installation
- compare scope to stated purpose
- check source accountability
- prefer caution over enthusiasm

## Output style

Default outputs should be short and executable.

Preferred shapes:
- `Use X.`
- `The installed set is sufficient; use X.`
- `The installed set is not enough; discover candidates.`
- `Candidate is unfamiliar; vet before recommendation.`
- `This task does not need skill-router.`

Do not output long routing analysis unless the user explicitly asks for reasoning.

## Default rules

Use these only when they change the decision:
- installed beats imagined
- sufficient beats newer
- dedicated beats general
- platform-specific beats generic
- recurring overlap should converge to a stable default

## Reference files

Read only when needed.

| File | Read when |
|---|---|
| `references/task-to-skill-map.md` | checking or recording a stable local default |
| `references/micro-routing-examples.md` | you need short examples for overlap / insufficiency / vetting |
| `references/local-overrides-example.md` | the user has an explicit local routing preference |
| `references/publish-safe-runtime-contract.md` | vetting an unfamiliar candidate |
| `references/resolution-order.md` | you need the expanded version of the main path |
| `references/sufficiency-policy.md` | the real question is whether the installed path is actually strong enough for the user’s bar |
| `references/default-update-policy.md` | the question is whether a stored default/override should stay, update, narrow, or be ignored |
| `references/crowded-environment-policy.md` | environment size is creating fake routing complexity or irrelevant-skill noise |
| `references/ambiguity-fallback-policy.md` | routing is needed but the task is still under-specified or unusually ambiguous |
| `references/distrust-and-clarification-policy.md` | the user expresses distrust, uncertainty, or the real issue may be missing task information |
| `references/capability-taxonomy.md` | the task is unusually ambiguous and installed reality still does not reveal the dominant path |
| `docs/public-surface.md` | checking what this skill publicly promises |

## Keep in mind

This skill is successful only if it reduces decision waste.
If it is adding commentary without changing the decision, it is failing.
n mind

This skill is successful only if it reduces decision waste.
If it is adding commentary without changing the decision, it is failing.
sion, it is failing.

Related Skills

find-skills

3891
from openclaw/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities

filesystem

3891
from openclaw/skills

Advanced filesystem operations for listing files, searching content, batch processing, and directory analysis. Supports recursive search, file type filtering, size analysis, and batch operations like copy/move/delete. Use when you need to: list directory contents, search for files by name or content, analyze directory structures, perform batch file operations, or analyze file sizes and distribution.

General Utilities

Budget & Expense Tracker — AI Agent Financial Command Center

3891
from openclaw/skills

Track every dollar, enforce budgets, spot spending patterns, and build wealth — all through natural conversation with your AI agent.

General Utilities

yt-dlp

3891
from openclaw/skills

A robust CLI wrapper for yt-dlp to download videos, playlists, and audio from YouTube and thousands of other sites. Supports format selection, quality control, metadata embedding, and cookie authentication.

General Utilities

time-checker

3891
from openclaw/skills

Check accurate current time, date, and timezone information for any location worldwide using time.is. Use when the user asks "what time is it in X", "current time in Y", or needs to verify timezone offsets.

General Utilities

pihole-ctl

3891
from openclaw/skills

Manage and monitor local Pi-hole instance. Query FTL database for statistics (blocked ads, top clients) and control service via CLI. Use when user asks "how many ads blocked", "pihole status", or "update gravity".

General Utilities

mermaid-architect

3891
from openclaw/skills

Generate beautiful, hand-drawn Mermaid diagrams with robust syntax (quoted labels, ELK layout). Use this skill when the user asks for "diagram", "flowchart", "sequence diagram", or "visualize this process".

General Utilities

memory-cache

3891
from openclaw/skills

High-performance temporary storage system using Redis. Supports namespaced keys (mema:*), TTL management, and session context caching. Use for: (1) Saving agent state, (2) Caching API results, (3) Sharing data between sub-agents.

General Utilities

mema

3891
from openclaw/skills

Mema's personal brain - SQLite metadata index for documents and Redis short-term context buffer. Use for organizing workspace knowledge paths and managing ephemeral session state.

General Utilities

file-organizer-skill

3891
from openclaw/skills

Organize files in directories by grouping them into folders based on their extensions or date. Includes Dry-Run, Recursive, and Undo capabilities.

General Utilities

media-compress

3891
from openclaw/skills

Compress and convert images and videos using ffmpeg. Use when the user wants to reduce file size, change format, resize, or optimize media files. Handles common formats like JPG, PNG, WebP, MP4, MOV, WebM. Triggers on phrases like "compress image", "compress video", "reduce file size", "convert to webp/mp4", "resize image", "make image smaller", "batch compress", "optimize media".

General Utilities

edge-tts

3891
from openclaw/skills

Text-to-speech conversion using node-edge-tts npm package for generating audio from text. Supports multiple voices, languages, speed adjustment, pitch control, and subtitle generation. Use when: (1) User requests audio/voice output with the "tts" trigger or keyword. (2) Content needs to be spoken rather than read (multitasking, accessibility, driving, cooking). (3) User wants a specific voice, speed, pitch, or format for TTS output.

General Utilities