Vibe de Mistral AI dans podman. Dehors ça souffle, dedans ça code
  • Shell 62.7%
  • Dockerfile 21.3%
  • Just 16%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
solene c330b9eb65
All checks were successful
ci / build (push) Successful in 9s
ci / publish (push) Successful in 8s
Merge pull request 'pull-image-publique-si-absente' (#9) from pull-image-publique-si-absente into main
Reviewed-on: #9
2026-11-04 22:41:00 +00:00
.forgejo/workflows docs: indiquer le droit read/write de chaque scope du token CI_TOKEN 2026-11-03 17:26:42 +00:00
static ajout image projet 2026-10-22 12:55:23 +02:00
AGENTS.md feat: ajouter l'option --update pour tirer la dernière image publiée 2026-11-04 22:15:21 +00:00
Containerfile renovate: update dependency mistral-vibe to v3.1.0 2026-11-04 21:58:29 +00:00
Justfile feat: ajouter l'option --update pour tirer la dernière image publiée 2026-11-04 22:15:21 +00:00
kawey feat: ajouter l'option --update pour tirer la dernière image publiée 2026-11-04 22:15:21 +00:00
README.md feat: ajouter l'option --update pour tirer la dernière image publiée 2026-11-04 22:15:21 +00:00
renovate.json5 ci: faire suivre l'épingle mistral-vibe du Containerfile par renovate 2026-11-04 21:52:25 +00:00

Image du projet

Dehors ça souffle, dedans ça code

kawey

Lance le Vibe CLI dans un conteneur podman, avec le dossier courant monté comme espace de travail. Vibe n'a accès qu'à ce dossier, et aux éventuels dossiers que vous ajoutez explicitement, pas au reste de votre machine.

Équivalent de cloche (« Claude code sous cloche »), pour Mistral Vibe. Le nom vient du brise-vent : kawey protège du Mistral.

Image publique

Une image à jour est publiée automatiquement sur git.coopix.eu/public/kawey:latest à chaque modification du dépôt. Si l'image locale manque au lancement, kawey tente d'abord de tirer cette image publique (voir KAWEY_UPSTREAM_IMAGE), et ne la construit localement que si elle n'est pas disponible sur le registre. L'option --update force ce tirage même si une image locale existe déjà, avec repli sur l'image locale si le registre est injoignable.

Prérequis

  • podman 4.3 ou plus récent, en mode rootless (utilisateur normal, pas root)
  • bash
  • just, facultatif, pour l'installation en une commande

Installation

git clone <url-du-dépôt> ~/kawey
cd ~/kawey
just deploy

just deploy vérifie le script, crée le lien symbolique ~/.local/bin/kawey et prépare l'image (tirée du registre public si elle n'est pas déjà locale, construite sinon). Vérifiez que ~/.local/bin est dans votre PATH ; just vous prévient si ce n'est pas le cas.

Sans just, le lien symbolique suffit, l'image étant alors tirée du registre public au premier lancement (ou construite localement si elle n'y est pas) :

ln -s ~/kawey/kawey ~/.local/bin/kawey

Dans les deux cas, le script retrouve le Containerfile à côté de son emplacement réel : ne déplacez pas le dépôt après l'installation, ou relancez just install.

Utilisation

cd ~/mon-projet
kawey

Au premier lancement, l'image est tirée depuis le registre public si elle n'est pas déjà présente localement (sinon elle est construite, ce qui prend quelques minutes), puis Vibe lance son assistant de configuration : connectez-vous avec votre compte Mistral (« Launch browser ») ou collez une clé API générée sur Code > Vibe CLI. La connexion est conservée pour les lancements suivants.

Tout ce qui suit les options de kawey est transmis à vibe :

kawey -p "résume ce dépôt"

Options

Option Effet
--rebuild reconstruit l'image (met à jour le CLI Vibe) avant de lancer
--update met à jour l'image depuis le registre (repli sur l'image locale si le pull échoue)
--build-only tire ou construit l'image si besoin (ou de zéro avec --rebuild) puis quitte
--shell ouvre un shell bash dans le conteneur au lieu de vibe
--include CHEMIN monte un dossier de plus sur /work/<nom> (lecture/écriture) et le donne à vibe (--add-dir) ; répétable
--include-ro CHEMIN idem, en lecture seule ; répétable
--kawey-help affiche l'aide

Ces options doivent être placées avant les arguments destinés à vibe.

Travailler sur plusieurs projets

Pour donner à Vibe accès à d'autres dossiers que le projet courant, ajoutez-les avec --include (ou --include-ro si Vibe doit seulement les lire) :

cd ~/mon-projet
kawey --include ../ma-lib --include-ro ~/docs-api

Chaque dossier est monté à côté du projet, sur /work/<nom-du-dossier> (ici /work/ma-lib et /work/docs-api), et transmis à Vibe par son option --add-dir, qui les ajoute à son espace de travail au même titre que le projet. Le projet courant reste le dossier de travail du conteneur. Avec --shell, les dossiers sont montés mais rien n'est transmis à Vibe.

Deux dossiers de même nom sont refusés, tout comme les chemins contenant « : » ou les noms de dossier contenant « , ». Le --add-dir de Vibe reste utilisable tel quel après les options de kawey, mais il ne monte rien : il ne sert que pour un chemin déjà présent dans le conteneur.

Variables d'environnement

Variable Rôle
KAWEY_IMAGE nom de l'image (défaut : localhost/kawey:latest)
KAWEY_UPSTREAM_IMAGE image publique tirée si l'image locale manque (défaut : git.coopix.eu/public/kawey:latest ; vide = construire directement)
KAWEY_CONFIG_DIR dossier hôte de la config Vibe (défaut : ~/.local/share/kawey)
KAWEY_PROXY proxy HTTP(S) sortant, tel que vu depuis le conteneur
MISTRAL_API_KEY transmise au conteneur si elle est définie

CI/CD

La construction et la publication de l'image sont automatisées via Forgejo Actions :

  • Sur pull request : construction de l'image et vérification qu'elle fonctionne
  • Au merge dans main : construction et publication sur le registre public de Forgejo git.coopix.eu

Token CI (CI_TOKEN)

Les workflows (.forgejo/workflows/) utilisent le secret CI_TOKEN du dépôt : un personal access token (PAT) du compte dédié ci-kawey sur git.coopix.eu, à renseigner dans Settings → Actions → Secrets du dépôt public/kawey.

Création du token

  1. Se connecter à git.coopix.eu avec le compte ci-kawey, puis Settings → Applications → Generate New Token.
  2. Choisir l'accès « All (public, private, and limited) » ou « Public only » — jamais « Specific repositories » : Forgejo n'y autorise que read:repository, write:repository, read:issue et write:issue, ce qui rend read:user et read:organization impossibles.
  3. Cocher les scopes du tableau ci-dessous (dans l'interface Forgejo, choisir le droit read ou write pour chaque groupe de scopes).
  4. Copier le token affiché une seule fois, puis mettre à jour le secret CI_TOKEN du dépôt.

Scopes requis

Sur Forgejo, le droit write inclut read : un scope en write donne aussi la lecture.

Scope Droit Utilisé par Pourquoi
user read Renovate GET /api/v1/user à l'initialisation ; sans ce scope, Renovate échoue avec « Authentication failure »
repository write CI + Renovate lecture du dépôt et création des pull requests de mise à jour (write inclut read)
issue write Renovate issues, labels et commentaires (exigé depuis Forgejo >= 1.20 ; write inclut read)
organization read Renovate lecture de l'organisation public et de ses labels (exigé depuis Forgejo >= 1.20)
package write CI connexion au registre et envoi de l'image (docker login / docker push)

Références : scopes des tokens Forgejo et Renovate sur Forgejo.

Vérifier le token

curl -H "Authorization: token $CI_TOKEN" https://git.coopix.eu/api/v1/user
curl -H "Authorization: token $CI_TOKEN" https://git.coopix.eu/api/v1/orgs/public

La première commande doit renvoyer le compte ci-kawey, la seconde l'organisation public.

Dépannage

  • Renovate échoue avec « Authentication failure » : le token manque un scope (souvent user en read, issue en write ou organization en read) ou le secret CI_TOKEN est vide ; passer LOG_LEVEL: debug dans .forgejo/workflows/renovate.yml donne le détail, puis relancer le workflow renovate (workflow_dispatch).
  • La CI échoue au docker login : le scope package en write manque ou a expiré.

Dépôt et CI

Élément Emplacement
Code source git.coopix.eu/public/kawey
Image publique git.coopix.eu/public/kawey:latest
Workflows CI .forgejo/workflows/
Configuration Renovate renovate.json5

Gestion des dépendances

Les dépendances du Containerfile (image de base Python, version épinglée de mistral-vibe) sont suivies automatiquement par Renovate : le tag de l'image via le gestionnaire dockerfile, et la version de mistral-vibe épinglée dans le pip install via un gestionnaire regex (datasource PyPI). Les pull requests de mise à jour sont créées automatiquement selon la configuration dans renovate.json5.