Skip to main content
Mistral Vibe
$ cat ./mistral-vibe.md

Mistral Vibe

Mistral Vibe is a command-line interface tool that provides seamless access to Mistral AI's language models directly from the terminal. The tool enables developers and researchers to interact with Mistral's powerful AI models for text generation, code completion, and conversational AI tasks without leaving their development environment. Key features include configurable model parameters, batch processing capabilities, streaming responses, and support for custom prompts and templates. Mistral Vibe streamlines AI-powered workflows by offering efficient integration with existing development pipelines, making it ideal for automated content generation, code assistance, data analysis, and rapid prototyping. The tool supports various output formats and provides robust error handling, making it suitable for both interactive use and scripted automation in production environments.

5,131 stars 739 forks Python Apache License 2.0
mistralai 3583 Dec 23, 2025
Login with GitHub to like and favorite this CLI tool
$ git release --latest

Latest Releases

All releases

Added
  • The app-server reports which process holds a stored session, and pushes a change when that process lets go of it, so a client can show a session open elsewhere as read-only
  • Rust CLI: Configure proxy and SSL certificate settings with /proxy-setup.
  • Rust CLI: The narrator reads each turn's summary aloud and shows a speaking status row that Esc or Ctrl+C stops.
  • Rust CLI: /plugins browses the session's plugins, and /reload-plugins re-pins them and reports what changed.
  • Rust CLI: Free-text answers to agent questions accept multiple lines, multi-line pastes, and click-to-place caret.
  • Rust CLI: In the /model and /thinking pickers, s applies the selection for the current session only, while Enter still saves it to your config.
  • Rust CLI: Picking a model immediately opens the thinking level picker for that model, and both are applied together (Esc cancels both); after a session-only model pick, the thinking level is session-only too.
  • nix run .#rustCli to launch the Rust terminal instead of the Python one
  • Rust CLI: /whoami shows the start of your API key, its scope, and its access scope.
  • Space toggles the focused checkbox in multi-select questions.
  • enablebackgroundprocesses = false stops the agent from starting background processes
  • enable_subagents = false takes subagents away from the agent on the default runtime.
  • Disable main input cursor blinking with cursor_blink = false or /config, keeping a steady caret in both Python and Rust terminals.
  • Document Library connector: search, list, open, and fetch documents from your Mistral document libraries directly in Vibe.
  • export.json records steps, the number of model calls the agent made
  • export.json lists the session's config issues, such as a skill it could not load, under warnings
  • vibe -p reads the prompt from --prompt-file or stdin, and --output-dir writes an export.json and the session journal on every exit.
  • vibe -p --time-limit SECONDS stops the run at a deadline; SIGTERM and Ctrl-C stop it the same way, and the session can be resumed.
  • Per-model topp and maxoutput_tokens config settings.
  • Experimental experimentalenablemodel_catalog config flag (default off) — groundwork for the upcoming model catalog, no visible effect yet.
  • New apistreamidle_timeout setting (off by default) fails a model response that goes silent for that many seconds.
  • vibe -p --agent-socket sessions run background processes in their POSIX sandbox, as enablebackgroundprocesses says, instead of always turning them off
  • New titlepromptid config setting to override the prompt used to generate session titles: built-in session_title or a custom .md file from ~/.vibe/prompts/ or .vibe/prompts/.

Changed
  • New sessions start their first turn faster, and long sessions open, load older messages and resume sooner.
  • /status shows token counts in a compact form (e.g. 1.23M) followed by the exact value, dimmed, with thousands separators.
  • The context usage indicator and subagent token counts round to three significant digits (e.g. 12.5k instead of 12k).
  • Rust CLI: Queue selection removes the highlighted prompt with Backspace or Ctrl+C instead of Backspace or Delete.
  • Rust CLI: Tool group headers count each kind of call (e.g. "Read 10 files, ran 3 commands"), a single visible entry is no longer folded into a group, and result borders line up under their toggle arrows, wrapped headers included.
  • The off thinking level now actually disables reasoning on models whose offered levels include it, instead of silently leaving the server's default in charge.
  • The default model's thinking levels are now off and high; a stored low pick resets to off and a stored medium pick resets to high.
  • The default model declares a 256k context window; auto-compaction now derives from it.
  • A stale pin to the removed local model now warns and falls back to the hosted default.
  • Rust CLI: In text inputs, Cmd+Left/Right, Home/End and Ctrl+A/E at a line edge move on to the previous line start or the next line end.
  • Rust CLI: Shortcut hints use the same wording everywhere, and j/k navigate every list.
  • Rust CLI: /config, /mcp, /plugins and the project picker search with /; Esc leaves the search, then clears it, then closes. /plugins now shows its search field under the title, like /mcp and /config.
  • Rust CLI: Every list marks the focused row with the same highlight bar, and a green › marks the current value.
  • Rust CLI: Lists wrap at both ends and scroll back to their very top, Esc always goes back one level, and numbered options take their digit.
  • Your Mistral identity and plan now show in /whoami and the banner even when the active model isn't a Mistral model.
  • Rust CLI: Typing /, ! or & over a fully selected input switches to that mode, and so does pasting a /command or !command into an empty input.
  • Rust CLI: the startup banner hint now reads "You are using the new Vibe TUI. To switch back to the classic TUI, set the VIBE_CLI environment variable to python."
  • Stopping a background process now also stops what it started in the background, and returns only once all of it has exited
  • A background process now keeps running until everything it started in the background has exited, not just its shell
  • The Document Library connector is now gated behind the experimentalenabledocumentlibraryconnector config flag (off by default) while its tools stabilize.
  • vibe -p exits 1 on usage or config errors, 2 on infrastructure failures and 3 when a limit or a model refusal stopped the agent
  • vibe -p --max-turns now exits 3, not 1, when the agent reaches the turn limit; so do --max-tokens and --max-price, including when the budget ran out as the agent finished
  • Model requests retry HTTP 520.
  • Rust CLI: The welcome banner starts at the top left, with the conversation and what's new flowing below it while queued messages stay at the bottom.

Fixed
  • Browser sign-in now explains when your workspace can't be used and asks you to select another one, instead of showing a generic error.
  • Rust CLI: Ctrl+G opens the current input in $VISUAL / $EDITOR and loads the saved text back.
  • Rust CLI: A chat input selection no longer reappears after an approval, a question, or the subagent list takes focus.
  • Rust CLI: Text stays selectable and copyable while an approval, question, picker, or other bottom panel is open, including the transcript, the loading row, and the panel itself.
  • /reload-plugins now offers the skills of a plugin installed during the session, without a restart.
  • Rust CLI: Copying a selection no longer adds line breaks or indentation where long text wraps on screen.
  • Rust CLI: Copying wide characters such as CJK text no longer inserts a space after each one.
  • Rust CLI: Selecting or copying a wrapped or multi-line transcript row no longer picks up its hang indent.
  • Rust CLI: Long lines in an expanded thought now wrap inside its border and indent.
  • Rust CLI: Queue selection and edit controls replace the loading hints for as long as the mode lasts, instead of a notice that timed out or lingered.
  • Rust CLI: The loading hints no longer offer steering or queued-message cancellation when Enter or Ctrl+C would do something else.
  • Rust CLI: Long free-text answers to agent questions wrap instead of overflowing the question box.
  • Rust CLI: Answered questions show a check mark instead of an expand arrow that did nothing.
  • A corrupted MCP OAuth token in the keychain no longer crashes Vibe; the server just asks you to log in again
  • Tool calls with a very large result (e.g. reading a big file) keep their tool-specific header, marked as truncated, instead of showing as a generic tool call.
  • File paths in read, write, edit, and search headers are shown relative to the working directory or workspace root that contains them.
  • Rust CLI: Rewinding to a skill invocation reloads it in / mode with the caret at the end and that skill highlighted in the completion menu.
  • CI: fix Nix build step
  • Prompts sent by a scheduled loop now appear in the conversation, marked with the loop that fired them.
  • Scratchpad notes now display like file contents instead of a raw tool result dump.
  • Rust CLI: Copying a transcript selection keeps the blank lines and wrapped characters it shows, and drops the spacing between messages.
  • Rewinding to an earlier message no longer fails after the session was titled or renamed.
  • Rust CLI: /clear resets the context window display right away instead of keeping the previous conversation's usage until the next turn.
  • Rust CLI: Dead-key and IME previews show at the input caret instead of in the loader.
  • Rust CLI: Code blocks and edit diffs wrap long lines between words instead of splitting words, and continuation rows no longer start with a space.
  • Rust CLI: On terminal (ANSI) themes, code blocks are separated from the text around them by a blank row.
  • Rust CLI: Text with /, ! or & added before an existing message, or after leading spaces, is sent as a message instead of running a command, and stays one when rewound or edited in the queue.
  • Rust CLI: Backspace at the start of a /, ! or & input leaves the mode and keeps the text.
  • vibe -p no longer offers the cron tool, whose calls always failed in a headless session.
  • A model request that times out now shows a readable error instead of a blank one, and is recorded in the log.
  • A question or approval the agent asks while a steered message is waiting is no longer hidden, so the session no longer stalls on "Preparing a question".
  • Rust CLI: A long working directory is shortened with an ellipsis so the token counter stays visible in the bottom bar.
  • Closing a session no longer waits for its archived worktree to be deleted.
  • Smart approve asks less often for routine work, such as edits in a worktree, CI file changes and local commits.
  • Tool results with accents or non-Latin text now reach the model as written instead of as escape sequences.
  • Fix turns crashing with "Completed public history entry is frozen" when a backend keeps streaming reasoning or text after a tool call

Removed
  • The bundled Devstral (local) model
  • New --experimental-harness turns no longer re-state scratchpad notes into prompts, so they no longer add <vibe-scratchpad> blocks to the transcript.

Added
  • The app-server can discover built-in plugins from roots an embedding application ships, alongside the ones inside the package.
  • Vibe Code warns when the selected model cannot view attached images.
  • Vibe Code sessions list their background processes in a side panel with live status indicators and a Stop action for running ones.
  • The ~/.vibe/.env fallback for the API key when the OS keyring is unavailable is now created owner-only (0600), so a saved key is no longer readable by other accounts on the machine.
  • Rust CLI: first-run onboarding wizard with theme selection, API key entry stored in the OS keyring, and browser sign-in; it opens automatically when the API key is missing, and --setup runs it and exits.
  • Rust CLI: /teleport, &<prompt> and --teleport send the session to Vibe Code Web, with push approval and Esc to cancel.
  • Rust CLI: Configure voice mode and narration with /voice.
  • Rust CLI: Schedule recurring prompts in natural language with /loop and model-managed cron tools.
  • Rust CLI: Undo and redo composer edits with platform-aware keyboard shortcuts.
  • Rust CLI: vibe update and --check-upgrade ask the install's own package manager (uv, Homebrew, or PyPI) what it can deliver and prompt to upgrade the CLI.
  • Rust CLI: update checks honor enablesystemtrust_store — bundled Mozilla roots by default, the OS trust store when enabled.
  • Rust CLI: Clicking the scrollbar track scrolls one page; holding it keeps scrolling until the thumb reaches the pointer.
  • Rust CLI: Client usage telemetry now reaches the analytics pipeline: startup timings, slash commands, @-mentions, copies, cancellations and voice transcription events, with the detected terminal reported at launch.
  • Models accept a thinking_levels field to offer only the thinking levels they support.
  • Rust CLI: /mcp shows connector display names, plugin owners, and a link to add connectors in Studio.
  • /mcp <name> also accepts the display name shown in the browser, and unknown names list those display names.
  • Per-model maxcontextlength setting, editable in /config.
  • Rust CLI: Mention skills anywhere in a prompt with /skill-name, with the same caret-based completion popup as @ file mentions.
  • Rust CLI: Accepted /skill and @file completions and pasted images are highlighted in the prompt and edited as a single unit.
  • Rust CLI: Long pastes show as a [Pasted n characters] placeholder, also once sent or rewound; paste the same text again right away to show it in full.
  • Rust CLI: Scrolling to the top of a resumed session or a /resume preview loads its older messages automatically.
  • Rust CLI: the startup banner hint now explains that unsetting VIBE_CLI (or setting it to python) switches to the legacy Python TUI.
  • Documented the VIBE_CLI selector, including the Windows session-variable forms, for running the legacy Python TUI.
  • Publish a source distribution on PyPI again, so Homebrew can build new releases.
  • Rust CLI: Typing a command followed by a space shows its arguments inline (e.g. /loop, /mcp, /rename) until the first argument is typed.
  • Fork an earlier completed response while a session continues generating.
  • A plugin can bundle its own MCP server executable and launch it with a ./ command in its mcp.json.
  • Project-links and teleport support in the VS Code extension: link a local workspace to a Vibe Code Web project and teleport the current conversation to continue it in the browser.
  • While the model provider is unavailable, Vibe shows which retry it is on and counts down to the next attempt.
  • /status shows the active model, provider, and API base.
  • You can now choose the model behind session titles and smart approve with [utility_models] in your config; active pins a feature to the model your session runs.
  • The worktree step of a new session shows what it is doing while it is created, including how many files have been checked out.
  • Xcode setup instructions for using Mistral Vibe as an ACP agent.

Changed
  • workspace/git/worktrees/remove gained additive inspect, force, and deleteBranch params plus branchCreated/holders response fields, so a client can probe a removal before committing to it.
  • A session that starts in a worktree now announces the prepared worktree over session/updated before the session moves, so clients that gate their UI on it can proceed as soon as it exists.
  • Unified backend: a tool set to permission = "never" now denies a sensitive path instead of prompting for it.
  • Packaged vibe, vibe-acp, and vibe-app-server executables now always ship the Unified Runtime; a build that cannot collect it fails instead of producing a legacy-only binary.
  • Vibe now always runs on the Unified Harness by default and exits with an actionable error when the runtime is missing or broken, instead of silently falling back to the legacy engine.
  • Rust CLI: Pasted images show as numbered [Image #N] placeholders instead of their file path.
  • Rust CLI: Several images attached to one message are listed as a tree.
  • Rust CLI: Web search queries and source titles are sanitized, and long source titles wrap aligned under their bullet.
  • hooks.toml hooks on the unified harness receive sessionid, transcriptpath and parentsessionid on stdin again, matching the legacy runtime.
  • Builtin toolinput reaches hooks with the CLI's author-facing argument names, and a pretool rewrite of those names takes effect.
  • A hook's system_message shows as the hook's result line, and a hook that fails to run reports the real reason instead of a generic message.
  • Rust CLI: The /resume picker takes at most 40% of the screen height.
  • Previewing a saved session in the resume picker is much faster.
  • Rust CLI: The command and skill completion menu closes as soon as anything is typed after the command.
  • Rust CLI: Tab-completing a command or skill adds a trailing space, ready for its arguments.
  • A compaction model on a different provider than the active model is now ignored with a warning instead of rejecting the configuration.
  • CLI session titles now describe the whole task, stop changing after a single confirmation pass, and survive resume unchanged
  • Session titles now draw on tool results (fetched PRs, changed files) so terse prompts still get a useful title
  • Session titles are now generated by default for CLI (opt out with sessionlogging.generatetitles = false) and run on the session's own model and provider.
  • Session titles and smart approve now check once whether your deployment serves a small fast model, instead of assuming it from the endpoint's address.
  • Custom and self-hosted Mistral deployments that serve a small model now get fast session titles and a fast smart-approve classifier, rather than falling back to your coding model.
  • Where your deployment serves no small model, session titles and smart approve run on your session's model, which costs more per call; name a cheaper one under [utility_models].
  • New session worktrees check their files out in parallel, roughly halving creation time in large repositories.

Fixed
  • Forked Unified Harness sessions now keep their original cache affinity to improve prompt cache reuse.
  • Forked Unified Harness sessions running in managed worktrees now use independent managed worktrees.
  • Forking a live Unified Harness session preserves its active configuration.
  • Isolated forks no longer inherit or revoke the caller's --trust grant.
  • Worktree sessions now use one configuration update for the displayed, executed, and model-visible working directory.
  • Managed-worktree forks warn when uncommitted source changes remain outside the fork.
  • Smart Approve no longer asks for approval on every command or edit that names a file in a managed worktree under ~/.vibe/worktrees.
  • Smart approve no longer sends every classification to a model name your deployment may not serve, which made it ask for approval on every call.
  • Closing one session no longer stops other sessions sharing the same harness.
  • Plugins cannot claim the reserved subagent or skill namespaces.
  • Auto-update only reports success once the new version is installed, and offers a forced reinstall when a pinned uv install stays on the old version.
  • Teleport no longer fails with "Failed to summarize context" on the experimental harness when the model uses thinking.
  • Rust CLI: Show microphone-access guidance when voice recordings capture no audio.
  • Rust CLI: Dictated text is inserted at the caret, and the caret follows it.
  • Rust CLI: Markdown horizontal rules, strikethrough, task lists, images, and hard line breaks now render with Textual parity.
  • Rust CLI: Enable clipboard copying over SSH on Windows.
  • Rust CLI: Keep keyboard input working after an empty piped prompt.
  • Rust CLI: Clean up Windows app-server child processes on exit.
  • Rust CLI: Avoid unsupported suspension hints on Windows.
  • Rust CLI: /clear shows the previous session id and how to resume it.
  • Rust CLI: tool calls separated only by an answered approval or a background notice now stay in the same folded block instead of opening a new one.
  • Rust CLI: Expanding a tool result or group scrolls it into view, and expanding or collapsing keeps the clicked header in place.
  • Rust CLI: Ctrl+O keeps the view on the same content instead of jumping to earlier messages.
  • Telemetry now labels background calls (session titles, worktree names, smart-approve checks) with their own call type, so they no longer count as regular model calls.
  • Unified harness turns report legacy turn error codes again (rate-limited, incomplete-stream, refused-key), so auto-retry and the /retry hint work; request telemetry carries attachment counts again.
  • A background start asks before running, honors the shell's allowlist and denylist, and remembers your approval for later starts; a start that sets its own environment or working directory always asks.
  • Reading a background process's output or the process list no longer prompts, writing to one asks for that process only in the current session, and stopping one never prompts.
  • Unified backend: a file tool set to permission = "never" with an allowlist now writes where the allowlist permits, instead of refusing everything
  • Unified backend: the plan agent can write its plan file again
  • Rust CLI: The interactive question free-text input now shares the composer keybindings (Ctrl+A, Ctrl+E, Ctrl+U, Ctrl+K, word navigation, Home/End, Delete).
  • Rust CLI: Ctrl+D respects askconfirmationon_exit, and the quit hint names the pressed key and warns about queued messages.
  • Rust CLI: Saving an edit to a queued prompt now leaves queue selection mode, so Enter steers the running turn instead of reopening the editor.
  • Rust CLI: Inline code inside a Markdown link label now opens the link when clicked.
  • Rust CLI: Hovering a wrapped link highlights every row of it.
  • Restored the subagents list and transcripts after resuming a session.
  • Rust CLI: Pasted tabs and zero-width characters no longer leave undeletable ghost characters in the chat input.
  • Rust CLI: Tabs in submitted prompts now show in the transcript instead of disappearing.
  • Rust CLI: Scripts like Khmer no longer shift the rest of the row or break the scrollbar.
  • Rust CLI: Wrapped lines of a user message now align with the start of its text instead of the prompt marker.
  • Rewind in the Rust CLI now offers to restore files changed since the chosen message, and restores them.
  • Rust CLI: Refreshing /mcp also reloads workspace connectors and no longer piles up requests or floods the transcript with errors.
  • Refreshing /mcp still re-discovers MCP servers when workspace connectors fail to load.
  • Rust CLI: Rejected /mcp toggles roll back only their own row with a warning, enabling no longer shows a status early, and plugin servers cannot be toggled.
  • Rust CLI: /mcp <name> on a server that needs auth opens its login instead of an empty panel.
  • Rust CLI: A viewed /mcp source that starts needing auth opens its login instead of an empty panel.
  • Rust CLI: After an MCP login, the login panel shows Connecting... until /mcp reopens instead of going blank.
  • /mcp no longer offers Connect on a source whose bootstrap failed.
  • /mcp reports when connectors fail to load instead of saying nothing is configured.
  • Rust CLI: Multi-line /mcp errors keep their line breaks instead of running together.
  • Refreshing a connector after signing in no longer resets token stats and skill completions.
  • Toggling a connector in /mcp no longer fails once the connector cache is over ten minutes old.
  • /mcp shows tools disabled by the global disabledtools/enabledtools patterns as disabled.
  • Plugin MCP servers show their session connection status and prompt for login when needed.
  • Rust CLI: Starting a background process no longer flashes the full command in the loading spinner.
  • Rust CLI: Pasting an image path into a ! shell command keeps the raw path.
  • Rust CLI: Resumed sessions show each attached image under the name its prompt gave it, and clicking it opens the image.
  • Rust CLI: Scrolling no longer lags when an expanded tool group holds large tool outputs.
  • Manual ! shell commands stay in the transcript after an app-server restart or session resume on the experimental harness.
  • Resuming a session imported from an older Vibe version no longer fails when its transcript carries embedded resource blocks.
  • Rust CLI: Esc closes the open todo panel instead of rejecting a pending tool approval or question.
  • Rust CLI: Web search and URL fetch results from the Unified harness render as readable sources and page text instead of raw JSON.
  • Rust CLI: Web fetch and web search results trim blank edges and only make http(s) sources clickable, matching the Python CLI.
  • Resumed Unified Harness sessions report older history, so clients can page past the latest 200 messages.
  • Rust CLI: A malformed older-history reply warns about the failed load instead of silently ending paging.
  • Update checks for uv tool installs now respect uv settings such as exclude-newer.
  • Building Vibe from source without Rust now fails early with install instructions
  • Wheel builds missing the bundled Harness Python runtime or Rust CLI now fail loudly instead of shipping a broken package.
  • Rust CLI: Ctrl+C interrupts a running turn or teleport whenever the loading hint offers it.
  • Rust CLI: The loading hint offers Ctrl+C to cancel a queued message whenever that is what Ctrl+C does.
  • Rust CLI: Interrupting a prompt before the server starts its turn now interrupts that turn once it starts.
  • Rust CLI: Ctrl+C rejects a pending tool approval or cancels an open question, as Esc does.
  • Rust CLI: Ctrl+C exits on the first press after the app server crashes, as its notice says.
  • Rust CLI: Pasting or dropping several files from Finder inserts one image placeholder or @ mention per file.
  • Rust CLI: Ctrl+V and /paste-image insert the images copied in Finder instead of their icon.
  • Rust CLI: Image pastes are accepted when the backend can describe images for a text-only model.
  • Rust CLI: A message holding the same image file twice is sent instead of failing to enqueue.
  • Rust CLI: Pasted clipboard images are saved as vibe-pasted-images/clipboard-<timestamp>.png, like the Python CLI.
  • Rust CLI: A rejected prompt shows the server's reason, not only the failing request.
  • Failed connector tool calls now show the underlying cause (e.g. gateway HTTP 404, SSL error) instead of an opaque TaskGroup error.
  • Rust CLI: Clicking a tool call group header no longer flashes a text selection before toggling.
  • Opening a session over ACP now reports the app-server's field-level error detail (e.g. which transcript field failed validation) instead of the bare 'Invalid request parameters' protocol code name.
  • Resuming a session no longer fails when its model is on a different provider than the configured compaction model.
  • A session created by a newer Vibe resumes on an older one instead of failing to validate, and keeps the settings that older build cannot read.
  • Overwriting a file shows what changed, instead of reading as a newly created file.
  • Resuming a session whose transcript holds an @-mention no longer fails on embedded resources stored without a kind tag.
  • Preserve pending permission prompts and running status when reconnecting to a chat.
  • Teleport now resolves git at the session's workspace instead of the agent process's cwd, fixing 'requires a git repository' errors on eligible projects.
  • Rust CLI: Edit and write tool results start collapsed and expand or collapse on click.
  • Rust CLI: Expanded edit results show their diff again.
  • Turns no longer crash with "Completed public history entry is frozen" when a backend reuses tool call ids.
  • A new worktree session accepts its first message right away instead of after the worktree is created.

Added
  • Rust CLI: support for configuring Vibe Code remote projects
  • Clean up managed worktrees after archiving local sessions
  • Archive local sessions so they can be hidden from active session lists
  • Vibe Desktop now shows unseen indicators for local Code sessions that need attention or finish a turn
  • Rust CLI: the live todo plan pins above the input, and Cmd+\ opens the full plan in a right sidebar.

Fixed
  • MCP servers declared by a plugin now start, so the tools they carry are callable in the session
  • Rust CLI: Support sessionless MCP server add and remove commands from the shell.
  • Rust CLI: File completions respect the caret, preserve surrounding text, and allow directory descent.
  • Rust CLI: Filter MCP servers and connectors with / in the MCP browser.
  • Text selection, copying, and scrolling in trusted-folder prompts.
  • Rust CLI no longer renders raw ANSI escape codes from tool output as garbled text.
  • Rust CLI: Pasting into an interactive question now lands in the free-text answer box instead of the composer.
  • Rust CLI: Selecting transcript text while an interactive question is open now highlights and copies it.
  • Rust CLI: The question text, its options and the waiting row are now selectable with the mouse while a question is open; the option prefix (cursor, numbering, checkbox) is never selected or copied.
  • Rust CLI: Releasing a selection while a question is open now flashes the Copied inline notice, and only when autocopy is enabled.
  • Rust CLI: Selecting text while a question without the free-text row (hideOther) is open now anchors from every box row instead of none.
  • Rust CLI config editor now clearly identifies each setting's source and save layer
  • Rust CLI config editor keeps the caret visible at exact-width line endings
  • /leanstall and /unleanstall now work on the unified backend instead of failing
  • /leanstall and /unleanstall no longer crash the TUI on the unified backend
  • Uninstalling the agent the session is running switches it back to the default agent on the unified backend
  • Rust CLI exits cleanly when its terminal disconnects.
  • Rust CLI: toast text can be selected and copied without dismissing the toast
  • Rust CLI: preserves transcript ordering when session snapshots arrive
  • Rust CLI: the what's-new banner is dismissed by the first prompt instead of staying pinned at the bottom
  • Org-enforced configuration now applies when a Unified Harness session opens
  • Enforced allowed-model policies now match canonical model names
  • Show model-policy warnings when enforced configuration arrives at startup
  • Reject enforced model policies that match no configured models
  • Unified Harness: subagents defined in ~/.vibe/agents or .vibe/agents can be spawned again
  • Unified Harness: an agent that names its own systempromptid runs on that prompt instead of the default
  • An agent file the harness cannot honor is reported instead of disappearing silently
  • Switching to an agent before the first message now applies its prompt, not just its tools
  • Relative path allowlists no longer authorize files just because the path ends with the same suffix.
  • Shell command wildcards no longer skip outside-workdir path checks.
  • Legacy parent-folder grants no longer cover nested descendants, so some outside-workdir accesses may ask for approval again.
  • On macOS 26 and later, the native harness no longer fails to load with a 'mis-aligned LINKEDIT string pool' error.
  • MCP OAuth login no longer fails after the browser callback on servers that issue a client secret (e.g. Supabase)
  • Abandoned MCP OAuth logins now time out and release the loopback callback port instead of blocking later logins until exit
  • Outside-workdir approvals now apply to the referenced file or, for a folder, its full tree.
  • Scrolling the Rust CLI transcript no longer stutters on long sessions with large edit diffs or file bodies.
  • The todo list now updates while the agent is running a run_typescript program, instead of staying frozen until the program finishes.
  • Unified Harness: restore lazy injection of subdirectory AGENTS.md docs on read_file, matching the legacy harness

Fixed
  • Allow /teleport with Vibe and workspace API keys, including free accounts, without an internal feature gate.
  • Explain which API keys to use when teleport rejects a Codestral key.
  • Warn when managed configuration contains removed Vibe Code settings.
  • On Windows, opening a session that is already open in another process reports 'Session is already open' instead of a raw permission error.
  • On Windows, idle-session cleanup no longer mistakes a session held by another process for an idle one.
  • Automatic project context no longer runs repository-configured Git clean or process filters.

Added
  • Subagent conversation history is readable through the owning parent session
  • Configurable live subagent status and read-only transcript switching from the interactive prompt
  • --experimental-harness sessions can track todos, shown as a pinned line under the input and in full on /todo, and keep a per-session scratchpad whose notes are re-stated to the agent after the conversation is summarised.
  • Turn an installed skill on or off from the /skills browser without removing it.
  • Skill authors can mark skills as explicit-only, keeping slash invocation available while preventing model-initiated loading.
  • vibe mcp add --allow-insecure-http and /mcp add --allow-insecure-http opt into plaintext http:// MCP servers on non-localhost hosts, such as a server on the LAN.
  • Tool telemetry events now carry approval_source (config/smart/user/bypass/never) to distinguish how a tool call was authorized.
  • Press r in the MCP servers & connectors panel to refresh the list on demand.
  • Connectors view now links to Studio to add more connectors, pre-scoped to your org and workspace.
  • Local app-server sessions now persist and expose their latest accepted user interaction timestamp for downstream session resources.
  • Unified Harness app-server sessions can now be pinned, and remember it across restarts.
  • Scheduled loops (/loop) are now available in the Vibe VS Code extension with a panel UI for creating, listing, editing, and canceling recurring prompts.
  • Vulnerability disclosure guidance and private reporting instructions in SECURITY.md.
  • /teleport now works under --experimental-harness

Changed
  • The Unified Harness is no longer labeled "experimental"; --legacy-harness is the documented escape hatch back to the legacy Python harness.
  • Sessions with OAuth MCP servers configured start faster: fewer and overlapping keychain reads.
  • Approving a shell command with a variable expansion now covers the next call that differs only in the expansion.
  • Switched the audio engine to miniaudio to improve stability and performance of voice recording and playback
  • Connectors are listed and titled by their display name, falling back to the connector name.
  • Removed the local Cargo build job cap that limited editable builds to 2 jobs, restoring full parallelism for local harness builds.
  • Admin-managed config now enforces the individual keys it sets inside sessionlogging, projectcontext and experiments, rather than the whole group. Keys an admin does not set are taken from the user's own config instead of being reset to defaults.
  • A model change requested while a turn is running is now accepted and applied at the next turn boundary, instead of being rejected.
  • The Vibe CLI now sends a dedicated MistralAI-VibeCLI/<version> User-Agent header on MCP HTTP requests, letting the connectors gateway distinguish Vibe CLI tool calls from other MCP clients.

Fixed
  • Images attached to text-only models now fall back to file links instead of failing the turn.
  • Worktree sessions now tell the agent about the worktree working directory instead of the original checkout.
  • Subagents no longer prompt for tool permission when the parent session is in auto-approve mode under the Unified Harness
  • Workspace trust decisions over ACP now require a session and can only target its working directory.
  • The experimental unified harness can now record the IDE's workspace trust decision.
  • Keep skills with invalid invocation policy metadata explicit-only instead of exposing them to the model.
  • Creating or cleaning up a worktree no longer runs the repository's own git hooks (such as post-checkout) or its fsmonitor command.
  • Show retrying status during transient provider failures.
  • Cancelling a turn no longer hangs when the interrupt wedges server-side, and an interrupt that is taking unusually long now warns with the force-quit hint instead of leaving you staring at a silent "Interrupting" spinner.
  • Message sending after resuming pre-existing sessions that use connectors
  • Attaching an image from outside the workspace (e.g. ~/Downloads) in a fresh session no longer fails with 'Image file is outside the workspace or session attachments'.
  • Existing session logs are restricted to owner-only permissions when Vibe starts.
  • Vibe's home directory and the logs inside it are now accessible only to the current user.
  • Tool telemetry events now carry the actual approval decision (execute/skip) and approval type (always/never/ask) instead of always None.
  • MCP and connector tool calls now respect the permission system: they honor each tool's configured permission, ask before running by default, and remember your approval for later calls.
  • The enabledtools and disabledtools config globs now apply to MCP tools, not just connector tools.
  • session_logging.enabled = false is honoured again on the Unified Harness: the conversation and its attachments no longer land in the session save directory, the session log summary reports that logging is off, and --continue/--resume are refused with the same message the legacy backend gives.
  • Hooks now run inside subagents on the experimental harness, instead of being silently skipped.
  • pretool and posttool hooks now run for the skill tool, which previously took no hooks at all.
  • Hook commands using pipes, &&, redirects, globs or $VAR now run through the shell.
  • A hook's match now matches the tool the model actually calls, including edit and MCP tools.
  • Unified Harness now injects the current git branch, status, and recent commits into the system instructions, matching the legacy backend
  • Shell approvals no longer widen to cover a different program, subcommand, custom shell, or environment.
  • Shell approvals no longer cover side-effecting options that the command's guardrails gate.
  • Approving a guardrailed command whose argument the shell could not read no longer approves the same command with a different one.
  • A shell call that can only be approved as written -- a redirect, a heredoc, a command the shell could not read -- is no longer covered by a wider approval for the same program.
  • A permanent approval a tool's allowlist cannot express is kept to the session instead of written there, and now says which scopes it kept.
  • Saving a setting while another part of Vibe reads the same config file no longer fails the request
  • Starting a turn after an enqueued first message no longer fails while a worktree is being prepared.
  • Agent and experiment updates no longer conflict with a worktree setup turn the UI already shows as running.
  • Stopping a worktree setup turn now runs the next queued message.
  • A dropped first-turn response no longer blocks later turns while a worktree is being prepared.
  • A dropped stop response no longer leaves a worktree setup turn stuck.
  • Creating a loop via /loop no longer fails with an opaque "Internal error"; app-server errors are now surfaced with their actual message.
  • /mcp login now recovers when a stored OAuth token refresh fails transiently (e.g. the server returns 5xx); it discards the stuck credentials and retries a fresh authorization instead of failing every retry.
  • Shell commands using line continuations now require approval.
  • sort --files0-from now requires approval before reading listed files.
  • Teleport no longer runs repository-configured external diff or text conversion helpers when preparing diffs.
  • Teleport no longer runs repository-configured file-monitor hooks when preparing diffs.
  • WebFetch now requires separate approval before following redirects to another origin.
  • Vibe no longer runs a project-local Git executable during automatic repository inspection.
  • Config layers now merge key by key, so setting one nested value through an environment variable or a project file no longer discards the rest of that group.
  • Reopening a session now restores the model that was picked last, not the one the last turn started with.
  • Changing the model in the CLI no longer stops the session's live display.
  • Smart approve now asks you to confirm a risky action you requested, instead of blocking it repeatedly and giving up.
  • Commands that discard output, such as ls 2>&1 or make >/dev/null, no longer ask for approval. Redirections that write to a file still do.
  • Smart approve no longer asks you to confirm deleting a file the agent created earlier in the same session.
  • Smart approve no longer prompts when a tool only reads .vibe/ or .git/ configuration; it still asks before writing one.
  • Smart approve no longer overrides your permission rules: a command your rules had already gated is no longer auto-approved.
  • Smart approve now reclassifies each risky call instead of reusing an earlier decision, so revising your instructions mid-session takes effect immediately.
  • Keep a subagent's initial instruction visible after long transcripts
  • Crash when the subagent list updates while a row is highlighted
  • Escape now returns from a subagent transcript to the main conversation
  • Quit confirmation no longer leaks after leaving a subagent transcript
  • Clearing or resuming no longer races subagent transcript refreshes
  • Resumed sessions and tool approvals no longer stall when notifications arrive
  • Providers configured without an API key environment variable — local or self-hosted model servers — run again on the Unified Harness instead of failing every turn with a missing MISTRALAPIKEY error.
  • A provider error on the Unified Harness shows the provider's own explanation again, such as "model is overloaded" or "context length exceeded", instead of only the HTTP status line and the request URL.
  • Queueing a message on a Unified session no longer risks killing the app server when the queue change arrives on a session state update.
  • Opening a session and loading the session list are much faster on machines with many linked checkouts: reads no longer resolve plugins, MCP servers and connectors they never use, and Desktop asks for a project's sessions in one request instead of one per checkout.

Installation

curl -LsSf https://mistral.ai/vibe/install.sh | bash
pip install mistral-vibe
uv tool install mistral-vibe
$ tail ./comments.log

Comments (1)

Login with GitHub to post a comment
VladoIvankovic
$ user VladoIvankovic
Top 🚀