Skip to main content
Lesson 4 of 16 · Mistral Vibe: AI Coding CLI

Key Features of Vibe

Lesson 4 of 16 Updated November 2, 2026 Developer
On this page
  1. Built-in Tools
  2. Automatic Context
  3. Autocompletion
  4. Persistent History
  5. Approval Modes and Security
  6. Key Takeaways

Lesson updated November 2, 2026 based on Vibe Code documentation: the legacy Default, Plan, and Auto approve modes have been replaced by the ask, accept-edits (default), smart-approve, and auto-approve agents. Source: Safety, approvals, and permissions.

Built-in Tools

Vibe isn’t just a chatbot; it’s an agent equipped with concrete tools it can call to interact with your codebase. Each tool has a specific role and can be invoked automatically based on the context of your request. You don’t need to trigger anything manually: the model decides, based on your prompt, that it needs to read a file first and then run a search.

File Operations

The file toolset forms the core of Vibe. Three tools share the workload:

ToolRole
read_fileRead a file’s content before proposing any modifications
write_fileWrite or create a complete file, or rewrite an existing one entirely
editPerform a targeted replacement within a file (formerly search_replace)

The distinction between the last two is critical in practice. edit is the most commonly used because it replaces exactly the relevant block without touching the rest: on a thousand-line file where you’re fixing a condition, it touches only that condition. write_file rewrites everything, which works for creating a file but risks content loss on large existing files.

Shell Command Execution

Vibe includes a stateful bash terminal: environment variables, the current directory, and the shell state persist between commands. If the agent runs cd and then exports a variable, the next command inherits it, allowing it to chain a realistic workflow.

# Examples of actions Vibe can execute
npm run test                    # Run tests
git status                      # Check repository status
pip install requests            # Install a dependency
docker compose up -d            # Start services

With the default agent, every shell command requires your approval, except for a few read-only commands allowed by default (ls, pwd, cat, git status…) and those you add to the bash tool’s allowlist. This is an important safeguard: you see the exact command before it runs.

To find code, Vibe has grep, the classic recursive search, and ripgrep, its ultra-fast version optimized for large codebases. The agent automatically chooses the most suitable tool. When you ask “Where is the authenticate function defined?”, it runs a recursive search and shows you the results, citing file and line number, rather than guessing.

Task Management

The todo tool maintains a task list during your session. Its value shines on multi-step projects, typically refactoring. For example, ask:

Create a plan to migrate this project from Express to Fastify

Vibe creates a todo list with the steps, then checks them off as it goes. You can see the project’s status at any time by displaying this list with Cmd+\ (macOS) or Alt+\. This also prevents the agent from forgetting half the work after a long conversation.

Automatic Context

One of Vibe’s strengths is its ability to understand your project without you having to explain everything. At every launch, the agent scans the directory tree to identify the structure, configuration files, and important folders; it reads the Git status—active branch, modified files, recent commits; it detects the project type, Node.js, Python, Rust, or Go; and it identifies dependencies via package.json, pyproject.toml, Cargo.toml, or go.mod.

This context is injected automatically into the conversation. Concrete result: your very first message in a Rust project gets a response that talks about Cargo and crates, without you having to specify the language.

Autocompletion

The interface offers two autocompletion systems. The first concerns files: type @ followed by the start of a path to see suggestions appear.

Explain the code in @src/auth/middleware.ts

Vibe will automatically read the referenced file and include it in the context of its response; you can reference multiple files in a single message, which is handy for comparing two implementations. The second system concerns slash commands: type / and browse the options with the arrow keys.

Persistent History

Your conversations are saved automatically. You resume the last session with vibe --continue (or vibe -c), and a specific session by its ID with vibe --resume abc123. The typical use case: you close the terminal at the end of the day in the middle of debugging and pick up the next day without re-explaining the problem. The history is stored locally in ~/.vibe/—your data stays on your machine.

Approval Modes and Security

Control over actions passes through the active agent, which you cycle through with Shift+Tab. ask prompts before every tool: this is the safest, ideal for exploring an unknown repository. accept-edits, the default agent, modifies files in the working directory without asking but consults you before a shell command. smart-approve has a model classify each call and submits only actions deemed risky to you. auto-approve executes everything without confirmation; reserve this for trusted, isolated environments. There is no longer a built-in “Plan” mode: the Advanced Mistral Vibe course shows how to create a read-only planning agent.

This caution extends to the rest of the product, which adopts a conservative approach to security. Vibe asks before acting outside the working directory or touching .env files, and the trusted folders system decides whether project-specific configuration (agents, skills, MCP servers) can be loaded.

Key Takeaways

  • Vibe has 4 categories of tools: files, shell, search, and todo
  • Project context is scanned automatically at every launch (directory tree, Git, dependencies)
  • @ autocompletion for files and / for commands speeds up interactions
  • History is persistent and sessions can be resumed
  • Four approval agents (ask, accept-edits default, smart-approve, auto-approve) set the control level