Mistral Vibe Development Environment
Code name:
mistral-dev
Installs the Mistral Vibe IDE extension
across supported editors so every devcontainer gets AI-assisted coding powered
by Mistral out of the box. Credentials and configuration persist in a Docker
named volume linked into the container — they survive all rebuilds, including
--no-cache, and GitHub Codespaces.
Also included automatically: repairs broken host paths in your git config and restores your SSH commit-signing key on every attach, on both local and cloud containers, with nothing to set up on your end — see
helpers4-commonfor how it works.
Example Usage
Section titled “Example Usage”No initializeCommand required — Docker creates the volume automatically the
first time it’s needed.
With the optional CLI:
GitHub Codespaces
Section titled “GitHub Codespaces”Works out of the box. A host bind-mount would not: GitHub Codespaces doesn’t support mounting the local file system at all, so this feature uses a Docker named volume instead. Each codespace gets its own volume, populated on your first Vibe login there.
The volume name includes ${devcontainerId}, so it’s dedicated to this one devcontainer —
credentials and config survive rebuilds of this project, but never bleed into another one. The
trade-off: logging in again is needed once per devcontainer, not once per machine. Earlier
versions keyed the volume by ${localEnv:USER} instead (one identity shared across every local
project) — deliberately dropped, mirroring the same fix applied to claude-dev:
sharing one AI tool identity across otherwise-unrelated projects risks config/permission
settings from one project silently applying to another, for a convenience (skip re-login) that
isn’t worth that trade-off.
Options
Section titled “Options”| Option | Type | Default | Description |
|---|---|---|---|
username | string | auto | Container user that receives the ~/.vibe symlink. auto detects vscode/node/codespace/uid-1000, in that order; set an explicit username to override. |
installCli | boolean | false | Install the vibe CLI. Requires Python 3.12+ or uv in the container. |
IDE support
Section titled “IDE support”| Editor | Status | ID |
|---|---|---|
| VS Code | ✅ | mistralai.mistral-vibe-code |
| Cursor | ✅ | mistralai.mistral-vibe-code (same registry as VS Code) |
How it works
Section titled “How it works”Extension
Section titled “Extension”The feature declares the mistralai.mistral-vibe-code extension via the
customizations field in devcontainer-feature.json. The devcontainer runtime
installs it automatically.
Credential persistence
Section titled “Credential persistence”- Build time (
install.sh): generates/usr/local/share/mistral-dev/setup-credentials.shwith the target user’s home path baked in. - Mount (
devcontainer-feature.json → mounts): mounts the Docker named volumehelpers4-mistral-credentials-${devcontainerId}at/mnt/h4vibeinside the container. - Every start (
postStartCommand):setup-credentials.shreplaces~/.vibewith a symlink to/mnt/h4vibe— credentials and config survive rebuilds.
This means:
- Credentials survive container rebuilds (including
--no-cache) and Codespaces. - First-time auth inside the container writes back to the volume automatically.
VIBE_HOMEis not required — the symlink is transparent to Mistral Vibe.
If /mnt/h4vibe is not mounted (e.g. a standalone install.sh test), the
script warns and exits cleanly — the container starts normally, just without
persistence.
CLI (optional)
Section titled “CLI (optional)”When installCli: true, the vibe command is installed at build time via uv
(preferred) or pip. See Mistral Vibe CLI docs.
OS and Architecture Support
Section titled “OS and Architecture Support”- OS: Linux (Debian/Ubuntu-based images)
- Architectures: amd64, arm64
Version History
Section titled “Version History”- v1.3.1: Documentation only, no functional change — centralized the exclusive-vs-shared
volume rationale onto
h4_ensure_volume_writable’s own comment inhelpers4-common, trimming the near-identical explanation this file (and claude-dev/pnpm-store/playwright-dev) used to restate independently. - v1.3.0: Breaking: the credentials volume is now keyed by
${devcontainerId}instead of${localEnv:USER}— each devcontainer gets its own dedicated volume instead of sharing one across every local project. You’ll need to log in again once per devcontainer instead of once per machine. Mirrors the same fix applied toclaude-dev— see “GitHub Codespaces” above.h4_ensure_volume_writableis now called without--shared, since an exclusive-per-container volume can never have a concurrent writer with a different UID. - v1.2.4: Internal cleanup, no behavior change — dropped dead
_BUILD_ARG_*fallbacks ininstall.sh(INSTALLCLI,USERNAME). That prefix is only ever set for the legacyinternalVersion: "1"manifest shape, which this feature (and every other one in this repo) never declared — the fallback never fired, the plain option env var alone always resolved the same value. - v1.2.3: Internal refactor, no behavior change — the shared-volume ownership logic
(claim on first use, share via
chmodafterward instead of stealing from another project’s container) now callshelpers4-common’sh4_ensure_volume_writable --sharedinstead of carrying its own inline copy. - v1.2.2: Documentation only, no functional change — the previous wording sweep made the
JSON
descriptionfield far too long, shifting focus away from the feature itself onto the self-heal side benefit. Shortened to 5 words and kept generic (no implementation detail like “git config”), matching the original’s brevity and level of detail. - v1.2.1: Documentation only, no functional change — the self-heal callout above (and the
JSON
descriptionfield) led with internal jargon (“helpers4’s self-heal”) instead of the actual benefit; reworded to lead with what it does, with the full mechanism staying inhelpers4-common’s own README. - v1.2.0: Documentation only, no functional change — mentions that
helpers4-common’s automatic git-config self-heal (see above) now comes along with this feature. - v1.1.0: Switched from an inline copy of
helpers4-common’s bootstrap (user detection, apt helpers) to a directdependsOnon thehelpers4-commonfeature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. - v1.0.6: Fixed
EACCESpermission errors on a fresh container: the named volume introduced in v1.0.4 is created root-owned by Docker, and nothing chowned it to the container’s actual user before symlinking~/.vibeinto it.setup-credentials.shnow chowns the volume to the current user when needed, same patternpnpm-store’s guard script already used. - v1.0.5: A missing
/mnt/h4vibemount now warns and exits cleanly instead of erroring out — the container starts normally, just without persistence, matchingclaude-dev’s behavior for the structurally identical situation. - v1.0.4: Switched credential persistence from a host bind-mount to a Docker named volume
to fix GitHub Codespaces, which doesn’t support host bind-mounts at all (#66). If you’re
upgrading from v1.0.3 or earlier, this is a breaking change: the new volume starts empty —
your old host-bound
~/.vibeisn’t copied in automatically. Re-authenticate once after upgrading, or manually copy your old~/.vibecontent into the new volume (e.g.docker cpinto a throwaway container mountinghelpers4-mistral-credentials-${USER}) if you want to keep it.
