À propos du projet

Bolo est une application de dictée push-to-talk pour macOS, écrite en Rust, qui transcrit la parole en texte et l’insère dans n’importe quel champ de texte actif, y compris Slack, Notion, Gmail, VS Code, les terminaux et les navigateurs. Le nom vient du hindi, où "bolo" signifie "parler". Elle prend en charge macOS 12+ et Rust 1.88+, et est publiée sous licence MIT, avec un site web de projet indiqué dans le README. Configuration et permissions : le script install.sh crée un environnement Python privé à ~/.bolo/venv, construit le binaire Rust, recherche une clé API Telnyx existante dans ~/.codex/.env ou l’environnement (en demandant et en l’enregistrant dans ~/.bolo/env si aucune n’est trouvée), enregistre Bolo comme élément de connexion et le démarre. Au premier lancement, une boîte de dialogue d’accueil demande quelle touche utiliser pour la dictée, proposant des options comme Right Option, Right Control, F19 et Caps Lock ; le choix est enregistré dans ~/.bolo/env. Bolo a ensuite besoin des permissions de microphone et d’accessibilité de macOS, cette dernière étant accordée à l’interpréteur Python géré à ~/.bolo/venv/bin/python3, qui effectue l’insertion de texte. Le README fournit également une invite pouvant être donnée à un agent de codage pour guider l’installation et l’octroi des permissions. Flux de dictée : maintenez la touche configurée, parlez, puis relâchez. Le texte est inséré au curseur via le presse-papiers, et le contenu précédent du presse-papiers est restauré par défaut. Une icône dans la barre de menu expose les transcriptions récentes pour la copie manuelle, ainsi que des commandes comme Effacer l’historique des transcriptions, Exécuter le test de santé, Réécrire le texte sélectionné, Ajouter un terme au vocabulaire, Ajouter un alias de vocabulaire, Ajouter une règle de correction et Vérifier les mises à jour. Configuration : les paramètres sont lus à partir de l’environnement ou de ~/.bolo/env. Les options incluent TELNYX_API_KEY ; BOLO_HOTKEY pour la touche push-to-talk (right_option, right_control, right_shift, fn, f1 à f19, caps_lock) ; BOLO_PASTE_LAST_HOTKEY pour ré-insérer la dernière transcription ; BOLO_MICROPHONE ; BOLO_MAX_RECORDING_SECONDS, avec un délai d’attente de 30 secondes qui interrompt automatiquement les enregistrements longs ; BOLO_STT_MODEL et BOLO_STT_FALLBACK_MODEL ; BOLO_STT_LANGUAGE pour les indices de langue ou d’accent, avec un retour à l’anglais (US) si un indice non-US est trop lent ; BOLO_STT_FALLBACKS pour une chaîne de fournisseurs séparée par des virgules pouvant inclure telnyx:model, xai et assemblyai ; BOLO_STT_STREAMING, qui contrôle le streaming Deepgram Nova-3 par rapport à la transcription par lots ; BOLO_PRESERVE_CLIPBOARD ; BOLO_LLM_CLEANUP ; BOLO_AUTO_UPDATE ; et BOLO_LOG_TRANSCRIPTS, désactivé par défaut afin que le texte dicté soit masqué dans /tmp/bolo.log. Nettoyage, vocabulaire et corrections : le nettoyage par LLM est par défaut automatique, sautant les dictées courtes et propres et s’activant pour les plus longues ou plus désordonnées ; le README note Telnyx Qwen/Qwen3-235B-A22B avec la pensée désactivée, ou Kimi-K2.5 lorsque LiteLLM est configuré, et précise que MiniMax n’est pas utilisé pour le nettoyage. Le nettoyage peut lire l’application en premier plan et le texte proche du curseur via l’accessibilité pour l’espacement et la capitalisation. Les commandes vocales incluent "scratch that", "actually ...", "polish that" et "prompt that", protégées de sorte à n’agir que lorsque la dictée précédente est encore immédiatement avant le caret et correspond exactement. Le vocabulaire personnel est stocké dans ~/.bolo_vocabulary.json et prend en charge les objets alias pour les malentendus fréquents ; les règles de remplacement déterministes sont dans ~/.bolo/replacements.json ; les styles de nettoyage par application sont dans ~/.bolo/prompt_bindings.json avec les profils default, email, chat et notes. Vie privée et historique : l’audio est envoyé aux API Telnyx pour la transcription et traité uniquement en mémoire, selon le README, et les transcriptions ne sont pas utilisées pour l’entraînement. Les dix dernières transcriptions sont stockées localement à ~/.bolo/transcripts.json, conservant les versions brutes et nettoyées lorsque le nettoyage modifie le texte, et peuvent être supprimées depuis la barre de menu. Limitations et maintenance : Bolo nécessite une connexion internet, la dictée courte fonctionne bien aujourd’hui tandis que la dictée longue et la latence sont encore en amélioration, et le nettoyage est intentionnellement conservateur pour préserver le sens littéral. Les mises à jour sont vérifiées au lancement ou à la demande et sont sautées si des fichiers locaux ont des modifications non commises, si GitHub est inaccessible, si Rust est manquant, ou si le checkout ne peut pas avancer proprement. Un petit jeu d’évaluation basé sur des phrases (eval_dictation.py avec les commandes prompts, init et score) est inclus, et le dépannage se concentre sur /tmp/bolo.log, la présence de la clé API, les permissions pour l’interpréteur géré, et le redémarrage via restart.sh.