Mistral Vibe setup
Mistral Vibe is an open-source coding Agent with terminal, VS Code, Web, and ACP surfaces. The CLI and VS Code extension share the same local configuration and sessions. This guide uses Vibe's official VIBE_HOME override so Lumoswitch remains separate from the default ~/.vibe directory.
Install Vibe first:
uv tool install mistral-vibeOn Windows, install uv, run the same command in PowerShell, and use a modern terminal. Vibe works on Windows, although its upstream project primarily targets Unix environments.
Create a Lumoswitch API configuration with OpenAI-compatible output.
Connection values
| Placeholder | Value |
|---|---|
{{api_base_url}} | Downstream API URL, including /v1 |
{{access_key}} | Access Key selected for the Lumoswitch API configuration |
{{model}} | Client-facing model name |
The generated profile uses Vibe's generic OpenAI backend and keeps the Key in an environment variable rather than TOML. It does not invent pricing, token limits, or reasoning capabilities that are absent from the effective Lumoswitch configuration.
One-time launch
Run this from the project you want Vibe to work on:
(
set -e
LUMOSWITCH_VIBE_HOME="$(mktemp -d "${TMPDIR:-/tmp}/lumoswitch-vibe.XXXXXX")"
lumoswitch_cleanup() {
rm -rf "$LUMOSWITCH_VIBE_HOME"
}
trap lumoswitch_cleanup EXIT HUP INT TERM
umask 077
cat > "$LUMOSWITCH_VIBE_HOME/config.toml" <<'LUMOSWITCH_VIBE_CONFIG_EOF'
active_model = "lumoswitch"
default_agent = "default"
log_interactions = true
[[providers]]
name = "lumoswitch"
api_base = "{{api_base_url}}"
api_key_env_var = "LUMOSWITCH_VIBE_API_KEY"
api_style = "openai"
backend = "generic"
[[models]]
name = "{{model}}"
provider = "lumoswitch"
alias = "lumoswitch"
LUMOSWITCH_VIBE_CONFIG_EOF
env \
VIBE_HOME="$LUMOSWITCH_VIBE_HOME" \
LUMOSWITCH_VIBE_API_KEY="{{access_key}}" \
vibe
)The temporary Vibe home, configuration, and session log are deleted when Vibe exits. The default ~/.vibe directory is never read or changed.
Persistent use
This setup keeps managed configuration under ~/.config/lumoswitch and Vibe state under ~/.local/share/lumoswitch. Cleanup restores any file that existed in the dedicated Vibe home before the first import and preserves session logs, skills, agents, and prompts created there.
set -e
LUMOSWITCH_ROOT="$HOME/.config/lumoswitch/agents/mistral-vibe"
LUMOSWITCH_VIBE_HOME="$HOME/.local/share/lumoswitch/agents/mistral-vibe"
LUMOSWITCH_CONFIG="$LUMOSWITCH_VIBE_HOME/config.toml"
LUMOSWITCH_ENV="$LUMOSWITCH_ROOT/env.sh"
LUMOSWITCH_LAUNCHER="$HOME/.local/bin/lumoswitch-mistral-vibe"
mkdir -p "$LUMOSWITCH_ROOT/original" "$LUMOSWITCH_VIBE_HOME" "$(dirname "$LUMOSWITCH_LAUNCHER")"
umask 077
if [ -L "$LUMOSWITCH_CONFIG" ] || { [ -e "$LUMOSWITCH_CONFIG" ] && [ ! -f "$LUMOSWITCH_CONFIG" ]; }; then
printf '%s\n' 'Lumoswitch refused to replace a linked or non-regular Vibe config.' >&2
exit 1
fi
if [ ! -f "$LUMOSWITCH_ROOT/original/config.toml.state" ]; then
if [ -f "$LUMOSWITCH_CONFIG" ]; then
cp "$LUMOSWITCH_CONFIG" "$LUMOSWITCH_ROOT/original/config.toml"
printf '%s\n' present > "$LUMOSWITCH_ROOT/original/config.toml.state"
else
printf '%s\n' absent > "$LUMOSWITCH_ROOT/original/config.toml.state"
fi
fi
if [ -f "$LUMOSWITCH_LAUNCHER" ]; then
LUMOSWITCH_BACKUP="$LUMOSWITCH_LAUNCHER.backup.$(date +%Y%m%d-%H%M%S)-$$"
cp "$LUMOSWITCH_LAUNCHER" "$LUMOSWITCH_BACKUP"
chmod 600 "$LUMOSWITCH_BACKUP"
fi
cat > "$LUMOSWITCH_CONFIG" <<'LUMOSWITCH_VIBE_CONFIG_EOF'
active_model = "lumoswitch"
default_agent = "default"
log_interactions = true
[[providers]]
name = "lumoswitch"
api_base = "{{api_base_url}}"
api_key_env_var = "LUMOSWITCH_VIBE_API_KEY"
api_style = "openai"
backend = "generic"
[[models]]
name = "{{model}}"
provider = "lumoswitch"
alias = "lumoswitch"
LUMOSWITCH_VIBE_CONFIG_EOF
cat > "$LUMOSWITCH_ENV" <<'LUMOSWITCH_ENV_EOF'
export VIBE_HOME="$HOME/.local/share/lumoswitch/agents/mistral-vibe"
export LUMOSWITCH_VIBE_API_KEY="{{access_key}}"
LUMOSWITCH_ENV_EOF
case "$SHELL" in
*/zsh) LUMOSWITCH_PROFILE="$HOME/.zshrc" ;;
*/bash) LUMOSWITCH_PROFILE="$HOME/.bashrc" ;;
*) LUMOSWITCH_PROFILE="$HOME/.profile" ;;
esac
touch "$LUMOSWITCH_PROFILE"
LUMOSWITCH_PROFILE_MARKER='# Lumoswitch Agent: mistral-vibe'
LUMOSWITCH_SOURCE_LINE='[ -f "$HOME/.config/lumoswitch/agents/mistral-vibe/env.sh" ] && . "$HOME/.config/lumoswitch/agents/mistral-vibe/env.sh"'
if ! grep -Fqx "$LUMOSWITCH_SOURCE_LINE" "$LUMOSWITCH_PROFILE"; then
printf '\n%s\n%s\n' "$LUMOSWITCH_PROFILE_MARKER" "$LUMOSWITCH_SOURCE_LINE" >> "$LUMOSWITCH_PROFILE"
fi
printf '%s\n' "$LUMOSWITCH_PROFILE" > "$LUMOSWITCH_ROOT/profile-path"
cat > "$LUMOSWITCH_LAUNCHER" <<'LUMOSWITCH_LAUNCHER_EOF'
#!/usr/bin/env bash
set -e
LUMOSWITCH_ROOT="$HOME/.config/lumoswitch/agents/mistral-vibe"
LUMOSWITCH_VIBE_HOME="$HOME/.local/share/lumoswitch/agents/mistral-vibe"
LUMOSWITCH_CONFIG="$LUMOSWITCH_VIBE_HOME/config.toml"
LUMOSWITCH_ENV="$LUMOSWITCH_ROOT/env.sh"
LUMOSWITCH_LAUNCHER="$HOME/.local/bin/lumoswitch-mistral-vibe"
if [ "$1" = "--lumoswitch-clean" ]; then
if [ -f "$LUMOSWITCH_ROOT/profile-path" ]; then
LUMOSWITCH_PROFILE="$(cat "$LUMOSWITCH_ROOT/profile-path")"
if [ -f "$LUMOSWITCH_PROFILE" ]; then
LUMOSWITCH_PROFILE_MARKER='# Lumoswitch Agent: mistral-vibe'
LUMOSWITCH_SOURCE_LINE='[ -f "$HOME/.config/lumoswitch/agents/mistral-vibe/env.sh" ] && . "$HOME/.config/lumoswitch/agents/mistral-vibe/env.sh"'
LUMOSWITCH_PROFILE_TMP="$LUMOSWITCH_PROFILE.lumoswitch.$$"
awk -v marker="$LUMOSWITCH_PROFILE_MARKER" -v source="$LUMOSWITCH_SOURCE_LINE" '$0 != marker && $0 != source' "$LUMOSWITCH_PROFILE" > "$LUMOSWITCH_PROFILE_TMP"
mv "$LUMOSWITCH_PROFILE_TMP" "$LUMOSWITCH_PROFILE"
fi
fi
if [ -L "$LUMOSWITCH_CONFIG" ] || { [ -e "$LUMOSWITCH_CONFIG" ] && [ ! -f "$LUMOSWITCH_CONFIG" ]; }; then
printf '%s\n' 'Lumoswitch refused to clean a linked or non-regular Vibe config.' >&2
exit 1
fi
if [ -f "$LUMOSWITCH_ROOT/original/config.toml.state" ] && [ "$(cat "$LUMOSWITCH_ROOT/original/config.toml.state")" = present ]; then
cp "$LUMOSWITCH_ROOT/original/config.toml" "$LUMOSWITCH_CONFIG"
else
rm -f "$LUMOSWITCH_CONFIG"
fi
if [ -d "$LUMOSWITCH_ROOT" ]; then
find "$LUMOSWITCH_ROOT" -depth \( -type f -o -type l \) -delete
find "$LUMOSWITCH_ROOT" -depth -type d -exec rmdir {} \; 2>/dev/null || true
fi
find "$(dirname "$LUMOSWITCH_LAUNCHER")" -maxdepth 1 -type f -name 'lumoswitch-mistral-vibe.backup.*' -delete
rm -f "$LUMOSWITCH_LAUNCHER"
printf '%s\n' 'Lumoswitch Vibe setup removed. Vibe sessions and custom resources were preserved.'
exit 0
fi
if [ -f "$LUMOSWITCH_ENV" ]; then . "$LUMOSWITCH_ENV"; fi
exec vibe "$@"
LUMOSWITCH_LAUNCHER_EOF
chmod 600 "$LUMOSWITCH_CONFIG" "$LUMOSWITCH_ENV"
find "$LUMOSWITCH_ROOT" -type f -exec chmod 600 {} \;
chmod 700 "$LUMOSWITCH_LAUNCHER"
. "$LUMOSWITCH_ENV"
printf '%s\n' 'Native Lumoswitch setup saved. Future command: vibe'
printf '%s\n' 'Optional maintenance launcher: ~/.local/bin/lumoswitch-mistral-vibe'
vibeOpen a new terminal after setup. For everyday use, run vibe. A trusted project-level .vibe/config.toml has higher precedence than this user profile; use /config if a project intentionally selects another model.
Native Windows PowerShell import
Vibe runs natively on Windows. These commands use an isolated VIBE_HOME and do not require WSL.
One-time use on Windows
& {
$ErrorActionPreference = 'Stop'
$lumoswitchVibeHome = Join-Path ([IO.Path]::GetTempPath()) ('lumoswitch-vibe-' + [Guid]::NewGuid().ToString('N'))
[IO.Directory]::CreateDirectory($lumoswitchVibeHome) | Out-Null
$lumoswitchConfig = @'
active_model = "lumoswitch"
default_agent = "default"
log_interactions = true
[[providers]]
name = "lumoswitch"
api_base = "{{api_base_url}}"
api_key_env_var = "LUMOSWITCH_VIBE_API_KEY"
api_style = "openai"
backend = "generic"
[[models]]
name = "{{model}}"
provider = "lumoswitch"
alias = "lumoswitch"
'@
[IO.File]::WriteAllText((Join-Path $lumoswitchVibeHome 'config.toml'), $lumoswitchConfig, [Text.UTF8Encoding]::new($false))
$lumoswitchEnvironmentNames = @('VIBE_HOME', 'LUMOSWITCH_VIBE_API_KEY')
$lumoswitchPreviousEnvironment = @{}
foreach ($lumoswitchName in $lumoswitchEnvironmentNames) {
$lumoswitchPreviousEnvironment[$lumoswitchName] = [Environment]::GetEnvironmentVariable($lumoswitchName, 'Process')
}
$lumoswitchExitCode = 0
try {
[Environment]::SetEnvironmentVariable('VIBE_HOME', $lumoswitchVibeHome, 'Process')
[Environment]::SetEnvironmentVariable('LUMOSWITCH_VIBE_API_KEY', '{{access_key}}', 'Process')
$lumoswitchExecutable = Get-Command 'vibe.exe' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe.cmd' -CommandType Application -ErrorAction SilentlyContinue }
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe' -CommandType Application -ErrorAction Stop }
& $lumoswitchExecutable.Path
if ($null -ne $LASTEXITCODE) { $lumoswitchExitCode = $LASTEXITCODE }
} finally {
foreach ($lumoswitchName in $lumoswitchEnvironmentNames) {
[Environment]::SetEnvironmentVariable($lumoswitchName, $lumoswitchPreviousEnvironment[$lumoswitchName], 'Process')
}
Remove-Item -LiteralPath $lumoswitchVibeHome -Recurse -Force -ErrorAction SilentlyContinue
}
if ($lumoswitchExitCode -ne 0) { throw 'vibe exited with code ' + $lumoswitchExitCode }
}Persistent use on Windows
& {
$ErrorActionPreference = 'Stop'
$lumoswitchRoot = Join-Path $env:LOCALAPPDATA 'Lumoswitch\agents\mistral-vibe'
$lumoswitchVibeHome = Join-Path $env:LOCALAPPDATA 'Lumoswitch\data\mistral-vibe'
$lumoswitchConfig = Join-Path $lumoswitchVibeHome 'config.toml'
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-mistral-vibe.ps1'
$lumoswitchBackupSuffix = (Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + $PID
function Protect-LumoswitchFile([string] $Path) {
$lumoswitchSid = [Security.Principal.WindowsIdentity]::GetCurrent().User.Value
& icacls.exe $Path '/inheritance:r' '/grant:r' ('*' + $lumoswitchSid + ':(F)') '*S-1-5-18:(F)' '*S-1-5-32-544:(F)' | Out-Null
if ($LASTEXITCODE -ne 0) { throw "Could not restrict access to $Path" }
}
function Install-LumoswitchFile([string] $Path, [string] $Content) {
[IO.Directory]::CreateDirectory((Split-Path -Parent $Path)) | Out-Null
if (Test-Path -LiteralPath $Path) {
$lumoswitchItem = Get-Item -LiteralPath $Path -Force
if ($lumoswitchItem.PSIsContainer -or ($lumoswitchItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
throw "Lumoswitch refused to replace a directory or link: $Path"
}
$lumoswitchBackup = $Path + '.backup.' + $lumoswitchBackupSuffix
Copy-Item -LiteralPath $Path -Destination $lumoswitchBackup
Protect-LumoswitchFile $lumoswitchBackup
}
$lumoswitchTemporary = $Path + '.' + [Guid]::NewGuid().ToString('N') + '.tmp'
try {
[IO.File]::WriteAllText($lumoswitchTemporary, $Content, [Text.UTF8Encoding]::new($false))
Move-Item -LiteralPath $lumoswitchTemporary -Destination $Path -Force
Protect-LumoswitchFile $Path
} finally {
Remove-Item -LiteralPath $lumoswitchTemporary -Force -ErrorAction SilentlyContinue
}
}
function Preserve-LumoswitchOriginalEnvironment([string] $Name) {
$lumoswitchOriginalRoot = Join-Path $lumoswitchRoot 'original-environment'
$lumoswitchState = Join-Path $lumoswitchOriginalRoot ($Name + '.state')
if (Test-Path -LiteralPath $lumoswitchState -PathType Leaf) { return }
[IO.Directory]::CreateDirectory($lumoswitchOriginalRoot) | Out-Null
$lumoswitchValue = [Environment]::GetEnvironmentVariable($Name, 'User')
if ($null -eq $lumoswitchValue) {
Install-LumoswitchFile $lumoswitchState 'absent'
} else {
Install-LumoswitchFile (Join-Path $lumoswitchOriginalRoot ($Name + '.value')) $lumoswitchValue
Install-LumoswitchFile $lumoswitchState 'present'
}
}
function Preserve-LumoswitchOriginalConfig {
$lumoswitchOriginalRoot = Join-Path $lumoswitchRoot 'original-config'
$lumoswitchState = Join-Path $lumoswitchOriginalRoot 'config.toml.state'
if (Test-Path -LiteralPath $lumoswitchState -PathType Leaf) { return }
[IO.Directory]::CreateDirectory($lumoswitchOriginalRoot) | Out-Null
if (Test-Path -LiteralPath $lumoswitchConfig -PathType Leaf) {
$lumoswitchItem = Get-Item -LiteralPath $lumoswitchConfig -Force
if ($lumoswitchItem.Attributes -band [IO.FileAttributes]::ReparsePoint) { throw 'Lumoswitch refused to preserve a linked Vibe config.' }
Copy-Item -LiteralPath $lumoswitchConfig -Destination (Join-Path $lumoswitchOriginalRoot 'config.toml')
Protect-LumoswitchFile (Join-Path $lumoswitchOriginalRoot 'config.toml')
Install-LumoswitchFile $lumoswitchState 'present'
} else {
Install-LumoswitchFile $lumoswitchState 'absent'
}
}
[IO.Directory]::CreateDirectory($lumoswitchRoot) | Out-Null
[IO.Directory]::CreateDirectory($lumoswitchVibeHome) | Out-Null
Preserve-LumoswitchOriginalConfig
$lumoswitchConfigContent = @'
active_model = "lumoswitch"
default_agent = "default"
log_interactions = true
[[providers]]
name = "lumoswitch"
api_base = "{{api_base_url}}"
api_key_env_var = "LUMOSWITCH_VIBE_API_KEY"
api_style = "openai"
backend = "generic"
[[models]]
name = "{{model}}"
provider = "lumoswitch"
alias = "lumoswitch"
'@
Install-LumoswitchFile $lumoswitchConfig $lumoswitchConfigContent
foreach ($lumoswitchName in @('VIBE_HOME', 'LUMOSWITCH_VIBE_API_KEY')) {
Preserve-LumoswitchOriginalEnvironment $lumoswitchName
}
$lumoswitchEnvironment = [ordered]@{
VIBE_HOME = $lumoswitchVibeHome
LUMOSWITCH_VIBE_API_KEY = '{{access_key}}'
}
foreach ($lumoswitchEntry in $lumoswitchEnvironment.GetEnumerator()) {
[Environment]::SetEnvironmentVariable($lumoswitchEntry.Key, $lumoswitchEntry.Value, 'User')
[Environment]::SetEnvironmentVariable($lumoswitchEntry.Key, $lumoswitchEntry.Value, 'Process')
}
$lumoswitchLauncherContent = @'
param([Parameter(ValueFromRemainingArguments = $true)][string[]] $AgentArgs)
$ErrorActionPreference = 'Stop'
$lumoswitchRoot = Join-Path $env:LOCALAPPDATA 'Lumoswitch\agents\mistral-vibe'
$lumoswitchVibeHome = Join-Path $env:LOCALAPPDATA 'Lumoswitch\data\mistral-vibe'
$lumoswitchConfig = Join-Path $lumoswitchVibeHome 'config.toml'
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-mistral-vibe.ps1'
function Remove-LumoswitchFile([string] $Path) {
if (-not (Test-Path -LiteralPath $Path)) { return }
$lumoswitchItem = Get-Item -LiteralPath $Path -Force
if ($lumoswitchItem.PSIsContainer -or ($lumoswitchItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
throw "Lumoswitch refused to remove a directory or link: $Path"
}
Remove-Item -LiteralPath $Path -Force
}
function Restore-LumoswitchOriginal([string] $Name) {
$lumoswitchOriginalRoot = Join-Path $lumoswitchRoot 'original-environment'
$lumoswitchState = Join-Path $lumoswitchOriginalRoot ($Name + '.state')
if (-not (Test-Path -LiteralPath $lumoswitchState -PathType Leaf)) { return }
$lumoswitchStatus = (Get-Content -LiteralPath $lumoswitchState -Raw).Trim()
$lumoswitchValue = if ($lumoswitchStatus -eq 'present') {
Get-Content -LiteralPath (Join-Path $lumoswitchOriginalRoot ($Name + '.value')) -Raw
} else { $null }
[Environment]::SetEnvironmentVariable($Name, $lumoswitchValue, 'User')
[Environment]::SetEnvironmentVariable($Name, $lumoswitchValue, 'Process')
}
if ($AgentArgs.Count -gt 0 -and $AgentArgs[0] -eq '--lumoswitch-clean') {
foreach ($lumoswitchName in @('VIBE_HOME', 'LUMOSWITCH_VIBE_API_KEY')) {
Restore-LumoswitchOriginal $lumoswitchName
}
$lumoswitchOriginalConfigRoot = Join-Path $lumoswitchRoot 'original-config'
$lumoswitchConfigState = Join-Path $lumoswitchOriginalConfigRoot 'config.toml.state'
if (Test-Path -LiteralPath $lumoswitchConfigState -PathType Leaf) {
if ((Get-Content -LiteralPath $lumoswitchConfigState -Raw).Trim() -eq 'present') {
[IO.Directory]::CreateDirectory($lumoswitchVibeHome) | Out-Null
Copy-Item -LiteralPath (Join-Path $lumoswitchOriginalConfigRoot 'config.toml') -Destination $lumoswitchConfig -Force
} else {
Remove-LumoswitchFile $lumoswitchConfig
}
}
if (Test-Path -LiteralPath $lumoswitchRoot -PathType Container) {
$lumoswitchRootItem = Get-Item -LiteralPath $lumoswitchRoot -Force
if ($lumoswitchRootItem.Attributes -band [IO.FileAttributes]::ReparsePoint) { throw 'Lumoswitch refused to clean through a linked directory.' }
foreach ($lumoswitchFile in @(Get-ChildItem -LiteralPath $lumoswitchRoot -File -Recurse -Force)) { Remove-LumoswitchFile $lumoswitchFile.FullName }
foreach ($lumoswitchDirectory in @(Get-ChildItem -LiteralPath $lumoswitchRoot -Directory -Recurse -Force | Sort-Object FullName -Descending)) {
if ($null -eq (Get-ChildItem -LiteralPath $lumoswitchDirectory.FullName -Force | Select-Object -First 1)) { Remove-Item -LiteralPath $lumoswitchDirectory.FullName -Force }
}
if ($null -eq (Get-ChildItem -LiteralPath $lumoswitchRoot -Force | Select-Object -First 1)) { Remove-Item -LiteralPath $lumoswitchRoot -Force }
}
$lumoswitchBin = Split-Path -Parent $lumoswitchLauncher
if (Test-Path -LiteralPath $lumoswitchBin -PathType Container) {
foreach ($lumoswitchBackup in @(Get-ChildItem -LiteralPath $lumoswitchBin -Filter 'lumoswitch-mistral-vibe.ps1.backup.*' -File -Force)) { Remove-LumoswitchFile $lumoswitchBackup.FullName }
}
Remove-LumoswitchFile $lumoswitchLauncher
Write-Host 'Lumoswitch Vibe setup removed. Vibe sessions and custom resources were preserved.'
exit 0
}
$lumoswitchApiKey = [Environment]::GetEnvironmentVariable('LUMOSWITCH_VIBE_API_KEY', 'User')
[Environment]::SetEnvironmentVariable('VIBE_HOME', $lumoswitchVibeHome, 'Process')
[Environment]::SetEnvironmentVariable('LUMOSWITCH_VIBE_API_KEY', $lumoswitchApiKey, 'Process')
$lumoswitchExecutable = Get-Command 'vibe.exe' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe.cmd' -CommandType Application -ErrorAction SilentlyContinue }
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe' -CommandType Application -ErrorAction Stop }
& $lumoswitchExecutable.Path @AgentArgs
if ($null -ne $LASTEXITCODE) { exit $LASTEXITCODE }
'@
Install-LumoswitchFile $lumoswitchLauncher $lumoswitchLauncherContent
Write-Host 'Native Lumoswitch setup saved. Future command: vibe'
Write-Host 'Optional maintenance launcher:' $lumoswitchLauncher
$lumoswitchExecutable = Get-Command 'vibe.exe' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe.cmd' -CommandType Application -ErrorAction SilentlyContinue }
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'vibe' -CommandType Application -ErrorAction Stop }
& $lumoswitchExecutable.Path
if ($null -ne $LASTEXITCODE -and $LASTEXITCODE -ne 0) { throw 'vibe exited with code ' + $LASTEXITCODE }
}The Windows setup preserves and restores existing user-level VIBE_HOME and LUMOSWITCH_VIBE_API_KEY values. Configuration and launcher files receive user-only ACLs, while the separate Vibe data directory remains after cleanup so sessions and custom resources survive.
Remove the Lumoswitch setup
Windows PowerShell
& {
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-mistral-vibe.ps1'
if (-not (Test-Path -LiteralPath $lumoswitchLauncher -PathType Leaf)) {
throw 'The optional Lumoswitch maintenance launcher is missing. Run persistent import again before cleanup.'
}
& powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File $lumoswitchLauncher --lumoswitch-clean
}macOS / Linux
"$HOME/.local/bin/lumoswitch-mistral-vibe" --lumoswitch-cleanCleanup removes the managed provider profile, credential environment, shell hook, and launcher. It keeps Vibe session logs and any skills, agents, prompts, or tools created inside the isolated data directory; the default ~/.vibe directory remains untouched.
VS Code and ACP surfaces
The official Vibe VS Code extension shares the CLI's configuration and sessions. Start VS Code from a new terminal after persistent import, or restart the editor so its Vibe process receives VIBE_HOME and the Key. ACP-compatible editors can launch vibe-acp with the same environment.
Vibe Code Web is a hosted surface and does not inherit local custom-provider credentials. This setup covers the local CLI, official VS Code extension, and ACP clients.
Verify and troubleshoot
- Run
/configand confirm that the active model alias islumoswitch. - If a project contains
.vibe/config.toml, inspect it before trusting the folder; project configuration can select another provider. - The generic backend requires OpenAI-compatible streaming and native tool calls. Test file reads and a harmless shell command before a large edit.
- If Windows rendering is poor, use Windows Terminal, WezTerm, or another modern terminal.
References: Vibe Code, installation, configuration and VIBE_HOME, API keys and provider profiles, and CLI/VS Code session sharing.
Maintainer publication fields
- Platform ID:
mistral-vibe - Display name:
Mistral Vibe CLI - Downstream protocol:
openai-compatible - macOS/Linux and Windows temporary modes: enabled
- macOS/Linux and Windows persistent strategies:
native - Future command on both platforms:
vibe - Display order:
28 - Last structurally verified:
2026-08-27