cli-a2a
Interact with the OmniRoute A2A server from the CLI. Send tasks, inspect skill execution history, and test the JSON-RPC 2.0…
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.
Claude Code
$ npx -y skills add cheaper-inference/omniroute --skill omni-auth --agent claude-code
Codex
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a codex -y
Cursor
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a cursor -y
Gemini CLI
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a gemini-cli -y
GitHub Copilot
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a github-copilot -y
OpenCode
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a opencode -y
Windsurf
$ npx skills add cheaper-inference/omniroute --skill omni-auth -a windsurf -y
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 -->
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.
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.
Authenticate user
curl -X POST http://localhost:20128/api/auth/login \
-H "Content-Type: application/json" \
-c cookie.jar \
-d '{"password":"<management-password>"}'Complete a two-factor sign-in
Login step 2 (public). Trades the MFA-pending cookie set by `/api/auth/login` plus a TOTP or recovery code for the dashboard session cookie. Shares the login brute-force lockout; a TOTP step and a recovery code are each accepted once.
CSRF_TOKEN=$(curl -s http://localhost:20128/api/auth/csrf -b cookie.jar | jq -r .token)
curl -X POST http://localhost:20128/api/auth/mfa/verify \
-b cookie.jar \
-H "x-omniroute-csrf: $CSRF_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Two-factor authentication status
curl http://localhost:20128/api/auth/mfa/status \ -b cookie.jar
Start two-factor enrollment
Re-authenticates with the current password and returns a candidate TOTP secret, its `otpauth://` URI and a QR code (PNG data URI). Nothing is persisted.
CSRF_TOKEN=$(curl -s http://localhost:20128/api/auth/csrf -b cookie.jar | jq -r .token)
curl -X POST http://localhost:20128/api/auth/mfa/setup \
-b cookie.jar \
-H "x-omniroute-csrf: $CSRF_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Finish two-factor enrollment
Persists the secret (encrypted at rest) once the current password and a code generated from it both verify. Returns ten single-use recovery codes, shown once.
CSRF_TOKEN=$(curl -s http://localhost:20128/api/auth/csrf -b cookie.jar | jq -r .token)
curl -X POST http://localhost:20128/api/auth/mfa/enable \
-b cookie.jar \
-H "x-omniroute-csrf: $CSRF_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Turn two-factor authentication off
Requires the current password and a live TOTP or recovery code. While `OMNIROUTE_DISABLE_MFA=true` is set, a request from the host itself (loopback peer and loopback `Host`) may omit `code` to remove a factor that can no longer be verified; the session and password are still required.
CSRF_TOKEN=$(curl -s http://localhost:20128/api/auth/csrf -b cookie.jar | jq -r .token)
curl -X POST http://localhost:20128/api/auth/mfa/disable \
-b cookie.jar \
-H "x-omniroute-csrf: $CSRF_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Log out
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 '{}'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.
curl http://localhost:20128/api/auth/oidc/login \ -b cookie.jar
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 requires at least one dashboard admission policy: `oidcAllowedSubjects` (matching `sub` or verified `email`) or `oidcAdmissionClaim` (matching a configured array claim in the verified ID token). When both are present, both must match. Without either policy the callback returns `not_configured`. On success it mints the same 30-day `auth_token` dashboard-session JWT used by password login and redirects to `/dashboard`.
curl http://localhost:20128/api/auth/oidc/callback \ -b cookie.jar
GET auth › csrf
curl http://localhost:20128/api/auth/csrf \ -b cookie.jar
GET auth › status
curl http://localhost:20128/api/auth/status \ -b cookie.jar
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) -->
Local/remote AI gateway exposing OpenAI-compatible REST. One key, 393 providers, auto-fallback, RTK token saver, MCP server, A2A agents.
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}`
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
Interact with the OmniRoute A2A server from the CLI. Send tasks, inspect skill execution history, and test the JSON-RPC 2.0…
Backup and restore OmniRoute data from the CLI. Trigger incremental snapshots, sync to cloud storage, manage backup schedules,…
Submit and monitor batch inference jobs from the CLI. Upload and manage files for batch processing, retrieve results, and…
Send chat completions, stream responses, and start an interactive REPL session from the CLI. Supports all OmniRoute providers,…
Configure and test prompt compression from the CLI. Manage RTK filters, Caveman rules, stacked compression modes, and preview…
Manage context engineering configurations, RTK filter sets, and conversation sessions from the CLI. Apply context-relay settings…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.