Installer
Control Center s’exécute de deux façons : en application web sur app.usectrl.dev, sans rien à télécharger, ou en application de bureau que vous installez. Il s’agit de la même application, avec les mêmes fonctionnalités. La seule différence est l’endroit où s’exécute le serveur — et l’application web ne peut pas en exécuter un à votre place.
L’utiliser dans votre navigateur
Section intitulée « L’utiliser dans votre navigateur »app.usectrl.dev est cette application compilée pour le navigateur. Rien à installer, rien à mettre à jour. Ouvrez-la et connectez-vous.
Ce qu’un onglet de navigateur ne peut pas faire, c’est être le serveur. Chaque
client — bureau, web, téléphone — est un moteur de rendu léger au-dessus d’un
cc_server sans interface qui détient la base de données et fait le travail,
si bien que l’application web parle toujours à un serveur que vous exécutez. Deux
façons de lui en fournir un :
Un serveur sur votre propre machine. Démarrez cc_server localement et
pointez l’application web vers ws://localhost:9030. Les navigateurs considèrent
localhost comme fiable, ce qui n’exige donc ni certificat ni tunnel. C’est le
moyen le plus rapide d’essayer l’application web, et vos données ne quittent
jamais votre machine.
Un serveur sur une autre machine. Comme app.usectrl.dev est servi en HTTPS,
un serveur non local doit être joignable en wss:// avec un certificat auquel le
navigateur fait déjà confiance. cc_server refuse de se lier à une adresse autre
que la boucle locale sans TLS ; choisissez donc l’une des options suivantes :
- donnez-lui un certificat directement, avec
--tls-certet--tls-key - placez-le derrière un proxy inverse qui termine le TLS et démarrez-le avec
--insecure - exposez-le via un tunnel ou un VPN qui fournit le certificat — Tailscale, cloudflared ou équivalent. Paramètres → Serveur → Connexion et état propose l’activation du tunnel intégré sous Partager ce serveur.
Chaque fois que le serveur se trouve derrière un proxy, un NAT ou un tunnel,
définissez --public-url sur l’adresse que les clients doivent réellement
joindre. Par défaut, elle correspond à la liaison locale ; sans ce réglage, les
clients essaient donc le mauvais hôte.
Quelques éléments restent réservés au bureau, car ils ont besoin d’une fenêtre native ou des propres périphériques audio de la machine : la pilule flottante du mode focus, les toasts de notification du système d’exploitation (le centre de notifications intégré fonctionne partout), « Enregistrer et lier » depuis un événement de calendrier, et la réexécution d’un résumé de réunion. Tout le reste — espaces, agents, revue des demandes de tirage, pipelines, tickets, mémoire et l’enregistrement de réunions lui-même — se comporte de la même façon.
Pour connecter l’application web à un serveur, suivez Se connecter à un serveur distant. Pour héberger le serveur, suivez Exécuter un serveur sans interface.
Configuration système requise pour le bureau
Section intitulée « Configuration système requise pour le bureau »| Exigence | macOS | Windows | Linux |
|---|---|---|---|
| Version du système d’exploitation | macOS 13+ (Ventura) | Windows 10+ | Ubuntu 22.04+ ou une autre distribution avec glibc 2.35+ et GTK 3 |
| Architecture | Apple Silicon (arm64) | x64, ARM64 | x86_64 |
| Git | Requis | Requis | Requis |
| Espace disque | ~200 Mo pour l’application, plus le répertoire de données du serveur | ~200 Mo | ~200 Mo |
Les Mac Intel n’ont pas de téléchargement précompilé. Compilez à partir des sources à la place.
Le répertoire de données du serveur grossit bien plus que l’application. À son premier démarrage, cc_server installe de force les modèles sur l’appareil — embeddings de texte (~90 Mo), diarisation des locuteurs (~35 Mo) et le modèle vocal sélectionné (Parakeet TDT v3 par défaut, ~600 Mo ; variantes Whisper de 198 à 626 Mo) — plus une compilation code-server intégrée, et chaque conversation d’agent reçoit un arbre de travail copy-on-write des dépôts sur lesquels elle travaille (git worktree classique sous Windows). La parole n’est pas facultative : sans le modèle ASR, les opérations de réunion et de dictée ne sont pas servies. Le premier téléchargement du modèle vocal exige tout de même un redémarrage avant que l’enregistrement ne s’active.
L’application de bureau pointe son serveur vers le répertoire de support applicatif par utilisateur du système d’exploitation. Un cc_server démarré à la main sans --data-dir utilise par défaut <application data>/control-center — ~/Library/Application Support/control-center sous macOS, %APPDATA%\control-center sous Windows, $XDG_DATA_HOME/control-center (ou ~/.local/share/control-center) sous Linux.
Téléchargement
Section intitulée « Téléchargement »Chaque artefact ci-dessous provient des GitHub Releases.
macOS (Apple Silicon)
Section intitulée « macOS (Apple Silicon) »Téléchargez Control-Center-<version>-arm64.dmg, ouvrez-le et glissez Control Center dans Applications. La compilation est signée avec un Developer ID et notarisée par Apple ; elle s’ouvre donc normalement.
Windows (x64, ARM64)
Section intitulée « Windows (x64, ARM64) »Control-Center-<version>-x64-setup.exe: un installateur par utilisateur.Control-Center-<version>-windows-x64.zip: une archive zip portable.Control-Center-<version>-arm64-setup.exe: un installateur par utilisateur.Control-Center-<version>-windows-arm64.zip: une archive zip portable.
Windows utilise git worktree pour les extractions d’espaces (pas de copy-on-write).
Linux (x86_64)
Section intitulée « Linux (x86_64) »Control-Center-<version>-x86_64.AppImageControl-Center-<version>-linux-x64.tar.gz
L’AppImage embarque les informations de mise à jour, si bien qu’AppImageUpdate ou appimaged peut la mettre à niveau vers la dernière version sur place, en ne téléchargeant que ce qui a changé.
Les deux sont compilées sur Ubuntu 22.04 et fonctionnent sur cette version ou toute version plus récente (Debian 12, Fedora 36 et suivants) : elles se lient à glibc 2.35 et à la libstdc++ de GCC 12, et utilisent le GTK 3 du système. Les quelques bibliothèques qui peuvent manquer à un poste de bureau standard sont embarquées à l’intérieur, si bien que rien d’autre n’est à installer. Le son — lecture des réunions, ambiance sonore, audio des rigs et carillons de notification — passe par libmpv du système (libmpv1 sous Ubuntu 22.04, libmpv2 sous Ubuntu et Debian plus récents, mpv-libs sous Fedora) ; sans elle, l’application démarre avec ces contrôles masqués.
Serveur autonome
Section intitulée « Serveur autonome »Chaque version publiée fournit aussi le serveur sans interface à part — cc_server-<version>-macos-arm64.tar.gz, cc_server-<version>-linux-x64.tar.gz, cc_server-<version>-windows-x64.zip, cc_server-<version>-windows-arm64.zip — aux côtés des images cc-server, cc-webapp et cc-remote sur GHCR. Voir Exécuter un serveur sans interface.
L’archive Linux est compilée sur Ubuntu 22.04 et ses bibliothèques natives embarquées se lient à glibc 2.35 et à la libstdc++ de GCC 12 ; elle exige donc un hôte au moins aussi récent (Ubuntu 22.04, Debian 12, Fedora 36 ou ultérieur). Sur une distribution plus ancienne, exécutez plutôt l’image cc-server — un conteneur apporte son propre espace utilisateur, seul le noyau doit donc être le vôtre.
Backend d’agent
Section intitulée « Backend d’agent »Control Center lance les agents via des adaptateurs. Il y en a deux, la liste est fixe et ils sont détectés automatiquement — impossible d’en enregistrer un autre.
L’adaptateur Control Center (built-in) n’a besoin d’aucune CLI externe : la boucle d’agent s’exécute à l’intérieur du serveur et communique avec les fournisseurs de modèles via HTTP, il est donc toujours disponible. Connectez un fournisseur sous Paramètres → Serveur → Fournisseurs de modèles. OpenAI, Codex, Cursor et Kimi Code proposent une connexion dans le navigateur ; Anthropic, OpenRouter, Google Gemini, DeepSeek, Mistral, xAI, z.ai et Moonshot prennent une clé API. Codex et Cursor sont des fournisseurs de cet exécuteur, et non des CLI distinctes. z.ai figure deux fois à dessein : z.ai est la plateforme ouverte à l’usage, facturée sur le solde de votre compte, tandis que z.ai GLM Coding Plan est l’abonnement. C’est la même clé de compte, mais z.ai sert le forfait depuis un autre hôte — collez une clé de forfait de codage dans la tuile z.ai ordinaire et chaque requête revient avec 429 … "Insufficient balance or no resource package", car le forfait n’a aucun solde à dépenser. Un abonnement Claude Pro/Max n’est pas une connexion à l’API Anthropic ; atteignez plutôt ce forfait via l’adaptateur Claude Code. Ce que vous pouvez ajouter sur cette page, c’est un fournisseur personnalisé — tout point de terminaison compatible OpenAI ou Anthropic (Ollama, LM Studio, vLLM, un déploiement privé) sous Fournisseurs personnalisés → Ajouter un fournisseur.
L’autre adaptateur encapsule une CLI externe :
- Claude Code (
claude) :npm install -g @anthropic-ai/claude-code
La détection sonde le PATH de la machine qui exécute cc_server — la même machine lorsque le bureau exécute son propre serveur, l’hôte distant sinon. Installez la CLI Claude Code là-bas, et non sur le client. Le bouton Actualiser de cette page relance la sonde.
Les listes de modèles sont servies en direct par chaque fournisseur connecté ; models.dev ne fournit que les métadonnées de prix et de fenêtre de contexte. Voir Gérer les adaptateurs et les modèles.
Authentification GitHub
Section intitulée « Authentification GitHub »Un identifiant GitHub est le vôtre et réside sur le serveur, indexé par votre identifiant utilisateur — pas dans le trousseau du système d’exploitation du client. Chaque appareil depuis lequel vous vous connectez utilise le même, et aucun autre membre ne peut le lire.
Si le serveur a une GitHub App enregistrée (Créer la GitHub App), Paramètres → Espace de travail → Profil et identité → Hébergement de code propose Se connecter avec GitHub (un flux d’appareil exécuté par le serveur). Sinon, collez un jeton d’accès personnel :
- Classique :
repoetread:org - À granularité fine : Contents et Pull requests (lecture et écriture), Checks et Actions (lecture)
Créez-en un sur GitHub → Settings → Developer settings → Personal access tokens. Le serveur sonde le jeton pour obtenir le nom du compte au moment de son enregistrement, si bien que la ligne peut indiquer « Connecté en tant que … » ; une sonde en échec enregistre tout de même le jeton, et une faute de frappe ou une portée manquante se manifeste plus tard par une requête en échec.
La première étape de la configuration initiale est cette connexion. Ensuite, c’est sur la même carte que vous la remplacez ou l’effacez. GitLab et Bitbucket utilisent la même carte ; voir Connecter un hébergeur de code.
Choisir où s’exécute le serveur
Section intitulée « Choisir où s’exécute le serveur »Control Center est un client léger au-dessus d’un processus cc_server sans interface qui détient la base de données et fait tout le travail ; Déploiement et clients explique ce que ce découpage implique pour le bureau, le web et le téléphone.
Au premier lancement, le bureau demande « Comment exécuter Control Center ? » :
- Exécuter dans cette application : le bureau lance et supervise un
cc_serversur cette machine et lui parle par la boucle locale. Rien d’autre à configurer. C’est la configuration que suppose le démarrage rapide. - Se connecter à une instance distante : pointez le bureau vers un
cc_serverexécuté ailleurs avec son URL WebSocket, un identifiant d’appareil et, au choix, une clé d’appairage ou un code d’invitation à usage unique. Ce serveur détient les données ; ce bureau ne fait que les afficher.
Ajoutez ou changez de serveur plus tard sous Paramètres → Serveur → Connexion et état. La bascule se reconnecte sur place — sans redémarrage. Un navigateur ne peut pas exécuter de serveur, le client web est donc toujours distant ; voir Se connecter à un serveur distant.
Pour héberger vous-même un serveur, suivez Exécuter un serveur sans interface. Il couvre la compilation du binaire, la création d’une clé d’appairage avant le premier démarrage et les options --data-dir / --port / --bind.
Vérifier votre installation
Section intitulée « Vérifier votre installation »- Paramètres → Serveur → Fournisseurs de modèles liste les deux adaptateurs. « Control Center (built-in) » est indiqué comme trouvé avec la version
built-in; Claude Code est indiqué comme trouvé si sa CLI se trouve dans lePATHde l’hôte du serveur. Appuyez sur Actualiser s’il manque. - Paramètres → Espace de travail → Dépôts liste les dépôts de cet espace de travail, et Ajouter un dépôt parcourt les dossiers de l’hôte du serveur.
- Paramètres → Espace de travail → Agents liste les cinq agents amorcés dans votre premier espace de travail. Chacun a besoin d’un Adaptateur et d’un Modèle définis avant de pouvoir s’exécuter.
- Paramètres → Serveur → Diagnostics et confidentialité indique les backends de bac à sable proposés par cet hôte, l’état du modèle d’embedding et la journalisation.
Compiler à partir des sources
Section intitulée « Compiler à partir des sources »Les bibliothèques natives sont obligatoires et il n’existe pas de mode dégradé : une bibliothèque manquante provoque un échec de démarrage franc, et non un chemin plus lent. Préparez-les avant toute autre chose. Chaque commande Flutter et Dart passe par fvm, car la version du SDK est épinglée par le dépôt.
git clone https://github.com/SamuelAlev/control-center.gitcd control-centerscripts/natives/build_natives.shfvm flutter pub getfvm flutter pub run build_runner build --delete-conflicting-outputsfvm flutter gen-l10nfvm flutter run -d macos # or -d windows, -d linuxSous macOS, le stockage sécurisé (connexion GitHub, Linear et Google) exige que l’application soit signée par une équipe Apple — un identifiant Apple gratuit suffit, et il s’agit d’une configuration unique décrite à la section signature pour le développement local. Sans cela, l’application se lance quand même ; seul le stockage sécurisé est indisponible. Windows et Linux n’ont besoin d’aucune signature.
Pour compiler le binaire du serveur sans interface, préparez d’abord les natives de la même façon, puis :
cd apps/cc_serverfvm dart build cliLe crochet de compilation copie dans le paquet tout ce qui se trouve déjà dans build/natives/ ; compiler avant de préparer les natives produit donc un paquet sans natives et un serveur qui refuse de démarrer.
Pour le client web, utilisez scripts/build_web.sh (--target remote pour la PWA téléphone). C’est ce que la CI exécute : un simple flutter build web saute l’estampille d’identité de compilation, la régénération du Web Worker, le manifeste de déploiement et le contrôle du budget d’actifs.