Skip to content

feat: recognize Mistral Vibe as a CLI agent (#9607)#9667

Merged
zachbai merged 4 commits intowarpdotdev:masterfrom
lonexreb:feat/9607-mistral-vibe-cli-agent
May 4, 2026
Merged

feat: recognize Mistral Vibe as a CLI agent (#9607)#9667
zachbai merged 4 commits intowarpdotdev:masterfrom
lonexreb:feat/9607-mistral-vibe-cli-agent

Conversation

@lonexreb
Copy link
Copy Markdown
Contributor

Description

Resolves #9607. Adds CLIAgent::Vibe so running vibe (or vibe-acp) in a Warp pane is detected as a known CLI agent on par with Claude Code, Codex, Gemini CLI, OpenCode, etc. Mistral Vibe is the open-source ACP-compatible CLI shipped alongside Devstral 2.

The change is purely additive and follows the existing CLIAgent pattern in app/src/terminal/cli_agent.rs:

Property Value
command_prefix "vibe"
display_name "Mistral Vibe"
brand_color Mistral orange #FA520F (new MISTRAL_ORANGE constant)
brand_icon_color white (default arm)
supported_skill_providers &[SkillProvider::Agents]
icon None — see below

Telemetry: CLIAgentType::Vibe added in lockstep so From<CLIAgent> for CLIAgentType stays exhaustive.

Why icon() returns None

Shipping Icon::MistralLogo requires an officially licensed SVG that I don't have rights to bundle. The brand-color tile still renders, and the agent is fully detected. A follow-up PR can wire the Icon::MistralLogo variant + asset once the Warp team / Mistral provide one — the issue author explicitly suggested this draft-PR approach.

Linked Issue

Resolves #9607.

Testing

Extended the existing test_detect_known_agents table-driven test to cover vibe -> CLIAgent::Vibe. The pre-existing test_serialized_name_round_trips_known_agents exercises every variant via enum_iterator::all, so it now also covers Vibe's serde round-trip without code changes.

Local builds blocked on missing Xcode metal compiler in this environment; CI's MacOS / Linux / Windows lanes will validate cargo build, cargo clippy --workspace --all-targets --all-features --tests -- -D warnings, and cargo nextest run.

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

CHANGELOG-IMPROVEMENT: Recognize Mistral Vibe (vibe / vibe-acp) as a known CLI agent in the terminal, with brand-colored toolbar tile. Thanks @lonexreb!

Adds `CLIAgent::Vibe` so running `vibe` (or `vibe-acp`) in a Warp pane
is detected on par with the other agents we already recognize. The
change is purely additive and follows the existing `CLIAgent` pattern:

- `command_prefix` -> "vibe"
- `display_name`   -> "Mistral Vibe"
- `brand_color`    -> Mistral orange (#FA520F)
- `supported_skill_providers` -> [SkillProvider::Agents]
- Telemetry: matching `CLIAgentType::Vibe` variant.

`icon()` returns `None` for now: shipping an `Icon::MistralLogo`
requires an officially licensed SVG that I don't have rights to bundle.
The brand-color tile still renders, and a follow-up PR can add the
icon variant + asset once the Warp team / Mistral provide one.

Tested by extending `test_detect_known_agents` to cover `vibe`, which
also exercises `to_serialized_name` round-tripping via the existing
`test_serialized_name_round_trips_known_agents` (it iterates every
variant via `enum_iterator::all`).
@cla-bot cla-bot Bot added the cla-signed label Apr 30, 2026
@oz-for-oss
Copy link
Copy Markdown
Contributor

oz-for-oss Bot commented Apr 30, 2026

@lonexreb

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I completed the review and posted feedback on this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

I'm re-reviewing this pull request in response to a review request.

I reviewed this pull request and requested human review from: @zachbai.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

I reviewed this pull request and requested human review from: @zachbai.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Apr 30, 2026
Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

Adds Mistral Vibe as a recognized CLI agent with telemetry mapping, display metadata, brand color, supported skill provider, and test coverage for the vibe command.

Concerns

  • vibe-acp is described as supported by the PR, but detection still does an exact first-token comparison against command_prefix(), so only vibe is recognized.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

CLIAgent::Auggie => "auggie",
CLIAgent::CursorCli => "agent",
CLIAgent::Goose => "goose",
CLIAgent::Vibe => "vibe",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] detect compares the first token exactly to command_prefix(), so vibe-acp remains undetected despite the PR scope; add a secondary match and a regression test.

oz-for-oss flagged that the PR description claims `vibe-acp` is
recognized but `detect()` exact-matches `command_prefix()`, so the
ACP-mode binary slipped through.

Mirror the existing `aifx agent run claude` special-case: extend the
`find` predicate so `CLIAgent::Vibe` also matches when the resolved
first word is `vibe-acp`. Adds a regression test that exercises both
the bare command and an arguments-included variant, plus a negative
case so we don't accidentally match `vibe-anything`.
@lonexreb
Copy link
Copy Markdown
Contributor Author

Pushed 05af229 addressing the IMPORTANT finding:

detect compares the first token exactly to command_prefix(), so vibe-acp remains undetected despite the PR scope; add a secondary match and a regression test.

Mirrored the existing aifx agent run claude special-case in detect()'s find predicate so CLIAgent::Vibe matches when the resolved first word is vibe-acp. Added test_detect_vibe_acp_binary covering the bare binary, arguments-included form, and a negative case (vibe-other) so we don't broaden the match accidentally.

/oz-review

Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

Adds Mistral Vibe as a known CLI agent, including command detection for vibe and vibe-acp, display metadata, skill-provider support, telemetry mapping, and focused unit coverage.

Concerns

  • No blocking correctness or security concerns found in the changed diff.

Verdict

Found: 0 critical, 0 important, 0 suggestions

Approve

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot requested a review from zachbai April 30, 2026 20:49
Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds Mistral Vibe as a recognized CLI agent, including telemetry mapping, display metadata, brand color, skill-provider support, and detection tests for both vibe and vibe-acp.

Concerns

  • No blocking correctness or security concerns found in the changed lines.

Verdict

Found: 0 critical, 0 important, 0 suggestions

Approve

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Copy link
Copy Markdown
Contributor

@zachbai zachbai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice, thanks for the change

@zachbai
Copy link
Copy Markdown
Contributor

zachbai commented May 1, 2026

@bholmesdev fyi that support for mistral vibe coming soon

lonexreb added 2 commits May 4, 2026 01:20
After this PR was opened on 2026-04-30, master added three new exhaustive
match sites on CLIAgent that were not yet aware of the Vibe variant:

- app/src/terminal/cli_agent_sessions/listener/mod.rs (no listener arm)
- app/src/terminal/cli_agent_sessions/plugin_manager/mod.rs (no plugin manager arm)
- app/src/terminal/view/use_agent_footer/mod.rs (Inline rich-input strategy arm)

This caused error[E0004] non-exhaustive patterns failures across all CI
platforms (Formatting + Clippy, Verify compilation, tests). Adding Vibe
to the same arm as Goose in each site — Vibe is recognition-only at this
stage and matches Goose's "no special integration yet" treatment.

Resolves the CI red status without expanding scope; the original PR
remains a recognition-only change as approved by zachbai.
@zachbai zachbai dismissed oz-for-oss[bot]’s stale review May 4, 2026 06:25

comments addressed

@zachbai zachbai merged commit de1ac84 into warpdotdev:master May 4, 2026
22 checks passed
lonexreb added a commit to lonexreb/warp that referenced this pull request May 4, 2026
Resolves the merge conflict with master after warpdotdev#9667 (Mistral Vibe agent
recognition) merged. Combines both surfaces:

- The Vibe arm now also resolves through path_basename_token and
  shebang_script_basename, so `/usr/local/bin/vibe-acp` and
  `node /opt/vibe-acp` both detect as Vibe.

Also addresses oz-for-oss review on PR warpdotdev#10022:

> This treats the first non-flag token as a script even when the
> preceding runtime flag consumes an argument, so invocations like
> `node -e codex`, `node --require codex`, or `python -c claude` can
> false-positive as agents.

Adds VALUE_TAKING_RUNTIME_FLAGS, a list of flags that consume the
following token as their value:
- Node: -e, --eval, -p, --print, -r, --require, -C, --conditions
- Python: -c, -m, -X, -W
- Deno (subset): -A, --allow-read, --allow-write, --allow-net
- Bun (subset): -d, --define

shebang_script_basename now consumes the value alongside the flag, so
`node -e codex` no longer false-positives as Codex. The `--key=value`
form remains a single whitespace token and is handled by the existing
`starts_with('-')` flag check.

New regression tests in cli_agent_tests.rs:
- `node -e codex` → None
- `node --eval codex` → None
- `node --require claude /home/user/app.js` → None
- `python -c claude` → None
- `python -m gemini` → None
- `node --require some-mod /usr/local/bin/codex` → Codex (legitimate
  agent script after value-taking flag is consumed)
- `node --inspect=127.0.0.1:9229 /usr/local/bin/codex` → Codex
  (--key=value form preserves correct script detection)
wolverine2k pushed a commit to wolverine2k/warp that referenced this pull request May 5, 2026
…tdev#9667)

## Description

Resolves warpdotdev#9607. Adds `CLIAgent::Vibe` so running `vibe` (or `vibe-acp`)
in a Warp pane is detected as a known CLI agent on par with Claude Code,
Codex, Gemini CLI, OpenCode, etc. Mistral Vibe is the open-source
ACP-compatible CLI shipped alongside Devstral 2.

The change is purely additive and follows the existing `CLIAgent`
pattern in `app/src/terminal/cli_agent.rs`:

| Property | Value |
|---|---|
| `command_prefix` | `"vibe"` |
| `display_name` | `"Mistral Vibe"` |
| `brand_color` | Mistral orange `#FA520F` (new `MISTRAL_ORANGE`
constant) |
| `brand_icon_color` | white (default arm) |
| `supported_skill_providers` | `&[SkillProvider::Agents]` |
| `icon` | `None` — see below |

Telemetry: `CLIAgentType::Vibe` added in lockstep so `From<CLIAgent> for
CLIAgentType` stays exhaustive.

### Why `icon()` returns `None`

Shipping `Icon::MistralLogo` requires an officially licensed SVG that I
don't have rights to bundle. The brand-color tile still renders, and the
agent is fully detected. A follow-up PR can wire the `Icon::MistralLogo`
variant + asset once the Warp team / Mistral provide one — the issue
author explicitly suggested this draft-PR approach.

## Linked Issue

- [x] The linked issue is labeled `ready-to-spec` or
`ready-to-implement`. (warpdotdev#9607 is `ready-to-implement`.)

Resolves warpdotdev#9607.

## Testing

Extended the existing `test_detect_known_agents` table-driven test to
cover `vibe` -> `CLIAgent::Vibe`. The pre-existing
`test_serialized_name_round_trips_known_agents` exercises every variant
via `enum_iterator::all`, so it now also covers Vibe's serde round-trip
without code changes.

Local builds blocked on missing Xcode `metal` compiler in this
environment; CI's MacOS / Linux / Windows lanes will validate `cargo
build`, `cargo clippy --workspace --all-targets --all-features --tests
-- -D warnings`, and `cargo nextest run`.

## Agent Mode

- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

<!--
CHANGELOG-IMPROVEMENT: Recognize Mistral Vibe (`vibe` / `vibe-acp`) as a
known CLI agent in the terminal, with brand-colored toolbar tile. Thanks
@lonexreb!
-->

CHANGELOG-IMPROVEMENT: Recognize Mistral Vibe (`vibe` / `vibe-acp`) as a
known CLI agent in the terminal, with brand-colored toolbar tile. Thanks
@lonexreb!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Mistral Vibe to recognized CLI agents

2 participants