262 lines
7.2 KiB
Markdown
262 lines
7.2 KiB
Markdown
---
|
|
name: validating-setup-commands
|
|
description: Use before creating worktrees or executing tasks - validates that CLAUDE.md defines required setup commands (install, optional postinstall) and provides clear error messages with examples if missing
|
|
---
|
|
|
|
# Validating Setup Commands
|
|
|
|
## Overview
|
|
|
|
**Worktrees require dependency installation before tasks can execute.** Projects MUST define setup commands in CLAUDE.md.
|
|
|
|
This skill validates setup commands exist BEFORE creating worktrees, preventing cryptic failures later.
|
|
|
|
## When to Use
|
|
|
|
Use this skill when:
|
|
- Creating new worktrees (spec, execute commands)
|
|
- Before executing tasks that need dependencies
|
|
- Any time you need to verify project setup is documented
|
|
|
|
**Use early:** Validate during setup phase, not during task execution.
|
|
|
|
## Why This Matters
|
|
|
|
**Without validation:**
|
|
- Worktrees get created
|
|
- Tasks start executing
|
|
- Fail with "command not found" errors
|
|
- User debugging nightmare: "Why is npm/pytest/cargo missing?"
|
|
|
|
**With validation:**
|
|
- Missing commands detected immediately
|
|
- Clear error with exact CLAUDE.md section to add
|
|
- User fixes once, all worktrees work
|
|
|
|
## The Validation Process
|
|
|
|
**Announce:** "Validating CLAUDE.md setup commands before creating worktrees."
|
|
|
|
### Step 1: Check File Exists
|
|
|
|
```bash
|
|
# Get repo root
|
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
|
|
# Check if CLAUDE.md exists
|
|
if [ ! -f "$REPO_ROOT/CLAUDE.md" ]; then
|
|
echo "❌ Error: CLAUDE.md not found in repository root"
|
|
echo ""
|
|
echo "Spectacular requires CLAUDE.md to define setup commands."
|
|
echo "See: https://docs.claude.com/claude-code"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
**Why fail fast:** No CLAUDE.md = no command configuration. Stop before creating any worktrees.
|
|
|
|
### Step 2: Parse Setup Section
|
|
|
|
```bash
|
|
# Parse CLAUDE.md for setup section
|
|
INSTALL_CMD=$(grep -A 10 "^### Setup" "$REPO_ROOT/CLAUDE.md" | grep "^- \*\*install\*\*:" | sed 's/.*: `\(.*\)`.*/\1/')
|
|
|
|
if [ -z "$INSTALL_CMD" ]; then
|
|
echo "❌ Error: Setup commands not defined in CLAUDE.md"
|
|
echo ""
|
|
echo "Worktrees require dependency installation before tasks can execute."
|
|
echo ""
|
|
echo "Add this section to CLAUDE.md:"
|
|
echo ""
|
|
echo "## Development Commands"
|
|
echo ""
|
|
echo "### Setup"
|
|
echo "- **install**: \`npm install\` (or your package manager)"
|
|
echo "- **postinstall**: \`npx prisma generate\` (optional - any codegen)"
|
|
echo ""
|
|
echo "Example for different package managers:"
|
|
echo "- Node.js: npm install, pnpm install, yarn, or bun install"
|
|
echo "- Python: pip install -r requirements.txt"
|
|
echo "- Rust: cargo build"
|
|
echo "- Go: go mod download"
|
|
echo ""
|
|
echo "See: https://docs.claude.com/claude-code"
|
|
echo ""
|
|
echo "Execution stopped. Add setup commands to CLAUDE.md and retry."
|
|
exit 1
|
|
fi
|
|
|
|
# Extract postinstall command (optional)
|
|
POSTINSTALL_CMD=$(grep -A 10 "^### Setup" "$REPO_ROOT/CLAUDE.md" | grep "^- \*\*postinstall\*\*:" | sed 's/.*: `\(.*\)`.*/\1/')
|
|
```
|
|
|
|
**Parsing logic:**
|
|
- Look for `### Setup` header
|
|
- Extract `**install**:` command (required)
|
|
- Extract `**postinstall**:` command (optional)
|
|
- Use sed to extract command from backticks
|
|
|
|
### Step 3: Report Success
|
|
|
|
```bash
|
|
# Report detected commands
|
|
echo "✅ Setup commands found in CLAUDE.md"
|
|
echo " install: $INSTALL_CMD"
|
|
if [ -n "$POSTINSTALL_CMD" ]; then
|
|
echo " postinstall: $POSTINSTALL_CMD"
|
|
fi
|
|
```
|
|
|
|
**Store for later use:**
|
|
- Return `INSTALL_CMD` to caller
|
|
- Return `POSTINSTALL_CMD` (may be empty)
|
|
- Caller uses these in worktree dependency installation
|
|
|
|
## Expected CLAUDE.md Format
|
|
|
|
The skill expects this exact format:
|
|
|
|
```markdown
|
|
## Development Commands
|
|
|
|
### Setup
|
|
- **install**: `npm install`
|
|
- **postinstall**: `npx prisma generate` (optional)
|
|
```
|
|
|
|
**Format requirements:**
|
|
- Section header: `### Setup` (exactly)
|
|
- Install line: `- **install**: `command`` (required)
|
|
- Postinstall line: `- **postinstall**: `command`` (optional)
|
|
- Commands must be in backticks
|
|
|
|
**Multi-language examples:**
|
|
|
|
```markdown
|
|
### Setup
|
|
- **install**: `npm install` # Node.js
|
|
- **install**: `pip install -r requirements.txt` # Python
|
|
- **install**: `cargo build` # Rust
|
|
- **install**: `go mod download` # Go
|
|
- **install**: `bundle install` # Ruby
|
|
```
|
|
|
|
## Error Messages
|
|
|
|
### Error 1: CLAUDE.md Not Found
|
|
|
|
```
|
|
❌ Error: CLAUDE.md not found in repository root
|
|
|
|
Spectacular requires CLAUDE.md to define setup commands.
|
|
See: https://docs.claude.com/claude-code
|
|
```
|
|
|
|
**User action:** Create CLAUDE.md in repository root.
|
|
|
|
### Error 2: Setup Commands Missing
|
|
|
|
```
|
|
❌ Error: Setup commands not defined in CLAUDE.md
|
|
|
|
Worktrees require dependency installation before tasks can execute.
|
|
|
|
Add this section to CLAUDE.md:
|
|
|
|
## Development Commands
|
|
|
|
### Setup
|
|
- **install**: `npm install` (or your package manager)
|
|
- **postinstall**: `npx prisma generate` (optional - any codegen)
|
|
|
|
Example for different package managers:
|
|
- Node.js: npm install, pnpm install, yarn, or bun install
|
|
- Python: pip install -r requirements.txt
|
|
- Rust: cargo build
|
|
- Go: go mod download
|
|
|
|
See: https://docs.claude.com/claude-code
|
|
|
|
Execution stopped. Add setup commands to CLAUDE.md and retry.
|
|
```
|
|
|
|
**User action:** Add Setup section with at least `install` command.
|
|
|
|
## Integration Pattern
|
|
|
|
**How commands use this skill:**
|
|
|
|
```bash
|
|
# In execute.md or spec.md:
|
|
|
|
# Step 1.5: Validate Setup Commands
|
|
# Use validating-setup-commands skill to extract and verify
|
|
INSTALL_CMD=$(validate_setup_commands_install)
|
|
POSTINSTALL_CMD=$(validate_setup_commands_postinstall)
|
|
|
|
# Step 3: Create worktrees
|
|
git worktree add .worktrees/{runid}-task-1
|
|
|
|
# Step 4: Install dependencies using validated commands
|
|
cd .worktrees/{runid}-task-1
|
|
$INSTALL_CMD
|
|
if [ -n "$POSTINSTALL_CMD" ]; then
|
|
$POSTINSTALL_CMD
|
|
fi
|
|
```
|
|
|
|
**Reusable across:**
|
|
- `/spectacular:spec` - Validates before creating main worktree
|
|
- `/spectacular:execute` - Validates before creating task worktrees
|
|
- Future commands that create worktrees
|
|
|
|
## Common Mistakes
|
|
|
|
### Mistake 1: Running Validation Too Late
|
|
|
|
**Wrong:** Create worktrees, then validate
|
|
**Right:** Validate BEFORE creating ANY worktrees
|
|
|
|
**Why:** Failed validation after worktrees exist leaves orphaned directories.
|
|
|
|
### Mistake 2: Not Providing Examples
|
|
|
|
**Wrong:** "Error: Add setup commands"
|
|
**Right:** "Error: Add setup commands. Here's the exact format: [example]"
|
|
|
|
**Why:** Users need to know WHAT to add and WHERE.
|
|
|
|
### Mistake 3: Requiring Postinstall
|
|
|
|
**Wrong:** Fail if postinstall missing
|
|
**Right:** Postinstall is optional (codegen only needed in some projects)
|
|
|
|
**Why:** Not all projects have codegen (Prisma, GraphQL, etc.).
|
|
|
|
## Quick Reference
|
|
|
|
**Validation sequence:**
|
|
1. Check CLAUDE.md exists (exit if missing)
|
|
2. Parse for `### Setup` section
|
|
3. Extract `install` command (exit if missing)
|
|
4. Extract `postinstall` command (optional)
|
|
5. Report success and return commands
|
|
|
|
**Exit points:**
|
|
- Missing CLAUDE.md → Error with creation instructions
|
|
- Missing setup section → Error with exact format example
|
|
- Success → Return INSTALL_CMD and POSTINSTALL_CMD
|
|
|
|
**Format validated:**
|
|
- `### Setup` header
|
|
- `- **install**: `command``
|
|
- `- **postinstall**: `command`` (optional)
|
|
|
|
## The Bottom Line
|
|
|
|
**Validate setup commands BEFORE creating worktrees.**
|
|
|
|
Early validation with clear error messages prevents confusing failures during task execution.
|
|
|
|
The skill provides users with exact examples of what to add, making fixes easy.
|