Skip to content

feat(cli): add Mistral Vibe support #943

Description

@mriffault

Problem

The CLI builds and installs AIDD for a fixed list of host tools (Claude Code, Codex, Cursor, OpenCode, Kimi, ...). Mistral Vibe is absent: no tool profile, no build contract, no install route. A Vibe user cannot use AIDD at all, and the generic assumptions that made other Markdown-agent hosts work do not hold for Vibe: skills are user-invocable under .vibe/skills/<name>/SKILL.md, frontmatter is name + description only, MCP lives at .vibe/mcp.json, hooks are .vibe/hooks.toml (never Claude's hooks.json), and Vibe reads .vibe/config.toml, never a settings.json.

Outcome

As a developer using Mistral Vibe, I want aidd translate <source> --to mistral --as flat --out <dir> (and the marketplace layout) to emit a Vibe-native projection, so AIDD installs and runs on a real Vibe install without Claude-oriented leftovers and without me rewriting the output by hand.

Scope

  • A mistral tool profile in cli/src/contexts/tools/domain/profiles/mistral/: tool definition (agents, skills, commands, rules, MCP, plugins; hooks unsupported), path constants (.vibe/ workspace, .vibe/mcp.json, .vibe-plugin/plugin.json manifest), and a shared frontmatter module emitting name, description, user-invocable.
  • The mistral target in the translate command's target list (--to mistral), in the marketplace and flat build contracts, registry wiring in deps.ts, a MARKETPLACE_PROBES row.
  • Flat route: <plugin>-<skill>/SKILL.md layout; --force removes a leftover destination directory before writing; frontmatter parsing splits on /\r?\n/ so CRLF sources keep their description.
  • Hooks are declared unsupported with a Vibe-specific skip reason (Vibe loads .vibe/hooks.toml, never hooks.json); no Claude hooks.json is copied.
  • Golden snapshot recaptured for the mistral target; registry conformance, fixture imports, and golden matrix extended.

Acceptance criteria

  • aidd translate <source> --to mistral --as flat --out <dir> produces skills under the Vibe layout with name, description, user-invocable frontmatter; every built SKILL.md carries a non-empty description.
  • A real Mistral Vibe install lists and invokes the built skills (live proof recorded: 47/47 built SKILL.md carried description and loaded).
  • MCP is emitted at .vibe/mcp.json; no settings.json is emitted; no Claude hooks.json is copied in either route.
  • A leftover destination directory is removed under --force instead of failing with EISDIR.
  • CRLF source SKILL.md files round-trip without losing frontmatter keys.
  • mistral is in AI_TOOL_IDS, the registry conformance fixtures, and MARKETPLACE_PROBES.
  • The golden snapshot matrix passes deterministic and baseline runs with the mistral cell present.

Known tradeoffs and pitfalls

  • The flat route is the only install-verified path. The marketplace route emits .vibe-plugin/plugin.json, which matches neither Vibe's native marker (plugin.json at the plugin root) nor any documented foreign-format marker, so neither distribution probe can ever fire; the marketplace cell ships labeled unverified, tracked in fix(cli): make the mistral marketplace route detectable by Vibe #938.
  • Vibe has no commands directory: slash commands are user-invocable skills. The commands capability emits a surface Vibe does not read, tracked in fix(cli): route mistral commands to a surface Vibe reads #939 rather than rushed in this PR.
  • The flat contract declares hooks unsupported: Vibe's hooks.toml has no SessionStart equivalent and the Claude hooks.json bundle is never loaded by Vibe.
  • Telemetry local read and task attribution are unsupported on this profile.

Out of scope

Evidence

  • Real-install verification on Vibe: built skills load (47/47 with description), --force EISDIR recovery, frontmatter acceptance. Investigation records live in the task folder shipped with the PR (aidd_docs/tasks/2026_09/2026_09_29_mistral-support/debug/).
  • Vibe reference: Agent Plugins 1.0 (plugin.json at the plugin root), .vibe/hooks.toml (pre_tool/post_tool/post_agent), skills as user-invocable SKILL.md.
  • Test run at the PR head: cli 532 files, 530 pass / 1 fail / 1 skip; the single failure is pre-existing on next and filed as fix(cli): keep the commit-session trailer dedup working on git 2.39 #940.

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions