Minimal CLI coding agent by Mistral
██████████████████░░
██████████████████░░
████ ██████ ████░░
████ ██ ████░░
████ ████░░
████ ██ ██ ████░░
██ ██ ██░░
██████████████████░░
██████████████████░░
Mistral's open-source CLI coding assistant.
Mistral Vibe is a command-line coding assistant powered by Mistral's models. It provides a conversational interface to your codebase, allowing you to use natural language to explore, modify, and interact with your projects through a powerful set of tools.
[!WARNING] Mistral Vibe works on Windows, but we officially support and target UNIX environments.
Linux and macOS
curl -LsSf https://mistral.ai/vibe/install.sh | bash
Windows
First, install uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Then, use uv command below.
uv tool install mistral-vibe
pip install mistral-vibe
read, write_file, edit).grep (with ripgrep support).todo list to track the agent's work.ask_user_question).task)./) and file paths (@).@ mentions — .png, .jpg, .jpeg, .gif, .webp files are sent to vision-capable models (e.g. Mistral Medium 3.5) as native multimodal content.config.toml file.Vibe comes with several built-in agent profiles, each designed for different use cases:
ask: Requires approval for tool executions.plan: Read-only agent for exploration and planning. Auto-approves safe tools like grep and read.accept-edits: The default agent. Auto-approves file edits only (write_file, edit). Useful for code refactoring.auto-approve: Auto-approves all tool executions. Use with caution.Use the --agent flag to select a different agent:
vibe --agent plan
To change the default agent used when --agent is not passed, set
default_agent in your config.toml:
default_agent = "plan"
Valid values are ask, plan, accept-edits, auto-approve,
lean (only when listed in installed_agents), or the name of any
custom agent file in ~/.vibe/agents/ or the project's .vibe/agents/
directory. Subagents such as explore are not accepted.
Note:
default_agentapplies in both interactive and programmatic (-p/--prompt) sessions. Pass--auto-approveor--yolowith any agent when a run should approve all tool calls without prompting.
Vibe supports subagents for delegating tasks. Subagents run independently and can perform specialized work without user interaction, preventing the context from being overloaded.
The task tool allows the agent to delegate work to subagents:
> Can you explore the codebase structure while I work on something else?
I'll use the task tool to delegate this to the explore subagent.
> task(task="Analyze the project structure and architecture", agent="explore")
Create custom subagents by adding agent_type = "subagent" to your agent configuration. Vibe comes with a built-in subagent called explore, a read-only subagent for codebase exploration and skill loading used internally for delegation.
The ask_user_question tool allows the agent to ask you clarifying questions during its work. This enables more interactive and collaborative workflows.
> Can you help me refactor this function?
I need to understand your requirements better before proceeding.
> ask_user_question(questions=[{
"question": "What's the main goal of this refactoring?",
"options": [
{"label": "Performance", "description": "Make it run faster"},
{"label": "Readability", "description": "Make it easier to understand"},
{"label": "Maintainability", "description": "Make it easier to modify"}
]
}])
The agent can ask multiple questions at once, displayed as tabs. Each question supports 2-4 options plus an automatic "Other" option for free text responses.
Vibe's interactive interface requires a modern terminal emulator. Recommended terminal emulators include:
Most modern terminals should work, but older or minimal terminal emulators may have display issues.
Navigate to your project's root directory:
cd /path/to/your/project
Run Vibe:
vibe
If this is your first time running Vibe, it will:
~/.vibe/.env for future useAlternatively, you can configure your API key separately using vibe --setup.
Start interacting with the agent!
> Can you find all instances of the word "TODO" in the project?
The user wants to find all instances of "TODO". The `grep` tool is perfect for this. I will use it to search the current directory.
> grep(pattern="TODO", path=".")
... (grep tool output) ...
I found the following "TODO" comments in your project.
Simply run vibe to enter the interactive chat loop.
Ctrl+J or Shift+Enter for select terminals to insert a newline.@ symbol for smart autocompletion (e.g., > Read the file @src/agent.py). A bare @ quickly lists immediate non-hidden entries; after a path character, Git workspaces suggest tracked and non-ignored files. Pasting a standalone existing absolute or home-relative file or folder also creates a mention.! to execute it directly in your shell, bypassing the agent (e.g., > !ls -l).Ctrl+G to edit your current input in an external editor.Ctrl+O to toggle the tool output view.Ctrl+T to toggle the todo list view.Ctrl+\ to toggle the debug console.Shift+Tab to cycle through agents (ask, plan, ...).Enter or Ctrl+Enter steers the queued prompts into the active turn; on Unified Harness sessions, this atomically consumes the stored queue item. Ctrl+C removes the newest queued prompt. Escape interrupts the active turn and pauses remaining prompts, and Enter resumes a paused queue. Shell commands and non-side-channel slash commands require an idle session./exit, exit, quit, :q, or :quit in the input box, or press Ctrl+C / Ctrl+D twice within ~1 second. Set ask_confirmation_on_exit = false (or toggle it in /config) to make Ctrl+D quit on the first press; Ctrl+C always requires confirmation.Ctrl+Y or Ctrl+Shift+C to copy the current selection to clipboard. With autocopy enabled (default via autocopy_to_clipboard = true), mouse selection automatically copies on release and shows a brief confirmation.You can start Vibe with a prompt using the following command:
vibe "Refactor the main function in cli/main.py to be more modular."
Vibe includes a trust folder system to ensure you only run the agent in directories you trust. When you first run Vibe in a new directory which contains a .vibe subfolder, it may ask you to confirm whether you trust the folder.
Trusted folders are remembered for future sessions. You can manage trusted folders through its configuration file ~/.vibe/trusted_folders.toml.
This safety feature helps prevent accidental execution in sensitive directories.
You can run Vibe non-interactively by piping input or using the --prompt flag. This is useful for scripting.
vibe --prompt "Refactor the main function in cli/main.py to be more modular."
By default, it uses your configured default_agent (accept-edits unless changed).
To approve all tool calls without prompting, pass --auto-approve or --yolo
(also available for interactive sessions):
vibe --prompt "Refactor the main function in cli/main.py to be more modular." --auto-approve
When using --prompt, you can specify additional options:
--max-turns N: Limit the maximum number of assistant turns. The session will stop after N turns.--max-price DOLLARS: Set a maximum cost limit in dollars. The session will be interrupted if the cost exceeds this limit.--max-tokens N: Set a maximum cumulative LLM token budget for the session, counting both prompt and completion tokens. The session will be interrupted if usage exceeds this limit.--agent NAME: SeNo open issues yet, or sync has not completed.