Skip to content

[Extension]: Add Spec Kit Multi-Sites extension #2770

@teeyo

Description

@teeyo

Extension ID

spec-kit-multi-sites

Extension Name

Multi-Sites Spec Kit

Version

1.0.0

Description

Multi-site aware specify command with per-site spec folders, auto-increment, and Drupal support

Author

teeyo

Repository URL

https://github.com/teeyo/spec-kit-multi-sites

Download URL

https://github.com/teeyo/spec-kit-multi-sites/archive/refs/tags/v1.0.0.zip

License

MIT

Homepage (optional)

https://github.com/teeyo/spec-kit-multi-sites

Documentation URL (optional)

https://github.com/teeyo/spec-kit-multi-sites/blob/main/README.md

Changelog URL (optional)

https://github.com/teeyo/spec-kit-multi-sites/blob/main/CHANGELOG.md

Required Spec Kit Version

=0.1.0

Required Tools (optional)

Number of Commands

1

Number of Hooks (optional)

0

Tags

multi-site, workflow, process

Key Features

  • Auto-detects the sites folder from project structure (Drupal: docroot/sites, web/sites, sites/; generic: apps/, tenants/, domains/, vhosts/)
  • Interactive guided flow replacing /speckit.specify with multi-site awareness
  • Two spec organisation modes: Targeted (per-site specs/ folders) and Single (shared root specs/ folder with site-scoped names)
  • Independent auto-increment counters per scope — websiteA, websiteB, and core each start at 001 and never interfere with each other
  • Core target option for root-level shared features that apply across all websites
  • Automatic creation of specs/ directories when they don't exist yet
  • Standard spec file template (Overview, Goals, Non-Goals, User Stories, Acceptance Criteria, Technical Notes, Open Questions, References)
  • Git branch name suggestion derived from the spec ID and feature name
  • Optional config file to lock in sites_folder, spec_mode, and excluded_sites per project

Testing Checklist

  • Extension installs successfully via download URL
  • All commands execute without errors
  • Documentation is complete and accurate
  • No security vulnerabilities identified
  • Tested on at least one real project

Submission Requirements

  • Valid extension.yml manifest included
  • README.md with installation and usage instructions
  • LICENSE file included
  • GitHub release created with version tag
  • All command files exist and are properly formatted
  • Extension ID follows naming conventions (lowercase-with-hyphens)

Testing Details

Tested locally using specify extension add --dev against a Drupal multi-site project structure with the following scenarios:

  1. Targeted mode — core target: confirmed spec created at specs/001-.md with correct template content and directory auto-created when absent.

  2. Targeted mode — website target (docroot/sites/websiteA): confirmed spec created at docroot/sites/websiteA/specs/001-.md; counter is independent from core and other sites.

  3. Targeted mode — second spec on same website: confirmed counter increments to 002- without affecting other sites.

  4. Single mode — core target: confirmed spec created at specs/001-core-.md.

  5. Single mode — website target: confirmed spec created at specs/001-websiteA-.md; numbering is scoped per target name and does not interfere with the core counter.

  6. Auto-detection: verified docroot/sites/ is suggested automatically on a Drupal composer layout; verified manual override is accepted when the prompt is answered with a custom path.

  7. Config override: verified sites_folder and spec_mode set in spec-kit-multi-sites-config.yml skip the corresponding interactive prompts.

  8. Validated extension.yml manifest structure against the published schema (schema_version 1.0, all command file paths present, semver version, description under 100 chars).

Example Usage

# Install the extension
specify extension add spec-kit-multi-sites

# In your AI agent chat, run:
/speckit.multisite.specify

# The command walks you through an interactive flow:

Step 1 — Sites folder detection
  > Detected: docroot/sites  (press Enter to confirm or type a custom path)

Step 2 — Spec mode
  > 1 — Targeted specs  (per-site specs/ folders, independent counters)
  > 2 — Single specs    (shared root specs/ folder, scope embedded in name)
  Choice: 1

Step 3 — Target selection
  > core          (root-level shared feature)
  > websiteA
  > websiteB
  Choice: websiteA

Step 4 — Feature name
  > user-authentication

# Result (targeted mode, websiteA):
  File created: docroot/sites/websiteA/specs/001-user-authentication.md
  Suggested branch: 001-user-authentication

# Result for a second feature on websiteA:
  File created: docroot/sites/websiteA/specs/002-product-catalog.md

# Result for core (independent counter):
  File created: specs/001-shared-navigation.md

# Result in single mode for websiteB:
  File created: specs/001-websiteB-homepage.md

# Continue the standard Spec Kit workflow:
/speckit.clarify
/speckit.plan
/speckit.tasks
/speckit.implement

Proposed Catalog Entry

{
  "spec-kit-multi-sites": {
    "name": "Multi-Sites Spec Kit",
    "id": "spec-kit-multi-sites",
    "description": "Multi-site aware specify command with per-site spec folders, auto-increment, and Drupal support",
    "author": "teeyo",
    "version": "1.0.0",
    "download_url": "https://github.com/teeyo/spec-kit-multi-sites/archive/refs/tags/v1.0.0.zip",
    "repository": "https://github.com/teeyo/spec-kit-multi-sites",
    "homepage": "https://github.com/teeyo/spec-kit-multi-sites",
    "documentation": "https://github.com/teeyo/spec-kit-multi-sites/blob/main/README.md",
    "changelog": "https://github.com/teeyo/spec-kit-multi-sites/blob/main/CHANGELOG.md",
    "license": "MIT",
    "requires": {
      "speckit_version": ">=0.1.0"
    },
    "provides": {
      "commands": 1,
      "hooks": 0
    },
    "tags": [
      "multi-site",
      "drupal",
      "workflow",
      "process"
    ],
    "verified": false,
    "downloads": 0,
    "stars": 0,
    "created_at": "2026-05-29T00:00:00Z",
    "updated_at": "2026-05-29T00:00:00Z"
  }
}

Additional Context

This extension targets multi-site projects where a single codebase serves multiple
websites — a pattern common in Drupal, headless CMS setups, and monorepos with
several web apps. The core problem it solves is that the standard /speckit.specify
command has no concept of site scope: all specs land in one flat folder with a
single shared counter, which breaks down when features belong to specific websites
or to the shared core.

Design decisions:

  • Two modes are offered rather than forcing one approach because teams have
    different preferences: some want full filesystem isolation per site (targeted),
    others prefer a single flat folder they can grep easily (single).

  • The "core" target is always present regardless of what is found in the sites
    folder, because every multi-site project has shared functionality that does not
    belong to any one website.

  • Auto-increment is computed by counting existing files at command runtime rather
    than storing state in a metadata file, which keeps the extension stateless and
    avoids merge conflicts.

  • The command is named speckit.multisite.specify rather than overriding the
    built-in speckit.specify, so teams can run both side by side during adoption and
    switch gradually without breaking existing workflows.

Drupal-specific note: the extension recognises both composer-based layouts
(docroot/sites) and the older web/sites and bare sites/ conventions, and uses the
presence of settings.php inside sub-directories as a confirmation signal to avoid
false positives on unrelated folders named "sites".

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions