Mori : organiser ses projets Git et worktrees dans un terminal macOS natif
https://github.com/vaayne/mori
📌 Mori remplace la logique des onglets anonymes par une organisation beaucoup plus concrète: chaque dépôt Git devient un projet, chaque worktree devient un espace de travail persistant, et chaque branche peut vivre dans sa propre session tmux sans perdre l’état courant entre deux ouvertures. Pour un usage quotidien sur macOS, cela simplifie la navigation entre plusieurs repositories, plusieurs branches et plusieurs tâches en parallèle sans transformer le terminal en pile de fenêtres difficile à relire.
L’idée centrale de Mori est de faire du terminal un poste de travail structuré autour des vrais objets du développement. Au lieu de se souvenir qu’un onglet contient une branche de correctif et qu’un autre sert à une expérimentation, l’interface présente directement les projets et leurs worktrees dans une barre latérale native. Cela réduit la charge mentale: le contexte de travail n’est plus caché derrière des labels improvisés, il devient visible et navigable comme une ressource de premier plan.

Sous le capot, Mori repose sur une combinaison cohérente. tmux garde les sessions, fenêtres et panes actives dans le temps. libghostty apporte un rendu GPU accéléré via Metal pour éviter la sensation de lourdeur que l’on retrouve parfois dans les couches terminales plus génériques. Une couche applicative native macOS, entre AppKit et SwiftUI, orchestre ensuite la navigation, les raccourcis, la barre latérale, les notifications et la palette de commandes. Le résultat ressemble moins à un simple terminal skinné qu’à un véritable environnement de travail pour gérer plusieurs arbres Git à la fois.
Le gain est particulièrement net quand plusieurs branches doivent rester ouvertes en parallèle. Un worktree peut accueillir une fonctionnalité en cours, un autre un correctif urgent, un troisième une revue ou une migration. Mori associe chaque worktree à une session tmux dédiée, ce qui permet de rouvrir l’application plus tard et de retrouver immédiatement les fenêtres, panes et commandes déjà lancées. Cela évite de reconstruire son contexte à la main après chaque fermeture ou redémarrage de machine.
Mori ne se limite pas aux dépôts locaux. Le flux d’ajout gère aussi des projets hébergés en SSH, ce qui élargit l’intérêt de l’outil à des environnements hybrides avec code local, machines distantes ou dépôts clonés sur plusieurs hôtes. Dans la pratique, cela permet de centraliser dans la même interface un projet personnel sur le Mac, un dépôt d’administration ouvert sur un serveur accessible en SSH, et plusieurs branches de travail pour chacun. Cette continuité entre local et distant est plus utile qu’un simple explorateur de tabs, parce qu’elle suit la structure réelle du travail.
Le CLI fourni avec l’application renforce encore cet aspect concret. Les commandes mori project list, mori open, mori worktree create, mori focus, mori send ou mori new-window permettent de piloter l’environnement depuis le terminal lui-même. Cela ouvre des usages pratiques: ouvrir un dépôt depuis le Finder ou un script, créer un worktree pour une branche de test, cibler une fenêtre précise, injecter une commande dans un workspace déjà vivant, ou automatiser le focus sur le bon contexte au moment où une tâche démarre.
points clés
- 🌳 Un projet Git devient une entrée stable avec ses worktrees visibles dans une interface native macOS
- 🧷 Chaque worktree possède sa propre session
tmuxpersistante avec fenêtres et panes conservés - ⚡ Le rendu terminal passe par
libghosttyet Metal pour garder une sensation fluide - 🔌 Les dépôts locaux et les projets accessibles en SSH peuvent être ajoutés dans le même flux
- ⌨️ Un CLI dédié permet d’ouvrir, cibler, créer et piloter les espaces de travail par commande
Dans un usage quotidien, Mori est pertinent dès qu’il faut garder plusieurs contextes actifs sans perdre le fil. Un projet peut contenir une branche stable, une branche d’expérimentation et une branche de correction, chacune avec sa session dédiée: éditeur dans une fenêtre, tests dans une autre, console d’application dans une troisième. Le terminal cesse alors d’être une simple collection de panneaux interchangeables et devient une cartographie durable de l’état de travail. Cela convient aussi bien à un poste individuel qu’à un environnement où plusieurs projets avancent en même temps.
Le démarrage reste relativement direct pour un outil de ce niveau. La voie la plus simple passe par Homebrew avec brew tap vaayne/tap puis brew install --cask mori. Il est aussi possible de récupérer l’application via les releases GitHub au format .dmg ou .zip, puis de déplacer Mori.app dans /Applications. Une fois l’application installée, tmux doit être présent, et la version distribuée via Homebrew le déclare d’ailleurs comme dépendance. Pour compiler depuis les sources, la pile demandée est plus technique: macOS 14 minimum, mise, tmux, Zig 0.15.2 et Xcode pour construire la partie libghostty.
Cette exigence matérielle et logicielle est importante à noter. Mori cible clairement macOS, plus précisément Sonoma ou version ultérieure. Ce n’est pas un gestionnaire de terminal multiplateforme cherchant à uniformiser Linux, Windows et Mac. Le choix d’un shell natif AppKit/SwiftUI, de Metal et de composants intégrés à l’écosystème Apple rend l’expérience plus cohérente sur Mac, mais c’est aussi une contrainte nette pour qui travaille ailleurs. Côté build, l’intégration de Ghostty implique une étape supplémentaire avec Zig et Xcode, ce qui oriente naturellement beaucoup d’utilisateurs vers l’installation binaire plutôt que vers la compilation manuelle.
Sur le plan de la confidentialité, Mori fonctionne localement. Les sessions sont gérées par tmux, la persistance passe par SQLite via GRDB, et la communication interne s’appuie sur un socket Unix ainsi qu’un CLI ws. Rien n’impose un service cloud pour utiliser l’application, ni une synchronisation externe obligatoire. Cela rend l’outil intéressant pour garder un contrôle serré sur l’état des terminaux, les branches ouvertes et les commandes exécutées, à condition évidemment de considérer séparément la confidentialité propre aux dépôts ou aux accès SSH déjà configurés sur la machine.
L’écosystème visé est lui aussi assez clair. Mori s’intègre naturellement aux workflows Git orientés worktrees, aux usages tmux persistants, à Ghostty pour la configuration terminale, et à des outils en ligne de commande comme Lazygit ou Yazi, déjà accessibles via raccourcis clavier. Ce n’est pas une application qui cherche à remplacer Git ou tmux; elle assemble ces briques pour proposer une couche d’orchestration plus lisible. Pour quelqu’un qui travaille sur plusieurs branches, change souvent de contexte et veut retrouver instantanément un workspace exactement dans l’état laissé la veille, la promesse est très concrète.
Concrètement, Mori apporte une réponse solide à un problème banal mais coûteux: la dispersion du contexte dans le terminal. En recentrant l’expérience sur les dépôts, les worktrees et des sessions persistantes réellement exploitables, il rend le multitâche Git beaucoup plus naturel sur macOS. C’est un outil qui intéresse surtout les utilisateurs déjà à l’aise avec tmux et les worktrees, mais qui leur donne enfin une interface native capable de rendre cet ensemble plus rapide à piloter au quotidien.
