Claude Code, sans la facture mensuelle qui explose
Branchez Claude Code sur votre LMbox. À chaque requête, un routeur cascade décide s'il faut un modèle local (gratuit, sur votre LAN) ou Claude Sonnet via Bedrock EU (facturé, frontier). En pratique : 70 à 80 % du trafic ne sort jamais de votre infrastructure.
Claude Code seul, en équipe, ça coûte cher et ça fuit
≈ 400 €/dev/mois
Une équipe de 10 développeurs en mode agentic intensif consomme facilement 4 000 €/mois en API Anthropic directe. Et la facture grimpe avec l'usage.
Le code part chez Anthropic
Chaque prompt agentic envoie le contexte du repo en clair vers une API US. Pas un problème pour un projet open-source, rédhibitoire pour un cabinet, un OIV ou une banque.
Pas de plan B
API down, quota épuisé, sanctions, panne réseau : Claude Code s'arrête. Aucun fallback local, aucune continuité de service hors ligne.
Comment Claude Code se branche sur la Box
Chaque pattern est livré dans la Box. Vous activez ce qui correspond à votre maturité et à votre niveau de souveraineté requis.
Proxy local pur
Claude Code parle directement à un modèle qui tourne sur votre Box. Aucune sortie internet. Bon pour les questions courtes et le code review simple, limité pour les sessions agentic longues.
ANTHROPIC_BASE_URL pointe sur la Box. La Box répond avec Mistral Large 2 ou Codestral via l'endpoint /v1/messages compatible Anthropic.
Cascade routée (recommandé)
Le routeur LMbox lit chaque requête, score sur 6 dimensions (tours, tokens, outils, mots-clés…) et décide : fast (Mistral local), medium (Qwen Coder local), ou frontier (Claude Sonnet via Bedrock EU). Le modèle est swappé sur le wire, le client ne voit qu'une seule URL.
Configurable dans router/config.yaml. En-tête X-LMbox-Force-Tier pour overrider par session. Audit log JSONL exhaustif sur /audit, exporté vers Loki.
MCP RAG sur connecteurs
Claude Code se connecte au serveur lmbox-mcp en plus du LLM. Le serveur expose vos connecteurs (SharePoint, Confluence, Drive, Jira) comme outils MCP. Claude Code peut alors lire vos docs internes pendant la session — sans jamais embarquer le contenu côté Anthropic.
Streamable HTTP transport (spec MCP 2025-11-25). Auth déléguée à Authentik via OIDC. Les recherches RAG s'exécutent dans la Box, seul le résultat ranké est passé au modèle.
Une équipe de 10 dev, 3 scénarios
Hypothèses : 10 développeurs en mode agentic intensif, 8 h/jour ouvrées, ratio observé en cascade 60/30/10 (fast/medium/frontier). Tarifs Bedrock EU au 6 mai 2026.
| Scénario | API Anthropic / Bedrock | Coût LMbox | Total mensuel | Souveraineté |
|---|---|---|---|---|
| Claude Code direct (sans LMbox) | ≈ 4 000 € | — | ≈ 4 000 € · soit 48 000 €/an | Aucune (US) |
| Cascade LMbox (75 % local) | ≈ 800 € | Box amortie sur 36 mois | ≈ 1 100 € · soit 13 200 €/an | Hybride contrôlée |
| 100 % local (Mistral Large 2) | 0 € | Box amortie sur 36 mois | ≈ 300 € · soit 3 600 €/an | Totale (EU / Mistral) |
Le ROI dépend de la taille de l'équipe et de l'intensité d'usage. Au-delà de 5 développeurs en mode agentic, la cascade LMbox s'amortit en moins d'un an, sans compter le bénéfice souveraineté.
Le routeur scoring, par ce qu'il regarde
Heuristiques transparentes, dans router/config.yaml. Chaque décision est tracée dans l'audit log avec le score et les raisons. Si le scoring vous paraît mal calibré, vous éditez le YAML et relancez.
Seuils par défaut : score < 7 → fast · 7-14 → medium · ≥ 15 → frontier.
Ce que chaque tier traite, concrètement
- Reformule cette docstring
- Quelle est la signature de cette fonction ?
- Génère un test simple pour ce helper
- Code review sur ces 3 fichiers
- Refactore ce module avec injection de deps
- Pourquoi ce test flake ?
- Plan agentic 20 tours sur cette feature
- Refactor cross-fichiers avec migration
- Stack trace + traceback Python complexe
5 minutes, 3 commandes
1. Pointer Claude Code sur la Box
Une variable d'environnement, un certificat interne. Aucune modification du binaire Claude Code.
export ANTHROPIC_BASE_URL=https://lmbox.local export ANTHROPIC_API_KEY=$(lmbox vault get claude_code_key) claude # tourne contre la Box
2. Vérifier la décision sans appeler le modèle
Avant de payer un appel Bedrock, on dry-run la décision. Le routeur retourne le tier choisi, le score et les raisons.
$ lmbox router test "Refactor le module auth en injection de deps"
{
"tier": "medium",
"score": 9,
"reasons": ["agentic_keyword:refactor", "turns:1"],
"would_route_to": "ollama/qwen2.5-coder:32b"
}
3. Auditer l'usage par tier
Au bout d'une semaine d'usage, l'équipe sécurité voit qui a routé où, et combien on a dépensé.
$ lmbox router stats 7 TIER REQ ERR TIN/M TOUT/M P50ms P95ms COST€ fast 2 134 2 1.41 0.32 78 142 0.00 medium 612 0 3.20 0.95 1430 2810 0.00 frontier 147 1 2.07 0.61 340 980 34.32 TOTAL 2 893 34.32 Window: last 7 days · ratio_local = 95 %
Et si je veux forcer un tier ?
Trois manières : variable d'environnement temporaire, en-tête HTTP par requête, ou règle YAML par projet. Pratique pour benchmarker, débugger un comportement, ou imposer le frontier sur une feature critique.
# Forcer pour cette session ANTHROPIC_BASE_URL=https://lmbox.local \ curl -H "X-LMbox-Force-Tier: frontier" ... # Ou par projet, dans .LMbox.yml : force_tier: medium # jamais Bedrock, jamais fast
Brancher Claude Code sur les connecteurs LMbox
Pattern C — votre IDE peut chercher dans SharePoint, Confluence, Jira, GitLab et 5 autres connecteurs sans jamais sortir le contenu de la Box. Trois étapes.
1. Déclarer le serveur MCP dans Claude Code
Ajoute un bloc dans ~/.claude/claude.json. Pour la prod, la clé sort du coffre age-chiffré : lmbox vault get LMbox_mcp_key.
{
"mcpServers": {
"LMbox": {
"type": "http",
"url": "https://lmbox.local/mcp",
"headers": {
"x-lmbox-mcp-key": "${LMBOX_MCP_KEY}"
}
}
}
}
2. Vérifier les outils côté Box
Le serveur expose 4 outils. Vérifier qu'ils sont servis et que les sources sont bien indexées avant d'ouvrir une session.
$ lmbox mcp tools • search args=(query, source, top_k) • read_doc args=(doc_id, source) • list_sources args=() • find_similar args=(text, source, top_k) $ lmbox mcp sources ✓ sharepoint SharePoint docs=12 480 last=2026-05-06T08:00 ✓ confluence Confluence docs= 6 230 last=2026-05-06T08:00 ✓ gitlab GitLab docs=24 100 last=2026-05-06T08:00 ✓ jira Jira docs= 3 770 last=2026-05-06T08:00
3. Demander à Claude Code d'utiliser un outil
Au démarrage de la session, les 4 outils LMbox apparaissent dans le contexte du modèle. Les prompts qui les déclenchent exécutent une recherche RAG locale, jamais Anthropic.
$ claude
> Utilise LMbox.search dans Confluence pour retrouver
> tout ce qui concerne le flux SSO Azure AD.
[tool] search confluence "flux SSO Azure AD" → 8 résultats
[model] Le flux SSO est documenté dans 3 espaces :
Architecture (page 142), Sécurité (page 88)…
Seul le top-K classé va au modèle
La recherche s'exécute dans la Box. Seuls les snippets classés (par défaut top-8, configurable dans mcp/config.yaml) sont injectés dans le contexte LLM. Le contenu brut des pages Confluence ou SharePoint ne quitte jamais l'appliance — vous pouvez même désactiver complètement read_doc dans la config si vous voulez interdire le rapatriement de documents entiers.
Ce que les équipes nous demandent avant de signer
+ Le code envoyé en frontier passe-t-il par les US ?
+ Latence locale vs Bedrock, c'est jouable ?
+ Mistral Large 2 fait-il vraiment aussi bien que Sonnet sur du code ?
+ Comment je coupe Bedrock en cas d'incident ?
+ Et en mode air-gap total ?
On installe la Box, on connecte Claude Code
POC 30 jours sur site avec une équipe de 5 à 15 développeurs. On mesure ensemble le ratio local/frontier réel sur vos repos. Si ça ne tient pas la promesse, on remballe.