Skip to main content

Core Commands

These commands form the foundation of Specify CLI functionality.

init

Initialize a new Specify project with AI assistant integration.
specify init [PROJECT_NAME] [OPTIONS]
See: Full init command documentation Quick examples:
# Create new project
specify init my-project --ai claude

# Initialize in current directory
specify init --here --ai copilot

# Custom agent
specify init my-project --ai generic --ai-commands-dir .myagent/commands/

check

Verify installed tools and AI assistant CLI availability.
specify check
See: Full check command documentation Output: Status tree showing which tools are available in PATH.

version

Display version and system information.
specify version
Output:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Specify CLI Information            ┃
┃                                    ┃
┃   CLI Version      0.1.6           ┃
┃   Template Version 0.2.0           ┃
┃   Released         2025-03-01      ┃
┃                                    ┃
┃   Python           3.11.9          ┃
┃   Platform         Linux           ┃
┃   Architecture     x86_64          ┃
┃   OS Version       6.1.0-...       ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Information displayed:
  • CLI Version — Installed specify-cli package version
  • Template Version — Latest template version from GitHub releases
  • Released — Template release date
  • Python — Python interpreter version
  • Platform — Operating system (Linux, Darwin, Windows)
  • Architecture — CPU architecture (x86_64, arm64, etc.)
  • OS Version — Detailed OS version string

Extension Commands

Manage Spec Kit extensions for custom workflows and integrations. All extension commands require running from within a Spec Kit project (must have .specify/ directory).

extension list

List installed extensions in the current project.
specify extension list [OPTIONS]
Options:
--available
boolean
default:false
Show available extensions from catalog (instead of installed)
--all
boolean
default:false
Show both installed and available extensions
Example output:
$ specify extension list

Installed Extensions:

 github-issues (v1.2.0)
     Integrate GitHub Issues with Spec Kit workflows
     Commands: 3 | Hooks: 2 | Status: Enabled

 jira-sync (v0.5.1)
     Synchronize specs with Jira tickets
     Commands: 5 | Hooks: 1 | Status: Disabled

extension add

Install an extension from catalog, URL, or local directory.
specify extension add <EXTENSION> [OPTIONS]
Arguments:
EXTENSION
string
required
Extension name (from catalog), URL, or local directory path
Options:
--dev
boolean
default:false
Install from local directory (development mode)
--from
string
Install from custom URL (must be HTTPS or localhost)
Examples:
# From catalog
specify extension add github-issues

# From URL
specify extension add my-extension --from https://example.com/extension.zip

# From local directory (development)
specify extension add ~/dev/my-extension --dev
What it does:
  1. Downloads/copies extension files
  2. Validates extension manifest (extension.yml)
  3. Checks compatibility with current Spec Kit version
  4. Installs to .specify/extensions/<extension-id>/
  5. Registers commands with AI agent
  6. Sets up hooks (if any)

extension remove

Uninstall an extension from the current project.
specify extension remove <EXTENSION> [OPTIONS]
Arguments:
EXTENSION
string
required
Extension ID to remove
Options:
--keep-config
boolean
default:false
Don’t remove configuration files (preserves settings)
--force
boolean
default:false
Skip confirmation prompt
Examples:
# Remove with confirmation
specify extension remove github-issues

# Keep configuration files
specify extension remove github-issues --keep-config

# Force removal without prompt
specify extension remove github-issues --force
Behavior:
  • Removes commands from AI agent
  • Deletes extension directory
  • Backs up config files (unless --keep-config)
  • Updates extension registry

Search for available extensions in the catalog.
specify extension search [QUERY] [OPTIONS]
Arguments:
QUERY
string
Search query to filter extensions by name or description
Options:
--tag
string
Filter by tag (e.g., testing, deployment, documentation)
--author
string
Filter by author name
--verified
boolean
default:false
Show only verified extensions
Examples:
# Show all extensions
specify extension search

# Search by keyword
specify extension search github

# Filter by tag
specify extension search --tag testing

# Verified extensions only
specify extension search --verified

# Combine filters
specify extension search deployment --author github --verified
Example output:
🔍 Searching extension catalog...

Found 3 extension(s):

github-issues (v1.2.0) ✓ Verified
  Integrate GitHub Issues with Spec Kit workflows

  Author: github-spec-kit
  Tags: github, issues, project-management
  Downloads: 1,234 | Stars: 89
  Repository: https://github.com/github/spec-kit-ext-github-issues

  Install: specify extension add github-issues

extension info

Show detailed information about a specific extension.
specify extension info <EXTENSION>
Arguments:
EXTENSION
string
required
Extension ID or name to get information about
Example:
specify extension info github-issues
Output includes:
  • Extension name, version, and verification status
  • Description and purpose
  • Author and license
  • Requirements (Spec Kit version, tools, dependencies)
  • Provided features (commands, hooks)
  • Tags and categories
  • Statistics (downloads, stars)
  • Links (repository, homepage, documentation, changelog)
  • Installation status

extension update

Update extension(s) to the latest version.
specify extension update [EXTENSION]
Arguments:
EXTENSION
string
Extension ID to update. If not specified, checks all installed extensions for updates.
Examples:
# Check all extensions for updates
specify extension update

# Update specific extension
specify extension update github-issues
Note: Automatic update functionality is under development. Current version provides manual update instructions.

extension enable

Enable a disabled extension.
specify extension enable <EXTENSION>
Arguments:
EXTENSION
string
required
Extension ID to enable
Example:
specify extension enable jira-sync
Effect:
  • Updates extension registry
  • Enables hooks in extensions.yml
  • Makes commands available to AI agent

extension disable

Disable an extension without removing it.
specify extension disable <EXTENSION>
Arguments:
EXTENSION
string
required
Extension ID to disable
Example:
specify extension disable jira-sync
Effect:
  • Updates extension registry
  • Disables hooks in extensions.yml
  • Removes commands from AI agent
  • Preserves all files and configuration
Re-enable with: specify extension enable <extension>

Global Options

These options work with most Specify commands:

Help

Display help information for any command:
specify --help
specify init --help
specify extension --help
specify extension add --help

Version

Display version information:
specify --version

Exit Codes

Specify CLI uses standard exit codes:
  • 0 — Success
  • 1 — General error (invalid arguments, missing files, failed operation)

Environment Variables

Specify CLI respects the following environment variables:

Authentication

GITHUB_TOKEN
string
GitHub personal access token for API requests. Increases rate limits from 60/hour to 5,000/hour.Alternative: GH_TOKEN
GH_TOKEN
string
Alternative name for GITHUB_TOKEN

Agent-Specific

CODEX_HOME
path
Required for Codex CLI. Must point to the .codex/ directory in your project.Example:
export CODEX_HOME=/path/to/project/.codex

Configuration Files

Project Structure

Specify CLI creates and manages the following structure:
project/
├── .specify/                    # Spec Kit core
│   ├── memory/                  # Persistent context
│   │   └── constitution.md      # Project principles
│   ├── scripts/                 # Automation scripts
│   │   ├── bash/               # Shell scripts
│   │   └── powershell/         # PowerShell scripts
│   ├── templates/               # Spec templates
│   │   ├── commands/           # Command templates
│   │   └── constitution-template.md
│   └── extensions/              # Extensions
│       ├── .registry.json      # Extension registry
│       ├── .backup/            # Config backups
│       └── <extension-id>/     # Extension files
├── .<agent>/                    # AI agent config
│   ├── commands/               # Agent commands
│   └── skills/                 # Agent skills (if --ai-skills)
└── .vscode/                     # VS Code settings
    └── settings.json

Extension Manifest

Extensions must include extension.yml:
name: extension-name
id: extension-id
version: 1.0.0
description: Extension description
author: author-name
license: MIT

requires:
  speckit_version: ">=0.1.0"
  tools:
    - name: git
      version: ">=2.0"
      required: true

provides:
  commands:
    - name: /command-name
      description: Command description
  hooks:
    - name: pre-specify
      description: Hook description

Getting Help

Command Help

Use --help with any command:
specify --help
specify init --help
specify extension add --help

Issues and Support

Common Workflows

Create a new project:
specify check                    # Verify tools
specify init my-project --ai claude
cd my-project
Add extensions:
specify extension search         # Browse catalog
specify extension add github-issues
Initialize existing project:
cd existing-project
specify init --here --ai copilot --force
Troubleshoot:
specify check                    # Check tools
specify version                  # Check versions
specify init --debug             # Verbose output

See Also

Build docs developers (and LLMs) love