Add Mistral Vibe support for Agency agents (#658)

* Add Mistral Vibe support for Agency agents

- Add Mistral Vibe entry to tools.json with proper configuration
  (id, label, kebab, format, installKind, dest, detection, version)
- Implement convert_vibe() function in convert.sh for Mistral Vibe's format
  - Generates TOML agent configuration files (~/.vibe/agents/<slug>.toml)
  - Generates markdown prompt files (~/.vibe/prompts/<slug>.md)
  - Each agent gets agent_type and system_prompt_id (no hardcoded active_model)
- Add install_vibe() function in install.sh with full feature support
  - Copies both agent TOML and prompt MD files
  - Supports division/agent filtering and environment variable overrides
  - Uses VIBE_HOME environment variable for custom install paths
- Add Mistral Vibe detection and tool labeling
- Add Mistral Vibe to all necessary case statements and arrays
- Update README.md to document Mistral Vibe support
- All changes validated with scripts/check-tools.sh

Mistral Vibe uses a two-file approach per agent:
- ~/.vibe/agents/<slug>.toml for agent configuration
- ~/.vibe/prompts/<slug>.md for system prompts

Users can specify active_model in their agent TOML files or rely on their
Vibe configuration default model.

Usage: ./scripts/install.sh --tool vibe [--division X] [--agent Y]

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

* Address PR #658 review feedback: add .gitignore, README, and fix icon

- Add integrations/vibe/README.md documenting the Mistral Vibe integration
- Update .gitignore to ignore integrations/vibe/agents/ and prompts/
- Update convert.sh usage() to include vibe in the tool list
- Fix tools.json: change vibe icon from 'mistral' to null (no mistral.svg)
- Bonus: update vibe accent color from #FF69B4 to #FA520F (Mistral brand orange)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

---------

Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Laurent Wandrebeck
2026-07-05 11:21:50 +02:00
committed by GitHub
parent ac0fb2e563
commit 90ae2b27d1
6 changed files with 203 additions and 8 deletions
+39 -3
View File
@@ -22,6 +22,7 @@
# codex — Codex custom agent TOML files (~/.codex/agents/*.toml)
# osaurus — Osaurus skill files (~/.osaurus/skills/<name>/SKILL.md)
# hermes — Hermes lazy-router plugin (one plugin + on-disk agent index)
# vibe — Mistral Vibe agent TOML + prompt files (~/.vibe/agents/*.toml + ~/.vibe/prompts/*.md)
# all — All tools (default)
#
# Output is written to integrations/<tool>/ relative to the repo root.
@@ -457,6 +458,40 @@ ${body}
HEREDOC
}
convert_vibe() {
local file="$1"
local name description slug outdir agent_file prompt_file body
name="$(get_field "name" "$file")"
description="$(get_field "description" "$file")"
slug="$(slugify "$name")"
body="$(get_body "$file")"
# Mistral Vibe uses two files per agent:
# 1. A TOML configuration file in ~/.vibe/agents/<slug>.toml
# 2. A markdown prompt file in ~/.vibe/prompts/<slug>.md
outdir="$OUT_DIR/vibe"
agent_file="$outdir/agents/${slug}.toml"
prompt_file="$outdir/prompts/${slug}.md"
mkdir -p "$outdir/agents" "$outdir/prompts"
# Write the TOML agent configuration
cat > "$agent_file" <<HEREDOC
agent_type = "agent"
system_prompt_id = "${slug}"
HEREDOC
# Write the markdown prompt file
cat > "$prompt_file" <<HEREDOC
# ${name}
${description}
${body}
HEREDOC
}
# Aider and Windsurf are single-file formats — accumulate into temp files
# then write at the end.
AIDER_TMP="$(mktemp)"
@@ -575,6 +610,7 @@ run_conversions() {
qwen) convert_qwen "$file" ;;
kimi) convert_kimi "$file" ;;
osaurus) convert_osaurus "$file" ;;
vibe) convert_vibe "$file" ;;
aider) accumulate_aider "$file" ;;
windsurf) accumulate_windsurf "$file" ;;
esac
@@ -605,7 +641,7 @@ main() {
esac
done
local valid_tools=("antigravity" "gemini-cli" "opencode" "cursor" "aider" "windsurf" "openclaw" "qwen" "kimi" "codex" "osaurus" "hermes" "all")
local valid_tools=("antigravity" "gemini-cli" "opencode" "cursor" "aider" "windsurf" "openclaw" "qwen" "kimi" "codex" "osaurus" "hermes" "vibe" "all")
local valid=false
for t in "${valid_tools[@]}"; do [[ "$t" == "$tool" ]] && valid=true && break; done
if ! $valid; then
@@ -624,7 +660,7 @@ main() {
local tools_to_run=()
if [[ "$tool" == "all" ]]; then
tools_to_run=("antigravity" "gemini-cli" "opencode" "cursor" "aider" "windsurf" "openclaw" "qwen" "kimi" "codex" "osaurus" "hermes")
tools_to_run=("antigravity" "gemini-cli" "opencode" "cursor" "aider" "windsurf" "openclaw" "qwen" "kimi" "codex" "osaurus" "hermes" "vibe")
else
tools_to_run=("$tool")
fi
@@ -635,7 +671,7 @@ main() {
if $use_parallel && [[ "$tool" == "all" ]]; then
# Tools that write to separate dirs can run in parallel; buffer output so each tool's output stays together
local parallel_tools=(antigravity gemini-cli opencode cursor openclaw qwen codex osaurus hermes)
local parallel_tools=(antigravity gemini-cli opencode cursor openclaw qwen codex osaurus hermes vibe)
local parallel_out_dir
parallel_out_dir="$(mktemp -d)"
info "Converting: ${#parallel_tools[@]}/${n_tools} tools in parallel (output buffered per tool)..."