Are you the author? Sign in to claim
Bundle agentic coding souverain : OpenCode + agent-vm + Albert API + skills État + MCP
_ _ _ _ ____ _
/ \ | | |__ ___ _ __| |_ / ___|___ __| | ___
/ _ \ | | '_ \ / _ \ '__| __| | | / _ \ / _` |/ _ \
/ ___ \| | |_) | __/ | | |_ | |__| (_) | (_| | __/
/_/ \_\_|_.__/ \___|_| \__| \____\___/ \__,_|\___|
⚠️ PROJET EXPÉRIMENTAL : Nous testons actuellement plusieurs modèles dans le cadre d'une éventuelle offre pour le code. Le(s) modèle(s) de code d'Albert API peut(vent) changer. ⚠️
Stack d'agentic coding souveraine pour l'État, en une commande : OpenCode + VM isolée + Albert API + skills de l'État + MCP.
Albert Code assemble des briques existantes pour coder avec une IA souveraine, isolée, avec les standards de l'administration embarqués :
Ce n'est pas un IDE ni un fork : de l'orchestration mince (scripts + config) au-dessus d'OpenCode.
Statut : v1, validé en dogfood bout en bout le 2026-07-02. En test avec des early adopters. Retours et issues bienvenus.
npx).git clone https://github.com/etalab-ia/albert-code.git ~/albert-code
cd ~/albert-code
./install.sh
Le chemin d'installation ne doit pas contenir d'espace (contrainte du moteur de VM/Lima, qui monte le répertoire de travail dans la VM).
Après installation, tu disposes de la commande albert-code à 3 verbes :
| Verbe | Action |
|---|---|
albert-code install | 1ʳᵉ fois : bootstrap le poste (Lima, VM isolée, clé Albert, skills). |
albert-code setup | Par projet, obligatoire avant le 1ᵉʳ run : configure le projet (AGENTS.md + opencode.json + choix skills/MCP). |
albert-code run | Lancement : crée la VM de base si absente, puis ouvre la VM isolée. |
install.sh est idempotent et non-destructif : il amorce le poste (Phase A) et pose le shim albert-code. Ensuite, c'est albert-code setup puis albert-code run.
Flags : --dry-run (simule sans rien écrire), --help.
albert-code install # 1ʳᵉ fois : bootstrap ton poste
mkdir -p ~/mon-projet && cd ~/mon-projet
albert-code setup # configure le projet (AGENTS.md + MCP + skills)
albert-code run # ouvre la bulle isolée + OpenCode
⚠️ L'ordre compte :
install(une fois), puissetup(une fois par projet), puisrun. C'estsetupqui pose l'opencode.json(provider Albert), les MCP et les skills du projet. Unrunsanssetupouvre OpenCode non connecté à Albert (pas de/models, ni MCP, ni skills) : si c'est ton cas, quitte, faisalbert-code setup, relancealbert-code run.
Dans la bulle, l'agent tourne en mode autonome (--dangerously-skip-permissions), sûr parce que tout est confiné dans la VM. Tu peux lui parler en français.
Les commandes exactes (avec tes valeurs) s'affichent à la fin de albert-code setup, sous « Prochaines étapes ».
Si ton projet a déjà un
opencode.json, il est conservé (non-destructif) — vérifie qu'il contient bien le provider Albert, sinon Albert ne sera pas câblé. Voir Dépannage si besoin.
Les défauts du moteur de VM (1 CPU / 3 GiB / 10 GiB) sont trop justes pour un agent de code. Albert Code applique par défaut 4 CPU / 8 GiB / 32 GiB, surchargeables par variable d'environnement :
AC_VM_CPUS=8 AC_VM_MEMORY=16 AC_VM_DISK=64 ./install.sh
| Variable | Défaut | Rôle |
|---|---|---|
AC_VM_CPUS | 4 | CPU alloués (s'applique au lancement de la VM). |
AC_VM_MEMORY | 8 (GiB) | RAM allouée (s'applique au lancement). |
AC_VM_DISK | 32 (GiB) | Disque, fixé au 1er lancement, ne peut ensuite que grandir. |
Garde-fou hôte (lecture seule, macOS + Linux) : install.sh détecte les ressources de ta machine (sysctl/nproc) et ne propose jamais plus de ~la moitié du CPU/RAM hôte, même si AC_VM_* demande plus — pour ne pas sur-allouer sur un petit poste. Le disque n'est jamais rogné (sparse : alloué à l'usage, pas d'un coup) ; un avertissement s'affiche si l'espace libre est insuffisant.
Par défaut, l'agent peut committer dans la VM mais ni pusher ni ouvrir de PR : la VM isole la bulle de tes credentials hôte (aucun SSH, aucun token). Pour l'autoriser, fournis un token GitHub dédié.
~/.agent-vm/runtime.sh (hôte, hors de tout dépôt, chmod 600) — jamais dans un opencode.json ni un fichier versionné :
# --- albert-code : auth GitHub VM ---
grep -q 'GH_TOKEN' ~/.zshenv 2>/dev/null || echo "export GH_TOKEN='github_pat_XXXXXXXX'" >> ~/.zshenv
export GH_TOKEN='github_pat_XXXXXXXX'
grep -q 'AC_GIT_USER_NAME' ~/.zshenv 2>/dev/null || echo "export AC_GIT_USER_NAME='Prénom Nom'" >> ~/.zshenv
export AC_GIT_USER_NAME='Prénom Nom'
grep -q 'AC_GIT_USER_EMAIL' ~/.zshenv 2>/dev/null || echo "export AC_GIT_USER_EMAIL='ton-id@users.noreply.github.com'" >> ~/.zshenv
export AC_GIT_USER_EMAIL='ton-id@users.noreply.github.com'
# --- /albert-code ---
albert-code run). Le runtime du bundle branche alors automatiquement le credential helper (gh auth setup-git) et pose l'identité git. git push et gh pr create marchent depuis la VM.Le token vit dans une bulle exposée au prompt-injection : garde-le fine-grained, scopé, révocable, et relis chaque PR avant merge. Un contenu malveillant pourrait pousser l'agent à en abuser dans la limite de sa portée — d'où les permissions minimales.
Au setup, Albert Code te propose des skills et des MCP, à la carte : une question Y/n par brique, avec une ligne d'explication. Rien n'est imposé, rien n'est appliqué dans ton dos.
Une skill est un mode d'emploi que l'agent charge à la demande : un dossier d'instructions, de conventions et d'exemples pour une tâche précise. Exemples embarqués (Skills de l'État) : appliquer le DSFR, vérifier l'accessibilité RGAA, respecter les règles de sécurité ANSSI, utiliser les API data.gouv.
setup : chaque skill est proposée en Y/n avec son objectif. La sélection est propre au projet (.albert-code/skills.txt).albert-code setup (ou édite .albert-code/skills.txt) pour changer la sélection.MCP (Model Context Protocol) est un standard qui branche l'agent sur un outil ou un service externe. Sans MCP, l'agent sait lire/écrire des fichiers et lancer des commandes dans la VM ; chaque MCP lui ajoute un accès structuré à une source ou un outil.
| MCP | Ce que l'agent sait faire en plus | Clé |
|---|---|---|
data-gouv | Interroger les données publiques de data.gouv.fr (catalogue, datasets, API tabulaire), en lecture. | aucune |
context7 | Lire la documentation à jour des librairies et frameworks pendant qu'il code. | gratuite (context7.com/plans), demandée au setup si tu choisis ce MCP |
playwright | Piloter un navigateur headless dans la VM : ouvrir une page, cliquer, tester une UI. | aucune |
chrome-devtools | Débugger le navigateur : DOM, console, requêtes réseau, performance. | aucune |
setup : seuls les MCP que tu acceptes sont écrits dans l'opencode.json du projet.setup (jamais à l'install).ALBERT_API_KEY, CONTEXT7_API_KEY) ne sont jamais versionnées ni loggées ; elles sont persistées dans le ~/.zshenv de la VM en chmod 600.Harness : OpenCode uniquement. Provider Albert via @ai-sdk/openai-compatible.
Modèles Albert embarqués : trois modèles, sélectionnables dans OpenCode via /models.
| Modèle | Rôle | Usage type | Contexte |
|---|---|---|---|
Mistral-Medium-3.5-128B | model (défaut) | Usage agentique principal : édition multi-fichiers, refacto, tool calling. | 128k |
DeepSeek-V4-Flash | small_model | Tâches légères et rapides (titres, résumés, sous-étapes). | 384k |
Qwen/Qwen3.6-27B | disponible (non défaut) | Multimodal (vision) : lire un screenshot, une maquette DSFR, un rendu d'UI. Sélection : albert/Qwen/Qwen3.6-27B. | 256k |
Pour changer le modèle par défaut d'un projet, édite model dans son opencode.json.
Config : opencode.json de portée projet (jamais le global de l'utilisateur, qui peut avoir d'autres providers).
Skills : etalab-ia/skills cloné dans un cache (~/.config/opencode/.albert-skills-cache) et symliqué dans le dossier scanné par OpenCode. Au setup, chaque skill est proposée en Y/N avec son objectif. La sélection est écrite dans .albert-code/skills.txt à la racine du projet. Au boot de la VM, sync_skills ne symlinke que les skills sélectionnées puis réconcilie (retire les symlinks des skills non sélectionnées, sans jamais toucher les skills perso). Sans manifeste .albert-code/skills.txt, toutes les skills sont installées (rétrocompat). Mise à jour à chaque démarrage de VM.
MCP : les 4 connecteurs sont désormais tous opt-in. Au setup, chaque MCP est proposé en Y/N avec son objectif : data-gouv (accès aux données publiques), context7 (doc à jour des librairies ; si tu le choisis, la clé gratuite est demandée à ce moment-là : https://context7.com/plans), playwright (navigateur headless), chrome-devtools (debug navigateur). Seuls les MCP acceptés sont écrits dans opencode.json du projet (enabled:false par défaut). Note : le MCP chrome-devtools peut aussi apparaître dans OpenCode même si non coché — il est préinstallé par le moteur d'isolation en amont et n'est pas sous le contrôle d'Albert Code.
Conventions : AGENTS.md depuis templates/AGENTS.default.md (sécurité, plan mode, task management, code quality, git, accessibilité). Si le projet a déjà son AGENTS.md, il est conservé.
Docs : OpenCode · Albert API · agent-vm · Skills État
Base VM not found → lance albert-code run une fois ; la VM de base se crée automatiquement./models, /mcp, /skills) → tu as lancé albert-code run dans un dossier sans opencode.json (ex. le dépôt albert-code lui-même, ou un projet jamais scaffoldé). Scaffolde d'abord : cd <ton-projet> && albert-code setup, puis relance albert-code run.opencode.json → il est conservé (non-destructif). Vérifie qu'il contient le provider albert ; sinon Albert n'est pas câblé — ajoute à la main le bloc provider.albert + model/small_model../uninstall.sh
Retire le bloc albert-code du runtime VM, le cache et les symlinks skills. Préserve tes skills et ta config perso.
Issues et PR bienvenues. Le dépôt suit ses propres conventions dans AGENTS.md ; le contexte et les décisions sont dans docs/PLAN.md.
Développer Albert Code lui-même :
cp config/opencode.template.json opencode.json(déjà gitignoré) puis lancealbert-code run—install.shne scaffolde pas son propre dépôt.
Albert Code · département IA dans l'État (IAE), DINUM · Licence MIT
⚠️ Experimentelle Skill-Sammlung für deutsches Recht (Arbeits-, Gesellschafts-, Insolvenz-, Datenschutz-, Prozessrecht u
Manage multiple Claude Code agents from TUI or Web with tmux and git worktrees
Project management using GitHub Issues + Git worktrees for parallel agent execution
Core skills library for Claude Code with 20+ battle-tested skills including TDD, debugging, and brainstorming