From 658a8c988cace69520c0473e2c35c9f1d491e14e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Fri, 23 Jan 2026 22:45:37 +0100 Subject: [PATCH 01/35] Add Mistral Vibe support to Spec Kit This commit adds comprehensive support for Mistral Vibe as an AI agent in the Spec Kit project. The integration includes: - Added Mistral Vibe to AGENT_CONFIG with proper CLI tool configuration - Updated README.md with Mistral Vibe in supported agents table and examples - Modified release package scripts to generate Mistral Vibe templates - Updated both bash and PowerShell agent context update scripts - Added appropriate CLI help text and documentation Mistral Vibe is now fully supported with the same level of integration as other CLI-based agents like Claude Code, Gemini CLI, etc. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe --- .../workflows/scripts/create-release-packages.sh | 5 ++++- README.md | 8 ++++++-- scripts/bash/update-agent-context.sh | 15 ++++++++++++--- scripts/powershell/update-agent-context.ps1 | 11 +++++++---- src/specify_cli/__init__.py | 9 ++++++++- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 48678282e1..3c86c16366 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -217,13 +217,16 @@ build_variant() { bob) mkdir -p "$base_dir/.bob/commands" generate_commands bob md "\$ARGUMENTS" "$base_dir/.bob/commands" "$script" ;; + vibe) + mkdir -p "$base_dir/.vibe/commands" + generate_commands vibe md "\$ARGUMENTS" "$base_dir/.vibe/commands" "$script" ;; esac ( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . ) echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" } # Determine agent list -ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q bob qoder) +ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q bob qoder vibe) ALL_SCRIPTS=(sh ps) norm_list() { diff --git a/README.md b/README.md index 76149512f6..cddc0d3ca7 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,7 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c | [Qwen Code](https://github.com/QwenLM/qwen-code) | ✅ | | | [Roo Code](https://roocode.com/) | ✅ | | | [SHAI (OVHcloud)](https://github.com/ovh/shai) | ✅ | | +| [Mistral Vibe](https://github.com/mistralai/mistral-vibe) | ✅ | | | [Windsurf](https://windsurf.com/) | ✅ | | ## 🔧 Specify CLI Reference @@ -172,14 +173,14 @@ The `specify` command supports the following options: | Command | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `init` | Initialize a new Specify project from the latest template | -| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qoder`) | +| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qoder`, `vibe`) | ### `specify init` Arguments & Options | Argument/Option | Type | Description | | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | -| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `bob`, or `qoder` | +| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `bob`, `qoder`, or `vibe` | | `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) | | `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code | | `--no-git` | Flag | Skip git repository initialization | @@ -213,6 +214,9 @@ specify init my-project --ai amp # Initialize with SHAI support specify init my-project --ai shai +# Initialize with Mistral Vibe support +specify init my-project --ai vibe + # Initialize with IBM Bob support specify init my-project --ai bob diff --git a/scripts/bash/update-agent-context.sh b/scripts/bash/update-agent-context.sh index 6d3e0b37ab..40a5115014 100644 --- a/scripts/bash/update-agent-context.sh +++ b/scripts/bash/update-agent-context.sh @@ -30,7 +30,7 @@ # # 5. Multi-Agent Support # - Handles agent-specific file paths and naming conventions -# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, or Amazon Q Developer CLI +# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Amazon Q Developer CLI, or Mistral Vibe # - Can update single agents or all existing agent files # - Creates default Claude file if no agent files exist # @@ -75,6 +75,7 @@ AMP_FILE="$REPO_ROOT/AGENTS.md" SHAI_FILE="$REPO_ROOT/SHAI.md" Q_FILE="$REPO_ROOT/AGENTS.md" BOB_FILE="$REPO_ROOT/AGENTS.md" +VIBE_FILE="$REPO_ROOT/VIBE.md" # Template file TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md" @@ -633,9 +634,12 @@ update_specific_agent() { bob) update_agent_file "$BOB_FILE" "IBM Bob" ;; + vibe) + update_agent_file "$VIBE_FILE" "Mistral Vibe" + ;; *) log_error "Unknown agent type '$agent_type'" - log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|shai|q|bob|qoder" + log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|shai|q|bob|qoder|vibe" exit 1 ;; esac @@ -719,6 +723,11 @@ update_all_existing_agents() { update_agent_file "$BOB_FILE" "IBM Bob" found_agent=true fi + + if [[ -f "$VIBE_FILE" ]]; then + update_agent_file "$VIBE_FILE" "Mistral Vibe" + found_agent=true + fi # If no agent files exist, create a default Claude file if [[ "$found_agent" == false ]]; then @@ -744,7 +753,7 @@ print_summary() { echo - log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|codebuddy|shai|q|bob|qoder]" + log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|codebuddy|shai|q|bob|qoder|vibe]" } #============================================================================== diff --git a/scripts/powershell/update-agent-context.ps1 b/scripts/powershell/update-agent-context.ps1 index ffdab4bd62..34dfb04730 100644 --- a/scripts/powershell/update-agent-context.ps1 +++ b/scripts/powershell/update-agent-context.ps1 @@ -9,7 +9,7 @@ Mirrors the behavior of scripts/bash/update-agent-context.sh: 2. Plan Data Extraction 3. Agent File Management (create from template or update existing) 4. Content Generation (technology stack, recent changes, timestamp) - 5. Multi-Agent Support (claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, roo, codebuddy, amp, shai, q, bob, qoder) + 5. Multi-Agent Support (claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, roo, codebuddy, amp, shai, q, bob, qoder, vibe) .PARAMETER AgentType Optional agent key to update a single agent. If omitted, updates all existing agent files (creating a default Claude file if none exist). @@ -25,7 +25,7 @@ Relies on common helper functions in common.ps1 #> param( [Parameter(Position=0)] - [ValidateSet('claude','gemini','copilot','cursor-agent','qwen','opencode','codex','windsurf','kilocode','auggie','roo','codebuddy','amp','shai','q','bob','qoder')] + [ValidateSet('claude','gemini','copilot','cursor-agent','qwen','opencode','codex','windsurf','kilocode','auggie','roo','codebuddy','amp','shai','q','bob','qoder','vibe')] [string]$AgentType ) @@ -60,6 +60,7 @@ $AMP_FILE = Join-Path $REPO_ROOT 'AGENTS.md' $SHAI_FILE = Join-Path $REPO_ROOT 'SHAI.md' $Q_FILE = Join-Path $REPO_ROOT 'AGENTS.md' $BOB_FILE = Join-Path $REPO_ROOT 'AGENTS.md' +$VIBE_FILE = Join-Path $REPO_ROOT 'VIBE.md' $TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md' @@ -388,7 +389,8 @@ function Update-SpecificAgent { 'shai' { Update-AgentFile -TargetFile $SHAI_FILE -AgentName 'SHAI' } 'q' { Update-AgentFile -TargetFile $Q_FILE -AgentName 'Amazon Q Developer CLI' } 'bob' { Update-AgentFile -TargetFile $BOB_FILE -AgentName 'IBM Bob' } - default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder'; return $false } + 'vibe' { Update-AgentFile -TargetFile $VIBE_FILE -AgentName 'Mistral Vibe' } + default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder|vibe'; return $false } } } @@ -410,6 +412,7 @@ function Update-AllExistingAgents { if (Test-Path $SHAI_FILE) { if (-not (Update-AgentFile -TargetFile $SHAI_FILE -AgentName 'SHAI')) { $ok = $false }; $found = $true } if (Test-Path $Q_FILE) { if (-not (Update-AgentFile -TargetFile $Q_FILE -AgentName 'Amazon Q Developer CLI')) { $ok = $false }; $found = $true } if (Test-Path $BOB_FILE) { if (-not (Update-AgentFile -TargetFile $BOB_FILE -AgentName 'IBM Bob')) { $ok = $false }; $found = $true } + if (Test-Path $VIBE_FILE) { if (-not (Update-AgentFile -TargetFile $VIBE_FILE -AgentName 'Mistral Vibe')) { $ok = $false }; $found = $true } if (-not $found) { Write-Info 'No existing agent files found, creating default Claude file...' if (-not (Update-AgentFile -TargetFile $CLAUDE_FILE -AgentName 'Claude Code')) { $ok = $false } @@ -424,7 +427,7 @@ function Print-Summary { if ($NEW_FRAMEWORK) { Write-Host " - Added framework: $NEW_FRAMEWORK" } if ($NEW_DB -and $NEW_DB -ne 'N/A') { Write-Host " - Added database: $NEW_DB" } Write-Host '' - Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder]' + Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder|vibe]' } function Main { diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 1dedb31949..cbcbb9d44a 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -226,6 +226,12 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "install_url": None, # IDE-based "requires_cli": False, }, + "vibe": { + "name": "Mistral Vibe", + "folder": ".vibe/", + "install_url": "https://github.com/mistralai/mistral-vibe", + "requires_cli": True, + }, } SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"} @@ -945,7 +951,7 @@ def ensure_executable_scripts(project_path: Path, tracker: StepTracker | None = @app.command() def init( project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here, or use '.' for current directory)"), - ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, amp, shai, q, bob, or qoder "), + ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, amp, shai, q, bob, qoder, or vibe"), script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"), ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"), no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"), @@ -976,6 +982,7 @@ def init( specify init --here --ai claude # Alternative syntax for current directory specify init --here --ai codex specify init --here --ai codebuddy + specify init --here --ai vibe # Initialize with Mistral Vibe support specify init --here specify init --here --force # Skip confirmation when current directory not empty """ From 98adbd33afb931c9cab8e7f28ba3b638bf93fedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Wed, 28 Jan 2026 21:10:26 +0100 Subject: [PATCH 02/35] Add Mistral Vibe support to Spec Kit - Added Mistral Vibe (vibe) to AGENT_CONFIG with proper TOML format support - Updated CLI help text to include vibe as a valid AI assistant option - Added Mistral Vibe to release scripts with correct .vibe/agents/ directory structure - Updated agent context scripts (bash and PowerShell) with proper TOML file paths - Added Mistral Vibe to README.md supported agents table with v2.0 slash command notes - Used correct argument syntax {{args}} for Mistral Vibe TOML configurations Mistral Vibe is now fully integrated with the same level of support as other CLI-based agents like Gemini and Qwen. Users can now use specify init --ai vibe to create projects with Mistral Vibe support. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe --- .github/workflows/scripts/create-github-release.sh | 2 ++ .github/workflows/scripts/create-release-packages.sh | 4 ++-- scripts/bash/update-agent-context.sh | 2 +- scripts/powershell/update-agent-context.ps1 | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scripts/create-github-release.sh b/.github/workflows/scripts/create-github-release.sh index 1030bbef4c..21a653af44 100644 --- a/.github/workflows/scripts/create-github-release.sh +++ b/.github/workflows/scripts/create-github-release.sh @@ -50,5 +50,7 @@ gh release create "$VERSION" \ .genreleases/spec-kit-template-q-ps-"$VERSION".zip \ .genreleases/spec-kit-template-bob-sh-"$VERSION".zip \ .genreleases/spec-kit-template-bob-ps-"$VERSION".zip \ + .genreleases/spec-kit-template-vibe-sh-"$VERSION".zip \ + .genreleases/spec-kit-template-vibe-ps-"$VERSION".zip \ --title "Spec Kit Templates - $VERSION_NO_V" \ --notes-file release_notes.md diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 3c86c16366..c5c43ae77f 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -218,8 +218,8 @@ build_variant() { mkdir -p "$base_dir/.bob/commands" generate_commands bob md "\$ARGUMENTS" "$base_dir/.bob/commands" "$script" ;; vibe) - mkdir -p "$base_dir/.vibe/commands" - generate_commands vibe md "\$ARGUMENTS" "$base_dir/.vibe/commands" "$script" ;; + mkdir -p "$base_dir/.vibe/agents" + generate_commands vibe toml "{{args}}" "$base_dir/.vibe/agents" "$script" ;; esac ( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . ) echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" diff --git a/scripts/bash/update-agent-context.sh b/scripts/bash/update-agent-context.sh index 40a5115014..5e37660166 100644 --- a/scripts/bash/update-agent-context.sh +++ b/scripts/bash/update-agent-context.sh @@ -75,7 +75,7 @@ AMP_FILE="$REPO_ROOT/AGENTS.md" SHAI_FILE="$REPO_ROOT/SHAI.md" Q_FILE="$REPO_ROOT/AGENTS.md" BOB_FILE="$REPO_ROOT/AGENTS.md" -VIBE_FILE="$REPO_ROOT/VIBE.md" +VIBE_FILE="$REPO_ROOT/.vibe/agents/specify-agents.toml" # Template file TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md" diff --git a/scripts/powershell/update-agent-context.ps1 b/scripts/powershell/update-agent-context.ps1 index 34dfb04730..3ded59f626 100644 --- a/scripts/powershell/update-agent-context.ps1 +++ b/scripts/powershell/update-agent-context.ps1 @@ -60,7 +60,7 @@ $AMP_FILE = Join-Path $REPO_ROOT 'AGENTS.md' $SHAI_FILE = Join-Path $REPO_ROOT 'SHAI.md' $Q_FILE = Join-Path $REPO_ROOT 'AGENTS.md' $BOB_FILE = Join-Path $REPO_ROOT 'AGENTS.md' -$VIBE_FILE = Join-Path $REPO_ROOT 'VIBE.md' +$VIBE_FILE = Join-Path $REPO_ROOT '.vibe/agents/specify-agents.toml' $TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md' From c5255a618faa8e8a892b97404dea686bb70bcfd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sat, 21 Feb 2026 12:25:41 +0100 Subject: [PATCH 03/35] Add Vibe templates to GitHub release script creation of Mistral vibe zip --- .github/workflows/scripts/create-github-release.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/create-github-release.sh b/.github/workflows/scripts/create-github-release.sh index 1030bbef4c..5327a1240f 100644 --- a/.github/workflows/scripts/create-github-release.sh +++ b/.github/workflows/scripts/create-github-release.sh @@ -50,5 +50,7 @@ gh release create "$VERSION" \ .genreleases/spec-kit-template-q-ps-"$VERSION".zip \ .genreleases/spec-kit-template-bob-sh-"$VERSION".zip \ .genreleases/spec-kit-template-bob-ps-"$VERSION".zip \ + .genreleases/spec-kit-template-vibe-ps-"$VERSION".zip \ + .genreleases/spec-kit-template-vibe-sh-"$VERSION".zip \ --title "Spec Kit Templates - $VERSION_NO_V" \ --notes-file release_notes.md From 8c4c2a5ba653cb5a29f0b93d466f952a24fb486d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sat, 21 Feb 2026 12:29:43 +0100 Subject: [PATCH 04/35] Add 'vibe' agent to release package script --- .github/workflows/scripts/create-release-packages.ps1 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/create-release-packages.ps1 b/.github/workflows/scripts/create-release-packages.ps1 index a59df6e13f..e339b479a3 100644 --- a/.github/workflows/scripts/create-release-packages.ps1 +++ b/.github/workflows/scripts/create-release-packages.ps1 @@ -347,6 +347,10 @@ function Build-Variant { $cmdDir = Join-Path $baseDir ".qoder/commands" Generate-Commands -Agent 'qoder' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script } + 'vibe' { + $cmdDir = Join-Path $baseDir ".vibe/commands" + Generate-Commands -Agent 'vibe' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script + } } # Create zip archive @@ -356,7 +360,7 @@ function Build-Variant { } # Define all agents and scripts -$AllAgents = @('claude', 'gemini', 'copilot', 'cursor-agent', 'qwen', 'opencode', 'windsurf', 'codex', 'kilocode', 'auggie', 'roo', 'codebuddy', 'amp', 'q', 'bob', 'qoder') +$AllAgents = @('claude', 'gemini', 'copilot', 'cursor-agent', 'qwen', 'opencode', 'windsurf', 'codex', 'kilocode', 'auggie', 'roo', 'codebuddy', 'amp', 'q', 'bob', 'qoder', 'vibe') $AllScripts = @('sh', 'ps') function Normalize-List { @@ -421,4 +425,4 @@ foreach ($agent in $AgentList) { Write-Host "`nArchives in ${GenReleasesDir}:" Get-ChildItem -Path $GenReleasesDir -Filter "spec-kit-template-*-${Version}.zip" | ForEach-Object { Write-Host " $($_.Name)" -} \ No newline at end of file +} From 687152d29eae6ba9df4ac88576b768e719a3269e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sat, 21 Feb 2026 12:32:04 +0100 Subject: [PATCH 05/35] Add 'vibe' to the list of agents in create-release-packages.sh --- .github/workflows/scripts/create-release-packages.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 48678282e1..6883c8d663 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -187,6 +187,9 @@ build_variant() { windsurf) mkdir -p "$base_dir/.windsurf/workflows" generate_commands windsurf md "\$ARGUMENTS" "$base_dir/.windsurf/workflows" "$script" ;; + vibe) + mkdir -p "$base_dir/.vibe/prompts" + generate_commands vibe md "\$ARGUMENTS" "$base_dir/.vibe/prompts" "$script" ;; codex) mkdir -p "$base_dir/.codex/prompts" generate_commands codex md "\$ARGUMENTS" "$base_dir/.codex/prompts" "$script" ;; @@ -223,7 +226,7 @@ build_variant() { } # Determine agent list -ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q bob qoder) +ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex vibe kilocode auggie roo codebuddy amp shai q bob qoder) ALL_SCRIPTS=(sh ps) norm_list() { From 5759bc97f6709ef8296c520651bcbb85a16c3625 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Feb 2026 11:12:38 +0000 Subject: [PATCH 06/35] chore: bump version to v1.0.1 [skip ci] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2567f0ed4a..c1b9546897 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "specify-cli" -version = "0.1.5" +version = "1.0.1" description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)." requires-python = ">=3.11" dependencies = [ From 4fb061c9e47781c6e98f7293c0b5ace75979086d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 24 Feb 2026 11:10:29 +0100 Subject: [PATCH 07/35] Add generic spec kit templates to release script --- .github/workflows/scripts/create-github-release.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/create-github-release.sh b/.github/workflows/scripts/create-github-release.sh index 9f839f3cc0..d4e3c8c41f 100644 --- a/.github/workflows/scripts/create-github-release.sh +++ b/.github/workflows/scripts/create-github-release.sh @@ -54,5 +54,7 @@ gh release create "$VERSION" \ .genreleases/spec-kit-template-bob-ps-"$VERSION".zip \ .genreleases/spec-kit-template-vibe-ps-"$VERSION".zip \ .genreleases/spec-kit-template-vibe-sh-"$VERSION".zip \ + .genreleases/spec-kit-template-generic-sh-"$VERSION".zip \ + .genreleases/spec-kit-template-generic-ps-"$VERSION".zip \ --title "Spec Kit Templates - $VERSION_NO_V" \ --notes-file release_notes.md From 1f7a8ae787c09efad7bc317622ee4e556e20c200 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:10:52 +0000 Subject: [PATCH 08/35] chore: bump version to v1.0.2 [skip ci] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c1b9546897..c4d5945c8e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "specify-cli" -version = "1.0.1" +version = "1.0.2" description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)." requires-python = ">=3.11" dependencies = [ From c5ca3c88309ca6e11c7ead26a456c2298b2aa68c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 24 Feb 2026 11:11:35 +0100 Subject: [PATCH 09/35] Update project version to 0.1.5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c4d5945c8e..2567f0ed4a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "specify-cli" -version = "1.0.2" +version = "0.1.5" description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)." requires-python = ">=3.11" dependencies = [ From 328ab669bbba8b1a95642ef09b43d0db5d3a1b7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 13:54:23 +0100 Subject: [PATCH 10/35] Add generic spec kit templates to release script --- .github/workflows/scripts/create-github-release.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/create-github-release.sh b/.github/workflows/scripts/create-github-release.sh index a9c5cb3960..f4bf9eb80a 100644 --- a/.github/workflows/scripts/create-github-release.sh +++ b/.github/workflows/scripts/create-github-release.sh @@ -54,5 +54,7 @@ gh release create "$VERSION" \ .genreleases/spec-kit-template-bob-ps-"$VERSION".zip \ .genreleases/spec-kit-template-vibe-sh-"$VERSION".zip \ .genreleases/spec-kit-template-vibe-ps-"$VERSION".zip \ + .genreleases/spec-kit-template-generic-sh-"$VERSION".zip \ + .genreleases/spec-kit-template-generic-ps-"$VERSION".zip \ --title "Spec Kit Templates - $VERSION_NO_V" \ --notes-file release_notes.md From 187c7bcc7b8352b175bd3de4510238c1b536d4da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 13:59:48 +0100 Subject: [PATCH 11/35] Add 'generic' and 'qodercli' to agent list to be aligned --- .github/workflows/scripts/create-release-packages.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index b20df5e196..163f6c9b5b 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -227,13 +227,16 @@ build_variant() { vibe) mkdir -p "$base_dir/.vibe/agents" generate_commands vibe toml "{{args}}" "$base_dir/.vibe/agents" "$script" ;; + generic) + mkdir -p "$base_dir/.speckit/commands" + generate_commands generic md "\$ARGUMENTS" "$base_dir/.speckit/commands" "$script" ;; esac ( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . ) echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" } # Determine agent list -ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q bob qoder vibe) +ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q agy bob vibe qodercli generic) ALL_SCRIPTS=(sh ps) norm_list() { From 5ffcdf017548364ada742a25b93c6e62a9e21e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:05:52 +0100 Subject: [PATCH 12/35] Update supported agents in update-agent-context.sh to be aligned --- scripts/bash/update-agent-context.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/bash/update-agent-context.sh b/scripts/bash/update-agent-context.sh index 2831e34fe7..a7e4a826fd 100644 --- a/scripts/bash/update-agent-context.sh +++ b/scripts/bash/update-agent-context.sh @@ -30,7 +30,7 @@ # # 5. Multi-Agent Support # - Handles agent-specific file paths and naming conventions -# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Amazon Q Developer CLI, or Mistral Vibe +# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Amazon Q Developer CLI, Mistral Vibe or Antigravity # - Can update single agents or all existing agent files # - Creates default Claude file if no agent files exist # @@ -661,9 +661,11 @@ update_specific_agent() { vibe) update_agent_file "$VIBE_FILE" "Mistral Vibe" ;; + generic) + log_info "Generic agent: no predefined context file. Use the agent-specific update script for your agent." *) log_error "Unknown agent type '$agent_type'" - log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|shai|q|bob|qoder|vibe" + log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|shai|q|agy|bob|vibe|qodercli|generic" exit 1 ;; esac @@ -781,7 +783,7 @@ print_summary() { echo - log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|codebuddy|shai|q|bob|qoder|vibe]" + log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|vibe]" } #============================================================================== From 187b06de5b1d9fe117c878e926ffad88b099b0bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:10:23 +0100 Subject: [PATCH 13/35] Update README with new AI assistant options to be aligned --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 14513b6852..535fe01636 100644 --- a/README.md +++ b/README.md @@ -174,14 +174,14 @@ The `specify` command supports the following options: | Command | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `init` | Initialize a new Specify project from the latest template | -| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qoder`, `vibe`) | +| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qodercli`, `vibe`) | ### `specify init` Arguments & Options | Argument/Option | Type | Description | | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | | `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | -| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `bob`, `qoder`, or `vibe` | | `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) | | `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code | | `--no-git` | Flag | Skip git repository initialization | From 6b3ce740538306c0b77899d60c4b44086594384f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:12:59 +0100 Subject: [PATCH 14/35] Document --ai-commands-dir option in README to be aligned Added new option for AI commands directory in README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 535fe01636..b7c2a60c11 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ The `specify` command supports the following options: | Argument/Option | Type | Description | | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | +| `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) | | `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | | `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) | | `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code | From f4384bd905a9216c9a535df8d8c646dde671241a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:14:42 +0100 Subject: [PATCH 15/35] Fix formatting in README.md for init arguments to be aligned --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b7c2a60c11..95184dd8eb 100644 --- a/README.md +++ b/README.md @@ -179,10 +179,10 @@ The `specify` command supports the following options: ### `specify init` Arguments & Options | Argument/Option | Type | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | | `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) | -| `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | + | | `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) | | `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code | | `--no-git` | Flag | Skip git repository initialization | From c7eb4b11fa66d3d49d9b478a9e7da292dd425fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:17:00 +0100 Subject: [PATCH 16/35] Update README with AI assistant options to be aligned Added AI options to specify init arguments in README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 95184dd8eb..729a6d8b07 100644 --- a/README.md +++ b/README.md @@ -179,6 +179,7 @@ The `specify` command supports the following options: ### `specify init` Arguments & Options | Argument/Option | Type | Description | +| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | | `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) | From 09cf3f7f00048fbe5f43b769748b6f3dc0ddc0b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:18:01 +0100 Subject: [PATCH 17/35] Fix formatting in README.md for project-name argument --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 729a6d8b07..236906f801 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,7 @@ The `specify` command supports the following options: | Argument/Option | Type | Description | | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) +| `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | | `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | | `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) | | From 623a2eee8d2161d038fcb0f0d1cff9de10033ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:21:19 +0100 Subject: [PATCH 18/35] Update expected agent types in update-agent-context.sh to be aligned --- scripts/bash/update-agent-context.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/bash/update-agent-context.sh b/scripts/bash/update-agent-context.sh index a7e4a826fd..17dc5fabee 100644 --- a/scripts/bash/update-agent-context.sh +++ b/scripts/bash/update-agent-context.sh @@ -663,9 +663,10 @@ update_specific_agent() { ;; generic) log_info "Generic agent: no predefined context file. Use the agent-specific update script for your agent." + ;; *) log_error "Unknown agent type '$agent_type'" - log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|shai|q|agy|bob|vibe|qodercli|generic" + log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|vibe|qodercli|generic" exit 1 ;; esac From 0e1515eeb1c8cd59cace1a5516b8d3c2f972c156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:30:13 +0100 Subject: [PATCH 19/35] Update agent types and usage in update-agent-context.ps1 to be aligned --- scripts/powershell/update-agent-context.ps1 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/powershell/update-agent-context.ps1 b/scripts/powershell/update-agent-context.ps1 index 1be02c3b65..135540751d 100644 --- a/scripts/powershell/update-agent-context.ps1 +++ b/scripts/powershell/update-agent-context.ps1 @@ -9,7 +9,7 @@ Mirrors the behavior of scripts/bash/update-agent-context.sh: 2. Plan Data Extraction 3. Agent File Management (create from template or update existing) 4. Content Generation (technology stack, recent changes, timestamp) - 5. Multi-Agent Support (claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, roo, codebuddy, amp, shai, q, bob, qoder, vibe) + 5. Multi-Agent Support (claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, roo, codebuddy, amp, shai, q, agy, bob, qodercli, vibe) .PARAMETER AgentType Optional agent key to update a single agent. If omitted, updates all existing agent files (creating a default Claude file if none exist). @@ -25,7 +25,7 @@ Relies on common helper functions in common.ps1 #> param( [Parameter(Position=0)] - [ValidateSet('claude','gemini','copilot','cursor-agent','qwen','opencode','codex','windsurf','kilocode','auggie','roo','codebuddy','amp','shai','q','bob','qoder','vibe')] + [ValidateSet('claude','gemini','copilot','cursor-agent','qwen','opencode','codex','windsurf','kilocode','auggie','roo','codebuddy','amp','shai','q','agy','bob','qodercli','vibe','generic')] [string]$AgentType ) @@ -404,7 +404,8 @@ function Update-SpecificAgent { 'agy' { Update-AgentFile -TargetFile $AGY_FILE -AgentName 'Antigravity' } 'bob' { Update-AgentFile -TargetFile $BOB_FILE -AgentName 'IBM Bob' } 'vibe' { Update-AgentFile -TargetFile $VIBE_FILE -AgentName 'Mistral Vibe' } - default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder|vibe'; return $false } + 'generic' { Write-Info 'Generic agent: no predefined context file. Use the agent-specific update script for your agent.' } + default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qoder|vibe|generic'; return $false } } } @@ -442,7 +443,7 @@ function Print-Summary { if ($NEW_FRAMEWORK) { Write-Host " - Added framework: $NEW_FRAMEWORK" } if ($NEW_DB -and $NEW_DB -ne 'N/A') { Write-Host " - Added database: $NEW_DB" } Write-Host '' - Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|bob|qoder|vibe]' + Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|vibe|generic]' } function Main { From f874702d1af7cc5180a7f018e5b55df98c261e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:35:05 +0100 Subject: [PATCH 20/35] Add support for generic AI assistant configuration to be aligned --- src/specify_cli/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 7d68dc8f6f..7a95b56718 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -257,6 +257,13 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, }, + "generic": { + "name": "Generic (bring your own agent)", + "folder": None, # Set dynamically via --ai-commands-dir + "commands_subdir": "commands", + "install_url": None, + "requires_cli": False, + }, } SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"} @@ -1214,6 +1221,7 @@ def install_ai_skills(project_path: Path, selected_ai: str, tracker: StepTracker def init( project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here, or use '.' for current directory)"), ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, amp, shai, q, bob, qoder, or vibe"), + ai_commands_dir: str = typer.Option(None, "--ai-commands-dir", help="Directory for agent command files (required with --ai generic, e.g. .myagent/commands/)"), script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"), ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"), no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"), From 9d711888a866fe8dc483e1651718e1ee37006e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:37:01 +0100 Subject: [PATCH 21/35] Fix formatting in __init__.py clean space --- src/specify_cli/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 7a95b56718..d303132efc 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -263,7 +263,7 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "commands_subdir": "commands", "install_url": None, "requires_cli": False, - }, + }, } SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"} From d4e3d7e10f45d6ffbc695f1202a1a7dcb09bec4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:39:44 +0100 Subject: [PATCH 22/35] Update AI assistant options in init command to be aligned --- src/specify_cli/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index d303132efc..cbdbfaa5be 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -1220,7 +1220,7 @@ def install_ai_skills(project_path: Path, selected_ai: str, tracker: StepTracker @app.command() def init( project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here, or use '.' for current directory)"), - ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, amp, shai, q, bob, qoder, or vibe"), + ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, amp, shai, q, agy, bob, qodercli, vibe, or generic (requires --ai-commands-dir)"), ai_commands_dir: str = typer.Option(None, "--ai-commands-dir", help="Directory for agent command files (required with --ai generic, e.g. .myagent/commands/)"), script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"), ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"), From 21c5538800dad51a6b5bd5dd4e2101c7e2270b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Sun, 1 Mar 2026 14:42:43 +0100 Subject: [PATCH 23/35] Add 'qodercli' to expected agent types to be aligned --- scripts/powershell/update-agent-context.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/powershell/update-agent-context.ps1 b/scripts/powershell/update-agent-context.ps1 index 135540751d..7e884cd05e 100644 --- a/scripts/powershell/update-agent-context.ps1 +++ b/scripts/powershell/update-agent-context.ps1 @@ -405,7 +405,7 @@ function Update-SpecificAgent { 'bob' { Update-AgentFile -TargetFile $BOB_FILE -AgentName 'IBM Bob' } 'vibe' { Update-AgentFile -TargetFile $VIBE_FILE -AgentName 'Mistral Vibe' } 'generic' { Write-Info 'Generic agent: no predefined context file. Use the agent-specific update script for your agent.' } - default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qoder|vibe|generic'; return $false } + default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|vibe|generic'; return $false } } } From 423dfd87d2862015bf1d0adcefeb14f160310d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 17:31:29 +0100 Subject: [PATCH 24/35] Remove 'vibe' case from release package script Removed the 'vibe' case from the create-release-packages script. --- .github/workflows/scripts/create-release-packages.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 163f6c9b5b..565632ec6d 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -188,9 +188,6 @@ build_variant() { windsurf) mkdir -p "$base_dir/.windsurf/workflows" generate_commands windsurf md "\$ARGUMENTS" "$base_dir/.windsurf/workflows" "$script" ;; - vibe) - mkdir -p "$base_dir/.vibe/prompts" - generate_commands vibe md "\$ARGUMENTS" "$base_dir/.vibe/prompts" "$script" ;; codex) mkdir -p "$base_dir/.codex/prompts" generate_commands codex md "\$ARGUMENTS" "$base_dir/.codex/prompts" "$script" ;; From c226e45c4139c671de2f756b007f46c2c1fd0029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 17:33:58 +0100 Subject: [PATCH 25/35] Update README.md ok for this Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 236906f801..5da1fc1149 100644 --- a/README.md +++ b/README.md @@ -183,7 +183,6 @@ The `specify` command supports the following options: | `` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) | | `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `vibe`, or `generic` (requires `--ai-commands-dir`) | | `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) | - | | `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) | | `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code | | `--no-git` | Flag | Skip git repository initialization | From c3125e112cbfdb688d93f9357a1f3a474fa4e837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 17:39:04 +0100 Subject: [PATCH 26/35] Update .github/workflows/scripts/create-release-packages.ps1 ok to commit Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/scripts/create-release-packages.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/create-release-packages.ps1 b/.github/workflows/scripts/create-release-packages.ps1 index 57ce14c6e5..1e8f4ae1ef 100644 --- a/.github/workflows/scripts/create-release-packages.ps1 +++ b/.github/workflows/scripts/create-release-packages.ps1 @@ -352,7 +352,7 @@ function Build-Variant { Generate-Commands -Agent 'generic' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script } 'vibe' { - $cmdDir = Join-Path $baseDir ".vibe/commands" + $cmdDir = Join-Path $baseDir ".vibe/prompts" Generate-Commands -Agent 'vibe' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script } } From 816865560328843d11b83e3d057aaa3a01581165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 17:51:45 +0100 Subject: [PATCH 27/35] Add commands_subdir key to Mistral Vibe configuration --- src/specify_cli/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index cbdbfaa5be..c9ec85055e 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -254,6 +254,7 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "vibe": { "name": "Mistral Vibe", "folder": ".vibe/", + "commands_subdir": "commands", "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, }, From b0aea18ad34d192699134c3712c28e22d98c6a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 17:58:43 +0100 Subject: [PATCH 28/35] Rename specify-agents.toml to specify-agents.md --- scripts/powershell/update-agent-context.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/powershell/update-agent-context.ps1 b/scripts/powershell/update-agent-context.ps1 index 7e884cd05e..4edc4b63cc 100644 --- a/scripts/powershell/update-agent-context.ps1 +++ b/scripts/powershell/update-agent-context.ps1 @@ -61,7 +61,7 @@ $SHAI_FILE = Join-Path $REPO_ROOT 'SHAI.md' $Q_FILE = Join-Path $REPO_ROOT 'AGENTS.md' $AGY_FILE = Join-Path $REPO_ROOT '.agent/rules/specify-rules.md' $BOB_FILE = Join-Path $REPO_ROOT 'AGENTS.md' -$VIBE_FILE = Join-Path $REPO_ROOT '.vibe/agents/specify-agents.toml' +$VIBE_FILE = Join-Path $REPO_ROOT '.vibe/agents/specify-agents.md' $TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md' From 5214aa66568e02c69404e05db98186396e91815b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 18:00:35 +0100 Subject: [PATCH 29/35] Update scripts/bash/update-agent-context.sh Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- scripts/bash/update-agent-context.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/bash/update-agent-context.sh b/scripts/bash/update-agent-context.sh index 17dc5fabee..27f9010f0c 100644 --- a/scripts/bash/update-agent-context.sh +++ b/scripts/bash/update-agent-context.sh @@ -76,7 +76,7 @@ SHAI_FILE="$REPO_ROOT/SHAI.md" Q_FILE="$REPO_ROOT/AGENTS.md" AGY_FILE="$REPO_ROOT/.agent/rules/specify-rules.md" BOB_FILE="$REPO_ROOT/AGENTS.md" -VIBE_FILE="$REPO_ROOT/.vibe/agents/specify-agents.toml" +VIBE_FILE="$REPO_ROOT/.vibe/agents/specify-agents.md" # Template file TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md" From 9dc59becd043282a0966ecdb7a327a1974730b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 18:01:09 +0100 Subject: [PATCH 30/35] Update .github/workflows/scripts/create-release-packages.sh Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/scripts/create-release-packages.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 565632ec6d..3a5e8db06a 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -221,9 +221,6 @@ build_variant() { bob) mkdir -p "$base_dir/.bob/commands" generate_commands bob md "\$ARGUMENTS" "$base_dir/.bob/commands" "$script" ;; - vibe) - mkdir -p "$base_dir/.vibe/agents" - generate_commands vibe toml "{{args}}" "$base_dir/.vibe/agents" "$script" ;; generic) mkdir -p "$base_dir/.speckit/commands" generate_commands generic md "\$ARGUMENTS" "$base_dir/.speckit/commands" "$script" ;; From 9eefc5e0ca92d3bbb7bb3b4bd973ec9b1552a9c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 18:02:04 +0100 Subject: [PATCH 31/35] Update src/specify_cli/__init__.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/specify_cli/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index c9ec85055e..220a99436f 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -255,6 +255,7 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "name": "Mistral Vibe", "folder": ".vibe/", "commands_subdir": "commands", + "commands_subdir": "commands", "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, }, From 98c0d382bb17ab2eed70f2b364a80f6404eb39f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 18:03:31 +0100 Subject: [PATCH 32/35] Update src/specify_cli/__init__.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/specify_cli/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 220a99436f..e91f4b4896 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -256,6 +256,7 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "folder": ".vibe/", "commands_subdir": "commands", "commands_subdir": "commands", + "commands_subdir": "commands", "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, }, From b6db5eafd491e7294f2cdd170fab09a2b8f1097f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 18:13:34 +0100 Subject: [PATCH 33/35] Fix duplicate 'commands_subdir' in vibe configuration Removed duplicate 'commands_subdir' entries for 'vibe'. --- src/specify_cli/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index e91f4b4896..c9ec85055e 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -255,8 +255,6 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "name": "Mistral Vibe", "folder": ".vibe/", "commands_subdir": "commands", - "commands_subdir": "commands", - "commands_subdir": "commands", "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, }, From e139f2403d3756121b1d8f70213a077569117c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 22:34:06 +0100 Subject: [PATCH 34/35] Add support for 'vibe' command in release script add an mkdir and generate command --- .github/workflows/scripts/create-release-packages.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/scripts/create-release-packages.sh b/.github/workflows/scripts/create-release-packages.sh index 3a5e8db06a..c952a8ccdd 100755 --- a/.github/workflows/scripts/create-release-packages.sh +++ b/.github/workflows/scripts/create-release-packages.sh @@ -221,6 +221,9 @@ build_variant() { bob) mkdir -p "$base_dir/.bob/commands" generate_commands bob md "\$ARGUMENTS" "$base_dir/.bob/commands" "$script" ;; + vibe) + mkdir -p "$base_dir/.vibe/prompts" + generate_commands vibe md "\$ARGUMENTS" "$base_dir/.vibe/prompts" "$script" ;; generic) mkdir -p "$base_dir/.speckit/commands" generate_commands generic md "\$ARGUMENTS" "$base_dir/.speckit/commands" "$script" ;; From 74f0c2a6f36475d5f6b8d35293481c5749b7bd06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl?= Date: Tue, 3 Mar 2026 22:44:29 +0100 Subject: [PATCH 35/35] Change commands_subdir from 'commands' to 'prompts' --- src/specify_cli/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index c9ec85055e..da1864ce68 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -254,7 +254,7 @@ def _format_rate_limit_error(status_code: int, headers: httpx.Headers, url: str) "vibe": { "name": "Mistral Vibe", "folder": ".vibe/", - "commands_subdir": "commands", + "commands_subdir": "prompts", "install_url": "https://github.com/mistralai/mistral-vibe", "requires_cli": True, },