Vuncloud Blog
← Retour aux Notes dev

OmniRoute depuis zéro : une passerelle IA locale et gratuite pour Claude, GPT, Gemini et DeepSeek

Un /v1 · vos comptes · boucle locale seulementenviron 12 min

Du code sur deux écrans et un clavier au premier plan, pour une passerelle IA OmniRoute locale

Cursor, Claude Code, Codex et Gemini CLI gardent chacun leur adresse et leur secret. Dès que les fournisseurs se multiplient, les plafonds et le « 429 d'aujourd'hui » se dispersent dans les configurations. OmniRoute ramène cela à une adresse compatible OpenAI sur votre machine. Les clients retiennent http://127.0.0.1:20128/v1. Claude, GPT, Gemini, DeepSeek et le reste du catalogue se branchent dans le tableau de bord. La licence est MIT. Ce parcours suit release/v3.8.53. Ports, commandes et routage correspondent à ce README. Le nombre de fournisseurs bouge avec la version.

« Gratuit » veut dire que le logiciel de la passerelle n'a pas de redevance. Le quota vit sur les comptes fournisseurs que vous reliez. Le projet publie sous /dashboard/free-tiers une estimation des paliers gratuits tiers et précise que le chiffre est un agrégat, pas un crédit de jetons versé par OmniRoute. Les abonnements que vous payez déjà peuvent partager la même adresse via leur propre parcours de compte. Pour comparer les prix catalogues, voir la facture mensuelle des outils de code et les tarifs OpenRouter. OpenRouter est un routeur hébergé. OmniRoute est la passerelle sur votre machine.

20128
Le tableau de bord et /v1 partagent un port local
MIT
Le logiciel est gratuit ; le quota des modèles reste chez le fournisseur
auto
Ne route qu'entre cibles déjà reliées et admissibles

Où se place la passerelle

Voyez-la comme une prise qui ne tourne que sur votre machine. En amont, ce sont toujours OpenAI, Anthropic, Google, DeepSeek ou un autre fournisseur du catalogue. En aval, tout client qui parle Chat Completions ou Responses d'OpenAI. La documentation de la v3.8.53 cite environ 375 fournisseurs et environ 1 475 identifiants de modèles bruts, une partie marquée pour la découverte d'un palier gratuit. Ces comptes sont révisés : fiez-vous au catalogue du tableau de bord, pas à une vieille capture.

  • Vous tenez deux clés.La clé API du fournisseur ou la session OAuth reste dans OmniRoute. Cursor et les scripts utilisent la clé de passerelle de Dashboard → Endpoints.
  • Les identifiants de modèles existent après la liaison.Appelez d'abord /v1/models. Les exemples du README ressemblent à openai/gpt-5.4 et glm/glm-5.2. Prenez l'identifiant que votre liste renvoie vraiment.
  • La liste des clients est large.Le projet nomme Claude Code, Codex, Cursor, Cline, Continue, OpenCode, Copilot, OpenClaw et d'autres. Tout outil avec une base URL OpenAI personnalisée n'a besoin que de l'adresse. omniroute run lance sept CLI.
Le quota est chez le fournisseur

La phrase du README est : apportez vos propres comptes fournisseurs. Un palier gratuit peut exiger une inscription, une validation ou un moyen de paiement, et il peut fermer. Les fournisseurs marqués tos: avoid restent hors de auto par défaut. Relier le compte ne renverse pas cette règle.

Installation depuis zéro : npm et Docker

Il faut Node.js sur la machine. Le chemin court :

npm install -g omniroute
omniroute

La documentation dit que npm warn ERESOLVE et les avertissements de dépendances homologues peuvent d'abord être ignorés. Le tableau de bord s'ouvre sur http://127.0.0.1:20128. L'API est http://127.0.0.1:20128/v1. Pour un proxy sans tableau de bord : omniroute serve --headless ou OMNIROUTE_HEADLESS=1.

npm 11 doit autoriser les scripts d'installation

npm 11 peut bloquer les scripts de cycle de vie. Le postinstall d'OmniRoute doit s'exécuter pour préparer les fichiers d'exécution natifs. La liste autorisée indiquée pour la 3.8.53 :

npm install -g --allow-scripts=omniroute,keytar,onnxruntime-node,@parcel/watcher,@swc/core,protobufjs,esbuild omniroute

Si npm nomme un autre ensemble, prenez la liste de cet avertissement. Autoriser les scripts signifie qu'ils s'exécutent : faites-le après avoir vérifié la provenance. En intégration continue ou sur une machine lente, OMNIROUTE_SKIP_POSTINSTALL=1 saute seulement le préchauffage SQLite natif. La copie des binaires a encore lieu.

Dimensionner Docker pour un agent de code

Le nom d'image dans la documentation reste diegosouzapw/omniroute. :latest suit la plus haute version SemVer stable publiée. Il ne suit pas main. Épinglez une version pour ce que vous gardez. L'exemple publié lie la boucle locale :

docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
  -e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
  -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest

L'image fixe le tas à 1 024 Mo par défaut, assez pour le tableau de bord et un court échange. Claude Code et Codex appellent POST /v1/responses. Ces longs contextes exigent un tas V8 plus grand, sinon le processus meurt par manque de mémoire. Un agent de code correspond au tas 8192 et au conteneur d'au moins 10 Go de la commande ci-dessus. Deux longues requêtes qui se chevauchent passent à un tas de 10 240 à 12 288 et un conteneur de 12 à 16 Go. Apple Silicon utilise la construction arm64 de l'image. Le volume omniroute-data contient des secrets. Sauvegardez-le et supprimez-le comme une donnée confidentielle.

Des mains sur deux ordinateurs portables, pour relier Claude, GPT, Gemini et DeepSeek à une seule adresse OmniRoute
Le client ne garde qu'une base URL. Les clés des fournisseurs restent dans la passerelle.

Relier Claude, GPT, Gemini et DeepSeek

Ouvrez Providers, choisissez un fournisseur que vous avez le droit d'utiliser, collez une clé API ou terminez son parcours de compte. OmniRoute n'ouvre pas les comptes des laboratoires à votre place :

FournisseurCe que vous apportezOù cela va
OpenAI (GPT)Une clé API de platform.openai.comProviders → OpenAI
Anthropic (Claude)Une clé de console.anthropic.com, ou le parcours de compte d'un abonnement Claude que vous payez déjàProviders → Anthropic / cet OAuth
GeminiUne clé de Google AI Studio, ou l'OAuth de Gemini CLIProviders → Gemini
DeepSeekUne clé API de platform.deepseek.comProviders → DeepSeek

Les paliers gratuits sont une autre liste. Ils ne sont pas des synonymes de ces quatre clés. L'assistant de premier lancement peut proposer de configurer des fournisseurs gratuits. Il construit la liste à partir du catalogue sans authentification du moment et ne crée une liaison qu'après votre confirmation, une par une. Des noms déjà apparus : Pollinations, Cloudflare AI, le palier gratuit DeepSeek de SiliconFlow. Conditions, région et existence du palier appartiennent à ce fournisseur. Un ancien texte sur un « Claude sans clé » n'entre pas dans auto si le fournisseur est marqué tos: avoid. Lisez la page Free Tiers du jour avant de vous y fier.

Les fournisseurs à cookie web, comme Gemini Web, ont aussi besoin d'un navigateur. Le paquet npm inclut Playwright, pas le binaire Chromium. Suivez la note Playwright Chromium du dépôt avant le premier appel, sinon la requête échoue dans la couche navigateur.

Une adresse pour l'IDE et la ligne de commande

Copiez la clé de passerelle dans Endpoints. Puis :

Base URL: http://127.0.0.1:20128/v1
API Key:  (Dashboard → Endpoints)
Model:    auto

Confirmez la liste des modèles avant que l'IDE parle :

curl http://127.0.0.1:20128/v1/models \
  -H "Authorization: Bearer YOUR_KEY"

curl http://127.0.0.1:20128/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello"}]}'

Cursor, Cline, Continue et tout module avec une base URL OpenAI personnalisée prennent ces trois lignes. Les clients qui ne peuvent pas envoyer d'en-tête personnalisé peuvent utiliser l'adresse de compatibilité à jeton, par exemple http://127.0.0.1:20128/vscode/YOUR_KEY/chat/completions. Quand le client peut envoyer un en-tête, préférez Authorization: Bearer.

Inutile de retoucher à la main chaque fichier de configuration. Le lancement en une commande injecte les identifiants dans ce processus. Qwen et Gemini reçoivent aussi un répertoire personnel isolé et jetable :

omniroute run claude --model auto
omniroute run codex  --model auto
omniroute run gemini --model auto
omniroute configure codex

omniroute run couvre Claude Code, Codex, Aider, Goose, OpenCode, Qwen Code et Gemini CLI. configure écrit le fournisseur et le modèle dans la configuration propre de l'outil. Les cibles documentées comprennent codex, claude, opencode, qwen, aider, goose, gemini, cline, continue et kilo. --dry-run affiche l'environnement et les arguments sans exécuter. --api-key-env NAME laisse le secret dans le nom d'une variable d'environnement, hors de l'historique du shell.

auto, repli, et qui reste dehors

auto choisit parmi les liaisons déjà connectées et admissibles. Une installation neuve sans rien de branché peut n'avoir aucune cible. C'est attendu. La stratégie, le fournisseur et la latence reviennent dans l'en-tête X-OmniRoute-Decision. Lisez cet en-tête avant le journal du client.

  • Repli conscient du quota.Quand une liaison est épuisée, l'ordonnancement peut passer à une autre qui a encore de la marge. La v3.8.53 ajoute une stratégie pondérée par le quota restant et essaie de garder une conversation sur la même liaison.
  • Une route d'abonnement peut échouer fermée.La combinaison subscription documentée ne dépense que le quota d'abonnement que vous payez déjà. S'il est vide, la requête s'arrête. Elle ne déborde pas sur une autre clé qui facture. Ne mélangez pas clés API payantes et clés d'abonnement dans une combinaison qui bascule n'importe où.
  • tos: avoid reste dehors par défaut.Une connexion réussie n'est pas une entrée dans auto. Pour épingler une clé de passerelle à un modèle, réglez son forcedModel au lieu de figer une URL amont dans le client.

La compression est un pipeline facultatif, transparent pour le client. La documentation la décrit comme des moteurs composables. L'ensemble réellement appliqué est dans l'en-tête de réponse X-OmniRoute-Compression. L'économie dépend du modèle et de la requête. La fourchette du README est une affirmation du projet, pas une garantie par appel. La mémoire est coupée par défaut. Le masquage des identifiants est au choix.

Sur un Cloud Mac : boucle locale et SSH

La passerelle convient à un Mac qui reste allumé : écouter le port 20128 sur la boucle locale, et ramener ce port vers votre portable en SSH. Un Cloud Mac a une région fixe et SSH ; Apple Silicon peut faire tourner l'image arm64 officielle. Ne liez pas l'interface d'administration à 0.0.0.0.

ssh -N -L 20128:127.0.0.1:20128 user@your-cloud-mac

Une fois le tunnel ouvert, Cursor ou omniroute run sur le portable utilisent encore http://127.0.0.1:20128/v1. Cela a l'air local. Les octets arrivent sur la boucle locale du Mac distant. Les secrets des fournisseurs restent dans le volume distant ou le répertoire utilisateur, pas dans Git. Si OpenClaw tourne déjà sur cette machine, pointez son adresse de modèle vers le même /v1 et ne gardez qu'une copie des clés fournisseurs dans la passerelle.

Quand le tableau de bord exige une connexion, la documentation propose un OIDC facultatif. La connexion par mot de passe reste. Le pilotage à distance a aussi des jetons à portée limitée (connect, contexts, tokens) dans le mode distant du projet. Suivez ce chemin. Ne publiez pas le tableau de bord sur une adresse IP publique pour gagner une étape.

Quoi vérifier quand ça bloque

  1. /v1/models est vide.Aucune liaison fournisseur n'a réussi, ou le client a mis la clé fournisseur à la place de la clé de passerelle.
  2. auto ne trouve pas de route.Les seules liaisons sont exclues, ou le palier gratuit du jour n'est pas admissible. Utilisez une clé payante dont vous savez qu'elle fonctionne, ou un identifiant concret de /v1/models.
  3. Après l'installation globale, un module natif manque.Réinstallez avec --allow-scripts de npm 11 et les noms de paquets de cet avertissement.
  4. Un agent de code meurt en cours de requête dans Docker.Montez OMNIROUTE_MEMORY_MB et --memory au palier agent de code. Laissez les 1 024 Mo au tableau de bord.
  5. Le premier appel d'un fournisseur web échoue.Installez Chromium pour Playwright, puis réessayez. Changez la politique de routage après ce succès.
  6. Les chiffres ont vieilli.375 fournisseurs et 1 475 identifiants de modèles sont les chiffres de la documentation v3.8.53. Après une mise à jour, fiez-vous au tableau de bord et au README.

FAQ

En bref : le logiciel est gratuit et le quota est celui du fournisseur ; l'adresse est /v1 sur le port local 20128 ; auto n'utilise que les liaisons admissibles ; les agents de code dans Docker ont besoin de plus de mémoire ; laissez le port sur la boucle locale et transférez-le en SSH. Les questions complètes sont dans les données structurées FAQ en tête de page.

Notes dev · Passerelle

La passerelle reste sur la boucle locale, SSH la ramène au portable

OmniRoute · 20128 · Cloud Mac

Voir les offres Cloud Mac
Offre limitée Voir les offres