Skip to content

feat(vibe): migrate to SkillsIntegration from the old prompts-based MarkdownIntegration#2336

Merged
mnriem merged 3 commits intogithub:mainfrom
Fango2007:feat/integrate-mistral-vibe-skills
Apr 24, 2026
Merged

feat(vibe): migrate to SkillsIntegration from the old prompts-based MarkdownIntegration#2336
mnriem merged 3 commits intogithub:mainfrom
Fango2007:feat/integrate-mistral-vibe-skills

Conversation

@Fango2007
Copy link
Copy Markdown
Contributor

@Fango2007 Fango2007 commented Apr 23, 2026

PR purpose : Updating Mistral Vibe integration

Since v2.0.0, Mistral Vibe supports custom slash commands through skills system https://github.com/mistralai/mistral-vibe#custom-slash-commands-via-skills

Summary of changes

Switches VibeIntegration from the old prompts-based MarkdownIntegration to SkillsIntegration, adopting the .vibe/skills/speckit-/SKILL.md layout required by Mistral Vibe v2.0.0+.
Post-processes each generated SKILL.md to inject user-invocable: true so skills are directly callable by users, not just by other agents.

Testing

  • Tested locally with uv run specify --help
  • Ran existing tests with uv sync && uv run pytest
uv run python -m pytest tests/test_agent_config_consistency.py -q
(specify-cli) MacBook-Pro:spec-kit *$ uv run python -m pytest tests/test_agent_config_consistency.py -q
============================== test session starts =========================
platform darwin -- Python 3.12.12, pytest-9.0.3, pluggy-1.6.0
rootdir: /Users/*/*/Projects/codebase/clone/spec-kit
configfile: pyproject.toml
plugins: cov-7.1.0
collected 24 items                                                                                                                                                                                                                                         

tests/test_agent_config_consistency.py ........................    [100%]
================ 24 passed in 0.06s =======================================
  • Manual test results
**Agent**: [Vibe]  |  **OS/Shell**: [macOS/zsh]

| Command tested | Notes |
|----------------|-------|
| `/speckit.constitution` | OK |
| `/speckit.specify` | OK |
  • AI review
  • Required tests: all passed
┌───────────────────────────────────────────────┬───────────────────────┬──────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐   
  │                 Changed file                  │        Affects        │ Test │                                                                                          Why                                                                                           │   
  ├───────────────────────────────────────────────┼───────────────────────┼──────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ src/specify_cli/integrations/vibe/__init__.py │ specify init --ai     │ T1   │ Python CLI src → test the affected CLI command; vibe integration controls how .vibe/skills/*/SKILL.md files are scaffolded (adds user-invocable: true frontmatter via                  │   
  │                                               │ vibe                  │      │ post_process_skill_content)                                                                                                                                                            │ 
  ├───────────────────────────────────────────────┼───────────────────────┼──────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤   
  │ src/specify_cli/integrations/vibe/__init__.py │ /speckit.specify      │ T2   │ Init/scaffolding change → mapping rule requires at minimum /speckit.specify to verify the scaffolded skills work end-to-end in a live agent session; depends on T1                     │
  ├───────────────────────────────────────────────┼───────────────────────┼──────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤   
  │ tests/integrations/test_integration_vibe.py   │ specify init --ai     │ T1   │ Tests the same vibe integration code path; no additional slash-command surface beyond what the source file already maps to                                                             │ 
  │                                               │ vibe                  │      │                                                                                                                                                                                        │   
  └───────────────────────────────────────────────┴───────────────────────┴──────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 
T1: specify init --ai vibe (CLI command) — The VibeIntegration.setup() and post_process_skill_content() changes affect every SKILL.md file written during init. Run uv run specify init <tmp-dir>/speckit-vibe-test --ai vibe --offline, then verify that every .vibe/skills/speckit-*/SKILL.md file contains user-invocable: true injected in its frontmatter block.                                                                                                                                                            
T2: /speckit.specify — Minimum slash-command test required for any init/scaffolding change. Open the T1-initialized project in Mistral Vibe and invoke /speckit.specify with a sample feature description. Confirm the command is user-invocable (Vibe surfaces it as a callable skill) and completes successfully, producing specs/<dir>/spec.md and the quality checklist. Requires T1.
  • Tested with a sample project

AI Disclosure

  • I did use AI assistance (describe below)
    This PR was drafted with the help of Claude. The code was then manually refined, largely by aligning it with the Claude integration. It also helped me understand the underlying logic and validate the implementation.

…ontmatter

Switches VibeIntegration from the old prompts-based MarkdownIntegration to SkillsIntegration, adopting the .vibe/skills/speckit-<name>/SKILL.md layout required by Mistral Vibe v2.0.0+. Post-processes each generated SKILL.md to inject `user-invocable: true` so skills are directly callable by users, not  just by other agents.
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Migrates the Mistral Vibe integration from the legacy prompts-based Markdown command layout to the skills-based speckit-<name>/SKILL.md layout required by newer Vibe versions, and post-processes generated skills to add Vibe-specific frontmatter.

Changes:

  • Switch VibeIntegration to subclass SkillsIntegration, updating config/registrar settings to .vibe/skills/speckit-<name>/SKILL.md.
  • Add Vibe-specific post_process_skill_content() and a setup() post-pass to inject user-invocable: true.
  • Update the Vibe integration test mixin from Markdown-based tests to skills-based tests.
Show a summary per file
File Description
src/specify_cli/integrations/vibe/__init__.py Converts Vibe integration to skills layout and injects user-invocable into generated SKILL.md files.
tests/integrations/test_integration_vibe.py Updates integration test harness to validate Vibe as a SkillsIntegration.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 2

Comment thread src/specify_cli/integrations/vibe/__init__.py
Comment thread src/specify_cli/integrations/vibe/__init__.py
Copy link
Copy Markdown
Collaborator

@mnriem mnriem left a comment

Choose a reason for hiding this comment

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

Please address Copilot feedback. If it is truly shareable code between all integrations using skills please pull it up into the SkillIngration

@Fango2007
Copy link
Copy Markdown
Contributor Author

Done

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 1

Comment thread tests/integrations/test_integration_vibe.py
@mnriem
Copy link
Copy Markdown
Collaborator

mnriem commented Apr 24, 2026

@Fango2007 Please address Copilot feedback

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new

@mnriem mnriem self-requested a review April 24, 2026 17:36
@mnriem mnriem merged commit 998f927 into github:main Apr 24, 2026
15 checks passed
@mnriem
Copy link
Copy Markdown
Collaborator

mnriem commented Apr 24, 2026

Thank you!

@Fango2007
Copy link
Copy Markdown
Contributor Author

Thank you.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants