/vibe-skill
Delegate a coding task to Mistral Vibe and supervise the result via git diff. Trigger: /vibe <instruction>. Claude orchestrates, Vibe codes. Also handles /vibe-report [--since N] [--project NAME] [--fails] — token/cost/failure report.
$ npx -y skills add pcx-wave/vibe-skill --skill vibe-skill --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/vibe-skill
Context preview
The summary Claude sees to decide when to auto-load this skill.
Delegate a coding task to Mistral Vibe and supervise the result via git diff. Trigger: /vibe <instruction>. Claude orchestrates, Vibe codes. Also handles /vibe-report [--since N] [--project NAME] [--fails] — token/cost/failure report.
SKILL.md
vibe-skill.SKILL.mdname: vibe
description: >
Delegate a coding task to Mistral Vibe and supervise the result via git diff.
Trigger: /vibe <instruction>. Claude orchestrates, Vibe codes.
Also handles /vibe-report [--since N] [--project NAME] [--fails] — token/cost/failure report.
license: MIT
user-invocable: true
allowed-tools:
- Bash
- Read
- Grep
Vibe Orchestrator
/vibeon | /vibeoff | /vibestatus
Toggle auto-delegate mode — Vibe automatically handles coding tasks without requiring `/vibe` each time.
| Command | Action | |---------|--------| | `/vibeon` | `touch ~/.local/share/vibe-auto.flag` → confirm "Auto-vibe ON" | | `/vibeoff` | `rm -f ~/.local/share/vibe-auto.flag` → confirm "Auto-vibe OFF" | | `/vibestatus` | report auto-mode (ON/OFF) **and** active model override |
For `/vibestatus`, run both checks and print two lines:
Auto-vibe: ON | OFF
Model: <alias> (override) OR Model: <default from ~/.vibe/config.toml> (config default)
Auto-mode pre-filter (when flag is set)
When `vibe-auto.flag` exists, apply this gate **before** loading the full skill:
| Task signal | Action | |---|---| | 1 file, ≤10 lines, exact location already known | Edit directly — do NOT invoke the skill | | Logic non-trivial, location unclear, multiple files, HTML/JS content, or >1 change | Invoke `/vibe` as normal |
---
/vibe-report
If the user invokes `/vibe-report`, run `~/tools/delegate-report` with any flags extracted from the arguments, display output verbatim, and stop.
| User says | Flag | |-----------|------| | "last 7 days", "7d" | `--since 7` | | "last 30 days", "30d" | `--since 30` | | "project foo" | `--project foo` | | "only failures", "fails", "bugs" | `--fails` | | "adapt", "adaptations", "by adaptation" | `--adapt` | | "all delegates", "everything", "compare delegates" | `--all` | | "delegate foo", "only opencode" | `--delegate foo` | | (nothing) | (no flags — vibe runs only) |
The report defaults to **vibe runs only**. The log is shared across delegate tools (vibe, opencode, gemini); use `--all` for the cross-delegate comparison or `--delegate NAME` to scope to a different one.
---
/vibe-model-pick | /vibe-model-clear
Override the Vibe model for all subsequent delegations without touching `~/.vibe/config.toml`.
| Command | Action | |---------|--------| | `/vibe-model-pick <alias>` | `echo <alias> > ~/.local/share/vibe-model.flag` → confirm | | `/vibe-model-clear` | `rm -f ~/.local/share/vibe-model.flag` → confirm "back to config default" |
**Aliases are machine-specific** — read the actual list (and the default) from `[[model]]` entries in `~/.vibe/config.toml` before suggesting one; never assume an alias from this table exists. Example snapshot from one machine:
| Alias | Model | Provider | Notes | |-------|-------|----------|-------| | `deepseek-flash` | deepseek-v4-flash | DeepSeek | Default — fast, cheap; solid for inline edits | | `mistral-medium-3.5` | mistral-vibe-cli-latest | Mistral | Stronger reasoning; reliable for inline edits | | `devstral-small` | devstral-small-latest | Mistral | Agent-mode — read/explore only, weak at inline edits | | `local` | devstral (llamacpp) | Local | Requires local server on :8080 |
Run the bash command, print one confirmation line showing the active model, and stop.
---
When the user invokes `/vibe <instruction>`, Claude delegates the implementation to Mistral Vibe via its programmatic mode, supervises in real time, and reports.
---
Known Limits
Hard constraints — not config options. Full details in `SKILL-reference.md`.
- **UTF-8 / special chars** → silent `search_replace` match failure. Use `python3 str.replace()` for accented chars or emoji.
- **Code duplication** → Vibe may re-insert a block already written. Grep for duplicate definitions after every run.
- **HTML in prompt** → tags like `<div>` are shell redirects (exit 127). Write HTML content to a temp file; reference the path in the prompt.
- **Source code in bash heredoc** → quotes/backslashes mangle. Use `search_replace` directly; never a helper script that replaces code.
- **`read_file` caps at 50 KiB / 2000 lines** → a larger file comes back as `read_file failed: Output (N KiB) exceeds maximum allowed size`, and Vibe then re-reads it in slices, so it may reason about only *part* of the file without saying so. Keep any file you hand it (diffs, generated inputs) under 50 KiB — split by area rather than dumping one big diff.
- **Files outside the workdir are unreadable** → `--trust` does NOT cover them. Any path outside `workdir` raises an `outside_directory` approval that is auto-denied headlessly: the run exits **0** with 0 tool calls and, before the 2026-08-02 parser fix, said nothing at all. **Any file the prompt points Vibe at must live inside the workdir.** Stage temp inputs in a gitignored dir in the repo, not `/tmp`.
- **Orchestration chain** → 6 failure points in order: CLI auth → pseudo-TTY → stream parser → TOML pricing → git diff → JSON log. When a run produces unexpected results, work down this list. Full details in `SKILL-reference.md`.
---
Step 1 — Detect workdir
1. `git rev-parse --show-toplevel` in the current directory. 2. If ambiguous or no git repo → ask with `AskUserQuestion`.
---
Step 2 — Decompose the task
**Critical rule**: keep tasks **atomic and focused** — one objective, one prompt.
| Size | Definition | Max turns | Approach | |------|-----------|-----------|----------| | **Trivial** | 1 file, change is obvious and located | — | **Skip delegation — edit directly** | | **Simple** | 1 file, non-trivial logic or unknown location | 5–8 | 1 vibe call | | **Medium** | 2–3 related files, 1 objective | 8–12 | 1 structured vibe call | | **Complex** | >3 files OR business logic OR DB migrations | — | **Break into sub-tasks** |
**Decomposition for complex tasks:**
Sub-task 1: Explore / read relevant files (read-only, 5 turns)
Sub-task 2: Implement change A in file X (8 turns)
Sub-task 3: Implement change B i
Read more
name: vibe description: > Delegate a coding task to Mistral Vibe and supervise the result via git diff. Trigger: /vibe <instruction>. Claude orchestrates, Vibe codes. Also handles /vibe-report [--since N] [--project NAME] [--fails] — token/cost/failure report. license: MIT user-invocable: true allowed-tools: - Bash - Read - Grep
Vibe Orchestrator
/vibeon | /vibeoff | /vibestatus
Toggle auto-delegate mode — Vibe automatically handles coding tasks without requiring `/vibe` each time.
| Command | Action | |---------|--------| | `/vibeon` | `touch ~/.local/share/vibe-auto.flag` → confirm "Auto-vibe ON" | | `/vibeoff` | `rm -f ~/.local/share/vibe-auto.flag` → confirm "Auto-vibe OFF" | | `/vibestatus` | report auto-mode (ON/OFF) **and** active model override |
For `/vibestatus`, run both checks and print two lines:
Auto-vibe: ON | OFF Model: <alias> (override) OR Model: <default from ~/.vibe/config.toml> (config default)
Auto-mode pre-filter (when flag is set)
When `vibe-auto.flag` exists, apply this gate **before** loading the full skill:
| Task signal | Action | |---|---| | 1 file, ≤10 lines, exact location already known | Edit directly — do NOT invoke the skill | | Logic non-trivial, location unclear, multiple files, HTML/JS content, or >1 change | Invoke `/vibe` as normal |
---
/vibe-report
If the user invokes `/vibe-report`, run `~/tools/delegate-report` with any flags extracted from the arguments, display output verbatim, and stop.
| User says | Flag | |-----------|------| | "last 7 days", "7d" | `--since 7` | | "last 30 days", "30d" | `--since 30` | | "project foo" | `--project foo` | | "only failures", "fails", "bugs" | `--fails` | | "adapt", "adaptations", "by adaptation" | `--adapt` | | "all delegates", "everything", "compare delegates" | `--all` | | "delegate foo", "only opencode" | `--delegate foo` | | (nothing) | (no flags — vibe runs only) |
The report defaults to **vibe runs only**. The log is shared across delegate tools (vibe, opencode, gemini); use `--all` for the cross-delegate comparison or `--delegate NAME` to scope to a different one.
---
/vibe-model-pick | /vibe-model-clear
Override the Vibe model for all subsequent delegations without touching `~/.vibe/config.toml`.
| Command | Action | |---------|--------| | `/vibe-model-pick <alias>` | `echo <alias> > ~/.local/share/vibe-model.flag` → confirm | | `/vibe-model-clear` | `rm -f ~/.local/share/vibe-model.flag` → confirm "back to config default" |
**Aliases are machine-specific** — read the actual list (and the default) from `[[model]]` entries in `~/.vibe/config.toml` before suggesting one; never assume an alias from this table exists. Example snapshot from one machine:
| Alias | Model | Provider | Notes | |-------|-------|----------|-------| | `deepseek-flash` | deepseek-v4-flash | DeepSeek | Default — fast, cheap; solid for inline edits | | `mistral-medium-3.5` | mistral-vibe-cli-latest | Mistral | Stronger reasoning; reliable for inline edits | | `devstral-small` | devstral-small-latest | Mistral | Agent-mode — read/explore only, weak at inline edits | | `local` | devstral (llamacpp) | Local | Requires local server on :8080 |
Run the bash command, print one confirmation line showing the active model, and stop.
---
When the user invokes `/vibe <instruction>`, Claude delegates the implementation to Mistral Vibe via its programmatic mode, supervises in real time, and reports.
---
Known Limits
Hard constraints — not config options. Full details in `SKILL-reference.md`.
- **UTF-8 / special chars** → silent `search_replace` match failure. Use `python3 str.replace()` for accented chars or emoji.
- **Code duplication** → Vibe may re-insert a block already written. Grep for duplicate definitions after every run.
- **HTML in prompt** → tags like `<div>` are shell redirects (exit 127). Write HTML content to a temp file; reference the path in the prompt.
- **Source code in bash heredoc** → quotes/backslashes mangle. Use `search_replace` directly; never a helper script that replaces code.
- **`read_file` caps at 50 KiB / 2000 lines** → a larger file comes back as `read_file failed: Output (N KiB) exceeds maximum allowed size`, and Vibe then re-reads it in slices, so it may reason about only *part* of the file without saying so. Keep any file you hand it (diffs, generated inputs) under 50 KiB — split by area rather than dumping one big diff.
- **Files outside the workdir are unreadable** → `--trust` does NOT cover them. Any path outside `workdir` raises an `outside_directory` approval that is auto-denied headlessly: the run exits **0** with 0 tool calls and, before the 2026-08-02 parser fix, said nothing at all. **Any file the prompt points Vibe at must live inside the workdir.** Stage temp inputs in a gitignored dir in the repo, not `/tmp`.
- **Orchestration chain** → 6 failure points in order: CLI auth → pseudo-TTY → stream parser → TOML pricing → git diff → JSON log. When a run produces unexpected results, work down this list. Full details in `SKILL-reference.md`.
---
Step 1 — Detect workdir
1. `git rev-parse --show-toplevel` in the current directory. 2. If ambiguous or no git repo → ask with `AskUserQuestion`.
---
Step 2 — Decompose the task
**Critical rule**: keep tasks **atomic and focused** — one objective, one prompt.
| Size | Definition | Max turns | Approach | |------|-----------|-----------|----------| | **Trivial** | 1 file, change is obvious and located | — | **Skip delegation — edit directly** | | **Simple** | 1 file, non-trivial logic or unknown location | 5–8 | 1 vibe call | | **Medium** | 2–3 related files, 1 objective | 8–12 | 1 structured vibe call | | **Complex** | >3 files OR business logic OR DB migrations | — | **Break into sub-tasks** |
**Decomposition for complex tasks:**
Sub-task 1: Explore / read relevant files (read-only, 5 turns) Sub-task 2: Implement change A in file X (8 turns) Sub-task 3: Implement change B i
Claude orchestrates. Vibe does the heavy lifting. You review the diff, save tokens, costs and avoid hitting limits!
Repo: pcx-wave/vibe-skill

