omniroute
Skill0 starsChanged 26 days agoMITView on GitHub
OmniRoute free AI gateway over OpenAI REST, 350+ providers with 150+ free tiers. Use when mentioning OmniRoute, OMNIROUTE_URL, auto/best-free, free-tier routing.
- Reads credentials
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
All requests: ${OMNIROUTE_URL}/v1/...
- Very specific: line 127
No daemon restart is needed after node/connection/model writes.
- Very specific: line 141
If the omniroute shell wrapper errors out (ModuleNotFoundError: surface_daemon_command on some installs), call the real entry directly:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OmniRoute
Free-first AI gateway exposing OpenAI-compatible REST. Hundreds of providers, most with a free tier, plus combo routing that picks a model per task shape.
Host-native — no Docker, no container. Installed from npm, pinned by vendor/omniroute.
Setup
export OMNIROUTE_URL="http://127.0.0.1:7777" # dashboard and API share one port
export OMNIROUTE_KEY="sk-..." # from the dashboard, or `omniroute keys`All requests: ${OMNIROUTE_URL}/v1/... with header Authorization: Bearer ${OMNIROUTE_KEY}.
Verify: curl $OMNIROUTE_URL/v1/models -H "Authorization: Bearer $OMNIROUTE_KEY"
Config lives in ~/.omniroute/.env
OmniRoute owns its own working directory — ~/.omniroute/ holds .env, storage.sqlite,
and logs/. This is not the repo's ~/.config/<tool>/ layout, and it is deliberate:
upstream reads .env from its working directory, so pointing the unit anywhere else
silently loses the settings.
STORAGE_ENCRYPTION_KEY in that file encrypts every provider credential in
storage.sqlite. Never rotate it and never let a tool regenerate it — the database
becomes unreadable while still looking healthy. Edit the file by hand; the aa verbs never
write to it.
Override the port with OMNIROUTE_PORT, or edit PORT in ~/.omniroute/.env and restart.
Combo routing
The reason to use OmniRoute over a plain provider list — combos pick a model by task shape instead of you naming one:
curl $OMNIROUTE_URL/v1/chat/completions -H "Content-Type: application/json" \
-d '{"model":"auto/best-free","messages":[{"role":"user","content":"hi"}]}'| Combo | Use for |
auto/best-free | only free tiers — cheapest and safest |
auto/best-coding | coding tasks |
auto/best-fast | low-latency replies |
auto/best-chat | general conversation |
Discover models
curl $OMNIROUTE_URL/v1/models # everything currently routable
omniroute models --free # free tiers only, via the CLIProvider keys
Most providers need no key — the free-tier catalogue is what makes the gateway useful out of
the box. Add keys with omniroute setup (walks through it and stores them in the database),
or via the dashboard at http://127.0.0.1:7777. Both write to storage.sqlite, so they need
no edit to ~/.omniroute/.env.
STORAGE_ENCRYPTION_KEY encrypts stored credentials at rest. Never change it once
credentials exist — every previously stored key becomes unreadable.
Add a custom OpenAI-compatible provider (e.g. a third-party api.x gateway)
A custom provider = one provider node (base URL + optional auth headers, stored under prefix) + one provider connection (the API key) + optional manual model overrides (so the models are routable without a discovery call). Three parts:
# 1. Authenticate a dashboard session (password comes from ~/.omniroute/.env DASHBOARD_PASSWORD).
COOKIE=/tmp/omni-cookies.txt
curl -s -c "$COOKIE" http://127.0.0.1:7777/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"password":"<DASHBOARD_PASSWORD>"}'
# 2a. Create the node (name + prefix are required; pick a short unique prefix).
NODE_ID=$(curl -s -b "$COOKIE" http://127.0.0.1:7777/api/provider-nodes \
-H 'Content-Type: application/json' \
-d '{"name":"YJS","prefix":"yjs","apiType":"chat","baseUrl":"https://api.yjs.im/v1","type":"openai-compatible"}' \
| jq -r .node.id)
# 2b. Attach the API key as a connection, defaulting to a model.
curl -s -b "$COOKIE" http://127.0.0.1:7777/api/providers \
-H 'Content-Type: application/json' \
-d "{\"provider\":\"$NODE_ID\",\"name\":\"yjs.im\",\"apiKey\":\"sk-...\",\"defaultModel\":\"<model-id>\"}"
# 2c. Activate it.
CONN_ID=<connection id from 2b>
curl -s -b "$COOKIE" -X PUT "http://127.0.0.1:7777/api/providers/$CONN_ID" \
-H 'Content-Type: application/json' -d '{"isActive":true}'
# 3. Add manual model overrides (skips live discovery; safe for free/limited endpoints).
for M in deepseek-v4-flash-0731 deepseek-v4-flash-vision; do
curl -s -b "$COOKIE" http://127.0.0.1:7777/api/provider-models \
-H 'Content-Type: application/json' \
-d "{\"provider\":\"$NODE_ID\",\"modelId\":\"$M\",\"source\":\"manual\",
\"apiFormat\":\"chat-completions\",\"supportedEndpoints\":[\"chat\"],
\"max_input_tokens\":65536,\"max_output_tokens\":8192}"
done
# 4. Verify: models appear under the prefix; try one through the gateway.
curl http://127.0.0.1:7777/v1/models -H "Authorization: Bearer $OMNIROUTE_KEY" \
| jq -r '.data[].id' | grep '^yjs/'
curl http://127.0.0.1:7777/v1/chat/completions \
-H "Authorization: Bearer $OMNIROUTE_KEY" -H 'Content-Type: application/json' \
-d '{"model":"yjs/deepseek-v4-flash-0731","messages":[{"role":"user","content":"ok"}]}'Notes:
- Node
baseUrlmust end with/v1(the OpenAI-compatible root). Custom HTTP headers can be passed on the node (customHeaders) instead of the connection's key. - A bare inference key (
OMNIROUTE_KEYwith only["self:usage"]scope) cannot write to the management API. Use the dashboard password session, amanage-scope key, or the local CLI token. - No daemon restart is needed after node/connection/model writes; the gateway picks them up on the next request.
CLI equivalents (when the wrapper is healthy)
The CLI mirrors the management API, so when the omniroute shell wrapper works you can do:
omniroute providers add yjs --credential sk-... --default-model deepseek-v4-flash-0731
omniroute models add yjs deepseek-v4-flash-0731 --api-format chat-completions
omniroute models add yjs deepseek-v4-flash-vision --api-format chat-completions
omniroute providers test yjsIf the omniroute shell wrapper errors out (ModuleNotFoundError: surface_daemon_command
on some installs), call the real entry directly:
node "$(npm root -g)/omniroute/bin/omniroute.mjs" <subcommand> ...On this machine that resolves to
node /home/raka/.local/share/nodejs/node-v24.11.0-linux-x64/lib/node_modules/omniroute/bin/omniroute.mjs.
The CLI's management calls also 401 without a manage-scope key, so fall back to the
dashboard-password curl flow above.
Manage the daemon
aa omniroute status # process, systemd, ports, API readiness
aa omniroute restart # needed after any env edit
aa omniroute logs # journalctl tail
aa omniroute models # /v1/models through the gateway
aa omniroute service-install # 24/7 systemd user unit + enable-lingerAlso upstream, for settings the aa verbs do not cover:
omniroute doctor # environment + config diagnostics
omniroute keys # mint/revoke API keys
omniroute cost # spend report
omniroute status # upstream's own viewErrors
- Port already bound → something else holds 7777; check
ss -ltn | grep 7777, then changePORTin~/.omniroute/.envandaa omniroute restart - Configs unreadable after an upgrade →
STORAGE_ENCRYPTION_KEYchanged; restore the previous~/.omniroute/.env. Checkomniroute doctor omniroute serveexits immediately → runomniroute doctor; the port is the usual cause
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- hongkongkiwi/omniroute-skill★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository172 other files it gives its agents.
- AGENTS.mdAGENTS.md
- aes-agentSkill
- aes-capabilitiesSkill
- aes-contractSkill
- aes-docsSkill
- aes-lint-arwakySkill
- aes-migrationSkill
- aes-rootSkill
- aes-surfaceSkill
- aes-taxonomySkill
- aes-testing-suiteSkill
- aes-utilitySkill
- build-with-aiSkill
- omni-model-inventorySkill
- xai-apiSkill
- android-emulator-linux-gpsSkill
- chromium-profile-provisioningSkill
- computer-useSkill
- flatpak-chromium-automationSkill
- qwen-web-arwaky-devSkill
- qwen-webSkill
- cleanup-consolidateSkill
- codacy-analysis-cliSkill
- codacy-cloud-cliSkill
- codacy-code-reviewSkill
- codebase-inspectionSkill
- coderabbit-reviewSkill
- code-reviewSkill
- configure-codacy-cloudSkill
- configure-codacySkill
- fix-bypassSkill
- fix-markdown-inline-htmlSkill
- fixture-dir-pruningSkill
- harness-source-auditSkill
- no-mistakesSkill
- report-linter-false-positiveSkill
- reviewSkill
- setup-coverageSkill
- strict-code-quality-reviewSkill
- architecture-diagramSkill
- ascii-artSkill
- ascii-videoSkill
- baoyu-infographicSkill
- blender-arwakySkill
- claude-designSkill
- comfyuiSkill
- design-mdSkill
- excalidrawSkill
- game-assetsSkill
- gif-searchSkill
- imagineSkill
- manim-videoSkill
- p5jsSkill
- popular-web-designsSkill
- pretextSkill
- psd-overlay-verificationSkill
- psd-timelapse-workflowSkill
- sketchSkill
- songseeSkill
- songwriting-and-ai-musicSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

