* docs: sync AGENTS.md with AGENT_CONFIG for missing agents Add Antigravity (agy) and Mistral Vibe (vibe) to the supported agents table — both exist in AGENT_CONFIG but were missing from documentation. Fix Agent Categories section: - Move Cursor from CLI-Based to IDE-Based (requires_cli is False) - Add missing CLI agents: Codex, Auggie, iFlow - Add missing IDE agents: Kilo Code, Roo Code, Trae, Antigravity Update Command File Formats and Directory Conventions sections to include all agents that were previously undocumented. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: address Copilot review feedback on AGENTS.md - Fix Cursor table entry: CLI Tool → N/A (IDE-based), matches requires_cli=False in AGENT_CONFIG - Fix Antigravity directory: .agent/commands/ → .agent/skills/ (skills-based per AGENT_SKILLS_MIGRATIONS) - Add opencode singular command exception to Directory Conventions (.opencode/command/) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add --ai key hint for Cursor in AGENTS.md Cursor's AGENT_CONFIG key is cursor-agent but the CLI Tool column shows N/A (IDE-based). Adding the --ai flag reference in the Description column so readers know the correct key to use with specify init --ai cursor-agent. Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add --ai key hint for Antigravity in AGENTS.md Antigravity's AGENT_CONFIG key is 'agy' and requires --ai-skills flag, but the table only showed N/A (IDE-based). Adding the --ai flag reference so readers know to use: specify init --ai agy --ai-skills Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: clarify Antigravity directory convention for both modes AGENT_CONFIG generates .agent/commands/ by default, but --ai-skills uses .agent/skills/. Document both paths in Directory Conventions. Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add Tabnine nested path exception to Directory Conventions Tabnine uses .tabnine/agent/commands/ which has an extra path segment compared to the usual .<agent-name>/commands/ convention. Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add Copilot to Markdown list, fix Antigravity dir convention - Add GitHub Copilot to the Markdown format "Used by" list (it uses markdown with .agent.md extension and chat mode frontmatter) - Clarify Antigravity uses .agent/skills/ (requires --ai-skills); .agent/commands/ is deprecated/legacy Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add missing IDE agents to Directory Conventions Add Roo Code and IBM Bob to the IDE agents list in Directory Conventions so all IDE-based agents are documented. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: document Codex --ai-skills requirement in all sections Codex CLI requires --ai-skills when explicitly selected via specify init --ai codex (exits with migration error otherwise). Updated table, CLI-Based Agents list, and Directory Conventions. Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: fix Antigravity dir to match AGENT_CONFIG, add Amp shared folder - Antigravity table row: .agent/skills/ → .agent/commands/ (matches AGENT_CONFIG folder + commands_subdir; skills mode via --ai-skills) - Add shared .agents/ folder exception for Amp and Codex - Move Codex from Skills-based to Shared folder section (it shares .agents/ with Amp) Addresses Copilot review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: clarify Antigravity skills path is required, not optional Reword to make clear .agent/skills/ is the effective path and .agent/commands/ is deprecated, since CLI enforces --ai-skills. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
18 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/agents/ |
Markdown | N/A (IDE-based) | GitHub Copilot in VS Code |
| Cursor | .cursor/commands/ |
Markdown | N/A (IDE-based) | Cursor IDE (--ai cursor-agent) |
| Qwen Code | .qwen/commands/ |
Markdown | qwen |
Alibaba's Qwen Code CLI |
| opencode | .opencode/command/ |
Markdown | opencode |
opencode CLI |
| Codex CLI | .agents/skills/ |
Markdown | codex |
Codex CLI (--ai codex --ai-skills) |
| Windsurf | .windsurf/workflows/ |
Markdown | N/A (IDE-based) | Windsurf IDE workflows |
| Junie | .junie/commands/ |
Markdown | junie |
Junie by JetBrains |
| Kilo Code | .kilocode/workflows/ |
Markdown | N/A (IDE-based) | Kilo Code IDE |
| Auggie CLI | .augment/commands/ |
Markdown | auggie |
Auggie CLI |
| Roo Code | .roo/commands/ |
Markdown | N/A (IDE-based) | Roo Code IDE |
| CodeBuddy CLI | .codebuddy/commands/ |
Markdown | codebuddy |
CodeBuddy CLI |
| Qoder CLI | .qoder/commands/ |
Markdown | qodercli |
Qoder CLI |
| Kiro CLI | .kiro/prompts/ |
Markdown | kiro-cli |
Kiro CLI |
| Amp | .agents/commands/ |
Markdown | amp |
Amp CLI |
| SHAI | .shai/commands/ |
Markdown | shai |
SHAI CLI |
| Tabnine CLI | .tabnine/agent/commands/ |
TOML | tabnine |
Tabnine CLI |
| Kimi Code | .kimi/skills/ |
Markdown | kimi |
Kimi Code CLI (Moonshot AI) |
| Pi Coding Agent | .pi/prompts/ |
Markdown | pi |
Pi terminal coding agent |
| iFlow CLI | .iflow/commands/ |
Markdown | iflow |
iFlow CLI (iflow-ai) |
| IBM Bob | .bob/commands/ |
Markdown | N/A (IDE-based) | IBM Bob IDE |
| Trae | .trae/rules/ |
Markdown | N/A (IDE-based) | Trae IDE |
| Antigravity | .agent/commands/ |
Markdown | N/A (IDE-based) | Antigravity IDE (--ai agy --ai-skills) |
| Mistral Vibe | .vibe/prompts/ |
Markdown | vibe |
Mistral Vibe CLI |
| Generic | User-specified via --ai-commands-dir |
Markdown | N/A | Bring your own agent |
Step-by-Step Integration Guide
Follow these steps to add a new agent (using a hypothetical new agent as an example):
1. Add to AGENT_CONFIG
IMPORTANT: Use the actual CLI tool name as the key, not a shortened version.
Add the new agent to the AGENT_CONFIG dictionary in src/specify_cli/__init__.py. This is the single source of truth for all agent metadata:
AGENT_CONFIG = {
# ... existing agents ...
"new-agent-cli": { # Use the ACTUAL CLI tool name (what users type in terminal)
"name": "New Agent Display Name",
"folder": ".newagent/", # Directory for agent files
"commands_subdir": "commands", # Subdirectory name for command files (default: "commands")
"install_url": "https://example.com/install", # URL for installation docs (or None if IDE-based)
"requires_cli": True, # True if CLI tool required, False for IDE-based agents
},
}
Key Design Principle: The dictionary key should match the actual executable name that users install. For example:
- ✅ Use
"cursor-agent"because the CLI tool is literally calledcursor-agent - ❌ Don't use
"cursor"as a shortcut if the tool iscursor-agent
This eliminates the need for special-case mappings throughout the codebase.
Field Explanations:
name: Human-readable display name shown to usersfolder: Directory where agent-specific files are stored (relative to project root)commands_subdir: Subdirectory name within the agent folder where command/prompt files are stored (default:"commands")- Most agents use
"commands"(e.g.,.claude/commands/) - Some agents use alternative names:
"agents"(copilot),"workflows"(windsurf, kilocode),"prompts"(codex, kiro-cli, pi),"command"(opencode - singular) - This field enables
--ai-skillsto locate command templates correctly for skill generation
- Most agents use
install_url: Installation documentation URL (set toNonefor IDE-based agents)requires_cli: Whether the agent requires a CLI tool check during initialization
2. Update CLI Help Text
Update the --ai parameter help text in the init() command to include the new agent:
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, codebuddy, new-agent-cli, or kiro-cli"),
Also update any function docstrings, examples, and error messages that list available agents.
3. Update README Documentation
Update the Supported AI Agents section in README.md to include the new agent:
- Add the new agent to the table with appropriate support level (Full/Partial)
- Include the agent's official website link
- Add any relevant notes about the agent's implementation
- Ensure the table formatting remains aligned and consistent
4. Update Release Package Script
Modify .github/workflows/scripts/create-release-packages.sh:
Add to ALL_AGENTS array
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf kiro-cli)
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 GitHub Release Script
Modify .github/workflows/scripts/create-github-release.sh to include the new agent's packages:
gh release create "$VERSION" \
# ... existing packages ...
.genreleases/spec-kit-template-windsurf-sh-"$VERSION".zip \
.genreleases/spec-kit-template-windsurf-ps-"$VERSION".zip \
# Add new agent packages here
5. 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
}
}
6. 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: CLI tool checks are now handled automatically based on the requires_cli field in AGENT_CONFIG. No additional code changes needed in the check() or init() commands - they automatically loop through AGENT_CONFIG and check tools as needed.
Important Design Decisions
Using Actual CLI Tool Names as Keys
CRITICAL: When adding a new agent to AGENT_CONFIG, always use the actual executable name as the dictionary key, not a shortened or convenient version.
Why this matters:
- The
check_tool()function usesshutil.which(tool)to find executables in the system PATH - If the key doesn't match the actual CLI tool name, you'll need special-case mappings throughout the codebase
- This creates unnecessary complexity and maintenance burden
Example - The Cursor Lesson:
❌ Wrong approach (requires special-case mapping):
AGENT_CONFIG = {
"cursor": { # Shorthand that doesn't match the actual tool
"name": "Cursor",
# ...
}
}
# Then you need special cases everywhere:
cli_tool = agent_key
if agent_key == "cursor":
cli_tool = "cursor-agent" # Map to the real tool name
✅ Correct approach (no mapping needed):
AGENT_CONFIG = {
"cursor-agent": { # Matches the actual executable name
"name": "Cursor",
# ...
}
}
# No special cases needed - just use agent_key directly!
Benefits of this approach:
- Eliminates special-case logic scattered throughout the codebase
- Makes the code more maintainable and easier to understand
- Reduces the chance of bugs when adding new agents
- Tool checking "just works" without additional mappings
7. Update Devcontainer files (Optional)
For agents that have VS Code extensions or require CLI installation, update the devcontainer configuration files:
VS Code Extension-based Agents
For agents available as VS Code extensions, add them to .devcontainer/devcontainer.json:
{
"customizations": {
"vscode": {
"extensions": [
// ... existing extensions ...
// [New Agent Name]
"[New Agent Extension ID]"
]
}
}
}
CLI-based Agents
For agents that require CLI tools, add installation commands to .devcontainer/post-create.sh:
#!/bin/bash
# Existing installations...
echo -e "\n🤖 Installing [New Agent Name] CLI..."
# run_command "npm install -g [agent-cli-package]@latest" # Example for node-based CLI
# or other installation instructions (must be non-interactive and compatible with Linux Debian "Trixie" or later)...
echo "✅ Done"
Quick Tips:
- Extension-based agents: Add to the
extensionsarray indevcontainer.json - CLI-based agents: Add installation scripts to
post-create.sh - Hybrid agents: May require both extension and CLI installation
- Test thoroughly: Ensure installations work in the devcontainer environment
Agent Categories
CLI-Based Agents
Require a command-line tool to be installed:
- Claude Code:
claudeCLI - Gemini CLI:
geminiCLI - Qwen Code:
qwenCLI - opencode:
opencodeCLI - Codex CLI:
codexCLI (requires--ai-skills) - Junie:
junieCLI - Auggie CLI:
auggieCLI - CodeBuddy CLI:
codebuddyCLI - Qoder CLI:
qodercliCLI - Kiro CLI:
kiro-cliCLI - Amp:
ampCLI - SHAI:
shaiCLI - Tabnine CLI:
tabnineCLI - Kimi Code:
kimiCLI - Mistral Vibe:
vibeCLI - Pi Coding Agent:
piCLI - iFlow CLI:
iflowCLI
IDE-Based Agents
Work within integrated development environments:
- GitHub Copilot: Built into VS Code/compatible editors
- Cursor: Built into Cursor IDE (
--ai cursor-agent) - Windsurf: Built into Windsurf IDE
- Kilo Code: Built into Kilo Code IDE
- Roo Code: Built into Roo Code IDE
- IBM Bob: Built into IBM Bob IDE
- Trae: Built into Trae IDE
- Antigravity: Built into Antigravity IDE (
--ai agy --ai-skills)
Command File Formats
Markdown Format
Used by: Claude, Cursor, GitHub Copilot, opencode, Windsurf, Junie, Kiro CLI, Amp, SHAI, IBM Bob, Kimi Code, Qwen, Pi, Codex, Auggie, CodeBuddy, Qoder, Roo Code, Kilo Code, Trae, Antigravity, Mistral Vibe, iFlow
Standard format:
---
description: "Command description"
---
Command content with {SCRIPT} and $ARGUMENTS placeholders.
GitHub Copilot Chat Mode format:
---
description: "Command description"
mode: speckit.command-name
---
Command content with {SCRIPT} and $ARGUMENTS placeholders.
TOML Format
Used by: Gemini, Tabnine
description = "Command description"
prompt = """
Command content with {SCRIPT} and {{args}} placeholders.
"""
Directory Conventions
- CLI agents: Usually
.<agent-name>/commands/ - Singular command exception:
- opencode:
.opencode/command/(singularcommand, notcommands)
- opencode:
- Nested path exception:
- Tabnine:
.tabnine/agent/commands/(extraagent/segment)
- Tabnine:
- Shared
.agents/folder:- Amp:
.agents/commands/(shared folder, not.amp/) - Codex:
.agents/skills/(shared folder; requires--ai-skills; invoked as$speckit-<command>)
- Amp:
- Skills-based exceptions:
- Kimi Code:
.kimi/skills/(skills, invoked as/skill:speckit-<command>)
- Kimi Code:
- Prompt-based exceptions:
- Kiro CLI:
.kiro/prompts/ - Pi:
.pi/prompts/ - Mistral Vibe:
.vibe/prompts/
- Kiro CLI:
- Rules-based exceptions:
- Trae:
.trae/rules/
- Trae:
- IDE agents: Follow IDE-specific patterns:
- Copilot:
.github/agents/ - Cursor:
.cursor/commands/ - Windsurf:
.windsurf/workflows/ - Kilo Code:
.kilocode/workflows/ - Roo Code:
.roo/commands/ - IBM Bob:
.bob/commands/ - Antigravity:
.agent/skills/(--ai-skillsrequired;.agent/commands/is deprecated)
- 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
- Using shorthand keys instead of actual CLI tool names: Always use the actual executable name as the AGENT_CONFIG key (e.g.,
"cursor-agent"not"cursor"). This prevents the need for special-case mappings throughout the codebase. - Forgetting update scripts: Both bash and PowerShell scripts must be updated when adding new agents.
- Incorrect
requires_clivalue: Set toTrueonly for agents that actually have CLI tools to check; set toFalsefor IDE-based agents. - Wrong argument format: Use correct placeholder format for each agent type (
$ARGUMENTSfor Markdown,{{args}}for TOML). - Directory naming: Follow agent-specific conventions exactly (check existing agents for patterns).
- Help text inconsistency: Update all user-facing text consistently (help strings, docstrings, README, error messages).
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
- Verify the actual CLI tool name before adding to AGENT_CONFIG
This documentation should be updated whenever new agents are added to maintain accuracy and completeness.