Skip to main content

Minimal CLI coding agent by Mistral

Project description

Mistral Vibe

PyPI Version Python Version CI Status License

██████████████████░░
██████████████████░░
████  ██████  ████░░
████    ██    ████░░
████          ████░░
████  ██  ██  ████░░
██      ██      ██░░
██████████████████░░
██████████████████░░

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.

One-line install (recommended)

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.

Using uv

uv tool install mistral-vibe

Using pip

pip install mistral-vibe

Table of Contents

Features

  • Interactive Chat: A conversational AI agent that understands your requests and breaks down complex tasks.
  • Powerful Toolset: A suite of tools for file manipulation, code searching, version control, and command execution, right from the chat prompt.
    • Read, write, and patch files (read_file, write_file, search_replace).
    • Execute shell commands in a stateful terminal (bash).
    • Recursively search code with grep (with ripgrep support).
    • Manage a todo list to track the agent's work.
    • Ask interactive questions to gather user input (ask_user_question).
    • Delegate tasks to subagents for parallel work (task).
  • Project-Aware Context: Vibe automatically scans your project's file structure and Git status to provide relevant context to the agent, improving its understanding of your codebase.
  • Advanced CLI Experience: Built with modern libraries for a smooth and efficient workflow.
    • Autocompletion for slash commands (/) and file paths (@).
    • Persistent command history.
    • Beautiful Themes.
  • Highly Configurable: Customize models, providers, tool permissions, and UI preferences through a simple config.toml file.
  • Safety First: Features tool execution approval.
  • Multiple Built-in Agents: Choose from different agent profiles tailored for specific workflows.

Built-in Agents

Vibe comes with several built-in agent profiles, each designed for different use cases:

  • default: Standard agent that requires approval for tool executions. Best for general use.
  • plan: Read-only agent for exploration and planning. Auto-approves safe tools like grep and read_file.
  • accept-edits: Auto-approves file edits only (write_file, search_replace). 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

Subagents and Task Delegation

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 used internally for delegation.

Interactive User Questions

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.

Terminal Requirements

Vibe's interactive interface requires a modern terminal emulator. Recommended terminal emulators include:

  • WezTerm (cross-platform)
  • Alacritty (cross-platform)
  • Ghostty (Linux and macOS)
  • Kitty (Linux and macOS)

Most modern terminals should work, but older or minimal terminal emulators may have display issues.

Quick Start

  1. Navigate to your project's root directory:

    cd /path/to/your/project
    
  2. Run Vibe:

    vibe
    
  3. If this is your first time running Vibe, it will:

    • Create a default configuration file at ~/.vibe/config.toml
    • Prompt you to enter your API key if it's not already configured
    • Save your API key to ~/.vibe/.env for future use

    Alternatively, you can configure your API key separately using vibe --setup.

  4. 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.
    

Usage

Interactive Mode

Simply run vibe to enter the interactive chat loop.

  • Multi-line Input: Press Ctrl+J or Shift+Enter for select terminals to insert a newline.
  • File Paths: Reference files in your prompt using the @ symbol for smart autocompletion (e.g., > Read the file @src/agent.py).
  • Shell Commands: Prefix any command with ! to execute it directly in your shell, bypassing the agent (e.g., > !ls -l).
  • External Editor: Press Ctrl+G to edit your current input in an external editor.
  • Tool Output Toggle: Press Ctrl+O to toggle the tool output view.
  • Todo View Toggle: Press Ctrl+T to toggle the todo list view.
  • Auto-Approve Toggle: Press Shift+Tab to toggle auto-approve mode on/off.

You can start Vibe with a prompt using the following command:

vibe "Refactor the main function in cli/main.py to be more modular."

Note: The --auto-approve flag automatically approves all tool executions without prompting. In interactive mode, you can also toggle auto-approve on/off using Shift+Tab.

Trust Folder System

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.

Programmatic Mode

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 auto-approve mode.

Programmatic Mode Options

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.
  • --enabled-tools TOOL: Enable specific tools. In programmatic mode, this disables all other tools. Can be specified multiple times. Supports exact names, glob patterns (e.g., bash*), or regex with re: prefix (e.g., re:^serena_.*$).
  • --output FORMAT: Set the output format. Options:
    • text (default): Human-readable text output
    • json: All messages as JSON at the end
    • streaming: Newline-delimited JSON per message

Example:

vibe --prompt "Analyze the codebase" --max-turns 5 --max-price 1.0 --output json

Slash Commands

Use slash commands for meta-actions and configuration changes during a session.

Built-in Slash Commands

Vibe provides several built-in slash commands. Use slash commands by typing them in the input box:

> /help

Custom Slash Commands via Skills

You can define your own slash commands through the skills system. Skills are reusable components that extend Vibe's functionality.

To create a custom slash command:

  1. Create a skill directory with a SKILL.md file
  2. Set user-invocable = true in the skill metadata
  3. Define the command logic in your skill

Example skill metadata:

---
name: my-skill
description: My custom skill with slash commands
user-invocable: true
---

Custom slash commands appear in the autocompletion menu alongside built-in commands.

Skills System

Vibe's skills system allows you to extend functionality through reusable components. Skills can add new tools, slash commands, and specialized behaviors.

Vibe follows the Agent Skills specification for skill format and structure.

Creating Skills

Skills are defined in directories with a SKILL.md file containing metadata in YAML frontmatter. For example, ~/.vibe/skills/code-review/SKILL.md:

---
name: code-review
description: Perform automated code reviews
license: MIT
compatibility: Python 3.12+
user-invocable: true
allowed-tools:
  - read_file
  - grep
  - ask_user_question
---

# Code Review Skill

This skill helps analyze code quality and suggest improvements.

Skill Discovery

Vibe discovers skills from multiple locations:

  1. Custom paths: Configured in config.toml via skill_paths
  2. Standard Agent Skills path (project root, trusted folders only): .agents/skills/Agent Skills standard
  3. Local project skills (project root, trusted folders only): .vibe/skills/ in your project
  4. Global skills directory: ~/.vibe/skills/
skill_paths = ["/path/to/custom/skills"]

Managing Skills

Enable or disable skills using patterns in your configuration:

# Enable specific skills
enabled_skills = ["code-review", "test-*"]

# Disable specific skills
disabled_skills = ["experimental-*"]

Skills support the same pattern matching as tools (exact names, glob patterns, and regex).

Configuration

Configuration File Location

Vibe is configured via a config.toml file. It looks for this file first in ./.vibe/config.toml and then falls back to ~/.vibe/config.toml.

API Key Configuration

To use Vibe, you'll need a Mistral API key. You can obtain one by signing up at https://console.mistral.ai.

You can configure your API key using vibe --setup, or through one of the methods below.

Vibe supports multiple ways to configure your API keys:

  1. Interactive Setup (Recommended for first-time users): When you run Vibe for the first time or if your API key is missing, Vibe will prompt you to enter it. The key will be securely saved to ~/.vibe/.env for future sessions.

  2. Environment Variables: Set your API key as an environment variable:

    export MISTRAL_API_KEY="your_mistral_api_key"
    
  3. .env File: Create a .env file in ~/.vibe/ and add your API keys:

    MISTRAL_API_KEY=your_mistral_api_key
    

    Vibe automatically loads API keys from ~/.vibe/.env on startup. Environment variables take precedence over the .env file if both are set.

Note: The .env file is specifically for API keys and other provider credentials. General Vibe configuration should be done in config.toml.

Custom System Prompts

You can create custom system prompts to replace the default one (prompts/cli.md). Create a markdown file in the ~/.vibe/prompts/ directory with your custom prompt content.

To use a custom system prompt, set the system_prompt_id in your configuration to match the filename (without the .md extension):

# Use a custom system prompt
system_prompt_id = "my_custom_prompt"

This will load the prompt from ~/.vibe/prompts/my_custom_prompt.md.

Custom Agent Configurations

You can create custom agent configurations for specific use cases (e.g., red-teaming, specialized tasks) by adding agent-specific TOML files in the ~/.vibe/agents/ directory.

To use a custom agent, run Vibe with the --agent flag:

vibe --agent my_custom_agent

Vibe will look for a file named my_custom_agent.toml in the agents directory and apply its configuration.

Example custom agent configuration (~/.vibe/agents/redteam.toml):

# Custom agent configuration for red-teaming
active_model = "devstral-2"
system_prompt_id = "redteam"

# Disable some tools for this agent
disabled_tools = ["search_replace", "write_file"]

# Override tool permissions for this agent
[tools.bash]
permission = "always"

[tools.read_file]
permission = "always"

Note: This implies that you have set up a redteam prompt named ~/.vibe/prompts/redteam.md.

Tool Management

Enable/Disable Tools with Patterns

You can control which tools are active using enabled_tools and disabled_tools. These fields support exact names, glob patterns, and regular expressions.

Examples:

# Only enable tools that start with "serena_" (glob)
enabled_tools = ["serena_*"]

# Regex (prefix with re:) — matches full tool name (case-insensitive)
enabled_tools = ["re:^serena_.*$"]

# Disable a group with glob; everything else stays enabled
disabled_tools = ["mcp_*", "grep"]

Notes:

  • MCP tool names use underscores, e.g., serena_list not serena.list.
  • Regex patterns are matched against the full tool name using fullmatch.

MCP Server Configuration

You can configure MCP (Model Context Protocol) servers to extend Vibe's capabilities. Add MCP server configurations under the mcp_servers section:

# Example MCP server configurations
[[mcp_servers]]
name = "my_http_server"
transport = "http"
url = "http://localhost:8000"
headers = { "Authorization" = "Bearer my_token" }
api_key_env = "MY_API_KEY_ENV_VAR"
api_key_header = "Authorization"
api_key_format = "Bearer {token}"

[[mcp_servers]]
name = "my_streamable_server"
transport = "streamable-http"
url = "http://localhost:8001"
headers = { "X-API-Key" = "my_api_key" }

[[mcp_servers]]
name = "fetch_server"
transport = "stdio"
command = "uvx"
args = ["mcp-server-fetch"]
env = { "DEBUG" = "1", "LOG_LEVEL" = "info" }

Supported transports:

  • http: Standard HTTP transport
  • streamable-http: HTTP transport with streaming support
  • stdio: Standard input/output transport (for local processes)

Key fields:

  • name: A short alias for the server (used in tool names)
  • transport: The transport type
  • url: Base URL for HTTP transports
  • headers: Additional HTTP headers
  • api_key_env: Environment variable containing the API key
  • command: Command to run for stdio transport
  • args: Additional arguments for stdio transport
  • startup_timeout_sec: Timeout in seconds for the server to start and initialize (default 10s)
  • tool_timeout_sec: Timeout in seconds for tool execution (default 60s)
  • env: Environment variables to set for the MCP server of transport type stdio

MCP tools are named using the pattern {server_name}_{tool_name} and can be configured with permissions like built-in tools:

# Configure permissions for specific MCP tools
[tools.fetch_server_get]
permission = "always"

[tools.my_http_server_query]
permission = "ask"

MCP server configurations support additional features:

  • Environment variables: Set environment variables for MCP servers
  • Custom timeouts: Configure startup and tool execution timeouts

Example with environment variables and timeouts:

[[mcp_servers]]
name = "my_server"
transport = "http"
url = "http://localhost:8000"
env = { "DEBUG" = "1", "LOG_LEVEL" = "info" }
startup_timeout_sec = 15
tool_timeout_sec = 120

Session Management

Session Continuation and Resumption

Vibe supports continuing from previous sessions:

  • --continue or -c: Continue from the most recent saved session
  • --resume SESSION_ID: Resume a specific session by ID (supports partial matching)
# Continue from last session
vibe --continue

# Resume specific session
vibe --resume abc123

Session logging must be enabled in your configuration for these features to work.

Working Directory Control

Use the --workdir option to specify a working directory:

vibe --workdir /path/to/project

This is useful when you want to run Vibe from a different location than your current directory.

Update Settings

Auto-Update

Vibe includes an automatic update feature that keeps your installation current. This is enabled by default.

To disable auto-updates, add this to your config.toml:

enable_auto_update = false

Custom Vibe Home Directory

By default, Vibe stores its configuration in ~/.vibe/. You can override this by setting the VIBE_HOME environment variable:

export VIBE_HOME="/path/to/custom/vibe/home"

This affects where Vibe looks for:

  • config.toml - Main configuration
  • .env - API keys
  • agents/ - Custom agent configurations
  • prompts/ - Custom system prompts
  • tools/ - Custom tools
  • logs/ - Session logs

Editors/IDEs

Mistral Vibe can be used in text editors and IDEs that support Agent Client Protocol. See the ACP Setup documentation for setup instructions for various editors and IDEs.

Resources

  • CHANGELOG - See what's new in each version
  • CONTRIBUTING - Guidelines for feature requests, feedback and bug reports

Data collection & usage

Use of Vibe is subject to our Privacy Policy and may include the collection and processing of data related to your use of the service, such as usage data, to operate, maintain, and improve Vibe. You can disable telemetry in your config.toml by setting enable_telemetry = false.

License

Copyright 2025 Mistral AI

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the LICENSE file for the full license text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mistral_vibe-2.2.1.tar.gz (456.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mistral_vibe-2.2.1-py3-none-any.whl (258.3 kB view details)

Uploaded Python 3

File details

Details for the file mistral_vibe-2.2.1.tar.gz.

File metadata

  • Download URL: mistral_vibe-2.2.1.tar.gz
  • Upload date:
  • Size: 456.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mistral_vibe-2.2.1.tar.gz
Algorithm Hash digest
SHA256 a6319171fdd9929bda2e541b2fbee7d6071952e0b40e4c70cb2c694b09c7db6b
MD5 e210382f4767b833fe5c0153149d8241
BLAKE2b-256 0d68c4e0361fe62d65bef06016375393e8d61da5fd7e6ea39d07fc9d855ce6a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistral_vibe-2.2.1.tar.gz:

Publisher: release.yml on mistralai/mistral-vibe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mistral_vibe-2.2.1-py3-none-any.whl.

File metadata

  • Download URL: mistral_vibe-2.2.1-py3-none-any.whl
  • Upload date:
  • Size: 258.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mistral_vibe-2.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 533408931b1cd54e6321d18ef0a69ec071c8ae26e62df4214ff66684de7e5a98
MD5 7f838dc9ab0bb759f7849a57d90056c9
BLAKE2b-256 fb7728f1b14eb17a817254593bc7e2219d5ac5b39598470f40c12b10e4b55586

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistral_vibe-2.2.1-py3-none-any.whl:

Publisher: release.yml on mistralai/mistral-vibe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page