Skip to content

Commit c47dd2b

Browse files
BenBtgCopilot
andauthored
chore: retire Windsurf integration β€” absorbed into Cognition Devin (#3168) (#3213)
* chore: retire windsurf integration β€” absorbed into Cognition Devin (#3168) windsurf.com now permanently redirects to devin.ai/desktop following acquisition. Remove subpackage, registry/catalog entries, docs, and tests; re-point sample-agent test fixtures to Kilo Code. Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: remove stale Windsurf support references Assisted-by: GitHub Copilot (model: gpt-5.3-codex, autonomous) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: fix Kilo Code command path in upgrade guide Assisted-by: GitHub Copilot (model: gpt-5.3-codex, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * chore: align integration lists after rebase Assisted-by: GitHub Copilot (model: gpt-5.3-codex, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * docs: align kilocode example with runtime behavior Assisted-by: GitHub Copilot (model: gpt-5.3-codex, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 844c736 commit c47dd2b

17 files changed

Lines changed: 32 additions & 79 deletions

β€Ž.github/ISSUE_TEMPLATE/agent_request.ymlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ body:
88
value: |
99
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
1010
11-
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, Windsurf, ZCode, Zed
11+
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
1212
1313
- type: input
1414
id: agent-name

β€Ž.github/ISSUE_TEMPLATE/bug_report.ymlβ€Ž

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ body:
9494
- SHAI
9595
- Tabnine CLI
9696
- Trae
97-
- Windsurf
9897
- ZCode
9998
- Zed
10099
- Not applicable

β€Ž.github/ISSUE_TEMPLATE/feature_request.ymlβ€Ž

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ body:
8888
- SHAI
8989
- Tabnine CLI
9090
- Trae
91-
- Windsurf
9291
- ZCode
9392
- Zed
9493
- Not applicable

β€ŽAGENTS.mdβ€Ž

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ src/specify_cli/integrations/
2323
β”‚ └── __init__.py # ClaudeIntegration class
2424
β”œβ”€β”€ gemini/ # Example: TomlIntegration subclass
2525
β”‚ └── __init__.py
26-
β”œβ”€β”€ windsurf/ # Example: MarkdownIntegration subclass
26+
β”œβ”€β”€ kilocode/ # Example: MarkdownIntegration subclass
2727
β”‚ └── __init__.py
2828
β”œβ”€β”€ copilot/ # Example: IntegrationBase subclass (custom setup)
2929
β”‚ └── __init__.py
@@ -52,25 +52,25 @@ Most agents only need `MarkdownIntegration` β€” a minimal subclass with zero met
5252

5353
Create `src/specify_cli/integrations/<package_dir>/__init__.py`, where `<package_dir>` is the Python-safe directory name derived from `<key>`: use the key as-is when it contains no hyphens (e.g., key `"gemini"` β†’ `gemini/`), or replace hyphens with underscores when it does (e.g., key `"kiro-cli"` β†’ `kiro_cli/`). The `IntegrationBase.key` class attribute always retains the original hyphenated value, since that is what the CLI and registry use. For CLI-based integrations (`requires_cli: True`), the `key` should match the actual CLI tool name (the executable users install and run) so CLI checks can resolve it correctly. For IDE-based integrations (`requires_cli: False`), use the canonical integration identifier instead.
5454

55-
**Minimal example β€” Markdown agent (Windsurf):**
55+
**Minimal example β€” Markdown agent (Kilo Code):**
5656

5757
```python
58-
"""Windsurf IDE integration."""
58+
"""Kilo Code IDE integration."""
5959

6060
from ..base import MarkdownIntegration
6161

6262

63-
class WindsurfIntegration(MarkdownIntegration):
64-
key = "windsurf"
63+
class KilocodeIntegration(MarkdownIntegration):
64+
key = "kilocode"
6565
config = {
66-
"name": "Windsurf",
67-
"folder": ".windsurf/",
66+
"name": "Kilo Code",
67+
"folder": ".kilocode/",
6868
"commands_subdir": "workflows",
6969
"install_url": None,
7070
"requires_cli": False,
7171
}
7272
registrar_config = {
73-
"dir": ".windsurf/workflows",
73+
"dir": ".kilocode/workflows",
7474
"format": "markdown",
7575
"args": "$ARGUMENTS",
7676
"extension": ".md",
@@ -148,7 +148,7 @@ class CodexIntegration(SkillsIntegration):
148148
| `config` | Class attribute (dict) | Agent metadata: `name`, `folder`, `commands_subdir`, `install_url`, `requires_cli` |
149149
| `registrar_config` | Class attribute (dict) | Command output config: `dir`, `format`, `args` placeholder, file `extension` |
150150

151-
**Key design rule:** For CLI-based integrations (`requires_cli: True`), `key` must be the actual executable name (e.g., `"cursor-agent"` not `"cursor"`). This ensures `shutil.which(key)` works for CLI-tool checks without special-case mappings. IDE-based integrations (`requires_cli: False`) should use their canonical identifier (e.g., `"windsurf"`, `"copilot"`).
151+
**Key design rule:** For CLI-based integrations (`requires_cli: True`), `key` must be the actual executable name (e.g., `"cursor-agent"` not `"cursor"`). This ensures `shutil.which(key)` works for CLI-tool checks without special-case mappings. IDE-based integrations (`requires_cli: False`) should use their canonical identifier (e.g., `"kilocode"`, `"copilot"`).
152152

153153
### 3. Register it
154154

@@ -201,8 +201,8 @@ Only add custom setup logic when the agent needs non-standard behavior. Integrat
201201
specify init my-project --integration <key>
202202
203203
# Verify files were created in the commands directory configured by
204-
# config["folder"] + config["commands_subdir"] (for example, .windsurf/workflows/)
205-
ls -R my-project/.windsurf/workflows/
204+
# config["folder"] + config["commands_subdir"] (for example, .kilocode/workflows/)
205+
ls -R my-project/.kilocode/workflows/
206206
207207
# Uninstall cleanly
208208
cd my-project && specify integration uninstall <key>

β€Ždocs/index.mdβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Define what to build before building it. Rich templates, quality checklists, and
3131

3232
### Use any coding agent
3333

34-
<span class="pillar-stat">30+ integrations</span> β€” Copilot, Gemini, Codex, Windsurf, Zed, Claude, Forge, Kiro, and more. Switch freely between agents with a single command. No lock-in.
34+
<span class="pillar-stat">30+ integrations</span> β€” Copilot, Gemini, Codex, Kilo Code, Zed, Claude, Forge, Kiro, and more. Switch freely between agents with a single command. No lock-in.
3535

3636
Run `specify init` with your agent of choice and Spec Kit sets up the right command files, context rules, and directory structures automatically. If your agent isn't listed, the `generic` integration is an escape hatch for any tool.
3737

β€Ždocs/reference/integrations.mdβ€Ž

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
3838
| [SHAI (OVHcloud)](https://github.com/ovh/shai) | `shai` | |
3939
| [Tabnine CLI](https://docs.tabnine.com/main/getting-started/tabnine-cli) | `tabnine` | |
4040
| [Trae](https://www.trae.ai/) | `trae` | Skills-based integration; skills are installed automatically |
41-
| [Windsurf](https://windsurf.com/) | `windsurf` | |
4241
| [ZCode](https://zcode.z.ai/) | `zcode` | Skills-based integration; installs skills into `.zcode/skills/` and invokes them as `$speckit-<command>` |
4342
| [Zed](https://zed.dev/) | `zed` | Skills-based integration; installs skills into `.agents/skills` and invokes them as `/speckit-<command>` |
4443
| Generic | `generic` | Bring your own agent β€” use `--integration generic --integration-options="--commands-dir <path>"` for AI coding agents not listed above |
@@ -272,7 +271,6 @@ The currently declared multi-install safe integrations are:
272271
| `shai` | `.shai/commands`, `SHAI.md` |
273272
| `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` |
274273
| `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
275-
| `windsurf` | `.windsurf/workflows`, `.windsurf/rules/specify-rules.md` |
276274
| `zcode` | `.zcode/skills`, `ZCODE.md` |
277275

278276
Integrations that share a context file or command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
@@ -287,7 +285,7 @@ Run `specify integration list` to see all available integrations with their keys
287285

288286
### Do I need the AI coding agent installed to use an integration?
289287

290-
CLI-based integrations (like Claude Code, Gemini CLI) require the tool to be installed. IDE-based integrations (like Windsurf, Cursor) work through the IDE itself. Some agents like GitHub Copilot support both IDE and CLI usage. `specify integration list` shows which type each integration is.
288+
CLI-based integrations (like Claude Code, Gemini CLI) require the tool to be installed. IDE-based integrations (like Cursor) work through the IDE itself. Some agents like GitHub Copilot support both IDE and CLI usage. `specify integration list` shows which type each integration is.
291289

292290
### When should I use `upgrade` vs `switch`?
293291

β€Ždocs/upgrade.mdβ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,15 @@ cp -r .specify/scripts .specify/scripts-backup
185185

186186
### 3. Duplicate slash commands (IDE-based agents)
187187

188-
Some IDE-based agents (like Kilo Code, Windsurf) may show **duplicate slash commands** after upgradingβ€”both old and new versions appear.
188+
Some IDE-based agents (like Kilo Code, Roo Code) may show **duplicate slash commands** after upgradingβ€”both old and new versions appear.
189189

190190
**Solution:** Manually delete the old command files from your agent's folder.
191191

192192
**Example for Kilo Code:**
193193

194194
```bash
195195
# Navigate to the agent's commands folder
196-
cd .kilocode/rules/
196+
cd .kilocode/workflows/
197197

198198
# List files and identify duplicates
199199
ls -la
@@ -242,11 +242,11 @@ mv /tmp/constitution-backup.md .specify/memory/constitution.md
242242

243243
### Scenario 3: "I see duplicate slash commands in my IDE"
244244

245-
This happens with IDE-based agents (Kilo Code, Windsurf, Roo Code, etc.).
245+
This happens with IDE-based agents (Kilo Code, Roo Code, Cline, etc.).
246246

247247
```bash
248-
# Find the agent folder (example: .kilocode/rules/)
249-
cd .kilocode/rules/
248+
# Find the agent folder (example: .kilocode/workflows/)
249+
cd .kilocode/workflows/
250250

251251
# List all files
252252
ls -la

β€Žintegrations/catalog.jsonβ€Ž

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,6 @@
4848
"repository": "https://github.com/github/spec-kit",
4949
"tags": ["ide"]
5050
},
51-
"windsurf": {
52-
"id": "windsurf",
53-
"name": "Windsurf",
54-
"version": "1.0.0",
55-
"description": "Windsurf IDE workflow integration",
56-
"author": "spec-kit-core",
57-
"repository": "https://github.com/github/spec-kit",
58-
"tags": ["ide"]
59-
},
6051
"amp": {
6152
"id": "amp",
6253
"name": "Amp",

β€Žpresets/ARCHITECTURE.mdβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ The `CommandRegistrar` renders commands differently per agent:
9999

100100
| Agent | Format | Extension | Arg placeholder |
101101
|-------|--------|-----------|-----------------|
102-
| Claude, Cursor, opencode, Windsurf, etc. | Markdown | `.md` | `$ARGUMENTS` |
102+
| Claude, Kilo Code, opencode, Roo Code, etc. | Markdown | `.md` | `$ARGUMENTS` |
103103
| Copilot | Markdown | `.agent.md` + `.prompt.md` | `$ARGUMENTS` |
104104
| Gemini, Qwen, Tabnine | TOML | `.toml` | `{{args}}` |
105105

β€Žsrc/specify_cli/integrations/__init__.pyβ€Ž

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ def _register_builtins() -> None:
8080
from .tabnine import TabnineIntegration
8181
from .trae import TraeIntegration
8282
from .vibe import VibeIntegration
83-
from .windsurf import WindsurfIntegration
8483
from .zcode import ZcodeIntegration
8584
from .zed import ZedIntegration
8685

@@ -118,7 +117,6 @@ def _register_builtins() -> None:
118117
_register(TabnineIntegration())
119118
_register(TraeIntegration())
120119
_register(VibeIntegration())
121-
_register(WindsurfIntegration())
122120
_register(ZcodeIntegration())
123121
_register(ZedIntegration())
124122

0 commit comments

Comments
Β (0)