mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
* feat: add Zed integration * fix: update integrations stats grid to 31 for consistency * fix: address Copilot review feedback - 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) * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: address Copilot review round 2 - 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 * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: address copilot review feedback for zed integration - 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 * fix: refine slash-skill logic and ai-skills validation - 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 * fix: remove unused variables and update ai-skills help text - 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 * fix: add trae_skill_mode to hook invocation for consistency Trae is a SkillsIntegration like Zed/Agy/Devin, so it should also be treated as always-skills-based in hook invocation rendering. * fix: make Agy always skills-based for consistency AgyIntegration is a SkillsIntegration subclass with no --skills option, so it should be treated as always skills-based (like Zed, Devin, Trae). This aligns init.py skill mode detection with extensions.py hook rendering. * fix: gate agy_skill_mode and refactor _render_hook_invocation to use sets Addressed Copilot review comments: - Restored _is_skills_integration guard on agy_skill_mode in init.py to be defensive about runtime integration type. - Refactored _render_hook_invocation() in extensions.py to use always_slash/conditional_slash frozensets instead of individual per-agent booleans, eliminating unused variables (F841) and making it harder for conditions to drift between integrations. - Centralized slash-skill determination so adding a new unconditional slash-skill integration is a one-key addition. * fix: address latest Copilot review comments - Added copilot to CONDITIONAL_SLASH_AGENTS for consistent hook invocation rendering with init.py - Moved always_slash/conditional_slash frozensets to module scope to avoid per-call reallocation - Replaced manual os.chdir() with monkeypatch.chdir() in test - Overrode test_options_include_skills_flag for Zed (no --skills) * fix: address latest Copilot review comments - Removed redundant local import yaml in _register_extension_skills (yaml is already imported at module scope) - Split --ai-skills usage hint into two separate print statements for better readability - Changed integrations count from '33' to '30+' to avoid future drift * fix: re-add _is_skills_integration definition lost in merge The _is_skills_integration variable was accidentally dropped during the web UI merge resolution of upstream/main's removal of legacy --ai flags. Re-added the definition via isinstance(resolved_integration, SkillsIntegration) check so that skill-mode booleans work correctly. * fix: gate zed_skill_mode on _is_skills_integration for consistency Aligns zed_skill_mode with the other skills-based agents (codex, claude, cursor-agent, copilot) which all use _is_skills_integration gating. Since ZedIntegration extends SkillsIntegration, behavior is unchanged. * fix: remove unused claude_skill_mode and cursor_skill_mode locals in _render_hook_invocation These variables became unused after the refactor to ALWAYS_SLASH_AGENTS / CONDITIONAL_SLASH_AGENTS sets. Claude and Cursor-Agent are now handled by the CONDITIONAL_SLASH_AGENTS path, so the separate boolean locals are dead code. Fixes ruff F841 and addresses Copilot review feedback that was repeated across multiple review rounds. * fix: align agy/trae invocation format in init next-steps with hook rendering and build_command_invocation - Moved agy and trae from '-<name>' (dollar/Codex format) to '/speckit-<name>' (slash format) in _display_cmd() to match: - HookExecutor._render_hook_invocation() (ALWAYS_SLASH_AGENTS for trae, CONDITIONAL_SLASH_AGENTS for agy) - SkillsIntegration.build_command_invocation() (default: /speckit-<name>) - The '$' prefix is specific to Codex; all other skills agents use '/'. * fix: address Copilot review comments on hook invocation consistency - Add is_slash_skills_agent() helper to extensions.py to centralize the agent-to-invocation-format mapping, reducing drift risk between HookExecutor._render_hook_invocation() and init.py _display_cmd() - Use the shared helper in both locations; init.py now imports and delegates to is_slash_skills_agent() instead of maintaining its own per-agent boolean matrix - Fix test_hooks_render_skill_invocation to use ai_skills=False, proving Zed renders /speckit-<name> unconditionally - Add parameterized TestSlashSkillsSets covering all agents in ALWAYS_SLASH_AGENTS and CONDITIONAL_SLASH_AGENTS with ai_skills both true and false * fix: address Copilot review comments on type safety and test API - Make is_slash_skills_agent() accept str | None to match its call sites (init_options.get("ai") can return None) - Refactor TestSlashSkillsSets to use public execute_hook() API instead of private _render_hook_invocation() method * fix: address Copilot review comments on typing and naming clarity - Add from __future__ import annotations to extensions.py so PEP 604 unions (str | None) are safe regardless of Python version - Add clarifying _ai_skills_enabled local variable in init.py's _display_cmd() to make the semantic meaning explicit when passing it to is_slash_skills_agent() * fix: move invocation-style logic into shared _invocation_style module - Extract ALWAYS_SLASH_AGENTS, CONDITIONAL_SLASH_AGENTS, and is_slash_skills_agent() from extensions.py into new _invocation_style.py module, eliminating the awkward init.py -> extensions.py import dependency for invocation-style decision logic - Both HookExecutor._render_hook_invocation() and init.py _display_cmd() now import from the shared module instead of one subsystem importing from the other - Revert /SKILL.md change: the leading slash is semantically significant (path component vs filename suffix) * fix: add None guard before i.options() in test_options_include_skills_flag get_integration() returns IntegrationBase | None, so i.options() is a type error without a None check. * fix: override test_options_include_skills_flag for Zed (always skills, no --skills flag) Zed is always skills-based and doesn't expose a --skills option. Override the inherited base test to assert --skills is absent. * fix: rename test and skip inherited test_options_include_skills_flag for Zed - Skip inherited test_options_include_skills_flag (not applicable — Zed is always skills-based with no --skills flag) - Add test_options_do_not_include_skills_flag with correct name matching the assertion (--skills is absent) * fix: add defensive non-string check in is_slash_skills_agent Reject non-string values for selected_ai to prevent TypeError from set membership checks when persisted init-options contain corrupted data (e.g. list or dict instead of string). --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
155 lines
5.2 KiB
Markdown
155 lines
5.2 KiB
Markdown
<div class="landing-hero">
|
|
|
|
# GitHub Spec Kit
|
|
|
|
**Define what to build before building it — with any AI coding agent.**
|
|
|
|
Spec Kit is a toolkit for [Spec-Driven Development](concepts/sdd.md) (SDD), a methodology that puts specifications at the center of AI-assisted software development. Instead of jumping straight to code, you describe _what_ to build, refine it through structured phases, and let your AI coding agent implement it.
|
|
|
|
<a href="installation.md" class="btn btn-primary btn-lg">Install Spec Kit</a>
|
|
<a href="quickstart.md" class="btn btn-outline-primary btn-lg">Quick Start</a>
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
<div class="pillar-grid">
|
|
|
|
<div class="pillar-card">
|
|
|
|
### Spec-driven by default
|
|
|
|
The core SDD process ships ready to use: **Spec → Plan → Tasks → Implement**.
|
|
|
|
Define what to build before building it. Rich templates, quality checklists, and cross-artifact analysis come out of the box. Each phase produces a Markdown artifact that feeds the next — giving your AI coding agent structured context instead of ad-hoc prompts.
|
|
|
|
<a href="quickstart.md" class="pillar-link">Walk through the workflow →</a>
|
|
|
|
</div>
|
|
|
|
<div class="pillar-card">
|
|
|
|
### Use any coding agent
|
|
|
|
<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.
|
|
|
|
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.
|
|
|
|
<a href="reference/integrations.md" class="pillar-link">See all integrations →</a>
|
|
|
|
</div>
|
|
|
|
<div class="pillar-card">
|
|
|
|
### Make it your own
|
|
|
|
<span class="pillar-stat">105 community extensions</span> (60+ authors), <span class="pillar-stat">22 presets</span>, and growing. Tune the core process with presets, extend it with extensions, orchestrate it with workflows, or replace it entirely. Build and publish your own.
|
|
|
|
Including entirely different SDD processes:
|
|
|
|
- **AIDE** — 7-step AI-driven engineering lifecycle
|
|
- **Canon** — baseline-driven workflows (spec-first, code-first, spec-drift)
|
|
- **Product Forge** — product-management-oriented SDD
|
|
- **FX→.NET** — end-to-end .NET Framework migration across 7 phases
|
|
- **MAQA** — multi-agent orchestration with quality assurance gates
|
|
|
|
<a href="community/presets.md" class="pillar-link">Browse community presets →</a>
|
|
|
|
</div>
|
|
|
|
<div class="pillar-card">
|
|
|
|
### Integrate into your organization
|
|
|
|
Works offline, behind firewalls, and on **Windows, macOS, and Linux**. Host your own extension and preset catalogs so your organization controls what gets installed.
|
|
|
|
Community extensions like CI Guard and Architecture Guard add compliance gates and governance that fit the way your team already works.
|
|
|
|
<a href="installation.md" class="pillar-link">Installation guide →</a>
|
|
<a href="reference/extensions.md" class="pillar-link">Extensions reference →</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
<div class="community-section">
|
|
|
|
## Built by the community
|
|
|
|
**200+ contributors** power the Spec Kit ecosystem — from core integrations to entirely new development processes. Anyone can create and publish an extension, preset, or workflow.
|
|
|
|
<div class="stats-grid">
|
|
<div class="stat-item">
|
|
<span class="stat-number">106K+</span>
|
|
<span class="stat-label">GitHub stars</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-number">200+</span>
|
|
<span class="stat-label">Contributors</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-number">30+</span>
|
|
<span class="stat-label">Integrations</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-number">105</span>
|
|
<span class="stat-label">Extensions</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-number">22</span>
|
|
<span class="stat-label">Presets</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-number">4</span>
|
|
<span class="stat-label">Friends projects</span>
|
|
</div>
|
|
</div>
|
|
|
|
<a href="community/presets.md">Presets</a> · <a href="community/walkthroughs.md">Walkthroughs</a> · <a href="community/friends.md">Friends</a>
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
## Explore the docs
|
|
|
|
<div class="nav-cards">
|
|
<a href="quickstart.md" class="nav-card">
|
|
<strong>Getting Started</strong>
|
|
<span>Install, configure, and run your first SDD workflow</span>
|
|
</a>
|
|
<a href="reference/overview.md" class="nav-card">
|
|
<strong>Reference</strong>
|
|
<span>Core commands, integrations, extensions, presets, and workflows</span>
|
|
</a>
|
|
<a href="community/overview.md" class="nav-card">
|
|
<strong>Community</strong>
|
|
<span>Extensions, presets, walkthroughs, and friend projects</span>
|
|
</a>
|
|
<a href="local-development.md" class="nav-card">
|
|
<strong>Development</strong>
|
|
<span>Contribute to Spec Kit</span>
|
|
</a>
|
|
<a href="concepts/sdd.md" class="nav-card">
|
|
<strong>What is SDD?</strong>
|
|
<span>The philosophy behind Spec-Driven Development</span>
|
|
</a>
|
|
</div>
|
|
|
|
---
|
|
|
|
<div class="footer-cta">
|
|
|
|
```bash
|
|
uvx --from git+https://github.com/github/spec-kit.git
|
|
specify init my-project --integration copilot
|
|
```
|
|
|
|
Ready to start? Follow the [Quick Start Guide](quickstart.md).
|
|
|
|
</div>
|
|
|
|
<p class="text-end small text-body-secondary">Last updated: May 27, 2026</p>
|