Documentation
Claude Code UI est une console de bureau pour Claude Code. Elle pilote le vrai CLI claude (protocole stream-json, les mêmes options que le SDK et l'extension VS Code) et affiche les sessions de façon plus lisible qu'un terminal. Interface en français, thèmes sombres uniquement.
Installation#
Télécharge l'installeur de ton système sur la page des versions GitHub. Aucun SDK .NET ni navigateur particulier n'est nécessaire : l'application embarque son serveur et utilise la vue web du système.
| Système | Fichier | Remarque |
|---|---|---|
| Windows 10/11 | -setup.exe ou .msi | WebView2 est déjà présent sur Windows 11. |
| macOS | .dmg aarch64 (Apple Silicon) | Signée et notariée par Apple. Les Mac Intel ne sont pas pris en charge (macOS 26 est leur dernière version). |
| Linux x64 | .AppImage ou .deb | Nécessite WebKitGTK 4.1 (libwebkit2gtk-4.1-0 sur Debian/Ubuntu, déjà installé sur la plupart des bureaux). |
L'installeur Windows n'est pas signé. SmartScreen affiche donc un avertissement au premier lancement. C'est attendu ; la marche à suivre est ci-dessous.
Windows
SmartScreen affiche « Windows a protégé votre ordinateur ». Clique sur « Informations complémentaires », puis « Exécuter quand même ».
macOS
L'application est signée avec un Developer ID et notariée par Apple : elle s'ouvre normalement, sans manipulation.
Vérifier le téléchargement
Chaque version publie un fichier SHA256SUMS et des attestations de provenance GitHub. Pour vérifier un fichier : gh attestation verify <fichier> -R Atypical-Consulting/ClaudeCodeUI.
Mises à jour
Chaque version après la 0.1.0 se met à jour seule : quelques secondes après le démarrage, elle consulte la dernière version GitHub et propose d'installer la nouvelle puis de redémarrer. Pour vérifier à tout moment : Rechercher des mises à jour… (menu de l'application sur macOS, menu Aide sur Windows et Linux), ou dans Réglages › Apparence et la palette de commandes. Les mises à jour sont signées, et la signature est vérifiée avant toute installation. La version 0.1.0 n'a pas de mise à jour automatique : installe la suivante à la main, une seule fois.
Linux
Pour l'AppImage, rends le fichier exécutable puis lance-le :
chmod +x Claude*.AppImage ./Claude*.AppImage
Prérequis : Claude Code
L'application lance le CLI claude installé sur ta machine : il doit être installé et connecté.
# macOS, Linux, WSL curl -fsSL https://claude.ai/install.sh | bash # Windows (PowerShell) irm https://claude.ai/install.ps1 | iex
Lance ensuite claude une fois dans un terminal pour te connecter. Si claude n'est pas trouvé dans le PATH, l'application affiche l'écran « Claude Code est introuvable » au lieu de l'écran de démarrage. Sur macOS, elle lit le PATH de ton shell de connexion : une installation faite dans ~/.zshrc est bien prise en compte.
Premier lancement#
L'écran de démarrage demande « Sur quoi on travaille ? ». Il réunit tout ce que la session fixe avant de commencer :
- Dossier de travail : le dossier où
claudetournera. Les dossiers récents sont proposés en un clic. - Isolation : « Nouveau worktree » crée un worktree git
worktree-<nom>depuis la branche courante, avec un nom généré (« brave-gliding-otter ») que « Modifier » remplace. L'option n'apparaît que si le dossier est un dépôt git. - Permissions : le mode de la session. Par défaut « Réglages » : le CLI applique votre
permissions.defaultMode, comme dans le terminal. - Ctrl ⏎ ou « Démarrer » ouvre la session, comme
claudedans un terminal : le premier message s'écrit dans son composeur, où les commandes slash se chargent déjà.
| Mode | Comportement |
|---|---|
default | Demande avant chaque outil sensible. |
acceptEdits | Accepte les éditions, demande pour le shell. |
plan | Lecture seule, propose un plan. |
auto | N'interrompt jamais, à utiliser avec prudence. |
Les modes bypassPermissions et dontAsk ne sont volontairement pas proposés.
Sessions et permissions#
Une session affiche le texte de Claude en direct, un indicateur de réflexion, et le journal des outils : une ligne par appel (Read, Grep, Edit, Bash, Write…), colorée selon l'outil. Sélectionner une ligne l'ouvre dans l'inspecteur, avec les onglets Sortie, Entrée et JSON. Ctrl I affiche ou masque l'inspecteur.
Répondre à une permission
Quand Claude veut modifier un fichier ou lancer une commande, la demande s'affiche dans l'inspecteur : le diff complet pour une édition, la commande exacte pour le shell.
| Action | Touche | Effet |
|---|---|---|
| Autoriser | ⏎ | Cet appel seulement. |
| Toute la session | Maj ⏎ | Applique la règle proposée par le CLI à cette session seulement : aucun fichier de réglages ne la garde. Le bouton n'apparaît que lorsqu'il en propose une. |
| Refuser | Suppr | Claude reçoit le refus. |
Ces touches agissent quand le focus n'est pas dans un champ ou sur un bouton. Échap interrompt la session en cours.
Plusieurs sessions
Les sessions tournent en parallèle et restent listées dans le rail. La vue d'ensemble (Ctrl ⇧ O) montre leur état, leur mode, leur dernière action et leur coût, et la file des décisions regroupe les permissions en attente (J K pour naviguer, ⏎ pour ouvrir). Ctrl ⇧ A saute directement à la première décision en attente.
La palette Ctrl K retrouve une session active ou récente et lance une action. Une session récente se rouvre avec son historique. Si le processus claude s'arrête, une carte l'indique et permet de relancer la session. Le rail affiche aussi le quota 5 h / 7 jours, et chaque tour son coût et sa durée.
Composer#
Le champ de saisie porte les réglages du prochain tour. Ctrl ⏎ envoie ; pendant un tour, le bouton devient « Interrompre » (Échap).
- Modèle : la liste vient du CLI ; le choix s'applique à la session en cours.
- Effort : les niveaux proposés par le modèle, quand il en a.
- Rapide : le mode rapide du CLI, grisé avec sa raison quand il n'est pas disponible.
- Ultracode : active le réglage ultracode du CLI pour le prochain tour, qui devient un workflow multi-agents. Grisé quand le compte ou le modèle ne le permet pas.
- Commandes
/: taper/ouvre les commandes et skills de la session, filtrés pendant la frappe. ↑ ↓ pour choisir, Tab pour insérer, Échap pour fermer.
Sous le champ : la durée du tour, le coût de la session, le nombre d'outils et le contexte utilisé.
Sous-agents#
Quand Claude délègue à un sous-agent (outil Agent ou Task), l'appel a sa ligne dans le journal. L'ouvrir affiche ce que l'agent écrit et les outils qu'il appelle. Pendant un tour Ultracode, le workflow s'affiche avec ses phases et ses agents, et le bouton d'envoi devient « Arrêter le workflow ».
Worktrees#
La page Worktrees retrouve les worktrees des dépôts de tes sessions récentes, les classe, et dit pour chacun pourquoi. Le premier critère qui s'applique l'emporte :
- Actif
- Une session de l'application y tourne, ou une session
claudeexterne dont le processus est vivant. Jamais touché. - Orphelin
- Le dossier a été supprimé à la main, git le référence encore. Se nettoie par
git worktree prune. - À vérifier
- Fichiers modifiés non commités, commits jamais poussés, verrou périmé ou sans pid, HEAD détachée hors base, ou branche pas encore dans la base. Attend ta décision.
- Sûr
- Déjà mergé dans la base (y compris par squash) et rien en local. Peut partir.
« Supprimer » ou « Élaguer » ajoute un worktree au plan ; l'inspecteur affiche les commandes git avant de les lancer, et « Ajouter les worktrees sans risque » les prend tous d'un coup. Un worktree À vérifier avec des commits non poussés propose « Pousser ».
Garde-fous. Jamais --force, -f ni -D : les branches partent avec git branch -d, que git refuse de lui-même si elles ne sont pas mergées. Juste avant chaque suppression, l'état du worktree est relu ; s'il a changé, il est ignoré. La page signale aussi un .claude/worktrees/ non ignoré par git, qu'un git add . ajouterait au dépôt.
Extensions MCP#
La page Extensions montre ce que la session a chargé : serveurs MCP, skills, agents et plugins. Les serveurs MCP sont filtrés par état (connectés, authentification, en échec) ; un interrupteur active ou désactive un serveur pour le dossier courant, et un serveur en échec se relance avec « Réessayer ». La connexion d'un serveur qui demande une authentification n'est pas encore disponible dans l'application.
Thèmes#
Cinq thèmes, tous sombres : Graphite, Encre, Ristretto, Mousse et Contraste élevé. La page Apparence règle aussi la taille du code. Les deux choix sont mémorisés. Ce site utilise les mêmes thèmes : le sélecteur est dans le rail.
Raccourcis clavier#
Sur macOS, ⌘ fonctionne partout où Ctrl est indiqué.
| Touche | Action | Où |
|---|---|---|
| Ctrl K | Ouvrir ou fermer la palette (sessions et actions) | partout |
| Ctrl N ou Alt N | Nouvelle session (Alt N quand le navigateur garde Ctrl N) | partout |
| Ctrl I | Afficher ou masquer l'inspecteur | partout |
| Ctrl ⇧ O | Vue d'ensemble | partout |
| Ctrl ⇧ A | Aller à la première décision en attente | partout |
| Échap | Fermer la palette ou le menu ouvert ; sinon interrompre la session en cours | partout |
| ⏎ | Autoriser | permission affichée |
| Maj ⏎ | Autoriser pour toute la session | permission affichée |
| Suppr | Refuser | permission affichée |
| Ctrl ⏎ | Envoyer le message, ou démarrer la session | composer, démarrage |
| ↑ ↓ Tab | Choisir et insérer une commande / | composer |
| ↑ ↓ ⏎ | Parcourir et ouvrir un résultat | palette |
| J K ⏎ | Parcourir et ouvrir une décision (aussi ↓ ↑) | vue d'ensemble |
| ⏎ ou Espace | Ouvrir une ligne du journal, choisir un modèle | journal, menu des modèles |
Les touches de permission ne s'appliquent que si le focus n'est pas dans un champ, sur un bouton ou un lien.
Sécurité#
- Boucle locale uniquement. L'application de bureau lance son serveur en HTTP sur
127.0.0.1, sur un port libre. Le filtrage d'hôte répond 400 à toute requête dont l'en-tête Host n'est pas127.0.0.1, ce qui bloque le rebinding DNS. - Jeton par lancement. Le serveur tire un jeton aléatoire à chaque démarrage et ne le transmet qu'à la fenêtre, par sa sortie standard. La première requête le présente, il est ensuite gardé dans un cookie
HttpOnly,SameSite=Strict, et comparé en temps constant. - Markdown sans HTML. Les réponses passent par Markdig avec le HTML brut désactivé : une réponse ne peut pas injecter de balisage dans la page.
- Vie liée à la fenêtre. Le serveur s'arrête quand la fenêtre se ferme.
En mode développement (dotnet run), le serveur web écoute sur http://localhost:5284, sans jeton.
Développement#
Prérequis : SDK .NET 10. Pour l'application de bureau : Rust (stable), Node 20+ et les prérequis Tauri de ton système.
dotnet run # serveur web seul sur http://localhost:5284 dotnet run -- --self-check # vérifications intégrées, code de sortie non nul en cas d'échec
Application de bureau, dans le dossier desktop/ :
cd desktop npm install npm run server # publie le serveur autonome pour ta machine dans src-tauri/server npm run dev # lance la fenêtre Tauri npm run build # produit les installeurs dans src-tauri/target/release/bundle
La coque Tauri lance ClaudeCodeUI --desktop-port 0 --parent-pid <pid>, affiche un écran de chargement, puis ouvre l'interface. Relance npm run server après chaque modification du code .NET.
Publication#
- Les commits suivent les Conventional Commits :
feat:,fix:,docs:,ci:,chore:. - À chaque push sur
main, release-please ouvre ou met à jour une PR de version : CHANGELOG, et version dansClaudeCodeUI.csproj,tauri.conf.jsonetCargo.toml. - Fusionner cette PR crée le tag et la version GitHub. Le workflow
release.ymlconstruit alors les installeurs Windows, macOS (Apple Silicon) et Linux, et les attache à la version.
Ce site est publié sur GitHub Pages par le workflow pages.yml à chaque modification du dossier site/ sur main.
Limites connues#
Les problèmes ouverts sont suivis sur GitHub :
Un autre problème ? Ouvre une issue.