Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai> Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-authored-by: Lucas Marandat <31749711+lucasmrdt@users.noreply.github.com> Co-authored-by: Michel Thomazo <51709227+michelTho@users.noreply.github.com> Co-authored-by: Paul Cacheux <paul.cacheux@mistral.ai> Co-authored-by: Peter Evers <pevers90@gmail.com> Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai> Co-authored-by: Pierre Rossinès <pierre.rossines@protonmail.com> Co-authored-by: Quentin <quentin.torroba@mistral.ai> Co-authored-by: Simon Van de Kerckhove <simon.vandekerckhove@mistral.ai> Co-authored-by: Val <102326092+vdeva@users.noreply.github.com> Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com> Co-authored-by: Mistral Vibe <vibe@mistral.ai>
5.4 KiB
Contributing to Mistral Vibe
Thank you for your interest in Mistral Vibe! We appreciate your enthusiasm and support.
Current Status
Mistral Vibe is in active development — our team is iterating quickly and making lots of changes under the hood. Because of this pace, we may be slower than usual when reviewing PRs and issues.
We especially encourage:
- Bug reports – Help us uncover and squash issues
- Feedback & ideas – Tell us what works, what doesn't, and what could be even better
- Documentation improvements – Suggest clarity improvements or highlight missing pieces
How to Provide Feedback
Bug Reports
If you encounter a bug, please open an issue with the following information:
- Description: A clear description of the bug
- Steps to Reproduce: Detailed steps to reproduce the issue
- Expected Behavior: What you expected to happen
- Actual Behavior: What actually happened
- Environment:
- Python version
- Operating system
- Vibe version
- Error Messages: Any error messages or stack traces
- Configuration: Relevant parts of your
config.toml(redact any sensitive information)
Feature Requests and Feedback
We'd love to hear your ideas! When submitting feedback or feature request discussions:
- Avoid duplicates: Check opened discussions before creating a new one
- Clear Description: Explain what you'd like to see or improve
- Use Case: Describe your use case and why this would be valuable
- Alternatives: If applicable, mention any alternatives you've considered
Development Setup
This section is for developers who want to set up the repository for local development, even though we're not currently accepting contributions.
Prerequisites
- Python 3.12 or higher
- uv - Modern Python package manager
Setup
-
Clone the repository:
git clone <repository-url> cd mistral-vibe -
Install dependencies:
uv sync --all-extrasThis will install both runtime and development dependencies.
-
(Optional) Install pre-commit hooks:
uv run pre-commit installPre-commit hooks will automatically run checks before each commit.
Logging Configuration
Logs are written to ~/.vibe/logs/vibe.log by default. Control logging via environment variables:
| Variable | Description | Default |
|---|---|---|
LOG_LEVEL |
Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
WARNING |
LOG_MAX_BYTES |
Max log file size in bytes before rotation | 10485760 (10 MB) |
DEBUG_MODE |
When true, forces DEBUG level |
- |
Example:
LOG_LEVEL=DEBUG uv run vibe
You can also view logs in real-time within the application by pressing Ctrl+\ to open the debug console.
Running Tests
Run all tests:
uv run pytest
Run tests with verbose output:
uv run pytest -v
Run a specific test file:
uv run pytest tests/test_agent_tool_call.py
Profiling
Vibe ships a lightweight profiler module (vibe.cli.profiler) that wraps pyinstrument. It silently no-ops when pyinstrument is not installed or the VIBE_PROFILE env var is unset, so instrumentation can stay in the code with zero overhead in normal use.
1. Add profiling calls around the code you want to measure:
from vibe.cli import profiler
profiler.start("startup")
# ... code to measure ...
profiler.stop_and_print()
Only one profiler can run at a time. The label passed to start() is used to name the output file. Each call to stop_and_print writes an HTML report (<label>-profile.html) and prints a text summary to stderr.
2. Run with profiling enabled:
VIBE_PROFILE=1 uv run vibe
Without VIBE_PROFILE=1, all start / stop_and_print calls are no-ops.
Linting and Type Checking
Ruff (Linting and Formatting)
Check for linting issues (without fixing):
uv run ruff check .
Auto-fix linting issues:
uv run ruff check --fix .
Format code:
uv run ruff format .
Check formatting without modifying files (useful for CI):
uv run ruff format --check .
Pyright (Type Checking)
Run type checking:
uv run pyright
Pre-commit Hooks
Run all pre-commit hooks manually:
uv run pre-commit run --all-files
The pre-commit hooks include:
- Ruff (linting and formatting)
- Pyright (type checking)
- Typos (spell checking)
- YAML/TOML validation
- Action validator (for GitHub Actions)
Code Style
- Line length: 88 characters (Black-compatible)
- Type hints: Required for all functions and methods
- Docstrings: Follow Google-style docstrings
- Formatting: Use Ruff for both linting and formatting
- Type checking: Use Pyright (configured in
pyproject.toml)
See pyproject.toml for detailed configuration of Ruff and Pyright.
Code Contributions
While we're not accepting code contributions at the moment, we may open up contributions in the future. When that happens, we'll update this document with:
- Pull request process
- Contribution guidelines
- Review process
Questions?
If you have questions about using Mistral Vibe, please check the README first. For other inquiries, feel free to open a discussion or issue.
Thank you for helping make Mistral Vibe better! 🙏