Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ You can enable expanded workflows (`new`, `continue`, `ff`, `verify`, `bulk-arch
| Kimi CLI (`kimi`) | `.kimi/skills/openspec-*/SKILL.md` | Not generated (no command adapter; use skill-based `/skill:openspec-*` invocations) |
| Kiro (`kiro`) | `.kiro/skills/openspec-*/SKILL.md` | `.kiro/prompts/opsx-<id>.prompt.md` |
| Lingma (`lingma`) | `.lingma/skills/openspec-*/SKILL.md` | `.lingma/commands/opsx/<id>.md` |
| Mistral Vibe (`vibe`) | `.vibe/skills/openspec-*/SKILL.md` | Not generated (no command adapter; use skill-based `/openspec-*` invocations) |
| OpenCode (`opencode`) | `.opencode/skills/openspec-*/SKILL.md` | `.opencode/commands/opsx-<id>.md` |
| Pi (`pi`) | `.pi/skills/openspec-*/SKILL.md` | `.pi/prompts/opsx-<id>.md` |
| Qoder (`qoder`) | `.qoder/skills/openspec-*/SKILL.md` | `.qoder/commands/opsx/<id>.md` |
Expand Down Expand Up @@ -74,7 +75,7 @@ openspec init --tools none
openspec init --profile core
```

**Available tool IDs (`--tools`):** `amazon-q`, `antigravity`, `auggie`, `bob`, `claude`, `cline`, `codex`, `forgecode`, `codebuddy`, `continue`, `costrict`, `crush`, `cursor`, `factory`, `gemini`, `github-copilot`, `iflow`, `junie`, `kilocode`, `kimi`, `kiro`, `opencode`, `pi`, `qoder`, `lingma`, `qwen`, `roocode`, `trae`, `windsurf`
**Available tool IDs (`--tools`):** `amazon-q`, `antigravity`, `auggie`, `bob`, `claude`, `cline`, `codex`, `forgecode`, `codebuddy`, `continue`, `costrict`, `crush`, `cursor`, `factory`, `gemini`, `github-copilot`, `iflow`, `junie`, `kilocode`, `kimi`, `kiro`, `opencode`, `pi`, `qoder`, `lingma`, `qwen`, `roocode`, `trae`, `vibe`, `windsurf`

## Workflow-Dependent Installation

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-05-25
Comment thread
tbetous marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Add Mistral Vibe Support - Technical Design

## Context

Mistral Vibe is an AI coding assistant that uses a SKILL.md format for defining custom skills. While Vibe already works with manually-installed OpenSpec skills (confirmed by user's existing `~/.config/vibe/skills/openspec-*` directory), it is not included in OpenSpec's official tool support list.

The existing OpenSpec architecture supports tool integration through the `AI_TOOLS` configuration array in `src/core/config.ts`. Each tool entry defines metadata including a `skillsDir` for project-local skill directory and optional `detectionPaths` for auto-detection.

Unlike command-based tools (Claude Code, Cursor, etc.), Mistral Vibe is **skill-based only** and does not use or support commands. OpenSpec already generates skills in the correct SKILL.md format that Vibe consumes directly. No command adapter is needed.

## Goals / Non-Goals

**Goals:**
- Add Mistral Vibe to the list of officially supported OpenSpec tools
- Enable `openspec init --tools vibe` to create Vibe skill files automatically
- Enable `openspec update` to refresh Vibe skills when OpenSpec version changes
- Enable `openspec status` to detect and report Vibe skill configuration
- Follow existing patterns for tool configuration

**Non-Goals:**
- Global skills directory support (`.config/vibe/skills/`) - can be Phase 2
- Vibe-specific customizations beyond standard skill format
- Integration with Mistral Vibe's MCP server
- Special handling for Vibe's unique features not related to skill management
- Command generation (Vibe is skill-based, not command-based)

## Decisions

### Decision: Skill-Based Tool Support Without Command Adapter

**Chosen**: Add Mistral Vibe to `AI_TOOLS` configuration only, without creating a command adapter

**Rationale**:
- Mistral Vibe consumes SKILL.md files directly and does not have a command system
- OpenSpec already generates skills in the correct format for Vibe
- The existing `skillsDir` and `detectionPaths` configuration is sufficient for Vibe integration
- Command adapters are only needed for tools that require tool-specific command file formats
- Adding Vibe without a command adapter keeps the architecture clean and honest

**Alternatives considered**:
- Create a Vibe command adapter that generates SKILL.md files — rejected as it conflates commands with skills
- Modify OpenSpec to have separate skill adapters — rejected as unnecessary complexity

### Decision: Tool Configuration Metadata

**Chosen**: Use `value: 'vibe'`, `skillsDir: '.vibe'`, `detectionPaths: ['.vibe/skills']`

**Rationale**:
- User confirmed Vibe loads skills from `.vibe/skills/` directory
- Consistent with other tools that use dot-prefixed directories (`.claude`, `.cursor`, `.windsurf`)
- The `value` field matches CLI argument and internal identifier
- `detectionPaths` enables `openspec status` to detect existing configurations

### Decision: Alphabetical Placement

**Chosen**: Insert Mistral Vibe after 'Lingma' and before 'OpenCode' in the AI_TOOLS array

**Rationale**: Maintains alphabetical ordering by `name` field for consistency ('Mistral Vibe' comes after 'Lingma' and before 'OpenCode').

## Risks / Trade-offs

**[Risk] Incomplete integration without command adapter** → **Mitigation**: Vibe doesn't need commands. The `skillsDir` configuration is sufficient for OpenSpec to place skill files in the correct location. The existing skill generation mechanism works without tool-specific adapters for skill-based tools.

**[Risk] Future Vibe features requiring commands** → **Mitigation**: If Vibe adds command support later, a command adapter can be added at that time without breaking existing skill support.

## Migration Plan

1. **Implementation**: Add Mistral Vibe entry to AI_TOOLS configuration
2. **Documentation**: Update `docs/supported-tools.md` with Vibe entry
3. **Testing**:
- Run `openspec init --tools vibe` in a test project
- Verify `.vibe/skills/openspec-*/SKILL.md` files are created
- Verify Vibe can load and use the skills
- Run `openspec update` and verify skills are refreshed
- Run `openspec status` and verify Vibe is listed as configured
4. **Rollback**: Remove the Vibe entry from AI_TOOLS. No other files are modified.

## Open Questions

None identified. The implementation is straightforward: add configuration entry and update documentation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Add Mistral Vibe Support - Proposal

## Why

Mistral Vibe is a popular AI coding assistant that works with OpenSpec skills, but it is not currently available through OpenSpec's standard setup workflows. Users must manually copy skills to use them with Vibe.

Adding official Mistral Vibe support enables users to set up and manage Vibe integration through OpenSpec's standard commands, eliminating manual copying and ensuring skills stay up-to-date automatically.

## What Changes

- Enable Mistral Vibe as a supported tool that appears in tool selection
- Automatically set up Mistral Vibe skills in the correct location during initialization
- Detect existing Mistral Vibe configurations when checking project status

## Non-goals

- Support for global Vibe skills directory - can be Phase 2
- Vibe-specific customizations beyond standard skill format
- Integration with Mistral Vibe's additional features
- Command generation (Vibe uses skills, not commands)

## Capabilities

### New Capabilities
- `vibe-tool-config`: Enable Mistral Vibe as a supported OpenSpec tool

### Modified Capabilities
- `ai-tool-paths`: Add Mistral Vibe to tool path configuration

## Impact

- **Files Modified**: Configuration and documentation
- **New Dependencies**: None
- **Breaking Changes**: None
- **User Experience**: Users can set up Mistral Vibe through standard OpenSpec workflows
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# ai-tool-paths Specification

## MODIFIED Requirements

### Requirement: All supported tools have proper directory configuration

The system SHALL define the correct directory for each supported tool.

#### Scenario: Claude Code directory
- **GIVEN** Claude Code is a supported tool
- **WHEN** the system uses Claude Code
- **THEN** it SHALL use the correct directory for that tool

#### Scenario: Cursor directory
- **GIVEN** Cursor is a supported tool
- **WHEN** the system uses Cursor
- **THEN** it SHALL use the correct directory for that tool

#### Scenario: Windsurf directory
- **GIVEN** Windsurf is a supported tool
- **WHEN** the system uses Windsurf
- **THEN** it SHALL use the correct directory for that tool

#### Scenario: Kimi CLI directory
- **GIVEN** Kimi CLI is a supported tool
- **WHEN** the system uses Kimi CLI
- **THEN** it SHALL use the correct directory for that tool

#### Scenario: Mistral Vibe directory
- **GIVEN** Mistral Vibe is a supported tool
- **WHEN** the system uses Mistral Vibe
- **THEN** it SHALL use the correct directory for that tool
- **AND** it SHALL recognize its standard skills location

#### Scenario: Unsupported tool
- **GIVEN** a tool is not supported
- **WHEN** attempting to use that tool
- **THEN** the system SHALL report that the tool is not available
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# vibe-tool-config Specification

## ADDED Requirements

### Requirement: Mistral Vibe appears as a selectable tool

The system SHALL include Mistral Vibe in its list of supported tools.

#### Scenario: Tool is available for selection
- **GIVEN** a user views the list of supported tools
- **WHEN** the list is displayed
- **THEN** Mistral Vibe SHALL appear as an option

#### Scenario: Tool can be identified uniquely
- **GIVEN** a user specifies Mistral Vibe
- **WHEN** the system processes the selection
- **THEN** Mistral Vibe SHALL be recognized as a distinct tool

#### Scenario: Tool uses its standard location
- **GIVEN** Mistral Vibe is selected
- **WHEN** setting up the tool
- **THEN** its files SHALL be placed in the tool's designated directory

#### Scenario: Tool configuration can be detected
- **GIVEN** a project has Mistral Vibe set up
- **WHEN** checking which tools are configured
- **THEN** Mistral Vibe SHALL be reported as configured

### Requirement: Cross-platform compatibility

The system SHALL handle Mistral Vibe setups correctly on all operating systems.

#### Scenario: Setup on Windows
- **GIVEN** running on Windows
- **WHEN** creating Mistral Vibe directories
- **THEN** the paths SHALL work correctly on Windows

#### Scenario: Setup on Unix
- **GIVEN** running on macOS or Linux
- **WHEN** creating Mistral Vibe directories
- **THEN** the paths SHALL work correctly on Unix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## 1. Configuration Updates

- [x] 1.1 Add Mistral Vibe entry to AI_TOOLS array in configuration
- [x] 1.2 Set tool metadata: name='Mistral Vibe', value='vibe', skillsDir='.vibe', detectionPaths=['.vibe/skills']
- [x] 1.3 Verify Vibe entry is alphabetically placed after 'Lingma' and before 'OpenCode'

## 2. Documentation Updates

- [x] 2.1 Add Mistral Vibe row to tool directory table in documentation
- [x] 2.2 Add 'vibe' to tool IDs list in documentation
- [x] 2.3 Verify documentation format matches existing entries

## 3. Verification and Testing

- [x] 3.1 Run `openspec init --tools vibe` in a test project
- [x] 3.2 Verify `.vibe/skills/openspec-*/SKILL.md` files are created
- [x] 3.3 Verify each SKILL.md file has valid format and metadata
- [x] 3.4 Run `openspec status` and verify Vibe is listed as configured
- [x] 3.5 Run `openspec update` and verify Vibe skills are refreshed
- [x] 3.6 Run existing OpenSpec tests to ensure no regressions
- [x] 3.7 Test on Windows to verify cross-platform path handling
6 changes: 6 additions & 0 deletions openspec/specs/ai-tool-paths/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ The `AI_TOOLS` array SHALL include `skillsDir` for tools that support the Agent
- **WHEN** looking up the `kimi` tool
- **THEN** `skillsDir` SHALL be `.kimi`

#### Scenario: Mistral Vibe paths defined

- **WHEN** looking up the `vibe` tool
- **THEN** `skillsDir` SHALL be `.vibe`
- **AND** `detectionPaths` SHALL include `['.vibe/skills']`

#### Scenario: Tools without skillsDir

- **WHEN** a tool has no `skillsDir` defined
Expand Down
41 changes: 41 additions & 0 deletions openspec/specs/vibe-tool-config/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# vibe-tool-config Specification

## ADDED Requirements

### Requirement: Mistral Vibe appears as a selectable tool

The system SHALL include Mistral Vibe in its list of supported tools.

#### Scenario: Tool is available for selection
- **GIVEN** a user views the list of supported tools
- **WHEN** the list is displayed
- **THEN** Mistral Vibe SHALL appear as an option

#### Scenario: Tool can be identified uniquely
- **GIVEN** a user specifies Mistral Vibe
- **WHEN** the system processes the selection
- **THEN** Mistral Vibe SHALL be recognized as a distinct tool

#### Scenario: Tool uses its standard location
- **GIVEN** Mistral Vibe is selected
- **WHEN** setting up the tool
- **THEN** its files SHALL be placed in the tool's designated directory

#### Scenario: Tool configuration can be detected
- **GIVEN** a project has Mistral Vibe set up
- **WHEN** checking which tools are configured
- **THEN** Mistral Vibe SHALL be reported as configured

### Requirement: Cross-platform compatibility

The system SHALL handle Mistral Vibe setups correctly on all operating systems.

#### Scenario: Setup on Windows
- **GIVEN** running on Windows
- **WHEN** creating Mistral Vibe directories
- **THEN** the paths SHALL work correctly on Windows

#### Scenario: Setup on Unix
- **GIVEN** running on macOS or Linux
- **WHEN** creating Mistral Vibe directories
- **THEN** the paths SHALL work correctly on Unix
3 changes: 2 additions & 1 deletion src/core/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ export const AI_TOOLS: AIToolOption[] = [
{ name: 'Kilo Code', value: 'kilocode', available: true, successLabel: 'Kilo Code', skillsDir: '.kilocode' },
{ name: 'Kimi CLI', value: 'kimi', available: true, successLabel: 'Kimi CLI', skillsDir: '.kimi' },
{ name: 'Kiro', value: 'kiro', available: true, successLabel: 'Kiro', skillsDir: '.kiro' },
{ name: 'Lingma', value: 'lingma', available: true, successLabel: 'Lingma', skillsDir: '.lingma' },
{ name: 'Mistral Vibe', value: 'vibe', available: true, successLabel: 'Mistral Vibe', skillsDir: '.vibe', detectionPaths: ['.vibe/skills'] },
{ name: 'OpenCode', value: 'opencode', available: true, successLabel: 'OpenCode', skillsDir: '.opencode' },
{ name: 'Pi', value: 'pi', available: true, successLabel: 'Pi', skillsDir: '.pi' },
{ name: 'Qoder', value: 'qoder', available: true, successLabel: 'Qoder', skillsDir: '.qoder' },
{ name: 'Lingma', value: 'lingma', available: true, successLabel: 'Lingma', skillsDir: '.lingma' },
{ name: 'Qwen Code', value: 'qwen', available: true, successLabel: 'Qwen Code', skillsDir: '.qwen' },
{ name: 'RooCode', value: 'roocode', available: true, successLabel: 'RooCode', skillsDir: '.roo' },
{ name: 'Trae', value: 'trae', available: true, successLabel: 'Trae', skillsDir: '.trae' },
Expand Down