kRouter Agent Skills: one link teaches an agent an endpoint
kRouter ships 8 Agent Skills: Markdown files an AI agent reads to call chat, TTS, STT, images, embeddings, web search and fetch on your own router.
If you use Claude Code, Aider, or any terminal-based AI agent, you have probably wished it could do more than just edit files. What if your agent could also generate speech audio, run web searches, create embeddings for your RAG pipeline, or generate images -- all through the same local endpoint?
kRouter makes this possible with Agent Skills.
What Is a Skill?
A Skill is a Markdown file in the kRouter GitHub repository that describes one group of kRouter's API endpoints. It includes the endpoint URL, how authentication works, how to discover the available models, the request fields, working examples, the response shape, and each provider's quirks.
When you hand an agent that file's URL, it reads the description and calls the endpoint the way the file says. No SDK installation. No hand-written API documentation. One URL, and the agent has what it needs.
Two things have to be true for that to work: the agent must be able to fetch a URL (Claude Code can), and the capability has to be backed by a provider you have connected in kRouter. A skill teaches the agent how to ask; it does not add a TTS or search provider by itself.
The 8 Skills
kRouter ships 8 skills: one entry skill and seven capability skills.
| Skill | Endpoint | What It Does | Example providers |
|---|---|---|---|
| krouter (Entry) | -- | Setup, auth, model discovery, links to the other seven | All |
| krouter-chat | /v1/chat/completions, /v1/messages | Chat and code generation, OpenAI or Anthropic format | Claude, GPT, Gemini, GLM, Kimi, Qwen |
| krouter-tts | /v1/audio/speech | Text-to-speech audio | OpenAI, ElevenLabs, Edge TTS, Google TTS, Deepgram |
| krouter-stt | /v1/audio/transcriptions | Speech-to-text transcription | OpenAI Whisper, Groq, Gemini, Deepgram, AssemblyAI |
| krouter-image | /v1/images/generations | Image generation | OpenAI, Gemini, FLUX, MiniMax, SD WebUI |
| krouter-embeddings | /v1/embeddings | Vector embeddings for RAG | OpenAI, Gemini, Mistral, Voyage, Jina |
| krouter-web-search | /v1/search | Web search results | Tavily, Exa, Brave, Serper, SearXNG |
| krouter-web-fetch | /v1/web/fetch | A URL as Markdown, text or HTML | Firecrawl, Jina Reader, Tavily, Exa |
There is no skill for video yet. The /v1/videos endpoints exist, but only for xAI's Grok Imagine -- see the video post.
Detailed Skill Examples
The examples below run on the same machine as kRouter, so they need no API key unless you have switched on Require API key. From another machine, add -H "Authorization: Bearer <your-krouter-key>", using a key from the dashboard's Endpoint page. Every model is a provider/model id; GET /v1/models/tts (or stt, image, embedding, web) lists the ones your connected providers offer.
krouter-chat: Chat and Code Generation
The most commonly used skill. Your agent sends a standard OpenAI chat completion request to localhost:20128 and kRouter routes it to an account of the provider you named, picking the healthiest one with the Zenith engine.
curl http://localhost:20128/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "cc/claude-sonnet-4-6",
"messages": [{"role": "user", "content": "Explain quicksort in Python"}]
}'krouter-tts: Text-to-Speech
Generate audio from text with any of the TTS providers kRouter supports -- 15 in the current catalog, including a few that need no key at all, such as Edge TTS. The voice is part of the model id: openai/tts-1/nova means OpenAI's tts-1 model with the nova voice. See the TTS routing guide for voice mapping details.
curl http://localhost:20128/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model":"openai/tts-1/nova","input":"Hello from kRouter"}' \
--output hello.mp3krouter-stt: Speech-to-Text
Upload an audio file and get a transcript. The request uses the OpenAI Whisper format whichever STT provider answers it.
curl http://localhost:20128/v1/audio/transcriptions \
-F "file=@meeting.mp3" \
-F "model=openai/whisper-1"krouter-embeddings: Vector Embeddings
Generate embeddings for RAG pipelines, semantic search, or clustering. Same OpenAI SDK interface, routed to whichever embedding provider you name.
curl http://localhost:20128/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"model":"openai/text-embedding-3-small","input":"kRouter is an AI router"}'krouter-web-search and krouter-web-fetch
These two skills give your agent access to the live web. web-search returns search results. web-fetch takes a URL and returns its content as Markdown by default -- useful for feeding documentation pages into an agent's context. For both, the provider is the model, and the request fails with "Missing required field" if you leave it out.
# Web search
curl http://localhost:20128/v1/search \
-H "Content-Type: application/json" \
-d '{"model":"tavily","query":"kRouter installation guide"}'
# Web fetch (URL to Markdown)
curl http://localhost:20128/v1/web/fetch \
-H "Content-Type: application/json" \
-d '{"model":"jina-reader","url":"https://docs.example.com/api"}'How to Use Skills in Claude Code
Feed the raw GitHub URL of any skill to Claude Code as part of your prompt:
claude "Read this skill and use it to generate a podcast intro: \
https://raw.githubusercontent.com/sifxprime/krouter/refs/heads/main/skills/krouter-tts/SKILL.md"Claude fetches the skill, works out the /v1/audio/speech request from it, calls localhost:20128, and saves the .mp3 to your working directory. No SDK installation, and no key to manage for local calls.
If you are not sure which skill fits, give the agent the entry skill (skills/krouter/SKILL.md) instead. It covers setup and links to the other seven, so the agent can fetch the one it needs.
Chaining Skills in Multi-Step Workflows
The real power comes from chaining multiple skills. Here is a concrete agentic workflow:
- Agent reads
krouter-web-searchskill -> searches for "latest React 19 breaking changes" - Agent reads
krouter-web-fetchskill -> fetches the top 3 results as clean Markdown - Agent reads
krouter-chatskill -> summarizes the findings into a migration guide - Agent reads
krouter-ttsskill -> generates an audio briefing of the summary
Each step uses a different kRouter endpoint, but the agent needs zero custom integration code. It reads the skill files and calls the endpoints.
What changed in this post
An earlier version of this post described a krouter mcp command that runs kRouter as an MCP server and exposes every endpoint as a tool. That command does not exist: the krouter CLI has no subcommands, and krouter mcp exits with "Unknown option: mcp". kRouter does have a small MCP bridge, but it only serves a few preset MCP servers to Claude Cowork; it does not turn kRouter's own endpoints into MCP tools. Skills are the way to teach an agent those endpoints.
Where to Find Skills
Open your local kRouter dashboard at http://localhost:20128/dashboard and choose Skills in the sidebar. The page starts with a ready-made line to paste into your agent ("Read this skill and use it: ..."), then lists each skill with a Copy link button. That link is the URL you give your agent.
Or browse them directly on GitHub: github.com/sifxprime/krouter/tree/main/skills.
The links point at the repository's main branch, so they always describe the latest kRouter. If you run an older version, a skill can mention a field or model your install does not have yet.
Common questions
Do I need an API key for skills?
Not for calls from the same machine: kRouter exempts local callers unless you switch on Require API key on the Endpoint page or set REQUIRE_API_KEY=true. Calls from another machine always need a key, sent as Authorization: Bearer <key>.
Do skills work with agents other than Claude Code?
Yes. A skill is plain Markdown. Any agent that can fetch a URL and make HTTP requests can use it -- Cursor, Codex, a custom SDK agent, or a chat assistant with web access.
Why does a search or fetch request come back with "Missing required field"?
Those two endpoints need a provider in the model (or provider) field, such as "model": "tavily". Chat, TTS, STT and embeddings take a provider/model id instead.
Is there a skill for video generation?
Not yet. kRouter's /v1/videos endpoints work with xAI's Grok Imagine, but none of the eight skills covers them.
Get Started
Install kRouter, then connect at least one provider for each capability you want your agent to use:
npm install -g @sifxprime/krouter
krouter -tSee Multimodal & Agent Skills for the media endpoints, the API reference for every route, and the changelog for the latest skill additions.
Published by Kodelyth, the team that builds kRouter. Posts are drafted with AI assistance and reviewed by a person before they go out. kRouter is free and MIT licensed.
Install kRouterRelated posts
- How kRouter worksCopilot BYOK custom endpoint: any model in VS Code chatVS Code's Custom Endpoint lets Copilot Chat use any Chat Completions, Responses or Messages API. Using it with a local router, and what still needs GitHub.
- How kRouter worksJetBrains AI Assistant BYOK: any model through one endpointAI Assistant's OpenAI-compatible provider takes one URL. Put kRouter behind it for chat on any model, and see why Junie and completion stay out.
- How kRouter worksXcode with any model: chat, Claude Agent and CodexXcode 26 and 27 can run chat, Claude Agent and Codex on other models, but each reads its own config. How to point all three at one local router.
Relevant docs
- Core conceptsProviders, combos, account routing, token savers, MITM mode, quota tracking, the response cache and remote access: the eight ideas behind kRouter.
- The Zenith Routing EngineHow kRouter picks which of your accounts serves a request: Zenith scoring, conversation stickiness, cooldowns, and the round-robin, P2C and random options.
- Token savers: RTK, Caveman, Ponytail, Headroom, PXPIPEFive ways kRouter can shrink a request before it reaches the provider. Only RTK is on by default. What each saver does, what it needs, and its limits.