omni-auth — Claude Code skill: OmniRoute authentication
Manage API keys and sessions in OmniRoute. Authenticates requests via Bearer tokens, handles dashboard login with password or OIDC, and controls session access.
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a claude-codeWhat omni-auth does
omni-auth handles authentication for a local or remote OmniRoute gateway. The skill exposes /api/auth/login, /api/auth/logout, and OIDC flows for dashboard access. You get a 30-day auth_token JWT, protect the dashboard with it, and can switch between password login and OIDC or run both in parallel.
Inside: POST and GET methods for password login (requires management_password), logout with CSRF token, OIDC initiation via issuer and client config, ID token validation against JWKS, and checking sub/email against oidcAllowedSubjects. The skill includes curl examples for all endpoints and points to the OpenAPI spec at /api/openapi/spec.
Boundary: OIDC requires at least one entry in oidcAllowedSubjects — an empty list blocks login with not_configured. Password login remains available as fallback while OIDC is enabled.
What it helps with
- Authenticate requests to OmniRoute API with a Bearer token
- Get and store a session JWT for dashboard login
- Set up OIDC login alongside or instead of password auth
- Log out securely with CSRF protection
- Use one OmniRoute key across multiple AI code editors
Example prompts for the agent
- Install omni-auth and set `OMNIROUTE_URL` and `OMNIROUTE_KEY` to authorize API calls with Bearer
- Call POST /api/auth/login with your management password, receive `auth_token` in a session cookie, and access the dashboard
- Enable an OIDC provider in OmniRoute; omni-auth redirects to `/authorize` and validates the ID token on return
How to install omni-auth
1Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a claude-code2Manually: put the files in place
~/.claude/skills/omni-auth/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/omni-auth/
1Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a codex2Manually: put the files in place
.agents/skills/omni-auth/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a cursor2Manually: put the files in place
.cursor/skills/omni-auth/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install cheaper-inference/OmniRoute omni-auth2Manually: put the files in place
.github/skills/omni-auth/SKILL.md1Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a gemini-cli2Platform CLI
gemini skills install https://github.com/cheaper-inference/OmniRoute --path skills/omni-authManually: put the files in place
.devin/skills/omni-auth/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-auth -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set34
The whole set →Similar
Questions about omni-auth
How do I install omni-auth in Claude Code?
Run npx skills add cheaper-inference/OmniRoute --skill omni-auth -a claude-code. The skill is saved to ~/.claude/skills/omni-auth/SKILL.md and becomes available in Claude Code.
What does omni-auth do?
It manages authentication for OmniRoute. Provides endpoints for password or OIDC login, issues a 30-day JWT for dashboard sessions, enforces secure logout with CSRF, and validates ID tokens against the OIDC provider's JWKS.
What is required to use OIDC with omni-auth?
Configure an OIDC provider in OmniRoute (issuer and client), set at least one entry in oidcAllowedSubjects (checked against sub or email from the ID token), and ensure access to {issuer}/.well-known/openid-configuration or {issuer}/authorize. An empty oidcAllowedSubjects list returns not_configured.
Source text
SKILL.md · MIT
---
name: omni-auth
description: Manage API key authentication and session tokens. Start here to authenticate requests via Bearer token, obtain session cookies, and configure login requirements for the OmniRoute API.
---
<!-- generated by src/lib/agentSkills/generator.ts; manual edits will be overwritten -->
## Overview
Manage API key authentication and session tokens. Start here to authenticate requests via Bearer token, obtain session cookies, and configure login requirements for the OmniRoute API.
## Authentication
Remote API requests use a Bearer credential. Dashboard login is different: `POST /api/auth/login` accepts a management password and returns an `auth_token` session cookie.
## Endpoints
### POST /api/auth/login
Authenticate user
```bash
curl -X POST http://localhost:20128/api/auth/login \
-H "Content-Type: application/json" \
-c cookie.jar \
-d '{"password":"<management-password>"}'
```
### POST /api/auth/logout
Log out
```bash
CSRF_TOKEN=$(curl -s http://localhost:20128/api/auth/csrf -b cookie.jar | jq -r .token)
curl -X POST http://localhost:20128/api/auth/logout \
-b cookie.jar \
-H "x-omniroute-csrf: $CSRF_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### GET /api/auth/oidc/login
Start OIDC login for the dashboard admin gate
Builds an authorization URL from the configured OIDC issuer/client (discovered
via `{issuer}/.well-known/openid-configuration`, falling back to `{issuer}/authorize`),
sets a short-lived `oidc_state` cookie, and redirects the browser. Password login
remains available as a fallback while OIDC is enabled.
```bash
curl http://localhost:20128/api/auth/oidc/login \
-b cookie.jar
```
### GET /api/auth/oidc/callback
Complete OIDC login for the dashboard admin gate
Validates the `state` cookie, exchanges the authorization `code` for tokens,
verifies the ID token against the issuer's JWKS (audience = client id), and
checks the token's `sub`/`email` against `oidcAllowedSubjects`, which must hold at
least one entry (an empty list ends in `not_configured`). On success it mints the same 30-day `auth_token` dashboard-session
JWT used by password login and redirects to `/dashboard`.
```bash
curl http://localhost:20128/api/auth/oidc/callback \
-b cookie.jar
```
### GET /api/auth/csrf
GET auth › csrf
```bash
curl http://localhost:20128/api/auth/csrf \
-b cookie.jar
```
### GET /api/auth/status
GET auth › status
```bash
curl http://localhost:20128/api/auth/status \
-b cookie.jar
```
## Payloads
See the full OpenAPI specification at `GET /api/openapi/spec` or `docs/openapi.yaml` for detailed request/response schemas.
<!-- skill:custom-start -->
<!-- Migrated from skills/omniroute/SKILL.md (preserved curated content) -->
# OmniRoute
Local/remote AI gateway exposing OpenAI-compatible REST. One key, 375 providers,
auto-fallback, RTK token saver, MCP server, A2A agents.
## Setup
```bash
export OMNIROUTE_URL="http://localhost:20128" # or VPS / tunnel URL
export OMNIROUTE_KEY="sk-..." # from Dashboard → API Keys
```
All requests: `${OMNIROUTE_URL}/v1/...` with `Authorization: Bearer ${OMNIROUTE_KEY}`.
Verify: `curl $OMNIROUTE_URL/api/health` → `{"ok":true}`
## Discover models
```bash
curl $OMNIROUTE_URL/v1/models # chat/LLM (default)
curl $OMNIROUTE_URL/v1/models/image # image-gen
curl $OMNIROUTE_URL/v1/models/tts # text-to-speech
curl $OMNIROUTE_URL/v1/models/embedding # embeddings
curl $OMNIROUTE_URL/v1/models/web # web search + fetch
curl $OMNIROUTE_URL/v1/models/stt # speech-to-text
```
Use `data[].id` as `model` field in requests. Combos appear with `owned_by:"combo"`.
## Capability skills
| Capability | Raw URL |
| ---------------------- | ------------------------------------------------------------------------------------------------- |
| Chat / code-gen | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Image generation | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Text-to-speech | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Speech-to-text | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Embeddings | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Web search | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| Web fetch | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-inference/SKILL.md |
| MCP server (110 tools) | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-mcp/SKILL.md |
| A2A protocol | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-agents-a2a/SKILL.md |
| Routing & combos | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-combos-routing/SKILL.md |
| Token compression | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-compression/SKILL.md |
| Monitoring & health | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omni-resilience/SKILL.md |
## CLI skills (omniroute binary)
| Capability | Raw URL |
| -------------------------------------- | --------------------------------------------------------------------------------------------- |
| CLI entry point | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-serve/SKILL.md |
| CLI admin & lifecycle | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-serve/SKILL.md |
| CLI providers & keys | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-providers/SKILL.md |
| CLI cloud agents (`omniroute cloud …`) | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-backup-sync/SKILL.md |
| CLI evals & benchmarks | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-eval/SKILL.md |
## Errors
- `401` → set/refresh `OMNIROUTE_KEY` (Dashboard → API Keys)
- `400 Invalid model format` → check `model` exists in `/v1/models/<kind>`
- `503 Provider circuit open` → upstream provider down; retry after `Retry-After` seconds
- `429` → rate limited; honor `Retry-After`
## Differentiators vs OpenAI direct
- **Auto-fallback** combos (19 strategies): never stop coding even if a provider rate-limits
- **RTK token saver**: tool_result compressed via 47 specialized filters (git-diff, test-jest, terraform-plan, docker-logs…) — 20-40% token reduction
- **Caveman mode**: optional terse system prompt injection (LITE/FULL/ULTRA) — 15-25% completion reduction
- **MCP + A2A** servers built-in (this is the only AI router that exposes both protocols)
- **Memory** with FTS5 + Qdrant for persistent agent context
- **Guardrails** for PII masking, prompt injection detection, vision policies
<!-- skill:custom-end -->
© cheaper-inference · MIT · cheaper-inference/OmniRoute