Files
arboretum/README.fr.md
Johan LEROY a7e04278fd
All checks were successful
CI / Build & test (Node 22) (push) Successful in 10m17s
CI / Build & test (Node 24) (push) Successful in 10m13s
CI / No em/en dashes (push) Successful in 4s
Deploy site (production) / build-and-deploy (push) Successful in 24s
Release / Publish to Gitea npm registry (push) Successful in 10m17s
VSCode Release / Package VSIX (push) Successful in 9m39s
Desktop Release / Build Linux (AppImage + deb) (push) Successful in 15m41s
CI / Pack & boot smoke (Node 22) (push) Successful in 10m3s
release: git-arboretum 3.3.0 (« Démarrer le projet » : lancement multi-terminaux), vscode 0.4.0, desktop 0.1.3
« Démarrer le projet » : un repo définit une fois ses commandes de démarrage
(serveur de dev, API, base de données), un clic ouvre un terminal PTY par
commande dans le dock IDE.

Serveur (additif, PROTOCOL_VERSION inchangé) :
- LaunchCommand[] persistées sur repos.launch_commands (migration 13) ; champ additif SessionSummary.launchRunId.
- POST /repos/:id/launch : résolution du worktree côté serveur, cwd de commande borné (anti-traversal), commandIds outrepasse enabled.
- GET /repos/:id/launch/detect : détection package.json / Procfile / docker-compose.
- Shell de login interactif ($SHELL -l -i, charge le PATH nvm/asdf) + auto-type de la commande ; le shell survit à la commande (échec visible).

Web : LaunchProjectModal + actions (ProjectTreeNode, SessionsPanel, CommandPalette), stores sessions/worktrees, i18n EN/FR.

Alignement du reste du projet :
- Extension VS Code 0.4.0 : commande Start Project (repo/worktree), Stop Launch, badge « launch » dans l'arbre, méthode REST startLaunch.
- Site vitrine : 16e feature card (Rocket) + section showcase « Start the project » (mockup fidèle au modal), i18n EN/FR.
- Documentation : README (EN + FR), help-content (EN + FR), CHANGELOGs server + vscode.

Vérifié : 430 tests, typecheck, build (web + site + vscode), acceptance-p13 ALL GREEN, VSIX packagé, garde anti-tirets, vérif visuelle du site (thèmes clair et sombre).
2026-07-21 13:54:16 +02:00

29 KiB

Arboretum

Un IDE IA multi-projet auto-hébergé pour vos worktrees git et les sessions Claude Code qui tournent dessus : une app de bureau native et une interface web, depuis n'importe quel appareil.

English · Français

La découverte et la reprise de sessions, le cycle de vie des worktrees multi-repo, le démarrage de sessions sur votre branche principale ou n'importe quel worktree, les états de session en temps réel, le terminal web, la supervision mobile (PWA installable, Web Push quand une session vous attend, répondre à une demande sans ouvrir de terminal) et les groupes de travail (piloter plusieurs repos liés depuis une seule session Claude) sont tous implémentés et testés.

La dernière étape transforme Arboretum en véritable IDE IA multi-projet : un espace de travail unique (route /ide, la vue par défaut sur desktop) qui réunit tous vos projets ouverts à la fois, fini l'IDE par projet. Un arbre unique à gauche (projet, puis checkout principal et worktrees, puis session Claude), un éditeur Monaco à onglets au centre (plusieurs fichiers de projets différents côte à côte, diffs inline), les terminaux Claude en dock bas, et des panneaux Git / Sessions / Groupes via une barre d'activité. Il est fourni à la fois en app de bureau native (Linux, Windows, macOS) et en interface web, adossé à un watcher de système de fichiers en temps réel, au staging sélectif / discard / amend / fetch / pull, à l'archivage automatique des sessions, à la synchronisation des réglages en temps réel, et à des services git distants chiffrés (GitHub / GitLab / Gitea) avec clone HTTPS.


Captures d'écran

Arboretum, l'IDE IA multi-projet (thème sombre)

Un espace de travail pour tous les projets : arbre unifié, éditeur Monaco à onglets avec diffs inline, terminaux Claude en dock. Thèmes sombre et clair.

Arboretum, l'IDE IA multi-projet (thème clair)


Le problème

Travailler avec des agents de code IA a changé notre usage de git : une feature = un worktree = une session Claude Code, plusieurs en parallèle. Mais l'outillage n'a pas suivi :

  • git worktree list sur plusieurs repos est fastidieux, les worktrees s'accumulent, chacun a besoin de ses node_modules et .env.
  • Les sessions Claude Code sont éparpillées : certaines tournent dans des terminaux, d'autres sont reprenables depuis l'historique, sans vue consolidée de celle qui attend votre intervention.
  • Quand vous vous éloignez de votre poste, une session bloquée sur une demande de permission reste bloquée.

Ce que fait Arboretum

Un unique daemon Node.js que vous lancez sur votre machine de dev (en app de bureau native, ou via npx @johanleroy/git-arboretum), servant une interface utilisable depuis votre ordinateur, téléphone ou tablette :

  • Dashboard worktree multi-repo : chaque worktree de chaque repo enregistré, avec son état git (branche, ahead/behind, fichiers modifiés) et l'état de sa session Claude Code (busy / en attente d'entrée / idle / reprenable).
  • Cycle de vie complet des worktrees : créer (avec des hooks post-création par repo : npm ci, copie de .env…), adopter des worktrees créés à la main, supprimer avec garde-fous, élaguer les orphelins.
  • Découverte & reprise de sessions : les sessions lancées dans votre propre terminal apparaissent automatiquement ; reprenez les sessions mortes, observez ou forkez les vivantes. Ne corrompt jamais une session vivante. Masquez les anciennes qui encombrent la liste (un clic efface tout l'historique externe ; elles restent reprenables).
  • Terminal web : terminal xterm.js complet vers chaque session managée, qui survit aux déconnexions du navigateur ; vraiment plein écran, avec l'invite ancrée en bas et tout l'historique défilable au-dessus.
  • IDE multi-projet : un espace de travail pour tous les projets ouverts à la fois (pas de fenêtre par projet). Un arbre unique (projet, worktrees, sessions Claude), un éditeur Monaco à onglets (plusieurs fichiers de projets différents côte à côte, avec diffs inline par fichier), un dock bas de terminaux de session, et des panneaux Git / Sessions / Groupes. Éditez les fichiers, indexez les changements sélectivement, committez (ou amendez), fetch/pull et push, au même endroit. Un watcher de système de fichiers en temps réel garde la vue à jour au fil des éditions de l'agent. Disponible en app de bureau native et dans le navigateur.
  • Démarrez un projet en un clic : beaucoup de projets exigent plusieurs commandes longue durée pour démarrer (serveur de dev, API, base de données). Définissez-les une fois par projet (libellés, commandes shell, sous-dossier optionnel), auto-détectées depuis les scripts package.json, un Procfile ou docker-compose, puis lancez-les toutes d'un coup, un terminal attaché par commande. Chacune tourne dans votre shell de login (donc npm, docker, nvm/asdf sont dans le PATH) et reste vivante après la fin de la commande, pour que les échecs restent à l'écran ; arrêtez tout le lot en une action.
  • Supervision depuis votre téléphone : PWA installable avec notifications push quand une session vous attend ; répondez à une demande (ses options, ou refusez) sans ouvrir de terminal.
  • Groupes de travail : regroupez des repos liés (ex. une API, son frontend web et sa doc) dans un groupe nommé, puis lancez une seule session Claude qui les couvre tous à la fois (via le flag --add-dir du CLI) : une conversation unique avec un contexte partagé travaillant à travers chaque repo, plus une vue unifiée de tous leurs worktrees et une grille multi-terminaux côte à côte. Une session de groupe peut d'abord créer le même worktree de branche dans chaque repo, ou tourner directement sur les checkouts principaux.
  • Services git distants : connectez vos comptes GitHub, GitLab ou Gitea (personal access token ou app password), stockés chiffrés au repos (AES-256-GCM) ; parcourez vos dépôts distants et clonez-les en HTTPS avec progression en direct, directement depuis le dashboard.
  • Archivage automatique : les sessions terminées sont archivées automatiquement après une fenêtre de rétention configurable (30 jours par défaut), pour que la liste reste centrée sur ce qui est vivant tandis que l'historique reste à un clic.
  • Extension VS Code : une extension native (pas un webview) qui amène l'arbre en direct, les terminaux de session natifs, les alertes d'attente et les actions git directement dans votre éditeur. Voir Extension VS Code.

Prérequis

  • Node.js ≥ 22.16 pour l'usage npx / depuis les sources : requis, pas seulement recommandé. Arboretum persiste son état avec node:sqlite (DatabaseSync), natif et stable seulement à partir de cette version. (.nvmrc fixe 22.) L'app de bureau embarque son propre runtime Node, donc ses utilisateurs finaux n'ont pas besoin d'installer Node.
  • Le CLI claude sur votre PATH si vous voulez qu'Arboretum lance et gère des sessions Claude Code. Arboretum enveloppe le CLI interactif que vous utilisez déjà, installez-le et authentifiez-le comme d'habitude.
  • Un dépôt git (ou plusieurs) que vous voulez gérer.

Démarrage rapide

Deux chemins, selon ce que vous voulez :

  • Juste l'utiliser (la plupart des gens). Arboretum est un paquet npm publié : vous n'avez pas besoin de cloner ce dépôt. Pointez npm vers le registre et lancez-le (ci-dessous). À faire sur la machine où tournent vos sessions Claude Code.
  • Lancer depuis les sources. Ne clonez le dépôt que pour développer Arboretum ou lancer une version non publiée.

Le lancer (recommandé)

Arboretum est publié sur un registre npm Gitea auto-hébergé. Pointez le scope @johanleroy dessus une fois par machine, ajoutez à ~/.npmrc :

@johanleroy:registry=https://git.lidge.fr/api/packages/johanleroy/npm/

Aucun token nécessaire, le paquet est en lecture publique. Puis lancez-le depuis n'importe où :

npx @johanleroy/git-arboretum

Au premier démarrage, Arboretum affiche un token d'accès unique et l'URL à ouvrir :

┌──────────────────────────────────────────────────────────────────┐
│  First start · your access token (shown once, store it safely):    │
└──────────────────────────────────────────────────────────────────┘

  <votre-token-ici>

  Login at: http://127.0.0.1:7317/

Ouvrez l'URL, collez le token pour vous connecter, et c'est parti. Le token est stocké hashé : il n'est affiché qu'une seule fois, alors gardez-le en lieu sûr (un gestionnaire de mots de passe). Vous pourrez gérer vos tokens plus tard depuis les Réglages.

npx télécharge et lance la dernière version publiée à chaque fois. Pour l'installer une bonne fois (et obtenir la commande arboretum sur votre PATH, dont se sert le service d'arrière-plan), installez-le plutôt globalement :

npm i -g @johanleroy/git-arboretum
arboretum          # identique à la commande npx, depuis le binaire installé

Lancer depuis les sources

Nécessaire uniquement pour développer Arboretum ou lancer une version non publiée, pas pour simplement l'utiliser. Clonez le dépôt, installez les dépendances, buildez, puis démarrez le daemon :

git clone https://git.lidge.fr/johanleroy/arboretum.git
cd arboretum
nvm use            # ou assurez-vous d'avoir Node ≥ 22.16
npm install
npm run build      # build shared → server → web (l'ordre compte)
node packages/server/dist/index.js

Application de bureau

Vous préférez une app native au daemon-dans-un-terminal ? Arboretum fournit une app de bureau Electron (packages/desktop) pour Linux, Windows et macOS. Elle lance le daemon en process enfant et ouvre son interface dans une fenêtre native, déjà connectée (aucun écran de login), et elle embarque son propre runtime Node : pas besoin d'avoir Node installé pour l'utiliser.

  • Installer. Les installeurs sont publiés sur la page des releases dès qu'une release desktop est taguée : un AppImage et un .deb sous Linux, un installeur NSIS (et un build portable) sous Windows, un .dmg sous macOS. Vous préférez les builder vous-même ? Voir packages/desktop/README.md.
  • Premier lancement. L'app n'est pas encore signée : sous Windows, SmartScreen affiche « éditeur inconnu », choisissez « Informations complémentaires » puis « Exécuter quand même » ; sous macOS, Gatekeeper la bloque, clic droit sur l'app puis « Ouvrir » (ou lancez xattr -dr com.apple.quarantine /Applications/Arboretum.app).
  • Vit dans le tray. Fermer la fenêtre garde Arboretum actif dans la barre système ; quittez depuis le menu du tray, où vous pouvez aussi activer le lancement au login. L'auto-update est intégré sous Windows et Linux (les mises à jour macOS restent manuelles tant que l'app n'est pas signée).

L'app de bureau n'est qu'une coquille autour du même daemon et de la même interface web : tout ce qui suit (espace de travail, git, sessions) fonctionne à l'identique.

Utiliser Arboretum

  1. Ajoutez un dépôt. Depuis le dashboard, enregistrez un repo git local par son chemin. Configurez éventuellement des hooks post-création (ex. npm ci, cp ../.env .env) exécutés automatiquement à chaque création d'un nouveau worktree pour ce repo.
  2. Créez ou adoptez des worktrees. Créez un nouveau worktree + branche en un clic (les hooks s'exécutent pour vous), ou adoptez un worktree créé à la main. Chaque worktree affiche sa branche, son ahead/behind et son nombre de fichiers modifiés.
  3. Démarrez ou reprenez une session. Lancez une session Claude Code sur la branche principale du repo ou n'importe quel worktree, ou reprenez-en une démarrée dans votre terminal : Arboretum découvre les sessions existantes automatiquement et les reprend toujours dans leur répertoire de travail d'origine.
  4. Suivez les états en direct. Chaque session indique si elle est busy, en attente de votre entrée ou idle. Ouvrez le terminal web pour interagir directement ; il survit aux déconnexions du navigateur (fermer l'onglet ne tue pas la session).
  5. Supervisez depuis votre téléphone. Installez la PWA, et quand une session bascule en attente, vous recevez une notification push. Répondez à la demande (choisissez l'une de ses options ou refusez-la) directement depuis le dashboard, sans terminal.

L'IDE, espace de travail & opérations git

Au-delà de la supervision, Arboretum est un véritable IDE multi-projet (route /ide, la vue par défaut sur desktop). Il réunit tous les projets ouverts à la fois, pour ne plus jongler avec une fenêtre d'IDE par projet :

  • Arbre de projets unifié. Un arbre unique à gauche liste chaque projet enregistré, son checkout principal et ses worktrees, et la session Claude corrélée à chacun. Dépliez un worktree pour parcourir ses fichiers inline. Une barre d'activité bascule le panneau gauche entre Explorateur, Git, Sessions et Groupes.
  • Éditeur à onglets. Ouvrez des fichiers dans un éditeur Monaco à onglets, plusieurs fichiers de projets différents côte à côte, coloration syntaxique, détection du langage, enregistrement avec détection de conflit. Chaque onglet bascule entre éditeur et diff par fichier inline (arbre de travail ou index, ajouts/suppressions colorés, diffs binaires et énormes refusés).
  • Dock de terminaux. Les terminaux de session Claude vivent dans un dock bas, un onglet par session ; ouvrez-en plusieurs à la fois (à travers les projets), répondez à une demande en attente directement là. Les terminaux survivent aux changements d'onglet et aux déconnexions du navigateur.
  • Panneau Git. Indexez ou désindexez des fichiers individuels, jetez des changements, écrivez un message et committez (tout ou seulement l'indexé), amendez le dernier commit (refusé une fois poussé), puis fetch, pull (fast-forward ou rebase) et push. Les compteurs indexés / non indexés / conflits détaillés et le dernier commit restent à jour via un watcher de système de fichiers en temps réel : la vue s'actualise dès qu'une session Claude touche un fichier.
  • Deep links & mobile. /workspace/:repoId/:wt ouvre toujours un worktree précis directement dans l'IDE (utilisé par l'extension VS Code). Sur mobile, l'IDE dégrade en panneau unique, et le dashboard des worktrees et les vues de session restent la PWA de supervision installable.
  • Clair ou sombre, au choix. Un langage visuel épuré et cohérent (le design system « Emerald » : Inter + JetBrains Mono, un accent emerald) avec une bascule de thème clair / sombre / système mémorisée d'une session à l'autre. L'éditeur Monaco, les terminaux et les diffs suivent tous le thème actif.

Comme toute action git dans Arboretum, ces opérations s'exécutent en tant que vous (le daemon tourne sous votre compte), cohérent avec le modèle de sécurité : un terminal web, c'est de l'exécution de code à distance par conception.

Extension VS Code

Vous préférez rester dans votre éditeur ? Arboretum fournit une extension VS Code native (packages/vscode), pas un webview. Elle se connecte au même daemon et l'expose avec les primitives natives de VS Code :

  • Un arbre Repositories et Groups en direct (repos → worktrees → sessions) dans l'Activity Bar, mis à jour en temps réel via le WebSocket du daemon.
  • Terminaux natifs : attachez-vous (ou observez) n'importe quelle session dans un vrai terminal VS Code, vous bénéficiez du rendu, du scrollback et du copier-coller de VS Code gratuitement.
  • Un compteur en status bar et des notifications natives quand une session attend, avec réponses Oui/Non sans ouvrir de terminal.
  • Les mutations git (créer un worktree, commit, push, promouvoir, fetch / pull) avec un statut git détaillé dans l'arbre (indexés / non indexés / conflits et dernier commit), et la conscience du workspace : le worktree de votre dossier ouvert est mis en évidence, avec « démarrer une session / créer un worktree ici » en un clic.
  • Ouvrir dans l'IDE web : sautez de n'importe quel worktree directement vers sa vue /workspace complète dans le navigateur. L'extension reste un gestionnaire de worktrees visuel et léger ; l'édition lourde vit dans l'IDE web.

Elle est distribuée en VSIX privé. Buildez-la et packagez-la depuis le monorepo :

npm run build:vscode
cd packages/vscode && npx @vscode/vsce package --no-dependencies   # → git-arboretum-0.3.0.vsix

Puis installez-la via Extensions : Installer à partir d'un VSIX… (ou code --install-extension git-arboretum-0.3.0.vsix), lancez Arboretum: Sign In et collez un token. Détails complets dans packages/vscode/README.md.

Accès distant depuis votre téléphone

Arboretum se bind sur 127.0.0.1 par défaut et refuse de se binder sur une adresse non-loopback sans dérogation explicite. La façon recommandée (et sûre) de l'atteindre depuis d'autres appareils est Tailscale Serve, HTTPS valide, identité tailnet, aucun port ouvert :

# Expose le daemon local en HTTPS dans votre tailnet
tailscale serve --bg 7317

Puis démarrez Arboretum en autorisant l'origine de votre tailnet (le check Origin strict doit la connaître) :

npx @johanleroy/git-arboretum --allow-origin https://<machine>.<tailnet>.ts.net

Ouvrez https://<machine>.<tailnet>.ts.net depuis n'importe quel appareil de votre tailnet. Web Push exige HTTPS, donc Tailscale Serve (ou un autre front HTTPS) est aussi ce qui active les notifications mobiles. Sur iOS, installez d'abord l'app à l'écran d'accueil, puis autorisez les notifications.

⚠️ Un terminal web, c'est de l'exécution de code à distance par conception. N'exposez jamais Arboretum directement sur l'internet public.

Le faire tourner en service d'arrière-plan

Le plus rapide pour faire tourner Arboretum en service qui survit à la déconnexion et redémarre au boot, c'est l'installeur intégré. Installez une version figée globalement, puis lancez install. Il détecte votre OS, écrit le fichier de service, le démarre et affiche le token unique :

npm i -g @johanleroy/git-arboretum
arboretum install --allow-origin https://MACHINE.TAILNET.ts.net

Cela met en place un service systemd utilisateur sous Linux (~/.config/systemd/user/arboretum.service) ou un LaunchAgent launchd sous macOS (~/Library/LaunchAgents/fr.lidge.arboretum.plist). Tous les flags du daemon (--port, --allow-origin, --db, …) sont propagés au service. Gérez-le avec :

arboretum status      # état du service (+ où lire les logs)
arboretum uninstall   # arrête et supprime le service

Les logs vivent dans journalctl --user -u arboretum -f (Linux) ou ~/Library/Logs/arboretum/ (macOS). Lancez d'abord arboretum install --dry-run … pour afficher le unit/plist et les commandes exactes sans rien modifier.

Vous préférez configurer systemd à la main ? (Linux)

Créez ~/.config/systemd/user/arboretum.service :

[Unit]
Description=Arboretum · git worktree & Claude Code dashboard
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=%h/.local/bin/arboretum --port 7317 --allow-origin https://MACHINE.TAILNET.ts.net
Restart=on-failure
RestartSec=5
KillSignal=SIGTERM
TimeoutStopSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=default.target
which arboretum                    # ajustez ExecStart au vrai chemin si besoin
systemctl --user daemon-reload
systemctl --user enable --now arboretum
loginctl enable-linger "$USER"     # démarre le service au boot, sans session ouverte
journalctl --user -u arboretum -f  # logs

Le token d'accès unique est affiché par arboretum install (et au tout premier lancement manuel sur base vierge). Le token est hashé et n'est jamais réaffiché, conservez-le en lieu sûr.

Configuration

Commandes : arboretum démarre le daemon (par défaut), arboretum serve en est un alias explicite, arboretum install / uninstall / status gèrent le service d'arrière-plan, et arboretum help affiche l'aide.

Les options du daemon sont des flags CLI :

Flag Défaut Description
--port <n> 7317 Port d'écoute.
--bind <addr> 127.0.0.1 Adresse de bind. Une adresse non-loopback est refusée sauf si --i-know-this-exposes-a-terminal est défini.
--allow-origin <url> aucun Origine Origin autorisée supplémentaire (répétable). Nécessaire pour l'accès Tailscale/HTTPS.
--db <path> <data>/arboretum.db Chemin de la base SQLite.
--vapid-contact <mailto/url> mailto:arboretum@localhost Sujet de contact VAPID pour le Web Push.
--print-token false Indication sur le réaffichage du token (les tokens sont hashés et ne peuvent pas être réaffichés).
--i-know-this-exposes-a-terminal false Reconnaître le bind sur une adresse non-loopback. À éviter : préférez Tailscale Serve.

arboretum install accepte tous les flags du daemon ci-dessus (propagés tels quels au service), plus :

Flag Description
--bin-path <path> Utilise ce binaire dans le service au lieu de node + le script embarqué.
--label <id> Label launchd (macOS uniquement, défaut fr.lidge.arboretum).
--dry-run Affiche le unit/plist et les commandes sans rien appliquer.
--no-enable Écrit le fichier de service sans l'activer/le démarrer.

L'état (la base SQLite) vit dans $XDG_DATA_HOME/arboretum (par défaut ~/.local/share/arboretum).

Les réglages au-delà des flags CLI (les répertoires qu'Arboretum scanne pour trouver des repos et à quelle fréquence, le chemin et le home du binaire claude, et les fenêtres de rétention / purge des sessions) vivent dans les Réglages de l'UI. Ils sont diffusés via le WebSocket, donc chaque navigateur connecté reflète un changement en temps réel, sans rechargement.

Services git distants & clone

Arboretum peut se connecter à vos fournisseurs d'hébergement git pour parcourir et cloner des dépôts sans quitter le dashboard :

  • Fournisseurs & auth. GitHub, GitLab et Gitea, authentifiés par un personal access token ou un app password (clés SSH et OAuth prévus). Ajoutez une connexion depuis Réglages → Services git, donnez-lui un libellé, et testez-la sur place : Arboretum rapporte ok, auth failed, rate limited ou unreachable.
  • Les secrets restent secrets. Les identifiants sont chiffrés au repos (AES-256-GCM, SecretBox) et jamais renvoyés en clair par l'API REST : les réponses ne portent qu'un indice …last4 et un drapeau « a un secret ».
  • Parcourir & cloner. Listez les dépôts qu'une connexion peut voir, choisissez-en un, et clonez-le en HTTPS vers la destination de votre choix. Le clone tourne comme une opération suivie, avec progression et phase poussées en direct via le WebSocket, et le nouveau repo est enregistré automatiquement une fois terminé.

Modèle de sécurité

Un terminal web, c'est de l'exécution de code à distance par conception. Les garde-fous d'Arboretum sont structurants :

  • Se bind sur 127.0.0.1 par défaut ; refuse les binds non-loopback sans flag explicite.
  • Authentifie chaque requête /api/** et chaque upgrade /ws avec des tokens révocables, et applique un check Origin strict (le cookie SameSite=Strict ne couvre pas les upgrades WebSocket : c'est le garde-fou anti cross-site hijacking).
  • Les tokens sont stockés hashés (sha256) et comparés en temps constant ; le bootstrap token n'est affiché qu'une seule fois. Le cookie de session est un payload signé HMAC, HttpOnly et SameSite=Strict, et reçoit automatiquement le flag Secure quand la requête arrive en HTTPS (p. ex. derrière Tailscale Serve). Le login est rate-limité avec backoff exponentiel.
  • Envoie des en-têtes HTTP durcis (CSP, X-Frame-Options, nosniff, Referrer-Policy, HSTS conditionnel, no-store sur l'API), restreint le dossier de données à 0o700 et la base à 0o600, et chiffre les secrets sensibles au repos (AES-256-GCM).
  • Tient un journal d'audit des opérations sensibles et offre l'export/effacement RGPD des données (Réglages → Sécurité & conformité).

Tailscale Serve est la façon d'atteindre Arboretum depuis d'autres appareils, pas seulement une recommandation : HTTPS valide, identité tailnet, aucun port ouvert. Le flag --i-know-this-exposes-a-terminal est une trappe de secours, pas un mode de déploiement ; n'exposez jamais Arboretum directement sur internet.

Voir SECURITY.md pour le modèle de menace complet et docs/ENTERPRISE_DEPLOYMENT.md pour le durcissement en environnement réglementé.

Ce qui le distingue

Arboretum GitKraken Agent Mode / Conductor / Nimbalyst Happy / CloudCLI Anthropic Remote Control
Interface web, tout appareil apps desktop
Gestion visuelle des worktrees (multi-repo) (mono-repo, desktop)
Découvre & reprend les sessions de terminal existantes partiel
100 % auto-hébergé, zéro trafic via des serveurs tiers serveur relais relayé via Anthropic
Linux-first variable l'app desktop n'a pas de build Linux
Open source MIT / partiel MIT / AGPL

Le Remote Control d'Anthropic est excellent pour piloter une session depuis votre téléphone. Arboretum est la couche qu'il ne fournit pas : le tableau consolidé et auto-hébergé de tous vos worktrees et sessions, à travers tous vos repos.

Une note sur l'usage de Claude

Arboretum enveloppe le CLI Claude Code interactif dans un PTY : la même chose que vous lancez dans votre terminal, affichée dans votre navigateur. Il n'utilise pas l'Agent SDK ni le mode headless. Les politiques d'usage d'Anthropic autour de l'usage programmatique peuvent évoluer ; Arboretum suivra les sorties du CLI et documentera tout impact de façon transparente.

Développement

Arboretum est un monorepo npm workspaces : @arboretum/shared (protocole WS/REST, source de vérité), @johanleroy/git-arboretum (le daemon Fastify, le paquet publié), @arboretum/web (la SPA Vue 3) et git-arboretum (l'extension VS Code, buildée séparément avec npm run build:vscode).

npm run build        # build shared → server → web (l'ordre compte)
npm run typecheck    # tsc -b shared + server
npm test             # vitest sur les packages
npm run dev:server   # daemon en watch
npm run dev:web      # serveur de dev Vite (proxifie /api et /ws vers le daemon sur :7317)

Scripts d'acceptation end-to-end (lancez npm run build d'abord) :

node packages/server/scripts/acceptance-p1.mjs   # cœur : daemon + client WS réel
node packages/server/scripts/acceptance-p2.mjs   # découverte & reprise de sessions
node packages/server/scripts/acceptance-p3.mjs   # worktrees & corrélation de sessions
node packages/server/scripts/acceptance-p4.mjs   # Web Push + commande WS `answer`
node packages/server/scripts/acceptance-p5.mjs   # groupes de travail : CRUD + broadcast WS + CASCADE
node packages/server/scripts/acceptance-p7.mjs   # moteur git, API fichiers & watcher FS temps réel
node packages/server/scripts/acceptance-p8.mjs   # IDE workspace : changes / diff / staging / commit
node packages/server/scripts/acceptance-p9.mjs   # commit/push avancé : staging sélectif, amend, fetch/pull
node packages/server/scripts/acceptance-p10.mjs  # archivage automatique des sessions
node packages/server/scripts/acceptance-p11.mjs  # synchronisation des réglages en temps réel
node packages/server/scripts/acceptance-p12.mjs  # services git distants + clone HTTPS

Le protocole s'est enrichi (de façon additive, sans bump de version) pour porter ces nouveautés : messages client watch / unwatch et signal ciblé worktree_changes (P7), plus les broadcasts session_archived (P10), settings_update (P11) et clone_update (P12). Côté serveur, le tout s'appuie sur core/git.ts (le moteur git pur), core/fs-watcher.ts (chokidar), core/git-credentials.ts + core/clone-manager.ts (identifiants chiffrés & clone), et les services d'archivage de sessions et de réglages.

Soutenir le projet

Arboretum est un projet personnel libre et auto-financé. S'il vous fait gagner du temps, vous pouvez soutenir son développement :

Buy Me a Coffee

Licence

MIT, voir LICENSE.