Skip to content

Commit dceb903

Browse files
committed
Updates with Kilo Code support
1 parent cef4e8f commit dceb903

File tree

10 files changed

+75
-16
lines changed

10 files changed

+75
-16
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,7 @@ gh release create "$VERSION" \
3232
.genreleases/spec-kit-template-windsurf-ps-"$VERSION".zip \
3333
.genreleases/spec-kit-template-codex-sh-"$VERSION".zip \
3434
.genreleases/spec-kit-template-codex-ps-"$VERSION".zip \
35+
.genreleases/spec-kit-template-kilocode-sh-"$VERSION".zip \
36+
.genreleases/spec-kit-template-kilocode-ps-"$VERSION".zip \
3537
--title "Spec Kit Templates - $VERSION_NO_V" \
3638
--notes-file release_notes.md

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,16 @@ build_variant() {
163163
codex)
164164
mkdir -p "$base_dir/.codex/prompts"
165165
generate_commands codex md "\$ARGUMENTS" "$base_dir/.codex/prompts" "$script" ;;
166+
kilocode)
167+
mkdir -p "$base_dir/.kilocode/workflows"
168+
generate_commands kilocode md "\$ARGUMENTS" "$base_dir/.kilocode/workflows" "$script" ;;
166169
esac
167170
( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . )
168171
echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip"
169172
}
170173

171174
# Determine agent list
172-
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex)
175+
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex kilocode)
173176
ALL_SCRIPTS=(sh ps)
174177

175178

AGENTS.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,19 @@ case $agent in
8686
esac
8787
```
8888

89-
#### 4. Update Agent Context Scripts
89+
#### 4. Update GitHub Release Script
90+
91+
Modify `.github/workflows/scripts/create-github-release.sh` to include the new agent's packages:
92+
93+
```bash
94+
gh release create "$VERSION" \
95+
# ... existing packages ...
96+
.genreleases/spec-kit-template-windsurf-sh-"$VERSION".zip \
97+
.genreleases/spec-kit-template-windsurf-ps-"$VERSION".zip \
98+
# Add new agent packages here
99+
```
100+
101+
#### 5. Update Agent Context Scripts
90102

91103
##### Bash script (`scripts/bash/update-agent-context.sh`):
92104

@@ -132,7 +144,7 @@ switch ($AgentType) {
132144
}
133145
```
134146

135-
#### 5. Update CLI Tool Checks (Optional)
147+
#### 6. Update CLI Tool Checks (Optional)
136148

137149
For agents that require CLI tools, add checks in the `check()` command and agent validation:
138150

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ All notable changes to the Specify CLI will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.0.13] - 2025-09-21
9+
10+
### Added
11+
12+
- Support for Kilo Code. Thank you [@shahrukhkhan489](https://github.com/shahrukhkhan489) with [#394](https://github.com/github/spec-kit/pull/394).
13+
14+
### Changed
15+
16+
- Warning displayed to ensure that folks are aware that they might need to add their agent folder to `.gitignore`.
17+
818
## [0.0.12] - 2025-09-21
919

1020
### Changed

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/), [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.
14+
1. Have an [AI coding agent available](README.md#-supported-ai-agents)
1515

1616
## Submitting a pull request
1717

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- [🤔 What is Spec-Driven Development?](#-what-is-spec-driven-development)
1818
- [⚡ Get started](#-get-started)
1919
- [📽️ Video Overview](#️-video-overview)
20+
- [🤖 Supported AI Agents](#-supported-ai-agents)
2021
- [🔧 Specify CLI Reference](#-specify-cli-reference)
2122
- [📚 Core philosophy](#-core-philosophy)
2223
- [🌟 Development phases](#-development-phases)
@@ -92,6 +93,20 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c
9293

9394
[![Spec Kit video header](/media/spec-kit-video-header.jpg)](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
9495

96+
## 🤖 Supported AI Agents
97+
98+
| Agent | Support | Notes |
99+
|-----------------------------------------------------------|---------|---------------------------------------------------|
100+
| [Claude Code](https://www.anthropic.com/claude-code) || |
101+
| [GitHub Copilot](https://code.visualstudio.com/) || |
102+
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) || |
103+
| [Cursor](https://cursor.sh/) || |
104+
| [Qwen Code](https://github.com/QwenLM/qwen-code) || |
105+
| [opencode](https://opencode.ai/) || |
106+
| [Windsurf](https://windsurf.com/) || |
107+
| [Kilo Code](https://github.com/Kilo-Org/kilocode) || |
108+
| [Codex CLI](https://github.com/openai/codex) | ⚠️ | Codex [does not support](https://github.com/openai/codex/issues/2890) custom arguments for slash commands. |
109+
95110
## 🔧 Specify CLI Reference
96111

97112
The `specify` command supports the following options:
@@ -220,6 +235,8 @@ Our research and experimentation focus on:
220235
- [Python 3.11+](https://www.python.org/downloads/)
221236
- [Git](https://git-scm.com/downloads)
222237

238+
If you encounter issues with an agent, please open an issue so we can refine the integration.
239+
223240
## 📖 Learn more
224241

225242
- **[Complete Spec-Driven Development Methodology](./spec-driven.md)** - Deep dive into the full process

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.12"
3+
version = "0.0.13"
44
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
55
requires-python = ">=3.11"
66
dependencies = [

scripts/bash/update-agent-context.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ CURSOR_FILE="$REPO_ROOT/.cursor/rules/specify-rules.mdc"
6666
QWEN_FILE="$REPO_ROOT/QWEN.md"
6767
AGENTS_FILE="$REPO_ROOT/AGENTS.md"
6868
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
69+
KILOCODE_FILE="$REPO_ROOT/.kilocode/rules/specify-rules.md"
6970

7071
# Template file
7172
TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md"
@@ -568,9 +569,12 @@ update_specific_agent() {
568569
windsurf)
569570
update_agent_file "$WINDSURF_FILE" "Windsurf"
570571
;;
572+
kilocode)
573+
update_agent_file "$KILOCODE_FILE" "Kilo Code"
574+
;;
571575
*)
572576
log_error "Unknown agent type '$agent_type'"
573-
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf"
577+
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode"
574578
exit 1
575579
;;
576580
esac
@@ -615,6 +619,11 @@ update_all_existing_agents() {
615619
found_agent=true
616620
fi
617621

622+
if [[ -f "$KILOCODE_FILE" ]]; then
623+
update_agent_file "$KILOCODE_FILE" "Kilo Code"
624+
found_agent=true
625+
fi
626+
618627
# If no agent files exist, create a default Claude file
619628
if [[ "$found_agent" == false ]]; then
620629
log_info "No existing agent files found, creating default Claude file..."
@@ -638,7 +647,7 @@ print_summary() {
638647
fi
639648

640649
echo
641-
log_info "Usage: $0 [claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf]"
650+
log_info "Usage: $0 [claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode]"
642651
}
643652

644653
#==============================================================================

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')]
28+
[ValidateSet('claude','gemini','copilot','cursor','qwen','opencode','codex','windsurf','kilocode')]
2929
[string]$AgentType
3030
)
3131

@@ -51,6 +51,7 @@ $CURSOR_FILE = Join-Path $REPO_ROOT '.cursor/rules/specify-rules.mdc'
5151
$QWEN_FILE = Join-Path $REPO_ROOT 'QWEN.md'
5252
$AGENTS_FILE = Join-Path $REPO_ROOT 'AGENTS.md'
5353
$WINDSURF_FILE = Join-Path $REPO_ROOT '.windsurf/rules/specify-rules.md'
54+
$KILOCODE_FILE = Join-Path $REPO_ROOT '.kilocode/rules/specify-rules.md'
5455

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

@@ -370,7 +371,8 @@ function Update-SpecificAgent {
370371
'opencode' { Update-AgentFile -TargetFile $AGENTS_FILE -AgentName 'opencode' }
371372
'codex' { Update-AgentFile -TargetFile $AGENTS_FILE -AgentName 'Codex CLI' }
372373
'windsurf' { Update-AgentFile -TargetFile $WINDSURF_FILE -AgentName 'Windsurf' }
373-
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf'; return $false }
374+
'kilocode' { Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code' }
375+
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode'; return $false }
374376
}
375377
}
376378

@@ -384,6 +386,7 @@ function Update-AllExistingAgents {
384386
if (Test-Path $QWEN_FILE) { if (-not (Update-AgentFile -TargetFile $QWEN_FILE -AgentName 'Qwen Code')) { $ok = $false }; $found = $true }
385387
if (Test-Path $AGENTS_FILE) { if (-not (Update-AgentFile -TargetFile $AGENTS_FILE -AgentName 'Codex/opencode')) { $ok = $false }; $found = $true }
386388
if (Test-Path $WINDSURF_FILE) { if (-not (Update-AgentFile -TargetFile $WINDSURF_FILE -AgentName 'Windsurf')) { $ok = $false }; $found = $true }
389+
if (Test-Path $KILOCODE_FILE) { if (-not (Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code')) { $ok = $false }; $found = $true }
387390
if (-not $found) {
388391
Write-Info 'No existing agent files found, creating default Claude file...'
389392
if (-not (Update-AgentFile -TargetFile $CLAUDE_FILE -AgentName 'Claude Code')) { $ok = $false }
@@ -398,7 +401,7 @@ function Print-Summary {
398401
if ($NEW_FRAMEWORK) { Write-Host " - Added framework: $NEW_FRAMEWORK" }
399402
if ($NEW_DB -and $NEW_DB -ne 'N/A') { Write-Host " - Added database: $NEW_DB" }
400403
Write-Host ''
401-
Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf]'
404+
Write-Info 'Usage: ./update-agent-context.ps1 [-AgentType claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode]'
402405
}
403406

404407
function Main {

src/specify_cli/__init__.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def _github_auth_headers(cli_token: str | None = None) -> dict:
7272
"opencode": "opencode",
7373
"codex": "Codex CLI",
7474
"windsurf": "Windsurf",
75+
"kilocode": "Kilo Code",
7576
}
7677
# Add script type choices
7778
SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"}
@@ -747,7 +748,7 @@ def ensure_executable_scripts(project_path: Path, tracker: StepTracker | None =
747748
@app.command()
748749
def init(
749750
project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here)"),
750-
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, or windsurf"),
751+
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, windsurf, or kilocode"),
751752
script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"),
752753
ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"),
753754
no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"),
@@ -761,7 +762,7 @@ def init(
761762
762763
This command will:
763764
1. Check that required tools are installed (git is optional)
764-
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, or Windsurf)
765+
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, or Kilo Code)
765766
3. Download the appropriate template from GitHub
766767
4. Extract the template to a new project directory or current directory
767768
5. Initialize a fresh git repository (if not --no-git and no existing repo)
@@ -1036,9 +1037,11 @@ def check():
10361037
tracker.add("claude", "Claude Code CLI")
10371038
tracker.add("gemini", "Gemini CLI")
10381039
tracker.add("qwen", "Qwen Code CLI")
1039-
tracker.add("code", "VS Code (for GitHub Copilot)")
1040+
tracker.add("code", "Visual Studio Code")
1041+
tracker.add("code-insiders", "Visual Studio Code Insiders")
10401042
tracker.add("cursor-agent", "Cursor IDE agent (optional)")
10411043
tracker.add("windsurf", "Windsurf IDE (optional)")
1044+
tracker.add("kilocode", "Kilo Code IDE (optional)")
10421045
tracker.add("opencode", "opencode")
10431046
tracker.add("codex", "Codex CLI")
10441047

@@ -1047,10 +1050,10 @@ def check():
10471050
gemini_ok = check_tool_for_tracker("gemini", "https://github.com/google-gemini/gemini-cli", tracker)
10481051
qwen_ok = check_tool_for_tracker("qwen", "https://github.com/QwenLM/qwen-code", tracker)
10491052
code_ok = check_tool_for_tracker("code", "https://code.visualstudio.com/", tracker)
1050-
if not code_ok:
1051-
code_ok = check_tool_for_tracker("code-insiders", "https://code.visualstudio.com/insiders/", tracker)
1053+
code_insiders_ok = check_tool_for_tracker("code-insiders", "https://code.visualstudio.com/insiders/", tracker)
10521054
cursor_ok = check_tool_for_tracker("cursor-agent", "https://cursor.sh/", tracker)
10531055
windsurf_ok = check_tool_for_tracker("windsurf", "https://windsurf.com/", tracker)
1056+
kilocode_ok = check_tool_for_tracker("kilocode", "https://kilocode.com/", tracker)
10541057
opencode_ok = check_tool_for_tracker("opencode", "https://opencode.ai/", tracker)
10551058
codex_ok = check_tool_for_tracker("codex", "https://github.com/openai/codex", tracker)
10561059

@@ -1060,7 +1063,7 @@ def check():
10601063

10611064
if not git_ok:
10621065
console.print("[dim]Tip: Install git for repository management[/dim]")
1063-
if not (claude_ok or gemini_ok or cursor_ok or qwen_ok or windsurf_ok or opencode_ok or codex_ok):
1066+
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):
10641067
console.print("[dim]Tip: Install an AI assistant for the best experience[/dim]")
10651068

10661069

0 commit comments

Comments
 (0)