Files
gh-duongdev-ccpm/commands/project:set.md
2025-11-29 18:24:24 +08:00

7.9 KiB

description, allowed-tools, argument-hint
description allowed-tools argument-hint
Set the active project for CCPM commands
Bash
Read
Edit
AskUserQuestion
<project-id>

Set Active CCPM Project

Set or change the currently active project for CCPM commands.

Arguments

  • $1 - Project ID (required, or "auto" for auto-detection)

Usage

# Set specific project as active
/ccpm:project:set my-app

# Enable auto-detection
/ccpm:project:set auto

# Clear active project
/ccpm:project:set none

Workflow

Step 1: Validate Configuration

CONFIG_FILE="$HOME/.claude/ccpm-config.yaml"

if [[ ! -f "$CONFIG_FILE" ]]; then
  echo "❌ Error: No CCPM configuration found"
  echo ""
  echo "Create configuration:"
  echo "  /ccpm:project:add <project-id>"
  exit(1)
fi

Step 2: Handle Special Values

If $1 == "auto":

# Enable auto-detection
yq eval -i '.context.current_project = null' "$CONFIG_FILE"
yq eval -i '.context.detection.by_git_remote = true' "$CONFIG_FILE"
yq eval -i '.context.detection.by_cwd = true' "$CONFIG_FILE"

echo "✅ Auto-detection enabled"
echo ""
echo "CCPM will automatically detect your project based on:"
echo "  • Git remote URL"
echo "  • Current working directory"
echo "  • Custom detection patterns"
echo ""
echo "Test auto-detection:"
echo "  /ccpm:project:list  # Active project will be marked with ⭐"
exit(0)

If $1 == "none" or $1 == "clear":

# Clear active project
yq eval -i '.context.current_project = null' "$CONFIG_FILE"
yq eval -i '.context.detection.by_git_remote = false' "$CONFIG_FILE"
yq eval -i '.context.detection.by_cwd = false' "$CONFIG_FILE"

echo "✅ Active project cleared"
echo ""
echo "CCPM commands will now prompt you to select a project."
echo ""
echo "To set an active project:"
echo "  /ccpm:project:set <project-id>"
exit(0)

Step 3: Validate Project Exists

PROJECT_ID=$1

# Check if project exists in configuration
if ! yq eval ".projects.$PROJECT_ID" "$CONFIG_FILE" > /dev/null 2>&1; then
  echo "❌ Error: Project '$PROJECT_ID' not found"
  echo ""
  echo "Available projects:"
  yq eval '.projects | keys | .[]' "$CONFIG_FILE"
  echo ""
  echo "Add new project:"
  echo "  /ccpm:project:add $PROJECT_ID"
  exit(1)
fi

Step 4: Show Project Info

const projectConfig = await yq(`.projects.${projectId}`, CONFIG_FILE)

console.log(`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 Set Active Project: ${projectId}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Project Details:
  Name:        ${projectConfig.name}
  Description: ${projectConfig.description || "N/A"}
  Linear:      ${projectConfig.linear.team} / ${projectConfig.linear.project}
  Repository:  ${projectConfig.repository?.url || "N/A"}

This project will be used by default for all CCPM commands.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
`)

Step 5: Confirm (optional)

{
  questions: [{
    question: `Set '${projectId}' as your active project?`,
    header: "Confirm",
    multiSelect: false,
    options: [
      {
        label: "Yes, set as active",
        description: "Use this project by default"
      },
      {
        label: "No, cancel",
        description: "Don't change active project"
      }
    ]
  }]
}

Step 6: Set Active Project

# Set the active project
yq eval -i ".context.current_project = \"$PROJECT_ID\"" "$CONFIG_FILE"

# Optionally disable auto-detection to enforce this choice
yq eval -i '.context.detection.by_git_remote = false' "$CONFIG_FILE"
yq eval -i '.context.detection.by_cwd = false' "$CONFIG_FILE"

echo ""
echo "✅ Active project set to: $PROJECT_ID"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 This project will be used for:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "  • All CCPM planning commands"
echo "  • Implementation and verification commands"
echo "  • Project-specific custom commands"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Quick Start"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Create a task:"
echo "  /ccpm:planning:create \"Task title\""
echo "  (no project ID needed - uses active project)"
echo ""
echo "View project status:"
echo "  /ccpm:project:show $PROJECT_ID"
echo ""
echo "Change active project:"
echo "  /ccpm:project:set <different-project-id>"
echo ""
echo "Enable auto-detection:"
echo "  /ccpm:project:set auto"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

Auto-Detection vs Manual Setting

Manual Setting

When you explicitly set a project with /ccpm:project:set <project-id>:

  • Project is used everywhere, regardless of current directory
  • Auto-detection is disabled
  • Consistent project across all terminal sessions
  • Good for focused work on one project

Auto-Detection

When you enable auto-detection with /ccpm:project:set auto:

  • Project is detected based on:
    1. Git remote URL matching
    2. Current working directory path matching
    3. Custom detection patterns
  • Different directories can have different active projects
  • More flexible for multi-project work
  • Project changes as you cd between directories

Detection Methods

1. Git Remote URL Matching

# In ccpm-config.yaml
projects:
  my-app:
    repository:
      url: "https://github.com/company/my-app"

When by_git_remote: true:

cd ~/code/my-app
git remote get-url origin
# → https://github.com/company/my-app

# CCPM detects: "my-app" is active

2. Current Working Directory

# In ccpm-config.yaml
context:
  detection:
    patterns:
      - pattern: "*/my-app*"
        project: my-app
      - pattern: "*/frontend/*"
        project: my-fullstack-app

When by_cwd: true:

cd ~/code/my-app/src
# Path matches "*/my-app*"
# CCPM detects: "my-app" is active

cd ~/code/frontend/dashboard
# Path matches "*/frontend/*"
# CCPM detects: "my-fullstack-app" is active

3. Priority Order

If multiple detection methods match:

  1. Manual setting (highest priority)
  2. Git remote URL match
  3. Current working directory match
  4. Custom patterns

Examples

Example 1: Set active project

/ccpm:project:set my-app

# ✅ Active project set to: my-app
# All CCPM commands now default to this project

Example 2: Enable auto-detection

/ccpm:project:set auto

# ✅ Auto-detection enabled
# Project will be detected based on:
#   • Git remote URL
#   • Current directory

Example 3: Clear active project

/ccpm:project:set none

# ✅ Active project cleared
# CCPM will prompt for project selection

Example 4: Switch between projects

# Working on project A
/ccpm:project:set project-a
/ccpm:planning:create "Task for A"

# Switch to project B
/ccpm:project:set project-b
/ccpm:planning:create "Task for B"

# Back to auto-detection
/ccpm:project:set auto

Verification

After setting active project, verify with:

# See active project marked with ⭐
/ccpm:project:list

# Or view project details
/ccpm:project:show <project-id>

Notes

  • Active project setting is global (affects all terminal sessions)
  • Manual setting overrides auto-detection
  • Auto-detection is more flexible for multi-project work
  • Can switch projects anytime with /ccpm:project:set
  • Configuration file: ~/.claude/ccpm-config.yaml