Skip to content

Add specify integration subcommand for post-init integration management #2065

@mnriem

Description

@mnriem

Summary

Add a specify integration subcommand group — consistent with the existing specify extension and specify preset patterns — for managing integrations in existing projects after initial setup.

Motivation

Currently, integrations can only be set up during specify init. There's no way to install, uninstall, or switch integrations after project creation. This subcommand fills that gap using the manifest-based hash tracking introduced in #1924.

Proposed Commands

specify integration list                    # show available + installed status
specify integration install copilot         # install into existing project
specify integration uninstall copilot       # hash-safe removal
specify integration switch claude           # uninstall current, install target

Key Behaviors

  • install writes files + manifest (same as specify init --integration)
  • uninstall checks manifest hashes — removes unmodified files, reports modified files
  • switch reads the current integration from .specify/agent.json, uninstalls it, installs the target; shared infra (.specify/scripts/, templates, memory) untouched

Naming Convention

Follows the established specify <noun> <verb> pattern:

Feature Subcommand
Extensions specify extension list / add / remove
Presets specify preset list / add / remove
Integrations specify integration list / install / uninstall / switch

Depends on

Acceptance Criteria

  • specify integration list shows available integrations and installed status
  • specify integration install <key> installs an integration into an existing project
  • specify integration uninstall <key> safely removes unmodified files, keeps modified ones
  • specify integration switch <target> reads current from .specify/agent.json, performs uninstall + install
  • Full lifecycle test: install → modify file → uninstall → verify modified file kept
  • Switch between integrations preserves shared infra

Metadata

Metadata

Assignees

Labels

No labels
No labels

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