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
2 changes: 2 additions & 0 deletions .github/workflows/scripts/create-github-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ gh release create "$VERSION" \
.genreleases/spec-kit-template-codebuddy-ps-"$VERSION".zip \
.genreleases/spec-kit-template-amp-sh-"$VERSION".zip \
.genreleases/spec-kit-template-amp-ps-"$VERSION".zip \
.genreleases/spec-kit-template-warp-sh-"$VERSION".zip \
.genreleases/spec-kit-template-warp-ps-"$VERSION".zip \
.genreleases/spec-kit-template-q-sh-"$VERSION".zip \
.genreleases/spec-kit-template-q-ps-"$VERSION".zip \
--title "Spec Kit Templates - $VERSION_NO_V" \
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/scripts/create-release-packages.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,12 @@ build_variant() {
amp)
mkdir -p "$base_dir/.agents/commands"
generate_commands amp md "\$ARGUMENTS" "$base_dir/.agents/commands" "$script" ;;
warp)
# Warp uses WARP.md for project rules, not custom slash commands
if [[ -f agent_templates/warp/WARP.md ]]; then
cat agent_templates/warp/WARP.md | rewrite_paths > "$base_dir/WARP.md"
fi
;;
q)
mkdir -p "$base_dir/.amazonq/prompts"
generate_commands q md "\$ARGUMENTS" "$base_dir/.amazonq/prompts" "$script" ;;
Expand All @@ -192,7 +198,7 @@ build_variant() {
}

# Determine agent list
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp q)
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp warp q)
ALL_SCRIPTS=(sh ps)

norm_list() {
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,9 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c
| [CodeBuddy CLI](https://www.codebuddy.ai/cli) | ✅ | |
| [Roo Code](https://roocode.com/) | ✅ | |
| [Codex CLI](https://github.com/openai/codex) | ✅ | |
| [Amazon Q Developer CLI](https://aws.amazon.com/developer/learning/q-developer-cli/) | ⚠️ | Amazon Q Developer CLI [does not support](https://github.com/aws/amazon-q-developer-cli/issues/3064) custom arguments for slash commands. |
| [Amp](https://ampcode.com/) | ✅ | |
|| [Amazon Q Developer CLI](https://aws.amazon.com/developer/learning/q-developer-cli/) | ⚠️ | Amazon Q Developer CLI [does not support](https://github.com/aws/amazon-q-developer-cli/issues/3064) custom arguments for slash commands. |
|| [Amp](https://ampcode.com/) | ✅ | |
|| [Warp](https://www.warp.dev/) | ✅ | |

## 🔧 Specify CLI Reference

Expand All @@ -167,7 +168,7 @@ The `specify` command supports the following options:
| Argument/Option | Type | Description |
|------------------------|----------|------------------------------------------------------------------------------|
| `<project-name>` | 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`, or `q` |
|| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `warp`, or `q` |
| `--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 |
Expand Down Expand Up @@ -195,6 +196,9 @@ specify init my-project --ai windsurf
# Initialize with Amp support
specify init my-project --ai amp

# Initialize with Warp support
specify init my-project --ai warp

# Initialize with PowerShell scripts (Windows/cross-platform)
specify init my-project --ai copilot --script ps

Expand Down
106 changes: 106 additions & 0 deletions agent_templates/warp/WARP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Warp Project Rules - Spec-Driven Development

This project uses **Spec-Driven Development (SDD)** methodology with the [GitHub Spec Kit](https://github.com/github/spec-kit).

## Project Context

This is a spec-kit project that follows a structured development workflow:
1. Define specifications before implementation
2. Create technical implementation plans
3. Break down into actionable tasks
4. Execute implementation according to the plan

## Available Spec-Kit Workflows

When working on this project, you can guide the user through these structured workflows:

### `/speckit.constitution` - Create Project Principles
Create or update project governing principles and development guidelines that will guide all subsequent development.

**Usage:** User should describe principles focused on code quality, testing standards, user experience consistency, and performance requirements.

**Script:** `scripts/bash/setup-plan.sh constitution`

---

### `/speckit.specify` - Define Requirements
Define what needs to be built with focus on the **what** and **why**, not the tech stack.

**Usage:** User should describe the feature or application they want to build, focusing on user needs and functionality.

**Script:** `scripts/bash/setup-plan.sh specify`

---

### `/speckit.plan` - Create Technical Plan
Create technical implementation plans with the chosen tech stack and architecture.

**Usage:** User should specify their technology choices, frameworks, databases, and architectural decisions.

**Script:** `scripts/bash/setup-plan.sh plan`

---

### `/speckit.tasks` - Generate Task List
Generate actionable task lists for implementation based on the plan.

**Usage:** Run this after creating a plan to break it down into specific implementation tasks.

**Script:** `scripts/bash/create-new-feature.sh tasks`

---

### `/speckit.implement` - Execute Implementation
Execute all tasks to build the feature according to the plan.

**Usage:** Run this to implement all the tasks that were generated.

**Script:** `scripts/bash/create-new-feature.sh implement`

---

## Optional Quality Commands

### `/speckit.clarify` - Clarify Underspecified Areas
Clarify underspecified areas in the specification. Recommended before creating a technical plan.

**Script:** `scripts/bash/setup-plan.sh clarify`

---

### `/speckit.analyze` - Consistency Analysis
Cross-artifact consistency & coverage analysis. Run after creating tasks, before implementation.

**Script:** `scripts/bash/create-new-feature.sh analyze`

---

### `/speckit.checklist` - Quality Checklists
Generate custom quality checklists that validate requirements completeness, clarity, and consistency.

**Script:** `scripts/bash/create-new-feature.sh checklist`

---

## How to Use These Workflows

1. **Start a new feature**: Begin with `/speckit.constitution` to establish project principles
2. **Define the feature**: Use `/speckit.specify` to describe what you want to build
3. **Plan the implementation**: Use `/speckit.plan` to define your technical approach
4. **Break it down**: Use `/speckit.tasks` to create actionable tasks
5. **Build it**: Use `/speckit.implement` to execute the plan

## Project Structure

- `.specify/` - Spec-kit configuration and templates
- `memory/` - Project memory and principles
- `scripts/` - Automation scripts for workflows
- `templates/` - Document templates

## Environment Variables

- `SPECIFY_FEATURE` - Override feature detection for non-Git repositories

## Support

For more information, see the [Spec Kit documentation](https://github.com/github/spec-kit).
13 changes: 11 additions & 2 deletions scripts/bash/update-agent-context.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ AUGGIE_FILE="$REPO_ROOT/.augment/rules/specify-rules.md"
ROO_FILE="$REPO_ROOT/.roo/rules/specify-rules.md"
CODEBUDDY_FILE="$REPO_ROOT/CODEBUDDY.md"
AMP_FILE="$REPO_ROOT/AGENTS.md"
WARP_FILE="$REPO_ROOT/.warp/rules/specify-rules.md"
Q_FILE="$REPO_ROOT/AGENTS.md"

# Template file
Expand Down Expand Up @@ -618,12 +619,15 @@ update_specific_agent() {
amp)
update_agent_file "$AMP_FILE" "Amp"
;;
warp)
update_agent_file "$WARP_FILE" "Warp"
;;
q)
update_agent_file "$Q_FILE" "Amazon Q Developer CLI"
;;
*)
log_error "Unknown agent type '$agent_type'"
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|q"
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|amp|warp|q"
exit 1
;;
esac
Expand Down Expand Up @@ -688,6 +692,11 @@ update_all_existing_agents() {
found_agent=true
fi

if [[ -f "$WARP_FILE" ]]; then
update_agent_file "$WARP_FILE" "Warp"
found_agent=true
fi

if [[ -f "$Q_FILE" ]]; then
update_agent_file "$Q_FILE" "Amazon Q Developer CLI"
found_agent=true
Expand Down Expand Up @@ -717,7 +726,7 @@ print_summary() {

echo

log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|codebuddy|q]"
log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|codebuddy|warp|q]"
}

#==============================================================================
Expand Down
9 changes: 6 additions & 3 deletions scripts/powershell/update-agent-context.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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','q')]
[ValidateSet('claude','gemini','copilot','cursor-agent','qwen','opencode','codex','windsurf','kilocode','auggie','roo','codebuddy','amp','warp','q')]
[string]$AgentType
)

Expand Down Expand Up @@ -56,6 +56,7 @@ $AUGGIE_FILE = Join-Path $REPO_ROOT '.augment/rules/specify-rules.md'
$ROO_FILE = Join-Path $REPO_ROOT '.roo/rules/specify-rules.md'
$CODEBUDDY_FILE = Join-Path $REPO_ROOT 'CODEBUDDY.md'
$AMP_FILE = Join-Path $REPO_ROOT 'AGENTS.md'
$WARP_FILE = Join-Path $REPO_ROOT '.warp/rules/specify-rules.md'
$Q_FILE = Join-Path $REPO_ROOT 'AGENTS.md'

$TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md'
Expand Down Expand Up @@ -381,8 +382,9 @@ function Update-SpecificAgent {
'roo' { Update-AgentFile -TargetFile $ROO_FILE -AgentName 'Roo Code' }
'codebuddy' { Update-AgentFile -TargetFile $CODEBUDDY_FILE -AgentName 'CodeBuddy CLI' }
'amp' { Update-AgentFile -TargetFile $AMP_FILE -AgentName 'Amp' }
'warp' { Update-AgentFile -TargetFile $WARP_FILE -AgentName 'Warp' }
'q' { Update-AgentFile -TargetFile $Q_FILE -AgentName 'Amazon Q Developer CLI' }
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|q'; 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|warp|q'; return $false }
}
}

Expand All @@ -400,6 +402,7 @@ function Update-AllExistingAgents {
if (Test-Path $AUGGIE_FILE) { if (-not (Update-AgentFile -TargetFile $AUGGIE_FILE -AgentName 'Auggie CLI')) { $ok = $false }; $found = $true }
if (Test-Path $ROO_FILE) { if (-not (Update-AgentFile -TargetFile $ROO_FILE -AgentName 'Roo Code')) { $ok = $false }; $found = $true }
if (Test-Path $CODEBUDDY_FILE) { if (-not (Update-AgentFile -TargetFile $CODEBUDDY_FILE -AgentName 'CodeBuddy CLI')) { $ok = $false }; $found = $true }
if (Test-Path $WARP_FILE) { if (-not (Update-AgentFile -TargetFile $WARP_FILE -AgentName 'Warp')) { $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 (-not $found) {
Write-Info 'No existing agent files found, creating default Claude file...'
Expand All @@ -415,7 +418,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|q]'
Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|warp|q]'
}

function Main {
Expand Down
8 changes: 7 additions & 1 deletion src/specify_cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,12 @@ def _github_auth_headers(cli_token: str | None = None) -> dict:
"install_url": "https://ampcode.com/manual#install",
"requires_cli": True,
},
"warp": {
"name": "Warp",
"folder": ".warp/",
"install_url": None, # IDE-based
"requires_cli": False,
},
}

SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"}
Expand Down Expand Up @@ -865,7 +871,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, or q"),
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, warp, or q"),
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"),
Expand Down