Skip to content
Back to skills

Agent Routing Models

ASecurity

Use when routing tasks between specialized agents.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
ai-agentspythonrustgoc++dockerdebugging

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add LoopyLuci/Skills --skill agent-routing-models --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Routing Models?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agent Routing Models
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/loopyluci-agent-routing-models/badge)](https://www.skillsdirectory.com/skills/loopyluci-agent-routing-models)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: agent-routing-models
description: "Use when routing tasks between specialized agents."
category: mlops
tags: [agents, routing, classification, orchestration]
---
# Agent Routing Models

Routing tasks to the right agent based on task type, complexity, and agent capability.

## Routing Strategies

### Rule-Based Routing
```python
class RuleRouter:
    def route(self, task: str) -> str:
        task_lower = task.lower()

        if any(kw in task_lower for kw in ["docker", "container", "image", "volume"]):
            return "docker_agent"
        elif any(kw in task_lower for kw in ["c++", "rust", "compile", "build"]):
            return "build_agent"
        elif any(kw in task_lower for kw in ["python", "script", "data"]):
            return "python_agent"
        elif any(kw in task_lower for kw in ["wsl", "linux", "ubuntu"]):
            return "wsl_agent"
        else:
            return "general_agent"
```

### LLM-Based Router

```python
class LLMRouter:
    def __init__(self, router_llm, agents: dict):
        self.llm = router_llm
        self.agents = agents  # agent_name → {description, capabilities}

    def route(self, task: str) -> str:
        prompt = f"""Available agents:
{self._format_agents()}

User task: {task}

Which agent should handle this? Respond with just the agent name."""
        return self.llm.invoke(prompt).strip()

    def route_with_confidence(self, task: str) -> tuple[str, float]:
        prompt = f"""Available agents:
{self._format_agents()}

User task: {task}

Respond in JSON: {{"agent": "agent_name", "confidence": 0.95, "reason": "brief reason"}}"""
        import json
        result = json.loads(self.llm.invoke(prompt))
        return result["agent"], result["confidence"]

    def _format_agents(self) -> str:
        lines = []
        for name, info in self.agents.items():
            lines.append(f"- {name}: {info['description']} (capabilities: {', '.join(info['capabilities'])})")
        return "\n".join(lines)
```

### Embedding-Based Router

```python
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

class EmbeddingRouter:
    def __init__(self, agents: dict):
        self.encoder = SentenceTransformer("all-MiniLM-L6-v2")
        self.agents = agents
        # Pre-encode agent descriptions
        self.agent_embeddings = {
            name: self.encoder.encode(info["description"])
            for name, info in agents.items()
        }

    def route(self, task: str) -> str:
        task_embedding = self.encoder.encode(task)
        scores = {
            name: cosine_similarity([task_embedding], [emb])[0][0]
            for name, emb in self.agent_embeddings.items()
        }
        best = max(scores, key=scores.get)
        return best
```

### Hybrid Router

```python
class HybridRouter:
    def __init__(self, rule_router: RuleRouter, llm_router: LLMRouter,
                 embedding_router: EmbeddingRouter):
        self.routers = [rule_router, llm_router, embedding_router]

    def route(self, task: str) -> str:
        votes = {}
        for router in self.routers:
            result = router.route(task)
            votes[result] = votes.get(result, 0) + 1
        return max(votes, key=votes.get)
```

## Task Classification Router

```python
class TaskClassifier:
    def __init__(self, llm):
        self.llm = llm

    def classify(self, task: str) -> dict:
        prompt = f"""Classify this task:
Task: {task}

Categories:
- type: question|instruction|debugging|analysis|creation
- domain: docker|wsl|windows|cpp|rust|python|general
- complexity: simple|medium|complex
- requires_admin: true|false
- estimated_steps: <number>

Respond in JSON format."""
        import json
        return json.loads(self.llm.invoke(prompt))
```

## Priority Routing

```python
class PriorityRouter(RuleRouter):
    def __init__(self, agents: dict, priority_map: dict = None):
        super().__init__()
        self.agents = agents
        self.priority_map = priority_map or {
            "error": 1,     # highest priority
            "blocking": 2,
            "feature": 3,
            "question": 4,
            "research": 5,
        }

    def route(self, task: str, urgency: str = "normal") -> tuple[str, int]:
        agent = super().route(task)
        priority = self.priority_map.get(urgency, 5)
        return agent, priority
```

## Pitfalls

- Rule-based: misses edge cases, needs constant updating
- LLM-based: adds latency and cost per routing decision
- Embedding-based: requires pre-encoded descriptions, domain-dependent
- No router handles 100% — always implement fallback agent
- Cold start: new agents need routing rules until sufficient routing data

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…