Skip to content

Commit 73020a1

Browse files
committed
feat: add support for amazon q developer cli
1 parent fadd250 commit 73020a1

File tree

6 files changed

+49
-10
lines changed

6 files changed

+49
-10
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,7 @@ gh release create "$VERSION" \
3838
.genreleases/spec-kit-template-auggie-ps-"$VERSION".zip \
3939
.genreleases/spec-kit-template-roo-sh-"$VERSION".zip \
4040
.genreleases/spec-kit-template-roo-ps-"$VERSION".zip \
41+
.genreleases/spec-kit-template-q-sh-"$VERSION".zip \
42+
.genreleases/spec-kit-template-q-ps-"$VERSION".zip \
4143
--title "Spec Kit Templates - $VERSION_NO_V" \
4244
--notes-file release_notes.md

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set -euo pipefail
66
# Usage: .github/workflows/scripts/create-release-packages.sh <version>
77
# Version argument should include leading 'v'.
88
# Optionally set AGENTS and/or SCRIPTS env vars to limit what gets built.
9-
# AGENTS : space or comma separated subset of: claude gemini copilot cursor qwen opencode windsurf codex (default: all)
9+
# AGENTS : space or comma separated subset of: claude gemini copilot cursor qwen opencode windsurf codex q (default: all)
1010
# SCRIPTS : space or comma separated subset of: sh ps (default: both)
1111
# Examples:
1212
# AGENTS=claude SCRIPTS=sh $0 v0.2.0
@@ -172,13 +172,16 @@ build_variant() {
172172
roo)
173173
mkdir -p "$base_dir/.roo/commands"
174174
generate_commands roo md "\$ARGUMENTS" "$base_dir/.roo/commands" "$script" ;;
175+
q)
176+
mkdir -p "$base_dir/.amazonq/prompts"
177+
generate_commands q md "" "$base_dir/.amazonq/prompts" "$script" ;;
175178
esac
176179
( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . )
177180
echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip"
178181
}
179182

180183
# Determine agent list
181-
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex kilocode auggie roo)
184+
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex kilocode auggie roo q)
182185
ALL_SCRIPTS=(sh ps)
183186

184187

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c
133133
| [Kilo Code](https://github.com/Kilo-Org/kilocode) || |
134134
| [Auggie CLI](https://docs.augmentcode.com/cli/overview) || |
135135
| [Roo Code](https://roocode.com/) || |
136+
| [Amazon Q Developer CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html) | ⚠️ | Amazon Q Developer CLI does not support custom arguments for prompts. |
136137
| [Codex CLI](https://github.com/openai/codex) | ⚠️ | Codex [does not support](https://github.com/openai/codex/issues/2890) custom arguments for slash commands. |
137138

138139
## 🔧 Specify CLI Reference

scripts/bash/update-agent-context.sh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
6969
KILOCODE_FILE="$REPO_ROOT/.kilocode/rules/specify-rules.md"
7070
AUGGIE_FILE="$REPO_ROOT/.augment/rules/specify-rules.md"
7171
ROO_FILE="$REPO_ROOT/.roo/rules/specify-rules.md"
72+
Q_FILE="$REPO_ROOT/.amazonq/rules/specify-rules.md"
7273

7374
# Template file
7475
TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md"
@@ -580,9 +581,12 @@ update_specific_agent() {
580581
roo)
581582
update_agent_file "$ROO_FILE" "Roo Code"
582583
;;
584+
q)
585+
update_agent_file "$Q_FILE" "Amazon Q Developer CLI"
586+
;;
583587
*)
584588
log_error "Unknown agent type '$agent_type'"
585-
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo"
589+
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo|q"
586590
exit 1
587591
;;
588592
esac
@@ -642,6 +646,11 @@ update_all_existing_agents() {
642646
found_agent=true
643647
fi
644648

649+
if [[ -f "$Q_FILE" ]]; then
650+
update_agent_file "$Q_FILE" "Amazon Q Developer CLI"
651+
found_agent=true
652+
fi
653+
645654
# If no agent files exist, create a default Claude file
646655
if [[ "$found_agent" == false ]]; then
647656
log_info "No existing agent files found, creating default Claude file..."

scripts/powershell/update-agent-context.ps1

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Relies on common helper functions in common.ps1
2525
#>
2626
param(
2727
[Parameter(Position=0)]
28-
[ValidateSet('claude','gemini','copilot','cursor','qwen','opencode','codex','windsurf','kilocode','auggie','roo')]
28+
[ValidateSet('claude','gemini','copilot','cursor','qwen','opencode','codex','windsurf','kilocode','auggie','roo','q')]
2929
[string]$AgentType
3030
)
3131

@@ -54,6 +54,7 @@ $WINDSURF_FILE = Join-Path $REPO_ROOT '.windsurf/rules/specify-rules.md'
5454
$KILOCODE_FILE = Join-Path $REPO_ROOT '.kilocode/rules/specify-rules.md'
5555
$AUGGIE_FILE = Join-Path $REPO_ROOT '.augment/rules/specify-rules.md'
5656
$ROO_FILE = Join-Path $REPO_ROOT '.roo/rules/specify-rules.md'
57+
$Q_FILE = Join-Path $REPO_ROOT '.amazonq/rules/specify-rules.md'
5758

5859
$TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md'
5960

@@ -376,7 +377,8 @@ function Update-SpecificAgent {
376377
'kilocode' { Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code' }
377378
'auggie' { Update-AgentFile -TargetFile $AUGGIE_FILE -AgentName 'Auggie CLI' }
378379
'roo' { Update-AgentFile -TargetFile $ROO_FILE -AgentName 'Roo Code' }
379-
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo'; return $false }
380+
'q' { Update-AgentFile -TargetFile $Q_FILE -AgentName 'Amazon Q Developer CLI' }
381+
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo|q'; return $false }
380382
}
381383
}
382384

@@ -393,6 +395,7 @@ function Update-AllExistingAgents {
393395
if (Test-Path $KILOCODE_FILE) { if (-not (Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code')) { $ok = $false }; $found = $true }
394396
if (Test-Path $AUGGIE_FILE) { if (-not (Update-AgentFile -TargetFile $AUGGIE_FILE -AgentName 'Auggie CLI')) { $ok = $false }; $found = $true }
395397
if (Test-Path $ROO_FILE) { if (-not (Update-AgentFile -TargetFile $ROO_FILE -AgentName 'Roo Code')) { $ok = $false }; $found = $true }
398+
if (Test-Path $Q_FILE) { if (-not (Update-AgentFile -TargetFile $Q_FILE -AgentName 'Amazon Q Developer CLI')) { $ok = $false }; $found = $true }
396399
if (-not $found) {
397400
Write-Info 'No existing agent files found, creating default Claude file...'
398401
if (-not (Update-AgentFile -TargetFile $CLAUDE_FILE -AgentName 'Claude Code')) { $ok = $false }
@@ -407,7 +410,7 @@ function Print-Summary {
407410
if ($NEW_FRAMEWORK) { Write-Host " - Added framework: $NEW_FRAMEWORK" }
408411
if ($NEW_DB -and $NEW_DB -ne 'N/A') { Write-Host " - Added database: $NEW_DB" }
409412
Write-Host ''
410-
Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo]'
413+
Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie|roo|q]'
411414
}
412415

413416
function Main {

src/specify_cli/__init__.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def _github_auth_headers(cli_token: str | None = None) -> dict:
7777
"kilocode": "Kilo Code",
7878
"auggie": "Auggie CLI",
7979
"roo": "Roo Code",
80+
"q": "Amazon Q Developer CLI",
8081
}
8182
# Add script type choices
8283
SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"}
@@ -750,7 +751,7 @@ def ensure_executable_scripts(project_path: Path, tracker: StepTracker | None =
750751
@app.command()
751752
def init(
752753
project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here, or use '.' for current directory)"),
753-
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, windsurf, kilocode, or auggie"),
754+
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, windsurf, kilocode, auggie, roo, or q"),
754755
script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"),
755756
ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"),
756757
no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"),
@@ -765,7 +766,7 @@ def init(
765766
766767
This command will:
767768
1. Check that required tools are installed (git is optional)
768-
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, Kilo Code, or Auggie CLI)
769+
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, Kilo Code, Auggie CLI, Roo Code, or Amazon Q Developer CLI)
769770
3. Download the appropriate template from GitHub
770771
4. Extract the template to a new project directory or current directory
771772
5. Initialize a fresh git repository (if not --no-git and no existing repo)
@@ -782,11 +783,13 @@ def init(
782783
specify init my-project --ai codex
783784
specify init my-project --ai windsurf
784785
specify init my-project --ai auggie
786+
specify init my-project --ai q
785787
specify init --ignore-agent-tools my-project
786788
specify init . --ai claude # Initialize in current directory
787789
specify init . # Initialize in current directory (interactive AI selection)
788790
specify init --here --ai claude # Alternative syntax for current directory
789791
specify init --here --ai codex
792+
specify init --here --ai q
790793
specify init --here
791794
specify init --here --force # Skip confirmation when current directory not empty
792795
"""
@@ -906,6 +909,10 @@ def init(
906909
if not check_tool("auggie", "https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"):
907910
install_url = "https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"
908911
agent_tool_missing = True
912+
elif selected_ai == "q":
913+
if not check_tool("q", "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html"):
914+
install_url = "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html"
915+
agent_tool_missing = True
909916
# GitHub Copilot and Cursor checks are not needed as they're typically available in supported IDEs
910917

911918
if agent_tool_missing:
@@ -1030,7 +1037,8 @@ def init(
10301037
"kilocode": ".kilocode/",
10311038
"auggie": ".augment/",
10321039
"copilot": ".github/",
1033-
"roo": ".roo/"
1040+
"roo": ".roo/",
1041+
"q": ".amazonq/"
10341042
}
10351043

10361044
if selected_ai in agent_folder_map:
@@ -1099,6 +1107,17 @@ def init(
10991107
console.print()
11001108
console.print(warning_panel)
11011109

1110+
if selected_ai == "q":
1111+
warning_text = """[bold yellow]Important Note:[/bold yellow]
1112+
1113+
Custom prompts do not yet support arguments in Amazon Q Developer CLI. You may need to manually specify additional project instructions directly in prompt files located in [cyan].amazonq/prompts/[/cyan].
1114+
1115+
The prompts are invoked using [cyan]@prompt_name[/cyan] syntax in Amazon Q Developer CLI."""
1116+
1117+
warning_panel = Panel(warning_text, title="Slash Commands in Amazon Q Developer CLI", border_style="yellow", padding=(1,2))
1118+
console.print()
1119+
console.print(warning_panel)
1120+
11021121
@app.command()
11031122
def check():
11041123
"""Check that all required tools are installed."""
@@ -1119,6 +1138,7 @@ def check():
11191138
tracker.add("opencode", "opencode")
11201139
tracker.add("codex", "Codex CLI")
11211140
tracker.add("auggie", "Auggie CLI")
1141+
tracker.add("q", "Amazon Q Developer CLI")
11221142

11231143
git_ok = check_tool_for_tracker("git", tracker)
11241144
claude_ok = check_tool_for_tracker("claude", tracker)
@@ -1132,14 +1152,15 @@ def check():
11321152
opencode_ok = check_tool_for_tracker("opencode", tracker)
11331153
codex_ok = check_tool_for_tracker("codex", tracker)
11341154
auggie_ok = check_tool_for_tracker("auggie", tracker)
1155+
q_ok = check_tool_for_tracker("q", tracker)
11351156

11361157
console.print(tracker.render())
11371158

11381159
console.print("\n[bold green]Specify CLI is ready to use![/bold green]")
11391160

11401161
if not git_ok:
11411162
console.print("[dim]Tip: Install git for repository management[/dim]")
1142-
if not (claude_ok or gemini_ok or cursor_ok or qwen_ok or windsurf_ok or kilocode_ok or opencode_ok or codex_ok or auggie_ok):
1163+
if not (claude_ok or gemini_ok or cursor_ok or qwen_ok or windsurf_ok or kilocode_ok or opencode_ok or codex_ok or auggie_ok or q_ok):
11431164
console.print("[dim]Tip: Install an AI assistant for the best experience[/dim]")
11441165

11451166

0 commit comments

Comments
 (0)