Skip to content

Commit 10e56aa

Browse files
authored
Merge pull request #182 from ahmet-cetinkaya/feature/add-qwen-support
feat: add Qwen Code support to Spec Kit
2 parents b18ef20 + 8b49d5d commit 10e56aa

File tree

7 files changed

+36
-10
lines changed

7 files changed

+36
-10
lines changed

.github/workflows/scripts/create-release-packages.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,17 @@ build_variant() {
143143
cursor)
144144
mkdir -p "$base_dir/.cursor/commands"
145145
generate_commands cursor md "\$ARGUMENTS" "$base_dir/.cursor/commands" "$script" ;;
146+
qwen)
147+
mkdir -p "$base_dir/.qwen/commands"
148+
generate_commands qwen md "\$ARGUMENTS" "$base_dir/.qwen/commands" "$script"
149+
[[ -f agent_templates/qwen/QWEN.md ]] && cp agent_templates/qwen/QWEN.md "$base_dir/QWEN.md" ;;
146150
esac
147151
( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . )
148152
echo "Created spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip"
149153
}
150154

151155
# Determine agent list
152-
ALL_AGENTS=(claude gemini copilot cursor)
156+
ALL_AGENTS=(claude gemini copilot cursor qwen)
153157
ALL_SCRIPTS=(sh ps)
154158

155159
norm_list() {

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.0.5] - 2025-09-17
11+
12+
### Added
13+
14+
- Qwen Code support as additional AI assistant option
15+
1016
## [0.0.4] - 2025-09-14
1117

1218
### Added

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ These are one time installations required to be able to test your changes locall
1111
1. Install [Python 3.11+](https://www.python.org/downloads/)
1212
1. Install [uv](https://docs.astral.sh/uv/) for package management
1313
1. Install [Git](https://git-scm.com/downloads)
14-
1. Have an AI coding agent available: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), or [Gemini CLI](https://github.com/google-gemini/gemini-cli) are recommended, but we're working on adding support for other agents as well.
14+
1. Have an AI coding agent available: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Gemini CLI](https://github.com/google-gemini/gemini-cli), or [Qwen Code](https://github.com/QwenLM/qwen-code). We're working on adding support for other agents as well.
1515

1616
## Submitting a pull request
1717

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ Our research and experimentation focus on:
170170
## 🔧 Prerequisites
171171

172172
- **Linux/macOS** (or WSL2 on Windows)
173-
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Gemini CLI](https://github.com/google-gemini/gemini-cli), or [Cursor](https://cursor.sh/)
173+
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Cursor](https://cursor.sh/), or [Qwen CLI](https://github.com/QwenLM/qwen-code)
174174
- [uv](https://docs.astral.sh/uv/) for package management
175175
- [Python 3.11+](https://www.python.org/downloads/)
176176
- [Git](https://git-scm.com/downloads)
@@ -207,11 +207,12 @@ You will be prompted to select the AI agent you are using. You can also proactiv
207207
specify init <project_name> --ai claude
208208
specify init <project_name> --ai gemini
209209
specify init <project_name> --ai copilot
210+
specify init <project_name> --ai qwen
210211
# Or in current directory:
211212
specify init --here --ai claude
212213
```
213214

214-
The CLI will check if you have Claude Code or Gemini CLI installed. If you do not, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
215+
The CLI will check if you have Claude Code, Gemini CLI, or Qwen CLI installed. If you do not, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
215216

216217
```bash
217218
specify init <project_name> --ai claude --ignore-agent-tools

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "specify-cli"
3-
version = "0.0.4"
3+
version = "0.0.5"
44
description = "Setup tool for Specify spec-driven development projects"
55
requires-python = ">=3.11"
66
dependencies = [

src/specify_cli/__init__.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@
5757
"copilot": "GitHub Copilot",
5858
"claude": "Claude Code",
5959
"gemini": "Gemini CLI",
60-
"cursor": "Cursor"
60+
"cursor": "Cursor",
61+
"qwen": "Qwen Code"
6162
}
6263
# Add script type choices
6364
SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"}
@@ -722,7 +723,7 @@ def ensure_executable_scripts(project_path: Path, tracker: StepTracker | None =
722723
@app.command()
723724
def init(
724725
project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here)"),
725-
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, or cursor"),
726+
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, or qwen"),
726727
script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"),
727728
ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"),
728729
no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"),
@@ -735,7 +736,7 @@ def init(
735736
736737
This command will:
737738
1. Check that required tools are installed (git is optional)
738-
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, or Cursor)
739+
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, or Qwen Code)
739740
3. Download the appropriate template from GitHub
740741
4. Extract the template to a new project directory or current directory
741742
5. Initialize a fresh git repository (if not --no-git and no existing repo)
@@ -747,6 +748,7 @@ def init(
747748
specify init my-project --ai gemini
748749
specify init my-project --ai copilot --no-git
749750
specify init my-project --ai cursor
751+
specify init my-project --ai qwen
750752
specify init --ignore-agent-tools my-project
751753
specify init --here --ai claude
752754
specify init --here
@@ -825,6 +827,11 @@ def init(
825827
if not check_tool("gemini", "Install from: https://github.com/google-gemini/gemini-cli"):
826828
console.print("[red]Error:[/red] Gemini CLI is required for Gemini projects")
827829
agent_tool_missing = True
830+
elif selected_ai == "qwen":
831+
if not check_tool("qwen", "Install from: https://github.com/QwenLM/qwen-code"):
832+
console.print("[red]Error:[/red] Qwen CLI is required for Qwen Code projects")
833+
agent_tool_missing = True
834+
# GitHub Copilot and Cursor checks are not needed as they're typically available in supported IDEs
828835

829836
if agent_tool_missing:
830837
console.print("\n[red]Required AI tool is missing![/red]")
@@ -950,6 +957,12 @@ def init(
950957
steps_lines.append(" - See GEMINI.md for all available commands")
951958
elif selected_ai == "copilot":
952959
steps_lines.append(f"{step_num}. Open in Visual Studio Code and use [bold cyan]/specify[/], [bold cyan]/plan[/], [bold cyan]/tasks[/] commands with GitHub Copilot")
960+
elif selected_ai == "qwen":
961+
steps_lines.append(f"{step_num}. Use / commands with Qwen CLI")
962+
steps_lines.append(" - Run qwen /specify to create specifications")
963+
steps_lines.append(" - Run qwen /plan to create implementation plans")
964+
steps_lines.append(" - Run qwen /tasks to generate tasks")
965+
steps_lines.append(" - See QWEN.md for all available commands")
953966

954967
# Removed script variant step (scripts are transparent to users)
955968
step_num += 1
@@ -975,13 +988,15 @@ def check():
975988
tracker.add("git", "Git version control")
976989
tracker.add("claude", "Claude Code CLI")
977990
tracker.add("gemini", "Gemini CLI")
991+
tracker.add("qwen", "Qwen Code CLI")
978992
tracker.add("code", "VS Code (for GitHub Copilot)")
979993
tracker.add("cursor-agent", "Cursor IDE agent (optional)")
980994

981995
# Check each tool
982996
git_ok = check_tool_for_tracker("git", "https://git-scm.com/downloads", tracker)
983997
claude_ok = check_tool_for_tracker("claude", "https://docs.anthropic.com/en/docs/claude-code/setup", tracker)
984998
gemini_ok = check_tool_for_tracker("gemini", "https://github.com/google-gemini/gemini-cli", tracker)
999+
qwen_ok = check_tool_for_tracker("qwen", "https://github.com/QwenLM/qwen-code", tracker)
9851000
# Check for VS Code (code or code-insiders)
9861001
code_ok = check_tool_for_tracker("code", "https://code.visualstudio.com/", tracker)
9871002
if not code_ok:
@@ -997,7 +1012,7 @@ def check():
9971012
# Recommendations
9981013
if not git_ok:
9991014
console.print("[dim]Tip: Install git for repository management[/dim]")
1000-
if not (claude_ok or gemini_ok):
1015+
if not (claude_ok or gemini_ok or qwen_ok):
10011016
console.print("[dim]Tip: Install an AI assistant for the best experience[/dim]")
10021017

10031018

templates/plan-template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ scripts:
2424
→ Update Progress Tracking: Initial Constitution Check
2525
5. Execute Phase 0 → research.md
2626
→ If NEEDS CLARIFICATION remain: ERROR "Resolve unknowns"
27-
6. Execute Phase 1 → contracts, data-model.md, quickstart.md, agent-specific template file (e.g., `CLAUDE.md` for Claude Code, `.github/copilot-instructions.md` for GitHub Copilot, or `GEMINI.md` for Gemini CLI).
27+
6. Execute Phase 1 → contracts, data-model.md, quickstart.md, agent-specific template file (e.g., `CLAUDE.md` for Claude Code, `.github/copilot-instructions.md` for GitHub Copilot, `GEMINI.md` for Gemini CLI, or `QWEN.md` for Qwen Code).
2828
7. Re-evaluate Constitution Check section
2929
→ If new violations: Refactor design, return to Phase 1
3030
→ Update Progress Tracking: Post-Design Constitution Check

0 commit comments

Comments
 (0)