Claude
Skills
Sign in
Back

validating-environment

Included with Lifetime
$97 forever

Use to validate spectacular environment - checks superpowers plugin, git-spice, git repo, and project structure before running spectacular workflows

General

What this skill does


# Validating Environment

## Overview

This skill validates that all required dependencies and configuration are in place for spectacular workflows. It checks for the superpowers plugin, git-spice installation, git repository status, and project structure. It also detects whether the workspace is single-repo or multi-repo.

## When to Use

Use this skill when:
- Starting a new spectacular session
- Running `/spectacular:init` command
- Before beginning any spectacular workflow to ensure prerequisites are met
- Troubleshooting spectacular setup issues

**Announce:** "I'm using validating-environment to check the spectacular setup."

## The Process

### Step 1: Check Superpowers Plugin

Check if superpowers is installed (handles both direct and marketplace installs):

```bash
# Check both possible install locations:
# - Direct: ~/.claude/plugins/cache/superpowers
# - Marketplace: ~/.claude/plugins/cache/superpowers-marketplace/superpowers
SUPERPOWERS_PATH=""
if [ -d ~/.claude/plugins/cache/superpowers ]; then
  SUPERPOWERS_PATH=~/.claude/plugins/cache/superpowers
elif [ -d ~/.claude/plugins/cache/superpowers-marketplace/superpowers ]; then
  SUPERPOWERS_PATH=~/.claude/plugins/cache/superpowers-marketplace/superpowers
fi

if [ -n "$SUPERPOWERS_PATH" ]; then
  echo "Superpowers plugin is installed"
  SUPERPOWERS_VERSION=$(cd "$SUPERPOWERS_PATH" && git describe --tags 2>/dev/null || echo "unknown")
  echo "   Version: $SUPERPOWERS_VERSION"
  echo "   Path: $SUPERPOWERS_PATH"
else
  echo "Superpowers plugin NOT installed"
  echo ""
  echo "Spectacular requires the superpowers plugin for core skills:"
  echo "  - brainstorming"
  echo "  - subagent-driven-development"
  echo "  - requesting-code-review"
  echo "  - verification-before-completion"
  echo "  - finishing-a-development-branch"
  echo ""
  echo "Install with:"
  echo "  /plugin install superpowers@superpowers-marketplace"
  echo ""
  SUPERPOWERS_MISSING=true
fi
```

### Step 2: Check Git-Spice

Verify git-spice is installed and accessible:

```bash
if command -v gs &> /dev/null; then
  echo "Git-spice is installed"
  GS_VERSION=$(gs --version 2>&1 | head -1)
  echo "   $GS_VERSION"

  # Check if we're in a git repo
  if git rev-parse --git-dir > /dev/null 2>&1; then
    # Check if git-spice is initialized
    if gs ls &> /dev/null; then
      echo "Git-spice is initialized for this repo"
    else
      echo "Git-spice not initialized for this repo"
      echo ""
      echo "Initialize with:"
      echo "  gs repo init"
      echo ""
      GS_NOT_INITIALIZED=true
    fi
  fi
else
  echo "Git-spice NOT installed"
  echo ""
  echo "Spectacular uses git-spice for stacked branch management."
  echo ""
  echo "Install instructions:"
  echo "  macOS: brew install git-spice"
  echo "  Linux: See https://github.com/abhinav/git-spice"
  echo ""
  GS_MISSING=true
fi
```

### Step 3: Configure Gitignore

Ensure .gitignore has spectacular-specific entries:

```bash
if [ -f .gitignore ]; then
  echo ".gitignore exists"

  # Check for .worktrees/ entry
  if grep -q "^\.worktrees/" .gitignore 2>/dev/null; then
    echo "   .worktrees/ already in .gitignore"
  else
    echo "   Adding .worktrees/ to .gitignore"
    echo "" >> .gitignore
    echo "# Spectacular parallel execution worktrees" >> .gitignore
    echo ".worktrees/" >> .gitignore
    echo "   Added .worktrees/ to .gitignore"
  fi

  # Check for specs/ is NOT ignored (we want specs tracked)
  if grep -q "^specs/" .gitignore 2>/dev/null; then
    echo "   WARNING: specs/ is gitignored - you probably want to track specs"
    echo "   Remove 'specs/' from .gitignore to track your specifications"
  else
    echo "   specs/ will be tracked (not in .gitignore)"
  fi
else
  echo "No .gitignore found - creating one"
  cat > .gitignore << 'EOF'
# Spectacular parallel execution worktrees
.worktrees/

# Common patterns
node_modules/
.DS_Store
*.log
EOF
  echo "   Created .gitignore with spectacular patterns"
fi
```

### Step 4: Check Git Repository

Validate git setup:

```bash
if git rev-parse --git-dir > /dev/null 2>&1; then
  echo "Git repository detected"

  # Check current branch
  CURRENT_BRANCH=$(git branch --show-current)
  echo "   Current branch: $CURRENT_BRANCH"

  # Check if there's a remote
  if git remote -v | grep -q .; then
    echo "   Remote configured"
    git remote -v | head -2 | sed 's/^/   /'
  else
    echo "   No remote configured"
    echo "   You may want to add a remote for PR submission"
  fi

  # Check working directory status
  if git diff --quiet && git diff --cached --quiet; then
    echo "   Working directory clean"
  else
    echo "   Uncommitted changes present"
  fi
else
  echo "NOT a git repository"
  echo ""
  echo "Initialize git with:"
  echo "  git init"
  echo "  git add ."
  echo "  git commit -m 'Initial commit'"
  echo ""
  NOT_GIT_REPO=true
fi
```

### Step 5: Validate Project Structure

Check for expected directories:

```bash
echo ""
echo "Checking project structure..."

# Check/create specs directory
if [ -d specs ]; then
  echo "specs/ directory exists"
  SPEC_COUNT=$(find specs -name "spec.md" 2>/dev/null | wc -l | tr -d ' ')
  echo "   Found $SPEC_COUNT specification(s)"
else
  echo "Creating specs/ directory"
  mkdir -p specs
  echo "   Created specs/ directory"
fi

# Check for .worktrees (should NOT exist yet, just checking)
if [ -d .worktrees ]; then
  echo ".worktrees/ directory exists"
  WORKTREE_COUNT=$(ls -1 .worktrees 2>/dev/null | wc -l | tr -d ' ')
  if [ "$WORKTREE_COUNT" -gt 0 ]; then
    echo "   Contains $WORKTREE_COUNT worktree(s) - may be leftover from previous execution"
    echo "   Clean up with: git worktree list && git worktree remove <path>"
  fi
else
  echo "No .worktrees/ directory (will be created during parallel execution)"
fi
```

### Step 6: Multi-Repo Detection and Validation

Detect whether the workspace is single-repo or multi-repo, and validate per-repo requirements:

```bash
echo ""
echo "Detecting workspace mode..."

# Detect workspace mode by looking for multiple .git directories
# In multi-repo setups, there are typically multiple repos in the parent directory
REPO_COUNT=$(find . -maxdepth 2 -name ".git" -type d 2>/dev/null | wc -l | tr -d ' ')
if [ "$REPO_COUNT" -gt 1 ]; then
  echo "Multi-repo workspace detected ($REPO_COUNT repos)"
  WORKSPACE_MODE="multi-repo"

  # List and validate each repo
  REPOS=$(find . -maxdepth 2 -name ".git" -type d | xargs -I{} dirname {} | sed 's|^\./||' | sort)

  for REPO in $REPOS; do
    echo ""
    echo "Checking repo: $REPO"

    # Check for CLAUDE.md with setup commands
    if [ -f "$REPO/CLAUDE.md" ]; then
      if grep -q "**install**:" "$REPO/CLAUDE.md"; then
        echo "  CLAUDE.md with setup commands found"
      else
        echo "  Warning: CLAUDE.md exists but missing setup commands"
        echo "    Add '**install**: \`your-install-command\`' to $REPO/CLAUDE.md"
      fi
    else
      echo "  Warning: No CLAUDE.md found in $REPO"
      echo "    Create $REPO/CLAUDE.md with setup commands for worktree support"
    fi

    # Check for constitution (optional)
    if [ -d "$REPO/docs/constitutions/current" ]; then
      echo "  Constitution found"
    else
      echo "  Note: No constitution at docs/constitutions/current/"
    fi
  done

else
  echo "Single-repo mode"
  WORKSPACE_MODE="single-repo"
fi
```

**Create workspace-level specs directory (multi-repo only):**

```bash
if [ "$WORKSPACE_MODE" = "multi-repo" ]; then
  echo ""
  if [ ! -d "specs" ]; then
    echo "Creating specs/ directory at workspace root"
    mkdir -p specs
    echo "   Created specs/ for cross-repo specifications"
  else
    echo "specs/ directory exists at workspace root"
    SPEC_COUNT=$(find specs -name "spec.md" 2>/dev/null | wc -l | tr -d ' ')
    echo "   Found $SPEC_COUNT specification(s)"
  fi
fi
```

### Step 7: Report Summary

Generate final status report:

```bash
echo ""
echo "========================================="
echo "Spectacular Ini
Files: 1
Size: 13.1 KB
Complexity: 16/100
Category: General

Related in General