Skip to content

Add Zed integration#2780

Open
arrrrny wants to merge 12 commits into
github:mainfrom
arrrrny:feat/2779-zed-integration
Open

Add Zed integration#2780
arrrrny wants to merge 12 commits into
github:mainfrom
arrrrny:feat/2779-zed-integration

Conversation

@arrrrny
Copy link
Copy Markdown

@arrrrny arrrrny commented May 31, 2026

Summary

  • add a built-in zed integration that installs Spec Kit commands as Zed skills under .agents/skills
  • render Zed skill invocations correctly in init next-steps output and hook messages
  • add integration coverage for Zed plus registry/list assertions and docs updates

Testing

  • uv run --extra test python3 -m pytest tests/integrations/test_registry.py tests/integrations/test_integration_subcommand.py::TestIntegrationList::test_list_shows_available_integrations tests/integrations/test_integration_zed.py -q

Closes #2779

@arrrrny arrrrny requested a review from mnriem as a code owner May 31, 2026 08:39
Copilot AI review requested due to automatic review settings May 31, 2026 08:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds Zed editor as a new skills-based integration that installs Spec Kit commands as .agents/skills/speckit-<name>/SKILL.md files invokable via Zed's slash-command menu.

Changes:

  • New ZedIntegration class registered in the integrations registry
  • Hook invocation rendering and init-flow handling for zed skill mode
  • Documentation, registry, and integration-test updates including a new test_integration_zed.py

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/specify_cli/integrations/zed/init.py New ZedIntegration (skills-based, .agents/skills, AGENTS.md)
src/specify_cli/integrations/init.py Imports and registers ZedIntegration
src/specify_cli/extensions.py Adds zed_skill_mode branch rendering /skill-name invocations
src/specify_cli/commands/init.py Adds Zed to skill-mode flags, post-init step, and display command logic
docs/reference/integrations.md Adds Zed row to integrations table
docs/index.md Bumps integration count from 30 to 31 and lists Zed
tests/integrations/test_registry.py Adds zed to expected-keys list
tests/integrations/test_integration_subcommand.py Asserts zed appears in list output
tests/integrations/test_integration_zed.py New tests for Zed integration and hook invocation rendering

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/specify_cli/integrations/zed/__init__.py Outdated
Copy link
Copy Markdown
Collaborator

@mnriem mnriem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address Copilot feedback

@arrrrny
Copy link
Copy Markdown
Author

arrrrny commented Jun 1, 2026

Side note, I have been using it last couple days and it works as expected

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 9/9 changed files
  • Comments generated: 1

Comment thread docs/index.md Outdated
@mnriem
Copy link
Copy Markdown
Collaborator

mnriem commented Jun 2, 2026

Please address Copilot feedback and the test & lint errors

Copilot AI review requested due to automatic review settings June 2, 2026 23:10
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.

Comment thread src/specify_cli/commands/init.py Outdated
Comment thread src/specify_cli/commands/init.py
Comment thread src/specify_cli/commands/init.py Outdated
Comment thread src/specify_cli/extensions.py Outdated
Comment thread src/specify_cli/extensions.py Outdated
Comment thread src/specify_cli/integrations/zed/__init__.py Outdated
- Remove non-actionable --skills flag from ZedIntegration (Zed is always
  skills-based, like Agy)
- Align zed_skill_mode predicate with ai_skills for consistency across
  init output and hook rendering
- Consolidate claude/cursor/zed slash-skill return blocks in
  _render_hook_invocation to reduce duplication
- Override test_options_include_skills_flag for Zed (no --skills flag)
@arrrrny arrrrny requested a review from mnriem June 2, 2026 23:22
@mnriem mnriem requested a review from Copilot June 3, 2026 13:43
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 9/9 changed files
  • Comments generated: 1

Comment thread src/specify_cli/integrations/zed/__init__.py Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 3, 2026 14:28
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Comment thread src/specify_cli/extensions.py Outdated
Comment thread tests/integrations/test_integration_zed.py
- Make zed_skill_mode unconditional in hook rendering (Zed is always
  skills-based, no --skills option)
- Add test_init_persists_ai_skills_for_zed that exercises the actual
  CLI init path and verifies HookExecutor renders /speckit-plan
  without manual init-options manipulation
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 9/9 changed files
  • Comments generated: 2

Comment thread docs/index.md Outdated
Comment thread docs/index.md Outdated
Copy link
Copy Markdown
Collaborator

@mnriem mnriem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address Copilot feedback

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 4, 2026 03:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comment thread docs/index.md
Comment thread docs/index.md Outdated
Comment thread tests/integrations/test_integration_zed.py
arrrrny and others added 2 commits June 4, 2026 07:46
- Update integration count from 31 to 33 in docs/index.md (32 integrations + Generic)
- Make zed_skill_mode unconditional to match extensions.py behavior
- Consolidate slash-skill integrations into a set for consistency
- Move os import to module level in test_integration_zed.py
Copilot AI review requested due to automatic review settings June 4, 2026 04:53
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comment thread src/specify_cli/commands/init.py Outdated
Comment thread src/specify_cli/extensions.py
Comment thread src/specify_cli/extensions.py Outdated
- Fix slash-skill integrations: Claude/Cursor require ai_skills=true; Zed/Agy/Devin are always skills
- Allow --ai-skills with --integration (not just --ai) to fix validation error
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 9/9 changed files
  • Comments generated: 2

Comment on lines +2594 to 2605
codex_skill_mode = selected_ai == "codex" and bool(
init_options.get("ai_skills")
)
claude_skill_mode = selected_ai == "claude" and bool(
init_options.get("ai_skills")
)
kimi_skill_mode = selected_ai == "kimi"
cursor_skill_mode = selected_ai == "cursor-agent" and bool(init_options.get("ai_skills"))
cursor_skill_mode = selected_ai == "cursor-agent" and bool(
init_options.get("ai_skills")
)
zed_skill_mode = selected_ai == "zed"
cline_mode = selected_ai == "cline"
Comment on lines +154 to +158
ai_skills: bool = typer.Option(
False,
"--ai-skills",
help="Install Prompt.MD templates as agent skills (requires --ai)",
),
- Add agy_skill_mode and devin_skill_mode variables to fix F841 lint error
- Use all skill mode variables in the slash-skill conditional check
- Update --ai-skills help text to reflect it works with --integration too
Copilot AI review requested due to automatic review settings June 4, 2026 15:37
@arrrrny arrrrny force-pushed the feat/2779-zed-integration branch from 05b7fac to 04d3eb3 Compare June 4, 2026 15:37
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Comment on lines 2596 to +2633
init_options = self._load_init_options()
selected_ai = init_options.get("ai")
codex_skill_mode = selected_ai == "codex" and bool(init_options.get("ai_skills"))
claude_skill_mode = selected_ai == "claude" and bool(init_options.get("ai_skills"))
codex_skill_mode = selected_ai == "codex" and bool(
init_options.get("ai_skills")
)
claude_skill_mode = selected_ai == "claude" and bool(
init_options.get("ai_skills")
)
kimi_skill_mode = selected_ai == "kimi"
cursor_skill_mode = selected_ai == "cursor-agent" and bool(init_options.get("ai_skills"))
cursor_skill_mode = selected_ai == "cursor-agent" and bool(
init_options.get("ai_skills")
)
zed_skill_mode = selected_ai == "zed"
agy_skill_mode = selected_ai == "agy"
devin_skill_mode = selected_ai == "devin"
cline_mode = selected_ai == "cline"

skill_name = self._skill_name_from_command(command_id)
if codex_skill_mode and skill_name:
return f"${skill_name}"
if claude_skill_mode and skill_name:
return f"/{skill_name}"
if kimi_skill_mode and skill_name:
return f"/skill:{skill_name}"
if cursor_skill_mode and skill_name:
return f"/{skill_name}"
if cline_mode:
from .integrations.cline import format_cline_command_name

return f"/{format_cline_command_name(command_id)}"

# Slash-skill integrations
# - Claude/Cursor: conditional on ai_skills flag
# - Zed/Agy/Devin: always skills-based
if skill_name and (
claude_skill_mode
or cursor_skill_mode
or zed_skill_mode
or agy_skill_mode
or devin_skill_mode
):
return f"/{skill_name}"
Comment on lines 925 to +945
kimi_skill_mode = selected_ai == "kimi"
agy_skill_mode = selected_ai == "agy" and _is_skills_integration
trae_skill_mode = selected_ai == "trae"
cursor_agent_skill_mode = selected_ai == "cursor-agent" and (ai_skills or _is_skills_integration)
cursor_agent_skill_mode = selected_ai == "cursor-agent" and (
ai_skills or _is_skills_integration
)
copilot_skill_mode = selected_ai == "copilot" and _is_skills_integration
devin_skill_mode = selected_ai == "devin"
zed_skill_mode = selected_ai == "zed"
cline_skill_mode = selected_ai == "cline"
native_skill_mode = codex_skill_mode or claude_skill_mode or kimi_skill_mode or agy_skill_mode or trae_skill_mode or cursor_agent_skill_mode or copilot_skill_mode or devin_skill_mode
native_skill_mode = (
codex_skill_mode
or claude_skill_mode
or kimi_skill_mode
or agy_skill_mode
or trae_skill_mode
or cursor_agent_skill_mode
or copilot_skill_mode
or devin_skill_mode
or zed_skill_mode
)
Comment thread docs/index.md
### Use any coding agent

<span class="pillar-stat">30 integrations</span> — Copilot, Gemini, Codex, Windsurf, Claude, Forge, Kiro, and more. Switch freely between agents with a single command. No lock-in.
<span class="pillar-stat">33 integrations</span> — Copilot, Gemini, Codex, Windsurf, Zed, Claude, Forge, Kiro, and more. Switch freely between agents with a single command. No lock-in.
Comment thread docs/index.md
</div>
<div class="stat-item">
<span class="stat-number">30</span>
<span class="stat-number">33</span>
@mnriem
Copy link
Copy Markdown
Collaborator

mnriem commented Jun 4, 2026

Please address Copilot feedback and resolve conflicts by rebasing on upstream/main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Agent]: Add support for Zed

3 participants