7.4 KiB
AGENTS.md
About Spec Kit and Specify
GitHub Spec Kit is a comprehensive toolkit for implementing Spec-Driven Development (SDD) - a methodology that emphasizes creating clear specifications before implementation. The toolkit includes templates, scripts, and workflows that guide development teams through a structured approach to building software.
Specify CLI is the command-line interface that bootstraps projects with the Spec Kit framework. It sets up the necessary directory structures, templates, and AI agent integrations to support the Spec-Driven Development workflow.
The toolkit supports multiple AI coding assistants, allowing teams to use their preferred tools while maintaining consistent project structure and development practices.
Adding New Agent Support
This section explains how to add support for new AI agents/assistants to the Specify CLI. Use this guide as a reference when integrating new AI tools into the Spec-Driven Development workflow.
Overview
Specify supports multiple AI agents by generating agent-specific command files and directory structures when initializing projects. Each agent has its own conventions for:
- Command file formats (Markdown, TOML, etc.)
- Directory structures (
.claude/commands/,.windsurf/workflows/, etc.) - Command invocation patterns (slash commands, CLI tools, etc.)
- Argument passing conventions (
$ARGUMENTS,{{args}}, etc.)
Current Supported Agents
| Agent | Directory | Format | CLI Tool | Description |
|---|---|---|---|---|
| Claude Code | .claude/commands/ |
Markdown | claude |
Anthropic's Claude Code CLI |
| Gemini CLI | .gemini/commands/ |
TOML | gemini |
Google's Gemini CLI |
| GitHub Copilot | .github/prompts/ |
Markdown | N/A (IDE-based) | GitHub Copilot in VS Code |
| Cursor | .cursor/commands/ |
Markdown | cursor-agent |
Cursor CLI |
| Qwen Code | .qwen/commands/ |
TOML | qwen |
Alibaba's Qwen Code CLI |
| opencode | .opencode/command/ |
Markdown | opencode |
opencode CLI |
| Windsurf | .windsurf/workflows/ |
Markdown | N/A (IDE-based) | Windsurf IDE workflows |
Step-by-Step Integration Guide
Follow these steps to add a new agent (using Windsurf as an example):
1. Update AI_CHOICES Constant
Add the new agent to the AI_CHOICES dictionary in src/specify_cli/__init__.py:
AI_CHOICES = {
"copilot": "GitHub Copilot",
"claude": "Claude Code",
"gemini": "Gemini CLI",
"cursor": "Cursor",
"qwen": "Qwen Code",
"opencode": "opencode",
"windsurf": "Windsurf" # Add new agent here
}
2. Update CLI Help Text
Update all help text and examples to include the new agent:
- Command option help:
--aiparameter description - Function docstrings and examples
- Error messages with agent lists
3. Update Release Package Script
Modify .github/workflows/scripts/create-release-packages.sh:
Add to ALL_AGENTS array:
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf)
Add case statement for directory structure:
case $agent in
# ... existing cases ...
windsurf)
mkdir -p "$base_dir/.windsurf/workflows"
generate_commands windsurf md "\$ARGUMENTS" "$base_dir/.windsurf/workflows" "$script" ;;
esac
4. Update Agent Context Scripts
Bash script (scripts/bash/update-agent-context.sh):
Add file variable:
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
Add to case statement:
case "$AGENT_TYPE" in
# ... existing cases ...
windsurf) update_agent_file "$WINDSURF_FILE" "Windsurf" ;;
"")
# ... existing checks ...
[ -f "$WINDSURF_FILE" ] && update_agent_file "$WINDSURF_FILE" "Windsurf";
# Update default creation condition
;;
esac
PowerShell script (scripts/powershell/update-agent-context.ps1):
Add file variable:
$windsurfFile = Join-Path $repoRoot '.windsurf/rules/specify-rules.md'
Add to switch statement:
switch ($AgentType) {
# ... existing cases ...
'windsurf' { Update-AgentFile $windsurfFile 'Windsurf' }
'' {
foreach ($pair in @(
# ... existing pairs ...
@{file=$windsurfFile; name='Windsurf'}
)) {
if (Test-Path $pair.file) { Update-AgentFile $pair.file $pair.name }
}
# Update default creation condition
}
}
5. Update CLI Tool Checks (Optional)
For agents that require CLI tools, add checks in the check() command and agent validation:
# In check() command
tracker.add("windsurf", "Windsurf IDE (optional)")
windsurf_ok = check_tool_for_tracker("windsurf", "https://windsurf.com/", tracker)
# In init validation (only if CLI tool required)
elif selected_ai == "windsurf":
if not check_tool("windsurf", "Install from: https://windsurf.com/"):
console.print("[red]Error:[/red] Windsurf CLI is required for Windsurf projects")
agent_tool_missing = True
Note: Skip CLI checks for IDE-based agents (Copilot, Windsurf).
Agent Categories
CLI-Based Agents
Require a command-line tool to be installed:
- Claude Code:
claudeCLI - Gemini CLI:
geminiCLI - Cursor:
cursor-agentCLI - Qwen Code:
qwenCLI - opencode:
opencodeCLI
IDE-Based Agents
Work within integrated development environments:
- GitHub Copilot: Built into VS Code/compatible editors
- Windsurf: Built into Windsurf IDE
Command File Formats
Markdown Format
Used by: Claude, Cursor, opencode, Windsurf
---
description: "Command description"
---
Command content with {SCRIPT} and $ARGUMENTS placeholders.
TOML Format
Used by: Gemini, Qwen
description = "Command description"
prompt = """
Command content with {SCRIPT} and {{args}} placeholders.
"""
Directory Conventions
- CLI agents: Usually
.<agent-name>/commands/ - IDE agents: Follow IDE-specific patterns:
- Copilot:
.github/prompts/ - Cursor:
.cursor/commands/ - Windsurf:
.windsurf/workflows/
- Copilot:
Argument Patterns
Different agents use different argument placeholders:
- Markdown/prompt-based:
$ARGUMENTS - TOML-based:
{{args}} - Script placeholders:
{SCRIPT}(replaced with actual script path) - Agent placeholders:
__AGENT__(replaced with agent name)
Testing New Agent Integration
- Build test: Run package creation script locally
- CLI test: Test
specify init --ai <agent>command - File generation: Verify correct directory structure and files
- Command validation: Ensure generated commands work with the agent
- Context update: Test agent context update scripts
Common Pitfalls
- Forgetting update scripts: Both bash and PowerShell scripts must be updated
- Missing CLI checks: Only add for agents that actually have CLI tools
- Wrong argument format: Use correct placeholder format for each agent type
- Directory naming: Follow agent-specific conventions exactly
- Help text inconsistency: Update all user-facing text consistently
Future Considerations
When adding new agents:
- Consider the agent's native command/workflow patterns
- Ensure compatibility with the Spec-Driven Development process
- Document any special requirements or limitations
- Update this guide with lessons learned
This documentation should be updated whenever new agents are added to maintain accuracy and completeness.