🤖 JARVIS Local
Ton assistant vocal personnel, façon Iron Man, 100 % sur ton PC. Aucune clé API, rien ne sort de la machine.
Tu parles à une orbe futuriste. JARVIS te répond à la voix, et il sait vraiment faire des choses :
- 🗣️ Conversation vocale mains libres : il détecte tout seul quand tu as fini de parler, et tu peux lui couper la parole
- 🛠️ Vraies tâches sur ta machine : il délègue à un agent Claude Code branché sur le modèle local (fichiers, code, analyses…) et te résume le résultat
- 🚀 Lancer tes applications sur l'écran de ton choix (« Mets Spotify sur l'écran de gauche »)
- 🌐 Ouvrir des sites (« Ouvre mes emails »)
- 📊 Cartes, rapports et graphiques directement sur l'interface
- ❌ Annuler une tâche à la voix ou d'un clic
🧱 La stack
| Brique | Outil | Où ça tourne |
|---|---|---|
| Détection de fin de parole | Silero VAD (ONNX) | CPU, ~0,1 ms par trame |
| Oreille | faster-whisper large-v3-turbo (int8) | GPU, ~0,2 s par phrase |
| Cerveau | Qwen3-30B-A3B Instruct (MoE) via Ollama | GPU, ~250 tokens/s |
| Voix | Kokoro 82M (ONNX) | GPU, ~0,1-0,25 s par phrase |
| Agent de tâches | Claude Code : tâches simples sur le modèle local (via Ollama), tâches complexes sur ton abonnement Claude | GPU / cloud |
micro ─WebSocket PCM 16 kHz─► Silero VAD ─► Whisper ─► Qwen3 (+ outils) ─► Kokoro ─► haut-parleurs
│
└─► delegate_task ─► claude -p (sur Ollama)
La réponse est lue par morceaux pendant que le modèle écrit encore : le premier son arrive ~0,8 s après la fin de ta phrase (affiché dans la console : « 1er son … »).
Ce que JARVIS sait faire en plus
- Mémoire : « Souviens-toi que… » / « Oublie… ». Les faits sont gardés dans
memory.json(modifiable à la main) et rechargés à chaque session. - Notifications Windows à la fin de chaque tâche, et sur demande (« préviens-moi… »).
- Routage des tâches : il choisit lui-même local ou Claude selon la difficulté ; dis « avec Claude » ou « en mode cloud » pour forcer Claude.
- Heure et date instantanées (sans passer par l'agent).
- Phrases avec hésitation : si tu reprends la parole moins d'une seconde après une pause, JARVIS abandonne sa réponse et recolle les deux morceaux.
- Corrections de transcription :
corrections.json(« MediaOne » → « Mediawan »…), pris en compte sans redémarrer. - Journal : chaque session est enregistrée dans
logs/AAAA-MM-JJ.log(ce qu'il a entendu, ses réponses, ses outils, la latence).
📋 Prérequis
- Windows, GPU NVIDIA (testé sur RTX 5090 32 Go ; 24 Go = prends un modèle plus petit, voir plus bas)
- Python (n'importe quelle version récente : l'installeur crée un environnement 3.12)
- Ollama
- Optionnel, pour les tâches : Node.js + Claude Code (
npm install -g @anthropic-ai/claude-code). Pas besoin de compte en modeollama.
⚙️ Installation
📘 Guide pas à pas complet (versions testées, vérifications, réinstallation sur un nouveau PC) : INSTALL.md
powershell -ExecutionPolicy Bypass -File install.ps1
Le script crée .venv, installe les dépendances, télécharge Kokoro et Silero dans models/, puis fait ollama pull qwen3:30b-a3b-instruct-2507-q4_K_M. Whisper se télécharge tout seul au premier démarrage.
⚡ Réglage Ollama recommandé
Par défaut, Ollama ne traite qu'une requête à la fois : pendant qu'une tâche de l'agent tourne, JARVIS ne peut plus te répondre. Pour éviter ça, mets ces variables d'environnement utilisateur, puis redémarre Ollama :
setx OLLAMA_NUM_PARALLEL 2
setx OLLAMA_FLASH_ATTENTION 1
setx OLLAMA_KV_CACHE_TYPE q8_0
setx OLLAMA_CONTEXT_LENGTH 32768
Avec ça, le modèle MoE occupe environ 22 Go (2 conversations × 32k de contexte) et laisse de la marge à Whisper et Kokoro sur une carte de 32 Go.
🚀 Lancer
Double-clique start.bat (ou .venv\Scripts\python.exe server.py), puis va sur http://127.0.0.1:8788, clique l'orbe, autorise le micro et parle.
- « Bonjour JARVIS, présente-toi. »
- « Ouvre Discord sur l'écran de gauche. »
- « Lance une tâche : liste les fichiers de mon dossier de travail. »
- « Affiche-moi un comparatif des trois plus grandes villes de France. »
- « Stop » (en lui coupant la parole) / « Annule la tâche. »
🔧 Personnalisation (.env)
Toutes les options sont commentées dans .env.example. Les principales :
| Variable | Défaut | Rôle |
|---|---|---|
JARVIS_LLM |
qwen3:30b-a3b-instruct-2507-q4_K_M |
Modèle Ollama (qwen3:32b = dense, un peu plus fin mais ~4x plus lent). Évite qwen3:30b-a3b tout court : il raisonne à voix haute |
JARVIS_USER_NAME |
(vide) | Ton prénom : JARVIS t'appelle ainsi au lieu de « monsieur » |
JARVIS_VOICE |
ff_siwis |
Voix Kokoro. ff_siwis = seule voix française native (féminine). bm_george, bm_lewis… = hommes britanniques qui parlent français avec l'accent : l'effet majordome garanti |
JARVIS_BARGE_IN |
1 |
Couper JARVIS en parlant. Mets 0 sur haut-parleurs si sa propre voix l'interrompt |
VAD_THRESHOLD / JARVIS_SILENCE_MS |
0.5 / 550 |
Sensibilité du micro / silence qui marque la fin de ta phrase |
JARVIS_AGENT_BACKEND |
ollama |
Moteur des tâches simples (anthropic = tout sur Claude) |
JARVIS_COMPLEX_BACKEND |
anthropic |
Moteur des tâches complexes (ollama = 100 % local) |
JARVIS_CONTINUE_MS |
1000 |
Délai pendant lequel une reprise de parole est la suite de ta phrase |
JARVIS_TEMPERATURE |
0.3 |
Créativité du modèle (bas = plus stable) |
JARVIS_HOTWORDS |
(vide) | Noms propres à bien reconnaître, séparés par des virgules |
JARVIS_NOTIFY |
1 |
Notification Windows à la fin des tâches |
JARVIS_WORKDIR |
D:/jarvis-workspace |
Seul dossier où l'agent travaille |
WHISPER_DEVICE |
cuda |
cpu sans GPU NVIDIA (avec WHISPER_COMPUTE=int8) |
❓ Problèmes fréquents
- « Ollama injoignable » au démarrage : lance Ollama (icône dans la barre des tâches) puis relance.
- JARVIS ne répond plus pendant une tâche : applique le « Réglage Ollama recommandé » ci-dessus.
- Réponses lentes,
ollama psaffiche du CPU : la VRAM est pleine. Ferme les applis gourmandes en GPU, baisseOLLAMA_CONTEXT_LENGTH/JARVIS_NUM_CTX(24576), ou passe à un modèle plus petit. - Il s'interrompt tout seul : sa voix revient dans le micro. Prends un casque, ou
JARVIS_BARGE_IN=0, ou monteVAD_THRESHOLD. - Chrome ne t'entend pas (Edge oui) : Chrome capte un autre micro. Choisis le bon dans la liste sous l'orbe (le choix est mémorisé).
- Il transcrit mal un nom propre (ex. « MediaOne » au lieu de « Mediawan ») : ajoute-le dans
JARVIS_HOTWORDS. - Le tout premier démarrage est long (~30 s pour Whisper) : la carte compile ses noyaux CUDA une fois pour toutes, c'est normal.
- Les tâches sont moins brillantes qu'avec Claude : c'est un modèle local de 32B dans l'agent. Pour les grosses tâches :
JARVIS_AGENT_BACKEND=anthropic. - Les rapports/graphiques ne s'affichent pas : les composants graphiques de l'interface se chargent depuis un CDN, il faut internet (seulement pour ça).
🔒 Sécurité
- Serveur en 127.0.0.1 uniquement : ne l'expose jamais sur le réseau.
- L'agent tourne sans demande d'autorisation (
bypassPermissions), avec tes droits, dansJARVIS_WORKDIR. Garde un dossier dédié. Pour un garde-fou plus strict :JARVIS_PERMISSION_MODE=acceptEdits(les commandes shell sont alors refusées).
📄 Licence
MIT — fais-en ce que tu veux.